Lius
2024-03-07 c51323e6fcc84f08bc8c01e3dd6c916427f83f4e
设备状态长时间未变化算法更新
已添加7个文件
已修改14个文件
682 ■■■■■ 文件已修改
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/constant/MdcConstant.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcMessageApprovalController.java 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcMessageApproval.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningEquipmentStatusJob.java 129 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningMonitoringSpeedJob.java 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcMessageApprovalMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcMessageApprovalMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcMessageApprovalService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcMessageApprovalServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementSendMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysAnnouncementSendMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/constant/MdcConstant.java
@@ -57,4 +57,22 @@
    public static final String MONTH = "月";
    /**
     * è®¾å¤‡ç®¡ç†å‘˜
     */
    public static final String MDC_EQUIPMENT_MANAGER = "mdcEquipmentManager";
    /**
     * è®¾å¤‡è¶…级管理员
     */
    public static final String MDC_EQUIPMENT_SUPER_MANAGER = "mdcEquipmentSuperManager";
    /**
     * æ¶ˆæ¯çŠ¶æ€ï¼ˆ0待处理,1待确认, 2已确认,3已拒绝)
     */
    public static final String MSG_STATUS_0 = "0";
    public static final String MSG_STATUS_1 = "1";
    public static final String MSG_STATUS_2 = "2";
    public static final String MSG_STATUS_3 = "3";
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcMessageApprovalController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,153 @@
package org.jeecg.modules.mdc.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.mdc.entity.MdcMessageApproval;
import org.jeecg.modules.mdc.service.IMdcMessageApprovalService;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
/**
 * @Description: mdc消息确认表
 * @Author: Lius
 * @Date: 2024-03-06
 * @Version: V1.0
 */
@Slf4j
@Api(tags = "mdc消息确认表")
@RestController
@RequestMapping("/mdc/mdcMessageApproval")
public class MdcMessageApprovalController extends JeecgController<MdcMessageApproval, IMdcMessageApprovalService> {
    @Resource
    private IMdcMessageApprovalService mdcMessageApprovalService;
    /**
     * åˆ†é¡µåˆ—表查询
     *
     * @param mdcMessageApproval
     * @param pageNo
     * @param pageSize
     * @param req
     * @return
     */
    @AutoLog(value = "mdc消息确认表-分页列表查询")
    @ApiOperation(value = "mdc消息确认表-分页列表查询", notes = "mdc消息确认表-分页列表查询")
    @GetMapping(value = "/list")
    public Result<?> queryPageList(MdcMessageApproval mdcMessageApproval,
                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
                                   HttpServletRequest req) {
        QueryWrapper<MdcMessageApproval> queryWrapper = QueryGenerator.initQueryWrapper(mdcMessageApproval, req.getParameterMap());
        Page<MdcMessageApproval> page = new Page<MdcMessageApproval>(pageNo, pageSize);
        IPage<MdcMessageApproval> pageList = mdcMessageApprovalService.page(page, queryWrapper);
        return Result.OK(pageList);
    }
    /**
     * æ·»åŠ 
     *
     * @param mdcMessageApproval
     * @return
     */
    @AutoLog(value = "mdc消息确认表-添加")
    @ApiOperation(value = "mdc消息确认表-添加", notes = "mdc消息确认表-添加")
    @PostMapping(value = "/add")
    public Result<?> add(@RequestBody MdcMessageApproval mdcMessageApproval) {
        mdcMessageApprovalService.save(mdcMessageApproval);
        return Result.OK("添加成功!");
    }
    /**
     * ç¼–辑
     *
     * @param mdcMessageApproval
     * @return
     */
    @AutoLog(value = "mdc消息确认表-编辑")
    @ApiOperation(value = "mdc消息确认表-编辑", notes = "mdc消息确认表-编辑")
    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
    public Result<?> edit(@RequestBody MdcMessageApproval mdcMessageApproval) {
        mdcMessageApprovalService.updateById(mdcMessageApproval);
        return Result.OK("编辑成功!");
    }
    /**
     * é€šè¿‡id删除
     *
     * @param id
     * @return
     */
    @AutoLog(value = "mdc消息确认表-通过id删除")
    @ApiOperation(value = "mdc消息确认表-通过id删除", notes = "mdc消息确认表-通过id删除")
    @DeleteMapping(value = "/delete")
    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
        mdcMessageApprovalService.removeById(id);
        return Result.OK("删除成功!");
    }
    /**
     * æ‰¹é‡åˆ é™¤
     *
     * @param ids
     * @return
     */
    @AutoLog(value = "mdc消息确认表-批量删除")
    @ApiOperation(value = "mdc消息确认表-批量删除", notes = "mdc消息确认表-批量删除")
    @DeleteMapping(value = "/deleteBatch")
    public Result<?> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
        this.mdcMessageApprovalService.removeByIds(Arrays.asList(ids.split(",")));
        return Result.OK("批量删除成功!");
    }
    /**
     * é€šè¿‡id查询
     *
     * @param id
     * @return
     */
    @AutoLog(value = "mdc消息确认表-通过id查询")
    @ApiOperation(value = "mdc消息确认表-通过id查询", notes = "mdc消息确认表-通过id查询")
    @GetMapping(value = "/queryById")
    public Result<?> queryById(@RequestParam(name = "id", required = true) String id) {
        MdcMessageApproval mdcMessageApproval = mdcMessageApprovalService.getById(id);
        return Result.OK(mdcMessageApproval);
    }
    /**
     * å¯¼å‡ºexcel
     *
     * @param request
     * @param mdcMessageApproval
     */
    @RequestMapping(value = "/exportXls")
    public ModelAndView exportXls(HttpServletRequest request, MdcMessageApproval mdcMessageApproval) {
        return super.exportXls(request, mdcMessageApproval, MdcMessageApproval.class, "mdc消息确认表");
    }
    /**
     * é€šè¿‡excel导入数据
     *
     * @param request
     * @param response
     * @return
     */
    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
        return super.importExcel(request, response, MdcMessageApproval.class);
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcMessageApproval.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,85 @@
package org.jeecg.modules.mdc.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecg.common.system.base.entity.JeecgEntity;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.io.Serializable;
/**
 * @Description: mdc消息确认表
 * @Author: Lius
 * @Date: 2024-03-06
 * @Version: V1.0
 */
@Data
@TableName("mdc_message_approval")
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "mdc_message_approval对象", description = "mdc消息确认表")
public class MdcMessageApproval extends JeecgEntity implements Serializable {
    private static final long serialVersionUID = 3826726426360323366L;
    /**
     * è®¾å¤‡ç¼–码
     */
    @Excel(name = "设备编码", width = 15)
    @ApiModelProperty(value = "设备编码")
    private String equipmentId;
    /**
     * æ ‡é¢˜
     */
    @Excel(name = "标题", width = 15)
    @ApiModelProperty(value = "标题")
    private String titile;
    /**
     * å†…容
     */
    @Excel(name = "内容", width = 15)
    @ApiModelProperty(value = "内容")
    private String msgContent;
    /**
     * å¤„理人ids
     */
    @ApiModelProperty(value = "处理人ids")
    private String senderIds;
    /**
     * å¤„理人姓名
     */
    @Excel(name = "处理人姓名", width = 15)
    @ApiModelProperty(value = "处理人姓名")
    private String senderNames;
    /**
     * æ¶ˆæ¯çŠ¶æ€ï¼ˆ0待处理,1待确认, 2已确认,3已拒绝)
     */
    @Excel(name = "消息状态(0待处理,1待确认, 2已确认,3已拒绝)", width = 15)
    @ApiModelProperty(value = "消息状态(0待处理,1待确认, 2已确认,3已拒绝)")
    @Dict(dicCode = "mdcMsgStatus")
    private String msgStatus;
    /**
     * æ¶ˆæ¯ç¡®è®¤äººids
     */
    @Excel(name = "消息确认人ids", width = 15)
    @ApiModelProperty(value = "消息确认人ids")
    private String approverIds;
    /**
     * æ¶ˆæ¯ç¡®è®¤äººå§“名
     */
    @Excel(name = "消息确认人姓名", width = 15)
    @ApiModelProperty(value = "消息确认人姓名")
    private String approverNames;
    /**
     * ä¸ŠæŠ¥å†…容
     */
    @Excel(name = "上报内容", width = 15)
    @ApiModelProperty(value = "上报内容")
    private String reportContent;
}
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;
@@ -94,28 +107,53 @@
            }
            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) {
@@ -128,13 +166,46 @@
                    }
                    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);
                        }
                    }
                }
            }
@@ -143,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)));
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningMonitoringSpeedJob.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,151 @@
package org.jeecg.modules.mdc.job;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.dto.message.MessageDTO;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.common.util.DateUtils;
import org.jeecg.modules.mdc.dto.MdcEquipmentDto;
import org.jeecg.modules.mdc.entity.MdcEquipment;
import org.jeecg.modules.mdc.entity.MdcOverrunAlarm;
import org.jeecg.modules.mdc.service.IMdcEquipmentService;
import org.jeecg.modules.mdc.service.IMdcOverrunAlarmService;
import org.jeecg.modules.mdc.util.ThrowableUtil;
import org.jeecg.modules.quartz.entity.QuartzJob;
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.service.ISysAnnouncementService;
import org.jeecg.modules.system.service.ISysDictService;
import org.quartz.*;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
/**
 * @author Lius
 * @Description: ç›‘控设备运行转速与NC程序设定转速对比
 * @date 2024/3/4 16:14
 */
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
@Slf4j
public class RunningMonitoringSpeedJob implements Job {
    @Resource
    private IQuartzJobService quartzJobService;
    @Resource
    private ISysQuartzLogService sysQuartzLogService;
    @Resource
    private ISysAnnouncementService sysAnnouncementService;
    @Resource
    private IMdcEquipmentService mdcEquipmentService;
    @Resource
    private ISysDictService sysDictService;
    @Resource
    private ISysBaseAPI sysBaseApi;
    @Resource
    private IMdcOverrunAlarmService mdcOverrunAlarmService;
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        SysQuartzLog quartzLog = new SysQuartzLog();
        quartzLog.setCreateTime(new Date());
        List<QuartzJob> byJobClassName = this.quartzJobService.findByJobClassName(this.getClass().getName());
        if (byJobClassName != null && !byJobClassName.isEmpty()) {
            quartzLog.setJobId(byJobClassName.get(0).getId());
        }
        log.info("监控设备运行转速与NC程序设定转速对比 RunningMonitoringSpeedJob start!  æ—¶é—´:" + DateUtils.now());
        long startTime = System.currentTimeMillis();
        try {
            List<MdcEquipment> mdcEquipmentList = mdcEquipmentService.list(new LambdaQueryWrapper<MdcEquipment>().ne(MdcEquipment::getDriveType, "ZUOLAN"));
            // èŽ·å–å­—å…¸æ•°æ®
            List<DictModel> dictModelList = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_OPERATING_SPEED_RANGE);
            Integer range = 0;
            if (dictModelList != null && !dictModelList.isEmpty()) {
                range = Integer.valueOf(dictModelList.get(0).getValue());
            }
            for (MdcEquipment mdcEquipment : mdcEquipmentList) {
                String saveTableName = mdcEquipment.getSaveTableName();
                MdcEquipmentDto mdcEquipmentDto = new MdcEquipmentDto();
                try {
                    //查询单表数据
                    mdcEquipmentDto = mdcEquipmentService.getWorkLineLast(saveTableName);
                } catch (Exception e) {
                    log.error("查询单表数据失败!", e);
                }
                if (StringUtils.isNotBlank(mdcEquipmentDto.getSpindlespeed()) && StringUtils.isNotBlank(mdcEquipmentDto.getActualspindlespeed())) {
                    MessageDTO messageDTO = new MessageDTO();
                    messageDTO.setTitle("设备运行转速报警!");
                    messageDTO.setCategory("预警消息");
                    messageDTO.setFromUser("admin");
                    messageDTO.setToUser("admin");
                    //设定
                    Integer spindlespeed = Integer.valueOf(mdcEquipmentDto.getSpindlespeed());
                    //实际
                    Integer actualspindlespeed = Integer.valueOf(mdcEquipmentDto.getActualspindlespeed());
                    MdcOverrunAlarm mdcOverrunAlarm = new MdcOverrunAlarm();
                    mdcOverrunAlarm.setEquipmentId(mdcEquipment.getEquipmentId());
                    mdcOverrunAlarm.setSetValue(spindlespeed.toString());
                    mdcOverrunAlarm.setRealValue(actualspindlespeed.toString());
                    if (range.equals(0)) {
                        if (spindlespeed > actualspindlespeed) {
                            // è®¾å®šå€¼å¤§äºŽå®žé™…值   ä½Ž
                            messageDTO.setContent("设备编号为 [" + mdcEquipment.getEquipmentId() + "] çš„设备运行转速低报警!");
                            sysBaseApi.sendSysAnnouncement(messageDTO);
                            mdcOverrunAlarm.setAlarmContent("设备运行转速比NC代码设定值低报警");
                            mdcOverrunAlarmService.save(mdcOverrunAlarm);
                        } else if (spindlespeed < actualspindlespeed) {
                            // è®¾å®šå€¼å°äºŽå®žé™…值   é«˜
                            messageDTO.setContent("设备编号为 [" + mdcEquipment.getEquipmentId() + "] çš„设备运行转速高报警!");
                            sysBaseApi.sendSysAnnouncement(messageDTO);
                            mdcOverrunAlarm.setAlarmContent("设备运行转速比NC代码设定值高报警");
                            mdcOverrunAlarmService.save(mdcOverrunAlarm);
                        }
                    } else {
                        int max = spindlespeed + spindlespeed * (range / 100);
                        int min = spindlespeed - spindlespeed * (range / 100);
                        if (actualspindlespeed > max || actualspindlespeed < min) {
                            if (spindlespeed > actualspindlespeed) {
                                // è®¾å®šå€¼å¤§äºŽå®žé™…值   ä½Ž
                                messageDTO.setContent("设备编号为 [" + mdcEquipment.getEquipmentId() + "] çš„设备运行转速低报警!");
                                sysBaseApi.sendSysAnnouncement(messageDTO);
                                mdcOverrunAlarm.setAlarmContent("设备运行转速比NC代码设定值低报警");
                                mdcOverrunAlarmService.save(mdcOverrunAlarm);
                            } else if (spindlespeed < actualspindlespeed) {
                                // è®¾å®šå€¼å°äºŽå®žé™…值   é«˜
                                messageDTO.setContent("设备编号为 [" + mdcEquipment.getEquipmentId() + "] çš„设备运行转速高报警!");
                                sysBaseApi.sendSysAnnouncement(messageDTO);
                                mdcOverrunAlarm.setAlarmContent("设备运行转速比NC代码设定值高报警");
                                mdcOverrunAlarmService.save(mdcOverrunAlarm);
                            }
                        }
                    }
                }
            }
            quartzLog.setIsSuccess(0);
        } catch (Exception e) {
            quartzLog.setIsSuccess(-1);
            quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
            // å‘送消息通知
            sysAnnouncementService.jobSendMessage("监控设备运行转速与NC程序设定转速对比!", quartzLog.getExceptionDetail());
        }
        long endTime = System.currentTimeMillis();
        quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
        sysQuartzLogService.save(quartzLog);
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java
@@ -8,6 +8,7 @@
import org.apache.ibatis.annotations.Select;
import org.jeecg.modules.mdc.dto.MdcEquDepDto;
import org.jeecg.modules.mdc.dto.MdcEquProDto;
import org.jeecg.modules.mdc.dto.MdcEquipmentDto;
import org.jeecg.modules.mdc.entity.MdcEquipment;
import org.jeecg.modules.mdc.entity.MdcEquipmentMonitor;
import org.jeecg.modules.mdc.vo.MdcEquipmentDepVo;
@@ -107,4 +108,12 @@
     * @return
     */
    List<MdcEquipment> exportXlsList(@Param("mdcEquipment") MdcEquipmentVo mdcEquipment);
    /**
     * æŸ¥è¯¢å•表数据
     * @param tableName
     * @return
     */
    @InterceptorIgnore(tenantLine = "1")
    MdcEquipmentDto findWorkLineLast(@Param("tableName") String tableName);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcMessageApprovalMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package org.jeecg.modules.mdc.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.mdc.entity.MdcMessageApproval;
/**
 * @Description: mdc消息确认表
 * @Author: Lius
 * @Date:   2024-03-06
 * @Version: V1.0
 */
public interface MdcMessageApprovalMapper extends BaseMapper<MdcMessageApproval> {
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml
@@ -281,4 +281,9 @@
        order by t1.sort_no
    </select>
    <!--查询单表数据-->
    <select id="findWorkLineLast" resultType="org.jeecg.modules.mdc.dto.MdcEquipmentDto">
        select top 1 spindlespeed, actualspindlespeed from [${tableName}] order by CollectTime  desc
    </select>
</mapper>
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcMessageApprovalMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.mdc.mapper.MdcMessageApprovalMapper">
</mapper>
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java
@@ -195,4 +195,11 @@
     * @return
     */
    List<MdcEquipmentTree> loadTreeListByProductionIds(String ids);
    /**
     * æŸ¥è¯¢å•表数据
     * @param tableName
     * @return
     */
    MdcEquipmentDto getWorkLineLast(String tableName);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcMessageApprovalService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package org.jeecg.modules.mdc.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.mdc.entity.MdcMessageApproval;
/**
 * @Description: mdc消息确认表
 * @Author: Lius
 * @Date: 2024-03-06
 * @Version: V1.0
 */
public interface IMdcMessageApprovalService extends IService<MdcMessageApproval> {
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java
@@ -759,8 +759,13 @@
                Map<String, Object> param = new HashMap<>();
                param.put("columns", builder.toString());
                param.put("tableName", saveTableName);
                Map<String, Object> map = this.baseMapper.getWorkLineLast(param);
                if (map != null) {
                Map<String, Object> map = new HashMap<>();
                try {
                    map = this.baseMapper.getWorkLineLast(param);
                } catch (Exception e) {
                    log.error("查询单表数据出差!", e);
                }
                if (!map.isEmpty()) {
                    for (MdcEquipmentThreshold mdcEquipmentThreshold : mdcEquipmentThresholdList) {
                        Integer actualValue = Integer.valueOf(map.get(mdcEquipmentThreshold.getEnglishName()).toString());
                        Integer max = mdcEquipmentThreshold.getMaxThreshold();
@@ -837,4 +842,14 @@
        return treeList;
    }
    /**
     * æŸ¥è¯¢å•表数据
     * @param tableName
     * @return
     */
    @Override
    public MdcEquipmentDto getWorkLineLast(String tableName) {
        return this.baseMapper.findWorkLineLast(tableName);
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcMessageApprovalServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package org.jeecg.modules.mdc.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.modules.mdc.entity.MdcMessageApproval;
import org.jeecg.modules.mdc.mapper.MdcMessageApprovalMapper;
import org.jeecg.modules.mdc.service.IMdcMessageApprovalService;
import org.springframework.stereotype.Service;
/**
 * @Description: mdc消息确认表
 * @Author: Lius
 * @Date: 2024-03-06
 * @Version: V1.0
 */
@Service
public class MdcMessageApprovalServiceImpl extends ServiceImpl<MdcMessageApprovalMapper, MdcMessageApproval> implements IMdcMessageApprovalService {
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementSendMapper.java
@@ -1,13 +1,13 @@
package org.jeecg.modules.system.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.system.entity.SysAnnouncement;
import org.jeecg.modules.system.entity.SysAnnouncementSend;
import org.jeecg.modules.system.model.AnnouncementSendModel;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.List;
/**
 * @Description: ç”¨æˆ·é€šå‘Šé˜…读标记表
@@ -48,4 +48,9 @@
     * èŽ·å–é¦–é¡µæ¶ˆæ¯
     */
    List<SysAnnouncementSend> getPrimaryInfo(@Param("userId") String userId,@Param("msgCategoryList")List<String> msgCategoryList);
    /**
     * æ ¹æ®æ¶ˆæ¯å†…容查询消息通知
     */
    SysAnnouncement findLastMessage(@Param("messageContent") String messageContent);
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java
@@ -178,4 +178,9 @@
     * æ ¹æ®è§’色编码查询用户id集合
     */
    List<String> getUserByRoleCode(@Param("roleCode") String roleCode);
    /**
     * æ ¹æ®è§’色编码和设备编号查询用户
     */
    List<SysUser> getEquipmentAdmin(@Param("roleCode") String roleCode, @Param("equipmentId") String equipmentId);
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysAnnouncementSendMapper.xml
@@ -125,4 +125,8 @@
            </if>
    </select>
    <select id="findLastMessage" resultType="org.jeecg.modules.system.entity.SysAnnouncement">
        SELECT TOP 1 * FROM sys_announcement WHERE msg_content = #{messageContent} ORDER BY create_time DESC;
    </select>
</mapper>
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
@@ -206,4 +206,15 @@
        WHERE
            sr.role_code = #{ roleCode }
    </select>
    <!--根据角色编码和设备编号查询用户-->
    <select id="getEquipmentAdmin" resultType="org.jeecg.modules.system.entity.SysUser">
        SELECT
            t1.*
        FROM
            sys_user t1
                LEFT JOIN sys_user_role t2 ON t1.id = t2.user_id
                LEFT JOIN sys_role t3 ON t2.role_id = t3.id
        WHERE
            t3.role_code = #{roleCode} AND equipment_ids LIKE concat(concat('%',#{equipmentId}),'%')
    </select>
</mapper>
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java
@@ -67,4 +67,8 @@
    void jobSendMessage(String jobDescription, String exceptionDetail);
    /**
     * æ ¹æ®æ¶ˆæ¯å†…容查询消息通知时间
     */
    SysAnnouncement findLastMessage(String messageContent);
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
@@ -318,4 +318,6 @@
    public List<SysUser> getAllUsersByRoleId(String roleId);
    List<String> getUserByRoleCode(String roleCode);
    List<SysUser> getEquipmentAdmin(String roleCode, String equipmentId);
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java
@@ -251,4 +251,12 @@
    }
    /**
     * æ ¹æ®æ¶ˆæ¯å†…容查询消息通知
     */
    @Override
    public SysAnnouncement findLastMessage(String messageContent) {
        return sysAnnouncementSendMapper.findLastMessage(messageContent);
    }
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
@@ -705,4 +705,12 @@
    public List<String> getUserByRoleCode(String roleCode) {
        return this.baseMapper.getUserByRoleCode(roleCode);
    }
    /**
     * æ ¹æ®è§’色编码和设备编号查询用户
     */
    @Override
    public List<SysUser> getEquipmentAdmin(String roleCode, String equipmentId) {
        return this.baseMapper.getEquipmentAdmin(roleCode, equipmentId);
    }
}