Lius
2025-03-12 da82d77c6773f65aadfde810233615b602da655a
停机原因维护和上报功能
已添加15个文件
已修改6个文件
873 ■■■■■ 文件已修改
lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDowntimeController.java 161 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDowntimeReasonController.java 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcHomeController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEquipmentWaitSectionDto.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcDowntime.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcDowntimeReason.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ScanDowntimeJob.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDowntimeMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDowntimeReasonMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentRunningSectionMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeMapper.xml 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeReasonMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentRunningSectionMapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDowntimeReasonService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDowntimeService.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentRunningSectionService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDowntimeReasonServiceImpl.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDowntimeServiceImpl.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcDowntimeVo.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java
@@ -597,5 +597,10 @@
     */
    Integer AUTO_FLAG_Y = 1;
    Integer AUTO_FLAG_N = 2;
    /**
     * å¾…机原因上报状态 0(未上报) 1(已上报)
     */
    Integer DOWNTIME_STATUS_0 = 0;
    Integer DOWNTIME_STATUS_1 = 1;
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDowntimeController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,161 @@
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.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.mdc.entity.MdcDowntime;
import org.jeecg.modules.mdc.entity.MdcEquipmentOvertime;
import org.jeecg.modules.mdc.service.IMdcDowntimeService;
import org.jeecg.modules.mdc.vo.MdcDowntimeVo;
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: å¾…机停机表
 * @Author: lius
 * @Date: 2025-03-12
 */
@Slf4j
@Api(tags = "待机停机表")
@RestController
@RequestMapping("/mdc/mdcDowntime")
public class MdcDowntimeController extends JeecgController<MdcDowntime, IMdcDowntimeService> {
    @Resource
    private IMdcDowntimeService mdcDowntimeService;
    /**
     * åˆ†é¡µåˆ—表查询
     *
     * @param mdcDowntimeVo
     * @param pageNo
     * @param pageSize
     * @param req
     * @return
     */
    @AutoLog(value = "待机停机表-分页列表查询")
    @ApiOperation(value = "待机停机表-分页列表查询", notes = "待机停机表-分页列表查询")
    @GetMapping(value = "/list")
    public Result<?> queryPageList(MdcDowntimeVo mdcDowntimeVo,
                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
                                   HttpServletRequest req) {
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        String userId = user.getId();
        Page<MdcDowntime> page = new Page<MdcDowntime>(pageNo, pageSize);
        IPage<MdcDowntime> pageList = mdcDowntimeService.pageList(userId, page, mdcDowntimeVo, req);
        return Result.OK(pageList);
    }
    /**
     * æ·»åŠ 
     *
     * @param mdcDowntime
     * @return
     */
    @AutoLog(value = "待机停机表-添加")
    @ApiOperation(value = "待机停机表-添加", notes = "待机停机表-添加")
    @PostMapping(value = "/add")
    public Result<?> add(@RequestBody MdcDowntime mdcDowntime) {
        mdcDowntimeService.save(mdcDowntime);
        return Result.OK("添加成功!");
    }
    /**
     * ç¼–辑
     *
     * @param mdcDowntime
     * @return
     */
    @AutoLog(value = "待机停机表-编辑")
    @ApiOperation(value = "待机停机表-编辑", notes = "待机停机表-编辑")
    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
    public Result<?> edit(@RequestBody MdcDowntime mdcDowntime) {
        if (mdcDowntime.getReasonId() != null) {
            mdcDowntime.setStatus(CommonConstant.DOWNTIME_STATUS_1);
        }
        mdcDowntimeService.updateById(mdcDowntime);
        return Result.OK("编辑成功!");
    }
    /**
     * é€šè¿‡id删除
     *
     * @param id
     * @return
     */
    @AutoLog(value = "待机停机表-通过id删除")
    @ApiOperation(value = "待机停机表-通过id删除", notes = "待机停机表-通过id删除")
    @DeleteMapping(value = "/delete")
    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
        mdcDowntimeService.removeById(id);
        return Result.OK("删除成功!");
    }
    /**
     * æ‰¹é‡åˆ é™¤
     *
     * @param ids
     * @return
     */
    @AutoLog(value = "待机停机表-批量删除")
    @ApiOperation(value = "待机停机表-批量删除", notes = "待机停机表-批量删除")
    @DeleteMapping(value = "/deleteBatch")
    public Result<?> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
        this.mdcDowntimeService.removeByIds(Arrays.asList(ids.split(",")));
        return Result.OK("批量删除成功!");
    }
    /**
     * é€šè¿‡id查询
     *
     * @param id
     * @return
     */
    @AutoLog(value = "待机停机表-通过id查询")
    @ApiOperation(value = "待机停机表-通过id查询", notes = "待机停机表-通过id查询")
    @GetMapping(value = "/queryById")
    public Result<?> queryById(@RequestParam(name = "id", required = true) String id) {
        MdcDowntime mdcDowntime = mdcDowntimeService.getById(id);
        return Result.OK(mdcDowntime);
    }
    /**
     * å¯¼å‡ºexcel
     *
     * @param request
     * @param mdcDowntime
     */
    @RequestMapping(value = "/exportXls")
    public ModelAndView exportXls(HttpServletRequest request, MdcDowntime mdcDowntime) {
        return super.exportXls(request, mdcDowntime, MdcDowntime.class, "待机停机表");
    }
    /**
     * é€šè¿‡excel导入数据
     *
     * @param request
     * @param response
     * @return
     */
    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
        return super.importExcel(request, response, MdcDowntime.class);
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDowntimeReasonController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,169 @@
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.MdcDowntimeReason;
import org.jeecg.modules.mdc.service.IMdcDowntimeReasonService;
import org.springframework.beans.factory.annotation.Autowired;
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;
import java.util.List;
/**
 * @Description: åœæœºåŽŸå› è¡¨
 * @Author: lius
 * @Date: 2025-03-11
 */
@Slf4j
@Api(tags = "停机原因表")
@RestController
@RequestMapping("/mdc/mdcDowntimeReason")
public class MdcDowntimeReasonController extends JeecgController<MdcDowntimeReason, IMdcDowntimeReasonService> {
    @Resource
    private IMdcDowntimeReasonService mdcDowntimeReasonService;
    /**
     * åˆ†é¡µåˆ—表查询
     *
     * @param mdcDowntimeReason
     * @param pageNo
     * @param pageSize
     * @param req
     * @return
     */
    @AutoLog(value = "停机原因表-分页列表查询")
    @ApiOperation(value = "停机原因表-分页列表查询", notes = "停机原因表-分页列表查询")
    @GetMapping(value = "/list")
    public Result<?> queryPageList(MdcDowntimeReason mdcDowntimeReason,
                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
                                   HttpServletRequest req) {
        QueryWrapper<MdcDowntimeReason> queryWrapper = QueryGenerator.initQueryWrapper(mdcDowntimeReason, req.getParameterMap());
        Page<MdcDowntimeReason> page = new Page<MdcDowntimeReason>(pageNo, pageSize);
        IPage<MdcDowntimeReason> pageList = mdcDowntimeReasonService.page(page, queryWrapper);
        return Result.OK(pageList);
    }
    /**
     * æ·»åŠ 
     *
     * @param mdcDowntimeReason
     * @return
     */
    @AutoLog(value = "停机原因表-添加")
    @ApiOperation(value = "停机原因表-添加", notes = "停机原因表-添加")
    @PostMapping(value = "/add")
    public Result<?> add(@RequestBody MdcDowntimeReason mdcDowntimeReason) {
        mdcDowntimeReasonService.save(mdcDowntimeReason);
        return Result.OK("添加成功!");
    }
    /**
     * ç¼–辑
     *
     * @param mdcDowntimeReason
     * @return
     */
    @AutoLog(value = "停机原因表-编辑")
    @ApiOperation(value = "停机原因表-编辑", notes = "停机原因表-编辑")
    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
    public Result<?> edit(@RequestBody MdcDowntimeReason mdcDowntimeReason) {
        mdcDowntimeReasonService.updateById(mdcDowntimeReason);
        return Result.OK("编辑成功!");
    }
    /**
     * é€šè¿‡id删除
     *
     * @param id
     * @return
     */
    @AutoLog(value = "停机原因表-通过id删除")
    @ApiOperation(value = "停机原因表-通过id删除", notes = "停机原因表-通过id删除")
    @DeleteMapping(value = "/delete")
    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
        mdcDowntimeReasonService.removeById(id);
        return Result.OK("删除成功!");
    }
    /**
     * æ‰¹é‡åˆ é™¤
     *
     * @param ids
     * @return
     */
    @AutoLog(value = "停机原因表-批量删除")
    @ApiOperation(value = "停机原因表-批量删除", notes = "停机原因表-批量删除")
    @DeleteMapping(value = "/deleteBatch")
    public Result<?> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
        this.mdcDowntimeReasonService.removeByIds(Arrays.asList(ids.split(",")));
        return Result.OK("批量删除成功!");
    }
    /**
     * é€šè¿‡id查询
     *
     * @param id
     * @return
     */
    @AutoLog(value = "停机原因表-通过id查询")
    @ApiOperation(value = "停机原因表-通过id查询", notes = "停机原因表-通过id查询")
    @GetMapping(value = "/queryById")
    public Result<?> queryById(@RequestParam(name = "id", required = true) String id) {
        MdcDowntimeReason mdcDowntimeReason = mdcDowntimeReasonService.getById(id);
        return Result.OK(mdcDowntimeReason);
    }
    /**
     * å¯¼å‡ºexcel
     *
     * @param request
     * @param mdcDowntimeReason
     */
    @RequestMapping(value = "/exportXls")
    public ModelAndView exportXls(HttpServletRequest request, MdcDowntimeReason mdcDowntimeReason) {
        return super.exportXls(request, mdcDowntimeReason, MdcDowntimeReason.class, "停机原因表");
    }
    /**
     * é€šè¿‡excel导入数据
     *
     * @param request
     * @param response
     * @return
     */
    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
        return super.importExcel(request, response, MdcDowntimeReason.class);
    }
    /**
     * æ ¹æ®åœæœºç±»åž‹èŽ·å–åœæœºåŽŸå› åˆ—è¡¨
     *
     * @param downtimeType
     * @return
     */
    @AutoLog(value = "停机原因表-根据停机类型获取停机原因列表")
    @ApiOperation(value = "停机原因表-根据停机类型获取停机原因列表", notes = "停机原因表-根据停机类型获取停机原因列表")
    @GetMapping(value = "/downtimeReasonList")
    public Result<?> downtimeReasonList(@RequestParam(name = "downtimeType", required = true) String downtimeType) {
        List<MdcDowntimeReason> result = mdcDowntimeReasonService.downtimeReasonList(downtimeType);
        return Result.OK(result);
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcHomeController.java
@@ -14,7 +14,6 @@
import org.jeecg.modules.mdc.entity.MdcEquipment;
import org.jeecg.modules.mdc.entity.MdcFeedback;
import org.jeecg.modules.mdc.entity.MdcOverallEquipmentEfficiency;
import org.jeecg.modules.mdc.service.IMdcEquipmentService;
import org.jeecg.modules.mdc.service.IMdcHomeService;
import org.jeecg.modules.mdc.vo.MdcCommonVo;
import org.jeecg.modules.mdc.vo.MdcHomeEfficiencyVo;
@@ -40,9 +39,6 @@
@RestController
@RequestMapping("/mdc/home")
public class MdcHomeController {
    @Resource
    private IMdcEquipmentService mdcEquipmentService;
    @Resource
    private IMdcProductionService mdcProductionService;
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEquipmentWaitSectionDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package org.jeecg.modules.mdc.dto;
import lombok.Data;
import org.jeecg.modules.mdc.entity.MdcEquipmentRunningSection;
/**
 * @Author: Lius
 * @CreateTime: 2025-03-12
 * @Description:
 */
@Data
public class MdcEquipmentWaitSectionDto extends MdcEquipmentRunningSection {
    private String equipmentName;
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcDowntime.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,86 @@
package org.jeecg.modules.mdc.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
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 org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
 * @Description: å¾…机停机表
 * @Author: lius
 * @Date: 2025-03-12
 */
@Data
@TableName("mdc_downtime")
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "mdc_downtime对象", description = "待机停机表")
public class MdcDowntime extends JeecgEntity implements Serializable {
    private static final long serialVersionUID = 7151231815767722285L;
    /**
     * è®¾å¤‡ç¼–号
     */
    @Excel(name = "设备编号", width = 15)
    @ApiModelProperty(value = "设备编号")
    private String equipmentId;
    /**
     * è®¾å¤‡åç§°
     */
    @Excel(name = "设备名称", width = 15)
    @ApiModelProperty(value = "设备名称")
    private String equipmentName;
    /**
     * å¼€å§‹æ—¶é—´
     */
    @Excel(name = "开始时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "开始时间")
    private Date startTime;
    /**
     * ç»“束时间
     */
    @Excel(name = "结束时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "结束时间")
    private Date endTime;
    /**
     * åœæœºåŽŸå› id
     */
    @Excel(name = "停机原因id", width = 15)
    @ApiModelProperty(value = "停机原因id")
    @Dict(dictTable = "mdc_downtime_reason",dicCode = "id",dicText = "downtime_type")
    private String reasonId;
    /**
     * çŠ¶æ€ï¼ˆ0未上报,1已上报)
     */
    @Excel(name = "状态", width = 15)
    @ApiModelProperty(value = "状态(0未上报,1已上报)")
    private Integer status = 0;
    /**
     * æ—¥æœŸ
     */
    @Excel(name = "日期", width = 15)
    @ApiModelProperty(value = "日期")
    private String theDate;
    /**
     * å¤‡æ³¨
     */
    @Excel(name = "备注", width = 15)
    @ApiModelProperty(value = "备注")
    private String remark;
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcDowntimeReason.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
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: åœæœºåŽŸå› è¡¨
 * @Author: lius
 * @Date: 2025-03-11
 */
@Data
@TableName("mdc_downtime_reason")
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "mdc_downtime_reason对象", description = "停机原因表")
public class MdcDowntimeReason extends JeecgEntity implements Serializable {
    private static final long serialVersionUID = -4421631921207859780L;
    /**
     * åœæœºç±»åž‹ï¼ˆ0:计划停机 1:非计划停机)
     */
    @Excel(name = "停机类型(0:计划停机 1:非计划停机)", width = 15)
    @ApiModelProperty(value = "停机类型(0:计划停机 1:非计划停机)")
    @Dict(dicCode = "mdc_downtime_type")
    private Integer downtimeType;
    /**
     * åœæœºåŽŸå› æè¿°
     */
    @Excel(name = "停机原因描述", width = 15)
    @ApiModelProperty(value = "停机原因描述")
    private String downtimeDescription;
    /**
     * å¤‡æ³¨
     */
    @Excel(name = "备注", width = 15)
    @ApiModelProperty(value = "备注")
    private String remark;
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ScanDowntimeJob.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,110 @@
package org.jeecg.modules.mdc.job;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.modules.mdc.dto.MdcEquipmentWaitSectionDto;
import org.jeecg.modules.mdc.entity.MdcDowntime;
import org.jeecg.modules.mdc.entity.MdcEquipmentOvertime;
import org.jeecg.modules.mdc.entity.MdcEquipmentRunningSection;
import org.jeecg.modules.mdc.service.IMdcDowntimeService;
import org.jeecg.modules.mdc.service.IMdcEquipmentRunningSectionService;
import org.jeecg.modules.mdc.util.DateUtils;
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.quartz.*;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
 * @Author: Lius
 * @CreateTime: 2025-03-12
 * @Description: æ‰«æåœæœºä»»åŠ¡
 */
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
@Slf4j
public class ScanDowntimeJob implements Job {
    /**
     * è‹¥å‚数变量名修改 QuartzJobController中也需对应修改  æ—¶é—´ï¼š yyyyMMdd ä¾‹ï¼š 20230414
     */
    private String parameter;
    public void setParameter(String parameter) {
        this.parameter = parameter;
    }
    @Resource
    private IQuartzJobService quartzJobService;
    @Resource
    private ISysAnnouncementService sysAnnouncementService;
    @Resource
    private ISysQuartzLogService sysQuartzLogService;
    @Resource
    private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService;
    @Resource
    private IMdcDowntimeService mdcDowntimeService;
    @Override
    public void execute(JobExecutionContext context) 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());
        }
        quartzLog.setParams(this.parameter);
        log.info("定时扫描待机时长超20分钟设备任务 ScanDowntimeJob start!  æ—¶é—´:{}, å‚数:{}", DateUtils.getNow(), this.parameter);
        long startTime = System.currentTimeMillis();
        try {
            String date = "";
            if (StringUtils.isNotBlank(this.parameter)) {
                date = DateUtils.format(DateUtils.toDate(this.parameter, DateUtils.STRDATE), DateUtils.STR_DATE);
            } else {
                date = DateUtils.format(DateUtils.getNow(), DateUtils.STR_DATE);
            }
            mdcDowntimeService.remove(new LambdaQueryWrapper<MdcDowntime>().eq(MdcDowntime::getTheDate, date).eq(MdcDowntime::getStatus, CommonConstant.DOWNTIME_STATUS_0));
            List<MdcEquipmentWaitSectionDto> mdcEquipmentRunningSections = mdcEquipmentRunningSectionService.findWaitList(date);
            if (mdcEquipmentRunningSections != null && !mdcEquipmentRunningSections.isEmpty()) {
                String finalDate = date;
                List<MdcDowntime> downtimeList = mdcEquipmentRunningSections.stream().map(mdcEquipmentWaitSectionDto -> {
                    MdcDowntime downtime = new MdcDowntime();
                    downtime.setEquipmentId(mdcEquipmentWaitSectionDto.getEquipmentId());
                    downtime.setEquipmentName(mdcEquipmentWaitSectionDto.getEquipmentName());
                    downtime.setTheDate(finalDate);
                    downtime.setStartTime(mdcEquipmentWaitSectionDto.getStartTime());
                    downtime.setEndTime(mdcEquipmentWaitSectionDto.getEndTime());
                    return downtime;
                }).collect(Collectors.toList());
                if (!downtimeList.isEmpty()) {
                    mdcDowntimeService.saveBatch(downtimeList);
                }
            }
            quartzLog.setIsSuccess(0);
        } catch (Exception e) {
            quartzLog.setIsSuccess(-1);
            quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
            // å‘送消息通知
            sysAnnouncementService.jobSendMessage("定时扫描待机时长超20分钟设备任务", 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/MdcDowntimeMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package org.jeecg.modules.mdc.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.mdc.entity.MdcDowntime;
import org.jeecg.modules.mdc.vo.MdcDowntimeVo;
/**
 * @Description: å¾…机停机表
 * @Author: lius
 * @Date: 2025-03-12
 */
public interface MdcDowntimeMapper extends BaseMapper<MdcDowntime> {
    IPage<MdcDowntime> pageList(Page<MdcDowntime> page, @Param("mdcDowntimeVo") MdcDowntimeVo mdcDowntimeVo);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDowntimeReasonMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package org.jeecg.modules.mdc.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.mdc.entity.MdcDowntimeReason;
/**
 * @Description: åœæœºåŽŸå› è¡¨
 * @Author: lius
 * @Date:   2025-03-11
 */
public interface MdcDowntimeReasonMapper extends BaseMapper<MdcDowntimeReason> {
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentRunningSectionMapper.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.mdc.dto.MdcAlarmListDto;
import org.jeecg.modules.mdc.dto.MdcEquipmentWaitSectionDto;
import org.jeecg.modules.mdc.entity.MdcEquipmentRunningSection;
import org.jeecg.modules.mdc.vo.MdcAlarmAnalyzeQueryVo;
@@ -75,4 +76,6 @@
    List<MdcAlarmListDto> selectAlarmList(@Param("vo") MdcAlarmAnalyzeQueryVo mdcAlarmAnalyzeQueryVo, @Param("startDate") String startDate, @Param("endDate") String endDate);
    List<Integer> getDataList(@Param("equipmentId") String equipmentId, @Param("date") Date date);
    List<MdcEquipmentWaitSectionDto> findWaitList(@Param("date") String date);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
<?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.MdcDowntimeMapper">
    <select id="pageList" resultType="org.jeecg.modules.mdc.entity.MdcDowntime">
        SELECT * FROM mdc_downtime
        <where>
            <if test="mdcDowntimeVo.equipmentId != null and mdcDowntimeVo.equipmentId != ''">
                AND equipment_id = #{ mdcDowntimeVo.equipmentId }
            </if>
            <if test="mdcDowntimeVo.equipmentName != null and mdcDowntimeVo.equipmentName != ''">
                AND equipment_name = #{ mdcDowntimeVo.equipmentName }
            </if>
            <if test="mdcDowntimeVo.startTime != null and mdcDowntimeVo.startTime != '' and mdcDowntimeVo.endTime != null and mdcDowntimeVo.endTime != ''">
                AND the_date BETWEEN #{ mdcDowntimeVo.startTime } AND #{ mdcDowntimeVo.endTime }
            </if>
            <if test="mdcDowntimeVo.equipmentIdList != null and mdcDowntimeVo.equipmentIdList.size() > 0 ">
                AND equipment_id IN
                <foreach collection="mdcDowntimeVo.equipmentIdList" item="equipmentId" index="index" open="(" close=")" separator=",">
                    #{ equipmentId }
                </foreach>
            </if>
        </where>
        ORDER BY create_time DESC
    </select>
</mapper>
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeReasonMapper.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.MdcDowntimeReasonMapper">
</mapper>
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentRunningSectionMapper.xml
@@ -173,5 +173,20 @@
          AND status IS NOT NULL
    </select>
    <select id="findWaitList" resultType="org.jeecg.modules.mdc.dto.MdcEquipmentWaitSectionDto">
        SELECT
            t1.*,
            t2.equipment_name
        FROM
            mdc_equipment_running_section t1
                LEFT JOIN mdc_equipment t2 ON t1.equipment_id = t2.equipment_id
        WHERE
            duration > 1200
          AND status = 2
          AND CONVERT ( VARCHAR, start_time, 120 ) LIKE CONCAT(#{date},'%')
        ORDER BY
            equipment_id, start_time DESC
    </select>
</mapper>
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDowntimeReasonService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package org.jeecg.modules.mdc.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.mdc.entity.MdcDowntimeReason;
import java.util.List;
/**
 * @Description: åœæœºåŽŸå› è¡¨
 * @Author: lius
 * @Date:   2025-03-11
 */
public interface IMdcDowntimeReasonService extends IService<MdcDowntimeReason> {
    List<MdcDowntimeReason> downtimeReasonList(String downtimeType);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDowntimeService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package org.jeecg.modules.mdc.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.mdc.entity.MdcDowntime;
import org.jeecg.modules.mdc.vo.MdcDowntimeVo;
import javax.servlet.http.HttpServletRequest;
/**
 * @Description: å¾…机停机表
 * @Author: lius
 * @Date: 2025-03-12
 */
public interface IMdcDowntimeService extends IService<MdcDowntime> {
    /**
     * åˆ†é¡µåˆ—表查询
     *
     * @param userId
     * @param page
     * @param mdcDowntimeVo
     * @param req
     * @return
     */
    IPage<MdcDowntime> pageList(String userId, Page<MdcDowntime> page, MdcDowntimeVo mdcDowntimeVo, HttpServletRequest req);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentRunningSectionService.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.mdc.dto.MdcAlarmListDto;
import org.jeecg.modules.mdc.dto.MdcEquipmentRunningSectionDto;
import org.jeecg.modules.mdc.dto.MdcEquipmentWaitSectionDto;
import org.jeecg.modules.mdc.entity.MdcEquipmentRunningSection;
import org.jeecg.modules.mdc.vo.MdcAlarmAnalyzeQueryVo;
import org.jeecg.modules.mdc.vo.MdcEquipmentRunningSectionVo;
@@ -88,4 +89,5 @@
    List<Integer> getDataList(String equipmentId, Date date);
    List<MdcEquipmentWaitSectionDto> findWaitList(String date);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDowntimeReasonServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package org.jeecg.modules.mdc.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.modules.mdc.entity.MdcDowntimeReason;
import org.jeecg.modules.mdc.mapper.MdcDowntimeReasonMapper;
import org.jeecg.modules.mdc.service.IMdcDowntimeReasonService;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
/**
 * @Description: åœæœºåŽŸå› è¡¨
 * @Author: lius
 * @Date:   2025-03-11
 */
@Service
public class MdcDowntimeReasonServiceImpl extends ServiceImpl<MdcDowntimeReasonMapper, MdcDowntimeReason> implements IMdcDowntimeReasonService {
    @Override
    public List<MdcDowntimeReason> downtimeReasonList(String downtimeType) {
        return this.baseMapper.selectList(new LambdaQueryWrapper<MdcDowntimeReason>().eq(MdcDowntimeReason::getDowntimeType, downtimeType));
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDowntimeServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,73 @@
package org.jeecg.modules.mdc.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.modules.mdc.entity.MdcDowntime;
import org.jeecg.modules.mdc.mapper.MdcDowntimeMapper;
import org.jeecg.modules.mdc.service.IMdcDowntimeService;
import org.jeecg.modules.mdc.service.IMdcEquipmentService;
import org.jeecg.modules.mdc.vo.MdcDowntimeVo;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
 * @Description: å¾…机停机表
 * @Author: lius
 * @Date: 2025-03-12
 */
@Service
public class MdcDowntimeServiceImpl extends ServiceImpl<MdcDowntimeMapper, MdcDowntime> implements IMdcDowntimeService {
    @Resource
    private IMdcEquipmentService mdcEquipmentService;
    /**
     * åˆ†é¡µåˆ—表查询
     *
     * @param userId
     * @param page
     * @param mdcDowntimeVo
     * @param req
     * @return
     */
    @Override
    public IPage<MdcDowntime> pageList(String userId, Page<MdcDowntime> page, MdcDowntimeVo mdcDowntimeVo, HttpServletRequest req) {
        // èŽ·å–è®¾å¤‡ID列表
        List<String> equipmentIds = getEquipmentIds(userId, mdcDowntimeVo);
        // å¦‚果设备ID列表为空,直接返回空分页
        if (equipmentIds == null || equipmentIds.isEmpty()) {
            return new Page<>(page.getCurrent(), page.getSize(), 0);
        }
        // è®¾ç½®è®¾å¤‡ID列表到查询条件中
        mdcDowntimeVo.setEquipmentIdList(equipmentIds);
        // æ‰§è¡Œåˆ†é¡µæŸ¥è¯¢
        return this.baseMapper.pageList(page, mdcDowntimeVo);
    }
    private List<String> getEquipmentIds(String userId, MdcDowntimeVo mdcDowntimeVo) {
        if (StringUtils.isNotEmpty(mdcDowntimeVo.getEquipmentId())) {
            return Collections.singletonList(mdcDowntimeVo.getEquipmentId());
        }
        if (StringUtils.isNotEmpty(mdcDowntimeVo.getParentId())) {
            return "2".equals(mdcDowntimeVo.getTypeTree())
                    ? mdcEquipmentService.getEquipmentIdsByDepart(userId, mdcDowntimeVo.getParentId())
                    : mdcEquipmentService.getEquipmentIdsProduction(userId, mdcDowntimeVo.getParentId());
        }
        return "2".equals(mdcDowntimeVo.getTypeTree())
                ? mdcEquipmentService.getEquipmentIdsByDepart(userId, null)
                : mdcEquipmentService.getEquipmentIdsProduction(userId, null);
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java
@@ -7,6 +7,7 @@
import org.jeecg.modules.mdc.dto.EquipmentMachingDto;
import org.jeecg.modules.mdc.dto.MdcAlarmListDto;
import org.jeecg.modules.mdc.dto.MdcEquipmentRunningSectionDto;
import org.jeecg.modules.mdc.dto.MdcEquipmentWaitSectionDto;
import org.jeecg.modules.mdc.entity.*;
import org.jeecg.modules.mdc.mapper.MdcEquipmentRunningSectionMapper;
import org.jeecg.modules.mdc.service.*;
@@ -740,6 +741,11 @@
        return this.baseMapper.getDataList(equipmentId, date);
    }
    @Override
    public List<MdcEquipmentWaitSectionDto> findWaitList(String date) {
        return this.baseMapper.findWaitList(date);
    }
    private Map<String, List<MdcEquipmentRunningSectionDto>> logCharts(MdcEquipmentRunningSectionVo equipmentRunningSectionVo, String date) {
        Map<String, List<MdcEquipmentRunningSectionDto>> map = new HashMap<>();
        List<MdcEquipmentRunningSectionDto> normal = new ArrayList<>();
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcDowntimeVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package org.jeecg.modules.mdc.vo;
import lombok.Data;
import org.jeecg.modules.mdc.entity.MdcDowntime;
import java.util.List;
/**
 * @Author: Lius
 * @CreateTime: 2025-03-12
 * @Description:
 */
@Data
public class MdcDowntimeVo extends MdcDowntime {
    /**
     * å¼€å§‹æ—¶é—´  ->  20220101
     */
    private String startTime;
    /**
     * ç»“束时间  ->  20220101
     */
    private String endTime;
    private String effectiveDate;
    /**
     * æ ‘类型    ->  1:车间层级   2:部门层级
     */
    private String typeTree;
    /**
     * å±‚级ID
     */
    private String parentId;
    /**
     * è®¾å¤‡Id
     */
    private String equipmentId;
    /**
     * è®¾å¤‡ids
     */
    private List<String> equipmentIdList;
    private List<String> mdcSectionIds;
}