From ce531d3bb32f5221b35f9e24d027ef83450ebbc6 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期二, 21 十月 2025 16:58:34 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpClinicWarehousingServiceImpl.java |   79 +++++++++++++++++++++++++++++++++++++--
 1 files changed, 74 insertions(+), 5 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpClinicWarehousingServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpClinicWarehousingServiceImpl.java
index e8fe9f1..31b6874 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpClinicWarehousingServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpClinicWarehousingServiceImpl.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.basic.PageInfo;
+import com.ruoyi.common.core.domain.BaseModel;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.system.dto.ClinicOutboundGoodsDto;
@@ -18,6 +19,8 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.system.vo.*;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
@@ -217,7 +220,9 @@
 
                         inventoryDetailVo.setGoodsName(goods.getGoodsName());
                         TErpGoodsUnit tErpGoodsUnit = erpGoodsUnitMapper.selectById(goods.getPackingUnitId());
-                        inventoryDetailVo.setUnitName(tErpGoodsUnit.getUnitName());
+                        if(tErpGoodsUnit!=null){
+                            inventoryDetailVo.setUnitName(tErpGoodsUnit.getUnitName());
+                        }
                         inventoryDetailVo.setWarehouseNo(tErpSupplierWarehousing.getWarehouseNo());
                         TErpClinicOutboundGoods outboundGoods = erpClinicOutboundGoodsMapper.selectById(tErpSupplierInventoryGood.getWarehousingBatchId());
 
@@ -358,20 +363,56 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
     public void warehouseGoods(WarehouseGoodsDto dtos, SysUser user, String supplierClinicId) {
 
         // dtos根据供应商分组
 //        Map<String, List<clinicWarehouseGoodsDto>> collect = dtos.stream().collect(Collectors.groupingBy(clinicWarehouseGoodsDto::getSupplierId));
 
 //        for (Map.Entry<String, List<clinicWarehouseGoodsDto>> stringListEntry : collect.entrySet()) {
+        if(dtos.getStatus()==null || dtos.getStatus()!=1 ){
+            // 草稿-》正式 移除所有草稿
+            this.baseMapper.delete(new LambdaQueryWrapper<TErpClinicWarehousing>().eq(TErpClinicWarehousing::getClinicId,supplierClinicId).eq(TErpClinicWarehousing::getStatus,1));
+        }
+
+
         TErpClinicWarehousing tErpClinicWarehousing = new TErpClinicWarehousing();
         tErpClinicWarehousing.setClinicId(supplierClinicId);
         tErpClinicWarehousing.setCreateId(user.getUserId().toString());
-        tErpClinicWarehousing.setWarehouseNo("G" + DateUtils.dateTimeNow());
+
+        TErpClinicWarehousing last = this.getOne(new LambdaQueryWrapper<TErpClinicWarehousing>().orderByDesc(BaseModel::getCreateTime).last("LIMIT 1"));
+        if(last==null){
+            tErpClinicWarehousing.setWarehouseNo("G" + DateUtils.dateTimeNow()+"00001");
+        }else{
+            String lastProcurementCode = last.getWarehouseNo();
+            String datePart = "G" + DateUtils.dateTimeNow();
+
+            // 直接获取后五位数字并+1,不考虑是否同一天
+            try {
+                String numberPart = lastProcurementCode.substring(Math.max(0, lastProcurementCode.length() - 5));
+                int number = Integer.parseInt(numberPart);
+                if (number < 99999) {
+                    number++;
+                } else {
+                    number = 2; // 达到99999后重置为00002
+                }
+                tErpClinicWarehousing.setWarehouseNo(datePart + String.format("%05d", number));
+            } catch (NumberFormatException e) {
+                // 如果解析失败,默认从00001开始
+                tErpClinicWarehousing.setWarehouseNo(datePart + "00001");
+            }
+        }
         tErpClinicWarehousing.setCreateTime(LocalDateTime.now());
         tErpClinicWarehousing.setType(3);
         tErpClinicWarehousing.setStatus(dtos.getStatus());
-        this.save(tErpClinicWarehousing);
+        tErpClinicWarehousing.setWarehousingType(2);
+        try {
+            this.save(tErpClinicWarehousing);
+        }catch (Exception e){
+            throw new RuntimeException("网络繁忙,请重试");
+
+        }
+
 
         BigDecimal totalPrice = new BigDecimal(0);
         ArrayList<String> names = new ArrayList<>();
@@ -422,17 +463,45 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void outboundGoods(ClinicOutboundGoodsDto dto, SysUser user, String supplierClinicId) {
         TErpClinicOutbound tErpClinicOutbound = new TErpClinicOutbound();
         tErpClinicOutbound.setClinicId(supplierClinicId);
         tErpClinicOutbound.setCreateId(user.getUserId().toString());
-        tErpClinicOutbound.setOutboundNumber("G" + DateUtils.dateTimeNow());
+        TErpClinicOutbound last = erpClinicOutboundMapper.selectOne(new LambdaQueryWrapper<TErpClinicOutbound>().orderByDesc(BaseModel::getCreateTime).last("limit 1"));
+        if(last==null){
+            tErpClinicOutbound.setOutboundNumber("G" + DateUtils.dateTimeNow()+"00001");
+        }else{
+            String lastProcurementCode = last.getOutboundNumber();
+            String datePart = "G" + DateUtils.dateTimeNow();
+
+            // 直接获取后五位数字并+1,不考虑是否同一天
+            try {
+                String numberPart = lastProcurementCode.substring(Math.max(0, lastProcurementCode.length() - 5));
+                int number = Integer.parseInt(numberPart);
+                if (number < 99999) {
+                    number++;
+                } else {
+                    number = 2; // 达到99999后重置为00002
+                }
+                tErpClinicOutbound.setOutboundNumber(datePart + String.format("%05d", number));
+            } catch (NumberFormatException e) {
+                // 如果解析失败,默认从00001开始
+                tErpClinicOutbound.setOutboundNumber(datePart + "00001");
+            }
+        }
+
         tErpClinicOutbound.setCreateTime(LocalDateTime.now());
         tErpClinicOutbound.setOutboundType(dto.getOutboundType());
         tErpClinicOutbound.setTotalMoney(dto.getTotalPrice());
         tErpClinicOutbound.setOutboundReason(dto.getOutboundReason());
         tErpClinicOutbound.setTypeNum(dto.getTypeNum());
-        erpClinicOutboundMapper.insert(tErpClinicOutbound);
+        try {
+            erpClinicOutboundMapper.insert(tErpClinicOutbound);
+        }catch (Exception e){
+            throw new RuntimeException("网络繁忙,请重试");
+        }
+
 
         List<TErpClinicOutboundGoods> tErpClinicOutboundGoods = new ArrayList<>();
         for (OutboundGoodsNextDto outboundGoodsNextDto : dto.getOutboundGoodsNextDtos()) {

--
Gitblit v1.7.1