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 + * @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