From 59099ec96f7a2da11df4b0b1593092b0aff38e90 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期四, 23 十月 2025 13:45:52 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpClinicWarehousingServiceImpl.java |   94 ++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 88 insertions(+), 6 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 d06a8d2..c43fcec 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;
@@ -42,6 +45,7 @@
 
     @Resource
     private TCrmClinicMapper crmClinicMapper;
+
 
     @Resource
     private TErpClinicInventoryGoodsMapper erpClinicInventoryGoodsMapper;
@@ -217,7 +221,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());
 
@@ -292,6 +298,20 @@
                 tErpGoodsVO.setTypeName(tErpGoodsVO.getTypeName());
             }
         }
+        List<String> unitIds = list.stream().map(TErpGoods::getPackingUnitId).collect(Collectors.toList());
+        if (!unitIds.isEmpty()) {
+            List<TErpGoodsUnit> unitList = erpGoodsUnitMapper.selectBatchIds(unitIds);
+            for (TErpGoodsVO tErpGoodsVO : list) {
+                unitList.stream().filter(t -> t.getId().equals(tErpGoodsVO.getPackingUnitId())).findFirst().ifPresent(t -> tErpGoodsVO.setPackingUnitName(t.getUnitName()));
+            }
+        }
+        List<String> supplierIds = list.stream().map(TErpGoods::getSupplierClinicId).collect(Collectors.toList());
+        if (!supplierIds.isEmpty()) {
+            List<TCrmSupplier> supplierClinicList = crmSupplierMapper.selectBatchIds(supplierIds);
+            for (TErpGoodsVO tErpGoodsVO : list) {
+                supplierClinicList.stream().filter(t -> tErpGoodsVO.getGoodsSource()==1 && t.getId().equals(tErpGoodsVO.getSupplierClinicId())).findFirst().ifPresent(t -> tErpGoodsVO.setSupplierName(t.getSupplierName()));
+            }
+        }
         pageInfo.setRecords(list);
         return pageInfo;
     }
@@ -358,6 +378,7 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
     public void warehouseGoods(WarehouseGoodsDto dtos, SysUser user, String supplierClinicId) {
 
         // dtos根据供应商分组
@@ -373,11 +394,40 @@
         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).orderByDesc(TErpClinicWarehousing::getWarehouseNo).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<>();
@@ -428,17 +478,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).orderByDesc(TErpClinicOutbound::getOutboundNumber).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()) {
@@ -449,7 +527,11 @@
             tErpClinicOutboundGoods1.setWarehousingId(tErpClinicWarehousingBatch.getWarehousingId());
             tErpClinicOutboundGoods1.setWarehousingBatchId(batchId);
             tErpClinicOutboundGoods1.setOutboundCount(outboundGoodsNextDto.getNum());
-            tErpClinicOutboundGoods1.setTotalPrice(tErpClinicWarehousingBatch.getUnitAmount().multiply(BigDecimal.valueOf(outboundGoodsNextDto.getNum())));
+            if(tErpClinicWarehousingBatch.getUnitAmount()==null){
+                tErpClinicOutboundGoods1.setTotalPrice(tErpClinicWarehousingBatch.getSalesAmount().multiply(BigDecimal.valueOf(outboundGoodsNextDto.getNum())));
+            }else {
+                tErpClinicOutboundGoods1.setTotalPrice(tErpClinicWarehousingBatch.getUnitAmount().multiply(BigDecimal.valueOf(outboundGoodsNextDto.getNum())));
+            }
             tErpClinicOutboundGoods1.setGoodsId(tErpClinicWarehousingBatch.getGoodsId());
             tErpClinicOutboundGoods.add(tErpClinicOutboundGoods1);
             erpClinicOutboundGoodsMapper.insert(tErpClinicOutboundGoods1);

--
Gitblit v1.7.1