From 5cd613c2c144b3c9a11cfee6a717dbbcfe2a7bf1 Mon Sep 17 00:00:00 2001
From: lius <Lius2225@163.com>
Date: 星期五, 14 七月 2023 11:35:14 +0800
Subject: [PATCH] 非计划停机维护功能

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcNoplanCloseMapper.xml          |   33 ++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcPlanClose.java                     |    8 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcNoplanCloseServiceImpl.java  |  246 ++++++++++++++++++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcNoplanCloseVo.java                     |   66 +++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentRepairController.java |    2 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcNoplanCloseController.java     |  183 +++++++++++++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcNoplanCloseService.java          |   45 +++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcNoplanClose.java                   |   99 ++++++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcNoplanCloseMapper.java             |   28 ++
 9 files changed, 705 insertions(+), 5 deletions(-)

diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentRepairController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentRepairController.java
index 5287bba..1322366 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentRepairController.java
+++ b/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);
     }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcNoplanCloseController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcNoplanCloseController.java
new file mode 100644
index 0000000..c4fcfd7
--- /dev/null
+++ b/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);
+    }
+
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcNoplanClose.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcNoplanClose.java
new file mode 100644
index 0000000..69ffb27
--- /dev/null
+++ b/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;
+
+
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcPlanClose.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcPlanClose.java
index e0b4c16..4f9ce7f 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcPlanClose.java
+++ b/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;
 
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcNoplanCloseMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcNoplanCloseMapper.java
new file mode 100644
index 0000000..22e9f2a
--- /dev/null
+++ b/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);
+
+
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcNoplanCloseMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcNoplanCloseMapper.xml
new file mode 100644
index 0000000..cc323de
--- /dev/null
+++ b/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>
\ No newline at end of file
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcNoplanCloseService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcNoplanCloseService.java
new file mode 100644
index 0000000..94f1f58
--- /dev/null
+++ b/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);
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcNoplanCloseServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcNoplanCloseServiceImpl.java
new file mode 100644
index 0000000..bcee671
--- /dev/null
+++ b/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;
+    }
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcNoplanCloseVo.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcNoplanCloseVo.java
new file mode 100644
index 0000000..5cf71b4
--- /dev/null
+++ b/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;
+
+
+}

--
Gitblit v1.9.3