From fd4799fb341ee0dcbae2e59cb52d9112a425e155 Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期三, 27 八月 2025 16:44:40 +0800
Subject: [PATCH] 修改

---
 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamFactorySecondMaintPlanServiceImpl.java |  175 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 174 insertions(+), 1 deletions(-)

diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamFactorySecondMaintPlanServiceImpl.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamFactorySecondMaintPlanServiceImpl.java
index 04ed629..8c83558 100644
--- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamFactorySecondMaintPlanServiceImpl.java
+++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamFactorySecondMaintPlanServiceImpl.java
@@ -1,19 +1,192 @@
 package org.jeecg.modules.eam.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import org.jeecg.modules.eam.entity.EamEquipment;
 import org.jeecg.modules.eam.entity.EamFactorySecondMaintPlan;
 import org.jeecg.modules.eam.mapper.EamFactorySecondMaintPlanMapper;
+import org.jeecg.modules.eam.service.IEamEquipmentService;
 import org.jeecg.modules.eam.service.IEamFactorySecondMaintPlanService;
+import org.jeecg.modules.system.entity.BaseFactory;
+import org.jeecg.modules.system.service.IBaseFactoryService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
 
 /**
  * @Description: 鈥滈椤佃溅闂翠簩淇濊鍒�
- * @Author: jeecg-boot
+ * &#064;Author:  jeecg-boot
  * @Date:   2025-08-22
  * @Version: V1.0
  */
 @Service
 public class EamFactorySecondMaintPlanServiceImpl extends ServiceImpl<EamFactorySecondMaintPlanMapper, EamFactorySecondMaintPlan> implements IEamFactorySecondMaintPlanService {
+    @Autowired
+    private IBaseFactoryService baseFactoryService;
 
+    @Autowired
+    private IEamEquipmentService eamEquipmentService;
+
+    /**
+     * 璁惧绠$悊棣栭〉-杞﹂棿浜屼繚璁″垝鍒楄〃
+     * @return
+     */
+    @Override
+    public List<EamFactorySecondMaintPlan> queryAllList(){
+        return this.baseMapper.queryAllList();
+    }
+
+    /**
+     * 鏂板棣栭〉杞﹂棿浜屼繚璁″垝
+     * @param equipmentId
+     * @param monthPlan
+     * @return
+     */
+    @Override
+    public EamFactorySecondMaintPlan add(String equipmentId, String monthPlan) {
+        EamEquipment equipment=eamEquipmentService.getById(equipmentId);
+        if (equipment==null) {
+            return null;
+        }
+        String factoryId = baseFactoryService.queryByCode(equipment.getFactoryOrgCode().substring(0,6)).getId();
+        // 灏濊瘯鐩存帴鏇存柊锛堝師瀛愭搷浣滐級
+        LambdaUpdateWrapper<EamFactorySecondMaintPlan> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.eq(EamFactorySecondMaintPlan::getFactoryId, factoryId)
+                .eq(EamFactorySecondMaintPlan::getMonthPlan, monthPlan)
+                .setSql("quantity = quantity + 1"); // 鍘熷瓙澧炲姞
+
+        int updated = this.baseMapper.update(null, updateWrapper);
+
+        if (updated > 0) {
+            // 鏇存柊鎴愬姛锛岃繑鍥炴洿鏂板悗鐨勮褰�
+            return this.getOne(Wrappers.<EamFactorySecondMaintPlan>lambdaQuery()
+                    .eq(EamFactorySecondMaintPlan::getFactoryId, factoryId)
+                    .eq(EamFactorySecondMaintPlan::getMonthPlan, monthPlan));
+        } else {
+            // 鏃犺褰曞瓨鍦紝鍒涘缓鏂拌褰�
+            return createNewPlan(factoryId, monthPlan);
+        }
+    }
+
+    private EamFactorySecondMaintPlan createNewPlan(String factoryId, String monthPlan) {
+        EamFactorySecondMaintPlan newPlan = new EamFactorySecondMaintPlan();
+        newPlan.setFactoryId(factoryId);
+        newPlan.setMonthPlan(monthPlan);
+        newPlan.setQuantity(1);
+
+        // 璁剧疆宸ュ巶鍚嶇О锛堜紭鍖栧鐞嗭級
+        BaseFactory baseFactory = baseFactoryService.getById(factoryId);
+        if (baseFactory != null) {
+            String orgCode = baseFactory.getOrgCode();
+            // 浣跨敤鏁翠釜orgCode锛堝鏋滈暱搴︿笉瓒�6锛�
+            String nameOrgCode = orgCode.length() >= 6 ? orgCode.substring(0, 6) : orgCode;
+            newPlan.setFactoryName(baseFactoryService.factoryDataNameByOrgCode(nameOrgCode));
+        }
+
+        // 澶勭悊骞跺彂鍒涘缓鍐茬獊
+        try {
+            this.save(newPlan);
+            return newPlan;
+        } catch (DuplicateKeyException e) {
+            // 鍏朵粬绾跨▼宸插垱寤猴紝杞负鏇存柊
+            return add(factoryId, monthPlan);
+        }
+    }
+
+    /**
+     * 鏃ユ湡鍙樺寲
+     * @param equipmentId 璁惧ID
+     * @param oldMonthPlan 鏃ф湀浠借鍒掞紙鏍煎紡濡倅yyy-MM锛�
+     * @param newMonthPlan 鏂版湀浠借鍒掞紙鏍煎紡濡倅yyy-MM锛�
+     * @return 鏄惁鎴愬姛鍙樻洿
+    */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean dateChange(String equipmentId, String oldMonthPlan, String newMonthPlan) {
+        // 1. 鑾峰彇璁惧淇℃伅
+        EamEquipment equipment = eamEquipmentService.getById(equipmentId);
+        if (equipment == null) {
+            return false;
+        }
+
+        // 2. 鑾峰彇宸ュ巶ID
+        String factoryOrgCodePrefix = equipment.getFactoryOrgCode().substring(0, 6);
+        BaseFactory factory = baseFactoryService.queryByCode(factoryOrgCodePrefix);
+        if (factory == null) {
+            return false;
+        }
+        String factoryId = factory.getId();
+
+        // 3. 濡傛灉鏈堜唤鏈彉鍖栫洿鎺ヨ繑鍥炴垚鍔�
+        if (oldMonthPlan.equals(newMonthPlan)) {
+            return true;
+        }
+
+        try {
+            // 4. 鍑忓皯鏃ф湀浠借鍒掓暟閲忥紙鍘熷瓙鎿嶄綔锛�
+            boolean oldDecreased = decreasePlanQuantity(factoryId, oldMonthPlan);
+            if (!oldDecreased) {
+                throw new RuntimeException("鍑忓皯鏃ф湀浠借鍒掓暟閲忓け璐ワ紝鍙兘璁板綍涓嶅瓨鍦ㄦ垨鏁伴噺涓�0");
+            }
+
+            // 5. 澧炲姞鏂版湀浠借鍒掓暟閲�
+            increasePlanQuantity(factoryId, newMonthPlan);
+
+            return true;
+        } catch (Exception e) {
+            // 浜嬪姟鍥炴粴
+            throw new RuntimeException("鏃ユ湡鍙樻洿澶辫触: " + e.getMessage(), e);
+        }
+    }
+
+    /**
+     * 鍑忓皯璁″垝鏁伴噺锛屽鏋滃噺灏戝悗鏁伴噺涓�0鍒欏垹闄よ褰�
+     */
+    private boolean decreasePlanQuantity(String factoryId, String monthPlan) {
+        // 鍏堝噺灏戞暟閲�
+        LambdaUpdateWrapper<EamFactorySecondMaintPlan> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.eq(EamFactorySecondMaintPlan::getFactoryId, factoryId)
+                .eq(EamFactorySecondMaintPlan::getMonthPlan, monthPlan)
+                .gt(EamFactorySecondMaintPlan::getQuantity, 0) // 纭繚鏁伴噺澶т簬0
+                .setSql("quantity = quantity - 1");
+
+        int updated = baseMapper.update(null, updateWrapper);
+
+        if (updated > 0) {
+            // 妫�鏌ユ洿鏂板悗鐨勬暟閲忔槸鍚︿负0锛屽鏋滄槸鍒欏垹闄よ褰�
+            EamFactorySecondMaintPlan updatedPlan = baseMapper.selectOne(
+                    Wrappers.<EamFactorySecondMaintPlan>lambdaQuery()
+                            .eq(EamFactorySecondMaintPlan::getFactoryId, factoryId)
+                            .eq(EamFactorySecondMaintPlan::getMonthPlan, monthPlan)
+            );
+
+            if (updatedPlan != null && updatedPlan.getQuantity() == 0) {
+                baseMapper.deleteById(updatedPlan.getId());
+            }
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * 澧炲姞璁″垝鏁伴噺
+     */
+    private void increasePlanQuantity(String factoryId, String monthPlan) {
+        // 鐩存帴鏇存柊
+        LambdaUpdateWrapper<EamFactorySecondMaintPlan> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.eq(EamFactorySecondMaintPlan::getFactoryId, factoryId)
+                .eq(EamFactorySecondMaintPlan::getMonthPlan, monthPlan)
+                .setSql("quantity = quantity + 1");
+
+        if (baseMapper.update(null, updateWrapper) == 0) {
+            // 鏇存柊澶辫触璇存槑璁板綍涓嶅瓨鍦紝鍒涘缓鏂拌褰�
+            createNewPlan(factoryId, monthPlan);
+        }
+    }
 }

--
Gitblit v1.9.3