wisdomisitezw_java/src/main/java/com/zhgd/xmgl/async/AsyncAttendance.java
2023-03-24 17:33:44 +08:00

128 lines
5.4 KiB
Java

package com.zhgd.xmgl.async;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.zhgd.xmgl.modules.basicdata.entity.AttendanceDev;
import com.zhgd.xmgl.modules.basicdata.entity.AttendanceDevSync;
import com.zhgd.xmgl.modules.basicdata.entity.SystemDictData;
import com.zhgd.xmgl.modules.basicdata.entity.WorkerInfo;
import com.zhgd.xmgl.modules.basicdata.mapper.AttendanceDevMapper;
import com.zhgd.xmgl.modules.basicdata.service.IAttendanceDevSyncService;
import com.zhgd.xmgl.modules.basicdata.service.ISystemDictDataService;
import com.zhgd.xmgl.util.HttpUtil;
import com.zhgd.xmgl.util.ParamEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* @description: 考勤相关信息异步任务
**/
@Slf4j
@Component
public class AsyncAttendance {
@Autowired
private IAttendanceDevSyncService attendanceDevSyncService;
@Autowired
private AttendanceDevMapper attendanceDevMapper;
@Autowired
private ISystemDictDataService systemDictDataService;
/**
* 同步考勤设备信息
* @param type
* @param attendanceDev
*/
@Async("countAttendanceExecutor")
public void syncAttendanceDev(Integer type, AttendanceDev attendanceDev) {
String requestUrl = buildRequestUrl(type, attendanceDev.getProduceId());
if (requestUrl == null) {
return;
}
try {
JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(attendanceDev));
// 推送同步信息
String result = HttpUtil.doPost(requestUrl, jsonObject.toString());
int state = StringUtils.isBlank(result) ? 0 : 1;
// 记录推送信息
AttendanceDevSync attendanceDevSync = new AttendanceDevSync();
attendanceDevSync.setMainId(attendanceDev.getCode());
attendanceDevSync.setRequestUrl(requestUrl);
attendanceDevSync.setContent(jsonObject.toString());
attendanceDevSync.setState(state);
attendanceDevSync.setType(1);
attendanceDevSync.setCreateTime(new Date());
attendanceDevSyncService.save(attendanceDevSync);
}catch (Exception e){
e.printStackTrace();
log.error("推送考勤设备数据出现异常,请求路径:" + requestUrl + ",设备ID:" + attendanceDev.getId());
}
}
/**
* 同步考勤人员信息
* @param workerInfo
*/
@Async("countAttendanceExecutor")
public void syncAttendanceWorker(Integer type, WorkerInfo workerInfo) {
try {
// 查询人员项目/工程对应的设备厂商信息
List<Integer> productIdList = attendanceDevMapper.getProductList(workerInfo, "ignoreDataScope");
List<AttendanceDev> attendanceDevList = attendanceDevMapper.getList(workerInfo, "ignoreDataScope");
for (Integer productId : productIdList) {
String requestUrl = buildRequestUrl(type, productId);
if (requestUrl == null) {
continue;
}
JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(workerInfo));
jsonObject.put("attendDevList", JSONArray.parseArray(JSON.toJSONString(
attendanceDevList.stream().filter(a -> a.getProduceId().equals(productId)).collect(Collectors.toList()))));
// 推送同步信息
String result = HttpUtil.doPost(requestUrl, jsonObject.toString());
int state = StringUtils.isBlank(result) ? 0 : 1;
// 记录推送信息
AttendanceDevSync attendanceDevSync = new AttendanceDevSync();
attendanceDevSync.setMainId(workerInfo.getId().toString());
attendanceDevSync.setRequestUrl(requestUrl);
attendanceDevSync.setContent(jsonObject.toString());
attendanceDevSync.setState(state);
attendanceDevSync.setType(2);
attendanceDevSync.setCreateTime(new Date());
attendanceDevSyncService.save(attendanceDevSync);
}
}catch (Exception e){
e.printStackTrace();
log.error("推送考勤人员数据出现异常");
}
}
/**
*
* @param type 请求类型
* @param productId 厂商ID
* @return
*/
private String buildRequestUrl(Integer type, Integer productId) {
SystemDictData prefix = systemDictDataService.getOne(Wrappers.<SystemDictData>lambdaQuery()
.eq(SystemDictData::getDictLabel, productId).eq(SystemDictData::getDictType, ParamEnum.SysDictType.ATTEND_DEV_PRODUCE.getValue()));
SystemDictData suffix = systemDictDataService.getOne(Wrappers.<SystemDictData>lambdaQuery()
.eq(SystemDictData::getDictLabel, type).eq(SystemDictData::getDictType, ParamEnum.SysDictType.ATTEND_SYNC_API.getValue()));
if (prefix == null || suffix == null || prefix.getStatus() != 1 || suffix.getStatus() != 1) {
return null;
} else {
return prefix.getRemark() + suffix.getRemark();
}
}
}