package com.zhgd.xmgl.task; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.glodon.cloudt.rest.client.RestServiceClient; import com.glodon.cloudt.rest.client.data.HmacRestAuthInfo; import com.glodon.cloudt.rest.client.data.RestResponseInfo; import com.glodon.cloudt.rest.client.exception.AuthenticateException; import com.glodon.cloudt.rest.client.exception.InvalidUriException; import com.glodon.cloudt.rest.client.exception.NoAuthenticateException; import com.glodon.cloudt.rest.client.impl.HmacRestServiceClient; import com.zhgd.xmgl.modules.project.entity.Project; import com.zhgd.xmgl.modules.project.mapper.ProjectMapper; import com.zhgd.xmgl.modules.stablewater.service.IStableWaterMixStationDataService; import com.zhgd.xmgl.util.ThirdPartRequestUtil; import lombok.extern.log4j.Log4j; import net.javacrumbs.shedlock.core.SchedulerLock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * 水稳拌合站任务 */ @Log4j @Component @RestController public class StableWaterMixStationTask { @Autowired ThirdPartRequestUtil thirdPartRequestUtil; @Autowired IStableWaterMixStationDataService stableWaterMixStationDataService; @Autowired ProjectMapper projectMapper; /** * 定时拉取广联达的搅拌站数据,https://xmgl.glodon.com/wl/docs/third_help/part2/openapi/pull/mixTotal.html */ @Scheduled(cron = "0 2 0 * * ?") @SchedulerLock(name = "executeStableWaterMixStationTask", lockAtMostFor = 1000 * 60 * 2, lockAtLeastFor = 1000 * 60 * 1) @GetMapping("1204") // to do public void executeTask() { log.info("定时拉取广联达的搅拌站数据任务开始"); List projects = projectMapper.selectList(new LambdaQueryWrapper() .isNotNull(Project::getGldProjectId) .ne(Project::getGldProjectId, "") ); //for (Project project : projects) { sendHttp(null); //} } private void sendHttp(Project project) { try { /**----------------准备 -------------------*/ //第1步:下载授权文件 //第2步:获取SDK /** ------------ 授权认证 --------------*/ //第3步:创建客户端实例 RestServiceClient serviceClient = HmacRestServiceClient.getInstance(); //第4步:加载/验证授权文件 //4.1构建认证信息 HmacRestAuthInfo restAuthInfo = new HmacRestAuthInfo(); //4.2设置授权文件路径 restAuthInfo.setLicPath("C:\\Users\\Administrator\\Desktop\\auth.lic"); //restAuthInfo.setLicPath(project.getGldLicPath()); //4.3权限认证 serviceClient.authenticate(restAuthInfo); /** ------------ 拼接请求地址 --------------*/ //第5步:获取授权文件关联的GYS系统地址hostAddress String hostAddress = serviceClient.getRestRootAddress(); //第6步:设置请求接口的URI地址apiURI(以获取集成项目列表信息为例) //String apiURI = "/api/inspection/v1.0/project/getTenantHasCodeProject"; String apiURI = String.format("/api/mix/v1.0/mix/product/getMachineProductList?projectId=%s&beginTimestamp=20170710101010000", "672804614860800"); //String apiURI = String.format("/api/mix/v1.0/mix/product/getMachineProductList?projectId=%s&beginTimestamp=20170710101010000", project.getGldProjectId()); //第7步:拼装完整的请求网址 String fullURL = hostAddress + apiURI; //第8步:请求数据准备(本例中为从GYS系统获取数据,无需进行请求数据的准备) //第9步:发送请求,用来推送/获取数据 RestResponseInfo restResponseInfo = serviceClient.get(fullURL); /** ------------ 处理请求返回结果 --------------*/ if (restResponseInfo.isSuccess()) { //请求成功: //第10步:处理请求结果(第三方系统自行处理) System.out.println(restResponseInfo.getStringContent()); save(restResponseInfo.getStringContent(), project); } else { //请求失败: //第11步:根据返回结果排查失败原因(数据原因第三方系统自行处理) } } catch (AuthenticateException e) { e.printStackTrace(); } catch (InvalidUriException e) { e.printStackTrace(); } catch (NoAuthenticateException e) { e.printStackTrace(); } } private void save(String stringContent, Project project) { //String projectId = "672804614860800"; //String url = String.format("/api/mix/v1.0/mix/product/getMachineProductList?projectId=%s&beginTimestamp=20170710101010000", projectId); //String rs = thirdPartRequestUtil.get(url); //JSONObject jo = JSON.parseObject(rs); //if (Objects.equals(jo.getBoolean("success"), true)) { // JSONObject dataJson = jo.getJSONObject("data"); // JSONArray bills = dataJson.getJSONArray("Bills"); // for (Object bill : bills) { // StableWaterMixStationData data = new StableWaterMixStationData(); // List setDataList = new ArrayList<>(); // data.setSetDataList(setDataList); // BeanUtil.copyProperties(bill, data, true); // JSONArray pcList = ((JSONObject) bill).getJSONArray("PCList"); // for (Object pc : pcList) { // StableWaterMixStationSetData setData = new StableWaterMixStationSetData(); // BeanUtil.copyProperties(pc, setData, true); // setDataList.add(setData); // List rawMaterialDataList = new ArrayList<>(); // setData.setRawMaterialDataList(rawMaterialDataList); // JSONArray ycList = ((JSONObject) pc).getJSONArray("YCList"); // for (Object yc : ycList) { // StableWaterMixStationRawMaterialData rawMaterialData = new StableWaterMixStationRawMaterialData(); // BeanUtil.copyProperties(yc, rawMaterialData, true); // rawMaterialDataList.add(rawMaterialData); // } // } // stableWaterMixStationDataService.add(data); // } //} } }