From 6ad5c2cdc193cf7bb02884961b7434cd7f607a0d Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 16 四月 2026 10:48:09 +0800
Subject: [PATCH] feat(production): 扩展生产工艺路线支持多产品绑定及工单权限控制

---
 src/main/resources/mapper/production/ProcessRouteItemMapper.xml |   87 +++++++++++++++++++++++++++++++++++--------
 1 files changed, 71 insertions(+), 16 deletions(-)

diff --git a/src/main/resources/mapper/production/ProcessRouteItemMapper.xml b/src/main/resources/mapper/production/ProcessRouteItemMapper.xml
index 1b5e2b4..a4d62ba 100644
--- a/src/main/resources/mapper/production/ProcessRouteItemMapper.xml
+++ b/src/main/resources/mapper/production/ProcessRouteItemMapper.xml
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+锘�<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.production.mapper.ProcessRouteItemMapper">
 
     <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProcessRouteItem">
@@ -7,29 +7,84 @@
         <result property="routeId" column="route_id"/>
         <result property="processId" column="process_id"/>
         <result property="productModelId" column="product_model_id"/>
+        <result property="productModelIds" column="product_model_ids"/>
         <result property="tenantId" column="tenant_id"/>
         <result property="createTime" column="create_time"/>
         <result property="updateTime" column="update_time"/>
         <result property="dragSort" column="drag_sort"/>
+        <result property="isQuality" column="is_quality"/>
     </resultMap>
 
     <select id="listProcessRouteItemDto" resultType="com.ruoyi.production.dto.ProcessRouteItemDto">
         select pri.*,
-               pr.description ,
+               pr.description as route_name,
                pp.name as process_name,
-               pm.speculative_trading_name,
-               pm.product_id,
-               pm.model,
-               p.product_name,
-               pm.unit
-        from
-            process_route_item pri
-                left join product_model pm on pri.product_model_id = pm.id
-                left join product_process pp on pp.id = pri.process_id
-                left join product p on p.id = pm.product_id
-                left join process_route pr on pr.id = pri.route_id
-        where
-            pri.route_id = #{c.routeId}
+               t.speculative_trading_name,
+               t.product_id,
+               t.model,
+               t.product_name,
+               t.unit
+        from process_route_item pri
+        left join product_process pp on pp.id = pri.process_id
+        left join process_route pr on pr.id = pri.route_id
+        left join (
+            select item.id as item_id,
+                   group_concat(
+                           distinct pm.speculative_trading_name
+                           order by
+                               case
+                                   when item.product_model_ids is null or item.product_model_ids = '' then pm.id
+                                   else find_in_set(pm.id, item.product_model_ids)
+                               end
+                           separator ','
+                   ) as speculative_trading_name,
+                   max(pm.product_id) as product_id,
+                   group_concat(
+                           distinct pm.model
+                           order by
+                               case
+                                   when item.product_model_ids is null or item.product_model_ids = '' then pm.id
+                                   else find_in_set(pm.id, item.product_model_ids)
+                               end
+                           separator ','
+                   ) as model,
+                   group_concat(
+                           distinct p.product_name
+                           order by
+                               case
+                                   when item.product_model_ids is null or item.product_model_ids = '' then pm.id
+                                   else find_in_set(pm.id, item.product_model_ids)
+                               end
+                           separator ','
+                   ) as product_name,
+                   group_concat(
+                           distinct pm.unit
+                           order by
+                               case
+                                   when item.product_model_ids is null or item.product_model_ids = '' then pm.id
+                                   else find_in_set(pm.id, item.product_model_ids)
+                               end
+                           separator ','
+                   ) as unit
+            from process_route_item item
+            left join product_model pm
+                   on (find_in_set(pm.id, item.product_model_ids) > 0
+                       or ((item.product_model_ids is null or item.product_model_ids = '') and pm.id = item.product_model_id))
+            left join product p on p.id = pm.product_id
+            group by item.id
+        ) t on t.item_id = pri.id
+        where pri.route_id = #{c.routeId}
+        <if test="c.productModelId != null">
+            and exists (
+                select 1
+                from product_model pm_filter
+                where (
+                    find_in_set(pm_filter.id, pri.product_model_ids) > 0
+                    or ((pri.product_model_ids is null or pri.product_model_ids = '') and pm_filter.id = pri.product_model_id)
+                )
+                and pm_filter.id = #{c.productModelId}
+            )
+        </if>
         order by pri.drag_sort
     </select>
 </mapper>

--
Gitblit v1.9.3