lius
2023-07-14 5cd613c2c144b3c9a11cfee6a717dbbcfe2a7bf1
非计划停机维护功能
已添加7个文件
已修改2个文件
710 ■■■■■ 文件已修改
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentRepairController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcNoplanCloseController.java 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcNoplanClose.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcPlanClose.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcNoplanCloseMapper.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcNoplanCloseMapper.xml 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcNoplanCloseService.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcNoplanCloseServiceImpl.java 246 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcNoplanCloseVo.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentRepairController.java
@@ -75,7 +75,7 @@
        }
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        String userId = user.getId();
        Page page = new Page(pageNo, pageSize);
        Page<MdcEquipmentRepair> page = new Page<MdcEquipmentRepair>(pageNo, pageSize);
        IPage<MdcEquipmentRepair> mdcEquipmentRepairIPage = mdcEquipmentRepairService.pageList(userId, page, repair, req);
        return Result.OK(mdcEquipmentRepairIPage);
    }
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcNoplanCloseController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,183 @@
package org.jeecg.modules.mdc.controller;
import java.util.Arrays;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.aspect.annotation.AutoLog;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.mdc.entity.MdcEquipmentRepair;
import org.jeecg.modules.mdc.entity.MdcNoplanClose;
import org.jeecg.modules.mdc.service.IMdcNoplanCloseService;
import org.jeecg.modules.mdc.util.DateUtils;
import org.jeecg.modules.mdc.vo.MdcNoplanCloseVo;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
/**
 * @Description: éžè®¡åˆ’停机维护表
 * @Author: Lius
 * @Date: 2023-07-13
 * @Version: V1.0
 */
@Slf4j
@Api(tags = "非计划停机维护表")
@RestController
@RequestMapping("/mdc/mdcNoplanClose")
public class MdcNoplanCloseController extends JeecgController<MdcNoplanClose, IMdcNoplanCloseService> {
    @Resource
    private IMdcNoplanCloseService mdcNoplanCloseService;
    /**
     * åˆ†é¡µåˆ—表查询
     *
     * @param mdcNoplanClose
     * @param pageNo
     * @param pageSize
     * @param req
     * @return
     */
    @AutoLog(value = "非计划停机维护表-分页列表查询")
    @ApiOperation(value = "非计划停机维护表-分页列表查询", notes = "非计划停机维护表-分页列表查询")
    @GetMapping(value = "/list")
    public Result<?> queryPageList(MdcNoplanClose mdcNoplanClose,
                                   @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<MdcNoplanClose> page = new Page<MdcNoplanClose>(pageNo, pageSize);
        IPage<MdcNoplanClose> pageList = mdcNoplanCloseService.pageList(userId, page, mdcNoplanClose, req);
        return Result.OK(pageList);
    }
    /**
     * æ·»åŠ 
     *
     * @param mdcNoplanCloseVo
     * @return
     */
    @AutoLog(value = "非计划停机维护表-添加")
    @ApiOperation(value = "非计划停机维护表-添加", notes = "非计划停机维护表-添加")
    @PostMapping(value = "/add")
    public Result<?> add(@RequestBody MdcNoplanCloseVo mdcNoplanCloseVo) {
        if (StringUtils.isBlank(mdcNoplanCloseVo.getEquipmentIds())) {
            return Result.error("未选择设备,请排查!");
        }
        boolean result = mdcNoplanCloseService.addNoplanClose(mdcNoplanCloseVo);
        if (!result) {
            return Result.error("时间段数据已经存在,请排查!");
        }
        return Result.OK("添加成功!");
    }
    /**
     * ç¼–辑
     *
     * @param mdcNoplanClose
     * @return
     */
    @AutoLog(value = "非计划停机维护表-编辑")
    @ApiOperation(value = "非计划停机维护表-编辑", notes = "非计划停机维护表-编辑")
    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
    public Result<?> edit(@RequestBody MdcNoplanClose mdcNoplanClose) {
        //根据id查询原有数据
        MdcNoplanClose noplanClose = mdcNoplanCloseService.getById(mdcNoplanClose.getId());
        if (!noplanClose.getStartTime().equals(mdcNoplanClose.getStartTime())) {
            if (noplanClose.getStartTime().before(DateUtils.getTodayZero(DateUtils.getNow()))) {
                return Result.error("修改失败!原纪录开始时间小于当前时间!");
            }
        }
        boolean result = mdcNoplanCloseService.updateMdcNoplan(mdcNoplanClose);
        if (!result) {
            return Result.error("时间段数据已经存在,请排查!");
        }
        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) {
        mdcNoplanCloseService.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.mdcNoplanCloseService.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) {
        MdcNoplanClose mdcNoplanClose = mdcNoplanCloseService.getById(id);
        return Result.OK(mdcNoplanClose);
    }
    /**
     * å¯¼å‡ºexcel
     *
     * @param request
     * @param mdcNoplanClose
     */
    @RequestMapping(value = "/exportXls")
    public ModelAndView exportXls(HttpServletRequest request, MdcNoplanClose mdcNoplanClose) {
        return super.exportXls(request, mdcNoplanClose, MdcNoplanClose.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, MdcNoplanClose.class);
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcNoplanClose.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,99 @@
package org.jeecg.modules.mdc.entity;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.jeecg.common.system.base.entity.JeecgEntity;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
 * @Description: éžè®¡åˆ’停机维护表
 * @Author: jeecg-boot
 * @Date: 2023-07-13
 * @Version: V1.0
 */
@Data
@TableName("mdc_noplan_close")
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "mdc_noplan_close对象", description = "非计划停机维护表")
public class MdcNoplanClose extends JeecgEntity implements Serializable {
    private static final long serialVersionUID = 7255842838055432027L;
    /**
     * è®¾å¤‡ç¼–号
     */
    @Excel(name = "设备编号", width = 15)
    @ApiModelProperty(value = "设备编号")
    private String equipmentId;
    /**
     * è®¾å¤‡åç§°
     */
    @Excel(name = "设备名称", width = 15)
    @ApiModelProperty(value = "设备名称")
    private String equipmentName;
    /**
     * éžè®¡åˆ’停机类型
     */
    @Excel(name = "非计划停机类型", width = 15)
    @ApiModelProperty(value = "非计划停机类型")
    private String noplanType;
    /**
     * éžè®¡åˆ’停机开始时间
     */
    @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;
    /**
     * å¤‡æ³¨
     */
    @Excel(name = "备注", width = 15)
    @ApiModelProperty(value = "备注")
    private String remark;
    /**
     * å‰å°ä¼ å…¥ åˆ¤æ–­æ¯ä¸ªid
     */
    @TableField(exist = false)
    private String parentId;
    /**
     * å‰å°ä¼ å…¥ è½¦é—´å±‚级:1 éƒ¨é—¨å±‚级:2
     */
    @TableField(exist = false)
    private String typeTree;
    /**
     * éƒ¨é—¨parentId å…³è”子集id
     */
    @TableField(exist = false)
    private List<String> mdcSectionIds;
    @TableField(exist = false)
    private String equipmentIds;
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcPlanClose.java
@@ -31,24 +31,24 @@
     */
    @Excel(name = "计划停机类型", width = 15)
    @ApiModelProperty(value = "计划停机类型")
    private java.lang.String planCloseType;
    private String planCloseType;
    /**
     * è®¡åˆ’停机时间类型
     */
    @Excel(name = "计划停机时间类型", width = 15)
    @ApiModelProperty(value = "计划停机时间类型")
    private java.lang.String planCloseTimeType;
    private String planCloseTimeType;
    /**
     * æ—¶é•¿ï¼ˆåˆ†é’Ÿï¼‰
     */
    @Excel(name = "时长(分钟)", width = 15)
    @ApiModelProperty(value = "时长(分钟)")
    private java.lang.Integer planCloseTimeLong;
    private Integer planCloseTimeLong;
    /**
     * å¤‡æ³¨
     */
    @Excel(name = "备注", width = 15)
    @ApiModelProperty(value = "备注")
    private java.lang.String remark;
    private String remark;
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcNoplanCloseMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
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.MdcNoplanClose;
/**
 * @Description: éžè®¡åˆ’停机维护表
 * @Author: Lius
 * @Date: 2023-07-13
 * @Version: V1.0
 */
public interface MdcNoplanCloseMapper extends BaseMapper<MdcNoplanClose> {
    /**
     * åˆ†é¡µæŸ¥è¯¢
     *
     * @param page
     * @param mdcNoplanClose
     * @return
     */
    IPage<MdcNoplanClose> pageList(Page<MdcNoplanClose> page, @Param("mdcNoplanClose") MdcNoplanClose mdcNoplanClose);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcNoplanCloseMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
<?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.MdcNoplanCloseMapper">
    <!--分页查询-->
    <select id="pageList" resultType="org.jeecg.modules.mdc.entity.MdcNoplanClose">
        SELECT
            *
        FROM
            mdc_noplan_close
        <where>
            <if test="mdcNoplanClose.equipmentName != null and mdcNoplanClose.equipmentName != '' ">
                AND equipment_name LIKE CONCAT(CONCAT('%',#{mdcNoplanClose.equipmentName}),'%')
            </if>
            <if test="mdcNoplanClose.equipmentId != null and mdcNoplanClose.equipmentId != '' ">
                AND equipment_id LIKE CONCAT(CONCAT('%',#{mdcNoplanClose.equipmentId}),'%')
            </if>
            <if test="mdcNoplanClose.startTime != null ">
                AND end_time &gt;= #{ mdcNoplanClose.startTime }
            </if>
            <if test="mdcNoplanClose.endTime != null ">
                AND start_time &lt;= #{ mdcNoplanClose.endTime }
            </if>
            <if test="mdcNoplanClose.mdcSectionIds != null and mdcNoplanClose.mdcSectionIds.size() > 0 ">
                AND equipment_id IN
                <foreach collection="mdcNoplanClose.mdcSectionIds" item="id" index="index" open="(" close=")" separator=",">
                    #{ id }
                </foreach>
            </if>
            ORDER BY start_time ASC
        </where>
    </select>
</mapper>
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcNoplanCloseService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
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.MdcNoplanClose;
import org.jeecg.modules.mdc.vo.MdcNoplanCloseVo;
import javax.servlet.http.HttpServletRequest;
/**
 * @Description: éžè®¡åˆ’停机维护表
 * @Author: Lius
 * @Date: 2023-07-13
 * @Version: V1.0
 */
public interface IMdcNoplanCloseService extends IService<MdcNoplanClose> {
    /**
     * åˆ†é¡µæŸ¥è¯¢
     *
     * @param userId
     * @param page
     * @param mdcNoplanClose
     * @param req
     * @return
     */
    IPage<MdcNoplanClose> pageList(String userId, Page<MdcNoplanClose> page, MdcNoplanClose mdcNoplanClose, HttpServletRequest req);
    /**
     * ä¿å­˜æ•°æ®
     *
     * @param mdcNoplanCloseVo
     * @return
     */
    boolean addNoplanClose(MdcNoplanCloseVo mdcNoplanCloseVo);
    /**
     * ç¼–辑
     * @param mdcNoplanClose
     * @return
     */
    boolean updateMdcNoplan(MdcNoplanClose mdcNoplanClose);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcNoplanCloseServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,246 @@
package org.jeecg.modules.mdc.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.lang.StringUtils;
import org.jeecg.modules.mdc.entity.MdcEquipment;
import org.jeecg.modules.mdc.entity.MdcEquipmentRepair;
import org.jeecg.modules.mdc.entity.MdcNoplanClose;
import org.jeecg.modules.mdc.mapper.MdcNoplanCloseMapper;
import org.jeecg.modules.mdc.service.IMdcEquipmentService;
import org.jeecg.modules.mdc.service.IMdcNoplanCloseService;
import org.jeecg.modules.mdc.util.DateUtils;
import org.jeecg.modules.mdc.vo.MdcNoplanCloseVo;
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.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
 * @Description: éžè®¡åˆ’停机维护表
 * @Author: Lius
 * @Date: 2023-07-13
 * @Version: V1.0
 */
@Service
public class MdcNoplanCloseServiceImpl extends ServiceImpl<MdcNoplanCloseMapper, MdcNoplanClose> implements IMdcNoplanCloseService {
    @Resource
    private IMdcEquipmentService mdcEquipmentService;
    @Override
    public IPage<MdcNoplanClose> pageList(String userId, Page<MdcNoplanClose> page, MdcNoplanClose mdcNoplanClose, HttpServletRequest req) {
        List<String> equipmentIds = new ArrayList<>();
        if (StringUtils.isNotEmpty(mdcNoplanClose.getParentId()) && StringUtils.isEmpty(mdcNoplanClose.getEquipmentId())) {
            if ("2".equals(mdcNoplanClose.getTypeTree())) {
                //部门层级
                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, mdcNoplanClose.getParentId());
            } else {
                //产线层级
                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, mdcNoplanClose.getParentId());
            }
        } else if (StringUtils.isNotEmpty(mdcNoplanClose.getEquipmentId())) {
            //单台设备信息
            mdcNoplanClose.setMdcSectionIds(Collections.singletonList(mdcNoplanClose.getEquipmentId()));
        } else {
            //查询用户拥有的所有设备信息
            if ("2".equals(mdcNoplanClose.getTypeTree())) {
                //部门层级
                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null);
            } else {
                //产线层级
                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
            }
        }
        if (mdcNoplanClose.getMdcSectionIds() == null || mdcNoplanClose.getMdcSectionIds().isEmpty()) {
            mdcNoplanClose.setMdcSectionIds(equipmentIds);
        }
        if (mdcNoplanClose.getMdcSectionIds() == null || mdcNoplanClose.getMdcSectionIds().isEmpty()) {
            return null;
        }
        return this.baseMapper.pageList(page, mdcNoplanClose);
    }
    /**
     * ä¿å­˜æ•°æ®
     *
     * @param mdcNoplanCloseVo
     * @return
     */
    @Override
    public boolean addNoplanClose(MdcNoplanCloseVo mdcNoplanCloseVo) {
        boolean result = false;
        String[] equipmentIds = mdcNoplanCloseVo.getEquipmentIds().split(",");
        List<MdcNoplanClose> mdcNoplanCloseList = new ArrayList<>();
        a:
        for (String equipmentId : equipmentIds) {
            Date startTime = DateUtils.getFormatDate(mdcNoplanCloseVo.getStartTime(), DateUtils.STR_DATE_TIME_SMALL);
            Date endTime = DateUtils.getFormatDate(mdcNoplanCloseVo.getEndTime(), DateUtils.STR_DATE_TIME_SMALL);
            MdcEquipment mdcEquipment = mdcEquipmentService.findEquipmentNameByEquipmentId(equipmentId);
            LambdaQueryWrapper<MdcNoplanClose> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(MdcNoplanClose::getEquipmentId, equipmentId);
            queryWrapper.orderByAsc(MdcNoplanClose::getStartTime);
            List<MdcNoplanClose> mdcNoplanCloses = this.baseMapper.selectList(queryWrapper);
            if (mdcNoplanCloses != null && !mdcNoplanCloses.isEmpty()) {
                for (MdcNoplanClose noplanClose : mdcNoplanCloses) {
                    if (startTime.before(noplanClose.getStartTime())) {
                        //开始时间在记录开始时间之前
                        if (endTime.after(noplanClose.getStartTime())) {
                            //结束时间在记录开始时间之后
                            if (endTime.before(noplanClose.getEndTime())) {
                                //结束时间在记录结束时间之前 -> ä¿®æ”¹ç»“束时间为记录开始时间
                                endTime = noplanClose.getStartTime();
                            } else {
                                //结束时间在记录结束时间之后 -> åˆ‡å‰²ä¸ºä¸¤æ®µæ—¶é—´ å‰ä¸€æ®µæ—¶é—´ä¸€å®šå”¯ä¸€ï¼ŒåŽä¸€æ®µæ—¶é—´èµ‹å€¼é‡æ–°æ¯”较
                                //保存第一段记录
                                MdcNoplanClose mdcNoplanClose1 = new MdcNoplanClose();
                                mdcNoplanClose1.setEquipmentId(mdcEquipment.getEquipmentId());
                                mdcNoplanClose1.setEquipmentName(mdcEquipment.getEquipmentName());
                                mdcNoplanClose1.setStartTime(startTime);
                                mdcNoplanClose1.setEndTime(noplanClose.getStartTime());
                                mdcNoplanClose1.setNoplanType(mdcNoplanCloseVo.getNoplanType());
                                mdcNoplanClose1.setRemark(mdcNoplanCloseVo.getRemark());
                                mdcNoplanCloseList.add(mdcNoplanClose1);
                                //第二段时间赋值给
                                startTime = noplanClose.getEndTime();
                            }
                        }
                    } else {
                        //开始时间在记录开始时间之后
                        if (startTime.before(noplanClose.getEndTime())) {
                            //开始时间在记录结束时间之前
                            if (endTime.before(noplanClose.getEndTime())) {
                                //结束时间在记录结束时间之前 -> æ—¶é—´é‡å 
                                continue a;
                            } else {
                                //结束时间在记录结束时间之后 -> ä¿®æ”¹å¼€å§‹æ—¶é—´ä¸ºè®°å½•结束时间
                                startTime = noplanClose.getEndTime();
                            }
                        }
                    }
                }
                MdcNoplanClose mdcNoplanClose1 = new MdcNoplanClose();
                mdcNoplanClose1.setEquipmentId(mdcEquipment.getEquipmentId());
                mdcNoplanClose1.setEquipmentName(mdcEquipment.getEquipmentName());
                mdcNoplanClose1.setStartTime(startTime);
                mdcNoplanClose1.setEndTime(endTime);
                mdcNoplanClose1.setNoplanType(mdcNoplanCloseVo.getNoplanType());
                mdcNoplanClose1.setRemark(mdcNoplanCloseVo.getRemark());
                mdcNoplanCloseList.add(mdcNoplanClose1);
                // è¿‡æ»¤
                mdcNoplanCloseList = mdcNoplanCloseList.stream().filter(mdcNoplanClose2 -> !mdcNoplanClose2.getEndTime().equals(mdcNoplanClose2.getStartTime())).collect(Collectors.toList());
                boolean b = super.saveBatch(mdcNoplanCloseList);
                if (b) {
                    result = true;
                }
                mdcNoplanCloseList.clear();
            } else {
                // è¡¨ä¸­æ— è®°å½•正常添加
                MdcNoplanClose noplanClose = new MdcNoplanClose();
                noplanClose.setEquipmentId(mdcEquipment.getEquipmentId());
                noplanClose.setEquipmentName(mdcEquipment.getEquipmentName());
                noplanClose.setStartTime(startTime);
                noplanClose.setEndTime(endTime);
                noplanClose.setNoplanType(mdcNoplanCloseVo.getNoplanType());
                noplanClose.setRemark(mdcNoplanCloseVo.getRemark());
                boolean b = super.save(noplanClose);
                if (b) {
                    result = true;
                }
            }
        }
        return result;
    }
    /**
     * ç¼–辑
     *
     * @param mdcNoplanClose
     * @return
     */
    @Override
    public boolean updateMdcNoplan(MdcNoplanClose mdcNoplanClose) {
        boolean result = false;
        LambdaQueryWrapper<MdcNoplanClose> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(MdcNoplanClose::getEquipmentId, mdcNoplanClose.getEquipmentId());
        queryWrapper.orderByAsc(MdcNoplanClose::getStartTime);
        queryWrapper.ne(MdcNoplanClose::getId, mdcNoplanClose.getId());
        List<MdcNoplanClose> mdcNoplanCloses = this.baseMapper.selectList(queryWrapper);
        List<MdcNoplanClose> mdcNoplanCloseList = new ArrayList<>();
        if (mdcNoplanCloses != null && !mdcNoplanCloses.isEmpty()) {
            Date startTime = mdcNoplanClose.getStartTime();
            Date endTime = mdcNoplanClose.getEndTime();
            for (MdcNoplanClose noplanClose : mdcNoplanCloses) {
                if (startTime.before(noplanClose.getStartTime())) {
                    //开始时间在记录开始时间之前
                    if (endTime.after(noplanClose.getStartTime())) {
                        //结束时间在记录开始时间之后
                        if (endTime.before(noplanClose.getEndTime())) {
                            //结束时间在记录结束时间之前 -> ä¿®æ”¹ç»“束时间为记录开始时间
                            endTime = noplanClose.getStartTime();
                        } else {
                            //结束时间在记录结束时间之后 -> åˆ‡å‰²ä¸ºä¸¤æ®µæ—¶é—´ å‰ä¸€æ®µæ—¶é—´ä¸€å®šå”¯ä¸€ï¼ŒåŽä¸€æ®µæ—¶é—´èµ‹å€¼é‡æ–°æ¯”较
                            //保存第一段记录
                            MdcNoplanClose mdcNoplanClose1 = new MdcNoplanClose();
                            mdcNoplanClose1.setEquipmentId(mdcNoplanClose.getEquipmentId());
                            mdcNoplanClose1.setEquipmentName(mdcNoplanClose.getEquipmentName());
                            mdcNoplanClose1.setStartTime(startTime);
                            mdcNoplanClose1.setEndTime(noplanClose.getStartTime());
                            mdcNoplanClose1.setNoplanType(mdcNoplanClose.getNoplanType());
                            mdcNoplanClose1.setRemark(mdcNoplanClose.getRemark());
                            mdcNoplanCloseList.add(mdcNoplanClose1);
                            //第二段时间赋值给
                            startTime = noplanClose.getEndTime();
                        }
                    }
                } else {
                    //开始时间在记录开始时间之后
                    if (startTime.before(noplanClose.getEndTime())) {
                        //开始时间在记录结束时间之前
                        if (endTime.before(noplanClose.getEndTime())) {
                            //结束时间在记录结束时间之前 -> æ—¶é—´é‡å 
//                            return false;
                            break;
                        } else {
                            //结束时间在记录结束时间之后 -> ä¿®æ”¹å¼€å§‹æ—¶é—´ä¸ºè®°å½•结束时间
                            startTime = noplanClose.getEndTime();
                        }
                    }
                }
            }
            if (!mdcNoplanCloseList.isEmpty()) {
                Date finalStartTime = startTime;
                Date finalEndTime = endTime;
                mdcNoplanCloseList = mdcNoplanCloseList.stream().filter(mdcNoplanClose1 ->
                        !mdcNoplanClose1.getEndTime().equals(mdcNoplanClose1.getStartTime())
                                && (!mdcNoplanClose1.getStartTime().equals(finalStartTime) && !mdcNoplanClose1.getEndTime().equals(finalEndTime))).collect(Collectors.toList());
                result = super.saveBatch(mdcNoplanCloseList);
            }
            if (!startTime.equals(endTime)) {
                mdcNoplanClose.setStartTime(startTime);
                mdcNoplanClose.setEndTime(endTime);
                result = super.updateById(mdcNoplanClose);
            } else if (!mdcNoplanCloseList.isEmpty()) {
                result = super.removeById(mdcNoplanClose);
            } else {
                return false;
            }
        } else {
            //无其他记录, å¯ç›´æŽ¥ä¿®æ”¹
            result = super.updateById(mdcNoplanClose);
        }
        return result;
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcNoplanCloseVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
package org.jeecg.modules.mdc.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.util.List;
/**
 * @author: LiuS
 * @create: 2023-07-14 11:19
 */
@Data
public class MdcNoplanCloseVo {
    private String id;
    /**
     * è®¾å¤‡ç¼–号
     */
    private String equipmentId;
    /**
     * è®¾å¤‡åç§°
     */
    private String equipmentName;
    /**
     * éžè®¡åˆ’停机类型
     */
    private String noplanType;
    /**
     * éžè®¡åˆ’停机开始时间
     */
    private String startTime;
    /**
     * éžè®¡åˆ’停机结束时间
     */
    private String endTime;
    /**
     * å¤‡æ³¨
     */
    private String remark;
    /**
     * å‰å°ä¼ å…¥ åˆ¤æ–­æ¯ä¸ªid
     */
    private String parentId;
    /**
     * å‰å°ä¼ å…¥ è½¦é—´å±‚级:1 éƒ¨é—¨å±‚级:2
     */
    private String typeTree;
    /**
     * éƒ¨é—¨parentId å…³è”子集id
     */
    private List<String> mdcSectionIds;
    /**
     * è®¾å¤‡ç»„
     */
    private String equipmentIds;
}