去掉不必要的定时任务

This commit is contained in:
pengjie 2024-11-25 11:18:56 +08:00
parent 94026e1e85
commit 1c7ccf4a33
3 changed files with 460 additions and 460 deletions

View File

@ -93,25 +93,25 @@ public class ElectricalTask {
/** /**
* 获取电箱情况 每5分钟触发任务 * 获取电箱情况 每5分钟触发任务
*/ */
@Scheduled(cron = "0 30 * * * ?") // @Scheduled(cron = "0 30 * * * ?")
@RequestMapping("/xmgl/task/getElectricData") // @RequestMapping("/xmgl/task/getElectricData")
public void getElectricData() { // public void getElectricData() {
log.info("获取设备数据 每1分钟触发任务"); // log.info("获取设备数据 每1分钟触发任务");
JSONObject obj = getToken(); // JSONObject obj = getToken();
if (obj == null) { // if (obj == null) {
log.error("获取token失败"); // log.error("获取token失败");
} // }
String token = obj.getString("token"); // String token = obj.getString("token");
String hashId = obj.getJSONObject("account").getJSONObject("currentProject").getString("hashId"); // String hashId = obj.getJSONObject("account").getJSONObject("currentProject").getString("hashId");
List<String> devList = doGetElectricalData(token, hashId); // List<String> devList = doGetElectricalData(token, hashId);
devList.forEach(dev -> CompletableFuture.supplyAsync(() -> { // devList.forEach(dev -> CompletableFuture.supplyAsync(() -> {
return doAddElectricalData(dev, token); // return doAddElectricalData(dev, token);
}).exceptionally(throwable -> { // }).exceptionally(throwable -> {
log.error("err:", throwable); // log.error("err:", throwable);
return null; // return null;
}) // })
); // );
} // }
private List<String> doGetElectricalData(String token, String hashId) { private List<String> doGetElectricalData(String token, String hashId) {
HttpRequest post = HttpRequest.get(sadaHost + "/box/project/" + hashId); HttpRequest post = HttpRequest.get(sadaHost + "/box/project/" + hashId);

View File

@ -1,263 +1,263 @@
package com.zhgd.xmgl.task; //package com.zhgd.xmgl.task;
//
import cn.hutool.core.collection.CollUtil; //import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil; //import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil; //import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil; //import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray; //import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; //import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; //import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zhgd.redis.lock.RedisRepository; //import com.zhgd.redis.lock.RedisRepository;
import com.zhgd.xmgl.modules.project.entity.Project; //import com.zhgd.xmgl.modules.project.entity.Project;
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper; //import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
import com.zhgd.xmgl.modules.sewage.entity.SewageAlarm; //import com.zhgd.xmgl.modules.sewage.entity.SewageAlarm;
import com.zhgd.xmgl.modules.sewage.entity.SewageData; //import com.zhgd.xmgl.modules.sewage.entity.SewageData;
import com.zhgd.xmgl.modules.sewage.entity.SewageDev; //import com.zhgd.xmgl.modules.sewage.entity.SewageDev;
import com.zhgd.xmgl.modules.sewage.service.ISewageAlarmService; //import com.zhgd.xmgl.modules.sewage.service.ISewageAlarmService;
import com.zhgd.xmgl.modules.sewage.service.ISewageDataService; //import com.zhgd.xmgl.modules.sewage.service.ISewageDataService;
import com.zhgd.xmgl.modules.sewage.service.ISewageDevService; //import com.zhgd.xmgl.modules.sewage.service.ISewageDevService;
import com.zhgd.xmgl.util.RenZhiUtil; //import com.zhgd.xmgl.util.RenZhiUtil;
import lombok.extern.slf4j.Slf4j; //import lombok.extern.slf4j.Slf4j;
import net.javacrumbs.shedlock.core.SchedulerLock; //import net.javacrumbs.shedlock.core.SchedulerLock;
import org.jetbrains.annotations.Nullable; //import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy; //import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.annotation.Scheduled; //import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.RequestMapping; //import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; //import org.springframework.web.bind.annotation.RestController;
//
import javax.annotation.Resource; //import javax.annotation.Resource;
import java.util.*; //import java.util.*;
import java.util.function.Function; //import java.util.function.Function;
import java.util.stream.Collectors; //import java.util.stream.Collectors;
//
@Slf4j //@Slf4j
@RestController //@RestController
@RequestMapping("xmgl/task") //@RequestMapping("xmgl/task")
public class SewageTask { //public class SewageTask {
public static final String REDIS_RAIN_ALARM_TASK_START_TIME = "getSewageAlarmTaskStartTime"; // public static final String REDIS_RAIN_ALARM_TASK_START_TIME = "getSewageAlarmTaskStartTime";
public static final String DATA_VALUE = "dataValue"; // public static final String DATA_VALUE = "dataValue";
public static final String RECORD_TIME = "recordTime"; // public static final String RECORD_TIME = "recordTime";
@Resource // @Resource
@Lazy // @Lazy
private ISewageDataService sewageDataService; // private ISewageDataService sewageDataService;
@Resource // @Resource
@Lazy // @Lazy
private ISewageAlarmService sewageAlarmService; // private ISewageAlarmService sewageAlarmService;
@Resource // @Resource
@Lazy // @Lazy
private ISewageDevService sewageDevService; // private ISewageDevService sewageDevService;
@Lazy // @Lazy
@Autowired // @Autowired
private ProjectMapper projectMapper; // private ProjectMapper projectMapper;
@Lazy // @Lazy
@Autowired // @Autowired
private RedisRepository redisRepository; // private RedisRepository redisRepository;
//
/** // /**
* 获取实时数据 // * 获取实时数据
*/ // */
@Scheduled(cron = "0 */2 * * * ?") // @Scheduled(cron = "0 */2 * * * ?")
@SchedulerLock(name = "getSewageRecordTask", lockAtMostFor = 1000 * 60, lockAtLeastFor = 1000 * 60) // @SchedulerLock(name = "getSewageRecordTask", lockAtMostFor = 1000 * 60, lockAtLeastFor = 1000 * 60)
@RequestMapping("getSewageRecordTask") // @RequestMapping("getSewageRecordTask")
public void getSewageRecordTask() { // public void getSewageRecordTask() {
List<Project> projectList = projectMapper.selectList(new LambdaQueryWrapper<Project>() // List<Project> projectList = projectMapper.selectList(new LambdaQueryWrapper<Project>()
.ne(Project::getJnrzckAccount, "") // .ne(Project::getJnrzckAccount, "")
.ne(Project::getJnrzckPw, "") // .ne(Project::getJnrzckPw, "")
); // );
for (Project project : projectList) { // for (Project project : projectList) {
try { // try {
saveAllRecord(project); // saveAllRecord(project);
} catch (Exception e) { // } catch (Exception e) {
log.error("获取污水实时数据错误", e); // log.error("获取污水实时数据错误", e);
} // }
} // }
} // }
//
private void saveAllRecord(Project project) { // private void saveAllRecord(Project project) {
List<SewageDev> devs = sewageDevService.list(new LambdaQueryWrapper<SewageDev>().eq(SewageDev::getProjectSn, project.getProjectSn())); // List<SewageDev> devs = sewageDevService.list(new LambdaQueryWrapper<SewageDev>().eq(SewageDev::getProjectSn, project.getProjectSn()));
if (CollUtil.isEmpty(devs)) { // if (CollUtil.isEmpty(devs)) {
return; // return;
} // }
Map<String, SewageDev> devSnMap = devs.stream().collect(Collectors.toMap(SewageDev::getDevSn, Function.identity())); // Map<String, SewageDev> devSnMap = devs.stream().collect(Collectors.toMap(SewageDev::getDevSn, Function.identity()));
JSONArray datas = RenZhiUtil.getRealTimeDataByDeviceAddr(StrUtil.join(",", devs.stream().map(SewageDev::getDevSn).collect(Collectors.toList())), project.getJnrzckAccount(), project.getJnrzckPw()); // JSONArray datas = RenZhiUtil.getRealTimeDataByDeviceAddr(StrUtil.join(",", devs.stream().map(SewageDev::getDevSn).collect(Collectors.toList())), project.getJnrzckAccount(), project.getJnrzckPw());
if (CollUtil.isEmpty(datas)) { // if (CollUtil.isEmpty(datas)) {
log.info("污水获取实时数据为空,项目名称:{}", project.getProjectName()); // log.info("污水获取实时数据为空,项目名称:{}", project.getProjectName());
return; // return;
} // }
List<SewageData> records = new ArrayList<>(); // List<SewageData> records = new ArrayList<>();
for (int i = 0; i < datas.size(); i++) { // for (int i = 0; i < datas.size(); i++) {
JSONObject dataJo = datas.getJSONObject(i); // JSONObject dataJo = datas.getJSONObject(i);
JSONArray dataItemJa = dataJo.getJSONArray("dataItem"); // JSONArray dataItemJa = dataJo.getJSONArray("dataItem");
String deviceAddr = dataJo.getString("deviceAddr"); // String deviceAddr = dataJo.getString("deviceAddr");
//normal:正常 // //normal:正常
//alarming:报警 // //alarming:报警
//preAlarming:预警 // //preAlarming:预警
//offline:离线 // //offline:离线
String deviceStatus = dataJo.getString("deviceStatus"); // String deviceStatus = dataJo.getString("deviceStatus");
SewageData record = new SewageData(); // SewageData record = new SewageData();
SewageDev dev = devSnMap.get(deviceAddr); // SewageDev dev = devSnMap.get(deviceAddr);
if (CollUtil.isNotEmpty(dataItemJa)) { // if (CollUtil.isNotEmpty(dataItemJa)) {
for (int j = 0; j < dataItemJa.size(); j++) { // for (int j = 0; j < dataItemJa.size(); j++) {
JSONObject itemJo = dataItemJa.getJSONObject(j); // JSONObject itemJo = dataItemJa.getJSONObject(j);
Integer nodeId = itemJo.getInteger("nodeId"); // Integer nodeId = itemJo.getInteger("nodeId");
JSONArray registerItemJa = itemJo.getJSONArray("registerItem"); // JSONArray registerItemJa = itemJo.getJSONArray("registerItem");
if (nodeId == 7) { // if (nodeId == 7) {
//工业 PH工业 EC // //工业 PH工业 EC
record.setPhValue(getDouble(registerItemJa, 0)); // record.setPhValue(getDouble(registerItemJa, 0));
record.setConductivity(getDouble(registerItemJa, 1)); // record.setConductivity(getDouble(registerItemJa, 1));
} else if (nodeId == 8) { // } else if (nodeId == 8) {
//水质浊度水质溶解氧 // //水质浊度水质溶解氧
record.setTurbidityValue(getDouble(registerItemJa, 0)); // record.setTurbidityValue(getDouble(registerItemJa, 0));
record.setDissolvedOxygen(getDouble(registerItemJa, 1)); // record.setDissolvedOxygen(getDouble(registerItemJa, 1));
} else if (nodeId == 29) { // } else if (nodeId == 29) {
//实时流量雷达流量计液位高 // //实时流量雷达流量计液位高
record.setWaterLevel(Optional.ofNullable(getDouble(registerItemJa, 1)).map(m -> NumberUtil.div(m.doubleValue(), 1000D, 5)).orElse(null)); // record.setWaterLevel(Optional.ofNullable(getDouble(registerItemJa, 1)).map(m -> NumberUtil.div(m.doubleValue(), 1000D, 5)).orElse(null));
} else if (nodeId == 31) { // } else if (nodeId == 31) {
//累计水量流速 // //累计水量流速
record.setFlowVelocity(Optional.ofNullable(getDouble(registerItemJa, 0)).map(m -> NumberUtil.div(m.doubleValue(), 100D, 5)).orElse(null)); // record.setFlowVelocity(Optional.ofNullable(getDouble(registerItemJa, 0)).map(m -> NumberUtil.div(m.doubleValue(), 100D, 5)).orElse(null));
} // }
// record.setWaterTemperature(getDouble(registerItemJa, 0)); //// record.setWaterTemperature(getDouble(registerItemJa, 0));
} // }
record.setCreateDate(new Date(dataJo.getLong("timeStamp"))); // record.setCreateDate(new Date(dataJo.getLong("timeStamp")));
record.setDevSn(deviceAddr); // record.setDevSn(deviceAddr);
record.setProjectSn(dev.getProjectSn()); // record.setProjectSn(dev.getProjectSn());
records.add(record); // records.add(record);
} // }
} // }
if (CollUtil.isNotEmpty(records)) { // if (CollUtil.isNotEmpty(records)) {
for (SewageData record : records) { // for (SewageData record : records) {
sewageDataService.add(record); // sewageDataService.add(record);
} // }
} // }
} // }
//
private String getString(JSONArray registerItemJa, int index) { // private String getString(JSONArray registerItemJa, int index) {
return Optional.ofNullable(registerItemJa.getJSONObject(index)).map(o -> o.getString("data")).orElse(null); // return Optional.ofNullable(registerItemJa.getJSONObject(index)).map(o -> o.getString("data")).orElse(null);
} // }
//
@Nullable // @Nullable
private Double getDouble(JSONArray registerItemJa, int index) { // private Double getDouble(JSONArray registerItemJa, int index) {
return Optional.ofNullable(registerItemJa.getJSONObject(index)).map(o -> o.getDouble("data")).orElse(null); // return Optional.ofNullable(registerItemJa.getJSONObject(index)).map(o -> o.getDouble("data")).orElse(null);
} // }
//
/** // /**
* 获取报警数据 // * 获取报警数据
*/ // */
@Scheduled(cron = "0 */6 * * * ?") // @Scheduled(cron = "0 */6 * * * ?")
@SchedulerLock(name = "getSewageAlarmTask", lockAtMostFor = 1000 * 60 * 5, lockAtLeastFor = 1000 * 60 * 3) // @SchedulerLock(name = "getSewageAlarmTask", lockAtMostFor = 1000 * 60 * 5, lockAtLeastFor = 1000 * 60 * 3)
@RequestMapping("getSewageAlarmTask") // @RequestMapping("getSewageAlarmTask")
public void getRainAlarmTask() { // public void getRainAlarmTask() {
List<Project> projectList = projectMapper.selectList(new LambdaQueryWrapper<Project>() // List<Project> projectList = projectMapper.selectList(new LambdaQueryWrapper<Project>()
.ne(Project::getJnrzckAccount, "") // .ne(Project::getJnrzckAccount, "")
.ne(Project::getJnrzckPw, "") // .ne(Project::getJnrzckPw, "")
); // );
String start; // String start;
Object o = redisRepository.get(REDIS_RAIN_ALARM_TASK_START_TIME); // Object o = redisRepository.get(REDIS_RAIN_ALARM_TASK_START_TIME);
if (o != null) { // if (o != null) {
start = o.toString(); // start = o.toString();
} else { // } else {
start = DateUtil.format(DateUtil.offsetMinute(new Date(), -5), "yyyy-MM-dd HH:mm"); // start = DateUtil.format(DateUtil.offsetMinute(new Date(), -5), "yyyy-MM-dd HH:mm");
} // }
String end = DateUtil.format(new Date(), "yyyy-MM-dd HH:mm"); // String end = DateUtil.format(new Date(), "yyyy-MM-dd HH:mm");
redisRepository.set(REDIS_RAIN_ALARM_TASK_START_TIME, end); // redisRepository.set(REDIS_RAIN_ALARM_TASK_START_TIME, end);
for (Project project : projectList) { // for (Project project : projectList) {
try { // try {
saveAllAlarm(project, start, end); // saveAllAlarm(project, start, end);
} catch (Exception e) { // } catch (Exception e) {
log.error("获取污水报警数据错误", e); // log.error("获取污水报警数据错误", e);
} // }
} // }
//
} // }
//
private void saveAllAlarm(Project project, String start, String end) throws InterruptedException { // private void saveAllAlarm(Project project, String start, String end) throws InterruptedException {
List<SewageDev> devs = sewageDevService.list(new LambdaQueryWrapper<SewageDev>().eq(SewageDev::getProjectSn, project.getProjectSn())); // List<SewageDev> devs = sewageDevService.list(new LambdaQueryWrapper<SewageDev>().eq(SewageDev::getProjectSn, project.getProjectSn()));
if (CollUtil.isEmpty(devs)) { // if (CollUtil.isEmpty(devs)) {
return; // return;
} // }
ArrayList<SewageAlarm> alarms = new ArrayList<>(); // ArrayList<SewageAlarm> alarms = new ArrayList<>();
String token = RenZhiUtil.getToken(project.getJnrzckAccount(), project.getJnrzckPw()); // String token = RenZhiUtil.getToken(project.getJnrzckAccount(), project.getJnrzckPw());
for (SewageDev dev : devs) { // for (SewageDev dev : devs) {
JSONArray dataJa = RenZhiUtil.getAlarmRecordList(dev.getDevSn(), token, -1, start, end); // JSONArray dataJa = RenZhiUtil.getAlarmRecordList(dev.getDevSn(), token, -1, start, end);
Thread.sleep(200); // Thread.sleep(200);
if (CollUtil.isEmpty(dataJa)) { // if (CollUtil.isEmpty(dataJa)) {
continue; // continue;
} // }
for (int j = 0; j < dataJa.size(); j++) { // for (int j = 0; j < dataJa.size(); j++) {
JSONObject jo = dataJa.getJSONObject(j); // JSONObject jo = dataJa.getJSONObject(j);
String recordId = jo.getString("recordId"); // String recordId = jo.getString("recordId");
SewageAlarm alarm = new SewageAlarm(); // SewageAlarm alarm = new SewageAlarm();
alarm.setDevSn(jo.getString("deviceAddr")); // alarm.setDevSn(jo.getString("deviceAddr"));
alarm.setMonitorParam(jo.getString("factorName")); // alarm.setMonitorParam(jo.getString("factorName"));
alarm.setMonitorValue(jo.getDouble("dataValue")); // alarm.setMonitorValue(jo.getDouble("dataValue"));
alarm.setAlarmDetail(getAlarmContent(jo)); // alarm.setAlarmDetail(getAlarmContent(jo));
alarm.setAlarmTime(new Date(jo.getLong("recordTime"))); // alarm.setAlarmTime(new Date(jo.getLong("recordTime")));
alarm.setProjectSn(project.getProjectSn()); // alarm.setProjectSn(project.getProjectSn());
alarm.setAlarmType(getAlarmType(jo)); // alarm.setAlarmType(getAlarmType(jo));
// alarm.setSewageDataId(0L); //// alarm.setSewageDataId(0L);
// alarm.setSewageType(0); //// alarm.setSewageType(0);
alarms.add(alarm); // alarms.add(alarm);
} // }
} // }
sewageAlarmService.saveBatch(alarms); // sewageAlarmService.saveBatch(alarms);
} // }
//
private Integer getAlarmType(JSONObject jo) { // private Integer getAlarmType(JSONObject jo) {
if (!Objects.equals(jo.get("alarmLevel"), 2) && !Objects.equals(jo.get("alarmLevel"), 3)) { // if (!Objects.equals(jo.get("alarmLevel"), 2) && !Objects.equals(jo.get("alarmLevel"), 3)) {
return 2; // return 2;
} else { // } else {
return 1; // return 1;
} // }
} // }
//
private String getAlarmContent(JSONObject jo) { // private String getAlarmContent(JSONObject jo) {
/* // /*
alarmLevel int 报警级别: // alarmLevel int 报警级别:
25 // 25
1: 报警(超报警上限) // 1: 报警(超报警上限)
2: 预警(超预警上限) // 2: 预警(超预警上限)
3: 预警(超预警下限) // 3: 预警(超预警下限)
4报警(超报警下限) // 4报警(超报警下限)
-1: 离线报警 // -1: 离线报警
-2遥调(开关量)报警 // -2遥调(开关量)报警
dataValue Double 报警值 // dataValue Double 报警值
alarmRange String 报警限值 // alarmRange String 报警限值
*/ // */
String factorName = jo.getString("factorName"); // String factorName = jo.getString("factorName");
Integer alarmLevel = jo.getInteger("alarmLevel"); // Integer alarmLevel = jo.getInteger("alarmLevel");
if (Objects.equals(alarmLevel, 1) || Objects.equals(alarmLevel, 2) || Objects.equals(alarmLevel, 3) || Objects.equals(alarmLevel, 4)) { // if (Objects.equals(alarmLevel, 1) || Objects.equals(alarmLevel, 2) || Objects.equals(alarmLevel, 3) || Objects.equals(alarmLevel, 4)) {
return StrUtil.format("{} {},报警值:{},报警限值:{}", factorName, getAlarmLevelStr(alarmLevel), jo.getDouble(DATA_VALUE), jo.getString("alarmRange")); // return StrUtil.format("{} {},报警值:{},报警限值:{}", factorName, getAlarmLevelStr(alarmLevel), jo.getDouble(DATA_VALUE), jo.getString("alarmRange"));
} else { // } else {
return StrUtil.format("{} {},报警值:{}", factorName, getAlarmLevelStr(alarmLevel), jo.getString(DATA_VALUE)); // return StrUtil.format("{} {},报警值:{}", factorName, getAlarmLevelStr(alarmLevel), jo.getString(DATA_VALUE));
} // }
} // }
//
private String getAlarmLevelStr(Integer alarmLevel) { // private String getAlarmLevelStr(Integer alarmLevel) {
String s = ""; // String s = "";
switch (alarmLevel) { // switch (alarmLevel) {
case 1: // case 1:
s = "报警(超报警上限)"; // s = "报警(超报警上限)";
break; // break;
case 2: // case 2:
s = "预警(超预警上限)"; // s = "预警(超预警上限)";
break; // break;
case 3: // case 3:
s = "预警(超预警下限)"; // s = "预警(超预警下限)";
break; // break;
case 4: // case 4:
s = "报警(超报警下限)"; // s = "报警(超报警下限)";
break; // break;
case -1: // case -1:
s = "离线报警"; // s = "离线报警";
break; // break;
case -2: // case -2:
s = "遥调(开关量)报警"; // s = "遥调(开关量)报警";
break; // break;
default: // default:
} // }
return s; // return s;
} // }
//
//
} //}

View File

@ -1,178 +1,178 @@
package com.zhgd.xmgl.task; //package com.zhgd.xmgl.task;
//
import cn.hutool.core.bean.BeanUtil; //import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; //import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.gexin.fastjson.JSON; //import com.gexin.fastjson.JSON;
import com.gexin.fastjson.JSONArray; //import com.gexin.fastjson.JSONArray;
import com.gexin.fastjson.JSONObject; //import com.gexin.fastjson.JSONObject;
import com.glodon.cloudt.rest.client.RestServiceClient; //import com.glodon.cloudt.rest.client.RestServiceClient;
import com.glodon.cloudt.rest.client.data.HmacRestAuthInfo; //import com.glodon.cloudt.rest.client.data.HmacRestAuthInfo;
import com.glodon.cloudt.rest.client.data.RestResponseInfo; //import com.glodon.cloudt.rest.client.data.RestResponseInfo;
import com.glodon.cloudt.rest.client.exception.AuthenticateException; //import com.glodon.cloudt.rest.client.exception.AuthenticateException;
import com.glodon.cloudt.rest.client.exception.InvalidUriException; //import com.glodon.cloudt.rest.client.exception.InvalidUriException;
import com.glodon.cloudt.rest.client.exception.NoAuthenticateException; //import com.glodon.cloudt.rest.client.exception.NoAuthenticateException;
import com.glodon.cloudt.rest.client.impl.HmacRestServiceClient; //import com.glodon.cloudt.rest.client.impl.HmacRestServiceClient;
import com.google.common.base.Objects; //import com.google.common.base.Objects;
import com.zhgd.xmgl.modules.project.entity.Project; //import com.zhgd.xmgl.modules.project.entity.Project;
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper; //import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
import com.zhgd.xmgl.modules.stablewater.entity.StableWaterMixStationData; //import com.zhgd.xmgl.modules.stablewater.entity.StableWaterMixStationData;
import com.zhgd.xmgl.modules.stablewater.entity.StableWaterMixStationRawMaterialData; //import com.zhgd.xmgl.modules.stablewater.entity.StableWaterMixStationRawMaterialData;
import com.zhgd.xmgl.modules.stablewater.entity.StableWaterMixStationSetData; //import com.zhgd.xmgl.modules.stablewater.entity.StableWaterMixStationSetData;
import com.zhgd.xmgl.modules.stablewater.mapper.StableWaterMixStationDataMapper; //import com.zhgd.xmgl.modules.stablewater.mapper.StableWaterMixStationDataMapper;
import com.zhgd.xmgl.modules.stablewater.service.IStableWaterMixStationDataService; //import com.zhgd.xmgl.modules.stablewater.service.IStableWaterMixStationDataService;
import com.zhgd.xmgl.util.ThirdPartRequestUtil; //import com.zhgd.xmgl.util.ThirdPartRequestUtil;
import lombok.extern.slf4j.Slf4j; //import lombok.extern.slf4j.Slf4j;
import net.javacrumbs.shedlock.core.SchedulerLock; //import net.javacrumbs.shedlock.core.SchedulerLock;
import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled; //import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; //import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping; //import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; //import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; //import org.springframework.web.bind.annotation.RestController;
//
import java.text.SimpleDateFormat; //import java.text.SimpleDateFormat;
import java.util.ArrayList; //import java.util.ArrayList;
import java.util.List; //import java.util.List;
//
/** ///**
* 水稳拌合站任务 // * 水稳拌合站任务
*/ // */
@Slf4j //@Slf4j
@Component //@Component
@RestController //@RestController
public class StableWaterMixStationTask { //public class StableWaterMixStationTask {
@Autowired // @Autowired
ThirdPartRequestUtil thirdPartRequestUtil; // ThirdPartRequestUtil thirdPartRequestUtil;
@Autowired // @Autowired
IStableWaterMixStationDataService stableWaterMixStationDataService; // IStableWaterMixStationDataService stableWaterMixStationDataService;
@Autowired // @Autowired
StableWaterMixStationDataMapper stableWaterMixStationDataMapper; // StableWaterMixStationDataMapper stableWaterMixStationDataMapper;
@Autowired // @Autowired
ProjectMapper projectMapper; // ProjectMapper projectMapper;
//
//
/** // /**
* 每5分钟拉取广联达的搅拌站数据https://xmgl.glodon.com/wl/docs/third_help/part2/openapi/pull/mixTotal.html // * 每5分钟拉取广联达的搅拌站数据https://xmgl.glodon.com/wl/docs/third_help/part2/openapi/pull/mixTotal.html
*/ // */
@Scheduled(cron = "0 0/5 * * * ?") // @Scheduled(cron = "0 0/5 * * * ?")
@SchedulerLock(name = "executeStableWaterMixStationTask", lockAtMostFor = 1000 * 60 * 2, lockAtLeastFor = 1000 * 60 * 1) // @SchedulerLock(name = "executeStableWaterMixStationTask", lockAtMostFor = 1000 * 60 * 2, lockAtLeastFor = 1000 * 60 * 1)
@RequestMapping("xmgl/task/executeStableWaterMixStationTask") // @RequestMapping("xmgl/task/executeStableWaterMixStationTask")
public void executeStableWaterMixStationTask() { // public void executeStableWaterMixStationTask() {
log.info("定时拉取广联达的搅拌站数据任务开始"); // log.info("定时拉取广联达的搅拌站数据任务开始");
List<Project> projects = projectMapper.selectList(new LambdaQueryWrapper<Project>() // List<Project> projects = projectMapper.selectList(new LambdaQueryWrapper<Project>()
.isNotNull(Project::getGldLicPath) // .isNotNull(Project::getGldLicPath)
.ne(Project::getGldLicPath, "") // .ne(Project::getGldLicPath, "")
); // );
for (Project project : projects) { // for (Project project : projects) {
StableWaterMixStationData data = stableWaterMixStationDataMapper.selectOne(new LambdaQueryWrapper<StableWaterMixStationData>() // StableWaterMixStationData data = stableWaterMixStationDataMapper.selectOne(new LambdaQueryWrapper<StableWaterMixStationData>()
.eq(StableWaterMixStationData::getProjectSn, project.getProjectSn()) // .eq(StableWaterMixStationData::getProjectSn, project.getProjectSn())
.orderByDesc(StableWaterMixStationData::getTimestamp) // .orderByDesc(StableWaterMixStationData::getTimestamp)
.last("limit 1") // .last("limit 1")
); // );
String timestamp; // String timestamp;
if (data != null) { // if (data != null) {
timestamp = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(data.getTimestamp()); // timestamp = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(data.getTimestamp());
} else { // } else {
timestamp = "20230101141314082"; // timestamp = "20230101141314082";
} // }
sendHttp(project, timestamp); // sendHttp(project, timestamp);
} // }
} // }
//
private void sendHttp(Project project, String timestamp) { // private void sendHttp(Project project, String timestamp) {
try { // try {
log.info("定时拉取广联达的搅拌站数据任务开始:项目名称:{} 项目sn{} timestamp{}", project.getProjectName(), project.getProjectSn(), timestamp); // log.info("定时拉取广联达的搅拌站数据任务开始:项目名称:{} 项目sn{} timestamp{}", project.getProjectName(), project.getProjectSn(), timestamp);
/**----------------准备 -------------------*/ // /**----------------准备 -------------------*/
//第1步下载授权文件 // //第1步下载授权文件
//第2步获取SDK // //第2步获取SDK
/** ------------ 授权认证 --------------*/ // /** ------------ 授权认证 --------------*/
//
//第3步创建客户端实例 // //第3步创建客户端实例
RestServiceClient serviceClient = HmacRestServiceClient.getInstance(); // RestServiceClient serviceClient = HmacRestServiceClient.getInstance();
//第4步加载/验证授权文件 // //第4步加载/验证授权文件
//4.1构建认证信息 // //4.1构建认证信息
HmacRestAuthInfo restAuthInfo = new HmacRestAuthInfo(); // HmacRestAuthInfo restAuthInfo = new HmacRestAuthInfo();
//4.2设置授权文件路径 // //4.2设置授权文件路径
restAuthInfo.setLicPath(project.getGldLicPath()); // restAuthInfo.setLicPath(project.getGldLicPath());
//4.3权限认证 // //4.3权限认证
serviceClient.authenticate(restAuthInfo); // serviceClient.authenticate(restAuthInfo);
//
/** ------------ 拼接请求地址 --------------*/ // /** ------------ 拼接请求地址 --------------*/
//第5步获取授权文件关联的GYS系统地址hostAddress // //第5步获取授权文件关联的GYS系统地址hostAddress
String hostAddress = serviceClient.getRestRootAddress(); // String hostAddress = serviceClient.getRestRootAddress();
//第6步设置请求接口的URI地址apiURI(以获取集成项目列表信息为例) // //第6步设置请求接口的URI地址apiURI(以获取集成项目列表信息为例)
String apiUri = String.format("/api/mix/v1.0/mix/product/getMachineProductList?beginTimestamp=%s", timestamp); // String apiUri = String.format("/api/mix/v1.0/mix/product/getMachineProductList?beginTimestamp=%s", timestamp);
//第7步拼装完整的请求网址 // //第7步拼装完整的请求网址
String fullUrl = hostAddress + apiUri; // String fullUrl = hostAddress + apiUri;
//第8步请求数据准备本例中为从GYS系统获取数据无需进行请求数据的准备 // //第8步请求数据准备本例中为从GYS系统获取数据无需进行请求数据的准备
//
log.info("url:{}", fullUrl); // log.info("url:{}", fullUrl);
//第9步发送请求用来推送/获取数据 // //第9步发送请求用来推送/获取数据
RestResponseInfo restResponseInfo = serviceClient.get(fullUrl); // RestResponseInfo restResponseInfo = serviceClient.get(fullUrl);
log.info("rs:{}", JSON.toJSONString(restResponseInfo)); // log.info("rs:{}", JSON.toJSONString(restResponseInfo));
//
//
/** ------------ 处理请求返回结果 --------------*/ // /** ------------ 处理请求返回结果 --------------*/
if (restResponseInfo.isSuccess()) { // if (restResponseInfo.isSuccess()) {
//请求成功 // //请求成功
//第10步处理请求结果第三方系统自行处理 // //第10步处理请求结果第三方系统自行处理
String stringContent = restResponseInfo.getStringContent(); // String stringContent = restResponseInfo.getStringContent();
JSONObject scjo = JSON.parseObject(stringContent); // JSONObject scjo = JSON.parseObject(stringContent);
if (scjo.getBoolean("success")) { // if (scjo.getBoolean("success")) {
saveData(scjo.getJSONObject("data"), project); // saveData(scjo.getJSONObject("data"), project);
JSONObject dataJo = scjo.getJSONObject("data"); // JSONObject dataJo = scjo.getJSONObject("data");
//继续发送http查询未保存的数据 // //继续发送http查询未保存的数据
if (!Objects.equal(dataJo.getInteger("PageSize"), 0)) { // if (!Objects.equal(dataJo.getInteger("PageSize"), 0)) {
sendHttp(project, dataJo.getString("MaxTimestamp")); // sendHttp(project, dataJo.getString("MaxTimestamp"));
} // }
} else { // } else {
log.error("失败未知原因1"); // log.error("失败未知原因1");
} // }
} else { // } else {
//请求失败: // //请求失败:
//第11步根据返回结果排查失败原因数据原因第三方系统自行处理 // //第11步根据返回结果排查失败原因数据原因第三方系统自行处理
log.error("失败未知原因2"); // log.error("失败未知原因2");
} // }
} catch (AuthenticateException e) { // } catch (AuthenticateException e) {
log.error("error", e); // log.error("error", e);
} catch (InvalidUriException e) { // } catch (InvalidUriException e) {
log.error("error", e); // log.error("error", e);
} catch (NoAuthenticateException e) { // } catch (NoAuthenticateException e) {
log.error("error", e); // log.error("error", e);
} // }
} // }
//
private void saveData(JSONObject dataJo, Project project) { // private void saveData(JSONObject dataJo, Project project) {
//保存拌合站设备一个项目级别的授权文件对应我们的一个项目他们的一个项目有多个拌合站属性是projectId和我们设备对应一个拌合站有多个机组我们不体现 // //保存拌合站设备一个项目级别的授权文件对应我们的一个项目他们的一个项目有多个拌合站属性是projectId和我们设备对应一个拌合站有多个机组我们不体现
//保存拌合站数据 // //保存拌合站数据
JSONArray bills = dataJo.getJSONArray("Bills"); // JSONArray bills = dataJo.getJSONArray("Bills");
for (Object bill : bills) { // for (Object bill : bills) {
StableWaterMixStationData data = new StableWaterMixStationData(); // StableWaterMixStationData data = new StableWaterMixStationData();
List<StableWaterMixStationSetData> setDataList = new ArrayList<>(); // List<StableWaterMixStationSetData> setDataList = new ArrayList<>();
data.setSetDataList(setDataList); // data.setSetDataList(setDataList);
BeanUtil.copyProperties(bill, data, true); // BeanUtil.copyProperties(bill, data, true);
data.setDevSn(((JSONObject) bill).getString("projectId")); // data.setDevSn(((JSONObject) bill).getString("projectId"));
JSONArray pcList = ((JSONObject) bill).getJSONArray("PCList"); // JSONArray pcList = ((JSONObject) bill).getJSONArray("PCList");
for (Object pc : pcList) { // for (Object pc : pcList) {
StableWaterMixStationSetData setData = new StableWaterMixStationSetData(); // StableWaterMixStationSetData setData = new StableWaterMixStationSetData();
BeanUtil.copyProperties(pc, setData, true); // BeanUtil.copyProperties(pc, setData, true);
setDataList.add(setData); // setDataList.add(setData);
List<StableWaterMixStationRawMaterialData> rawMaterialDataList = new ArrayList<>(); // List<StableWaterMixStationRawMaterialData> rawMaterialDataList = new ArrayList<>();
setData.setRawMaterialDataList(rawMaterialDataList); // setData.setRawMaterialDataList(rawMaterialDataList);
JSONArray ycList = ((JSONObject) pc).getJSONArray("YCList"); // JSONArray ycList = ((JSONObject) pc).getJSONArray("YCList");
for (Object yc : ycList) { // for (Object yc : ycList) {
StableWaterMixStationRawMaterialData rawMaterialData = new StableWaterMixStationRawMaterialData(); // StableWaterMixStationRawMaterialData rawMaterialData = new StableWaterMixStationRawMaterialData();
BeanUtil.copyProperties(yc, rawMaterialData, true); // BeanUtil.copyProperties(yc, rawMaterialData, true);
rawMaterialDataList.add(rawMaterialData); // rawMaterialDataList.add(rawMaterialData);
} // }
} // }
try { // try {
stableWaterMixStationDataService.add(data); // stableWaterMixStationDataService.add(data);
} catch (Exception e) { // } catch (Exception e) {
log.error("error", e); // log.error("error", e);
log.info("新增出错:{},编号:{}", e.getMessage(), data.getDevSn()); // log.info("新增出错:{},编号:{}", e.getMessage(), data.getDevSn());
} // }
} // }
} // }
//
} //}