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 |  106 ++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 97 insertions(+), 9 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 587e81a..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());
 
@@ -266,8 +272,8 @@
                     .last("LIMIT 1"));
             supplierClinicId = crmClinic.getId();
         }
-        // 获取当前时间后9个月的时间
-        LocalDateTime nineMonthLater = LocalDateTime.now().plusMonths(9);
+        // 获取当前时间后1个月的时间
+        LocalDateTime nineMonthLater = LocalDateTime.now().plusMonths(1);
 
         PageInfo<ValidityPeriodWarningVo> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
 
@@ -290,6 +296,20 @@
             for (TErpGoodsVO tErpGoodsVO : list) {
                 typeList.stream().filter(t -> t.getId().equals(tErpGoodsVO.getTypeId())).findFirst().ifPresent(t -> tErpGoodsVO.setTypeName(t.getTypeName()));
                 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);
@@ -358,20 +378,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).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<>();
@@ -410,7 +466,7 @@
             }
 
 
-            totalPrice = totalPrice.add(dto.getSalesAmount().multiply(new BigDecimal(dto.getPurchaseCount())));
+            totalPrice = totalPrice.add(dto.getUnitAmount().multiply(new BigDecimal(dto.getPurchaseCount())));
         }
         tErpClinicWarehousing.setTotalPrice(totalPrice);
         String name = names.stream().collect(Collectors.joining(","));
@@ -422,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()) {
@@ -443,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