采购台账,可用数量为实际入库数量。存在采购质检部分合格入库情况。只有可用数量大于0进行采购退货操作
已修改9个文件
82 ■■■■■ 文件已修改
src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/mapper/PurchaseLedgerMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/purchase/PurchaseReturnOrdersMapper.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sales/SalesLedgerProductMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
@@ -118,6 +118,16 @@
    }
    /**
     * 查询采购退货可选采购台账
     */
    @GetMapping("/returnableList")
    public TableDataInfo returnableList(PurchaseLedger purchaseLedger) {
        startPage();
        List<PurchaseLedger> list = purchaseLedgerService.selectReturnablePurchaseLedgerList(purchaseLedger);
        return getDataTable(list);
    }
    /**
     * 导出采购台账列表
     */
    @Log(title = "采购台账", businessType = BusinessType.EXPORT)
src/main/java/com/ruoyi/purchase/mapper/PurchaseLedgerMapper.java
@@ -23,6 +23,8 @@
    IPage<PurchaseLedgerDto> selectPurchaseLedgerListPage(IPage ipage, @Param("c") PurchaseLedgerDto purchaseLedger);
    List<PurchaseLedger> selectReturnablePurchaseLedgerList(@Param("c") PurchaseLedger purchaseLedger);
    List<IncomeExpenseAnalysisDto> selectPurchaseStats(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("dateFormat") String dateFormat);
    BigDecimal selectTotalPurchaseAmount(@Param("startDate") String startDate, @Param("endDate") String endDate);
src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
@@ -23,6 +23,8 @@
    List<PurchaseLedger> selectPurchaseLedgerList(PurchaseLedger purchaseLedger);
    List<PurchaseLedger> selectReturnablePurchaseLedgerList(PurchaseLedger purchaseLedger);
    int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws Exception;
    R batchInsertPurchaseSteps(List<Long> ids);
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -136,6 +136,11 @@
    }
    @Override
    public List<PurchaseLedger> selectReturnablePurchaseLedgerList(PurchaseLedger purchaseLedger) {
        return purchaseLedgerMapper.selectReturnablePurchaseLedgerList(purchaseLedger);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws Exception {
        PurchaseLedger purchaseLedger = new PurchaseLedger();
src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
@@ -47,11 +47,16 @@
                java.math.BigDecimal returnQuantity = item.getReturnQuantity() == null
                        ? java.math.BigDecimal.ZERO
                        : item.getReturnQuantity();
                java.math.BigDecimal quantity = item.getQuantity() == null
                item.setReturnQuantity(returnQuantity);
                java.math.BigDecimal availableQuality = item.getQuantity() == null
                        ? java.math.BigDecimal.ZERO
                        : item.getQuantity();
                item.setReturnQuantity(returnQuantity);
                item.setAvailableQuality(quantity.subtract(returnQuantity));
                if (item.getType() != null && item.getType() == 2) {
                    availableQuality = item.getApprovedStockInNum() == null
                            ? java.math.BigDecimal.ZERO
                            : item.getApprovedStockInNum();
                }
                item.setAvailableQuality(availableQuality.subtract(returnQuantity));
            });
        }
        return AjaxResult.success(list);
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -187,6 +187,10 @@
    private BigDecimal returnQuantity;
    @TableField(exist = false)
    @Schema(description = "已审核入库数量")
    private BigDecimal approvedStockInNum;
    @TableField(exist = false)
    @Schema(description = "审批中数量")
    private BigDecimal pendingApprovalQuantity;
}
src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
@@ -139,6 +139,46 @@
        ORDER BY result.entry_date DESC
    </select>
    <select id="selectReturnablePurchaseLedgerList" resultType="com.ruoyi.purchase.pojo.PurchaseLedger">
        SELECT DISTINCT pl.*
        FROM purchase_ledger pl
        WHERE 1 = 1
        <if test="c.purchaseContractNumber != null and c.purchaseContractNumber != ''">
            AND pl.purchase_contract_number LIKE CONCAT('%', #{c.purchaseContractNumber}, '%')
        </if>
        <if test="c.supplierId != null">
            AND pl.supplier_id = #{c.supplierId}
        </if>
        <if test="c.approvalStatus != null">
            AND pl.approval_status = #{c.approvalStatus}
        </if>
        AND EXISTS (
            SELECT 1
            FROM stock_in_record sir
            LEFT JOIN quality_inspect qi
                ON sir.record_type = '10'
               AND sir.record_id = qi.id
            LEFT JOIN sales_ledger_product slp
                ON slp.sales_ledger_id = pl.id
               AND slp.product_model_id = sir.product_model_id
               AND slp.type = 2
            LEFT JOIN (
                SELECT stock_in_record_id, SUM(return_quantity) AS total_return_num
                FROM purchase_return_order_products
                GROUP BY stock_in_record_id
            ) rs ON rs.stock_in_record_id = sir.id
            WHERE sir.approval_status = 1
              AND sir.record_type IN ('7','10')
              AND (
                  (sir.record_type = '7' AND sir.record_id = pl.id)
                  OR (sir.record_type = '10' AND qi.purchase_ledger_id = pl.id)
              )
              AND slp.id IS NOT NULL
              AND GREATEST(sir.stock_in_num - COALESCE(rs.total_return_num, 0), 0) > 0
        )
        ORDER BY pl.entry_date DESC
    </select>
    <select id="selectTotalPurchaseAmount" resultType="java.math.BigDecimal">
        SELECT IFNULL(SUM(contract_amount), 0)
        FROM purchase_ledger
src/main/resources/mapper/purchase/PurchaseReturnOrdersMapper.xml
@@ -106,7 +106,10 @@
            LEFT JOIN quality_inspect qi ON sir.record_type = 10 AND sir.record_id = qi.id
            LEFT JOIN purchase_ledger pl
            ON pl.id = IF(sir.record_type = 7, sir.record_id, qi.purchase_ledger_id)
            LEFT JOIN sales_ledger_product slp ON pl.id = slp.sales_ledger_id
            LEFT JOIN sales_ledger_product slp
                ON pl.id = slp.sales_ledger_id
               AND slp.product_model_id = sir.product_model_id
               AND slp.type = 2
            LEFT JOIN (
                SELECT
                    stock_in_record_id,
@@ -116,7 +119,7 @@
                WHERE 1=1
                GROUP BY stock_in_record_id
            ) rs ON rs.stock_in_record_id = sir.id
        WHERE sir.approval_status = 1 AND slp.type = 2
        WHERE sir.approval_status = 1
        AND sir.record_type IN ('7','10')
         and pl.id = #{purchaseLedgerId}
    </select>
src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -35,6 +35,7 @@
        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(t4.approved_stock_in_num, 0) as approved_stock_in_num,
        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 '待发货'