From bd63dcea170b3ceb86851f56a7a53b85b77027c2 Mon Sep 17 00:00:00 2001
From: yinrw <2030349650@qq.com>
Date: 星期四, 23 七月 2026 15:03:25 +0800
Subject: [PATCH] 修改销售台账和生产订单绑定逻辑,修复销售台账和生产订单页面展示数据bug
---
src/main/resources/mapper/production/ProductOrderMapper.xml | 210 ++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 179 insertions(+), 31 deletions(-)
diff --git a/src/main/resources/mapper/production/ProductOrderMapper.xml b/src/main/resources/mapper/production/ProductOrderMapper.xml
index eb8831f..cc6c3df 100644
--- a/src/main/resources/mapper/production/ProductOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -13,40 +13,96 @@
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
</resultMap>
+
+<!-- 鏃ql-->
+ <!-- <select id="pageProductOrder" resultType="com.ruoyi.production.dto.ProductOrderDto">-->
+ <!-- select po.*,-->
+ <!-- sl.sales_contract_no,-->
+ <!-- sl.customer_name,-->
+ <!-- p.product_name as product_category,-->
+ <!-- pm.model as specification_model,-->
+ <!-- pm.unit,-->
+ <!-- ppr.process_route_code,-->
+ <!-- pb.bom_no,-->
+ <!-- ROUND(po.complete_quantity / po.quantity * 100, 2) AS completionStatus,-->
+ <!-- DATEDIFF(sl.delivery_date, CURDATE()) AS delivery_days_diff,-->
+ <!-- sl.delivery_date,-->
+ <!-- CASE-->
+ <!-- WHEN shipping_status_counts.total_count = 0 THEN false-->
+ <!-- WHEN shipping_status_counts.unshipped_count = 0 THEN true-->
+ <!-- ELSE false-->
+ <!-- END AS is_fh-->
+ <!-- from product_order po-->
+ <!-- left join sales_ledger sl on po.sales_ledger_id = sl.id-->
+ <!-- LEFT JOIN (-->
+ <!-- SELECT sales_ledger_id,-->
+ <!-- COUNT(*) as total_count,-->
+ <!-- SUM(CASE WHEN status != '宸插彂璐�' THEN 1 ELSE 0 END) as unshipped_count-->
+ <!-- FROM shipping_info-->
+ <!-- GROUP BY sales_ledger_id-->
+ <!-- ) shipping_status_counts ON sl.id = shipping_status_counts.sales_ledger_id-->
+ <!-- left join product_model pm on po.product_model_id = pm.id-->
+ <!-- left join product p on pm.product_id = p.id-->
+ <!-- left join sales_ledger_product slp on po.sale_ledger_product_id = slp.id and slp.type = 1-->
+ <!-- left join (-->
+ <!-- select max(id) as id, product_order_id-->
+ <!-- from product_process_route-->
+ <!-- group by product_order_id-->
+ <!-- ) ppr_latest on po.id = ppr_latest.product_order_id-->
+ <!-- left join product_process_route ppr on ppr.id = ppr_latest.id-->
+ <!-- left join product_bom pb on pb.id = ppr.bom_id-->
+ <!-- <where>-->
+ <!-- <if test="c.npsNo != null and c.npsNo != ''">-->
+ <!-- and po.nps_no like concat('%',#{c.npsNo},'%')-->
+ <!-- </if>-->
+ <!-- <if test="c.salesContractNo != null and c.salesContractNo != ''">-->
+ <!-- and sl.sales_contract_no like concat('%',#{c.salesContractNo},'%')-->
+ <!-- </if>-->
+ <!-- <if test="c.customerName != null and c.customerName != ''">-->
+ <!-- and sl.customer_name like concat('%',#{c.customerName},'%')-->
+ <!-- </if>-->
+ <!-- <if test="c.productCategory != null and c.productCategory != ''">-->
+ <!-- and slp.product_category like concat('%',#{c.productCategory},'%')-->
+ <!-- </if>-->
+ <!-- <if test="c.specificationModel != null and c.specificationModel != ''">-->
+ <!-- and slp.specification_model like concat('%',#{c.specificationModel},'%')-->
+ <!-- </if>-->
+ <!-- <if test="c.startTime != null and c.endTime != null">-->
+ <!-- and po.create_time between #{c.startTime} and #{c.endTime}-->
+ <!-- </if>-->
+ <!-- </where>-->
+ <!-- </select>-->
+
+<!-- 鏂皊ql 鐢ㄤ腑闂磋〃sales_ledger_production_ref杩涜鍏宠仈sales_ledger鍜宲roduct_order锛屾煡璇㈠嚭鎵�鏈夊叧鑱旂殑sales_ledger_no鍜宑ustomer_name銆備氦鏈燂紝浜ゆ湡鍋忓樊锛屾槸鍚﹀彂璐х敱浜庝竴涓敓浜ц鍗曞搴斿涓攢鍞鍗曪紝瀵艰嚧鏃犳硶姝e父鏄剧ず锛屾殏鏃剁渷鐣�-->
<select id="pageProductOrder" resultType="com.ruoyi.production.dto.ProductOrderDto">
select po.*,
- sl.sales_contract_no,
- sl.customer_name,
+ GROUP_CONCAT(DISTINCT sl.sales_contract_no SEPARATOR ',') AS sales_contract_no,
+ GROUP_CONCAT(DISTINCT sl.customer_name SEPARATOR ',') AS customer_name,
p.product_name as product_category,
pm.model as specification_model,
pm.unit,
ppr.process_route_code,
pb.bom_no,
- ROUND(po.complete_quantity / po.quantity * 100, 2) AS completionStatus,
- DATEDIFF(sl.delivery_date, CURDATE()) AS delivery_days_diff,
- sl.delivery_date,
- CASE
- WHEN shipping_status_counts.total_count = 0 THEN false
- WHEN shipping_status_counts.unshipped_count = 0 THEN true
- ELSE false
- END AS is_fh
+ ROUND(po.complete_quantity / po.quantity * 100, 2) AS completionStatus
+
+
from product_order po
- left join sales_ledger sl on po.sales_ledger_id = sl.id
+ left join sales_ledger_production_ref ref on po.id = ref.product_order_id
+ left join sales_ledger sl on ref.sales_ledger_id = sl.id
LEFT JOIN (
SELECT sales_ledger_id,
COUNT(*) as total_count,
SUM(CASE WHEN status != '宸插彂璐�' THEN 1 ELSE 0 END) as unshipped_count
FROM shipping_info
- GROUP BY sales_ledger_id
- ) shipping_status_counts ON sl.id = shipping_status_counts.sales_ledger_id
- left join product_model pm on po.product_model_id = pm.id
- left join product p on pm.product_id = p.id
+ GROUP BY sales_ledger_id) shipping_status_counts
+ ON sl.id = shipping_status_counts.sales_ledger_id
+ left join product_model pm on po.product_model_id = pm.id
+ left join product p on pm.product_id = p.id
left join sales_ledger_product slp on po.sale_ledger_product_id = slp.id and slp.type = 1
left join (
select max(id) as id, product_order_id
from product_process_route
- group by product_order_id
- ) ppr_latest on po.id = ppr_latest.product_order_id
+ group by product_order_id) ppr_latest on po.id = ppr_latest.product_order_id
left join product_process_route ppr on ppr.id = ppr_latest.id
left join product_bom pb on pb.id = ppr.bom_id
<where>
@@ -69,7 +125,10 @@
and po.create_time between #{c.startTime} and #{c.endTime}
</if>
</where>
+ GROUP BY po.id
</select>
+
+
<select id="listProcessRoute" resultType="com.ruoyi.production.pojo.ProcessRoute">
select pr.*
from process_route pr
@@ -84,35 +143,124 @@
ps.unit_quantity * po.quantity as demandedQuantity,
ps.unit,
p.product_name,
- pp.name as process_name,
+ pp.name as process_name,
pm.product_id,
pm.model
- from
- product_structure ps
- left join product_model pm on ps.product_model_id = pm.id
- left join product p on pm.product_id = p.id
- left join product_process pp on ps.process_id = pp.id
- left join product_process_route ppr on ps.bom_id = ppr.bom_id
- left join product_order po on po.id = ppr.product_order_id
+ from product_structure ps
+ left join product_model pm on ps.product_model_id = pm.id
+ left join product p on pm.product_id = p.id
+ left join product_process pp on ps.process_id = pp.id
+ left join product_process_route ppr on ps.bom_id = ppr.bom_id
+ left join product_order po on po.id = ppr.product_order_id
where ppr.product_order_id = #{orderId}
order by ps.id
</select>
<select id="countCreated" resultType="java.lang.Integer">
- SELECT count(1) FROM product_order
- WHERE create_time >= #{startDate} AND create_time <= #{endDate}
+ SELECT count(1)
+ FROM product_order
+ WHERE create_time >= #{startDate}
+ AND create_time <= #{endDate}
</select>
<select id="countCompleted" resultType="java.lang.Integer">
- SELECT count(1) FROM product_order
- WHERE end_time >= #{startDate} AND end_time <= #{endDate}
+ SELECT count(1)
+ FROM product_order
+ WHERE end_time >= #{startDate}
+ AND end_time <= #{endDate}
AND complete_quantity >= quantity
</select>
<select id="countPending" resultType="java.lang.Integer">
- SELECT count(1) FROM product_order
- WHERE create_time >= #{startDate} AND create_time <= #{endDate}
+ SELECT count(1)
+ FROM product_order
+ WHERE create_time >= #{startDate}
+ AND create_time <= #{endDate}
AND complete_quantity < quantity
</select>
+ <select id="listByProductModelId" resultType="com.ruoyi.production.dto.ProductOrderDto">
+ select po.*,
+ sl.sales_contract_no,
+ sl.customer_name,
+ p.product_name as product_category,
+ pm.model as specification_model,
+ pm.unit,
+ ppr.process_route_code,
+ pb.bom_no,
+ ROUND(po.complete_quantity / po.quantity * 100, 2) AS completionStatus,
+ DATEDIFF(sl.delivery_date, CURDATE()) AS delivery_days_diff,
+ sl.delivery_date,
+ CASE
+ WHEN shipping_status_counts.total_count = 0 THEN false
+ WHEN shipping_status_counts.unshipped_count = 0 THEN true
+ ELSE false
+ END AS is_fh
+ from product_order po
+ left join sales_ledger sl on po.sales_ledger_id = sl.id
+ LEFT JOIN (SELECT sales_ledger_id,
+ COUNT(*) as total_count,
+ SUM(CASE WHEN status != '宸插彂璐�' THEN 1 ELSE 0 END) as unshipped_count
+ FROM shipping_info
+ GROUP BY sales_ledger_id) shipping_status_counts
+ ON sl.id = shipping_status_counts.sales_ledger_id
+ left join product_model pm on po.product_model_id = pm.id
+ left join product p on pm.product_id = p.id
+ left join sales_ledger_product slp on po.sale_ledger_product_id = slp.id and slp.type = 1
+ left join (select max(id) as id, product_order_id
+ from product_process_route
+ group by product_order_id) ppr_latest on po.id = ppr_latest.product_order_id
+ left join product_process_route ppr on ppr.id = ppr_latest.id
+ left join product_bom pb on pb.id = ppr.bom_id
+ <where>
+ <if test="productModelIds != null and productModelIds.size() > 0">
+ po.product_model_id IN
+ <foreach collection="productModelIds" open="(" separator="," close=")" item="item">
+ #{item}
+ </foreach>
+ </if>
+ </where>
+ </select>
+ <select id="listByProductOrderId" resultType="com.ruoyi.production.dto.ProductOrderDto">
+ select po.*,
+ sl.sales_contract_no,
+ sl.customer_name,
+ p.product_name as product_category,
+ pm.model as specification_model,
+ pm.unit,
+ ppr.process_route_code,
+ pb.bom_no,
+ ROUND(po.complete_quantity / po.quantity * 100, 2) AS completionStatus,
+ DATEDIFF(sl.delivery_date, CURDATE()) AS delivery_days_diff,
+ sl.delivery_date,
+ CASE
+ WHEN shipping_status_counts.total_count = 0 THEN false
+ WHEN shipping_status_counts.unshipped_count = 0 THEN true
+ ELSE false
+ END AS is_fh
+ from product_order po
+ left join sales_ledger sl on po.sales_ledger_id = sl.id
+ LEFT JOIN (SELECT sales_ledger_id,
+ COUNT(*) as total_count,
+ SUM(CASE WHEN status != '宸插彂璐�' THEN 1 ELSE 0 END) as unshipped_count
+ FROM shipping_info
+ GROUP BY sales_ledger_id) shipping_status_counts
+ ON sl.id = shipping_status_counts.sales_ledger_id
+ left join product_model pm on po.product_model_id = pm.id
+ left join product p on pm.product_id = p.id
+ left join sales_ledger_product slp on po.sale_ledger_product_id = slp.id and slp.type = 1
+ left join (select max(id) as id, product_order_id
+ from product_process_route
+ group by product_order_id) ppr_latest on po.id = ppr_latest.product_order_id
+ left join product_process_route ppr on ppr.id = ppr_latest.id
+ left join product_bom pb on pb.id = ppr.bom_id
+ <where>
+ <if test="productOrderIds != null and productOrderIds.size() > 0">
+ po.id IN
+ <foreach collection="productOrderIds" open="(" separator="," close=")" item="item">
+ #{item}
+ </foreach>
+ </if>
+ </where>
+ </select>
</mapper>
--
Gitblit v1.9.3