From a0d55bcc8bfebd408d16166b27b7e05b3e4c9f4a Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 02 十一月 2026 16:51:50 +0800
Subject: [PATCH] feat(erp): 采购/销售明细按含税单价口径拆税,供应商合同补供应商名称与附件

---
 yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpSupplierContractServiceImpl.java |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpSupplierContractServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpSupplierContractServiceImpl.java
index aa4722d..81fc20c 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpSupplierContractServiceImpl.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpSupplierContractServiceImpl.java
@@ -8,8 +8,10 @@
 import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpSupplierContractDO;
 import cn.iocoder.yudao.module.erp.dal.mysql.purchase.ErpPurchaseOrderMapper;
 import cn.iocoder.yudao.module.erp.dal.mysql.purchase.ErpSupplierContractMapper;
+import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
 import jakarta.annotation.Resource;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import java.util.Collection;
@@ -32,12 +34,18 @@
     /** 鍚堝悓鐘舵�侀粯璁ゅ�硷細灞ヨ涓� */
     private static final Integer STATUS_ACTIVE = 1;
 
+    /** 闄勪欢鍏宠仈鐨勪笟鍔¤褰曠被鍨嬶紙鍚堝悓闄勪欢锛� */
+    private static final String RECORD_TYPE = "erp_supplier_contract";
+
     @Resource
     private ErpSupplierContractMapper contractMapper;
     @Resource
     private ErpPurchaseOrderMapper purchaseOrderMapper;
+    @Resource
+    private StorageAttachmentApi storageAttachmentApi;
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Long createContract(ErpSupplierContractSaveReqVO createReqVO) {
         validateContractCodeUnique(null, createReqVO.getCode());
         ErpSupplierContractDO contract = BeanUtils.toBean(createReqVO, ErpSupplierContractDO.class);
@@ -45,18 +53,24 @@
             contract.setStatus(STATUS_ACTIVE);
         }
         contractMapper.insert(contract);
+        // 缁戝畾闄勪欢锛堝悎鍚屾壂鎻忎欢绛夛級锛屾枃浠朵笌鍚堝悓閫氳繃闄勪欢涓棿琛ㄥ叧鑱�
+        storageAttachmentApi.bindAttachments("file", RECORD_TYPE, contract.getId(), createReqVO.getBlobIds());
         return contract.getId();
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void updateContract(ErpSupplierContractSaveReqVO updateReqVO) {
         validateContractExists(updateReqVO.getId());
         validateContractCodeUnique(updateReqVO.getId(), updateReqVO.getCode());
         ErpSupplierContractDO updateObj = BeanUtils.toBean(updateReqVO, ErpSupplierContractDO.class);
         contractMapper.updateById(updateObj);
+        // 澧為噺鏇存柊闄勪欢锛氬彧鍒犻櫎琚Щ闄ょ殑銆佸彧缁戝畾鏂板鐨�
+        storageAttachmentApi.updateAttachments("file", RECORD_TYPE, updateReqVO.getId(), updateReqVO.getBlobIds());
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void deleteContract(Long id) {
         validateContractExists(id);
         // 宸插叧鑱旈噰璐鍗曠殑鍚堝悓涓嶅厑璁稿垹闄わ紝閬垮厤璁㈠崟涓㈠け鍚堝悓杩芥函淇℃伅
@@ -65,6 +79,8 @@
             throw exception(SUPPLIER_CONTRACT_USED_BY_ORDER);
         }
         contractMapper.deleteById(id);
+        // 鍚屾娓呯悊鍚堝悓闄勪欢鍏宠仈
+        storageAttachmentApi.deleteAttachmentsByRecord(RECORD_TYPE, id);
     }
 
     @Override

--
Gitblit v1.9.3