wisdomisite-java/src/main/java/com/zhgd/xmgl/task/JinqianmaoTask.java

236 lines
12 KiB
Java
Raw Normal View History

2023-02-16 15:28:15 +08:00
package com.zhgd.xmgl.task;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpStatus;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.zhgd.xmgl.async.AsyncCommon;
import com.zhgd.xmgl.modules.basicdata.entity.CompanyConfig;
import com.zhgd.xmgl.modules.basicdata.mapper.CompanyConfigMapper;
import com.zhgd.xmgl.modules.project.entity.Project;
import com.zhgd.xmgl.modules.project.entity.ProjectJqmDev;
import com.zhgd.xmgl.modules.project.service.IProjectService;
import com.zhgd.xmgl.modules.project.service.ProjectJqmDevService;
import com.zhgd.xmgl.util.JinqianmaoUtil;
import lombok.extern.slf4j.Slf4j;
import net.javacrumbs.shedlock.core.SchedulerLock;
2023-02-21 16:58:52 +08:00
import org.apache.commons.lang.StringUtils;
2023-02-16 15:28:15 +08:00
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.transaction.annotation.Transactional;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.*;
/**
* @author 邱平毅
* @ClassName JinqianmaoTask
* @date 2022/8/17 13:48
* @Version 1.0
* 金钱猫定时任务
*/
@Slf4j
@Component
@Transactional(rollbackFor = Exception.class)
public class JinqianmaoTask {
@Autowired
IProjectService projectService;
@Autowired
ProjectJqmDevService projectJqmDevService;
@Resource
CompanyConfigMapper companyConfigMapper;
@Value("${serverUrl}")
String serverUrl;
@Autowired
AsyncCommon asyncCommon;
/**
* 获取金钱猫设备 每天七点执行
*/
@SchedulerLock(name = "JQMDevTask", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 5)
@Scheduled(cron = "0 0 7 * * ?")
public void JQMDevTask() {
getProjectNameNumberMap();
saveJqmDev();
}
/**
* 设置回调地址 每月一号零时十分执行
*/
@SchedulerLock(name = "setCallBack", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 5)
@Scheduled(cron = "0 10 0 1 * ?")
@PostConstruct
public void setCallBack() {
List<CompanyConfig> companyConfigs = companyConfigMapper.selectList(new QueryWrapper<>());
for (CompanyConfig companyConfig:companyConfigs){
2023-02-21 16:58:52 +08:00
if (StringUtils.isBlank(companyConfig.getUrl())) {
return;
}
2023-02-16 15:28:15 +08:00
JSONObject jsonInfo = new JSONObject();
jsonInfo.put("URL", serverUrl + "/api/main/alarm");
HttpResponse httpResponse = HttpRequest.post(getUrl("setCallBack/alarm",companyConfig.getUrl(),companyConfig.getAk(),companyConfig.getSecret()))
.body(jsonInfo.toJSONString())
.timeout(5 * 60 * 1000)
.execute();
log.info("请求第三方接口setCallBack响应体{}", httpResponse);
if (!(httpResponse.getStatus() == HttpStatus.HTTP_OK && httpResponse.body() != null)) {
log.error("设置金钱猫项目回调地址失败!设置为:{}失败!", serverUrl);
}
}
}
public void getProjectNameNumberMap() {
2023-02-25 17:46:22 +08:00
List<CompanyConfig> companyConfigs = companyConfigMapper.selectList(new QueryWrapper<>());
for (CompanyConfig companyConfig : companyConfigs) {
JSONObject jsonInfo = new JSONObject();
jsonInfo.put("StartIndex", 0);
jsonInfo.put("Count", 10000);
String url = getUrl("getProjectList", companyConfig.getUrl(), companyConfig.getAk(), companyConfig.getSecret());
String body = jsonInfo.toJSONString();
log.info("getProjectNameNumberMap()调用httpgetProjectListurl{},body:{}", url, body);
HttpResponse httpResponse = HttpRequest.post(url).body(body).timeout(5 * 60 * 1000).execute();
log.info("请求第三方接口getProjectList响应体{}", httpResponse);
if (httpResponse.getStatus() == HttpStatus.HTTP_OK && httpResponse.body() != null) {
JSONObject projectListData = JSON.parseObject(httpResponse.body());
JSONObject data = projectListData.getJSONObject("data");
if (data != null) {
JSONArray projectList = data.getJSONArray("data");
if (CollUtil.isNotEmpty(projectList)) {
List<Map<String, String>> nameIdList = new LinkedList<>();
for (int i = 0; i < projectList.size(); i++) {
HashMap<String, String> nameIdMap = new LinkedHashMap<>(2);
JSONObject project = projectList.getJSONObject(i);
nameIdMap.put("name", project.getString("prjName"));
nameIdMap.put("id", project.getString("proId"));
nameIdList.add(nameIdMap);
}
nameIdList.forEach(nameIdMap -> projectService.update(Wrappers.<Project>lambdaUpdate().set(Project::getProjectNumber, nameIdMap.get("id")).eq(Project::getProjectName, nameIdMap.get("name"))));
log.info("getProjectNameNumberMap()的nameIdList{}", nameIdList);
2023-02-16 15:28:15 +08:00
}
}
}
}
}
public void saveJqmDev() {
2023-02-25 17:46:22 +08:00
List<CompanyConfig> companyConfigs = companyConfigMapper.selectList(new QueryWrapper<>());
2023-02-16 15:28:15 +08:00
for (CompanyConfig companyConfig:companyConfigs){
List<Project> projectList = projectService.list(Wrappers.<Project>lambdaQuery().isNotNull(Project::getProjectNumber));
JSONObject jsonInfo = new JSONObject();
jsonInfo.put("StartIndex", 0);
jsonInfo.put("Count", 10000);
for (Project project : projectList) {
String projectNumber = project.getProjectNumber();
jsonInfo.put("proId", projectNumber);
2023-02-25 14:16:06 +08:00
String url = getUrl("getDevList", companyConfig.getUrl(), companyConfig.getAk(), companyConfig.getSecret());
2023-02-25 17:46:22 +08:00
String body = jsonInfo.toJSONString();
log.info("saveJqmDev()调用httpurl{}body{}", url, body);
HttpResponse httpResponse = HttpRequest.post(url).body(body).timeout(5 * 60 * 1000).execute();
2023-02-16 15:28:15 +08:00
log.info("请求第三方接口getDevList响应体{}", httpResponse);
if (httpResponse.getStatus() == HttpStatus.HTTP_OK && httpResponse.body() != null) {
JSONObject response = JSON.parseObject(httpResponse.body());
log.info("请求第三方接口getDevList响应体Data{}", response.getJSONObject("data"));
if (response.getJSONObject("data") != null) {
JSONArray devList = response.getJSONObject("data").getJSONArray("data");
2023-02-25 17:46:22 +08:00
log.debug("devList{}", devList);
2023-02-16 15:28:15 +08:00
if (CollUtil.isNotEmpty(devList)) {
List<ProjectJqmDev> projectJqmDevList = new LinkedList<>();
String date = DateUtil.format(new Date(), DatePattern.NORM_DATETIME_PATTERN);
for (int i = 0; i < devList.size(); i++) {
JSONObject dev = devList.getJSONObject(i);
String devId = dev.getString("devId");
String devType = dev.getString("devType");
Integer devStatus = dev.getInteger("devStatus");
String devName = dev.getString("devName");
ProjectJqmDev projectJqmDev = projectJqmDevService.getOne(Wrappers.lambdaQuery(ProjectJqmDev.class)
.eq(ProjectJqmDev::getDevSn, devId).eq(ProjectJqmDev::getProjectNumber, projectNumber));
2023-02-25 17:46:22 +08:00
Integer curFloor = getCurFloor(projectNumber, devId, companyConfig.getUrl(), companyConfig.getAk(), companyConfig.getSecret());
2023-02-16 15:28:15 +08:00
if (projectJqmDev != null) {
if (!Objects.equals(curFloor, projectJqmDev.getLastFloorCount())) {
asyncCommon.sendMqAndApp("楼层变动通知", "设备:" + devName + "的楼层发生变动,请及时进行巡检!", "楼层变动通知", project.getProjectSn(), "/pages/projectEnd/projectIndex/projectIndex");
}
LambdaUpdateWrapper<ProjectJqmDev> updateWrapper = Wrappers.lambdaUpdate(ProjectJqmDev.class)
.eq(ProjectJqmDev::getId, projectJqmDev.getId())
.set(ProjectJqmDev::getProjectSn, project.getProjectSn()).set(ProjectJqmDev::getProjectName, project.getProjectName())
.set(ProjectJqmDev::getDevType, devType).set(ProjectJqmDev::getDevName, devName)
.set(ProjectJqmDev::getDevStatus, devStatus).set(ProjectJqmDev::getLastFloorCount, curFloor == null ? 0 : curFloor)
.set(ProjectJqmDev::getUpdateDate, date);
projectJqmDevService.update(null, updateWrapper);
} else {
asyncCommon.sendMqAndApp("全景成像设备通知", "新增设备:" + devName + ",请及时进行巡检!", "全景成像设备通知", project.getProjectSn(), "/pages/projectEnd/projectIndex/projectIndex");
projectJqmDevList.add(new ProjectJqmDev(null, projectNumber, project.getProjectSn(), project.getProjectName(), devId, devName, devType, devStatus, curFloor, date, date));
}
}
2023-02-25 17:46:22 +08:00
log.debug("saveBatchprojectJqmDevList:{}", projectJqmDevList);
2023-02-16 15:28:15 +08:00
projectJqmDevService.saveBatch(projectJqmDevList);
}
} else {
log.error("调用第三方接口错误:{}", response);
}
}
}
}
}
public Integer getCurFloor(String proId, String devId , String url,String ak,String secret) {
JSONObject jsonInfo = new JSONObject();
jsonInfo.put("proId", proId);
jsonInfo.put("devId", devId);
HttpResponse httpResponse = HttpRequest.post(getUrl("getCurFloor",url,ak,secret))
.body(jsonInfo.toJSONString())
.timeout(5 * 60 * 1000)
.execute();
log.info("请求第三方接口getCurFloor响应体{}", httpResponse);
if (httpResponse.getStatus() == HttpStatus.HTTP_OK && httpResponse.body() != null) {
JSONObject response = JSON.parseObject(httpResponse.body());
JSONObject data = response.getJSONObject("data");
if (data != null) {
return data.getInteger("FloorNum");
}
}
return null;
}
private String getUrl(String mappingUrl , String URL, String AK , String Secret) {
StringBuilder url = new StringBuilder();
url.append(URL);
url.append("/api/main/");
url.append(mappingUrl);
url.append("?");
url.append("ak");
url.append("=");
url.append(AK);
url.append("&");
url.append("ts");
url.append("=");
long currentTimeMillis = System.currentTimeMillis();
url.append(currentTimeMillis);
url.append("&");
url.append("token");
url.append("=");
url.append(JinqianmaoUtil.getTokenUrl(currentTimeMillis,AK,Secret));
//根据链接获取到项目信息
return url.toString();
}
}