Selaa lähdekoodia

数据检测,列表查询 折线图问题

xgb 3 päivää sitten
vanhempi
commit
8b4877b3a1

+ 14 - 0
fs-company-app/src/main/java/com/fs/app/controller/FsUserHealthDataController.java

@@ -46,6 +46,20 @@ public class FsUserHealthDataController extends AppBaseController {
         return R.ok(fsUserHealthDataService.selectFsUserHealthDataListInfo(fsUserHealthData, pageNum, pageSize));
     }
 
+
+    /**
+     * 查询用户身体检测数据列表 最新数据  如果查询时间为周或者月的话 每天只返回最新的数据
+     */
+    @Login
+    @GetMapping("/latest/list")
+    @ApiOperation("获取用户列表信息")
+    public R listByLatest(FsUserHealthData fsUserHealthData,
+                  @RequestParam(required = false, defaultValue = "1") Integer pageNum,
+                  @RequestParam(required = false, defaultValue = "1000") Integer pageSize
+    ) {
+        return R.ok(fsUserHealthDataService.selectFsUserHealthDataListInfoLatest(fsUserHealthData, pageNum, pageSize));
+    }
+
     /**
      * 根据检测类型获取 检测指标
      */

+ 2 - 0
fs-service/src/main/java/com/fs/his/mapper/FsUserHealthDataMapper.java

@@ -69,4 +69,6 @@ public interface FsUserHealthDataMapper extends BaseMapper<FsUserHealthData>{
     FsUserHealthData selectFsUserHealthDataById(Long id);
 
     int selectFsUserHealthDataListCount(FsUserHealthData fsUserHealthData);
+
+    List<FsUserHealthData> selectFsUserHealthDataListInfoLatest(FsUserHealthData fsUserHealthData);
 }

+ 2 - 0
fs-service/src/main/java/com/fs/his/service/IFsUserHealthDataService.java

@@ -99,4 +99,6 @@ public interface IFsUserHealthDataService extends IService<FsUserHealthData>{
     int selectFsUserHealthDataListCount(FsUserHealthData fsUserHealthData);
 
     Map<String,Object> selectFsUserHealthDataListInfo(FsUserHealthData fsUserHealthData, Integer pageNum, Integer pageSize);
+
+    Map<String, Object> selectFsUserHealthDataListInfoLatest(FsUserHealthData fsUserHealthData, Integer pageNum, Integer pageSize);
 }

+ 65 - 16
fs-service/src/main/java/com/fs/his/service/impl/FsUserHealthDataServiceImpl.java

@@ -101,18 +101,66 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
 
         PageHelper.startPage(pageNum, pageSize);
         List<FsUserHealthData> list = selectFsUserHealthDataList(fsUserHealthData);
-        if(list!=null && !list.isEmpty() && fsUserHealthData.getTimeSearch().contains(";")){// 加工数据,返回星期
-            list.forEach(item -> {
+
+        Map<String, Object> data = new HashMap<>();
+        data.put("data", new PageInfo<>(list));
+
+
+        // 如果测量等级是空 需要查询各等级(无-0,轻微-1,严重-2) 数量
+        if (fsUserHealthData.getLevel() == null) {
+            for (int i = 0; i < 3; i++) {
+                fsUserHealthData.setLevel(i);
+                int num = selectFsUserHealthDataListCount(fsUserHealthData);
+                data.put("count" + i, num);
+            }
+        }
+        return data;
+    }
+
+    /**
+     * @Description: 查询用户身体检测数据列表 获取最新的数据
+     * @Param:
+     * @Return:
+     * @Author xgb
+     * @Date 2025/9/5 16:01
+     */
+    @Override
+    public Map<String, Object> selectFsUserHealthDataListInfoLatest(FsUserHealthData fsUserHealthData, Integer pageNum, Integer pageSize) {
+        if (StringUtils.isEmpty(fsUserHealthData.getTimeSearch())) {
+            throw new ServiceException("查询时间不能为空");
+        }
+
+        List<FsUserHealthData> list = Collections.emptyList();
+        Map<String, Object> timeMap = new HashMap<>();
+
+        // 时间格式处理 2025-01-21 2025-01-01;2025-01-12 2025-01
+
+        if (fsUserHealthData.getTimeSearch().contains(";")) {
+            String[] timeArr = fsUserHealthData.getTimeSearch().split(";");
+            timeMap.put("beginTime", timeArr[0]);
+            timeMap.put("endTime", timeArr[1]);
+            // 获取每天最新的数据
+            fsUserHealthData.setParams(timeMap);
+            list = baseMapper.selectFsUserHealthDataListInfoLatest(fsUserHealthData);
+            list.forEach(item -> {// 设置周
                 item.setWeek(DateUtils.getWeek(item.getMeasurementDate()));
             });
-
+        } else if (fsUserHealthData.getTimeSearch().length() == 10) {
+            fsUserHealthData.setMeasurementDate(DateUtils.parseDate(fsUserHealthData.getTimeSearch()));
+            PageHelper.startPage(pageNum, pageSize);
+            list = selectFsUserHealthDataList(fsUserHealthData);
+        } else if (fsUserHealthData.getTimeSearch().length() == 7) {
+            // 按月 取当月第一个和最后一天
+            timeMap.put("beginTime", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.getStartOfMonth(DateUtils.parseDate(fsUserHealthData.getTimeSearch()))));
+            timeMap.put("endTime", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.getEndOfMonth(DateUtils.parseDate(fsUserHealthData.getTimeSearch()))));
+            fsUserHealthData.setParams(timeMap);
+            list = baseMapper.selectFsUserHealthDataListInfoLatest(fsUserHealthData);
         }
 
         Map<String, Object> data = new HashMap<>();
         data.put("data", new PageInfo<>(list));
 
-
-        // 如果测量类型是空 需要查询各等级(无-0,轻微-1,严重-2) 数量
+        // 如果测量等级是空 需要查询各等级(无-0,轻微-1,严重-2) 数量
         if (fsUserHealthData.getLevel() == null) {
             for (int i = 0; i < 3; i++) {
                 fsUserHealthData.setLevel(i);
@@ -120,6 +168,7 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
                 data.put("count" + i, num);
             }
         }
+
         return data;
     }
 
@@ -249,7 +298,7 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
             case 4: // 尿酸
                 // 根据userId查询用户信息
                 FsUserInfo user = fsUserInfoService.selectFsUserInfoById(fsUserHealthData.getUserId());
-                if (user.getSex()==null || "2".equals(String.valueOf(user.getSex()))) {
+                if (user.getSex() == null || "2".equals(String.valueOf(user.getSex()))) {
                     throw new ServiceException("尿酸判断需要性别信息,请完善用户性别信息");
                 }
                 fsUserHealthData.setSex(user.getSex());
@@ -302,7 +351,7 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
      * @Author xgb
      * @Date 2025/9/3 10:55
      */
-    private String parseHealthIndicatorConfig(Map<String, Object> map,String key,String level) {
+    private String parseHealthIndicatorConfig(Map<String, Object> map, String key, String level) {
         if (StringUtils.equalsAny(key, "severity", "male", "female")) {
             // 处理严重程度级别
             List<Map<String, Object>> severityList = (List<Map<String, Object>>) map.get(key);
@@ -321,7 +370,7 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
         return null;
     }
 
-    private String parseHealthIndicatorConfigTwo(Map<String, Object> map,String key,String level,String subType) {
+    private String parseHealthIndicatorConfigTwo(Map<String, Object> map, String key, String level, String subType) {
         if ("severity".equals(key)) {
             // 处理血压严重程度级别
             List<Map<String, Object>> severityList = (List<Map<String, Object>>) map.get("severity");
@@ -351,7 +400,7 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
      * @param subType 子类型 (bloodPressure时使用,systolic 收缩压, diastolic 舒张压)
      * @return 指标值
      */
-     public String getHealthIndicatorValue(HealthIndicatorConfig config, String type, String key, String level, String subType) {
+    public String getHealthIndicatorValue(HealthIndicatorConfig config, String type, String key, String level, String subType) {
         if (config == null) {
             throw new ServiceException("健康指标配置不存在,请联系管理人员");
         }
@@ -454,9 +503,9 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
                 int sex = fsUserHealthData.getSex();
                 String key;
 
-                if (0==sex) { // 男
+                if (0 == sex) { // 男
                     key = HealthIndicatorConfig.MALE;
-                } else if (1==sex) { // 女
+                } else if (1 == sex) { // 女
                     key = HealthIndicatorConfig.FEMALE;
                 } else {
                     throw new ServiceException("不支持的性别类型: " + sex);
@@ -567,7 +616,7 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
         if (fsUserHealthProfile.getHyperuricemiaValue() != null) {
             // 查询用户信息获取 性别
             FsUserInfo fsUserInfo = fsUserInfoService.selectFsUserInfoById(fsUserHealthProfile.getUserId());
-            if (fsUserInfo == null || fsUserInfo.getSex()==null) {
+            if (fsUserInfo == null || fsUserInfo.getSex() == null) {
                 throw new ServiceException("用户已注销或基础信息未维护性别不存在");
             }
 
@@ -586,7 +635,7 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
         if (fsUserHealthProfile.getWaistCircumference() != null) {
             // 查询用户信息获取 性别
             FsUserInfo fsUserInfo = fsUserInfoService.selectFsUserInfoById(fsUserHealthProfile.getUserId());
-            if (fsUserInfo == null || fsUserInfo.getSex()==null) {
+            if (fsUserInfo == null || fsUserInfo.getSex() == null) {
                 throw new ServiceException("用户已注销或性别不存在");
             }
 
@@ -605,7 +654,7 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
         if (fsUserHealthProfile.getHipCircumference() != null) {
             // 查询用户信息获取 性别
             FsUserInfo fsUserInfo = fsUserInfoService.selectFsUserInfoById(fsUserHealthProfile.getUserId());
-            if (fsUserInfo == null || fsUserInfo.getSex()== null) {
+            if (fsUserInfo == null || fsUserInfo.getSex() == null) {
                 throw new ServiceException("用户已注销或性别信息不存在");
             }
             /** 测量类型(0-腰围,1-臀围,2-血糖,3-血压,4-尿酸 5-BMI) */
@@ -635,7 +684,7 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
         if (type == 0 || type == 1 || type == 4) { // 尿酸查询等级信息时需要性别信息
             // 根据userId 查询用户信息
             FsUserInfo user = fsUserInfoService.selectFsUserInfoById(fsUserHealthData.getUserId());
-            if (user.getSex()==null || "2".equals(String.valueOf(user.getSex()))) {
+            if (user.getSex() == null || "2".equals(String.valueOf(user.getSex()))) {
                 throw new ServiceException("尿酸判断需要性别信息,请完善用户性别信息");
             }
             fsUserHealthData.setSex(user.getSex());
@@ -653,7 +702,7 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
             int level = getHealthIndicatorLevel(fsUserHealthData);
             fsUserHealthData.setLevel(level);
             fsUserHealthData.setValue1(value1);
-        }else {
+        } else {
             throw new ServiceException("不支持的测量类型");
         }
         // 登记检测数据信息

+ 21 - 0
fs-service/src/main/resources/mapper/his/FsUserHealthDataMapper.xml

@@ -71,6 +71,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectFsUserHealthDataByUserId" parameterType="FsUserHealthData" resultType="com.fs.his.domain.FsUserHealthData">
         <include refid="selectFsUserHealthDataVo"/> where user_id = #{userId} and measurement_type = #{measurementType} order by measurement_date desc, measurement_time desc limit 1
     </select>
+    <!-- params.beginTime params.endTime区间每天最新的数据  -->
+    <select id="selectFsUserHealthDataListInfoLatest" resultType="com.fs.his.domain.FsUserHealthData">
+        SELECT id, user_id, measurement_type, value1, value2, measurement_date, measurement_time, level, created_at
+        FROM (
+        SELECT id, user_id, measurement_type, value1, value2, measurement_date, measurement_time, level, created_at,
+        ROW_NUMBER() OVER (PARTITION BY measurement_date ORDER BY measurement_time DESC) as rn
+        FROM fs_user_health_data
+        <where>
+            <if test="userId != null and userId != ''"> and user_id = #{userId}</if>
+            <if test="measurementType != null"> and measurement_type = #{measurementType}</if>
+            <if test="params.beginTime != null and params.beginTime != ''">
+                and date_format(measurement_date,'%y-%m-%d') &gt;= date_format(#{params.beginTime},'%y-%m-%d')
+            </if>
+            <if test="params.endTime != null and params.endTime != ''">
+                and date_format(measurement_date,'%y-%m-%d') &lt;= date_format(#{params.endTime},'%y-%m-%d')
+            </if>
+        </where>
+        ) ranked
+        WHERE rn = 1
+        ORDER BY measurement_date DESC, measurement_time DESC
+    </select>
 
 
     <insert id="insertFsUserHealthData" parameterType="FsUserHealthData" useGeneratedKeys="true" keyProperty="id">

+ 14 - 0
fs-user-app/src/main/java/com/fs/app/controller/FsUserHealthDataController.java

@@ -45,6 +45,20 @@ public class FsUserHealthDataController extends AppBaseController {
         return R.ok(fsUserHealthDataService.selectFsUserHealthDataListInfo(fsUserHealthData, pageNum, pageSize));
     }
 
+
+    /**
+     * 查询用户身体检测数据列表 最新数据  如果查询时间为周或者月的话 每天只返回最新的数据
+     */
+    @Login
+    @GetMapping("/latest/list")
+    @ApiOperation("获取用户列表信息")
+    public R listByLatest(FsUserHealthData fsUserHealthData,
+                          @RequestParam(required = false, defaultValue = "1") Integer pageNum,
+                          @RequestParam(required = false, defaultValue = "1000") Integer pageSize
+    ) {
+        return R.ok(fsUserHealthDataService.selectFsUserHealthDataListInfoLatest(fsUserHealthData, pageNum, pageSize));
+    }
+
     /**
      * 根据检测类型获取 检测指标
      */