From 0b6b5856d1c6679a249a5d3e9601c8938da7fedc Mon Sep 17 00:00:00 2001 From: lianlonggang Date: Fri, 12 Jun 2026 11:49:00 +0800 Subject: [PATCH] =?UTF-8?q?style(watch):=20=E5=85=B3=E7=88=B1=E4=BA=BA?= =?UTF-8?q?=E5=91=98=E6=A0=87=E8=AE=B0=E5=8F=8A=E7=9B=B8=E5=85=B3=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E5=8A=9F=E8=83=BD=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../watch/bean/transfer/DepartDeviceNum.java | 6 +++ .../bean/transfer/DepartStatTransfer.java | 6 +++ .../renkang/watch/vo/dept/DeptStatData.java | 30 ++++++++++--- .../watch/mapper/WatchStatisticsMapper.java | 8 ++++ .../provider/WatchStatisticsProvider.java | 32 +++++++++++++ .../impl/DeptStatisticDataServiceImpl.java | 45 ++++++++++++++++++- 6 files changed, 119 insertions(+), 8 deletions(-) diff --git a/health-watch/health-watch-api/src/main/java/com/renkang/watch/bean/transfer/DepartDeviceNum.java b/health-watch/health-watch-api/src/main/java/com/renkang/watch/bean/transfer/DepartDeviceNum.java index 2834cd6..2f40e2c 100644 --- a/health-watch/health-watch-api/src/main/java/com/renkang/watch/bean/transfer/DepartDeviceNum.java +++ b/health-watch/health-watch-api/src/main/java/com/renkang/watch/bean/transfer/DepartDeviceNum.java @@ -16,4 +16,10 @@ public class DepartDeviceNum { private Integer wearCount; + /** 关爱人员佩戴数 */ + private Integer careWearCount; + + /** 关爱人员未佩戴数 */ + private Integer careUnwearCount; + } diff --git a/health-watch/health-watch-api/src/main/java/com/renkang/watch/bean/transfer/DepartStatTransfer.java b/health-watch/health-watch-api/src/main/java/com/renkang/watch/bean/transfer/DepartStatTransfer.java index 1ba4f89..a340914 100644 --- a/health-watch/health-watch-api/src/main/java/com/renkang/watch/bean/transfer/DepartStatTransfer.java +++ b/health-watch/health-watch-api/src/main/java/com/renkang/watch/bean/transfer/DepartStatTransfer.java @@ -39,6 +39,12 @@ public class DepartStatTransfer { /** 二级部门汇总的非关爱人员数量(仅在指定二级部门时有值) */ private Integer secondDepartNonCareNum; + /** 各部门关爱人员佩戴/未佩戴数 Map(orgCode → DepartDeviceNum) */ + private Map careWearNumMap; + + /** 二级部门汇总的关爱人员佩戴/未佩戴数(仅在指定二级部门时有值) */ + private DepartDeviceNum secondDepartCareWearNum; + private IPage pagedData; private List data; diff --git a/health-watch/health-watch-api/src/main/java/com/renkang/watch/vo/dept/DeptStatData.java b/health-watch/health-watch-api/src/main/java/com/renkang/watch/vo/dept/DeptStatData.java index b9fece7..48c404f 100644 --- a/health-watch/health-watch-api/src/main/java/com/renkang/watch/vo/dept/DeptStatData.java +++ b/health-watch/health-watch-api/src/main/java/com/renkang/watch/vo/dept/DeptStatData.java @@ -33,28 +33,44 @@ public class DeptStatData { /** * 佩戴人员数 */ - @Excel(name = "佩戴人员数", width = 15,orderNum = "6") + @Excel(name = "佩戴人员数", width = 15, orderNum = "6") private Integer assignedUserNums; + /** + * 关爱人员佩戴数 + */ + @Excel(name = "关爱人员佩戴人数", width = 18, orderNum = "7") + private Integer careWearNums; /** * 未佩戴人员数 */ - @Excel(name = "未佩戴人员数", width = 15,orderNum = "7") + @Excel(name = "未佩戴人员数", width = 15, orderNum = "8") private Integer undistributedUserNums; + /** + * 关爱人员未佩戴数 + */ + @Excel(name = "关爱人员未佩戴人数", width = 18, orderNum = "9") + private Integer careUnwearNums; - @Excel(name = "心率异常人数", width = 15,orderNum = "8") + @Excel(name = "心率异常人数", width = 15, orderNum = "10") private Integer heartRateNums; - @Excel(name = "血氧异常人数", width = 15,orderNum = "9") + @Excel(name = "血氧异常人数", width = 15, orderNum = "11") private Integer spo2Nums; - @Excel(name = "压力异常人数", width = 15,orderNum = "10") + @Excel(name = "压力异常人数", width = 15, orderNum = "12") private Integer stressNums; - @Excel(name = "体温异常人数", width = 15,orderNum = "11") + @Excel(name = "体温异常人数", width = 15, orderNum = "13") private Integer tempNums; /** * 非关爱人员数量 */ - @Excel(name = "非关爱人员数量", width = 15, orderNum = "12") + @Excel(name = "非关爱人员数量", width = 15, orderNum = "14") private Integer nonCareNums; + /** + * 关爱人员数量(已分配设备数 - 非关爱人员数量) + */ + @Excel(name = "关爱人员数量", width = 15, orderNum = "15") + private Integer careNums; + } diff --git a/health-watch/health-watch-biz/src/main/java/com/renkang/watch/mapper/WatchStatisticsMapper.java b/health-watch/health-watch-biz/src/main/java/com/renkang/watch/mapper/WatchStatisticsMapper.java index 037b988..420ed6a 100644 --- a/health-watch/health-watch-biz/src/main/java/com/renkang/watch/mapper/WatchStatisticsMapper.java +++ b/health-watch/health-watch-biz/src/main/java/com/renkang/watch/mapper/WatchStatisticsMapper.java @@ -48,6 +48,14 @@ public interface WatchStatisticsMapper { }) List nonCareNums(DepartStatsFilter filter); + @SelectProvider(type = WatchStatisticsProvider.class, method = "careWearNumsSql") + @Results({ + @Result(column = "org_code", property = "orgCode"), + @Result(column = "care_wear_count", property = "careWearCount"), + @Result(column = "care_unwear_count", property = "careUnwearCount") + }) + List careWearNums(DepartStatsFilter filter); + @SelectProvider(type = WatchStatisticsProvider.class, method = "wearingDetail") @Results({ @Result(column = "bind_user_id", property = "bindUserId"), diff --git a/health-watch/health-watch-biz/src/main/java/com/renkang/watch/mapper/provider/WatchStatisticsProvider.java b/health-watch/health-watch-biz/src/main/java/com/renkang/watch/mapper/provider/WatchStatisticsProvider.java index 1f72467..882a079 100644 --- a/health-watch/health-watch-biz/src/main/java/com/renkang/watch/mapper/provider/WatchStatisticsProvider.java +++ b/health-watch/health-watch-biz/src/main/java/com/renkang/watch/mapper/provider/WatchStatisticsProvider.java @@ -84,6 +84,38 @@ public class WatchStatisticsProvider { return sb.toString(); } + /** + * 查询关爱人员(non_care_flag != 1)的佩戴数和未佩戴数。 + * 以 QH_WAT_DEVICE(已分配设备人员)为基准,与 deviceBindAndWearNumsSql 结构完全一致, + * 在其基础上增加关爱标志过滤: + * care_wear_count = 关爱人员中,在统计日期范围内有佩戴数据的人数 + * care_unwear_count = 关爱人员中,在统计日期范围内无佩戴数据的人数 + */ + public String careWearNumsSql(DepartStatsFilter filter) { + String orgCodeStr; + if (StrUtil.isEmpty(filter.getOrgCodeLeaf()) && StrUtil.isEmpty(filter.getOrgCode())) { + orgCodeStr = "left(wbh.org_code, 6)"; + } else { + orgCodeStr = "left(wbh.org_code, 9)"; + } + StringBuilder sb = new StringBuilder("select "); + sb.append(orgCodeStr).append(" as org_code, ") + .append("count(distinct case when (ex.non_care_flag is null or ex.non_care_flag != 1) and wud.watch_no is not null then wd.watch_no end) as care_wear_count, ") + .append("count(distinct case when (ex.non_care_flag is null or ex.non_care_flag != 1) and wud.watch_no is null then wd.watch_no end) as care_unwear_count ") + .append("from QH_WAT_DEVICE wd ") + .append("left join QH_WAT_BIND_HIS wbh on wd.watch_no = wbh.watch_no and wd.bind_user_id = wbh.bind_user_id and wbh.bind_end_date is null ") + .append("left join QH_WAT_USER_DATA wud on wud.watch_no = wd.watch_no and wd.bind_user_id = wud.bind_user_id and wud.data_date between #{start} and #{end} ") + .append("left join QH_HLT_USER_EMPLOYEE_EX ex on ex.id = wd.bind_user_id ") + .append("where wd.bind_user_id is not null and wd.bind_user_id <> '' "); + if (StrUtil.isNotEmpty(filter.getOrgCodeLeaf())) { + sb.append("and wbh.org_code like CONCAT(#{orgCodeLeaf},'%')"); + } else if (StrUtil.isNotEmpty(filter.getOrgCode())) { + sb.append("and wbh.org_code like CONCAT(#{orgCode},'%')"); + } + sb.append(" group by ").append(orgCodeStr).append(";"); + return sb.toString(); + } + public String wearingDetail() { return "SELECT " + " max(wd.bind_user_id) as bind_user_id," + diff --git a/health-watch/health-watch-biz/src/main/java/com/renkang/watch/service/impl/DeptStatisticDataServiceImpl.java b/health-watch/health-watch-biz/src/main/java/com/renkang/watch/service/impl/DeptStatisticDataServiceImpl.java index 41a1f61..908e664 100644 --- a/health-watch/health-watch-biz/src/main/java/com/renkang/watch/service/impl/DeptStatisticDataServiceImpl.java +++ b/health-watch/health-watch-biz/src/main/java/com/renkang/watch/service/impl/DeptStatisticDataServiceImpl.java @@ -659,13 +659,17 @@ public class DeptStatisticDataServiceImpl extends ServiceImpl secondDepartAbnormalCount = getSecondDepartAbnormalCount(filter, departAbnormalCountMap); Map nonCareNumMap = getNonCareNumMap(filter); Integer secondDepartNonCareNum = getSecondDepartNonCareNum(filter, nonCareNumMap); + Map careWearNumMap = getCareWearNumMap(filter); + DepartDeviceNum secondDepartCareWearNum = getSecondDepartCareWearNum(filter, careWearNumMap); transfer.departDeviceNumMap(departDeviceNumMap) .departBindAndWearNumMap(departBindAndWearNumMap) .secondDepartBindAndWearNum(secondDepartBindAndWearNum) .departAbnormalCountMap(departAbnormalCountMap) .secondDepartAbnormalCount(secondDepartAbnormalCount) .nonCareNumMap(nonCareNumMap) - .secondDepartNonCareNum(secondDepartNonCareNum); + .secondDepartNonCareNum(secondDepartNonCareNum) + .careWearNumMap(careWearNumMap) + .secondDepartCareWearNum(secondDepartCareWearNum); if (paged) { transfer.pagedData().setTotal(finalDeparts.size()); finalDeparts = getPagedDeparts(finalDeparts, filter); @@ -747,6 +751,16 @@ public class DeptStatisticDataServiceImpl extends ServiceImpl getCareWearNumMap(DepartStatsFilter filter) { + return watchStatisticsMapper.careWearNums(filter) + .stream() + .filter(o -> StrUtil.isNotBlank(o.getOrgCode())) + .collect(Collectors.toMap(DepartDeviceNum::getOrgCode, Function.identity())); + } + + /** + * 汇总二级部门下所有三级部门的关爱人员佩戴/未佩戴数,用于二级部门行展示 + * 仅在"指定了二级部门但未指定三级部门"时有效,其他情况返回 null + */ + private DepartDeviceNum getSecondDepartCareWearNum(DepartStatsFilter filter, + Map careWearNumMap) { + if (StrUtil.isNotEmpty(filter.getOrgCodeLeaf()) || StrUtil.isEmpty(filter.getOrgCode())) { + return null; + } + DepartDeviceNum result = new DepartDeviceNum(); + result.setCareWearCount(0); + result.setCareUnwearCount(0); + careWearNumMap.values().forEach(d -> { + result.setCareWearCount(result.getCareWearCount() + Optional.ofNullable(d.getCareWearCount()).orElse(0)); + result.setCareUnwearCount(result.getCareUnwearCount() + Optional.ofNullable(d.getCareUnwearCount()).orElse(0)); + }); + return result; + } + /** * 汇总二级部门下所有三级部门的绑定/佩戴数,用于二级部门行的数据展示 *