From df64c34d92cbe8501bbbfe837bc491a47452c0b6 Mon Sep 17 00:00:00 2001
From: baoshiwei <baoshiwei@shlanbao.cn>
Date: 星期一, 09 六月 2025 10:58:19 +0800
Subject: [PATCH] feat(eims): 新增保养工单批量修改功能并优化相关领域对象

---
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java |  218 ++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 176 insertions(+), 42 deletions(-)

diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java
index 988fc92..c85145d 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java
@@ -5,7 +5,9 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.SneakyThrows;
 import org.dromara.common.core.constant.DictConstants;
+import org.dromara.common.core.domain.model.LoginUser;
 import org.dromara.common.core.service.MaintOrderService;
+import org.dromara.common.core.utils.DateUtils;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.SpringUtils;
 import org.dromara.common.core.utils.StringUtils;
@@ -15,28 +17,28 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
-import org.dromara.eims.domain.EimsMaintOrditm;
-import org.dromara.eims.domain.EimsMaintStand;
-import org.dromara.eims.domain.vo.EimsMaintPlanVo;
-import org.dromara.eims.domain.vo.EimsMaintStandVo;
-import org.dromara.eims.domain.vo.EimsRepairResVo;
-import org.dromara.eims.mapper.EimsMaintOrditmMapper;
-import org.dromara.eims.mapper.EimsMaintStandMapper;
+
+import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.eims.domain.EimsMaintPlan;
+import org.dromara.eims.domain.EimsSpareInout;
+import org.dromara.eims.domain.bo.EimsSpareBo;
+import org.dromara.eims.domain.bo.EimsSpareInoutBo;
+import org.dromara.eims.domain.bo.MaintOrderBo;
+import org.dromara.eims.domain.vo.*;
+import org.dromara.eims.mapper.EimsEquMapper;
+import org.dromara.eims.mapper.EimsMaintPlanMapper;
+import org.dromara.eims.service.IEimsSpareInoutService;
 import org.dromara.system.domain.SysDept;
 import org.dromara.system.domain.vo.SysDeptVo;
 import org.dromara.system.mapper.SysDeptMapper;
 import org.springframework.stereotype.Service;
 import org.dromara.eims.domain.bo.EimsMaintOrderBo;
-import org.dromara.eims.domain.vo.EimsMaintOrderVo;
 import org.dromara.eims.domain.EimsMaintOrder;
 import org.dromara.eims.mapper.EimsMaintOrderMapper;
 import org.dromara.eims.service.IEimsMaintOrderService;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Collection;
+import java.util.*;
 
 /**
  * 淇濆吇宸ュ崟Service涓氬姟灞傚鐞�
@@ -49,10 +51,11 @@
 public class EimsMaintOrderServiceImpl implements IEimsMaintOrderService, MaintOrderService {
 
     private final EimsMaintOrderMapper baseMapper;
-    private final EimsMaintOrditmMapper orditmMapper;
+    private final EimsMaintPlanMapper planMapper;
     private final SysDeptMapper sysDeptMapper;
+    private final EimsEquMapper equMapper;
+    private final IEimsSpareInoutService spareInoutService;
 
-    private final EimsMaintStandMapper standMapper;
     /**
      * 鏌ヨ淇濆吇宸ュ崟
      *
@@ -61,7 +64,13 @@
      */
     @Override
     public EimsMaintOrderVo queryById(Long id){
-        return baseMapper.selectVoById(id);
+        EimsMaintOrderVo orderVo = baseMapper.selectVoById(id);
+        EimsEquVo equVo = equMapper.selectVoById(orderVo.getEquId());
+        if(equVo!=null){
+            orderVo.setEquName(equVo.getEquName());
+            orderVo.setAssetNo(equVo.getAssetNo());
+        }
+        return orderVo;
     }
 
     /**
@@ -84,6 +93,12 @@
         return TableDataInfo.build(page);
     }
 
+    @Override
+    public TableDataInfo<MaintOrdeGroupVo> queryPageGroupList(EimsMaintOrderBo bo, PageQuery pageQuery) {
+        Page<MaintOrdeGroupVo> page = baseMapper.selectMaintOrderGroupList(pageQuery.build(), buildGroupWrapper(bo));
+        return TableDataInfo.build(page);
+    }
+
     /**
      * 鏌ヨ绗﹀悎鏉′欢鐨勪繚鍏诲伐鍗曞垪琛�
      *
@@ -100,13 +115,35 @@
         QueryWrapper<EimsMaintOrder> qw =  Wrappers.query();
         qw.like(StringUtils.isNotBlank(bo.getMaintCode()),"mo.maint_code", bo.getMaintCode());
         qw.like(bo.getEquName() != null, "equ.equ_name", bo.getEquName());
+        qw.like(bo.getEquId() != null, "equ.equ_id", bo.getEquId());
         qw.eq(StringUtils.isNotBlank(bo.getMaintType()), "mo.maint_type", bo.getMaintType());
         qw.eq(StringUtils.isNotBlank(bo.getMaintCycleUnit()), "mo.maint_cycle_unit", bo.getMaintCycleUnit());
         qw.eq(StringUtils.isNotBlank(bo.getMaintRule()), "mo.maint_rule", bo.getMaintRule());
         qw.eq(bo.getMaintUser() != null, "mo.maint_user", bo.getMaintUser());
         qw.in(bo.getMaintDept() != null, "mo.maint_dept", getAllDescendantIds(bo.getMaintDept()));
         qw.eq(bo.getStatus() != null, "mo.status", bo.getStatus());
+        qw.eq(bo.getPlanTime()!=null,
+            "mo.plan_time", bo.getPlanTime());
+        qw.between(params.get("beginPlanTime") != null && params.get("endPlanTime") != null,
+            "mo.plan_time", params.get("beginPlanTime"), params.get("endPlanTime"));
         qw.orderByDesc("mo.create_time");
+        return qw;
+    }
+    private QueryWrapper<EimsMaintOrder> buildGroupWrapper(EimsMaintOrderBo bo) {
+        Map<String, Object> params = bo.getParams();
+        QueryWrapper<EimsMaintOrder> qw =  Wrappers.query();
+        qw.like(StringUtils.isNotBlank(bo.getMaintCode()),"mo.maint_code", bo.getMaintCode());
+        qw.like(bo.getEquName() != null, "equ.equ_name", bo.getEquName());
+        qw.eq(StringUtils.isNotBlank(bo.getMaintType()), "mo.maint_type", bo.getMaintType());
+        qw.eq(StringUtils.isNotBlank(bo.getMaintCycleUnit()), "mo.maint_cycle_unit", bo.getMaintCycleUnit());
+        qw.eq(StringUtils.isNotBlank(bo.getMaintRule()), "mo.maint_rule", bo.getMaintRule());
+        qw.eq(bo.getMaintUser() != null, "mo.maint_user", bo.getMaintUser());
+        qw.in(bo.getMaintDept() != null, "mo.maint_dept", getAllDescendantIds(bo.getMaintDept()));
+        qw.eq(bo.getStatus() != null, "mo.status", bo.getStatus());
+        qw.between(params.get("beginPlanTime") != null && params.get("endPlanTime") != null,
+            "mo.plan_time", params.get("beginPlanTime"), params.get("endPlanTime"));
+        qw.groupBy(Arrays.asList("mo.equ_id","mo.plan_time"));
+        qw.orderByDesc("mo.plan_time");
         return qw;
     }
 
@@ -151,6 +188,8 @@
         lqw.eq(StringUtils.isNotBlank(bo.getStatus()), EimsMaintOrder::getStatus, bo.getStatus());
         lqw.eq(bo.getPlanTime() != null, EimsMaintOrder::getPlanTime, bo.getPlanTime());
         lqw.eq(bo.getPlanId() != null, EimsMaintOrder::getPlanId, bo.getPlanId());
+        // 鎸夊垱寤烘椂闂村�掑簭
+        lqw.orderByDesc(EimsMaintOrder::getCreateTime);
         return lqw;
     }
 
@@ -160,31 +199,71 @@
      * @param bo 淇濆吇宸ュ崟
      * @return 鏄惁鏂板鎴愬姛
      */
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public Boolean insertByBo(EimsMaintOrderBo bo) {
         EimsMaintOrder add = MapstructUtils.convert(bo, EimsMaintOrder.class);
+        //閫氳繃淇濆吇璁″垝鐢熸垚鐨勬暟鎹渶瑕佹洿鏂颁繚鍏昏鍒�
+        Long planId = bo.getPlanId();
+        if(planId!=null){
+            EimsMaintPlan eimsMaintPlan = planMapper.selectById(planId);
+            setMaintNextTime(eimsMaintPlan);
+            planMapper.updateById(eimsMaintPlan);
+        }
+
+
+
         validEntityBeforeSave(add);
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {
             bo.setId(add.getId());
 
-            //鐢熸垚淇濆吇鏄庣粏
-            Long equId = bo.getEquId();
-            List<EimsMaintStandVo> standList = standMapper.selectVoList(new LambdaQueryWrapper<EimsMaintStand>().eq(EimsMaintStand::getEquId, equId));
-            //TODO 娌℃湁淇濆吇椤癸紝娣诲姞寮傚父璁板綍
-            for (int j = 0; j < standList.size(); j++) {
-                EimsMaintStandVo stand = standList.get(j);
-                EimsMaintOrditm itm = new EimsMaintOrditm();
-                itm.setOrderId(bo.getId());
-                itm.setEquId(equId);
-                itm.setItmName(stand.getName());
-                itm.setItmAction(stand.getStand());
-                itm.setItmUser(bo.getMaintUser());
-                orditmMapper.insert(itm);
-            }
-
         }
         return flag;
+    }
+
+    /**
+     * 璁$畻淇濆吇璁″垝涓嬫鎵ц鏃堕棿
+     */
+    @SneakyThrows
+    private void setMaintNextTime(EimsMaintPlan bo) {
+        Date oldNext = bo.getMaintNextTime();
+        //TODO 涓嬫淇濆吇鏃堕棿璁$畻瑙勫垯 0-鎸夊浐瀹氬懆鏈�  1-鎸変笂娆′繚鍏绘椂闂�
+        Date newNext = null;
+
+        //涓嬫娆℃墽琛屾椂闂翠负绌烘姏鍑哄紓甯�
+        if (oldNext == null) {
+            throw new Exception("涓嬫淇濆吇鏃堕棿涓嶈兘涓虹┖!");
+        }
+        //鍛ㄦ湡
+        Long maintCycle = bo.getMaintCycle();
+        //鍗曚綅 1-澶� 2-鍛� 3-鏈� 4-瀛� 5-骞�
+        String maintCycleUnit = bo.getMaintCycleUnit();
+        switch (maintCycleUnit) {
+            case "1":
+                newNext = DateUtils.addDays(oldNext, maintCycle.intValue());
+                break;
+            case "2":
+                newNext = DateUtils.addWeeks(oldNext, maintCycle.intValue());
+                break;
+            case "3":
+                newNext = DateUtils.addMonths(oldNext, maintCycle.intValue());
+                break;
+            case "4":
+                newNext = DateUtils.addMonths(oldNext, maintCycle.intValue() * 3);
+                break;
+            case "5":
+                newNext = DateUtils.addYears(oldNext, maintCycle.intValue());
+                break;
+
+        }
+        bo.setMaintNextTime(newNext);
+        if(bo.getMaintFirstTime()==null){
+            bo.setMaintFirstTime(oldNext);
+        }
+        bo.setMaintLastTime(oldNext);
+
+
     }
 
     /**
@@ -198,22 +277,61 @@
     @Override
     public Boolean updateByBo(EimsMaintOrderBo bo) {
         EimsMaintOrder update = MapstructUtils.convert(bo, EimsMaintOrder.class);
-
-        EimsMaintOrder old = baseMapper.selectById(bo.getId());
-
-        // 淇濆吇鐘舵�佸彉鏇村緟瀹℃牳鏃堕渶瑕佹牎楠屼繚鍏婚」鏁版嵁
-        if(old.getStatus().equals(DictConstants.MAINT_ORDER_STATUS_DETAIL.BAOYANG)&&bo.getStatus().equals(DictConstants.MAINT_ORDER_STATUS_DETAIL.DAIYANZHENG)){
-            LambdaQueryWrapper<EimsMaintOrditm>  itmQueryWrapper = Wrappers.lambdaQuery();
-            itmQueryWrapper.eq(EimsMaintOrditm::getOrderId, bo.getId());
-            List<EimsMaintOrditm> eimsMaintOrditms = orditmMapper.selectList(itmQueryWrapper);
-            List<EimsMaintOrditm> wwc = eimsMaintOrditms.stream().filter(item->!item.getStatus().equals(DictConstants.EIMS_ORDITM_STATUS_DETAIL.YIWANCHENG)).toList();
-             if(!wwc.isEmpty()){
-                return false;
-             }
+        if(bo.getStatus().equals(DictConstants.MAINT_ORDER_STATUS_DETAIL.BAOYANG) && bo.getStartTime() == null){
+            update.setStartTime(new Date());
         }
+
+        if(bo.getStatus().equals(DictConstants.MAINT_ORDER_STATUS_DETAIL.DAIYANZHENG) && bo.getEndTime() == null){
+            update.setEndTime(new Date());
+        }
+
+        if(bo.getStatus().equals(DictConstants.MAINT_ORDER_STATUS_DETAIL.WANCHENG) && bo.getVerifyUser() == null){
+            LoginUser loginUser = LoginHelper.getLoginUser();
+            update.setVerifyUser(loginUser.getUserId());
+        }
+
 
         validEntityBeforeSave(update);
         return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 鎵归噺淇敼淇濆吇宸ュ崟
+     *
+     * @param bo 淇濆吇宸ュ崟
+     * @return 鏄惁淇敼鎴愬姛
+     */
+    @Override
+    public boolean updateBatchByBo(MaintOrderBo bo) {
+        LoginUser loginUser = LoginHelper.getLoginUser();
+        List<EimsMaintOrder> list = MapstructUtils.convert(bo.getMaintOrderList(),  EimsMaintOrder.class);
+        list.forEach(e -> {
+            e.setStatus(DictConstants.MAINT_ORDER_STATUS_DETAIL.DAIYANZHENG);
+            e.setEndTime(new Date());
+            e.setMaintUser(loginUser.getUserId());
+            e.setUpdateTime(new Date());
+        });
+        bo.getMaintOrderList().forEach(item -> {
+            // 鍒ゆ柇澶囦欢鍒楄〃鏄惁涓虹┖锛屼笉涓虹┖鍒欐柊澧炰竴涓浠跺嚭搴撳崟锛屽悓鏃跺鍔犲嚭搴撴槑缁�
+            if (item.getSpareParts() != null && item.getSpareParts().size() > 0) {
+                EimsSpareInoutBo spareInoutBo = new EimsSpareInoutBo();
+                // 鏍规嵁鏃ユ湡鐢熸垚鍗曞彿锛屾牸寮忎负CK+鏃ユ湡+娴佹按鍙�
+                spareInoutBo.setOrderCode("CK"+DateUtils.dateTimeNow("yyyyMMddHHmmss"));
+                spareInoutBo.setOrderTime(new Date());
+                spareInoutBo.setType(DictConstants.SPARE_INOUT_TYPE_DETAIL.CK);
+                spareInoutBo.setPartnerName(loginUser.getNickname());
+                spareInoutBo.setSpareList(item.getSpareParts());
+                spareInoutBo.setChargeUser(loginUser.getUserId());
+                spareInoutBo.setChargeDept(loginUser.getDeptId());
+                spareInoutBo.setAssociatedOrder(item.getMaintCode());
+                // 淇濆瓨杩涙暟鎹簱
+                Boolean b = spareInoutService.insertByBo(spareInoutBo);
+
+
+            }
+        });
+
+        return baseMapper.updateBatchById(list);
     }
 
     /**
@@ -250,4 +368,20 @@
         }
         return String.join(StringUtils.SEPARATOR, list);
     }
+
+
+    @Override
+    public List<EimsSpareVo> querySpareParts(String code) {
+        // 鏌ヨ鍏宠仈鐨勫浠讹紝鍏崇郴濡備笅锛氬浠跺嚭鍏ュ簱鍗曠殑associatedOrder 鍏宠仈浼犲叆鐨刢ode,澶囦欢鍑哄叆搴撴槑缁嗛�氳繃鍑哄叆搴撳崟鐨刬d鍏宠仈锛屽浠跺悕绉伴�氳繃鍑哄叆搴撴槑缁嗕腑鐨剆pareId鍏宠仈
+
+        EimsSpareInoutBo bo = new EimsSpareInoutBo();
+        bo.setAssociatedOrder(code);
+        List<EimsSpareInoutVo> list = spareInoutService.queryList(bo);
+        if (!list.isEmpty()) {
+            // 鏌ヨ澶囦欢鏄庣粏鍜屽悕绉�
+            EimsSpareInoutVo eimsSpareInoutVo = spareInoutService.queryById(list.get(0).getId());
+            return eimsSpareInoutVo.getSpareList();
+        }
+        return List.of();
+    }
 }

--
Gitblit v1.9.3