فهرست منبع

修改
1、九防安全报表调整

liangwenxuan 2 هفته پیش
والد
کامیت
ccd0b99bf8
1فایلهای تغییر یافته به همراه27 افزوده شده و 10 حذف شده
  1. 27 10
      yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/NineRiskBoardMapper.xml

+ 27 - 10
yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/NineRiskBoardMapper.xml

@@ -16,6 +16,7 @@
         九防评估扁平化明细。
         9 张九防表结构一致(elder_id / assessor / assess_date / risk_level / assess_score / tenant_id),
         因此可用 UNION ALL 合并为一张「虚拟宽表」,再统一关联 elderly_info 补充长者档案,
+        并沿床位链路关联 org_build_bed / org_build_room / org_build_floor / org_build 取得位置信息。
         楼栋、楼层过滤与所有看板指标都基于这一次查询完成。
     -->
     <select id="selectAssessFlatList"
@@ -33,24 +34,36 @@
             ei.elder_age         AS elderAge,
             ei.nurse_level_id    AS nurseLevelId,
             ei.nurse_level_name  AS nurseLevelName,
-            ei.build_id          AS buildId,
-            ei.build_name        AS buildName,
-            ei.floor_id          AS floorId,
-            ei.floor_name        AS floorName,
-            ei.bed_name          AS bedName,
+            <!-- 楼栋、楼层的 id 与名称取自同一条关联链路,避免热力图分组键与展示名称对不上 -->
+            ob.id                AS buildId,
+            ob.build_name        AS buildName,
+            obf.id               AS floorId,
+            obf.floor_name       AS floorName,
+            obb.bed_name         AS bedName,
             ei.contract_number   AS contractNumber
         FROM (
             <include refid="unionAllAssess"/>
         ) a
         INNER JOIN elderly_info ei ON ei.id = a.elderId AND ei.deleted = 0
+        <!--
+            楼栋、楼层、床位名称统一从各自的主表取,不使用 elderly_info 上冗余的
+            build_name / floor_name / bed_name,避免主表改名后看板展示到过期数据。
+            沿用项目既有写法:从长者的 bed_id 出发,按 床位 -> 房间 -> 楼层 -> 楼栋 逐级关联,
+            并带上 tenant_id 保证多租户隔离。一律用 LEFT JOIN,
+            长者未分配床位时仍应计入统计,只是名称为空。
+        -->
+        LEFT JOIN org_build_bed obb ON obb.id = ei.bed_id AND obb.tenant_id = ei.tenant_id
+        LEFT JOIN org_build_room obr ON obr.id = obb.room_id AND obr.tenant_id = obb.tenant_id
+        LEFT JOIN org_build_floor obf ON obf.id = obr.floor_id AND obf.tenant_id = obr.tenant_id
+        LEFT JOIN org_build ob ON ob.id = obf.build_id AND ob.tenant_id = obf.tenant_id
         <where>
-            <!-- 楼栋过滤,不传即全部 -->
+            <!-- 楼栋过滤,不传即全部;与展示口径一致,走床位关联链路而非 elderly_info 冗余字段 -->
             <if test="reqVO.buildId != null">
-                AND ei.build_id = #{reqVO.buildId}
+                AND obf.build_id = #{reqVO.buildId}
             </if>
             <!-- 楼层过滤,不传即全部 -->
             <if test="reqVO.floorId != null">
-                AND ei.floor_id = #{reqVO.floorId}
+                AND obr.floor_id = #{reqVO.floorId}
             </if>
             <!-- 仅统计在住长者 -->
             AND ei.in_status = 1
@@ -115,12 +128,16 @@
                      THEN 1 ELSE 0 END) AS signedCount
         FROM elderly_risk_disclosure_statement t
         INNER JOIN elderly_info ei ON ei.id = t.elder_id AND ei.deleted = 0
+        <!-- 楼栋、楼层过滤口径与 selectAssessFlatList 保持一致,同样走床位关联链路 -->
+        LEFT JOIN org_build_bed obb ON obb.id = ei.bed_id AND obb.tenant_id = ei.tenant_id
+        LEFT JOIN org_build_room obr ON obr.id = obb.room_id AND obr.tenant_id = obb.tenant_id
+        LEFT JOIN org_build_floor obf ON obf.id = obr.floor_id AND obf.tenant_id = obr.tenant_id
         <where>
             <if test="reqVO.buildId != null">
-                AND ei.build_id = #{reqVO.buildId}
+                AND obf.build_id = #{reqVO.buildId}
             </if>
             <if test="reqVO.floorId != null">
-                AND ei.floor_id = #{reqVO.floorId}
+                AND obr.floor_id = #{reqVO.floorId}
             </if>
             AND ei.in_status = 1
             <include refid="tenantFilter"/>