gaoluyang
5 天以前 d39e4f7d839167c16425086dfa2f8747bccfdff9
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));
    }
}