From 2a9c68fe5130227d88b71e8eb57aced6b10d4d91 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期三, 17 十二月 2025 15:47:35 +0800
Subject: [PATCH] 【丽水】统计随访数据 增加redis记录结果 提高查询效率

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java |   86 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 85 insertions(+), 1 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
index 0b390aa..6dd0e49 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
@@ -2,6 +2,8 @@
 
 import com.github.pagehelper.ISelect;
 import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.constant.CacheConstants;
+import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.constant.HttpStatus;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
@@ -15,6 +17,8 @@
 import com.ruoyi.common.utils.DtoConversionUtils;
 import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.utils.reflect.ReflectUtils;
+import com.ruoyi.common.utils.uuid.IdUtils;
 import com.smartor.domain.*;
 import com.smartor.mapper.PatMedInhospMapper;
 import com.smartor.mapper.PatMedOuthospMapper;
@@ -27,6 +31,7 @@
 import lombok.extern.slf4j.Slf4j;
 import net.bytebuddy.implementation.bytecode.Throw;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -39,6 +44,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -63,6 +69,9 @@
 
     @Value("${spring.profiles.active}")
     private String active;
+
+    @Autowired
+    private RedisCache redisCache;
 
     /**
      * 鏌ヨ鎮h�呴殢璁夸俊鎭�
@@ -90,7 +99,17 @@
             ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
             if (ObjectUtils.isNotEmpty(serviceTask)) serviceSubtask.setPreachform(serviceTask.getPreachform());
         }
-        Map<String, Object> map = serviceSubtaskService.patItemCount(serviceSubtaskVO);
+
+        /**
+         * 浠g爜浼樺寲 鍒嗙缁熻
+        Map<String, Object> map = new HashMap<>();
+        map.put("serviceSubtaskList", serviceSubtaskList);
+        List<Map<String, Object>> list = new ArrayList<>();
+        list.add(map);
+         **/
+        //Map<String, Object> map = serviceSubtaskService.patItemCount(serviceSubtaskVO);
+        //patItemCount 璋冪敤redisCache璁板綍缁熻鏁版嵁
+        Map<String, Object> map = patItemCount(serviceSubtaskVO);
         map.put("serviceSubtaskList", serviceSubtaskList);
         List<Map<String, Object>> list = new ArrayList<>();
         list.add(map);
@@ -104,6 +123,69 @@
             }
         });
         return getDataTable2(total, list);
+    }
+
+    /**
+     * 缁熻闅忚鏁版嵁
+     */
+    @ApiOperation("缁熻闅忚鏁版嵁")
+    @PostMapping("/patItemCount")
+    public Map<String, Object> patItemCount(@RequestBody ServiceSubtaskVO serviceSubtaskVO) {
+        Map<String, Object> map = new HashMap<>();
+        // 閫氳繃redis璁板綍缁撴灉
+        Map<String, Object> redisMap = new HashMap<>();
+        LoginUser loginUser = getLoginUser();
+        SysUser user = null;
+        Long userId = null;
+        if(ObjectUtils.isNotEmpty(loginUser)){
+            user = loginUser.getUser();
+            if(ObjectUtils.isNotEmpty(user)){
+                userId = user.getUserId();
+            }
+        }
+        if(ObjectUtils.isNotEmpty(userId)){
+            redisMap = redisCache.getCacheObject(userId + "patItemCount");
+            //璁板綍鏄惁鏈夊彲鐢ㄧ紦瀛�
+            Boolean redisFlag = false;
+            ServiceSubtaskVO oldCondition = null;
+            if(MapUtils.isNotEmpty(redisMap)){
+                oldCondition = (ServiceSubtaskVO)redisMap.get(userId + "searchCondition");
+                // 姣旇緝鏌ヨ鏉′欢鏄惁涓�鑷�
+                if(ObjectUtils.isNotEmpty(oldCondition) &&
+                        isSameCondition(oldCondition, serviceSubtaskVO)){
+                    // 鏉′欢涓�鑷达紝浣跨敤缂撳瓨
+                    redisFlag = true;
+                    map = redisMap;
+                    redisCache.setCacheObject(userId + "patItemCount", map, 120, TimeUnit.MINUTES);
+                }
+            }
+
+            // 濡傛灉娌℃湁缂撳瓨鎴栬�呮潯浠朵笉涓�鑷达紝閲嶆柊鏌ヨ
+            if(!redisFlag){
+                map = serviceSubtaskService.patItemCount(serviceSubtaskVO);
+                map.put(userId + "searchCondition", serviceSubtaskVO);
+                redisCache.setCacheObject(userId + "patItemCount", map, 120, TimeUnit.MINUTES);
+            }
+        }
+
+        map.put("code", HttpStatus.SUCCESS);
+        return map;
+    }
+
+    /**
+     * 姣旇緝涓や釜ServiceSubtaskVO鐨勬煡璇㈡潯浠舵槸鍚︿竴鑷�
+     * 浣跨敤鍙嶅皠姣旇緝鎵�鏈夊瓧娈碉紝鎺掗櫎鍒嗛〉鍙傛暟鍜屾棤鍏冲瓧娈�
+     */
+    private boolean isSameCondition(ServiceSubtaskVO oldCondition, ServiceSubtaskVO newCondition) {
+        // 浣跨敤ReflectUtils鐨勯�氱敤鏂规硶姣旇緝锛屾帓闄ゅ垎椤靛弬鏁扮瓑鏃犲叧瀛楁
+        return ReflectUtils.equalsAllFields(
+                oldCondition,
+                newCondition,
+                // 鎺掗櫎鐨勫瓧娈碉細鍒嗛〉鍙傛暟銆佸簭鍒楀寲ID銆佹椂闂存埑绛�
+                "pageNum", "pageSize", "serialVersionUID",
+                "createBy", "createTime", "updateBy", "updateTime",
+                "searchValue", "params"
+        );
     }
 
 
@@ -152,7 +234,9 @@
             serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
             serviceSubtask.setServiceSubtaskRecordList(serviceSubtaskRecordService.selectServiceSubtaskRecordList(serviceSubtaskRecord));
         }
+        //todo 浠g爜浼樺寲
         Map<String, Object> map = serviceSubtaskService.patItemCount(serviceSubtaskVO);
+//        Map<String, Object> map = patItemCount(serviceSubtaskVO);
         map.put("serviceSubtaskList", serviceSubtaskList);
         List<Map<String, Object>> list = new ArrayList<>();
         list.add(map);

--
Gitblit v1.9.3