From 9c0f77a63226589b86e43ae105c0002b667b4847 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期三, 21 五月 2025 15:55:55 +0800
Subject: [PATCH] 来票登记逻辑更改

---
 src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java |   62 +++++++++++++++++++++++++------
 1 files changed, 50 insertions(+), 12 deletions(-)

diff --git a/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
index ef4d278..dee106e 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
@@ -74,31 +74,45 @@
 
     @Override
     public int addOrUpdateRegistration(TicketRegistrationDto ticketRegistrationDto) throws IOException {
+        // 1. 鏌ヨ閲囪喘鍙拌处璁板綍
         PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(ticketRegistrationDto.getPurchaseLedgerId());
+        if (purchaseLedger == null) {
+            // 澶勭悊閲囪喘鍙拌处涓嶅瓨鍦ㄧ殑鎯呭喌锛屼緥濡傛姏鍑哄紓甯告垨杩斿洖閿欒
+            throw new IllegalArgumentException("閲囪喘鍙拌处璁板綍涓嶅瓨鍦紝ID: " + ticketRegistrationDto.getPurchaseLedgerId());
+        }
+
+        // 2. 鏌ヨ鏄惁宸插瓨鍦ㄧエ鎹櫥璁拌褰�
+        TicketRegistration existingRecord = ticketRegistrationMapper.selectOne(
+                new LambdaQueryWrapper<TicketRegistration>()
+                        .eq(TicketRegistration::getPurchaseLedgerId, ticketRegistrationDto.getPurchaseLedgerId())
+        );
+
+        // 3. 鍒涘缓鎴栨洿鏂扮エ鎹櫥璁板疄浣�
         TicketRegistration ticketRegistration = new TicketRegistration();
         BeanUtils.copyProperties(ticketRegistrationDto, ticketRegistration);
+        if (existingRecord != null){
+            ticketRegistration.setId(existingRecord.getId());
+        }
         ticketRegistration.setPurchaseContractNumber(purchaseLedger.getPurchaseContractNumber());
         ticketRegistration.setTenantId(purchaseLedger.getTenantId());
         ticketRegistration.setContractAmount(purchaseLedger.getContractAmount());
-        // 澶勭悊瀛愯〃鏁版嵁
+
+        // 4. 澶勭悊瀛愯〃鏁版嵁
         List<SalesLedgerProduct> productData = ticketRegistrationDto.getProductData();
-        if (productData != null && !productData.isEmpty()) {
+        if (CollectionUtils.isNotEmpty(productData)) {
             handleSalesLedgerProducts(purchaseLedger.getId(), productData, 2);
         }
 
-        // 鎵ц鎻掑叆鎴栨洿鏂版搷浣�
-        int i;
-        if (ticketRegistrationDto.getId() == null) {
-            i = ticketRegistrationMapper.insert(ticketRegistration);
-        } else {
-            i = ticketRegistrationMapper.updateById(ticketRegistration);
-        }
+        // 5. 鎵ц鎻掑叆鎴栨洿鏂版搷浣�
+        int rowsAffected = existingRecord != null
+                ? ticketRegistrationMapper.updateById(ticketRegistration)
+                : ticketRegistrationMapper.insert(ticketRegistration);
 
         // 杩佺Щ涓存椂鏂囦欢鍒版寮忕洰褰�
         if (ticketRegistrationDto.getTempFileIds() != null && !ticketRegistrationDto.getTempFileIds().isEmpty()) {
             migrateTempFilesToFormal(ticketRegistration.getId(), ticketRegistrationDto.getTempFileIds());
         }
-        return i;
+        return rowsAffected;
     }
 
 
@@ -216,8 +230,32 @@
         // 鎵归噺鏇存柊锛堥渶瑕� MyBatis 鎻愪緵鎵归噺鏇存柊鏂规硶锛�
         if (!updateList.isEmpty()) {
             updateList.forEach(product -> {
-                product.setFutureTickets(product.getQuantity().subtract(new BigDecimal(product.getTicketsNum())).longValue());
-                product.setFutureTicketsAmount(product.getTaxExclusiveTotalPrice().subtract(product.getTicketsAmount()));
+                // 闈炵┖鏍¢獙锛屼换涓�瀛楁涓虹┖鍒欐姏鍑哄紓甯�
+                if (product.getQuantity() == null) {
+                    throw new BaseException("鏁伴噺涓嶈兘涓虹┖");
+                }
+                if (product.getTicketsNum() == null) {
+                    throw new BaseException("宸插紑绁ㄦ暟閲忎笉鑳戒负绌�");
+                }
+                if (product.getTaxExclusiveTotalPrice() == null) {
+                    throw new BaseException("涓嶅惈绋庢�讳环涓嶈兘涓虹┖");
+                }
+                if (product.getTicketsAmount() == null) {
+                    throw new BaseException("鏈鏉ョエ閲戦(鍏�)涓嶈兘涓虹┖");
+                }
+
+                // 璁$畻 futureTickets锛堢洿鎺ヤ娇鐢� BigDecimal 璁$畻锛岄伩鍏嶇簿搴︿涪澶憋級
+                product.setFutureTickets(
+                        product.getQuantity()
+                                .subtract(BigDecimal.valueOf(product.getTicketsNum()))
+                                .longValueExact() // 浣跨敤 exact 鏂规硶纭繚鏃犲皬鏁伴儴鍒�
+                );
+
+                // 璁$畻 futureTicketsAmount
+                product.setFutureTicketsAmount(
+                        product.getTaxExclusiveTotalPrice()
+                                .subtract(product.getTicketsAmount())
+                );
                 product.setType(type);
                 salesLedgerProductMapper.updateById(product);
             });

--
Gitblit v1.9.3