From 5f73eb1fb9d04040fe6ba377d5ae582024429f2f Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期日, 20 九月 2026 14:15:02 +0800
Subject: [PATCH] feat(sales): 添加客户交易详情中的付款金额字段

---
 src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java |   81 +++++++++++++++++++++++++++++++++++++---
 1 files changed, 75 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java
index 1255afd..d75db6c 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java
@@ -5,26 +5,34 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.procurementrecord.dto.ProcurementRecordOutAdd;
-import com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto;
-import com.ruoyi.procurementrecord.dto.ProcurementUpdateDto;
+import com.ruoyi.procurementrecord.bean.dto.ProcurementRecordOutAdd;
+import com.ruoyi.procurementrecord.bean.dto.ProcurementRecordOutPageDto;
+import com.ruoyi.procurementrecord.bean.dto.ProcurementUpdateDto;
+import com.ruoyi.procurementrecord.bean.vo.BatchNoOptionVo;
 import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
 import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
 import com.ruoyi.procurementrecord.service.ProcurementRecordOutService;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.sales.dto.ShippingInfoDto;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import com.ruoyi.sales.pojo.ShippingProductDetail;
+import com.ruoyi.sales.service.ShippingInfoService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
+import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -37,11 +45,26 @@
 @Slf4j
 public class ProcurementRecordOutServiceImpl extends ServiceImpl<ProcurementRecordOutMapper, ProcurementRecordOut> implements ProcurementRecordOutService {
 
+    /**
+     * 鍑哄簱绫诲瀷锛氶攢鍞嚭搴撱�傛补鍝侀攢鍞嚭搴撳嵆鍙戣揣
+     */
+    private static final Integer TYPE_SALE_OUT = 2;
+
+    /**
+     * 閿�鍞骇鍝佹槑缁嗙被鍨嬶細1閿�鍞紙sales_ledger_product.type锛屼笌鍑哄簱 type 璇箟涓嶅悓锛�
+     */
+    private static final Integer LEDGER_PRODUCT_TYPE_SALE = 1;
+
     public final ProcurementRecordOutMapper procurementRecordOutMapper;
 
     public final SysUserMapper sysUserMapper;
 
+    public final ShippingInfoService shippingInfoService;
+
+    public final SalesLedgerProductMapper salesLedgerProductMapper;
+
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public int stockout(ProcurementRecordOutAdd procurementRecordOutAdd) {
         SysUser sysUser = sysUserMapper.selectUserById(Long.valueOf(procurementRecordOutAdd.getUserId().toString()));
         if(sysUser == null){
@@ -79,9 +102,40 @@
                 .createBy(sysUser.getNickName())
                 .updateUser(Long.valueOf(procurementRecordOutAdd.getUserId()))
                 .updateTime(LocalDateTime.now())
-                .productModelId(procurementRecordOutAdd.getProductModelId());
-        this.save(procurementRecordOut.build());
+                .productModelId(procurementRecordOutAdd.getProductModelId())
+                .batchNo(procurementRecordOutAdd.getBatchNo());
+        ProcurementRecordOut record = procurementRecordOut.build();
+        this.save(record);
+
+        // 娌瑰搧閿�鍞嚭搴撳嵆鍙戣揣锛氳嚜鍔ㄧ敓鎴愪竴鏉″凡鍙戣揣鐨勫彂璐у彴璐﹀苟鍥炲啓鍏宠仈
+        if (TYPE_SALE_OUT.equals(record.getType())) {
+            record.setShippingInfoId(createShippingForOutbound(record));
+            this.updateById(record);
+        }
         return 0;
+    }
+
+    /**
+     * 鎸夊嚭搴撹褰曠敓鎴愬彂璐у彴璐︼細鎵规蹇呭~锛屽簱瀛樼敱鍙戣揣渚ф墸鍑�
+     */
+    private Long createShippingForOutbound(ProcurementRecordOut record) {
+        if (StringUtils.isBlank(record.getBatchNo())) {
+            throw new RuntimeException("璇烽�夋嫨鍑哄簱鎵规");
+        }
+        SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(record.getSalesLedgerProductId());
+        if (salesLedgerProduct == null || !LEDGER_PRODUCT_TYPE_SALE.equals(salesLedgerProduct.getType())) {
+            throw new RuntimeException("閿�鍞嚭搴撴湭鍏宠仈鍒版湁鏁堢殑閿�鍞骇鍝佹槑缁�");
+        }
+        ShippingProductDetail detail = new ShippingProductDetail();
+        detail.setProductModelId(record.getProductModelId());
+        detail.setQuantity(record.getInboundNum());
+        detail.setBatchNo(record.getBatchNo());
+
+        ShippingInfoDto shippingInfoDto = new ShippingInfoDto();
+        shippingInfoDto.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId());
+        shippingInfoDto.setSalesLedgerProductId(record.getSalesLedgerProductId());
+        shippingInfoDto.setBatchNoDetailList(Collections.singletonList(detail));
+        return shippingInfoService.addShippedFromOutbound(shippingInfoDto);
     }
 
     @Override
@@ -94,10 +148,17 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public int deletePro(ProcurementUpdateDto procurementDto) {
         List<ProcurementRecordOut> procurementRecordOutByIds = getProcurementRecordOutByIds(procurementDto.getIds());
         if(CollectionUtils.isEmpty(procurementRecordOutByIds)){
             throw new RuntimeException("鏈煡璇㈠埌閫変腑鐨勪汉");
+        }
+        // 閿�鍞嚭搴撳凡鐢熸垚鍙戣揣鍗曪紝鍒犻櫎鍑哄簱鍗曞墠鍏堝啿閿�鍙戣揣鍗曞苟褰掕繕宸叉墸搴撳瓨
+        for (ProcurementRecordOut record : procurementRecordOutByIds) {
+            if (record.getShippingInfoId() != null) {
+                shippingInfoService.cancelByOutbound(record.getShippingInfoId());
+            }
         }
         procurementRecordOutMapper.deleteBatchIds(procurementRecordOutByIds.stream().map(ProcurementRecordOut::getId).collect(Collectors.toList()));
         return 0;
@@ -124,4 +185,12 @@
     public IPage<ProcurementRecordOutPageDto> listPageBySemiProduct(Page page, ProcurementRecordOutPageDto procurementDto) {
         return procurementRecordOutMapper.listPageBySemiProduct(page, procurementDto);
     }
+
+    @Override
+    public List<BatchNoOptionVo> listBatchNoByProductModelId(Long productModelId) {
+        if (productModelId == null) {
+            return Collections.emptyList();
+        }
+        return procurementRecordOutMapper.listBatchNoByProductModelId(productModelId);
+    }
 }

--
Gitblit v1.9.3