| | |
| | | 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; |
| | |
| | | /** 合同状态默认值:履行中 */ |
| | | 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); |
| | |
| | | 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); |
| | | // 已关联采购订单的合同不允许删除,避免订单丢失合同追溯信息 |
| | |
| | | throw exception(SUPPLIER_CONTRACT_USED_BY_ORDER); |
| | | } |
| | | contractMapper.deleteById(id); |
| | | // 同步清理合同附件关联 |
| | | storageAttachmentApi.deleteAttachmentsByRecord(RECORD_TYPE, id); |
| | | } |
| | | |
| | | @Override |