bug修复

This commit is contained in:
guo 2024-01-02 18:35:40 +08:00
parent 76b0fe6282
commit 9a64889d07
5 changed files with 51 additions and 40 deletions

View File

@ -267,7 +267,13 @@ public class Project implements Serializable {
private String jzgProjectCode;
@ApiModelProperty(value = "金筑工访问host")
private String jzgHost;
@ApiModelProperty(value = "'携稳扬尘url'")
@ApiModelProperty(value = "携稳url")
private String xiwonUrl;
/**
* 弃用使用xiwonUrl
*/
@Deprecated
@ApiModelProperty(value = "携稳扬尘url")
private String xiwonDustUrl;
@ApiModelProperty(value = "'携稳的appId'")
private String xiwonAppId;

View File

@ -4,11 +4,14 @@ import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.zhgd.xmgl.modules.electrical.entity.ElectricalData;
import com.zhgd.xmgl.modules.electrical.entity.ElectricalDev;
import com.zhgd.xmgl.modules.electrical.mapper.ElectricalDataMapper;
import com.zhgd.xmgl.modules.electrical.service.IElectricalDataService;
import com.zhgd.xmgl.modules.electrical.service.IElectricalDevService;
import com.zhgd.xmgl.modules.project.entity.Project;
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
import com.zhgd.xmgl.util.XiwonUtil;
import lombok.extern.slf4j.Slf4j;
import net.javacrumbs.shedlock.core.SchedulerLock;
@ -35,17 +38,20 @@ import java.util.concurrent.CompletableFuture;
*/
@Slf4j
@Component
@RestController
public class ElectricalTask {
@Resource
private IElectricalDataService electricalDataService;
@Resource
private ElectricalDataMapper electricalDataMapper;
@Resource
private ProjectMapper projectMapper;
@Resource
private IElectricalDevService electricalDevService;
@Value("${xiwon.postElectricRealTimeData:}")
private String postElectricRealTimeData;
@Value("${xiwon.url:}")
private String url;
@Resource
private XiwonUtil xiwonUtil;
@ -55,37 +61,49 @@ public class ElectricalTask {
*/
@SchedulerLock(name = "getElectricRealTimeData", lockAtMostFor = 1000 * 60 * 5, lockAtLeastFor = 1000 * 60 * 3)
@Scheduled(cron = "0 0/5 * * * ?")
@GetMapping("/task/getElectricRealTimeData")
public void getElectricRealTimeData() {
if (StringUtils.isNotBlank(postElectricRealTimeData)) {
// 请求参数
Map<String, Object> map = new HashMap<>(4);
map.put("state", 0);
map.put("pageSize", "1");
map.put("pageNum", "1");
// 获取所有
List<ElectricalDev> devList = electricalDevService.list();
devList.forEach(dev -> CompletableFuture.supplyAsync(() -> {
return doGetElectricRealTimeData(map, dev);
}).exceptionally(throwable -> {
log.error("err:", throwable);
return null;
})
log.info("获取最新电量使用情况 每5分钟触发任务");
if (StringUtils.isNotBlank(url)) {
List<Project> projectList = projectMapper.selectList(new LambdaQueryWrapper<Project>()
.ne(Project::getXiwonUrl, "")
.isNotNull(Project::getXiwonUrl)
.ne(Project::getXiwonAppId, "")
.isNotNull(Project::getXiwonAppId)
.ne(Project::getXiwonAppSecret, "")
.isNotNull(Project::getXiwonAppSecret)
);
for (Project project : projectList) {
// 请求参数
Map<String, Object> map = new HashMap<>(4);
map.put("state", 0);
map.put("pageSize", "1");
map.put("pageNum", "1");
// 获取所有
List<ElectricalDev> devList = electricalDevService.list(new LambdaQueryWrapper<ElectricalDev>().eq(ElectricalDev::getProjectSn, project.getProjectSn()));
devList.forEach(dev -> CompletableFuture.supplyAsync(() -> {
return doGetElectricRealTimeData(map, dev, project);
}).exceptionally(throwable -> {
log.error("err:", throwable);
return null;
})
);
}
}
}
private boolean doGetElectricRealTimeData(Map<String, Object> map, ElectricalDev dev) {
private boolean doGetElectricRealTimeData(Map<String, Object> map, ElectricalDev dev, Project project) {
// 设备sn
String devSn = dev.getDevSn();
ElectricalData newestData = electricalDataMapper.selectOne(new LambdaQueryWrapper<ElectricalData>().eq(ElectricalData::getDevSn, devSn).orderByDesc(ElectricalData::getUploadTime).last("limit 1"));
// 请求携稳的接口
JSONObject realTimeData = xiwonUtil.postForm(postElectricRealTimeData, map, JSONObject.class, (() -> {
JSONObject realTimeData = xiwonUtil.postForm(url + "electric/realTimeData", project.getXiwonAppId(), project.getXiwonAppSecret(), map, JSONObject.class, (() -> {
if (newestData != null && newestData.getXiewenId() != null) {
map.put("dataId", newestData.getXiewenId());
}
return map.put("deviceSn", devSn);
}));
log.info("携稳接口响应数据(配电箱):{}", realTimeData);
log.info("携稳接口响应数据(配电箱):{}", JSONArray.toJSONString(realTimeData));
Integer code = realTimeData.getInteger("code");
// code校验是否成功请求
if (code == HttpStatus.OK.value()) {

View File

@ -4,7 +4,6 @@ import cn.hutool.core.map.MapUtil;
import cn.hutool.crypto.SecureUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
@ -26,26 +25,20 @@ import java.util.function.Supplier;
@Slf4j
public class XiwonUtil {
@Value("${xiwon.appId}")
private String appId;
@Value("${xiwon.appSecret}")
private String appSecret;
@Autowired
RestTemplate restTemplate;
public String getToken(long requestTime) {
return SecureUtil.md5(appId + appSecret + requestTime);
public String getToken(long requestTime, String xiwonAppId, String xiwonAppSecret) {
return SecureUtil.md5(xiwonAppId + xiwonAppSecret + requestTime);
}
public <T> T postForm(String url, Map<String, Object> map, Class<T> returnClass, Supplier supplier) {
public <T> T postForm(String url, String xiwonAppId, String xiwonAppSecret, Map<String, Object> map, Class<T> returnClass, Supplier supplier) {
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.set("appId", appId);
requestHeaders.set("appId", xiwonAppId);
long currentTimeMillis = System.currentTimeMillis();
requestHeaders.set("requestTime", currentTimeMillis + "");
requestHeaders.set("sign", getToken(currentTimeMillis));
requestHeaders.set("sign", getToken(currentTimeMillis, xiwonAppId, xiwonAppSecret));
requestHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestHeaders);
if (supplier != null) {

View File

@ -104,3 +104,5 @@ xiwon.appSecret=b6162078-6f1c-4f2c-8cd5-0873f45199b2
jld_push_url=
#桥梁生产记录二维码url
bridgeProduceQrCodeUrl=http://192.168.34.173:8082/#/
#携稳url最后带斜杠
xiwon.url=http://openapi.xiwon588.com/

View File

@ -136,14 +136,6 @@ management.endpoints.enabled-by-default=true
management.endpoints.web.base-path=/actuator
management.endpoint.health.show-details=always
management.endpoint.logfile.external-file=logs/logs/zhgd-all.log
# 携稳电箱获取最后一条数据
xiwon.postElectricRealTimeData=http://openapi.xiwon588.com/electric/realTimeData
# 携稳密钥
#xiwon.appId=1638947489842
#xiwon.appSecret=36e0a5cf-02e6-421b-bf92-3b1ace11e1a2
# 正式
xiwon.appId=1672383573694
xiwon.appSecret=5dfe1664-51fd-40af-8fbb-a15bbcaae1d1
# 光伏发电客户信息
koyoe.clientId=btxny
koyoe.secret=akdu5sar7w