From c2ad2126d6f8423e0a5e6e20bbb91ef6bb1cffc0 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期一, 25 五月 2026 13:26:27 +0800
Subject: [PATCH] fix(approve): 修复审批流程为空时的异常处理
---
src/main/resources/mapper/production/ProductionProductMainMapper.xml | 172 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 158 insertions(+), 14 deletions(-)
diff --git a/src/main/resources/mapper/production/ProductionProductMainMapper.xml b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
index aeb4230..ff9f34e 100644
--- a/src/main/resources/mapper/production/ProductionProductMainMapper.xml
+++ b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -10,22 +10,60 @@
<result property="tenantId" column="tenant_id"/>
<result property="createTime" column="create_time"/>
<result property="status" column="status"/>
+ <result property="reportStartTime" column="report_start_time"/>
+ <result property="reportEndTime" column="report_end_time"/>
+ <result property="reportDurationMinutes" column="report_duration_minutes"/>
</resultMap>
<select id="listPageProductionProductMainDto" resultType="com.ruoyi.production.dto.ProductionProductMainDto">
- select ppm.*,
- pwo.work_order_no as workOrderNo,
- pwo.status as workOrderStatus,
- u.nick_name as nickName,
- p.product_name as productName,
- pm.model as productModelName,
- ppo.quantity,
- ppo.scrap_qty,
- pm.unit,
- sl.sales_contract_no salesContractNo
+ select
+ min(ppm.id) as id,
+ null as productNo,
+ min(ppm.user_id) as userId,
+ min(ppm.work_order_id) as workOrderId,
+ min(ppm.status) as status,
+ min(ppm.report_start_time) as reportStartTime,
+ max(ppm.report_end_time) as reportEndTime,
+ sum(ifnull(ppm.report_duration_minutes, 0)) as reportDurationMinutes,
+ max(pwo.work_order_no) as workOrderNo,
+ max(po.nps_no) as productOrderNpsNo,
+ max(pwo.status) as workOrderStatus,
+ max(u.nick_name) as nickName,
+ max(p.product_name) as productName,
+ max(CASE pp.type
+ WHEN 1 THEN '鍔犲伐'
+ WHEN 2 THEN '鍒澘鍐疯姱鍒朵綔'
+ WHEN 3 THEN '绠¤矾缁勫'
+ WHEN 4 THEN '缃愪綋杩炴帴鍙婅皟璇�'
+ WHEN 5 THEN '娴嬭瘯鎵撳帇'
+ WHEN 6 THEN '鍏朵粬'
+ ELSE pp.name
+ END) as process,
+ max(pm.model) as productModelName,
+ sum(ifnull(ppo.quantity, 0)) as quantity,
+ sum(ifnull(ppo.scrap_qty, 0)) as scrapQty,
+ sum(ifnull(ppo.quantity, 0)) as outputTotalQuantity,
+ sum(ifnull(ppo.scrap_qty, 0)) as scrapTotalQuantity,
+ round(ifnull((
+ select sum(ifnull(pri.planned_work_hours, 0))
+ from product_process_route_item pri
+ where pri.product_order_id = po.id
+ ), 0), 2) as projectTotalHours,
+ ifnull(max(pp.salary_quota), 0) as processStandardHours,
+ round(sum(ifnull(ppm.report_duration_minutes, 0)) / 60, 2) as actualReportHours,
+ round(ifnull((
+ select sum(d.duration_minutes)
+ from production_product_report_daily d
+ where d.user_id = ppm.user_id
+ and d.report_date = curdate()
+ ), 0) / 60, 2) as dailyPersonHours,
+ max(pm.unit) as unit,
+ max(sl.sales_contract_no) as salesContractNo
from
production_product_main ppm
left join product_work_order pwo on pwo.id = ppm.work_order_id
+ left join product_process_route_item ppri on ppri.id = pwo.product_process_route_item_id
+ left join product_process pp on pp.id = ppri.process_id
left join product_order po on po.id = pwo.product_order_id
left join production_product_output ppo on ppm.id = ppo.product_main_id
left join product_model pm on pm.id = ppo.product_model_id
@@ -33,6 +71,14 @@
left join sales_ledger sl on sl.id = po.sales_ledger_id
left join sys_user u on u.user_id = ppm.user_id
<where>
+ and ppm.status = 1
+ and ifnull(ppo.quantity, 0) > 0
+ <if test="c.workOrderIds != null and c.workOrderIds.size() > 0">
+ and ppm.work_order_id in
+ <foreach collection="c.workOrderIds" item="workOrderId" open="(" separator="," close=")">
+ #{workOrderId}
+ </foreach>
+ </if>
<if test="c.nickName != null and c.nickName != ''">
and u.nick_name like concat('%',#{c.nickName},'%')
</if>
@@ -45,10 +91,86 @@
<if test="c.status != null and c.status != ''">
and ppm.status = #{c.status}
</if>
+ <if test="c.userId != null">
+ and ppm.user_id = #{c.userId}
+ </if>
</where>
- order by ppm.id
-
+ group by ppm.work_order_id, po.sales_ledger_id, po.sale_ledger_product_id, ppm.user_id
+ order by max(ppm.id) desc
</select>
+
+ <select id="listPageProductionProductMainDetailDto" resultType="com.ruoyi.production.dto.ProductionProductMainDto">
+ select
+ ppm.*,
+ pwo.work_order_no as workOrderNo,
+ po.nps_no as productOrderNpsNo,
+ pwo.status as workOrderStatus,
+ u.nick_name as nickName,
+ p.product_name as productName,
+ CASE pp.type
+ WHEN 1 THEN '鍔犲伐'
+ WHEN 2 THEN '鍒澘鍐疯姱鍒朵綔'
+ WHEN 3 THEN '绠¤矾缁勫'
+ WHEN 4 THEN '缃愪綋杩炴帴鍙婅皟璇�'
+ WHEN 5 THEN '娴嬭瘯鎵撳帇'
+ WHEN 6 THEN '鍏朵粬'
+ ELSE pp.name
+ END as process,
+ pm.model as productModelName,
+ ppo.quantity,
+ ppo.scrap_qty as scrapQty,
+ ppo.quantity as outputTotalQuantity,
+ ppo.scrap_qty as scrapTotalQuantity,
+ pm.unit,
+ sl.sales_contract_no salesContractNo,
+ round(ifnull((
+ select sum(ifnull(pri.planned_work_hours, 0))
+ from product_process_route_item pri
+ where pri.product_order_id = po.id
+ ), 0), 2) as projectTotalHours,
+ ifnull(pp.salary_quota, 0) as processStandardHours,
+ round(ifnull(ppm.report_duration_minutes, 0) / 60, 2) as actualReportHours,
+ round(ifnull((
+ select sum(d.duration_minutes)
+ from production_product_report_daily d
+ where d.user_id = ppm.user_id
+ and d.report_date = curdate()
+ ), 0) / 60, 2) as dailyPersonHours
+ from production_product_main ppm
+ left join product_work_order pwo on pwo.id = ppm.work_order_id
+ left join product_process_route_item ppri on ppri.id = pwo.product_process_route_item_id
+ left join product_process pp on pp.id = ppri.process_id
+ left join product_order po on po.id = pwo.product_order_id
+ left join production_product_output ppo on ppm.id = ppo.product_main_id
+ left join product_model pm on pm.id = ppo.product_model_id
+ left join product p on p.id = pm.product_id
+ left join sales_ledger sl on sl.id = po.sales_ledger_id
+ left join sys_user u on u.user_id = ppm.user_id
+ <where>
+ and ppm.status = 1
+ and ifnull(ppo.quantity, 0) > 0
+ <if test="c.workOrderIds != null and c.workOrderIds.size() > 0">
+ and ppm.work_order_id in
+ <foreach collection="c.workOrderIds" item="workOrderId" open="(" separator="," close=")">
+ #{workOrderId}
+ </foreach>
+ </if>
+ <if test="c.workOrderId != null">
+ and ppm.work_order_id = #{c.workOrderId}
+ </if>
+ <if test="c.userId != null">
+ and ppm.user_id = #{c.userId}
+ </if>
+ <if test="c.startDate != null">
+ and date(ppm.report_end_time) <![CDATA[ >= ]]> #{c.startDate}
+ </if>
+ <if test="c.endDate != null">
+ and date(ppm.report_end_time) <![CDATA[ <= ]]> #{c.endDate}
+ </if>
+ </where>
+ order by ppm.id desc
+ </select>
+
<select id="getOrderByMainId" resultType="com.ruoyi.production.pojo.ProductOrder">
select po.*
from product_order po
@@ -63,7 +185,7 @@
sl.sales_contract_no,
sl.customer_name,
p.product_name,
- pm.model,
+ pm.model as product_model_name,
pm.unit,
slpa.process,
ppo.quantity,
@@ -71,7 +193,7 @@
slpa.work_hours * slpa.finished_num AS wages
FROM
production_product_main ppm
- LEFT JOIN sales_ledger_production_accounting slpa ON slpa.sales_ledger_work_id = ppm.id
+ LEFT JOIN sales_ledger_production_accounting slpa ON slpa.product_main_id = ppm.id
LEFT JOIN production_product_output ppo ON ppm.id = ppo.product_main_id
LEFT JOIN product_work_order pwo ON pwo.id = ppm.work_order_id
LEFT JOIN product_order po ON po.id = pwo.product_order_id
@@ -83,6 +205,28 @@
<if test="ew.schedulingUserName != null and ew.schedulingUserName !=''">
and slpa.scheduling_user_name = #{ew.schedulingUserName}
</if>
+ <if test="ew.entryDate != null " >
+ and slpa.scheduling_date >= #{ew.entryDate}
+ and slpa.scheduling_date < DATE_ADD(#{ew.entryDate}, INTERVAL 1 DAY)
+ </if>
+ <if test="ew.entryDateStart != null and ew.entryDateEnd != null" >
+ and slpa.scheduling_date >= #{ew.entryDateStart}
+ and slpa.scheduling_date < date_add(#{ew.entryDateEnd}, INTERVAL 1 DAY)
+ </if>
+ </where>
+ </select>
+ <select id="listMain" resultType="java.lang.Long">
+ SELECT ppm.id FROM production_product_main ppm
+ left join product_work_order pwo on pwo.id = ppm.work_order_id
+ left join product_order po on po.id = pwo.product_order_id
+ left join sales_ledger sl on sl.id = po.sales_ledger_id
+ <where>
+ <if test="idList != null and idList.size() > 0">
+ and sl.id in
+ <foreach item="id" collection="idList" open="(" separator="," close=")">
+ #{id}
+ </foreach>
+ </if>
</where>
</select>
--
Gitblit v1.9.3