From d39e4f7d839167c16425086dfa2f8747bccfdff9 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 05 十一月 2026 17:39:01 +0800
Subject: [PATCH] feat: 打通销售采购财务闭环并完成累计业务优化
---
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/api/purchase/ErpPurchaseOrderApiImpl.java | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 117 insertions(+), 1 deletions(-)
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/api/purchase/ErpPurchaseOrderApiImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/api/purchase/ErpPurchaseOrderApiImpl.java
index 778f021..77e1ffd 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/api/purchase/ErpPurchaseOrderApiImpl.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/api/purchase/ErpPurchaseOrderApiImpl.java
@@ -2,8 +2,13 @@
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.erp.api.purchase.dto.ErpPurchaseOrderCreateReqDTO;
+import cn.iocoder.yudao.module.erp.api.purchase.dto.ErpPurchaseOrderItemRespDTO;
import cn.iocoder.yudao.module.erp.api.purchase.dto.ErpPurchaseOrderRespDTO;
+import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.order.ErpPurchaseOrderSaveReqVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchaseOrderDO;
+import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchaseOrderItemDO;
+import cn.iocoder.yudao.module.erp.dal.mysql.purchase.ErpPurchaseOrderItemMapper;
import cn.iocoder.yudao.module.erp.enums.ErpAuditStatus;
import cn.iocoder.yudao.module.erp.service.purchase.ErpPurchaseOrderService;
import jakarta.annotation.Resource;
@@ -11,6 +16,7 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+import java.math.BigDecimal;
import java.util.Collections;
import java.util.List;
@@ -19,7 +25,7 @@
/**
* ERP 閲囪喘璁㈠崟 API 瀹炵幇绫�
*
- * @author 鑺嬮亾婧愮爜
+ * @author 瓒呯骇绠$悊鍛�
*/
@RestController
@RequestMapping(ErpPurchaseOrderApi.PREFIX)
@@ -28,6 +34,12 @@
@Resource
private ErpPurchaseOrderService purchaseOrderService;
+
+ @Resource
+ private ErpPurchaseOrderItemMapper purchaseOrderItemMapper;
+
+ @Resource
+ private cn.iocoder.yudao.module.erp.dal.mysql.purchase.ErpPurchaseOrderMapper purchaseOrderMapper;
@Override
public CommonResult<ErpPurchaseOrderRespDTO> getPurchaseOrder(Long id) {
@@ -55,4 +67,108 @@
return success(BeanUtils.toBean(orders, ErpPurchaseOrderRespDTO.class));
}
+ @Override
+ public CommonResult<List<ErpPurchaseOrderItemRespDTO>> getPurchaseOrderItemList(Long orderId) {
+ if (orderId == null) {
+ return success(Collections.emptyList());
+ }
+ List<ErpPurchaseOrderItemDO> items = purchaseOrderService.getPurchaseOrderItemListByOrderId(orderId);
+ return success(BeanUtils.toBean(items, ErpPurchaseOrderItemRespDTO.class));
+ }
+
+ @Override
+ public CommonResult<ErpPurchaseOrderItemRespDTO> getPurchaseOrderItem(Long id) {
+ if (id == null) {
+ return success(null);
+ }
+ ErpPurchaseOrderItemDO item = purchaseOrderItemMapper.selectById(id);
+ return success(BeanUtils.toBean(item, ErpPurchaseOrderItemRespDTO.class));
+ }
+
+ @Override
+ public CommonResult<Boolean> updateOrderItemInCount(Long orderItemId, BigDecimal inCount) {
+ if (orderItemId == null || inCount == null) {
+ return success(false);
+ }
+ ErpPurchaseOrderItemDO item = purchaseOrderItemMapper.selectById(orderItemId);
+ if (item == null) {
+ return success(false);
+ }
+ // 绱姞鍏ュ簱鏁伴噺
+ BigDecimal newInCount = (item.getInCount() != null ? item.getInCount() : BigDecimal.ZERO).add(inCount);
+ ErpPurchaseOrderItemDO updateItem = new ErpPurchaseOrderItemDO();
+ updateItem.setId(orderItemId);
+ updateItem.setInCount(newInCount);
+ purchaseOrderItemMapper.updateById(updateItem);
+ return success(true);
+ }
+
+ @Override
+ public CommonResult<Boolean> updateOrderItemReturnCount(Long orderItemId, BigDecimal returnCount) {
+ if (orderItemId == null || returnCount == null) {
+ return success(false);
+ }
+ ErpPurchaseOrderItemDO item = purchaseOrderItemMapper.selectById(orderItemId);
+ if (item == null) {
+ return success(false);
+ }
+ // 绱姞閫�璐ф暟閲�
+ BigDecimal oldReturnCount = item.getReturnCount() != null ? item.getReturnCount() : BigDecimal.ZERO;
+ BigDecimal newReturnCount = oldReturnCount.add(returnCount);
+ purchaseOrderItemMapper.updateById(new ErpPurchaseOrderItemDO()
+ .setId(orderItemId)
+ .setReturnCount(newReturnCount));
+ // 鍚屾鏇存柊璁㈠崟绾ч��璐ф暟閲忥細鎸夎鍗曚笅鎵�鏈夋槑缁嗙殑閫�璐ф暟閲忔眰鍜岋紝閬垮厤鍙紶鍗曟潯鎶婂叾瀹冭娓呴浂
+ BigDecimal totalReturnCount = purchaseOrderItemMapper.selectListByOrderId(item.getOrderId()).stream()
+ .map(orderItem -> orderItem.getReturnCount() != null ? orderItem.getReturnCount() : BigDecimal.ZERO)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ purchaseOrderMapper.updateById(new ErpPurchaseOrderDO()
+ .setId(item.getOrderId())
+ .setReturnCount(totalReturnCount));
+ return success(true);
+ }
+
+ @Override
+ public CommonResult<Boolean> updateOrderInStatus(Long orderId) {
+ if (orderId == null) {
+ return success(false);
+ }
+ purchaseOrderService.updatePurchaseOrderInStatus(orderId);
+ return success(true);
+ }
+
+ @Override
+ public CommonResult<Long> createPurchaseOrder(ErpPurchaseOrderCreateReqDTO createReqDTO) {
+ return success(purchaseOrderService.createPurchaseOrder(buildSaveReqVO(createReqDTO)));
+ }
+
+ @Override
+ public CommonResult<Long> createPurchaseOrderDraft(ErpPurchaseOrderCreateReqDTO createReqDTO) {
+ return success(purchaseOrderService.createPurchaseOrder(buildSaveReqVO(createReqDTO), false));
+ }
+
+ private ErpPurchaseOrderSaveReqVO buildSaveReqVO(ErpPurchaseOrderCreateReqDTO createReqDTO) {
+ ErpPurchaseOrderSaveReqVO saveReqVO = BeanUtils.toBean(createReqDTO, ErpPurchaseOrderSaveReqVO.class);
+ if (createReqDTO.getItems() != null) {
+ saveReqVO.setItems(BeanUtils.toBean(createReqDTO.getItems(), ErpPurchaseOrderSaveReqVO.Item.class));
+ }
+ return saveReqVO;
+ }
+
+ @Override
+ public CommonResult<List<ErpPurchaseOrderItemRespDTO>> getPurchaseOrderItemListBySource(Integer sourceType, Long sourceId) {
+ if (sourceType == null || sourceId == null) {
+ return success(Collections.emptyList());
+ }
+ // 1. 鎸夋潵婧愭煡璇㈤噰璐鍗�
+ List<ErpPurchaseOrderDO> orders = purchaseOrderService.getPurchaseOrderListBySource(sourceType, sourceId);
+ if (orders.isEmpty()) {
+ return success(Collections.emptyList());
+ }
+ // 2. 鏌ヨ鎵�鏈夎鍗曠殑鏄庣粏
+ List<Long> orderIds = orders.stream().map(ErpPurchaseOrderDO::getId).toList();
+ List<ErpPurchaseOrderItemDO> items = purchaseOrderItemMapper.selectListByOrderIds(orderIds);
+ return success(BeanUtils.toBean(items, ErpPurchaseOrderItemRespDTO.class));
+ }
+
}
\ No newline at end of file
--
Gitblit v1.9.3