云
5 天以前 1d9cfc91e7255b9e139b20ff230cb19246f19193
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/api/purchase/ErpPurchaseOrderApiImpl.java
@@ -21,6 +21,8 @@
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.PURCHASE_ORDER_ITEM_RETURN_FAIL_IN_EXCEED;
/**
 * ERP 采购订单 API 实现类
@@ -37,6 +39,9 @@
    @Resource
    private ErpPurchaseOrderItemMapper purchaseOrderItemMapper;
    @Resource
    private cn.iocoder.yudao.module.erp.dal.mysql.purchase.ErpPurchaseOrderMapper purchaseOrderMapper;
    @Override
    public CommonResult<ErpPurchaseOrderRespDTO> getPurchaseOrder(Long id) {
@@ -101,6 +106,36 @@
    }
    @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);
        BigDecimal inCount = item.getInCount() != null ? item.getInCount() : BigDecimal.ZERO;
        if (returnCount.compareTo(BigDecimal.ZERO) <= 0 || newReturnCount.compareTo(inCount) > 0) {
            throw exception(PURCHASE_ORDER_ITEM_RETURN_FAIL_IN_EXCEED,
                    "产品ID:" + item.getProductId(), inCount);
        }
        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);
@@ -143,4 +178,4 @@
        return success(BeanUtils.toBean(items, ErpPurchaseOrderItemRespDTO.class));
    }
}
}