wisdomisite-java/src/main/java/com/zhgd/xmgl/task/ElectricalTask.java
2023-02-16 15:28:15 +08:00

92 lines
3.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.zhgd.xmgl.task;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zhgd.xmgl.modules.electrical.entity.ElectricalData;
import com.zhgd.xmgl.modules.electrical.entity.ElectricalDev;
import com.zhgd.xmgl.modules.electrical.service.IElectricalDataService;
import com.zhgd.xmgl.modules.electrical.service.IElectricalDevService;
import com.zhgd.xmgl.util.XiwonUtil;
import lombok.extern.slf4j.Slf4j;
import net.javacrumbs.shedlock.core.SchedulerLock;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
/**
* @author 邱平毅
* @ClassName ElectricalTask
* @date 2022/11/15 14:02
* @Version 1.0
* 电箱定时任务
*/
@Slf4j
@Component
public class ElectricalTask {
@Resource
private IElectricalDataService electricalDataService;
@Resource
private IElectricalDevService electricalDevService;
@Value("${xiwon.postElectricRealTimeData}")
private String postElectricRealTimeData;
@Resource
private XiwonUtil xiwonUtil;
@Value("${xiwon.appId}")
private String appId;
/**
* 获取最新电量使用情况 每5分钟触发任务
*/
@SchedulerLock(name = "getElectricRealTimeData", lockAtMostFor = 1000 * 60 * 5, lockAtLeastFor = 1000 * 60 * 3)
@Scheduled(cron = "0 0/5 * * * ?")
public void getElectricRealTimeData() {
// 请求参数
Map<String, Object> map = new HashMap<>(4);
map.put("state", 0);
map.put("pageSize", "1");
map.put("pageNum", "1");
// 获取所有
List<ElectricalDev> devList = electricalDevService.list();
// TODO 待处理最后一条数据重复插入
devList.forEach(dev -> CompletableFuture.supplyAsync(() -> {
// 设备sn
String devSn = dev.getDevSn();
// 请求携稳的接口
JSONObject realTimeData = xiwonUtil.postForm(postElectricRealTimeData, map, JSONObject.class, (() -> map.put("deviceSn", devSn)));
log.info("携稳接口响应数据:{}", realTimeData);
Integer code = realTimeData.getInteger("code");
// code校验是否成功请求
if (code == HttpStatus.OK.value()) {
JSONArray dataArray = realTimeData.getJSONArray("data");
if (CollUtil.isNotEmpty(dataArray)) {
// 解析请求到的参数,保存到我们的数据库
JSONObject data = dataArray.getJSONObject(0);
ElectricalData electricalData = new ElectricalData(devSn, data.getString("dataTime"), data.getString("voltageA"), data.getString("voltageB"),
data.getString("voltageC"), data.getString("currentA"), data.getString("currentB"), data.getString("currentC"),
data.getString("leakage"), data.getString("temperatureA"), data.getString("temperatureB"), data.getString("temperatureC"), data.getString("temperatureD"));
electricalDataService.saveElectricalData(electricalData);
} else {
log.error("设备sn{},当前无数据!", devSn);
}
} else {
log.error("设备sn{}请求失败当前code{}msg{}", devSn, code, realTimeData.getString("msg"));
}
return true;
})
);
}
}