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 productIdList = attendanceDevMapper.getProductList(workerInfo, "ignoreDataScope"); List 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.lambdaQuery() .eq(SystemDictData::getDictLabel, productId).eq(SystemDictData::getDictType, ParamEnum.SysDictType.ATTEND_DEV_PRODUCE.getValue())); SystemDictData suffix = systemDictDataService.getOne(Wrappers.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(); } } }