wisdomisite-java/src/main/java/com/zhgd/xmgl/task/TowerWorkerAttendanceTask.java
2024-03-25 15:13:09 +08:00

132 lines
5.7 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.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.gexin.fastjson.JSON;
import com.zhgd.xmgl.modules.bigdevice.entity.Tower;
import com.zhgd.xmgl.modules.bigdevice.entity.TowerWorkerAttendance;
import com.zhgd.xmgl.modules.bigdevice.mapper.TowerMapper;
import com.zhgd.xmgl.modules.bigdevice.mapper.TowerWorkerAttendanceMapper;
import com.zhgd.xmgl.modules.environment.mapper.DustNoiseDataMapper;
import com.zhgd.xmgl.modules.project.entity.Project;
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
import com.zhgd.xmgl.task.dto.TowerWorkerAttendanceDataDto;
import com.zhgd.xmgl.util.XiwonUtil;
import lombok.extern.slf4j.Slf4j;
import net.javacrumbs.shedlock.core.SchedulerLock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
/**
* @program: wisdomSite
* @description: 塔吊-人员考勤
* @author: Mr.Peng
* @create: 2021-07-12 13:41
**/
@Slf4j
@Component
@RestController
@RequestMapping(("/xmgl/task"))
public class TowerWorkerAttendanceTask {
@Autowired
private TowerMapper towerMapper;
@Autowired
private DustNoiseDataMapper dustNoiseDataMapper;
@Autowired
private ProjectMapper projectMapper;
@Autowired
private TowerWorkerAttendanceMapper towerWorkerAttendanceMapper;
@Resource
private XiwonUtil xiwonUtil;
/**
* 获取塔吊-人员考勤数据(携稳) 每5分钟触发任务
*/
@SchedulerLock(name = "getTowerWorkerAttendanceData", lockAtMostFor = 1000 * 60 * 5, lockAtLeastFor = 1000 * 60 * 3)
@Scheduled(cron = "0 0/5 * * * ?")
@RequestMapping("getTowerWorkerAttendanceData")
public void getTowerWorkerAttendanceData() {
log.info("获取塔吊-人员考勤数据(携稳)开始任务");
List<Project> projects = projectMapper.selectList(new LambdaQueryWrapper<Project>()
.isNotNull(Project::getXiwonAppId)
.isNotNull(Project::getXiwonAppSecret)
);
for (Project project : projects) {
// 获取设备列表
List<Tower> devList = towerMapper.selectList(new LambdaQueryWrapper<Tower>()
.eq(Tower::getProjectSn, project.getProjectSn()));
devList.forEach(dev -> CompletableFuture.runAsync(() -> {
doGetTowerWorkerAttendanceData(dev, project);
}).exceptionally(throwable -> {
log.error("err", throwable);
return null;
})
);
}
}
private void doGetTowerWorkerAttendanceData(Tower dev, Project project) {
// 设备sn
String devSn = dev.getDevSn();
log.info("doGetTowerWorkerAttendanceData设备sn{}", devSn);
TowerWorkerAttendance newestData = towerWorkerAttendanceMapper.getNewestOne(dev.getDevSn());
// 请求参数
Map<String, Object> map = new HashMap<>(4);
map.put("pageSize", "10");
map.put("pageNum", "1");
JSONObject realTimeData = xiwonUtil.postForm("/tower/attendance", project.getXiwonAppId(), project.getXiwonAppSecret(), map, JSONObject.class, (() -> {
map.put("deviceSn", devSn);
if (newestData != null && newestData.getSystemTime() != null) {
map.put("startTime", DateUtil.formatDateTime(DateUtil.offsetSecond(newestData.getSystemTime(), 1)));
}
map.put("endTime", DateUtil.formatDateTime(new Date()));
return map;
}));
log.info("携稳接口响应数据(塔吊-人员考勤devSn:{}rs:{}", devSn, JSON.toJSONString(realTimeData));
Integer code = realTimeData.getInteger("code");
// code校验是否成功请求
if (code == HttpStatus.OK.value()) {
JSONArray dataArray = realTimeData.getJSONArray("data");
if (CollUtil.isNotEmpty(dataArray)) {
// 解析请求到的参数,保存到我们的数据库
for (Object o : dataArray) {
TowerWorkerAttendanceDataDto dto = BeanUtil.toBean(o, TowerWorkerAttendanceDataDto.class);
TowerWorkerAttendance data = new TowerWorkerAttendance();
data.setTowerDevSn(devSn);
data.setRecognitionType(dto.getRecognitionType());
data.setRecgRercentage(Convert.toStr(dto.getRecgRercentage()));
data.setDriverId(dto.getDriverId());
data.setDriverName(dto.getDriverName());
data.setIdCardNo(dto.getIdCardNo());
data.setSystemTime(DateUtil.parse(dto.getSystemTime()));
data.setProjectSn(dev.getProjectSn());
towerWorkerAttendanceMapper.insert(data);
}
} else {
log.info("设备sn{},当前无数据!", devSn);
}
} else {
log.error("设备sn{}请求失败当前code{}msg{}", devSn, code, realTimeData.getString("msg"));
}
}
}