wisdomisite-java/src/main/java/com/zhgd/xmgl/task/JinqianmaoTask.java
2023-02-25 17:46:22 +08:00

236 lines
12 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 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;
import org.apache.commons.lang.StringUtils;
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){
if (StringUtils.isBlank(companyConfig.getUrl())) {
return;
}
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() {
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);
}
}
}
}
}
public void saveJqmDev() {
List<CompanyConfig> companyConfigs = companyConfigMapper.selectList(new QueryWrapper<>());
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);
String url = getUrl("getDevList", companyConfig.getUrl(), companyConfig.getAk(), companyConfig.getSecret());
String body = jsonInfo.toJSONString();
log.info("saveJqmDev()调用httpurl{}body{}", url, body);
HttpResponse httpResponse = HttpRequest.post(url).body(body).timeout(5 * 60 * 1000).execute();
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");
log.debug("devList{}", devList);
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));
Integer curFloor = getCurFloor(projectNumber, devId, companyConfig.getUrl(), companyConfig.getAk(), companyConfig.getSecret());
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));
}
}
log.debug("saveBatchprojectJqmDevList:{}", projectJqmDevList);
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();
}
}