src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
@@ -7,20 +7,13 @@ import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.framework.web.domain.R; import com.ruoyi.procurementrecord.service.ProcurementRecordService; import com.ruoyi.procurementrecord.utils.StockUtils; import com.ruoyi.purchase.dto.SimpleReturnOrderGroupDto; import com.ruoyi.purchase.mapper.PurchaseReturnOrderProductsMapper; import com.ruoyi.sales.pojo.SalesLedgerProduct; import com.ruoyi.sales.service.ISalesLedgerProductService; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 产品信息Controller @@ -34,9 +27,6 @@ public class SalesLedgerProductController extends BaseController { private final ISalesLedgerProductService salesLedgerProductService; private final ProcurementRecordService procurementRecordService; private final StockUtils stockUtils; private final PurchaseReturnOrderProductsMapper purchaseReturnOrderProductsMapper; /** @@ -45,13 +35,7 @@ @GetMapping("/list") public AjaxResult list(SalesLedgerProduct salesLedgerProduct) { List<SalesLedgerProduct> list = salesLedgerProductService.selectSalesLedgerProductList(salesLedgerProduct); if (CollUtil.isEmpty(list)) { return AjaxResult.success(list); } List<Long> productIds = list.stream().map(SalesLedgerProduct::getProductModelId).collect(Collectors.toList()); List<SimpleReturnOrderGroupDto> groupListByProductIds = purchaseReturnOrderProductsMapper.getReturnOrderGroupListByProductIds(productIds); Map<Long, BigDecimal> returnOrderGroupDtoMap = groupListByProductIds.stream().collect(Collectors.toMap(SimpleReturnOrderGroupDto::getProductModelId, item -> item.getSumReturnQuantity())); if (CollUtil.isNotEmpty(list)) { list.forEach(item -> { if (item.getApproveStatus() != 2) { if (item.getHasSufficientStock() == 0) { @@ -60,11 +44,16 @@ item.setApproveStatus(1); } } // 统计退货数量 BigDecimal returnQuality = returnOrderGroupDtoMap.getOrDefault(item.getProductModelId(), BigDecimal.ZERO); item.setReturnQuality(returnQuality); item.setAvailableQuality(item.getQuantity().subtract(returnQuality)); java.math.BigDecimal returnQuantity = item.getReturnQuantity() == null ? java.math.BigDecimal.ZERO : item.getReturnQuantity(); java.math.BigDecimal quantity = item.getQuantity() == null ? java.math.BigDecimal.ZERO : item.getQuantity(); item.setReturnQuantity(returnQuantity); item.setAvailableQuality(quantity.subtract(returnQuantity)); }); } return AjaxResult.success(list); } src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -164,11 +164,7 @@ @TableField(exist = false) private Integer hasSufficientStock; // 退货数量 @TableField(exist = false) private BigDecimal returnQuality; // 可用数量 quantity - returnQuality // 可用数量 quantity - returnQuantity @TableField(exist = false) private BigDecimal availableQuality; @Schema(description = "创建用户") @@ -187,6 +183,10 @@ private BigDecimal noQuantity; @TableField(exist = false) @Schema(description = "退货数量") private BigDecimal returnQuantity; @TableField(exist = false) @Schema(description = "审批中数量") private BigDecimal pendingApprovalQuantity; } src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -38,8 +38,6 @@ import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.mapper.SysDeptMapper; import com.ruoyi.project.system.mapper.SysUserMapper; import com.ruoyi.purchase.dto.SimpleReturnOrderGroupDto; import com.ruoyi.purchase.mapper.PurchaseReturnOrderProductsMapper; import com.ruoyi.quality.mapper.QualityInspectMapper; import com.ruoyi.sales.dto.*; import com.ruoyi.sales.mapper.CommonFileMapper; @@ -121,9 +119,6 @@ @Autowired private ProductionProductMainService productionProductMainService; @Autowired private PurchaseReturnOrderProductsMapper purchaseReturnOrderProductsMapper; ; @Autowired private SysUserMapper sysUserMapper; @Override @@ -148,17 +143,11 @@ productWrapper.eq(SalesLedgerProduct::getType, type.getCode()); List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(productWrapper); if (type.equals(SaleEnum.PURCHASE)) { // 查询退货信息 List<Long> productIds = salesLedgerProducts.stream().map(SalesLedgerProduct::getProductModelId).collect(Collectors.toList()); List<SimpleReturnOrderGroupDto> groupListByProductIds = new ArrayList<>(); if(CollectionUtils.isNotEmpty(productIds)){ groupListByProductIds = purchaseReturnOrderProductsMapper.getReturnOrderGroupListByProductIds(productIds); } Map<Long, BigDecimal> returnOrderGroupDtoMap = groupListByProductIds.stream().collect(Collectors.toMap(SimpleReturnOrderGroupDto::getProductModelId, SimpleReturnOrderGroupDto::getSumReturnQuantity)); salesLedgerProducts.forEach(item -> { BigDecimal returnQuality = returnOrderGroupDtoMap.getOrDefault(item.getProductModelId(), BigDecimal.ZERO); item.setReturnQuality(returnQuality); item.setAvailableQuality(item.getQuantity().subtract(returnQuality)); BigDecimal returnQuantity = item.getReturnQuantity() == null ? BigDecimal.ZERO : item.getReturnQuantity(); item.setReturnQuantity(returnQuantity); BigDecimal quantity = item.getQuantity() == null ? BigDecimal.ZERO : item.getQuantity(); item.setAvailableQuality(quantity.subtract(returnQuantity)); }); } return salesLedgerProducts; src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -34,6 +34,7 @@ ELSE 0 END as has_sufficient_stock, (IFNULL(T1.quantity, 0) - IFNULL(t3.shipped_quantity, 0) - IFNULL(t5.pending_approval_quantity, 0)) as no_quantity, IFNULL(t6.return_quantity, 0) as return_quantity, IFNULL(t5.pending_approval_quantity, 0) as pending_approval_quantity, CASE WHEN IFNULL(t3.shipped_quantity, 0) = 0 AND IFNULL(t5.pending_approval_quantity, 0) = 0 THEN '待发货' @@ -113,6 +114,14 @@ )) GROUP BY si.sales_ledger_product_id ) t5 ON t5.sales_ledger_product_id = T1.id LEFT JOIN ( SELECT si.sales_ledger_product_id, IFNULL(SUM(rsp.num), 0) AS return_quantity FROM return_management rm INNER JOIN return_sale_product rsp ON rm.id = rsp.return_management_id INNER JOIN shipping_info si ON rm.shipping_id = si.id WHERE rm.status = 1 GROUP BY si.sales_ledger_product_id ) t6 ON t6.sales_ledger_product_id = T1.id left join product_model pm ON T1.product_model_id = pm.id left join product p ON pm.product_id = p.id <where>