134 lines
6.4 KiB
Java
134 lines
6.4 KiB
Java
package com.zhgd.xmgl.task;
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.date.DateTime;
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.text.CharSequenceUtil;
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.zhgd.xmgl.config.RundeWSClient;
|
|
import com.zhgd.xmgl.modules.dangerous.entity.HiddenDangerInspectionStatistics;
|
|
import com.zhgd.xmgl.modules.dangerous.mapper.HiddenDangerInspectRecordMapper;
|
|
import com.zhgd.xmgl.modules.dangerous.service.IHiddenDangerInspectionStatisticsService;
|
|
import com.zhgd.xmgl.modules.helmet.entity.RundeGroup;
|
|
import com.zhgd.xmgl.modules.helmet.service.RundeGroupService;
|
|
import com.zhgd.xmgl.modules.project.entity.Project;
|
|
import com.zhgd.xmgl.modules.project.service.IProjectService;
|
|
import com.zhgd.xmgl.util.RundeSafeyHatUtils;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import net.javacrumbs.shedlock.core.SchedulerLock;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import javax.websocket.WebSocketContainer;
|
|
import java.net.URI;
|
|
import java.util.*;
|
|
import java.util.function.Function;
|
|
import java.util.stream.Collectors;
|
|
|
|
/**
|
|
* @author 邱平毅
|
|
* @ClassName RundeTask
|
|
* @date 2022/10/24 13:44
|
|
* @Version 1.0
|
|
*/
|
|
@Slf4j
|
|
@Component
|
|
public class RundeTask {
|
|
@Autowired
|
|
IProjectService projectService;
|
|
|
|
@Autowired
|
|
WebSocketContainer webSocketContainer;
|
|
@Autowired
|
|
RundeWSClient rundeClient;
|
|
@Autowired
|
|
RundeGroupService rundeGroupService;
|
|
|
|
@Autowired
|
|
HiddenDangerInspectRecordMapper hiddenDangerInspectRecordMapper;
|
|
|
|
@Autowired
|
|
IHiddenDangerInspectionStatisticsService hiddenDangerInspectionStatisticsService;
|
|
|
|
/**
|
|
* 获取安全帽最新数量
|
|
*/
|
|
@SchedulerLock(name = "getHelmet", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 7)
|
|
@Scheduled(cron = "0 0/15 * * * ?")
|
|
public void getHelmet() {
|
|
try {
|
|
List<Project> projectList = projectService.list(Wrappers.<Project>lambdaQuery().isNotNull(Project::getHelmetUser));
|
|
if (CollUtil.isNotEmpty(projectList)) {
|
|
webSocketContainer.connectToServer(rundeClient, new URI("wss://caps.runde.pro/wss"));
|
|
for (Project project : projectList) {
|
|
JSONObject token = RundeSafeyHatUtils.getToken(project.getHelmetUser(), project.getHelmetPassword());
|
|
if (token != null && CharSequenceUtil.isNotBlank(token.getString("session_id"))) {
|
|
String sessionId = token.getString("session_id");
|
|
project.setRundeToken(sessionId);
|
|
rundeClient.send("{\"act\":\"ma_login\",\"user_name\":\"" + project.getHelmetUser() + "\",\"access_token\":\"" + sessionId + "\"}");
|
|
}
|
|
}
|
|
}
|
|
List<Project> tokenProjectList = projectList.stream().filter(project -> CharSequenceUtil.isNotBlank(project.getRundeToken())).collect(Collectors.toList());
|
|
Set<String> snSet = tokenProjectList.stream().map(Project::getProjectSn).collect(Collectors.toSet());
|
|
if (snSet.isEmpty()) {
|
|
return;
|
|
}
|
|
Thread.sleep(tokenProjectList.size() * 1000L);
|
|
List<RundeGroup> existGroupList = rundeGroupService.list(Wrappers.<RundeGroup>lambdaQuery().in(RundeGroup::getProjectsn, snSet));
|
|
|
|
Map<String, RundeGroup> gIdGroupMap = existGroupList.stream().collect(Collectors.toMap(RundeGroup::getGId, Function.identity()));
|
|
|
|
Map<String, String> rundeUserMap = rundeClient.getRundeUserMap();
|
|
List<RundeGroup> addRundeGroups = new LinkedList<>();
|
|
List<RundeGroup> updateRundeGroups = new LinkedList<>();
|
|
|
|
|
|
for (Project project : tokenProjectList) {
|
|
JSONArray groupList = RundeSafeyHatUtils.getGroupList(rundeUserMap.get(project.getHelmetUser()), project.getRundeToken());
|
|
for (int i = 0; i < groupList.size(); i++) {
|
|
JSONObject group = groupList.getJSONObject(i);
|
|
String gId = group.getString("g_id");
|
|
if (gIdGroupMap.containsKey(gId)) {
|
|
RundeGroup originalGroup = gIdGroupMap.get(gId);
|
|
updateRundeGroups.add(new RundeGroup(originalGroup.getId(), project.getProjectSn(), gId, group.getString("g_name"), group.getString("admin_name"), group.getString("admin_id"), group.getInteger("num"), group.getInteger("mine"), group.getInteger("online")));
|
|
} else {
|
|
addRundeGroups.add(new RundeGroup(null, project.getProjectSn(), gId, group.getString("g_name"), group.getString("admin_name"), group.getString("admin_id"), group.getInteger("num"), group.getInteger("mine"), group.getInteger("online")));
|
|
}
|
|
}
|
|
}
|
|
rundeGroupService.saveBatch(addRundeGroups);
|
|
rundeGroupService.updateBatchById(updateRundeGroups);
|
|
} catch (Exception e) {
|
|
log.error(String.valueOf(e));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 按状态统计每天的隐患数量
|
|
*/
|
|
@Scheduled(cron = "0 0 0 * * ?")
|
|
public void hiddenDangerStatistics() {
|
|
DateTime createTime = DateUtil.offsetDay(new Date(), -1);
|
|
DateTime startTime = DateUtil.beginOfDay(createTime);
|
|
DateTime endTime = DateUtil.endOfDay(createTime);
|
|
List<String> projectSns = hiddenDangerInspectRecordMapper.getGroupByProjectSn();
|
|
List<HiddenDangerInspectionStatistics> list = new ArrayList<>();
|
|
for (String projectSn : projectSns) {
|
|
HiddenDangerInspectionStatistics statistics = hiddenDangerInspectRecordMapper.statisticsByStatue(startTime, endTime, projectSn);
|
|
statistics.setProjectSn(projectSn);
|
|
statistics.setCreateTime(createTime);
|
|
list.add(statistics);
|
|
//删除原来
|
|
hiddenDangerInspectionStatisticsService.remove(new LambdaQueryWrapper<HiddenDangerInspectionStatistics>()
|
|
.eq(HiddenDangerInspectionStatistics::getProjectSn, projectSn)
|
|
.eq(HiddenDangerInspectionStatistics::getCreateTime, DateUtil.formatDate(createTime)));
|
|
}
|
|
hiddenDangerInspectionStatisticsService.saveBatch(list);
|
|
}
|
|
}
|