diff --git a/intc-common/intc-common-message/pom.xml b/intc-common/intc-common-message/pom.xml
new file mode 100644
index 0000000..08b95d8
--- /dev/null
+++ b/intc-common/intc-common-message/pom.xml
@@ -0,0 +1,65 @@
+
+
+
+ com.intc
+ intc-common
+ 3.6.3
+
+ 4.0.0
+
+ intc-common-message
+
+
+ intc-common-message 消息通知服务(短信、语音等)
+
+
+
+
+
+ com.aliyun
+ dysmsapi20170525
+ 2.0.24
+
+
+
+
+ com.aliyun
+ dyvmsapi20170525
+ 3.2.2
+
+
+
+
+ com.aliyun
+ tea-openapi
+ 0.3.4
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+ com.alibaba.fastjson2
+ fastjson2
+
+
+
+
+ com.intc
+ intc-common-core
+
+
+
+
\ No newline at end of file
diff --git a/intc-common/intc-common-message/src/main/java/com/intc/common/message/config/AliyunMessageProperties.java b/intc-common/intc-common-message/src/main/java/com/intc/common/message/config/AliyunMessageProperties.java
new file mode 100644
index 0000000..443b7c0
--- /dev/null
+++ b/intc-common/intc-common-message/src/main/java/com/intc/common/message/config/AliyunMessageProperties.java
@@ -0,0 +1,77 @@
+package com.intc.common.message.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 阿里云消息服务配置
+ *
+ * @author bot5
+ * @date 2026-03-29
+ */
+@Data
+@ConfigurationProperties(prefix = "aliyun.message")
+public class AliyunMessageProperties {
+
+ /**
+ * 阿里云 AccessKey ID
+ */
+ private String accessKeyId;
+
+ /**
+ * 阿里云 AccessKey Secret
+ */
+ private String accessKeySecret;
+
+ /**
+ * 短信服务配置
+ */
+ private SmsConfig sms = new SmsConfig();
+
+ /**
+ * 语音服务配置
+ */
+ private VoiceConfig voice = new VoiceConfig();
+
+ @Data
+ public static class SmsConfig {
+ /**
+ * 短信签名名称
+ */
+ private String signName;
+
+ /**
+ * 短信模板CODE(用药提醒)
+ */
+ private String medicationRemindTemplateCode;
+
+ /**
+ * 短信模板CODE(漏服提醒)
+ */
+ private String missedRemindTemplateCode;
+
+ /**
+ * 短信模板CODE(家属通知)
+ */
+ private String familyNotifyTemplateCode;
+ }
+
+ @Data
+ public static class VoiceConfig {
+ /**
+ * 语音通知模板CODE(用药提醒)
+ */
+ private String medicationRemindTtsCode;
+
+ /**
+ * 语音通知模板CODE(漏服提醒)
+ */
+ private String missedRemindTtsCode;
+
+ /**
+ * 被叫号码显示的呼入号码
+ */
+ private String calledShowNumber;
+ }
+}
\ No newline at end of file
diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/controller/ChronicDiseaseManageController.java b/intc-modules/intc-health/src/main/java/com/intc/health/controller/ChronicDiseaseManageController.java
new file mode 100644
index 0000000..0903973
--- /dev/null
+++ b/intc-modules/intc-health/src/main/java/com/intc/health/controller/ChronicDiseaseManageController.java
@@ -0,0 +1,116 @@
+package com.intc.health.controller;
+
+import com.intc.common.core.web.controller.BaseController;
+import com.intc.common.core.web.domain.AjaxResult;
+import com.intc.common.core.web.page.TableDataInfo;
+import com.intc.common.log.annotation.Log;
+import com.intc.common.log.enums.BusinessType;
+import com.intc.common.security.annotation.RequiresPermissions;
+import com.intc.health.domain.ChronicDiseaseFollowUpRecord;
+import com.intc.health.domain.ChronicDiseaseIndicatorRecord;
+import com.intc.health.domain.ChronicDiseaseStatusHistory;
+import com.intc.health.service.IChronicDiseaseManageService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Api(tags = "慢性疾病管理扩展")
+@RestController
+@RequestMapping("/chronicDiseaseManage")
+public class ChronicDiseaseManageController extends BaseController {
+ @Resource
+ private IChronicDiseaseManageService chronicDiseaseManageService;
+
+ @ApiOperation("查询慢病指标记录")
+ @RequiresPermissions("health:chronicDisease:list")
+ @GetMapping("/indicator/list")
+ public TableDataInfo indicatorList(ChronicDiseaseIndicatorRecord query) {
+ startPage();
+ List list = chronicDiseaseManageService.selectIndicatorList(query);
+ return getDataTable(list);
+ }
+
+ @ApiOperation("查询慢病指标详情")
+ @RequiresPermissions("health:chronicDisease:query")
+ @GetMapping("/indicator/{id}")
+ public AjaxResult indicatorInfo(@PathVariable Long id) {
+ return success(chronicDiseaseManageService.selectIndicatorById(id));
+ }
+
+ @ApiOperation("新增慢病指标记录")
+ @RequiresPermissions("health:chronicDisease:add")
+ @Log(title = "慢性疾病指标记录", businessType = BusinessType.INSERT)
+ @PostMapping("/indicator")
+ public AjaxResult indicatorAdd(@RequestBody ChronicDiseaseIndicatorRecord record) {
+ return toAjax(chronicDiseaseManageService.insertIndicator(record));
+ }
+
+ @ApiOperation("修改慢病指标记录")
+ @RequiresPermissions("health:chronicDisease:edit")
+ @Log(title = "慢性疾病指标记录", businessType = BusinessType.UPDATE)
+ @PutMapping("/indicator")
+ public AjaxResult indicatorEdit(@RequestBody ChronicDiseaseIndicatorRecord record) {
+ return toAjax(chronicDiseaseManageService.updateIndicator(record));
+ }
+
+ @ApiOperation("删除慢病指标记录")
+ @RequiresPermissions("health:chronicDisease:remove")
+ @Log(title = "慢性疾病指标记录", businessType = BusinessType.DELETE)
+ @DeleteMapping("/indicator/{ids}")
+ public AjaxResult indicatorRemove(@PathVariable Long[] ids) {
+ return toAjax(chronicDiseaseManageService.deleteIndicatorByIds(ids));
+ }
+
+ @ApiOperation("查询复诊随访记录")
+ @RequiresPermissions("health:chronicDisease:list")
+ @GetMapping("/followUp/list")
+ public TableDataInfo followUpList(ChronicDiseaseFollowUpRecord query) {
+ startPage();
+ List list = chronicDiseaseManageService.selectFollowUpList(query);
+ return getDataTable(list);
+ }
+
+ @ApiOperation("新增复诊随访记录")
+ @RequiresPermissions("health:chronicDisease:add")
+ @Log(title = "慢性疾病复诊随访", businessType = BusinessType.INSERT)
+ @PostMapping("/followUp")
+ public AjaxResult followUpAdd(@RequestBody ChronicDiseaseFollowUpRecord record) {
+ return toAjax(chronicDiseaseManageService.insertFollowUp(record));
+ }
+
+ @ApiOperation("修改复诊随访记录")
+ @RequiresPermissions("health:chronicDisease:edit")
+ @Log(title = "慢性疾病复诊随访", businessType = BusinessType.UPDATE)
+ @PutMapping("/followUp")
+ public AjaxResult followUpEdit(@RequestBody ChronicDiseaseFollowUpRecord record) {
+ return toAjax(chronicDiseaseManageService.updateFollowUp(record));
+ }
+
+ @ApiOperation("删除复诊随访记录")
+ @RequiresPermissions("health:chronicDisease:remove")
+ @Log(title = "慢性疾病复诊随访", businessType = BusinessType.DELETE)
+ @DeleteMapping("/followUp/{ids}")
+ public AjaxResult followUpRemove(@PathVariable Long[] ids) {
+ return toAjax(chronicDiseaseManageService.deleteFollowUpByIds(ids));
+ }
+
+ @ApiOperation("查询状态变更历史")
+ @RequiresPermissions("health:chronicDisease:list")
+ @GetMapping("/statusHistory/list")
+ public TableDataInfo statusHistoryList(ChronicDiseaseStatusHistory query) {
+ startPage();
+ List list = chronicDiseaseManageService.selectStatusHistoryList(query);
+ return getDataTable(list);
+ }
+
+ @ApiOperation("新增状态变更历史")
+ @RequiresPermissions("health:chronicDisease:edit")
+ @Log(title = "慢性疾病状态变更", businessType = BusinessType.INSERT)
+ @PostMapping("/statusHistory")
+ public AjaxResult statusHistoryAdd(@RequestBody ChronicDiseaseStatusHistory record) {
+ return toAjax(chronicDiseaseManageService.insertStatusHistory(record));
+ }
+}
diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/controller/StatisticAnalysisController.java b/intc-modules/intc-health/src/main/java/com/intc/health/controller/StatisticAnalysisController.java
index 6e58e80..8efe3e6 100644
--- a/intc-modules/intc-health/src/main/java/com/intc/health/controller/StatisticAnalysisController.java
+++ b/intc-modules/intc-health/src/main/java/com/intc/health/controller/StatisticAnalysisController.java
@@ -8,9 +8,12 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
import java.util.Map;
/**
@@ -46,6 +49,20 @@ public class StatisticAnalysisController extends BaseController {
return AjaxResult.success(resultMap);
}
+ @ApiOperation("活动统计分析")
+ @GetMapping("/activityAnalysis")
+ public Map getActivityAnalysis(AnalysisDto analysisDto){
+ Map resultMap = iStatisticAnalysisService.getActivityAnalysis(analysisDto);
+ return AjaxResult.success(resultMap);
+ }
+
+ @ApiOperation("健康总览大屏")
+ @GetMapping("/healthScreen")
+ public Map getHealthScreen(AnalysisDto analysisDto){
+ Map resultMap = iStatisticAnalysisService.getHealthScreen(analysisDto);
+ return AjaxResult.success(resultMap);
+ }
+
@ApiOperation("档案统计分析")
@GetMapping("/recordAnalysis")
public Map getRecordAnalysis(AnalysisDto analysisDto){
@@ -53,6 +70,19 @@ public class StatisticAnalysisController extends BaseController {
return AjaxResult.success(resultMap);
}
+ @ApiOperation("健康档案大屏")
+ @GetMapping("/recordScreen")
+ public Map getRecordScreen(AnalysisDto analysisDto){
+ Map resultMap = iStatisticAnalysisService.getRecordScreen(analysisDto);
+ return AjaxResult.success(resultMap);
+ }
+
+ @ApiOperation("导出健康档案完整信息")
+ @PostMapping("/recordFullExport")
+ public void exportRecordFull(HttpServletResponse response, AnalysisDto analysisDto) throws IOException {
+ iStatisticAnalysisService.exportRecordFull(response, analysisDto);
+ }
+
@ApiOperation("就医统计分析")
@GetMapping("/doctorAnalysis")
public Map getDoctorAnalysis(AnalysisDto analysisDto){
diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/domain/ChronicDiseaseFollowUpRecord.java b/intc-modules/intc-health/src/main/java/com/intc/health/domain/ChronicDiseaseFollowUpRecord.java
new file mode 100644
index 0000000..a28a10e
--- /dev/null
+++ b/intc-modules/intc-health/src/main/java/com/intc/health/domain/ChronicDiseaseFollowUpRecord.java
@@ -0,0 +1,58 @@
+package com.intc.health.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.intc.common.core.web.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("慢性疾病复诊随访记录")
+public class ChronicDiseaseFollowUpRecord extends BaseEntity {
+ private Long id;
+
+ @ApiModelProperty("慢性疾病档案ID")
+ private Long chronicDiseaseId;
+
+ @ApiModelProperty("成员ID")
+ private Long personId;
+
+ @ApiModelProperty("类型:1-复诊 2-复查 3-随访")
+ private Integer followUpType;
+
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @ApiModelProperty("复诊/随访日期")
+ private Date followUpDate;
+
+ private String hospital;
+
+ private String department;
+
+ private String doctor;
+
+ @ApiModelProperty("复查项目")
+ private String checkItems;
+
+ @ApiModelProperty("结果")
+ private String result;
+
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @ApiModelProperty("下次复诊日期")
+ private Date nextFollowUpDate;
+
+ @ApiModelProperty("状态:1-待完成 2-已完成 3-已过期")
+ private Integer status;
+
+ @ApiModelProperty("说明")
+ private String notes;
+
+ private Integer delFlag;
+
+ private String startTime;
+
+ private String endTime;
+}
diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/domain/ChronicDiseaseIndicatorRecord.java b/intc-modules/intc-health/src/main/java/com/intc/health/domain/ChronicDiseaseIndicatorRecord.java
new file mode 100644
index 0000000..449c6e7
--- /dev/null
+++ b/intc-modules/intc-health/src/main/java/com/intc/health/domain/ChronicDiseaseIndicatorRecord.java
@@ -0,0 +1,58 @@
+package com.intc.health.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.intc.common.core.web.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("慢性疾病指标记录")
+public class ChronicDiseaseIndicatorRecord extends BaseEntity {
+ private Long id;
+
+ @ApiModelProperty("慢性疾病档案ID")
+ private Long chronicDiseaseId;
+
+ @ApiModelProperty("成员ID")
+ private Long personId;
+
+ @ApiModelProperty("指标类型")
+ private String indicatorType;
+
+ @ApiModelProperty("指标名称")
+ private String indicatorName;
+
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty("测量时间")
+ private Date measureTime;
+
+ @ApiModelProperty("指标值")
+ private BigDecimal indicatorValue;
+
+ @ApiModelProperty("指标单位")
+ private String indicatorUnit;
+
+ @ApiModelProperty("目标下限")
+ private BigDecimal targetMin;
+
+ @ApiModelProperty("目标上限")
+ private BigDecimal targetMax;
+
+ @ApiModelProperty("状态:1-正常 2-偏高 3-偏低 4-需关注")
+ private Integer status;
+
+ @ApiModelProperty("记录说明")
+ private String notes;
+
+ private Integer delFlag;
+
+ private String startTime;
+
+ private String endTime;
+}
diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/domain/ChronicDiseaseStatusHistory.java b/intc-modules/intc-health/src/main/java/com/intc/health/domain/ChronicDiseaseStatusHistory.java
new file mode 100644
index 0000000..bb56741
--- /dev/null
+++ b/intc-modules/intc-health/src/main/java/com/intc/health/domain/ChronicDiseaseStatusHistory.java
@@ -0,0 +1,41 @@
+package com.intc.health.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.intc.common.core.web.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("慢性疾病状态变更历史")
+public class ChronicDiseaseStatusHistory extends BaseEntity {
+ private Long id;
+
+ @ApiModelProperty("慢性疾病档案ID")
+ private Long chronicDiseaseId;
+
+ @ApiModelProperty("成员ID")
+ private Long personId;
+
+ @ApiModelProperty("原状态")
+ private Integer oldStatus;
+
+ @ApiModelProperty("新状态")
+ private Integer newStatus;
+
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty("变更时间")
+ private Date changeTime;
+
+ @ApiModelProperty("变更原因")
+ private String reason;
+
+ @ApiModelProperty("处理建议")
+ private String treatmentAdvice;
+
+ private Integer delFlag;
+}
diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/domain/dto/AnalysisDto.java b/intc-modules/intc-health/src/main/java/com/intc/health/domain/dto/AnalysisDto.java
index 1759fa0..f53d0d6 100644
--- a/intc-modules/intc-health/src/main/java/com/intc/health/domain/dto/AnalysisDto.java
+++ b/intc-modules/intc-health/src/main/java/com/intc/health/domain/dto/AnalysisDto.java
@@ -43,5 +43,20 @@ public class AnalysisDto extends BaseEntity implements Serializable
@ApiModelProperty(value="档案id")
private Long recordId;
+ /** 活动名称 */
+ @ApiModelProperty(value="活动名称")
+ private String name;
+
+ /** 活动类型 */
+ @ApiModelProperty(value="活动类型")
+ private String activityType;
+
+ /** 活动地点 */
+ @ApiModelProperty(value="活动地点")
+ private String place;
+
+ /** 活动量 */
+ @ApiModelProperty(value="活动量")
+ private String activityVolume;
}
diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/mapper/ChronicDiseaseManageMapper.java b/intc-modules/intc-health/src/main/java/com/intc/health/mapper/ChronicDiseaseManageMapper.java
new file mode 100644
index 0000000..21d1f5a
--- /dev/null
+++ b/intc-modules/intc-health/src/main/java/com/intc/health/mapper/ChronicDiseaseManageMapper.java
@@ -0,0 +1,37 @@
+package com.intc.health.mapper;
+
+import com.intc.common.datascope.annotation.DataScope;
+import com.intc.health.domain.ChronicDiseaseFollowUpRecord;
+import com.intc.health.domain.ChronicDiseaseIndicatorRecord;
+import com.intc.health.domain.ChronicDiseaseStatusHistory;
+
+import java.util.List;
+
+public interface ChronicDiseaseManageMapper {
+ @DataScope(businessAlias = "a")
+ List selectIndicatorList(ChronicDiseaseIndicatorRecord query);
+
+ ChronicDiseaseIndicatorRecord selectIndicatorById(Long id);
+
+ int insertIndicator(ChronicDiseaseIndicatorRecord record);
+
+ int updateIndicator(ChronicDiseaseIndicatorRecord record);
+
+ int removeIndicatorByIds(Long[] ids);
+
+ @DataScope(businessAlias = "a")
+ List selectFollowUpList(ChronicDiseaseFollowUpRecord query);
+
+ ChronicDiseaseFollowUpRecord selectFollowUpById(Long id);
+
+ int insertFollowUp(ChronicDiseaseFollowUpRecord record);
+
+ int updateFollowUp(ChronicDiseaseFollowUpRecord record);
+
+ int removeFollowUpByIds(Long[] ids);
+
+ @DataScope(businessAlias = "a")
+ List selectStatusHistoryList(ChronicDiseaseStatusHistory query);
+
+ int insertStatusHistory(ChronicDiseaseStatusHistory record);
+}
diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/mapper/StatisticAnalysisMapper.java b/intc-modules/intc-health/src/main/java/com/intc/health/mapper/StatisticAnalysisMapper.java
index 830a5a0..1e46362 100644
--- a/intc-modules/intc-health/src/main/java/com/intc/health/mapper/StatisticAnalysisMapper.java
+++ b/intc-modules/intc-health/src/main/java/com/intc/health/mapper/StatisticAnalysisMapper.java
@@ -2,13 +2,16 @@ package com.intc.health.mapper;
import com.intc.common.datascope.annotation.DataScope;
import com.intc.health.domain.dto.HealthDoctorRecordDto;
+import com.intc.health.domain.dto.HealthActivityDto;
import com.intc.health.domain.dto.HealthMarRecordDto;
import com.intc.health.domain.dto.HealthMilkPowderRecordDto;
import com.intc.health.domain.dto.HealthRecordDto;
+import com.intc.health.domain.dto.HealthTemperatureRecordDto;
import com.intc.health.domain.vo.*;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
+import java.util.Map;
@Mapper
public interface StatisticAnalysisMapper {
@@ -98,6 +101,60 @@ public interface StatisticAnalysisMapper {
@DataScope(businessAlias = "hp")
public List selectStaticPersonList (HealthRecordDto dto);
+ /**
+ * 查询健康总览大屏成员风险排行
+ */
+ @DataScope(businessAlias = "hp")
+ public List selectHealthScreenPersonRankList(HealthRecordDto dto);
+
+ /**
+ * 查询健康总览大屏就医汇总
+ */
+ @DataScope(businessAlias = "a")
+ public Map selectHealthScreenDoctorSummary(HealthDoctorRecordDto dto);
+
+ /**
+ * 查询健康总览大屏用药汇总
+ */
+ @DataScope(businessAlias = "a")
+ public Map selectHealthScreenMedicineSummary(HealthMarRecordDto dto);
+
+ /**
+ * 查询健康总览大屏体温汇总
+ */
+ @DataScope(businessAlias = "a")
+ public Map selectHealthScreenTemperatureSummary(HealthTemperatureRecordDto dto);
+
+ /**
+ * 查询健康总览大屏活动汇总
+ */
+ @DataScope(businessAlias = "a")
+ public Map selectHealthScreenActivitySummary(HealthActivityDto dto);
+
+ /**
+ * 查询健康总览大屏近期活动明细
+ */
+ @DataScope(businessAlias = "a")
+ public List selectHealthScreenActivityList(HealthActivityDto dto);
+
+ /**
+ * 查询健康总览大屏近期就医明细
+ */
+ @DataScope(businessAlias = "a")
+ public List selectHealthScreenDoctorList(HealthDoctorRecordDto dto);
+
+ /**
+ * 查询健康总览大屏近期用药明细
+ */
+ @DataScope(businessAlias = "a")
+ public List selectHealthScreenMedicineList(HealthMarRecordDto dto);
+
+ /**
+ * 查询健康总览大屏近期体温明细
+ */
+ @DataScope(businessAlias = "a")
+ public List selectHealthScreenTemperatureList(HealthTemperatureRecordDto dto);
+
/**
* 查询用药记录
diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/service/IChronicDiseaseManageService.java b/intc-modules/intc-health/src/main/java/com/intc/health/service/IChronicDiseaseManageService.java
new file mode 100644
index 0000000..335e9f7
--- /dev/null
+++ b/intc-modules/intc-health/src/main/java/com/intc/health/service/IChronicDiseaseManageService.java
@@ -0,0 +1,33 @@
+package com.intc.health.service;
+
+import com.intc.health.domain.ChronicDiseaseFollowUpRecord;
+import com.intc.health.domain.ChronicDiseaseIndicatorRecord;
+import com.intc.health.domain.ChronicDiseaseStatusHistory;
+
+import java.util.List;
+
+public interface IChronicDiseaseManageService {
+ List selectIndicatorList(ChronicDiseaseIndicatorRecord query);
+
+ ChronicDiseaseIndicatorRecord selectIndicatorById(Long id);
+
+ int insertIndicator(ChronicDiseaseIndicatorRecord record);
+
+ int updateIndicator(ChronicDiseaseIndicatorRecord record);
+
+ int deleteIndicatorByIds(Long[] ids);
+
+ List selectFollowUpList(ChronicDiseaseFollowUpRecord query);
+
+ ChronicDiseaseFollowUpRecord selectFollowUpById(Long id);
+
+ int insertFollowUp(ChronicDiseaseFollowUpRecord record);
+
+ int updateFollowUp(ChronicDiseaseFollowUpRecord record);
+
+ int deleteFollowUpByIds(Long[] ids);
+
+ List selectStatusHistoryList(ChronicDiseaseStatusHistory query);
+
+ int insertStatusHistory(ChronicDiseaseStatusHistory record);
+}
diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/service/IStatisticAnalysisService.java b/intc-modules/intc-health/src/main/java/com/intc/health/service/IStatisticAnalysisService.java
index 1cb9763..aec658b 100644
--- a/intc-modules/intc-health/src/main/java/com/intc/health/service/IStatisticAnalysisService.java
+++ b/intc-modules/intc-health/src/main/java/com/intc/health/service/IStatisticAnalysisService.java
@@ -2,6 +2,8 @@ package com.intc.health.service;
import com.intc.health.domain.dto.AnalysisDto;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
import java.util.Map;
/**
@@ -17,9 +19,17 @@ public interface IStatisticAnalysisService {
public Map getHealthAnalysisInfo();
+ public Map getActivityAnalysis(AnalysisDto analysisDto);
+
+ public Map getHealthScreen(AnalysisDto analysisDto);
+
public Map getRecordAnalysis(AnalysisDto analysisDto);
+ public Map getRecordScreen(AnalysisDto analysisDto);
+
+ public void exportRecordFull(HttpServletResponse response, AnalysisDto analysisDto) throws IOException;
+
public Map getDoctorAnalysis(AnalysisDto analysisDto);
diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/service/impl/ChronicDiseaseManageServiceImpl.java b/intc-modules/intc-health/src/main/java/com/intc/health/service/impl/ChronicDiseaseManageServiceImpl.java
new file mode 100644
index 0000000..42bce07
--- /dev/null
+++ b/intc-modules/intc-health/src/main/java/com/intc/health/service/impl/ChronicDiseaseManageServiceImpl.java
@@ -0,0 +1,109 @@
+package com.intc.health.service.impl;
+
+import com.intc.common.core.utils.DateUtils;
+import com.intc.common.core.utils.IdWorker;
+import com.intc.common.security.utils.SecurityUtils;
+import com.intc.health.domain.ChronicDiseaseFollowUpRecord;
+import com.intc.health.domain.ChronicDiseaseIndicatorRecord;
+import com.intc.health.domain.ChronicDiseaseStatusHistory;
+import com.intc.health.mapper.ChronicDiseaseManageMapper;
+import com.intc.health.service.IChronicDiseaseManageService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class ChronicDiseaseManageServiceImpl implements IChronicDiseaseManageService {
+ @Resource
+ private ChronicDiseaseManageMapper chronicDiseaseManageMapper;
+
+ @Override
+ public List selectIndicatorList(ChronicDiseaseIndicatorRecord query) {
+ return chronicDiseaseManageMapper.selectIndicatorList(query);
+ }
+
+ @Override
+ public ChronicDiseaseIndicatorRecord selectIndicatorById(Long id) {
+ return chronicDiseaseManageMapper.selectIndicatorById(id);
+ }
+
+ @Override
+ public int insertIndicator(ChronicDiseaseIndicatorRecord record) {
+ record.setId(IdWorker.getId());
+ record.setCreateBy(SecurityUtils.getUsername());
+ record.setCreateTime(DateUtils.getNowDate());
+ if (record.getMeasureTime() == null) {
+ record.setMeasureTime(new Date());
+ }
+ if (record.getStatus() == null) {
+ record.setStatus(1);
+ }
+ return chronicDiseaseManageMapper.insertIndicator(record);
+ }
+
+ @Override
+ public int updateIndicator(ChronicDiseaseIndicatorRecord record) {
+ record.setUpdateBy(SecurityUtils.getUsername());
+ record.setUpdateTime(DateUtils.getNowDate());
+ return chronicDiseaseManageMapper.updateIndicator(record);
+ }
+
+ @Override
+ public int deleteIndicatorByIds(Long[] ids) {
+ return chronicDiseaseManageMapper.removeIndicatorByIds(ids);
+ }
+
+ @Override
+ public List selectFollowUpList(ChronicDiseaseFollowUpRecord query) {
+ return chronicDiseaseManageMapper.selectFollowUpList(query);
+ }
+
+ @Override
+ public ChronicDiseaseFollowUpRecord selectFollowUpById(Long id) {
+ return chronicDiseaseManageMapper.selectFollowUpById(id);
+ }
+
+ @Override
+ public int insertFollowUp(ChronicDiseaseFollowUpRecord record) {
+ record.setId(IdWorker.getId());
+ record.setCreateBy(SecurityUtils.getUsername());
+ record.setCreateTime(DateUtils.getNowDate());
+ if (record.getFollowUpType() == null) {
+ record.setFollowUpType(1);
+ }
+ if (record.getStatus() == null) {
+ record.setStatus(1);
+ }
+ return chronicDiseaseManageMapper.insertFollowUp(record);
+ }
+
+ @Override
+ public int updateFollowUp(ChronicDiseaseFollowUpRecord record) {
+ record.setUpdateBy(SecurityUtils.getUsername());
+ record.setUpdateTime(DateUtils.getNowDate());
+ return chronicDiseaseManageMapper.updateFollowUp(record);
+ }
+
+ @Override
+ public int deleteFollowUpByIds(Long[] ids) {
+ return chronicDiseaseManageMapper.removeFollowUpByIds(ids);
+ }
+
+ @Override
+ public List selectStatusHistoryList(ChronicDiseaseStatusHistory query) {
+ return chronicDiseaseManageMapper.selectStatusHistoryList(query);
+ }
+
+ @Override
+ public int insertStatusHistory(ChronicDiseaseStatusHistory record) {
+ record.setId(IdWorker.getId());
+ record.setCreateBy(SecurityUtils.getUsername());
+ record.setCreateTime(DateUtils.getNowDate());
+ if (record.getChangeTime() == null) {
+ record.setChangeTime(new Date());
+ }
+ return chronicDiseaseManageMapper.insertStatusHistory(record);
+ }
+}
diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/service/impl/ChronicDiseaseRecordServiceImpl.java b/intc-modules/intc-health/src/main/java/com/intc/health/service/impl/ChronicDiseaseRecordServiceImpl.java
index 8c6de32..7f8413a 100644
--- a/intc-modules/intc-health/src/main/java/com/intc/health/service/impl/ChronicDiseaseRecordServiceImpl.java
+++ b/intc-modules/intc-health/src/main/java/com/intc/health/service/impl/ChronicDiseaseRecordServiceImpl.java
@@ -4,8 +4,10 @@ import com.intc.common.core.utils.DateUtils;
import com.intc.common.core.utils.IdWorker;
import com.intc.common.security.utils.SecurityUtils;
import com.intc.health.domain.ChronicDiseaseRecord;
+import com.intc.health.domain.ChronicDiseaseStatusHistory;
import com.intc.health.domain.dto.ChronicDiseaseRecordDto;
import com.intc.health.domain.vo.ChronicDiseaseRecordVo;
+import com.intc.health.mapper.ChronicDiseaseManageMapper;
import com.intc.health.mapper.ChronicDiseaseRecordMapper;
import com.intc.health.service.IChronicDiseaseRecordService;
import org.springframework.stereotype.Service;
@@ -25,6 +27,9 @@ public class ChronicDiseaseRecordServiceImpl implements IChronicDiseaseRecordSer
@Resource
private ChronicDiseaseRecordMapper chronicDiseaseRecordMapper;
+ @Resource
+ private ChronicDiseaseManageMapper chronicDiseaseManageMapper;
+
/**
* 查询慢性疾病档案
*
@@ -93,9 +98,29 @@ public class ChronicDiseaseRecordServiceImpl implements IChronicDiseaseRecordSer
@Override
public int updateChronicDiseaseRecord(ChronicDiseaseRecord chronicDiseaseRecord)
{
+ ChronicDiseaseRecordVo oldRecord = null;
+ if (chronicDiseaseRecord.getId() != null && chronicDiseaseRecord.getDiseaseStatus() != null) {
+ oldRecord = chronicDiseaseRecordMapper.selectChronicDiseaseRecordById(chronicDiseaseRecord.getId());
+ }
chronicDiseaseRecord.setUpdateBy(SecurityUtils.getUsername());
chronicDiseaseRecord.setUpdateTime(DateUtils.getNowDate());
- return chronicDiseaseRecordMapper.updateChronicDiseaseRecord(chronicDiseaseRecord);
+ int rows = chronicDiseaseRecordMapper.updateChronicDiseaseRecord(chronicDiseaseRecord);
+ if (rows > 0 && oldRecord != null && oldRecord.getDiseaseStatus() != null
+ && !oldRecord.getDiseaseStatus().equals(chronicDiseaseRecord.getDiseaseStatus())) {
+ ChronicDiseaseStatusHistory history = new ChronicDiseaseStatusHistory();
+ history.setId(IdWorker.getId());
+ history.setChronicDiseaseId(chronicDiseaseRecord.getId());
+ history.setPersonId(oldRecord.getPersonId());
+ history.setOldStatus(oldRecord.getDiseaseStatus());
+ history.setNewStatus(chronicDiseaseRecord.getDiseaseStatus());
+ history.setChangeTime(DateUtils.getNowDate());
+ history.setReason(chronicDiseaseRecord.getRemark() != null ? chronicDiseaseRecord.getRemark() : "档案状态调整");
+ history.setTreatmentAdvice(chronicDiseaseRecord.getNotes());
+ history.setCreateBy(SecurityUtils.getUsername());
+ history.setCreateTime(DateUtils.getNowDate());
+ chronicDiseaseManageMapper.insertStatusHistory(history);
+ }
+ return rows;
}
/**
@@ -121,4 +146,4 @@ public class ChronicDiseaseRecordServiceImpl implements IChronicDiseaseRecordSer
{
return chronicDiseaseRecordMapper.removeChronicDiseaseRecordById(id);
}
-}
\ No newline at end of file
+}
diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/service/impl/StatisticAnalysisImpl.java b/intc-modules/intc-health/src/main/java/com/intc/health/service/impl/StatisticAnalysisImpl.java
index 127e2e3..b9e01a9 100644
--- a/intc-modules/intc-health/src/main/java/com/intc/health/service/impl/StatisticAnalysisImpl.java
+++ b/intc-modules/intc-health/src/main/java/com/intc/health/service/impl/StatisticAnalysisImpl.java
@@ -8,14 +8,33 @@ import com.intc.health.domain.dto.*;
import com.intc.health.domain.vo.*;
import com.intc.health.mapper.*;
import com.intc.health.service.IStatisticAnalysisService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.usermodel.BorderStyle;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.FillPatternType;
+import org.apache.poi.ss.usermodel.Font;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.IndexedColors;
+import org.apache.poi.ss.usermodel.PrintSetup;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.usermodel.VerticalAlignment;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
@Service
+@Slf4j
public class StatisticAnalysisImpl implements IStatisticAnalysisService {
@Resource
@@ -42,6 +61,9 @@ public class StatisticAnalysisImpl implements IStatisticAnalysisService {
@Resource
private HealthProcessRecordMapper healthProcessRecordMapper;
+ @Resource
+ private HealthDoctorRecordCostMapper healthDoctorRecordCostMapper;
+
@Override
public Map getMarAnalysis(AnalysisDto analysisDto) {
//返回数据
@@ -441,6 +463,140 @@ public class StatisticAnalysisImpl implements IStatisticAnalysisService {
return map;
}
+
+ @Override
+ public Map getHealthScreen(AnalysisDto analysisDto) {
+ long begin = System.currentTimeMillis();
+ DecimalFormat decimalFormat = new DecimalFormat("#.##");
+ HashMap map = new HashMap<>();
+ Long personId = analysisDto == null ? null : analysisDto.getId();
+
+ List allPersonList = healthPersonMapper.selectHealthPersonList(new HealthPersonDto());
+ List personList = filterHealthScreenPersonList(allPersonList, personId);
+ HealthRecordDto screenRecordDto = new HealthRecordDto();
+ screenRecordDto.setPersonId(personId);
+ List recordList = healthRecordMapper.selectHealthRecordList(screenRecordDto);
+ long baseLoaded = System.currentTimeMillis();
+ log.info("健康总览大屏-基础数据耗时: {}ms, personCount={}, recordCount={}", baseLoaded - begin, emptyList(personList).size(), emptyList(recordList).size());
+
+ String screenStartTime = new SimpleDateFormat("yyyy-MM-dd").format(DateUtils.addYears(new Date(), -1));
+ HealthRecordDto screenTrendRecordDto = new HealthRecordDto();
+ screenTrendRecordDto.setPersonId(personId);
+ screenTrendRecordDto.setStartTime(screenStartTime);
+ HealthDoctorRecordDto screenDoctorDto = new HealthDoctorRecordDto();
+ screenDoctorDto.setStartTime(screenStartTime);
+ screenDoctorDto.setPersonId(personId);
+ HealthMarRecordDto screenMarDto = new HealthMarRecordDto();
+ screenMarDto.setStartTime(screenStartTime);
+ screenMarDto.setPersonId(personId);
+ HealthTemperatureRecordDto screenTemperatureDto = new HealthTemperatureRecordDto();
+ screenTemperatureDto.setStartTime(screenStartTime);
+ screenTemperatureDto.setPersonId(personId);
+ HealthActivityDto screenActivityDto = new HealthActivityDto();
+
+ List trendRecordList = healthRecordMapper.selectHealthRecordList(screenTrendRecordDto);
+ List activityList = statisticAnalysisMapper.selectHealthScreenActivityList(screenActivityDto);
+ List doctorRecordList = statisticAnalysisMapper.selectHealthScreenDoctorList(screenDoctorDto);
+ List marRecordList = statisticAnalysisMapper.selectHealthScreenMedicineList(screenMarDto);
+ List temperatureRecordList = statisticAnalysisMapper.selectHealthScreenTemperatureList(screenTemperatureDto);
+ HealthDoctorRecordDto eventDoctorDto = new HealthDoctorRecordDto();
+ eventDoctorDto.setPersonId(personId);
+ HealthMarRecordDto eventMarDto = new HealthMarRecordDto();
+ eventMarDto.setPersonId(personId);
+ HealthTemperatureRecordDto eventTemperatureDto = new HealthTemperatureRecordDto();
+ eventTemperatureDto.setPersonId(personId);
+ List eventDoctorRecordList = statisticAnalysisMapper.selectHealthScreenDoctorList(eventDoctorDto);
+ List eventMarRecordList = statisticAnalysisMapper.selectHealthScreenMedicineList(eventMarDto);
+ List eventTemperatureRecordList = statisticAnalysisMapper.selectHealthScreenTemperatureList(eventTemperatureDto);
+ long detailLoaded = System.currentTimeMillis();
+ log.info("健康总览大屏-展示明细耗时: {}ms, activity={}, yearDoctor={}, yearMedicine={}, recentTemperature={}",
+ detailLoaded - baseLoaded,
+ emptyList(activityList).size(),
+ emptyList(doctorRecordList).size(),
+ emptyList(marRecordList).size(),
+ emptyList(temperatureRecordList).size());
+
+ HealthRecordDto rankDto = new HealthRecordDto();
+ rankDto.setPersonId(personId);
+ List staticPersonList = statisticAnalysisMapper.selectHealthScreenPersonRankList(rankDto);
+ long rankLoaded = System.currentTimeMillis();
+ log.info("健康总览大屏-成员排行耗时: {}ms, rankCount={}", rankLoaded - detailLoaded, emptyList(staticPersonList).size());
+
+ HealthDoctorRecordDto doctorSummaryDto = new HealthDoctorRecordDto();
+ doctorSummaryDto.setPersonId(personId);
+ HealthMarRecordDto medicineSummaryDto = new HealthMarRecordDto();
+ medicineSummaryDto.setPersonId(personId);
+ HealthTemperatureRecordDto temperatureSummaryDto = new HealthTemperatureRecordDto();
+ temperatureSummaryDto.setPersonId(personId);
+ Map doctorSummary = statisticAnalysisMapper.selectHealthScreenDoctorSummary(doctorSummaryDto);
+ Map medicineSummary = statisticAnalysisMapper.selectHealthScreenMedicineSummary(medicineSummaryDto);
+ Map temperatureSummary = statisticAnalysisMapper.selectHealthScreenTemperatureSummary(temperatureSummaryDto);
+ Map activitySummary = statisticAnalysisMapper.selectHealthScreenActivitySummary(new HealthActivityDto());
+ long summaryLoaded = System.currentTimeMillis();
+ log.info("健康总览大屏-汇总聚合耗时: {}ms", summaryLoaded - rankLoaded);
+
+ double doctorCost = numberValue(doctorSummary, "doctorCost");
+ double activityCost = numberValue(activitySummary, "activityCost");
+ long doctorCount = longValue(doctorSummary, "doctorCount");
+ long activityCount = longValue(activitySummary, "activityCount");
+ long marCount = longValue(medicineSummary, "marCount");
+ long temperatureTotalCount = longValue(temperatureSummary, "temperatureTotalCount");
+ long feverDayCount = longValue(temperatureSummary, "feverDayCount");
+
+ HashMap summary = new HashMap<>();
+ summary.put("selectedPersonId", personId);
+ summary.put("selectedPersonName", findHealthScreenPersonName(allPersonList, personId));
+ summary.put("personCount", emptyList(personList).size());
+ summary.put("healthRecordCount", emptyList(recordList).size());
+ summary.put("activityCount", activityCount);
+ summary.put("activityCost", decimalFormat.format(activityCost));
+ summary.put("doctorCount", doctorCount);
+ summary.put("doctorCost", decimalFormat.format(doctorCost));
+ summary.put("hospitalCount", longValue(doctorSummary, "hospitalCount"));
+ summary.put("doctorTotalCount", longValue(doctorSummary, "doctorTotalCount"));
+ summary.put("marCount", marCount);
+ summary.put("marDayCount", longValue(medicineSummary, "marDayCount"));
+ summary.put("medicalTypeCount", longValue(medicineSummary, "medicalTypeCount"));
+ summary.put("temperatureTotalCount", temperatureTotalCount);
+ summary.put("feverDayCount", feverDayCount);
+ summary.put("avgDoctorCost", decimalFormat.format(doctorCount == 0 ? 0D : doctorCost / doctorCount));
+ summary.put("avgActivityCost", decimalFormat.format(activityCount == 0 ? 0D : activityCost / activityCount));
+ summary.put("avgRecordPerPerson", decimalFormat.format(emptyList(personList).isEmpty() ? 0D : (double) emptyList(recordList).size() / personList.size()));
+ summary.put("healthIndex", buildHealthScreenIndex(personList, recordList, doctorCount, marCount, feverDayCount, longValue(temperatureSummary, "higherTempCount")));
+
+ map.put("summary", summary);
+ Map dictCache = new HashMap<>();
+ long buildStart = System.currentTimeMillis();
+ Map temperature = buildScreenTemperature(eventTemperatureRecordList);
+ map.put("temperature", temperature);
+ long temperatureBuilt = System.currentTimeMillis();
+ log.info("健康总览大屏-体温组装耗时: {}ms", temperatureBuilt - buildStart);
+ map.put("medicine", buildScreenMedicine(marRecordList, dictCache));
+ long medicineBuilt = System.currentTimeMillis();
+ log.info("健康总览大屏-用药组装耗时: {}ms", medicineBuilt - temperatureBuilt);
+ map.put("doctor", buildScreenDoctor(doctorRecordList));
+ long doctorBuilt = System.currentTimeMillis();
+ log.info("健康总览大屏-就医组装耗时: {}ms", doctorBuilt - medicineBuilt);
+ map.put("activity", buildHealthScreenActivity(activityList));
+ long activityBuilt = System.currentTimeMillis();
+ log.info("健康总览大屏-活动组装耗时: {}ms", activityBuilt - doctorBuilt);
+ Map record = buildHealthScreenRecord(recordList, personList, dictCache);
+ record.put("monthList", buildHealthScreenRecordMonthList(trendRecordList));
+ map.put("record", record);
+ long recordBuilt = System.currentTimeMillis();
+ log.info("健康总览大屏-档案组装耗时: {}ms", recordBuilt - activityBuilt);
+ map.put("personRankList", buildHealthScreenPersonRank(staticPersonList));
+ long rankBuilt = System.currentTimeMillis();
+ log.info("健康总览大屏-成员排行组装耗时: {}ms", rankBuilt - recordBuilt);
+ map.put("eventList", buildHealthScreenEvents(recordList, eventDoctorRecordList, eventMarRecordList, eventTemperatureRecordList, activityList, dictCache));
+ long eventBuilt = System.currentTimeMillis();
+ log.info("健康总览大屏-事件组装耗时: {}ms", eventBuilt - rankBuilt);
+ map.put("suggestionList", buildHealthScreenSuggestions(summary, temperatureRecordList, doctorRecordList, marRecordList));
+ log.info("健康总览大屏-建议组装耗时: {}ms", System.currentTimeMillis() - eventBuilt);
+ log.info("健康总览大屏-总耗时: {}ms", System.currentTimeMillis() - begin);
+ return map;
+ }
+
@Override
public Map getRecordAnalysis(AnalysisDto analysisDto) {
//返回数据
@@ -598,6 +754,1979 @@ public class StatisticAnalysisImpl implements IStatisticAnalysisService {
return map;
}
+ @Override
+ public Map getRecordScreen(AnalysisDto analysisDto) {
+ HashMap map = new HashMap<>();
+ Long recordId = analysisDto.getRecordId();
+ analysisDto.setRecordId(recordId);
+ analysisDto.setType(StringUtils.isEmpty(analysisDto.getType()) ? "1" : analysisDto.getType());
+
+ if (recordId == null) {
+ fillEmptyRecordScreen(map);
+ return map;
+ }
+
+ HealthRecordVo record = healthRecordMapper.selectHealthRecordById(recordId);
+ if (record == null) {
+ fillEmptyRecordScreen(map);
+ return map;
+ }
+ if (record.getRehabilitationTime() != null) {
+ record.setDuration(DateUtils.timeDistance(record.getRehabilitationTime(), record.getOccurTime()));
+ } else if (record.getOccurTime() != null) {
+ record.setDuration(DateUtils.timeDistance(new Date(), record.getOccurTime()));
+ }
+
+ HealthDoctorRecordDto doctorRecordDto = new HealthDoctorRecordDto();
+ doctorRecordDto.setHealthRecordId(recordId);
+ doctorRecordDto.setPersonId(analysisDto.getId());
+ doctorRecordDto.setStartTime(analysisDto.getStartTime());
+ doctorRecordDto.setEndTime(analysisDto.getEndTime());
+
+ HealthProcessRecordDto processRecordDto = new HealthProcessRecordDto();
+ processRecordDto.setHealthRecordId(recordId);
+ processRecordDto.setPersonId(analysisDto.getId());
+ processRecordDto.setStartTime(analysisDto.getStartTime());
+ processRecordDto.setEndTime(analysisDto.getEndTime());
+
+ HealthTemperatureRecordDto temperatureRecordDto = new HealthTemperatureRecordDto();
+ temperatureRecordDto.setHealthRecordId(recordId);
+ temperatureRecordDto.setPersonId(analysisDto.getId());
+ temperatureRecordDto.setStartTime(analysisDto.getStartTime());
+ temperatureRecordDto.setEndTime(analysisDto.getEndTime());
+
+ HealthMarRecordDto marRecordDto = new HealthMarRecordDto();
+ marRecordDto.setHealthRecordId(recordId);
+ marRecordDto.setPersonId(analysisDto.getId());
+ marRecordDto.setStartTime(analysisDto.getStartTime());
+ marRecordDto.setEndTime(analysisDto.getEndTime());
+
+ List doctorRecordList = healthDoctorRecordMapper.selectHealthDoctorRecordList(doctorRecordDto);
+ List processRecordList = healthProcessRecordMapper.selectHealthProcessRecordList(processRecordDto);
+ List temperatureRecordList = temperatureRecordMapper.selectHealthTemperatureRecordList(temperatureRecordDto);
+ List marRecordList = marRecordMapper.selectHealthMarRecordList(marRecordDto);
+
+ map.put("record", record);
+ map.put("summary", buildScreenSummary(record, doctorRecordList, processRecordList, temperatureRecordList, marRecordList));
+ map.put("doctor", buildScreenDoctor(doctorRecordList));
+ map.put("temperature", buildScreenTemperature(temperatureRecordList));
+ map.put("medicine", buildScreenMedicine(marRecordList));
+ map.put("doctorRecordList", doctorRecordList);
+ map.put("processRecordList", processRecordList);
+ map.put("temperatureRecordList", temperatureRecordList);
+ map.put("marRecordList", marRecordList);
+
+ return map;
+ }
+
+ private Map buildScreenSummary(HealthRecordVo record, List doctorRecordList,
+ List processRecordList,
+ List temperatureRecordList,
+ List marRecordList) {
+ DecimalFormat decimalFormat = new DecimalFormat("#.##");
+ HashMap summary = new HashMap<>();
+ summary.put("healthRecordCount", record == null ? 0 : 1);
+ summary.put("processRecordCount", emptyList(processRecordList).size());
+ summary.put("doctorCount", emptyList(doctorRecordList).size());
+ summary.put("doctorCost", decimalFormat.format(emptyList(doctorRecordList).stream().mapToDouble(this::safeTotalCost).sum()));
+ summary.put("hospitalCount", emptyList(doctorRecordList).stream().map(HealthDoctorRecordVo::getHospitalName).filter(StringUtils::isNotEmpty).distinct().count());
+ summary.put("doctorTotalCount", emptyList(doctorRecordList).stream().map(HealthDoctorRecordVo::getDoctor).filter(StringUtils::isNotEmpty).distinct().count());
+ summary.put("marDayCount", distinctDosingDateCount(emptyList(marRecordList)));
+ summary.put("marCount", emptyList(marRecordList).size());
+ summary.put("feverDayCount", emptyList(temperatureRecordList).stream()
+ .filter(item -> item.getTemperature() != null && item.getTemperature() >= 37)
+ .map(item -> formatDay(item.getMeasureTime()))
+ .filter(StringUtils::isNotEmpty)
+ .distinct()
+ .count());
+ summary.put("recordList", record == null ? new ArrayList<>() : Collections.singletonList(record));
+
+ ArrayList