Lius
2024-03-07 c51323e6fcc84f08bc8c01e3dd6c916427f83f4e
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningEquipmentStatusJob.java
@@ -6,9 +6,12 @@
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;
@@ -16,8 +19,11 @@
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;
@@ -26,6 +32,7 @@
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
 * @author Lius
@@ -61,6 +68,12 @@
    @Resource
    private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService;
    @Resource
    private IMdcMessageApprovalService mdcMessageApprovalService;
    @Resource
    private ISysUserService sysUserService;
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        SysQuartzLog quartzLog = new SysQuartzLog();
@@ -73,7 +86,7 @@
        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;
@@ -81,40 +94,66 @@
                equipmentRateJudge = Integer.valueOf(dictModelList1.get(0).getValue());
            }
            // 获取利用率正常值
            List<DictModel> dictModelList2 = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_EQUIPMENT_SPEED_JUDGE);
            List<DictModel> dictModelList2 = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_EQUIPMENT_RATE_NORMAL);
            Integer equipmentRateNormal = 20;
            if (dictModelList2 != null && !dictModelList2.isEmpty()) {
                equipmentRateNormal = Integer.valueOf(dictModelList2.get(0).getValue());
            }
            // 获取设备状态天数
            List<DictModel> dictModelList3 = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_EQUIPMENT_RATE_NORMAL);
            List<DictModel> dictModelList3 = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_EQUIPMENT_SPEED_JUDGE);
            Integer equipmentStatusJudge = 5;
            if (dictModelList3 != null && !dictModelList3.isEmpty()) {
                equipmentStatusJudge = Integer.valueOf(dictModelList3.get(0).getValue());
            }
            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.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) {
@@ -127,12 +166,46 @@
                    }
                    if (flag) {
                        // 上报
                        MessageDTO messageDTO = new MessageDTO();
                        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);
                        }
                    }
                }
            }
@@ -141,7 +214,7 @@
            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)));