From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master

---
 jnpf-lims/jnpf-lims-biz/src/main/resources/mapper/LimsWendingxingFenxiMapper.xml |  294 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 294 insertions(+), 0 deletions(-)

diff --git a/jnpf-lims/jnpf-lims-biz/src/main/resources/mapper/LimsWendingxingFenxiMapper.xml b/jnpf-lims/jnpf-lims-biz/src/main/resources/mapper/LimsWendingxingFenxiMapper.xml
new file mode 100644
index 0000000..300cd2c
--- /dev/null
+++ b/jnpf-lims/jnpf-lims-biz/src/main/resources/mapper/LimsWendingxingFenxiMapper.xml
@@ -0,0 +1,294 @@
+<?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="jnpf.limsMapper.LimsWendingxingFenxiMapper">
+
+    <resultMap id="optionMap" type="jnpf.limsEntity.LimsWendingxingFenxiOptionVo">
+        <id property="key" column="key"/>
+        <result property="id" column="id"/>
+        <result property="code" column="code"/>
+        <result property="name" column="name"/>
+        <result property="guige" column="guige"/>
+        <result property="shujuLeixing" column="shuju_leixing"/>
+        <result property="unit" column="unit"/>
+        <result property="jihuaId" column="jihua_id"/>
+        <result property="jihuaBianhao" column="jihua_bianhao"/>
+        <result property="fanganMingcheng" column="fangan_mingcheng"/>
+        <result property="pihao" column="pihao"/>
+    </resultMap>
+
+    <resultMap id="rowMap" type="jnpf.limsEntity.LimsWendingxingFenxiRowVo">
+        <result property="yangpinMingcheng" column="yangpin_mingcheng"/>
+        <result property="jihuaId" column="jihua_id"/>
+        <result property="jihuaBianhao" column="jihua_bianhao"/>
+        <result property="pihao" column="pihao"/>
+        <result property="jieguoLuruRiqi" column="jieguo_luru_riqi"/>
+        <result property="zhouqi" column="zhouqi"/>
+        <result property="zhouqiDanwei" column="zhouqi_danwei"/>
+        <result property="xiangmuId" column="xiangmu_id"/>
+        <result property="xiangmuBianma" column="xiangmu_bianma"/>
+        <result property="xiangmuMingcheng" column="xiangmu_mingcheng"/>
+        <result property="rawResult" column="raw_result"/>
+        <result property="shangxian" column="shangxian"/>
+        <result property="xiaxian" column="xiaxian"/>
+        <result property="unit" column="unit"/>
+        <result property="shujuLeixing" column="shuju_leixing"/>
+        <result property="biaozhunId" column="biaozhun_id"/>
+        <result property="jianyanJielun" column="jianyan_jielun"/>
+        <result property="yichangDiaochaLeixing" column="yichang_diaocha_leixing"/>
+    </resultMap>
+
+    <resultMap id="completenessMap" type="jnpf.limsEntity.LimsWendingxingFenxiCompletenessRecordVo">
+        <result property="expectedKey" column="expected_key"/>
+        <result property="jianyanZhuangtai" column="jianyan_zhuangtai"/>
+        <result property="rawResult" column="raw_result"/>
+        <result property="xiangmuId" column="xiangmu_id"/>
+        <result property="zhouqi" column="zhouqi"/>
+        <result property="zhouqiDanwei" column="zhouqi_danwei"/>
+    </resultMap>
+
+    <sql id="approvedPlanWhere">
+        p.f_tenant_id = #{tenantId}
+        AND p.f_flow_state = 2
+        AND COALESCE(p.f_delete_mark, 0) &lt;&gt; 1
+    </sql>
+
+    <sql id="softDeleteYangpin">
+        COALESCE(yp.f_delete_mark, 0) &lt;&gt; 1
+    </sql>
+
+    <select id="selectCategories" resultMap="optionMap">
+        SELECT DISTINCT ql.fenlei_bianma AS id,
+               ql.fenlei_bianma AS key,
+               ql.fenlei_bianma AS code,
+               ql.fenlei_mingcheng AS name
+        FROM lims_wendingxing_kaoca_jihua p
+        INNER JOIN yangpin_guanli yp
+                ON yp.f_id = p.yangpin_id AND yp.f_tenant_id = p.f_tenant_id
+        INNER JOIN qingyan_leixing ql
+                ON yp.leixin = ql.fenlei_bianma AND ql.f_tenant_id = p.f_tenant_id
+        WHERE <include refid="approvedPlanWhere"/>
+          AND <include refid="softDeleteYangpin"/>
+          AND COALESCE(ql.f_delete_mark, 0) &lt;&gt; 1
+          AND ql.biz_enabled = 'enabled'
+        ORDER BY code, name
+    </select>
+
+    <select id="selectProducts" resultMap="optionMap">
+        SELECT DISTINCT yp.f_id AS id,
+               yp.f_id AS key,
+               yp.bianma AS code,
+               yp.mingcheng AS name,
+               yp.guige AS guige
+        FROM lims_wendingxing_kaoca_jihua p
+        INNER JOIN yangpin_guanli yp
+                ON yp.f_id = p.yangpin_id AND yp.f_tenant_id = p.f_tenant_id
+        INNER JOIN qingyan_leixing ql
+                ON yp.leixin = ql.fenlei_bianma AND ql.f_tenant_id = p.f_tenant_id
+        WHERE <include refid="approvedPlanWhere"/>
+          AND <include refid="softDeleteYangpin"/>
+          AND COALESCE(ql.f_delete_mark, 0) &lt;&gt; 1
+          AND ql.biz_enabled = 'enabled'
+          AND ql.fenlei_bianma = #{fenleiBianma}
+        ORDER BY code, name, id
+    </select>
+
+    <select id="selectItems" resultMap="optionMap">
+        SELECT DISTINCT z.f_id AS id,
+               z.f_id AS key,
+               z.jianyan_xiangmu_bianma AS code,
+               z.jianyan_xiangmu_mingcheng AS name,
+               z.shuju_leixing AS shuju_leixing,
+               z.jianyan_danwei AS unit
+        FROM lims_wendingxing_kaoca_jihua p
+        INNER JOIN yangpin_guanli yp
+                ON yp.f_id = p.yangpin_id AND yp.f_tenant_id = p.f_tenant_id
+        INNER JOIN qingyan_leixing ql
+                ON yp.leixin = ql.fenlei_bianma AND ql.f_tenant_id = p.f_tenant_id
+        INNER JOIN lims_wendingxing_kaoca_jiangyan_xiangmu kx
+                ON kx.kaoca_id = p.kaoca_id AND kx.f_tenant_id = p.f_tenant_id
+        INNER JOIN zhiliang_biaozhun_guanli_zixiang z
+                ON z.f_id = kx.zhiliang_biaozhun_guanli_zixiang_id
+               AND z.f_tenant_id = p.f_tenant_id
+        WHERE <include refid="approvedPlanWhere"/>
+          AND <include refid="softDeleteYangpin"/>
+          AND COALESCE(ql.f_delete_mark, 0) &lt;&gt; 1
+          AND COALESCE(kx.f_delete_mark, 0) &lt;&gt; 1
+          AND COALESCE(z.f_delete_mark, 0) &lt;&gt; 1
+          AND TRIM(z.shuju_leixing) = '鏁板��'
+          AND ql.biz_enabled = 'enabled'
+          AND ql.fenlei_bianma = #{fenleiBianma}
+          AND p.yangpin_id = #{yangpinId}
+        ORDER BY name, code, id
+    </select>
+
+    <select id="selectPlans" resultMap="optionMap">
+        SELECT DISTINCT p.f_id AS id,
+               p.f_id AS key,
+               p.bianhao AS code,
+               p.bianhao AS name
+        FROM lims_wendingxing_kaoca_jihua p
+        INNER JOIN lims_wendingxing_kaoca_jiangyan_xiangmu kx
+                ON kx.kaoca_id = p.kaoca_id AND kx.f_tenant_id = p.f_tenant_id
+        WHERE <include refid="approvedPlanWhere"/>
+          AND COALESCE(kx.f_delete_mark, 0) &lt;&gt; 1
+          AND p.yangpin_id = #{yangpinId}
+          <if test="xiangmuIds != null and xiangmuIds.size() > 0">
+              AND kx.zhiliang_biaozhun_guanli_zixiang_id IN
+              <foreach collection="xiangmuIds" item="id" open="(" separator="," close=")">#{id}</foreach>
+          </if>
+        ORDER BY code, id
+    </select>
+
+    <select id="selectBatches" resultMap="optionMap">
+        SELECT DISTINCT p.f_id || '::' || py.pihao AS id,
+               p.f_id || '::' || py.pihao AS key,
+               p.f_id AS jihua_id,
+               p.bianhao AS jihua_bianhao,
+               p.wendingxing_fangan_mingcheng AS fangan_mingcheng,
+               py.pihao AS pihao,
+               py.pihao AS name
+        FROM lims_wendingxing_kaoca_jihua p
+        INNER JOIN lims_wendingxing_kaoca_jihua_yangpin py
+                ON py.kaoca_jihua_id = p.f_id AND py.f_tenant_id = p.f_tenant_id
+        INNER JOIN lims_wendingxing_kaoca_jiangyan_xiangmu kx
+                ON kx.kaoca_id = p.kaoca_id AND kx.f_tenant_id = p.f_tenant_id
+        WHERE <include refid="approvedPlanWhere"/>
+          AND COALESCE(py.f_delete_mark, 0) &lt;&gt; 1
+          AND COALESCE(kx.f_delete_mark, 0) &lt;&gt; 1
+          AND p.yangpin_id = #{yangpinId}
+          <if test="xiangmuIds != null and xiangmuIds.size() > 0">
+              AND kx.zhiliang_biaozhun_guanli_zixiang_id IN
+              <foreach collection="xiangmuIds" item="id" open="(" separator="," close=")">#{id}</foreach>
+          </if>
+          <if test="jihuaIds != null and jihuaIds.size() > 0">
+              AND p.f_id IN
+              <foreach collection="jihuaIds" item="id" open="(" separator="," close=")">#{id}</foreach>
+          </if>
+        ORDER BY jihua_bianhao, jihua_id, pihao
+    </select>
+
+    <select id="selectRows" resultMap="rowMap">
+        SELECT COALESCE(NULLIF(q.chanpin_mingcheng, ''), p.yangpin_mingcheng) AS yangpin_mingcheng,
+               p.f_id AS jihua_id,
+               p.bianhao AS jihua_bianhao,
+               COALESCE(NULLIF(q.pihao, ''), c.pihao) AS pihao,
+               COALESCE(jx.jieguo_luru_riqi, jx.wancheng_riqi) AS jieguo_luru_riqi,
+               COALESCE(NULLIF(q.zhouqi, ''), c.zhouqi::text) AS zhouqi,
+               COALESCE(NULLIF(q.zhouqi_danwei, ''), c.zhouqi_danwei) AS zhouqi_danwei,
+               z.f_id AS xiangmu_id,
+               COALESCE(NULLIF(jx.jianyan_xiangmu_bianma, ''), z.jianyan_xiangmu_bianma) AS xiangmu_bianma,
+               COALESCE(NULLIF(jx.jianyan_xiangmu_mingcheng, ''), z.jianyan_xiangmu_mingcheng) AS xiangmu_mingcheng,
+               jx.jianyan_jieguo AS raw_result,
+               z.biaozhun_shangxian AS shangxian,
+               z.biaozhun_xiaxian AS xiaxian,
+               COALESCE(NULLIF(TRIM(jxm.moren_danwei), ''), '/') AS unit,
+               COALESCE(NULLIF(jx.shuju_leixing, ''), z.shuju_leixing) AS shuju_leixing,
+               z.f_foreign_id AS biaozhun_id,
+               jx.jianyan_jielun AS jianyan_jielun,
+               jx.yichang_diaocha_leixing AS yichang_diaocha_leixing
+        FROM lims_wendingxing_kaoca_jihua p
+        INNER JOIN lims_qingyandan q
+                ON q.wendingxing_jilu_id = p.f_id AND q.f_tenant_id = p.f_tenant_id
+        INNER JOIN lims_wendingxing_kaoca_jihua_zhouqi c
+                ON q.wendingxing_zhouqi_id = c.f_id AND c.f_tenant_id = p.f_tenant_id
+        INNER JOIN lims_jianyan_xiang jx
+                ON jx.qingyandan_id = q.f_id AND jx.f_tenant_id = p.f_tenant_id
+        INNER JOIN zhiliang_biaozhun_guanli_zixiang z
+                ON jx.f_foreign_id = z.f_id AND z.f_tenant_id = p.f_tenant_id
+        LEFT JOIN jianyan_xiangmu_guanli jxm
+               ON jxm.bianma = z.jianyan_xiangmu_bianma
+              AND jxm.f_tenant_id = p.f_tenant_id
+              AND COALESCE(jxm.f_delete_mark, 0) &lt;&gt; 1
+        WHERE <include refid="approvedPlanWhere"/>
+          AND COALESCE(q.f_delete_mark, 0) &lt;&gt; 1
+          AND COALESCE(c.f_delete_mark, 0) &lt;&gt; 1
+          AND COALESCE(jx.f_delete_mark, 0) &lt;&gt; 1
+          AND COALESCE(z.f_delete_mark, 0) &lt;&gt; 1
+          AND q.qingyan_fenlei = 'wendingxing'
+          AND jx.jianyan_zhuangtai = 'audited'
+          AND p.yangpin_id = #{param.yangpinId}
+          AND z.f_id IN
+          <foreach collection="param.xiangmuIds" item="id" open="(" separator="," close=")">#{id}</foreach>
+          <if test="param.jihuaIds != null and param.jihuaIds.size() > 0">
+              AND p.f_id IN
+              <foreach collection="param.jihuaIds" item="id" open="(" separator="," close=")">#{id}</foreach>
+          </if>
+          <if test="param.pihaoKeys != null and param.pihaoKeys.size() > 0">
+              AND
+              <foreach collection="param.pihaoKeys" item="batch" open="(" separator=" OR " close=")">
+                  (p.f_id = #{batch.jihuaId} AND COALESCE(NULLIF(q.pihao, ''), c.pihao) = #{batch.pihao})
+              </foreach>
+          </if>
+        ORDER BY xiangmu_mingcheng, xiangmu_bianma, p.bianhao, p.f_id,
+                 pihao, c.zhouqi, c.zhouqi_danwei, jieguo_luru_riqi, jx.f_id
+    </select>
+
+    <select id="selectCompleteness" resultMap="completenessMap">
+        WITH mapped AS (
+            SELECT p.f_id AS jihua_id,
+                   string_agg(DISTINCT kx.zhiliang_biaozhun_guanli_zixiang_id, ',') AS item_ids
+            FROM lims_wendingxing_kaoca_jihua p
+            INNER JOIN lims_wendingxing_kaoca_jiangyan_xiangmu kx
+                    ON kx.kaoca_id = p.kaoca_id AND kx.f_tenant_id = p.f_tenant_id
+            WHERE p.f_tenant_id = #{tenantId}
+              AND p.f_flow_state = 2
+              AND COALESCE(p.f_delete_mark, 0) &lt;&gt; 1
+              AND COALESCE(kx.f_delete_mark, 0) &lt;&gt; 1
+            GROUP BY p.f_id
+        ), expected AS (
+            SELECT p.f_id AS jihua_id,
+                   c.f_id AS zhouqi_id,
+                   COALESCE(NULLIF(c.pihao, ''), py.pihao) AS pihao,
+                   c.zhouqi::text AS zhouqi,
+                   c.zhouqi_danwei AS zhouqi_danwei,
+                   TRIM(BOTH '"' FROM item.item_id) AS xiangmu_id
+            FROM lims_wendingxing_kaoca_jihua p
+            INNER JOIN lims_wendingxing_kaoca_jihua_zhouqi c
+                    ON c.kaoca_jihua_id = p.f_id AND c.f_tenant_id = p.f_tenant_id
+            INNER JOIN lims_wendingxing_kaoca_jihua_yangpin py
+                    ON py.kaoca_jihua_id = p.f_id AND py.f_tenant_id = p.f_tenant_id
+            INNER JOIN mapped ON mapped.jihua_id = p.f_id
+            CROSS JOIN LATERAL regexp_split_to_table(
+                COALESCE(NULLIF(TRIM(BOTH '[] ' FROM c.jiancha_xiangmu_ids), ''), mapped.item_ids),
+                '\s*,\s*'
+            ) AS item(item_id)
+            WHERE <include refid="approvedPlanWhere"/>
+              AND COALESCE(c.f_delete_mark, 0) &lt;&gt; 1
+              AND COALESCE(py.f_delete_mark, 0) &lt;&gt; 1
+              AND (NULLIF(c.pihao, '') IS NULL OR c.pihao = py.pihao)
+              AND p.yangpin_id = #{param.yangpinId}
+              AND TRIM(BOTH '"' FROM item.item_id) IN
+              <foreach collection="param.xiangmuIds" item="id" open="(" separator="," close=")">#{id}</foreach>
+              <if test="param.jihuaIds != null and param.jihuaIds.size() > 0">
+                  AND p.f_id IN
+                  <foreach collection="param.jihuaIds" item="id" open="(" separator="," close=")">#{id}</foreach>
+              </if>
+              <if test="param.pihaoKeys != null and param.pihaoKeys.size() > 0">
+                  AND
+                  <foreach collection="param.pihaoKeys" item="batch" open="(" separator=" OR " close=")">
+                      (p.f_id = #{batch.jihuaId} AND COALESCE(NULLIF(c.pihao, ''), py.pihao) = #{batch.pihao})
+                  </foreach>
+              </if>
+        )
+        SELECT e.jihua_id || '::' || e.zhouqi_id || '::' || COALESCE(e.pihao, '') || '::' || e.xiangmu_id AS expected_key,
+               jx.jianyan_zhuangtai AS jianyan_zhuangtai,
+               jx.jianyan_jieguo AS raw_result,
+               e.xiangmu_id AS xiangmu_id,
+               e.zhouqi AS zhouqi,
+               e.zhouqi_danwei AS zhouqi_danwei
+        FROM expected e
+        LEFT JOIN lims_qingyandan q
+               ON q.wendingxing_jilu_id = e.jihua_id
+              AND q.wendingxing_zhouqi_id = e.zhouqi_id
+              AND q.f_tenant_id = #{tenantId}
+              AND COALESCE(NULLIF(q.pihao, ''), e.pihao) = e.pihao
+              AND q.qingyan_fenlei = 'wendingxing'
+              AND COALESCE(q.f_delete_mark, 0) &lt;&gt; 1
+        LEFT JOIN lims_jianyan_xiang jx
+               ON jx.qingyandan_id = q.f_id
+              AND jx.f_foreign_id = e.xiangmu_id
+              AND jx.f_tenant_id = #{tenantId}
+              AND COALESCE(jx.f_delete_mark, 0) &lt;&gt; 1
+        ORDER BY expected_key, jianyan_zhuangtai
+    </select>
+</mapper>

--
Gitblit v1.8.0