From 29dcac1a7bb5758b6f9a39fd0738f6ab367b5418 Mon Sep 17 00:00:00 2001
From: hyingbo <1363390067@qq.com>
Date: 星期二, 10 六月 2025 13:29:52 +0800
Subject: [PATCH] 操作工停机上报接口,操作工刷卡登录

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDowntimeOperatorMapper.java                      |   23 ++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ScanDowntimeJob.java                                   |    1 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDowntimeServiceOperatorImpl.java           |  171 +++++++++++++++++++
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/cas/controller/CasClientController.java     |    2 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDowntimeReasonController.java                |   23 ++
 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java                      |    2 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcDowntimeVo.java                                      |   10 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/SplitDowntimeVo.java                                    |   70 +++++++
 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml                   |   14 +
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java |    4 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDowntimeOperatorController.java              |   85 +++++++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentController.java                     |   11 +
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java      |    8 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDowntimeOperatorService.java                   |   23 ++
 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java           |   28 +++
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java         |    2 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcDowntime.java                                    |   13 +
 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java                   |    6 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java |    2 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeOperatorMapper.xml                   |   14 +
 20 files changed, 502 insertions(+), 10 deletions(-)

diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java
index 57d0f71..e0e0e88 100644
--- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java
+++ b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java
@@ -140,4 +140,6 @@
     List<MdcEquipment> findByProIdsAndTeamCode(@Param("mdcProductionIds") List<String> mdcProductionIds, @Param("teamCodeList") List<String> teamCodeList);
 
     List<MdcEquipment> findByProIdsAndType(@Param("mdcProductionIds") List<String> mdcProductionIds, @Param("typeList") List<String> typeList);
+
+    List<MdcEquipment> getEquipmentList(@Param("allProductionIds") List<String> allProductionIds);
 }
diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml
index 8440226..80df077 100644
--- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml
+++ b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml
@@ -89,6 +89,20 @@
         </foreach>
     </select>
 
+    <!--鏍规嵁浜х嚎id鏌ヨ璁惧id闆嗗悎-->
+    <select id="getEquipmentList" resultType="org.jeecg.modules.mdc.entity.MdcEquipment">
+        SELECT
+        me.*
+        FROM
+        mdc_equipment me
+        LEFT JOIN mdc_production_equipment mpe ON me.id = mpe.equipment_id
+        WHERE
+        mpe.production_id IN
+        <foreach collection="allProductionIds" index="index" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
+
     <!--鏌ヨ璁惧鐩戞帶淇℃伅-->
     <select id="checkStatusFromEquipmentIds" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentMonitor">
         SELECT
diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java
index dce27ed..e4e1ba3 100644
--- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java
+++ b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java
@@ -239,4 +239,10 @@
      * @return
      */
     List<MdcEquipment> findByProIdsAndType(List<String> allProductionIds, List<String> typeList);
+
+    /**
+     * 鏍规嵁鐢ㄦ埛鏌ヨ璁惧鍒楄〃淇℃伅
+     * @return
+     */
+    List<MdcEquipment> getEquipmentList();
 }
diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java
index 3964351..9f09066 100644
--- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java
+++ b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
@@ -1042,4 +1043,31 @@
         return this.baseMapper.findByProIdsAndType(allProductionIds, typeList);
     }
 
+    @Override
+    public List<MdcEquipment> getEquipmentList() {
+
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String userId = user.getId();
+        if (StringUtils.isNotEmpty(user.getEquipmentIds())) {
+            return this.baseMapper.selectList(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, Arrays.asList(user.getEquipmentIds().split(StringPool.COMMA))));
+        }
+        //鑾峰彇鎵�鏈変骇绾挎暟鎹�
+        List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0.toString()).orderByAsc(MdcProduction::getProductionOrder));
+        //鏍规嵁鐢ㄦ埛id鑾峰彇鎷ユ湁鐨勪骇绾夸俊鎭泦鍚�
+        List<String> productionIds = mdcUserProductionService.queryProductionIdsByUserId(userId);
+        List<String> allProductionIds = new ArrayList<>();
+        //鎵惧埌鎵�鏈変骇绾縤d鐨勪笂绾d
+        if (productionIds != null && !productionIds.isEmpty()) {
+            for (String productionId : productionIds) {
+                this.getAllProductionIds(productionList, productionId, allProductionIds);
+            }
+        }
+        //鏍规嵁浜х嚎闆嗗悎鏌ユ壘鎵�鏈夎澶噄d
+        if (allProductionIds.isEmpty()) {
+            return null;
+        }
+        List<MdcEquipment> equipmentIds = this.baseMapper.getEquipmentList(allProductionIds);
+        return equipmentIds;
+    }
+
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDowntimeOperatorController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDowntimeOperatorController.java
new file mode 100644
index 0000000..e9ea792
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDowntimeOperatorController.java
@@ -0,0 +1,85 @@
+package org.jeecg.modules.mdc.controller;
+
+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.system.base.controller.JeecgController;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.mdc.dto.MdcDowntimeDto;
+import org.jeecg.modules.mdc.entity.MdcDowntime;
+import org.jeecg.modules.mdc.service.IMdcDowntimeOperatorService;
+import org.jeecg.modules.mdc.vo.MdcDowntimeVo;
+import org.jeecg.modules.mdc.vo.SplitDowntimeVo;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * @Description: 鎿嶄綔宸ュ仠鏈哄緟鏈鸿〃
+ * @Author: lius
+ * @Date: 2025-03-12
+ */
+@Slf4j
+@Api(tags = "鎿嶄綔宸ュ仠鏈哄緟鏈鸿〃")
+@RestController
+@RequestMapping("/mdc/operator/mdcDowntime")
+public class MdcDowntimeOperatorController  extends JeecgController<MdcDowntime, IMdcDowntimeOperatorService> {
+
+
+    @Resource
+    private IMdcDowntimeOperatorService mdcDowntimeService;
+
+    /**
+     * 鍒嗛〉鍒楄〃鏌ヨ
+     *
+     * @param mdcDowntimeVo
+     * @param pageNo
+     * @param pageSize
+     * @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) {
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String userId = user.getId();
+        Page<MdcDowntimeDto> page = new Page<MdcDowntimeDto>(pageNo, pageSize);
+        IPage<MdcDowntimeDto> pageList = mdcDowntimeService.pageList(mdcDowntimeVo, page);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 缁存姢鍋滄満
+     *
+     * @param mdcDowntimeVo
+     * @return
+     */
+    @AutoLog(value = "寰呮満鍋滄満琛�-缁存姢鍋滄満")
+    @ApiOperation(value = "寰呮満鍋滄満琛�-缁存姢鍋滄満", notes = "寰呮満鍋滄満琛�-缁存姢鍋滄満")
+    @RequestMapping(value = "/updateReason", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<?> updateReason(@RequestBody MdcDowntimeVo mdcDowntimeVo) {
+        mdcDowntimeService.updateReason(mdcDowntimeVo);
+        return Result.OK("缂栬緫鎴愬姛!");
+    }
+
+    /**
+     * 鍋滄満鎷嗗垎
+     *
+     * @param splitDowntimeVo
+     * @return
+     */
+    @AutoLog(value = "寰呮満鍋滄満琛�-鍋滄満鎷嗗垎")
+    @ApiOperation(value = "寰呮満鍋滄満琛�-鍋滄満鎷嗗垎", notes = "寰呮満鍋滄満琛�-鍋滄満鎷嗗垎")
+    @RequestMapping(value = "/splitDowntime", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<?> splitDowntime(@RequestBody SplitDowntimeVo splitDowntimeVo) {
+        mdcDowntimeService.splitDowntime(splitDowntimeVo);
+        return Result.OK("鎷嗗垎鎴愬姛!");
+    }
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDowntimeReasonController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDowntimeReasonController.java
index 2bfc351..6c65a0b 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDowntimeReasonController.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDowntimeReasonController.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.beust.jcommander.internal.Lists;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -10,9 +11,9 @@
 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.dto.OptionsDto;
 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;
 
@@ -166,4 +167,24 @@
         return Result.OK(result);
     }
 
+    /**
+     * 鍋滄満鍘熷洜涓嬫媺閫夋嫨
+     *
+     * @return
+     */
+    @AutoLog(value = "鍋滄満鍘熷洜琛�-鍋滄満鍘熷洜涓嬫媺閫夋嫨")
+    @ApiOperation(value = "鍋滄満鍘熷洜琛�-鍋滄満鍘熷洜涓嬫媺閫夋嫨", notes = "鍋滄満鍘熷洜琛�-鍋滄満鍘熷洜涓嬫媺閫夋嫨")
+    @GetMapping(value = "/reasonList")
+    public Result<List<OptionsDto>> reasonList() {
+        List<MdcDowntimeReason> result = mdcDowntimeReasonService.list();
+        List<OptionsDto> list = Lists.newArrayList();
+        result.forEach(mdcDowntimeReason -> {
+            OptionsDto optionsDto = new OptionsDto();
+            optionsDto.setValue(mdcDowntimeReason.getId());
+            optionsDto.setLabel(mdcDowntimeReason.getDowntimeDescription());
+            list.add(optionsDto);
+        });
+        return Result.OK(list);
+    }
+
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentController.java
index 69a1a9f..5c1e872 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentController.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentController.java
@@ -111,6 +111,17 @@
     }
 
     /**
+     * 鏍规嵁鐢ㄦ埛鏌ヨ璁惧鍒楄〃淇℃伅
+     */
+    @AutoLog(value = "璁惧琛�-鏍规嵁鐢ㄦ埛鏌ヨ璁惧鍒楄〃淇℃伅")
+    @ApiOperation(value = "璁惧琛�-鏍规嵁鐢ㄦ埛鏌ヨ璁惧鍒楄〃淇℃伅", notes = "璁惧琛�-鏍规嵁鐢ㄦ埛鏌ヨ璁惧鍒楄〃淇℃伅")
+    @GetMapping(value = "/getEquipmentList")
+    public Result<List<MdcEquipment>> getEquipmentList() {
+        List<MdcEquipment> list = mdcEquipmentService.getEquipmentList();
+        return Result.OK(list);
+    }
+
+    /**
      * 璁惧鐩戞帶鍒楄〃
      */
     @AutoLog(value = "璁惧琛�-璁惧鐩戞帶鍒楄〃")
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcDowntime.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcDowntime.java
index cefff4d..b931cea 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcDowntime.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcDowntime.java
@@ -81,5 +81,18 @@
     @Excel(name = "澶囨敞", width = 15)
     @ApiModelProperty(value = "澶囨敞")
     private String remark;
+    /**
+     * 褰曞叆绫诲瀷
+     */
+    @Excel(name = "褰曞叆绫诲瀷", width = 15)
+    @ApiModelProperty(value = "褰曞叆绫诲瀷")
+    @Dict(dicCode = "enter_type")
+    private Integer enterType;
+    /**
+     * 鍋滄満鏃堕暱
+     */
+    @Excel(name = "鍋滄満鏃堕暱", width = 15)
+    @ApiModelProperty(value = "鍋滄満鏃堕暱")
+    private Integer shutdownDuration;
 
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ScanDowntimeJob.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ScanDowntimeJob.java
index eafa8fc..b40b9be 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ScanDowntimeJob.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ScanDowntimeJob.java
@@ -90,6 +90,7 @@
                     downtime.setTheDate(finalDate);
                     downtime.setStartDate(mdcEquipmentWaitSectionDto.getStartTime());
                     downtime.setEndDate(mdcEquipmentWaitSectionDto.getEndTime());
+                    downtime.setShutdownDuration(DateUtils.differentMinutes(downtime.getStartDate(), downtime.getEndDate()));
                     return downtime;
                 }).collect(Collectors.toList());
                 if (!downtimeList.isEmpty()) {
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDowntimeOperatorMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDowntimeOperatorMapper.java
new file mode 100644
index 0000000..bc7b4a8
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDowntimeOperatorMapper.java
@@ -0,0 +1,23 @@
+package org.jeecg.modules.mdc.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.mdc.dto.MdcDowntimeDto;
+import org.jeecg.modules.mdc.entity.MdcDowntime;
+import org.jeecg.modules.mdc.vo.MdcDowntimeVo;
+
+import java.util.List;
+
+/**
+ * @Description: 鎿嶄綔宸ュ緟鏈哄仠鏈鸿〃
+ * @Author: lius
+ * @Date: 2025-03-12
+ */
+public interface MdcDowntimeOperatorMapper extends BaseMapper<MdcDowntime> {
+
+    IPage<MdcDowntimeDto> page(Page<MdcDowntimeDto> page, @Param(Constants.WRAPPER) QueryWrapper<MdcDowntimeDto> queryWrapper);
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeOperatorMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeOperatorMapper.xml
new file mode 100644
index 0000000..db58e0e
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeOperatorMapper.xml
@@ -0,0 +1,14 @@
+<?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.MdcDowntimeOperatorMapper">
+
+    <select id="page" resultType="org.jeecg.modules.mdc.dto.MdcDowntimeDto">
+        SELECT
+            t1.* ,
+            t2.downtime_type downtimeType,
+            t2.downtime_description downtimeDescription
+        FROM mdc_downtime t1 LEFT JOIN mdc_downtime_reason t2 ON t1.reason_id = t2.id
+        ${ew.customSqlSegment}
+        ORDER BY t1.create_time DESC
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDowntimeOperatorService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDowntimeOperatorService.java
new file mode 100644
index 0000000..5723186
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDowntimeOperatorService.java
@@ -0,0 +1,23 @@
+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.dto.MdcDowntimeDto;
+import org.jeecg.modules.mdc.entity.MdcDowntime;
+import org.jeecg.modules.mdc.vo.MdcDowntimeVo;
+import org.jeecg.modules.mdc.vo.SplitDowntimeVo;
+
+/**
+ * @Description: 鎿嶄綔宸ュ緟鏈哄仠鏈鸿〃
+ * @Author: lius
+ * @Date: 2025-03-12
+ */
+public interface IMdcDowntimeOperatorService extends IService<MdcDowntime> {
+
+    IPage<MdcDowntimeDto> pageList(MdcDowntimeVo mdcDowntimeVo, Page<MdcDowntimeDto> page);
+
+    void updateReason(MdcDowntimeVo mdcDowntimeVo);
+
+    void splitDowntime(SplitDowntimeVo splitDowntimeVo);
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDowntimeServiceOperatorImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDowntimeServiceOperatorImpl.java
new file mode 100644
index 0000000..cdb8268
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDowntimeServiceOperatorImpl.java
@@ -0,0 +1,171 @@
+
+package org.jeecg.modules.mdc.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.beust.jcommander.internal.Lists;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.mdc.dto.MdcDowntimeDto;
+import org.jeecg.modules.mdc.entity.MdcDowntime;
+import org.jeecg.modules.mdc.mapper.MdcDowntimeOperatorMapper;
+import org.jeecg.modules.mdc.service.IMdcDowntimeOperatorService;
+import org.jeecg.modules.mdc.service.IMdcEquipmentService;
+import org.jeecg.modules.mdc.util.DateUtils;
+import org.jeecg.modules.mdc.vo.MdcDowntimeVo;
+import org.jeecg.modules.mdc.vo.SplitDowntimeVo;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+/**
+ * @Description: 鎿嶄綔宸ュ緟鏈哄仠鏈鸿〃
+ * @Author: lius
+ * @Date: 2025-03-12
+ */
+@Service
+public class MdcDowntimeServiceOperatorImpl extends ServiceImpl<MdcDowntimeOperatorMapper, MdcDowntime> implements IMdcDowntimeOperatorService {
+
+    @Resource
+    private IMdcEquipmentService mdcEquipmentService;
+
+    @Override
+    public IPage<MdcDowntimeDto> pageList(MdcDowntimeVo mdcDowntimeVo, Page<MdcDowntimeDto> page) {
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String userId = user.getId();
+        // 鑾峰彇璁惧ID鍒楄〃
+        List<String> equipmentIds = Lists.newArrayList();
+        if (StringUtils.isNotBlank(user.getEquipmentIds())) {
+            equipmentIds = Arrays.asList(user.getEquipmentIds().split(StringPool.COMMA));
+        }else {
+            equipmentIds = getEquipmentIds(userId, mdcDowntimeVo);
+        }
+
+        // 濡傛灉璁惧ID鍒楄〃涓虹┖锛岀洿鎺ヨ繑鍥炵┖鍒嗛〉
+        if (equipmentIds == null || equipmentIds.isEmpty()) {
+            return new Page<>(page.getCurrent(), page.getSize(), 0);
+        }
+
+        QueryWrapper<MdcDowntimeDto> queryWrapper = Wrappers.query();
+        if (CollectionUtils.isNotEmpty(equipmentIds)) {
+            queryWrapper.in("t1.equipment_id", equipmentIds);
+        }
+        if (StringUtils.isNotBlank(mdcDowntimeVo.getEquipmentId())) {
+            queryWrapper.eq("t1.equipment_id", mdcDowntimeVo.getEquipmentId());
+        }
+        if (Objects.nonNull(mdcDowntimeVo.getStartDate())) {
+            queryWrapper.ge("t1.start_date", mdcDowntimeVo.getStartDate());
+        }
+        if (Objects.nonNull(mdcDowntimeVo.getEndDate())) {
+            queryWrapper.le("t1.end_date", mdcDowntimeVo.getEndDate());
+        }
+        if (StringUtils.isNotBlank(mdcDowntimeVo.getDowntimeDescription())) {
+            queryWrapper.eq("t2.id", mdcDowntimeVo.getDowntimeDescription());
+        }
+
+        return this.baseMapper.page(page, queryWrapper);
+    }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class})
+    public void updateReason(MdcDowntimeVo mdcDowntimeVo) {
+        if (StringUtils.isEmpty(mdcDowntimeVo.getDownTimeIds())) {
+            throw new JeecgBootException("璇烽�夋嫨闇�瑕佺淮鎶ゅ仠鏈虹殑鏁版嵁");
+        }
+
+        List<MdcDowntime> mdcDowntimeList = this.listByIds(Arrays.asList(mdcDowntimeVo.getDownTimeIds().split(StringPool.COMMA)));
+        mdcDowntimeList.forEach(mdcDowntime -> {
+            mdcDowntime.setReasonId(mdcDowntimeVo.getReasonId());
+        });
+        this.updateBatchById(mdcDowntimeList);
+    }
+
+    @Transactional(rollbackFor = {Exception.class})
+    @Override
+    public void splitDowntime(SplitDowntimeVo splitDowntimeVo) {
+        if (StringUtils.isBlank(splitDowntimeVo.getId())) {
+            throw new JeecgBootException("璇烽�夋嫨闇�瑕佹媶鍒嗗仠鏈虹殑鏁版嵁");
+        }
+
+        MdcDowntime mdcDowntime = this.getById(splitDowntimeVo.getId());
+
+        if (StringUtils.isNotBlank(mdcDowntime.getReasonId())) {
+            throw new JeecgBootException("宸茶缃仠鏈哄師鍥狅紝鏃犳硶鎷嗗垎鍋滄満");
+        }
+
+        //姣旇緝鎷嗗垎涓�娈电殑鏃ユ湡鏄惁鍐嶅尯闂磋寖鍥村唴锛堝紑濮嬫椂闂达細startTime 缁撴潫鏃堕棿锛氬叆鏃犱簩娈垫椂闂达紝鍒欏彇endTime锛�
+        if (Objects.nonNull(splitDowntimeVo.getFirstMiddleTime())) {
+
+            //鏍¢獙涓�娈垫棩鏈熸槸鍚﹀ぇ浜巗tartTime锛屽惁锛屾姏鍑哄紓甯�
+            if (Objects.isNull(splitDowntimeVo.getSecondMiddleTime())) {
+                if (splitDowntimeVo.getStartDate().compareTo(splitDowntimeVo.getFirstMiddleTime()) != -1 || splitDowntimeVo.getFirstMiddleTime().compareTo(splitDowntimeVo.getEndDate()) != -1) {
+                    throw new JeecgBootException("鎷嗗垎涓�娈垫椂闂存湭鍦ㄥ紑濮嬫椂闂村拰缁撴潫鏃堕棿涔嬪唴锛岃妫�鏌ワ紒");
+                }
+            }else {
+                if (splitDowntimeVo.getStartDate().compareTo(splitDowntimeVo.getFirstMiddleTime()) != -1 || splitDowntimeVo.getFirstMiddleTime().compareTo(splitDowntimeVo.getSecondMiddleTime()) != -1) {
+                    throw new JeecgBootException("鎷嗗垎涓�娈垫椂闂存湭鍦ㄥ紑濮嬫椂闂村拰鎷嗗垎浜屾缁撴潫鏃堕棿涔嬪唴锛岃妫�鏌ワ紒");
+                }
+            }
+
+        }else {
+            throw new JeecgBootException("璇风淮鎶ゆ媶鍒嗕竴娈电粨鏉熸椂闂�");
+        }
+
+        if (Objects.nonNull(splitDowntimeVo.getSecondMiddleTime())) {
+            //鏍¢獙浜屾鏃ユ湡鏄惁瀛樺湪浜庝竴娈垫棩鏈熷拰endTime涔嬮棿
+
+            if (splitDowntimeVo.getFirstMiddleTime().compareTo(splitDowntimeVo.getSecondMiddleTime()) != -1 || splitDowntimeVo.getSecondMiddleTime().compareTo(splitDowntimeVo.getEndDate()) != -1) {
+                throw new JeecgBootException("鎷嗗垎浜屾鏃堕棿鏈湪鎷嗗垎涓�娈电粨鏉熸椂闂村拰缁撴潫鏃堕棿涔嬪唴锛岃妫�鏌ワ紒");
+            }
+        }
+
+        List<MdcDowntime> list = Lists.newArrayList();
+
+        //璁剧疆鎷嗗垎1娈�
+        if (Objects.nonNull(splitDowntimeVo.getFirstMiddleTime())) {
+            list.add(checkMdcDowntime(mdcDowntime, splitDowntimeVo.getStartDate(), splitDowntimeVo.getFirstMiddleTime(), splitDowntimeVo.getFirstDowntimeDescription()));
+        }
+
+        //璁剧疆鎷嗗垎2娈碉紝浜屾涓嶅瓨鍦ㄥ垯灏唀ndDate浣滀负鎷嗗垎浜屾
+        if (Objects.nonNull(splitDowntimeVo.getSecondMiddleTime())) {
+            list.add(checkMdcDowntime(mdcDowntime, splitDowntimeVo.getFirstMiddleTime(), splitDowntimeVo.getSecondMiddleTime(), splitDowntimeVo.getSecondDowntimeDescription()));
+            list.add(checkMdcDowntime(mdcDowntime, splitDowntimeVo.getSecondMiddleTime(), splitDowntimeVo.getEndDate(), splitDowntimeVo.getThirdDowntimeDescription()));
+        }else {
+            list.add(checkMdcDowntime(mdcDowntime, splitDowntimeVo.getFirstMiddleTime(), splitDowntimeVo.getEndDate(), splitDowntimeVo.getThirdDowntimeDescription()));
+        }
+        //淇濆瓨鎷嗗垎鏁版嵁骞跺垹闄ゅ師鏈夋暟鎹�
+        if (this.saveBatch(list)) {
+            this.removeById(mdcDowntime);
+        }
+    }
+
+    private MdcDowntime checkMdcDowntime(MdcDowntime mdcDowntime, Date startDate, Date endDate, String downtimeDescription) {
+        MdcDowntime mdcDowntimeInfo = new MdcDowntime();
+        BeanUtil.copyProperties(mdcDowntime, mdcDowntimeInfo);
+        mdcDowntimeInfo.setId(IdWorker.getIdStr());
+        mdcDowntimeInfo.setStartDate(startDate);
+        mdcDowntimeInfo.setEndDate(endDate);
+        mdcDowntimeInfo.setShutdownDuration(DateUtils.differentMinutes(startDate, endDate));
+        mdcDowntimeInfo.setEnterType(2);
+        mdcDowntimeInfo.setReasonId(StringUtils.isNotBlank(downtimeDescription) ? downtimeDescription : StringPool.EMPTY);
+        return mdcDowntimeInfo;
+    }
+
+    private List<String> getEquipmentIds(String userId, MdcDowntimeVo mdcDowntimeVo) {
+        if (StringUtils.isNotEmpty(mdcDowntimeVo.getEquipmentId())) {
+            return Collections.singletonList(mdcDowntimeVo.getEquipmentId());
+        }
+        return mdcEquipmentService.getEquipmentIdsProduction(userId, null);
+    }
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcDowntimeVo.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcDowntimeVo.java
index 97cc304..80ff720 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcDowntimeVo.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcDowntimeVo.java
@@ -31,6 +31,16 @@
     private String parentId;
 
     /**
+     * 鍋滄満鍘熷洜
+     */
+    private String downtimeDescription;
+
+    /**
+     * 鍋滄満ids
+     */
+    private String downTimeIds;
+
+    /**
      * 璁惧ids
      */
     private List<String> equipmentIdList;
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/SplitDowntimeVo.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/SplitDowntimeVo.java
new file mode 100644
index 0000000..407df54
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/SplitDowntimeVo.java
@@ -0,0 +1,70 @@
+package org.jeecg.modules.mdc.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 鍋滄満鎷嗗垎鎿嶄綔鍏ュ弬
+ */
+@Data
+public class SplitDowntimeVo {
+
+    /**
+     * 鍋滄満鎷嗗垎id
+     */
+    private String id;
+
+    /**
+     * 寮�濮嬫椂闂�
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "寮�濮嬫椂闂�")
+    private Date startDate;
+
+    /**
+     * 鎷嗗垎1娈电粨鏉熸椂闂�
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鎷嗗垎1娈靛紑濮嬫椂闂�")
+    private Date firstMiddleTime;
+
+    /**
+     * 鎷嗗垎1娈靛仠鏈哄師鍥�
+     */
+    @ApiModelProperty(value = "鎷嗗垎1娈靛仠鏈哄師鍥�")
+    private String firstDowntimeDescription;
+
+    /**
+     * 鎷嗗垎2娈电粨鏉熸椂闂�
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鎷嗗垎2娈靛紑濮嬫椂闂�")
+    private Date secondMiddleTime;
+
+    /**
+     * 鎷嗗垎2娈靛仠鏈哄師鍥�
+     */
+    @ApiModelProperty(value = "鎷嗗垎2娈靛仠鏈哄師鍥�")
+    private String secondDowntimeDescription;
+
+    /**
+     * 缁撴潫鏃堕棿
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "缁撴潫鏃堕棿")
+    private Date endDate;
+
+    /**
+     * 鎷嗗垎3娈靛仠鏈哄師鍥�
+     */
+    @ApiModelProperty(value = "鎷嗗垎3娈靛仠鏈哄師鍥�")
+    private String thirdDowntimeDescription;
+}
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/cas/controller/CasClientController.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/cas/controller/CasClientController.java
index 4b271a6..c1e760d 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/cas/controller/CasClientController.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/cas/controller/CasClientController.java
@@ -74,7 +74,7 @@
 			log.info("-------token----username---"+principal);
 		    //1. 鏍¢獙鐢ㄦ埛鏄惁鏈夋晥
 	  		SysUser sysUser = sysUserService.getUserByName(principal);
-	  		result = sysUserService.checkUserIsEffective(sysUser);
+	  		result = sysUserService.checkUserIsEffective(sysUser, null);
 	  		if(!result.isSuccess()) {
 	  			return result;
 	  		}
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java
index 3e7dff6..e577cb7 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java
@@ -121,7 +121,7 @@
 		}
 		SysUser sysUser = sysUserService.getOne(queryWrapper);
 		//update-end-author:wangshuai date:20200601 for: 鐧诲綍浠g爜楠岃瘉鐢ㄦ埛鏄惁娉ㄩ攢bug锛宨f鏉′欢姘歌繙涓篺alse
-		result = sysUserService.checkUserIsEffective(sysUser);
+		result = sysUserService.checkUserIsEffective(sysUser, loginType);
 		if(!result.isSuccess()) {
 			return result;
 		}
@@ -397,7 +397,7 @@
 			}else {
 				//鐧诲綍妯″紡锛屾牎楠岀敤鎴锋湁鏁堟��
 				SysUser sysUser = sysUserService.getUserByPhone(mobile);
-				result = sysUserService.checkUserIsEffective(sysUser);
+				result = sysUserService.checkUserIsEffective(sysUser, null);
 				if(!result.isSuccess()) {
 					String message = result.getMessage();
 					String userNotExist="璇ョ敤鎴蜂笉瀛樺湪锛岃娉ㄥ唽";
@@ -458,7 +458,7 @@
 
 		//鏍¢獙鐢ㄦ埛鏈夋晥鎬�
 		SysUser sysUser = sysUserService.getUserByPhone(phone);
-		result = sysUserService.checkUserIsEffective(sysUser);
+		result = sysUserService.checkUserIsEffective(sysUser, null);
 		if(!result.isSuccess()) {
 			return result;
 		}
@@ -626,7 +626,7 @@
 
 		//1. 鏍¢獙鐢ㄦ埛鏄惁鏈夋晥
 		SysUser sysUser = sysUserService.getUserByName(username);
-		result = sysUserService.checkUserIsEffective(sysUser);
+		result = sysUserService.checkUserIsEffective(sysUser, null);
 		if(!result.isSuccess()) {
 			return result;
 		}
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java
index 9e8a0f6..8337273 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java
@@ -218,7 +218,7 @@
 
 		//1. 鏍¢獙鐢ㄦ埛鏄惁鏈夋晥
 		SysUser sysUser = sysUserService.getUserByName(username);
-		result = sysUserService.checkUserIsEffective(sysUser);
+		result = sysUserService.checkUserIsEffective(sysUser, null);
 		if(!result.isSuccess()) {
 			return result;
 		}
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
index 48fad04..103f93a 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
@@ -221,7 +221,7 @@
 	 * @param sysUser
 	 * @return
 	 */
-	Result checkUserIsEffective(SysUser sysUser);
+	Result checkUserIsEffective(SysUser sysUser, String loginType);
 
 	/**
 	 * 鏌ヨ琚�昏緫鍒犻櫎鐨勭敤鎴�
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
index 37f72de..8d9799b 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
@@ -440,7 +440,7 @@
 	 * @return
 	 */
 	@Override
-	public Result<?> checkUserIsEffective(SysUser sysUser) {
+	public Result<?> checkUserIsEffective(SysUser sysUser, String loginType) {
 		Result<?> result = new Result<Object>();
 		//鎯呭喌1锛氭牴鎹敤鎴蜂俊鎭煡璇紝璇ョ敤鎴蜂笉瀛樺湪
 		if (sysUser == null) {
@@ -464,7 +464,7 @@
 		}
 		//鎯呭喌4锛氭牴鎹敤鎴蜂俊鎭煡璇紝璇ョ敤鎴峰瘑鐮佺郴棣栨浣跨敤锛岄渶淇敼瀵嗙爜
 		List<DictModel> dictList = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_USER_FIRST_LOGIN);
-		if (dictList != null && !dictList.isEmpty()) {
+		if (!"terminal".equals(loginType) && dictList != null && !dictList.isEmpty()) {
 			if (CommonConstant.DEL_FLAG_1.equals(Integer.valueOf(dictList.get(0).getValue())) && CommonConstant.DEL_FLAG_1.equals(sysUser.getPasswordFlag())) {
 				baseCommonService.addLog("鐢ㄦ埛鐧诲綍澶辫触锛岀敤鎴峰悕:" + sysUser.getUsername() + "绯婚娆$櫥褰曠郴缁燂紝璇烽噸缃瘑鐮侊紒", CommonConstant.LOG_TYPE_1, null);
 				result.setCode(5001);

--
Gitblit v1.9.3