From b3fe06c151dc8455649bf0a46e481ceb83e3ea2a Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期六, 07 十一月 2026 13:37:54 +0800
Subject: [PATCH] feat: 完成好水川 MOM 需求1/2/4/5/8(装箱、BOM成本、销售合同、劳动合同、留样)
---
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/api/purchase/ErpPurchaseOrderApiImpl.java | 124 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 123 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..2fa2a19 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,15 +16,20 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
/**
* ERP 閲囪喘璁㈠崟 API 瀹炵幇绫�
*
- * @author 鑺嬮亾婧愮爜
+ * @author 瓒呯骇绠$悊鍛�
*/
@RestController
@RequestMapping(ErpPurchaseOrderApi.PREFIX)
@@ -28,6 +38,9 @@
@Resource
private ErpPurchaseOrderService purchaseOrderService;
+
+ @Resource
+ private ErpPurchaseOrderItemMapper purchaseOrderItemMapper;
@Override
public CommonResult<ErpPurchaseOrderRespDTO> getPurchaseOrder(Long id) {
@@ -55,4 +68,113 @@
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> updateOrderInStatus(Long orderId) {
+ if (orderId == null) {
+ return success(false);
+ }
+ purchaseOrderService.updatePurchaseOrderInStatus(orderId);
+ return success(true);
+ }
+
+ @Override
+ public CommonResult<Long> createPurchaseOrder(ErpPurchaseOrderCreateReqDTO createReqDTO) {
+ ErpPurchaseOrderSaveReqVO saveReqVO = BeanUtils.toBean(createReqDTO, ErpPurchaseOrderSaveReqVO.class);
+ if (createReqDTO.getItems() != null) {
+ saveReqVO.setItems(BeanUtils.toBean(createReqDTO.getItems(), ErpPurchaseOrderSaveReqVO.Item.class));
+ }
+ return success(purchaseOrderService.createPurchaseOrder(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));
+ }
+
+ @Override
+ public CommonResult<Map<Long, BigDecimal>> getItemAveragePurchasePriceMap(Collection<Long> productIds) {
+ if (productIds == null || productIds.isEmpty()) {
+ return success(Collections.emptyMap());
+ }
+ // 1. 鏌ヨ宸插鏍搁噰璐鍗曚腑杩欎簺鐗╂枡鐨勬槑缁�
+ List<ErpPurchaseOrderItemDO> items = purchaseOrderItemMapper
+ .selectListByApprovedOrderAndProductIds(productIds);
+ if (items.isEmpty()) {
+ return success(Collections.emptyMap());
+ }
+ // 2. 鎸夌墿鏂欐眹鎬绘暟閲忓拰閲戦锛岃绠楀姞鏉冨钩鍧囦环锛歋UM(鎬讳环) / SUM(鏁伴噺)
+ Map<Long, BigDecimal> totalPriceMap = new HashMap<>();
+ Map<Long, BigDecimal> totalCountMap = new HashMap<>();
+ for (ErpPurchaseOrderItemDO item : items) {
+ if (item.getProductId() == null || item.getCount() == null
+ || item.getCount().compareTo(BigDecimal.ZERO) <= 0) {
+ continue;
+ }
+ BigDecimal totalPrice = item.getTotalPrice();
+ if (totalPrice == null && item.getProductPrice() != null) {
+ totalPrice = item.getProductPrice().multiply(item.getCount());
+ }
+ if (totalPrice == null) {
+ continue;
+ }
+ totalPriceMap.merge(item.getProductId(), totalPrice, BigDecimal::add);
+ totalCountMap.merge(item.getProductId(), item.getCount(), BigDecimal::add);
+ }
+ Map<Long, BigDecimal> result = new HashMap<>(totalCountMap.size());
+ totalCountMap.forEach((productId, totalCount) -> {
+ BigDecimal totalPrice = totalPriceMap.get(productId);
+ if (totalPrice != null && totalCount.compareTo(BigDecimal.ZERO) > 0) {
+ result.put(productId, totalPrice.divide(totalCount, 6, RoundingMode.HALF_UP));
+ }
+ });
+ return success(result);
+ }
+
}
\ No newline at end of file
--
Gitblit v1.9.3