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/TErpSupplierWarehousingServiceImpl.java |   71 +++++++
 ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java                                 |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java         |   63 ++++++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpProcurementController.java            |   32 +++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysGoodsController.java                  |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysGoodsServiceImpl.java               |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpGoodsServiceImpl.java               |  247 ++++++++++++++++++++++++--
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpClinicWarehousingServiceImpl.java   |   68 +++++++
 8 files changed, 446 insertions(+), 45 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpProcurementController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpProcurementController.java
index 40d0237..d171d60 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpProcurementController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpProcurementController.java
@@ -24,6 +24,7 @@
 import io.swagger.annotations.ApiOperation;
 import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
@@ -267,6 +268,7 @@
 
     @ApiOperation(value = "采购详情入库")
     @PostMapping(value = "/updateStatusProcurement")
+    @Transactional(rollbackFor = Exception.class)
     public R<DetailProcurementVO> updateStatusProcurement(@RequestBody @Valid UpdateStatusProcurementLastDto dto) {
         SysUser user = tokenService.getLoginUser().getUser();
         Integer roleType = user.getRoleType();
@@ -308,9 +310,35 @@
 //        tErpClinicWarehousing.setUnitAmount(tErpProcurementGoods.getSalesAmount());
         tErpClinicWarehousing.setWarehousingType(1);
         tErpClinicWarehousing.setType(1);
-        tErpClinicWarehousing.setWarehouseNo("G"+ DateUtils.dateTimeNow());
+
+        TErpClinicWarehousing last = erpClinicWarehousingService.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.setProcurementId(erpProcurement.getId());
-        erpClinicWarehousingService.save(tErpClinicWarehousing);
+        try {
+            erpClinicWarehousingService.save(tErpClinicWarehousing);
+        }catch (Exception e){
+            throw new RuntimeException("网络繁忙,请重试");
+        }
         // goodsId分组
         for (UpdateStatusProcurementDto updateStatusProcurementDto : dto.getList()) {
             TErpProcurementGoods tErpProcurementGoods = list.stream().filter(t -> t.getId().equals(updateStatusProcurementDto.getId())).findFirst().get();
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysGoodsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysGoodsController.java
index dbf9574..e572c1d 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysGoodsController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysGoodsController.java
@@ -97,7 +97,9 @@
                 List<TSysGoodsExchange> list = sysGoodsExchangeService.list(new LambdaQueryWrapper<TSysGoodsExchange>().in(TSysGoodsExchange::getGoodsId, records.stream().map(TSysGoods::getId).collect(Collectors.toList())));
                 records.forEach(item -> {
                     item.setExchangeQuantity(list.stream().filter(item1 -> item1.getGoodsId().equals(item.getId())).mapToInt(TSysGoodsExchange::getGoodsCount).sum());
-                    item.setSurplusQuantity(item.getGoodsTotal() - item.getExchangeQuantity());
+                    if(item.getGoodsTotal()!=null){
+                        item.setSurplusQuantity(item.getGoodsTotal() - item.getExchangeQuantity());
+                    }
                 });
             }
             pageInfo.setRecords(records);
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
index 5086ef8..6cb2d3e 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
@@ -30,7 +30,7 @@
 
     public static String YYYY_MM_DD = "yyyy-MM-dd";
 
-    public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
+    public static String YYYYMMDDHHMMSS = "yyyyMMdd";
 
     public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
 
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 f3d7fa6..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;
@@ -360,6 +363,7 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
     public void warehouseGoods(WarehouseGoodsDto dtos, SysUser user, String supplierClinicId) {
 
         // dtos根据供应商分组
@@ -375,12 +379,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).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());
         tErpClinicWarehousing.setWarehousingType(2);
-        this.save(tErpClinicWarehousing);
+        try {
+            this.save(tErpClinicWarehousing);
+        }catch (Exception e){
+            throw new RuntimeException("网络繁忙,请重试");
+
+        }
+
 
         BigDecimal totalPrice = new BigDecimal(0);
         ArrayList<String> names = new ArrayList<>();
@@ -431,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()) {
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpGoodsServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpGoodsServiceImpl.java
index 28a5f71..d49ff11 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpGoodsServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpGoodsServiceImpl.java
@@ -7,6 +7,7 @@
 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.CodeGenerateUtils;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.system.dto.InventoryDto;
@@ -535,11 +536,38 @@
             supplierClinicId =crmClinic.getId();
         }
         TErpSupplierInventory tErpSupplierInventory = new TErpSupplierInventory();
-        String s = DateUtils.dateTimeNow();
-        tErpSupplierInventory.setInventoryNumber("P" + s);
+        TErpSupplierInventory last1 = erpSupplierInventoryMapper.selectOne(new LambdaQueryWrapper<TErpSupplierInventory>().orderByDesc(BaseModel::getCreateTime).last("limit 1"));
+        if(last1==null){
+            tErpSupplierInventory.setInventoryNumber("P" + DateUtils.dateTimeNow()+"00001");
+        }else {
+            String lastProcurementCode = last1.getInventoryNumber();
+            String datePart = "P" + 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
+                }
+                tErpSupplierInventory.setInventoryNumber(datePart + String.format("%05d", number));
+            } catch (NumberFormatException e) {
+                // 如果解析失败,默认从00001开始
+                tErpSupplierInventory.setInventoryNumber(datePart + "00001");
+            }
+        }
+
+
         tErpSupplierInventory.setWarehouseId(dto.getWarehouseId());
         tErpSupplierInventory.setSupplierId(supplierClinicId);
-        erpSupplierInventoryMapper.insert(tErpSupplierInventory);
+        try {
+            erpSupplierInventoryMapper.insert(tErpSupplierInventory);
+        }catch (Exception e){
+            throw new RuntimeException("网络繁忙,请重试");
+
+        }
 
         List<InventoryGoodsDto> dtos = dto.getDtos();
         for (InventoryGoodsDto inventoryGoodsDto : dtos) {
@@ -561,10 +589,34 @@
                 tErpSupplierWarehousing.setUnitAmount(tErpSupplierWarehousing1.getUnitAmount());
                 tErpSupplierWarehousing.setTotalPrice(tErpSupplierWarehousing1.getUnitAmount().multiply(new BigDecimal(tErpSupplierWarehousing.getGoodsCount())));
                 // 当前年月日时分秒
-                String time = DateUtils.dateTimeNow();
-                tErpSupplierWarehousing.setWarehouseNo("G" + time);
+                TErpSupplierWarehousing last = erpSupplierWarehousingMapper.selectOne(new LambdaQueryWrapper<TErpSupplierWarehousing>().orderByDesc(BaseModel::getCreateTime).last("LIMIT 1"));
+                if(last==null){
+                    tErpSupplierWarehousing.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
+                        }
+                        tErpSupplierWarehousing.setWarehouseNo(datePart + String.format("%05d", number));
+                    } catch (NumberFormatException e) {
+                        // 如果解析失败,默认从00001开始
+                        tErpSupplierWarehousing.setWarehouseNo(datePart + "00001");
+                    }
+                }
                 tErpSupplierWarehousing.setType(2);
-                erpSupplierWarehousingMapper.insert(tErpSupplierWarehousing);
+                try {
+                    erpSupplierWarehousingMapper.insert(tErpSupplierWarehousing);
+                }catch (Exception e){
+                    throw new RuntimeException("网络繁忙,请重试");
+                }
 
                 // 添加批次信息
                 TErpSupplierWarehousingBatch tErpSupplierWarehousingBatch1 = new TErpSupplierWarehousingBatch();
@@ -598,12 +650,37 @@
                     tErpSupplierOutbound.setWarehouseId(dto.getWarehouseId());
                     tErpSupplierOutbound.setSupplierId(supplierClinicId);
                     tErpSupplierOutbound.setOutboundType(1);
-                    tErpSupplierOutbound.setOutboundNumber("G" + s);
+                    TErpSupplierOutbound last = erpSupplierOutboundMapper.selectOne(new LambdaQueryWrapper<TErpSupplierOutbound>().orderByDesc(BaseModel::getCreateTime).last("limit 1"));
+                    if(last==null){
+                        tErpSupplierOutbound.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
+                            }
+                            tErpSupplierOutbound.setOutboundNumber(datePart + String.format("%05d", number));
+                        } catch (NumberFormatException e) {
+                            // 如果解析失败,默认从00001开始
+                            tErpSupplierOutbound.setOutboundNumber(datePart + "00001");
+                        }
+                    }
                     int count = inventoryGoodsDto.getDamagedCount();
                     tErpSupplierOutbound.setTotalMoney(tErpSupplierWarehousing1.getUnitAmount().multiply(new BigDecimal(count)));
                     tErpSupplierOutbound.setGoodsId(tErpSupplierWarehousing2.getGoodsId());
-                    erpSupplierOutboundMapper.insert(tErpSupplierOutbound);
+                    try {
+                        erpSupplierOutboundMapper.insert(tErpSupplierOutbound);
+                    }catch (Exception e){
+                        throw new RuntimeException("网络繁忙,请重试");
 
+                    }
 
                     TErpSupplierOutboundGoods tErpSupplierOutboundGoods = new TErpSupplierOutboundGoods();
                     tErpSupplierOutboundGoods.setOutboundId(tErpSupplierOutbound.getId());
@@ -619,11 +696,37 @@
                 tErpSupplierOutbound.setWarehouseId(dto.getWarehouseId());
                 tErpSupplierOutbound.setSupplierId(supplierClinicId);
                 tErpSupplierOutbound.setOutboundType(6);
-                tErpSupplierOutbound.setOutboundNumber("G" + s);
+                TErpSupplierOutbound last = erpSupplierOutboundMapper.selectOne(new LambdaQueryWrapper<TErpSupplierOutbound>().orderByDesc(BaseModel::getCreateTime).last("limit 1"));
+                if(last==null){
+                    tErpSupplierOutbound.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
+                        }
+                        tErpSupplierOutbound.setOutboundNumber(datePart + String.format("%05d", number));
+                    } catch (NumberFormatException e) {
+                        // 如果解析失败,默认从00001开始
+                        tErpSupplierOutbound.setOutboundNumber(datePart + "00001");
+                    }
+                }
                 int count = inventoryGoodsDto.getNum() - inventoryGoodsDto.getInventoryCount();
                 tErpSupplierOutbound.setTotalMoney(tErpSupplierWarehousing1.getUnitAmount().multiply(new BigDecimal(count)));
                 tErpSupplierOutbound.setGoodsId(tErpSupplierWarehousing2.getGoodsId());
-                erpSupplierOutboundMapper.insert(tErpSupplierOutbound);
+                try {
+                    erpSupplierOutboundMapper.insert(tErpSupplierOutbound);
+                }catch (Exception e){
+                    throw new RuntimeException("网络繁忙,请重试");
+                }
+
 
 
                 TErpSupplierOutboundGoods tErpSupplierOutboundGoods = new TErpSupplierOutboundGoods();
@@ -651,6 +754,7 @@
 
     }
     @Override
+    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
     public void inventoryGoods1(InventoryDto dto, SysUser user) {
         Integer roleType = user.getRoleType();
         String supplierClinicId = null;
@@ -669,10 +773,36 @@
             supplierClinicId =crmClinic.getId();
         }
         TErpClinicInventory tErpSupplierInventory = new TErpClinicInventory();
-        String s = DateUtils.dateTimeNow();
-        tErpSupplierInventory.setInventoryNumber("P" + s);
+        TErpClinicInventory last = erpClinicInventoryMapper.selectOne(new LambdaQueryWrapper<TErpClinicInventory>().orderByDesc(BaseModel::getCreateTime).last("limit 1"));
+        if(last==null){
+            tErpSupplierInventory.setInventoryNumber("P" + DateUtils.dateTimeNow()+"00001");
+        }else {
+            String lastProcurementCode = last.getInventoryNumber();
+            String datePart = "P" + 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
+                }
+                tErpSupplierInventory.setInventoryNumber(datePart + String.format("%05d", number));
+            } catch (NumberFormatException e) {
+                // 如果解析失败,默认从00001开始
+                tErpSupplierInventory.setInventoryNumber(datePart + "00001");
+            }
+        }
+
         tErpSupplierInventory.setClinicId(supplierClinicId);
-        erpClinicInventoryMapper.insert(tErpSupplierInventory);
+        try {
+            erpClinicInventoryMapper.insert(tErpSupplierInventory);
+
+        }catch (Exception e){
+            throw new RuntimeException("网络繁忙,请重试");
+        }
+
 
         List<InventoryGoodsDto> dtos = dto.getDtos();
         for (InventoryGoodsDto inventoryGoodsDto : dtos) {
@@ -682,8 +812,6 @@
             String warehousingId = tErpSupplierWarehousingBatch.getWarehousingId();
             TErpClinicWarehousing tErpSupplierWarehousing1 = erpClinicWarehousingMapper.selectById(warehousingId);
             TErpGoods erpGoods = this.getById(tErpSupplierWarehousingBatch.getGoodsId());
-
-
 
             // 盘点是盘亏盘盈   赢
             if (inventoryGoodsDto.getNum() < inventoryGoodsDto.getInventoryCount()) {
@@ -695,8 +823,28 @@
 //                tErpSupplierWarehousing.setUnitAmount(erpGoods.getSalesAmount());
                 tErpSupplierWarehousing.setTotalPrice(tErpSupplierWarehousingBatch.getUnitAmount().multiply(new BigDecimal(inventoryGoodsDto.getInventoryCount() - inventoryGoodsDto.getNum())));
                 // 当前年月日时分秒
-                String time = DateUtils.dateTimeNow();
-                tErpSupplierWarehousing.setWarehouseNo("G" + time);
+                TErpClinicWarehousing last1 = erpClinicWarehousingMapper.selectOne(new LambdaQueryWrapper<TErpClinicWarehousing>().orderByDesc(BaseModel::getCreateTime).last("limit 1"));
+                if(last1==null){
+                    tErpSupplierWarehousing.setWarehouseNo("G" + DateUtils.dateTimeNow()+"00001");
+                }else {
+                    String lastProcurementCode = last1.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
+                        }
+                        tErpSupplierWarehousing.setWarehouseNo(datePart + String.format("%05d", number));
+                    } catch (NumberFormatException e) {
+                        // 如果解析失败,默认从00001开始
+                        tErpSupplierWarehousing.setWarehouseNo(datePart + "00001");
+                    }
+
+                }
                 tErpSupplierWarehousing.setType(2);
                 tErpSupplierWarehousing.setInventoryId(tErpSupplierInventory.getId());
                 if(erpGoods.getGoodsSource()==1){
@@ -705,7 +853,11 @@
                 }else {
                     tErpSupplierWarehousing.setSupplierName(erpGoods.getSupplierName());
                 }
-                erpClinicWarehousingMapper.insert(tErpSupplierWarehousing);
+                try {
+                    erpClinicWarehousingMapper.insert(tErpSupplierWarehousing);
+                }catch (Exception e){
+                    throw new RuntimeException("网络繁忙,请重试");
+                }
 
                 // 添加批次信息
                 TErpClinicWarehousingBatch tErpSupplierWarehousingBatch1 = new TErpClinicWarehousingBatch();
@@ -735,17 +887,41 @@
 
             } else {
 
-
                 if(inventoryGoodsDto.getDamagedCount()!=null && inventoryGoodsDto.getDamagedCount()>0){
                     TErpClinicOutbound tErpSupplierOutbound = new TErpClinicOutbound();
 //                tErpSupplierOutbound.setWarehouseId(dto.getWarehouseId());
 //                tErpSupplierOutbound.setSupplierId(supplierClinicId);
                     tErpSupplierOutbound.setOutboundType(1);
-                    tErpSupplierOutbound.setOutboundNumber("G" + s);
+                    TErpClinicOutbound last2 = erpClinicOutboundMapper.selectOne(new LambdaQueryWrapper<TErpClinicOutbound>().orderByDesc(BaseModel::getCreateTime).last("limit 1"));
+                    if(last2==null){
+
+                        tErpSupplierOutbound.setOutboundNumber("G" + DateUtils.dateTimeNow()+"00001");
+                    }else {
+                        String lastProcurementCode = last2.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
+                            }
+                            tErpSupplierOutbound.setOutboundNumber(datePart + String.format("%05d", number));
+                        } catch (NumberFormatException e) {
+                            // 如果解析失败,默认从00001开始
+                            tErpSupplierOutbound.setOutboundNumber(datePart + "00001");
+                        }
+                    }
                     int count = inventoryGoodsDto.getDamagedCount();
                     tErpSupplierOutbound.setTotalMoney(erpGoods.getSalesAmount().multiply(new BigDecimal(count)));
                     tErpSupplierOutbound.setInventoryId(tErpSupplierInventory.getId());
-                    erpClinicOutboundMapper.insert(tErpSupplierOutbound);
+                    try {
+                        erpClinicOutboundMapper.insert(tErpSupplierOutbound);
+                    }catch (Exception e){
+                        throw new RuntimeException("网络繁忙,请重试");
+                    }
 
 
                     TErpClinicOutboundGoods tErpSupplierOutboundGoods = new TErpClinicOutboundGoods();
@@ -760,11 +936,36 @@
 //                tErpSupplierOutbound.setWarehouseId(dto.getWarehouseId());
 //                tErpSupplierOutbound.setSupplierId(supplierClinicId);
                 tErpSupplierOutbound.setOutboundType(6);
-                tErpSupplierOutbound.setOutboundNumber("G" + s);
+                TErpClinicOutbound last4 = erpClinicOutboundMapper.selectOne(new LambdaQueryWrapper<TErpClinicOutbound>().orderByDesc(BaseModel::getCreateTime).last("limit 1"));
+                if(last4==null){
+                    tErpSupplierOutbound.setOutboundNumber("G" +  DateUtils.dateTimeNow()+"00001");
+                }else {
+                    String lastProcurementCode = last4.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
+                        }
+                        tErpSupplierOutbound.setOutboundNumber(datePart + String.format("%05d", number));
+                    } catch (NumberFormatException e) {
+                        // 如果解析失败,默认从00001开始
+                        tErpSupplierOutbound.setOutboundNumber(datePart + "00001");
+                    }
+
+                }
                 int count = inventoryGoodsDto.getNum() - inventoryGoodsDto.getInventoryCount();
                 tErpSupplierOutbound.setTotalMoney(tErpSupplierWarehousingBatch.getSalesAmount().multiply(new BigDecimal(count)));
                 tErpSupplierOutbound.setInventoryId(tErpSupplierInventory.getId());
-                erpClinicOutboundMapper.insert(tErpSupplierOutbound);
+                try {
+                    erpClinicOutboundMapper.insert(tErpSupplierOutbound);
+                }catch (Exception e){
+                    throw new RuntimeException("网络繁忙,请重试");
+                }
 
 
                 TErpClinicOutboundGoods tErpSupplierOutboundGoods = new TErpClinicOutboundGoods();
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java
index dc26d97..ac9843a 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java
@@ -467,8 +467,8 @@
                 String datePart = "C" + DateUtils.dateTimeNow();
 
                 // 直接获取后五位数字并+1,不考虑是否同一天
-                String numberPart = lastProcurementCode.substring(Math.max(0, lastProcurementCode.length() - 5));
                 try {
+                    String numberPart = lastProcurementCode.substring(Math.max(0, lastProcurementCode.length() - 5));
                     int number = Integer.parseInt(numberPart);
                     if (number < 99999) {
                         number++;
@@ -606,8 +606,34 @@
                         tErpSupplierOutbound.setOutboundType(7);
                         //TODO 确定这个是采购价还是销售价格
                         tErpSupplierOutbound.setTotalMoney(tErpProcurementGoods.getPurchasePrice().multiply(new BigDecimal(purchaseCount)));
-                        tErpSupplierOutbound.setOutboundNumber("G" + DateUtils.dateTimeNow());
-                        erpSupplierOutboundMapper.insert(tErpSupplierOutbound);
+
+                        TErpSupplierOutbound last = erpSupplierOutboundMapper.selectOne(new LambdaQueryWrapper<TErpSupplierOutbound>().orderByDesc(BaseModel::getCreateTime).last("limit 1"));
+                        if(last==null){
+                            tErpSupplierOutbound.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
+                                }
+                                tErpSupplierOutbound.setOutboundNumber(datePart + String.format("%05d", number));
+                            } catch (NumberFormatException e) {
+                                // 如果解析失败,默认从00001开始
+                                tErpSupplierOutbound.setOutboundNumber(datePart + "00001");
+                            }
+                        }
+                        try {
+                            erpSupplierOutboundMapper.insert(tErpSupplierOutbound);
+                        }catch (Exception e){
+                            throw new RuntimeException("网络繁忙,请重试");
+                        }
 
                         TErpSupplierOutboundGoods tErpSupplierOutboundGoods = new TErpSupplierOutboundGoods();
                         tErpSupplierOutboundGoods.setOutboundId(tErpSupplierOutbound.getId());
@@ -629,8 +655,35 @@
                         tErpSupplierOutbound.setOutboundType(7);
                         //TODO 确定这个是采购价还是销售价格
                         tErpSupplierOutbound.setTotalMoney(tErpProcurementGoods.getPurchasePrice().multiply(new BigDecimal(purchaseCount)));
-                        tErpSupplierOutbound.setOutboundNumber("G" + DateUtils.dateTimeNow());
-                        erpSupplierOutboundMapper.insert(tErpSupplierOutbound);
+                        TErpSupplierOutbound last = erpSupplierOutboundMapper.selectOne(new LambdaQueryWrapper<TErpSupplierOutbound>().orderByDesc(BaseModel::getCreateTime).last("limit 1"));
+                        if(last==null){
+                            tErpSupplierOutbound.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
+                                }
+                                tErpSupplierOutbound.setOutboundNumber(datePart + String.format("%05d", number));
+                            } catch (NumberFormatException e) {
+                                // 如果解析失败,默认从00001开始
+                                tErpSupplierOutbound.setOutboundNumber(datePart + "00001");
+                            }
+                        }
+
+                        try {
+
+                            erpSupplierOutboundMapper.insert(tErpSupplierOutbound);
+                        }catch (Exception e){
+                            throw new RuntimeException("网络繁忙,请重试");
+                        }
 
                         TErpSupplierOutboundGoods tErpSupplierOutboundGoods = new TErpSupplierOutboundGoods();
                         tErpSupplierOutboundGoods.setOutboundId(tErpSupplierOutbound.getId());
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpSupplierWarehousingServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpSupplierWarehousingServiceImpl.java
index 8754c39..7d9f1ea 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpSupplierWarehousingServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpSupplierWarehousingServiceImpl.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 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.core.exception.ServiceException;
 import com.ruoyi.common.utils.DateUtils;
@@ -24,6 +25,8 @@
 import com.ruoyi.system.vo.*;
 import org.apache.poi.ss.formula.functions.T;
 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;
@@ -253,6 +256,7 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void warehousingGoods(List<WarehousingGoodsDto> dtos, SysUser user) {
         Integer roleType = user.getRoleType();
         String supplierClinicId = null;
@@ -273,8 +277,32 @@
         for (WarehousingGoodsDto dto : dtos) {
             TErpSupplierWarehousing tErpSupplierWarehousing = new TErpSupplierWarehousing();
             // 当前年月日时分秒
-            String time = DateUtils.dateTimeNow();
-            tErpSupplierWarehousing.setWarehouseNo("G"+time);
+            // 查询上一个入库单
+            TErpSupplierWarehousing last = erpSupplierWarehousingMapper.selectOne(new LambdaQueryWrapper<TErpSupplierWarehousing>().orderByDesc(TErpSupplierWarehousing::getCreateTime).last("LIMIT 1"));
+            if(last==null){
+                tErpSupplierWarehousing.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
+                    }
+                    tErpSupplierWarehousing.setWarehouseNo(datePart + String.format("%05d", number));
+                } catch (NumberFormatException e) {
+                    // 如果解析失败,默认从00001开始
+                    tErpSupplierWarehousing.setWarehouseNo(datePart + "00001");
+                }
+
+            }
+
+
             tErpSupplierWarehousing.setSupplierId(supplierClinicId);
             tErpSupplierWarehousing.setWarehouseId(dto.getWarehouseId());
             tErpSupplierWarehousing.setGoodsId(dto.getGoodsId());
@@ -285,8 +313,12 @@
             tErpSupplierWarehousing.setTotalPrice(dto.getTotalPrice());
             List<WarehousingGoodsNextDto> warehousingGoodsNextDtos = dto.getWarehousingGoodsNextDtos();
             int sum = warehousingGoodsNextDtos.stream().mapToInt(WarehousingGoodsNextDto::getWarehousingNum).sum();
-            tErpSupplierWarehousing.setGoodsCount( sum);
-            erpSupplierWarehousingMapper.insert(tErpSupplierWarehousing);
+            tErpSupplierWarehousing.setGoodsCount(sum);
+            try {
+                erpSupplierWarehousingMapper.insert(tErpSupplierWarehousing);
+            }catch (Exception e){
+                throw new RuntimeException("网络繁忙,请重试");
+            }
 
             for (WarehousingGoodsNextDto warehousingGoodsNextDto : warehousingGoodsNextDtos) {
                 TErpSupplierWarehousingBatch tErpSupplierWarehousingBatch = new TErpSupplierWarehousingBatch();
@@ -513,6 +545,7 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
     public void outbountGoods(OutboundGoodsDto dto, SysUser user) {
         Integer roleType = user.getRoleType();
         String supplierClinicId = null;
@@ -561,10 +594,34 @@
             tErpSupplierOutbound.setWarehouseId(dto.getWarehouseId());
             tErpSupplierOutbound.setSupplierId(supplierClinicId);
             tErpSupplierOutbound.setTotalMoney(add);
-            String s = DateUtils.dateTimeNow();
-            tErpSupplierOutbound.setOutboundNumber("G" + s);
+            TErpSupplierOutbound last = erpSupplierOutboundMapper.selectOne(new LambdaQueryWrapper<TErpSupplierOutbound>().orderByDesc(BaseModel::getCreateTime).last("LIMIT 1"));
+            if(last==null){
+                tErpSupplierOutbound.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
+                    }
+                    tErpSupplierOutbound.setOutboundNumber(datePart + String.format("%05d", number));
+                } catch (NumberFormatException e) {
+                    // 如果解析失败,默认从00001开始
+                    tErpSupplierOutbound.setOutboundNumber(datePart + "00001");
+                }
+            }
             tErpSupplierOutbound.setGoodsId(tErpSupplierWarehousing.getGoodsId());
-            erpSupplierOutboundMapper.insert(tErpSupplierOutbound);
+            try {
+                erpSupplierOutboundMapper.insert(tErpSupplierOutbound);
+            }catch (Exception e){
+                throw new RuntimeException("网络繁忙,请重试");
+            }
+
 
             for (TErpSupplierOutboundGoods tErpSupplierOutboundGoods2 : arrayList) {
                 tErpSupplierOutboundGoods2.setOutboundId(tErpSupplierOutbound.getId());
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysGoodsServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysGoodsServiceImpl.java
index a435987..bb6767a 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysGoodsServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysGoodsServiceImpl.java
@@ -48,10 +48,10 @@
         // 判断已经购买的了多少
         List<TSysGoodsExchange> list = sysGoodsExchangeMapper.selectList(new LambdaQueryWrapper<TSysGoodsExchange>().eq(TSysGoodsExchange::getGoodsId, dto.getGoodsId()));
         int sum = list.stream().mapToInt(TSysGoodsExchange::getGoodsCount).sum();
-        if(sum+dto.getCount()>tSysGoods.getGoodsTotal()){
+        if(tSysGoods.getGoodsTotal()!=null && sum+dto.getCount()>tSysGoods.getGoodsTotal()){
             throw new RuntimeException("商品库存不足");
         }
-        if(sum+dto.getCount()>tSysGoods.getConvertibleQuantity()){
+        if(tSysGoods.getConvertibleQuantity()!=null && sum+dto.getCount()>tSysGoods.getConvertibleQuantity()){
             throw new RuntimeException("可兑换数量不足");
         }
         List<TCrmClinicPoints> points = crmClinicPointsMapper.selectList(new LambdaQueryWrapper<TCrmClinicPoints>().eq(TCrmClinicPoints::getClinicId, crmClinic.getId()).ge(TCrmClinicPoints::getExpireTime, new Date()).last(" and points > use_points ORDER BY create_time ASC"));

--
Gitblit v1.7.1