package com.zhgd.xmgl.task; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.zhgd.mybatis.Aes; import com.zhgd.xmgl.modules.basicdata.entity.Engineering; import com.zhgd.xmgl.modules.basicdata.entity.EngineeringMain; import com.zhgd.xmgl.modules.basicdata.entity.SystemUser; import com.zhgd.xmgl.modules.basicdata.service.IEngineeringMainService; import com.zhgd.xmgl.modules.basicdata.service.IEngineeringService; import com.zhgd.xmgl.modules.basicdata.service.ISystemUserService; import com.zhgd.xmgl.modules.safety.entity.InspectRecord; import com.zhgd.xmgl.modules.safety.entity.ProjectSubItem; import com.zhgd.xmgl.modules.safety.entity.Remind; import com.zhgd.xmgl.modules.safety.service.IInspectRecordService; import com.zhgd.xmgl.modules.safety.service.IProjectSubItemService; import com.zhgd.xmgl.modules.safety.service.IRemindService; import com.zhgd.xmgl.util.SMS; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; /** * @description: 视频监控定时任务 **/ @Slf4j @Component public class SlippageTask { @Autowired private IProjectSubItemService projectSubItemService; @Autowired private IInspectRecordService inspectRecordService; @Autowired private IRemindService remindService; @Autowired private IEngineeringMainService engineeringMainService; @Autowired private IEngineeringService engineeringService; @Autowired private ISystemUserService systemUserService; /** * 每天凌晨计算项目进度是否逾期、临期 */ @Scheduled(cron = "0 0 1 * * ?") private void projectSubItem() { List phone = new ArrayList<>(); String desc = "施工进度逾期"; List states = Arrays.asList(3, 6, 7); List change = new ArrayList<>(); List list = projectSubItemService.list(); list.stream().forEach(l -> { if (l.getState() < 3 && DateUtil.between(new Date(), l.getPlanEndTime(), DateUnit.DAY, false) <= 15) { l.setState(4); change.add(l); } if (!states.contains(l.getState()) && DateUtil.between(l.getPlanEndTime(), new Date(), DateUnit.DAY, false) > 0) { l.setState(5); change.add(l); saveRemind(1, desc, l.getEngineeringSn(), phone); } }); if (change.size() > 0) { projectSubItemService.updateBatchById(change); } if (phone.size() > 0) { JSONObject params = new JSONObject(); params.put("phone", Aes.hzEncrypt(JSON.toJSONString(phone))); params.put("project", Aes.hzEncrypt("项目管理子系统")); params.put("alarm", Aes.hzEncrypt(desc)); SMS.sendToPhone(params); } log.info("=========定时修改项目进度状态任务执行成功========"); } private void saveRemind(Integer type, String desc, String engineeringSn, List phone) { Remind remind = new Remind(); EngineeringMain jsUser = engineeringMainService.getOne(Wrappers.lambdaQuery() .eq(EngineeringMain::getEngineeringSn, engineeringSn).eq(EngineeringMain::getType, 1)); if (jsUser != null) { Engineering engineering = engineeringService.getOne(Wrappers.lambdaQuery().eq(Engineering::getEngineeringSn, jsUser.getEngineeringSn())); SystemUser manager = systemUserService.getOne(Wrappers.lambdaQuery().eq(SystemUser::getSn, jsUser.getEnterpriseSn()).eq(SystemUser::getIsManager, true)); remind.setType(type); remind.setRemindDesc(desc); remind.setCreateTime(new Date()); remind.setUserId(manager.getUserId()); remind.setUserPhone(manager.getUserTel()); remindService.save(remind); if (StringUtils.isNotBlank(manager.getUserTel())) { phone.add(manager.getUserTel()); } } } /** * 每天凌晨计算安全质量临期 */ @Scheduled(cron = "0 0 1 * * ?") private void inspectRecord() { List states = Arrays.asList(1, 4); List change = new ArrayList<>(); List list = inspectRecordService.list(); list.stream().forEach(l -> { if (!states.contains(l.getState()) && DateUtil.between(new Date(), l.getDeadline(), DateUnit.DAY, false) <= 15) { l.setSlippageState(2); change.add(l); } if (!states.contains(l.getState()) && DateUtil.between(l.getDeadline(), new Date(), DateUnit.DAY, false) > 0) { l.setSlippageState(3); change.add(l); } }); if (change.size() > 0) { inspectRecordService.updateBatchById(change); } log.info("=========定时修改项目进度状态任务执行成功========"); } }