From 6b5f7c66fc40d7f6099d561e31a34fbd50dd20d3 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 01 七月 2026 15:54:57 +0800
Subject: [PATCH] 初始化项目
---
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java | 67 +++++++++++++++++++++++++++++++++
1 files changed, 67 insertions(+), 0 deletions(-)
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java
index d25d7c0..b997a26 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java
@@ -31,6 +31,9 @@
import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionTransferReqBO;
import cn.iocoder.yudao.module.crm.service.product.CrmProductService;
import cn.iocoder.yudao.module.crm.service.receivable.CrmReceivableService;
+import cn.iocoder.yudao.module.erp.api.sale.ErpSaleOrderApi;
+import cn.iocoder.yudao.module.erp.api.sale.dto.ErpSaleOrderCreateReqDTO;
+import cn.iocoder.yudao.module.erp.api.sale.dto.ErpSaleOrderRespDTO;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import com.mzt.logapi.context.LogRecordContext;
import com.mzt.logapi.service.impl.DiffParseFunction;
@@ -95,6 +98,8 @@
private AdminUserApi adminUserApi;
@Resource
private BpmProcessInstanceApi bpmProcessInstanceApi;
+ @Resource
+ private ErpSaleOrderApi saleOrderApi;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -413,4 +418,66 @@
return contractMapper.selectListByCustomerIdOwnerUserId(customerId, ownerUserId);
}
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ @LogRecord(type = CRM_CONTRACT_TYPE, subType = "鐢熸垚閿�鍞鍗�", bizNo = "{{#id}}",
+ success = "鍚堝悓銆恵{#contractName}}銆戠敓鎴愰攢鍞鍗曘�恵{#orderNo}}銆戞垚鍔�")
+ @CrmPermission(bizType = CrmBizTypeEnum.CRM_CONTRACT, bizId = "#id", level = CrmPermissionLevelEnum.WRITE)
+ public Long generateSaleOrder(Long id, Long userId) {
+ // 1. 鏍¢獙鍚堝悓瀛樺湪涓斿凡瀹℃壒閫氳繃
+ CrmContractDO contract = validateContractExists(id);
+ if (!CrmAuditStatusEnum.APPROVE.getStatus().equals(contract.getAuditStatus())) {
+ throw exception(CONTRACT_GENERATE_ORDER_FAIL_NOT_APPROVE);
+ }
+ // 2. 鏍¢獙鏄惁宸茬敓鎴愰攢鍞鍗�
+ ErpSaleOrderRespDTO existOrder = saleOrderApi.getSaleOrderByContractId(id).getCheckedData();
+ if (existOrder != null) {
+ throw exception(CONTRACT_GENERATE_ORDER_FAIL_EXISTS_ORDER, existOrder.getNo());
+ }
+
+ // 3. 鑾峰彇鍚堝悓浜у搧鍒楄〃
+ List<CrmContractProductDO> contractProducts = contractProductMapper.selectListByContractId(id);
+ if (CollUtil.isEmpty(contractProducts)) {
+ throw exception(CONTRACT_GENERATE_ORDER_FAIL_NO_PRODUCT);
+ }
+
+ // 4. 鏋勫缓閿�鍞鍗曞垱寤鸿姹�
+ ErpSaleOrderCreateReqDTO createReqDTO = new ErpSaleOrderCreateReqDTO();
+ createReqDTO.setCustomerId(contract.getCustomerId());
+ createReqDTO.setContractId(contract.getId());
+ createReqDTO.setContractNo(contract.getNo());
+ createReqDTO.setSaleUserId(contract.getOwnerUserId());
+ createReqDTO.setOrderTime(LocalDateTime.now().toString());
+ createReqDTO.setDiscountPercent(contract.getDiscountPercent());
+ createReqDTO.setRemark("鐢卞悎鍚屻��" + contract.getNo() + "銆戣嚜鍔ㄧ敓鎴�");
+
+ // 5. 鏋勫缓璁㈠崟椤�
+ List<ErpSaleOrderCreateReqDTO.Item> items = contractProducts.stream()
+ .map(cp -> {
+ ErpSaleOrderCreateReqDTO.Item item = new ErpSaleOrderCreateReqDTO.Item();
+ item.setProductId(cp.getProductId());
+ item.setProductPrice(cp.getContractPrice());
+ item.setCount(cp.getCount());
+ return item;
+ })
+ .toList();
+ createReqDTO.setItems(items);
+
+ // 6. 鍒涘缓閿�鍞鍗�
+ Long orderId = saleOrderApi.createSaleOrder(createReqDTO).getCheckedData();
+ ErpSaleOrderRespDTO order = saleOrderApi.getSaleOrder(orderId).getCheckedData();
+
+ // 7. 鏇存柊鍚堝悓鍏宠仈璁㈠崟淇℃伅
+ contractMapper.updateById(new CrmContractDO()
+ .setId(id)
+ .setOrderId(orderId)
+ .setOrderNo(order.getNo()));
+
+ // 8. 璁板綍鎿嶄綔鏃ュ織
+ LogRecordContext.putVariable("contractName", contract.getName());
+ LogRecordContext.putVariable("orderNo", order.getNo());
+
+ return orderId;
+ }
+
}
--
Gitblit v1.9.3