| | |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.system.api.ISysBaseAPI; |
| | | import org.jeecg.common.system.vo.DictModel; |
| | | import org.jeecg.modules.mdc.constant.MdcConstant; |
| | | import org.jeecg.modules.mdc.entity.MdcEquipment; |
| | | import org.jeecg.modules.mdc.entity.MdcMessageApproval; |
| | | import org.jeecg.modules.mdc.service.IMdcEquipmentRunningSectionService; |
| | | import org.jeecg.modules.mdc.service.IMdcEquipmentService; |
| | | import org.jeecg.modules.mdc.service.IMdcMessageApprovalService; |
| | | import org.jeecg.modules.mdc.service.MdcEfficiencyReportService; |
| | | import org.jeecg.modules.mdc.util.DateUtils; |
| | | import org.jeecg.modules.mdc.util.ThrowableUtil; |
| | |
| | | import org.jeecg.modules.quartz.entity.SysQuartzLog; |
| | | import org.jeecg.modules.quartz.service.IQuartzJobService; |
| | | import org.jeecg.modules.quartz.service.ISysQuartzLogService; |
| | | import org.jeecg.modules.system.entity.SysAnnouncement; |
| | | import org.jeecg.modules.system.entity.SysUser; |
| | | import org.jeecg.modules.system.service.ISysAnnouncementService; |
| | | import org.jeecg.modules.system.service.ISysDictService; |
| | | import org.jeecg.modules.system.service.ISysUserService; |
| | | import org.quartz.*; |
| | | |
| | | import javax.annotation.Resource; |
| | |
| | | import java.time.LocalDate; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @author Lius |
| | |
| | | @Resource |
| | | private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService; |
| | | |
| | | @Resource |
| | | private IMdcMessageApprovalService mdcMessageApprovalService; |
| | | |
| | | @Resource |
| | | private ISysUserService sysUserService; |
| | | |
| | | @Override |
| | | public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { |
| | | SysQuartzLog quartzLog = new SysQuartzLog(); |
| | |
| | | long startTime = System.currentTimeMillis(); |
| | | try { |
| | | List<MdcEquipment> equipmentList = mdcEquipmentService.list(new LambdaQueryWrapper<>()); |
| | | //List<MdcEquipment> equipmentList = mdcEquipmentService.list(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, "2140198")); |
| | | // List<MdcEquipment> equipmentList = mdcEquipmentService.list(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, "3140045")); |
| | | // 获取利用率判定天数 |
| | | List<DictModel> dictModelList1 = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_EQUIPMENT_RATE_JUDGE); |
| | | Integer equipmentRateJudge = 5; |
| | |
| | | } |
| | | for (MdcEquipment mdcEquipment : equipmentList) { |
| | | // 判断利用率 |
| | | String date = DateUtils.format(DateUtils.toDate(LocalDate.now().plusDays(-equipmentRateJudge).toString(), DateUtils.STR_DATE), DateUtils.STRDATE); |
| | | List<BigDecimal> efficiencyRateList = mdcEfficiencyReportService.getEfficiencyRate(mdcEquipment.getEquipmentId(), date); |
| | | if (efficiencyRateList != null && !efficiencyRateList.isEmpty()) { |
| | | boolean flag = true; |
| | | for (BigDecimal processLong : efficiencyRateList) { |
| | | BigDecimal efficiencyRate = processLong.divide(new BigDecimal("86400"), 4, RoundingMode.HALF_UP); |
| | | if (efficiencyRate.compareTo(new BigDecimal(equipmentRateNormal)) > -1) { |
| | | flag = false; |
| | | } |
| | | } |
| | | if (flag) { |
| | | // 上报 |
| | | MessageDTO messageDTO = new MessageDTO(); |
| | | messageDTO.setTitle("设备利用率报警!"); |
| | | messageDTO.setCategory("预警消息"); |
| | | messageDTO.setFromUser("admin"); |
| | | messageDTO.setToUser("admin"); |
| | | messageDTO.setContent("设备编号为 [" + mdcEquipment.getEquipmentId() + "] 的设备利用率低于正常值报警!"); |
| | | sysBaseApi.sendSysAnnouncement(messageDTO); |
| | | // step.1 查询消息中此设备报警时间 |
| | | SysAnnouncement sysAnnouncement = sysAnnouncementService.findLastMessage("设备编号为 [" + mdcEquipment.getEquipmentId() + "] 的设备利用率低于正常值报警!"); |
| | | boolean flag1 = true; |
| | | if (sysAnnouncement != null) { |
| | | Date createTime = sysAnnouncement.getCreateTime(); |
| | | Date msgDate = DateUtils.toDate(DateUtils.format(createTime, DateUtils.STR_DATE), DateUtils.STR_DATE); |
| | | Date now = DateUtils.toDate(LocalDate.now().toString(), DateUtils.STR_DATE); |
| | | Integer days = DateUtils.getDays(msgDate, now); |
| | | if (days < equipmentRateJudge) { |
| | | flag1 = false; |
| | | } |
| | | } |
| | | // 判断设备状态 |
| | | if (flag1) { |
| | | String date = DateUtils.format(DateUtils.toDate(LocalDate.now().plusDays(-equipmentRateJudge).toString(), DateUtils.STR_DATE), DateUtils.STRDATE); |
| | | List<BigDecimal> efficiencyRateList = mdcEfficiencyReportService.getEfficiencyRate(mdcEquipment.getEquipmentId(), date); |
| | | if (efficiencyRateList != null && !efficiencyRateList.isEmpty()) { |
| | | boolean flag = true; |
| | | for (BigDecimal processLong : efficiencyRateList) { |
| | | BigDecimal efficiencyRate = processLong.divide(new BigDecimal("86400"), 4, RoundingMode.HALF_UP); |
| | | if (efficiencyRate.compareTo(new BigDecimal(equipmentRateNormal)) > -1) { |
| | | flag = false; |
| | | } |
| | | } |
| | | if (flag) { |
| | | // 上报 |
| | | MessageDTO messageDTO = new MessageDTO(); |
| | | messageDTO.setTitle("设备利用率报警!"); |
| | | messageDTO.setCategory("预警消息"); |
| | | messageDTO.setFromUser("admin"); |
| | | messageDTO.setToUser("admin"); |
| | | messageDTO.setContent("设备编号为 [" + mdcEquipment.getEquipmentId() + "] 的设备利用率低于正常值报警!"); |
| | | sysBaseApi.sendSysAnnouncement(messageDTO); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 判断设备状态长时间无变化审批人 |
| | | SysAnnouncement sysAnnouncement1 = sysAnnouncementService.findLastMessage("设备编号为 [" + mdcEquipment.getEquipmentId() + "] 的设备状态长期无变化报警!"); |
| | | if (sysAnnouncement1 != null) { |
| | | Date createTime = sysAnnouncement1.getCreateTime(); |
| | | Date msgDate = DateUtils.toDate(DateUtils.format(createTime, DateUtils.STR_DATE), DateUtils.STR_DATE); |
| | | Date now = DateUtils.toDate(LocalDate.now().toString(), DateUtils.STR_DATE); |
| | | Integer days = DateUtils.getDays(msgDate, now); |
| | | if (days < equipmentStatusJudge) { |
| | | continue; |
| | | } |
| | | } |
| | | Date date1 = DateUtils.toDate(LocalDate.now().plusDays(-equipmentStatusJudge).toString(), DateUtils.STR_DATE); |
| | | List<Integer> sectionList = mdcEquipmentRunningSectionService.getDataList(mdcEquipment.getEquipmentId(), date1); |
| | | if (sectionList != null && !sectionList.isEmpty() && sectionList.size() > 1) { |
| | |
| | | } |
| | | if (flag) { |
| | | // 上报 |
| | | MessageDTO messageDTO = new MessageDTO(); |
| | | messageDTO.setTitle("设备状态长期无变化报警!"); |
| | | messageDTO.setCategory("预警消息"); |
| | | messageDTO.setFromUser("admin"); |
| | | messageDTO.setToUser("admin"); |
| | | messageDTO.setContent("设备编号为 [" + mdcEquipment.getEquipmentId() + "] 的设备状态长期无变化报警!"); |
| | | sysBaseApi.sendSysAnnouncement(messageDTO); |
| | | // 查询设备管理员 |
| | | List<SysUser> adminList = sysUserService.getEquipmentAdmin(MdcConstant.MDC_EQUIPMENT_MANAGER, mdcEquipment.getEquipmentId()); |
| | | // 查询设备超级管理员 |
| | | List<SysUser> superList = sysUserService.getEquipmentAdmin(MdcConstant.MDC_EQUIPMENT_SUPER_MANAGER, mdcEquipment.getEquipmentId()); |
| | | if (adminList != null && !adminList.isEmpty()) { |
| | | for (SysUser sysUser : adminList) { |
| | | MessageDTO messageDTO = new MessageDTO(); |
| | | messageDTO.setTitle("设备状态长期无变化报警!"); |
| | | messageDTO.setCategory("预警消息"); |
| | | messageDTO.setFromUser("admin"); |
| | | messageDTO.setToUser(sysUser.getUsername()); |
| | | messageDTO.setContent("设备编号为 [" + mdcEquipment.getEquipmentId() + "] 的设备状态长期无变化报警!"); |
| | | sysBaseApi.sendSysAnnouncement(messageDTO); |
| | | } |
| | | } else { |
| | | MessageDTO messageDTO = new MessageDTO(); |
| | | messageDTO.setTitle("设备状态长期无变化报警!"); |
| | | messageDTO.setCategory("预警消息"); |
| | | messageDTO.setFromUser("admin"); |
| | | messageDTO.setToUser("admin"); |
| | | messageDTO.setContent("设备编号为 [" + mdcEquipment.getEquipmentId() + "] 的设备状态长期无变化报警!"); |
| | | sysBaseApi.sendSysAnnouncement(messageDTO); |
| | | } |
| | | |
| | | if (adminList != null && !adminList.isEmpty() && superList != null && !superList.isEmpty()) { |
| | | MdcMessageApproval mdcMessageApproval = new MdcMessageApproval(); |
| | | mdcMessageApproval.setEquipmentId(mdcEquipment.getEquipmentId()); |
| | | mdcMessageApproval.setTitile("设备状态长期无变化报警!"); |
| | | mdcMessageApproval.setMsgContent("设备编号为 [" + mdcEquipment.getEquipmentId() + "] 的设备状态长期无变化报警!"); |
| | | List<String> senderIdList = adminList.stream().map(SysUser::getId).collect(Collectors.toList()); |
| | | mdcMessageApproval.setSenderIds(String.join(",", senderIdList)); |
| | | List<String> senderNameList = adminList.stream().map(SysUser::getRealname).collect(Collectors.toList()); |
| | | mdcMessageApproval.setSenderNames(String.join(",", senderNameList)); |
| | | List<String> superIdList = superList.stream().map(SysUser::getId).collect(Collectors.toList()); |
| | | mdcMessageApproval.setApproverIds(String.join(",", superIdList)); |
| | | List<String> superNameList = superList.stream().map(SysUser::getRealname).collect(Collectors.toList()); |
| | | mdcMessageApproval.setApproverNames(String.join(",", superNameList)); |
| | | mdcMessageApproval.setMsgStatus(MdcConstant.MSG_STATUS_0); |
| | | mdcMessageApprovalService.save(mdcMessageApproval); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | quartzLog.setIsSuccess(-1); |
| | | quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e)); |
| | | // 发送消息通知 |
| | | sysAnnouncementService.jobSendMessage("设备状态长期无变化报警任务失败!", quartzLog.getExceptionDetail()); |
| | | sysAnnouncementService.jobSendMessage("设备状态长期无变化报警任务", quartzLog.getExceptionDetail()); |
| | | } |
| | | long endTime = System.currentTimeMillis(); |
| | | quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime))); |