Преглед изворни кода

组织画像--添加缓存

wangxx пре 2 недеља
родитељ
комит
f70a9f714d

+ 23 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/score/DeptPortraitController.java

@@ -12,6 +12,8 @@ import com.sundot.airport.ledger.service.IGroupPortraitService;
12
 import io.swagger.annotations.Api;
12
 import io.swagger.annotations.Api;
13
 import io.swagger.annotations.ApiOperation;
13
 import io.swagger.annotations.ApiOperation;
14
 import org.springframework.beans.factory.annotation.Autowired;
14
 import org.springframework.beans.factory.annotation.Autowired;
15
+import org.springframework.cache.annotation.CacheEvict;
16
+import org.springframework.cache.annotation.Cacheable;
15
 import org.springframework.web.bind.annotation.*;
17
 import org.springframework.web.bind.annotation.*;
16
 
18
 
17
 import java.util.List;
19
 import java.util.List;
@@ -46,6 +48,7 @@ public class DeptPortraitController extends BaseController {
46
      */
48
      */
47
     @ApiOperation("获取部门内所有成员列表")
49
     @ApiOperation("获取部门内所有成员列表")
48
     @PostMapping("/members")
50
     @PostMapping("/members")
51
+    @Cacheable(value = "dept:members", key = "#query.deptId + ':' + (#query.startDate ?: 'default') + ':' + (#query.endDate ?: 'default')")
49
     public AjaxResult getDeptMembers(@RequestBody DeptPortraitQueryDTO query) {
52
     public AjaxResult getDeptMembers(@RequestBody DeptPortraitQueryDTO query) {
50
         try {
53
         try {
51
             // 参数校验
54
             // 参数校验
@@ -83,6 +86,7 @@ public class DeptPortraitController extends BaseController {
83
      */
86
      */
84
     @ApiOperation("获取部门成员基本情况分布")
87
     @ApiOperation("获取部门成员基本情况分布")
85
     @PostMapping("/distribution")
88
     @PostMapping("/distribution")
89
+    @Cacheable(value = "dept:distribution", key = "#query.deptId + ':' + (#query.startDate ?: 'default') + ':' + (#query.endDate ?: 'default')")
86
     public AjaxResult getMemberDistribution(@RequestBody DeptPortraitQueryDTO query) {
90
     public AjaxResult getMemberDistribution(@RequestBody DeptPortraitQueryDTO query) {
87
         try {
91
         try {
88
             // 参数校验
92
             // 参数校验
@@ -120,6 +124,7 @@ public class DeptPortraitController extends BaseController {
120
      */
124
      */
121
     @ApiOperation("获取部门成员职位情况分布")
125
     @ApiOperation("获取部门成员职位情况分布")
122
     @PostMapping("/position-distribution")
126
     @PostMapping("/position-distribution")
127
+    @Cacheable(value = "dept:position", key = "#query.deptId + ':' + (#query.startDate ?: 'default') + ':' + (#query.endDate ?: 'default')")
123
     public AjaxResult getPositionDistribution(@RequestBody DeptPortraitQueryDTO query) {
128
     public AjaxResult getPositionDistribution(@RequestBody DeptPortraitQueryDTO query) {
124
         try {
129
         try {
125
             // 参数校验
130
             // 参数校验
@@ -156,6 +161,7 @@ public class DeptPortraitController extends BaseController {
156
      */
161
      */
157
     @ApiOperation("维度得分一览")
162
     @ApiOperation("维度得分一览")
158
     @PostMapping("/group-portrait")
163
     @PostMapping("/group-portrait")
164
+    @Cacheable(value = "portrait", key = "#query.deptId + ':' + (#query.startDate ?: 'default') + ':' + (#query.endDate ?: 'default')")
159
     public AjaxResult getGroupPortrait(@RequestBody DeptPortraitQueryDTO query) {
165
     public AjaxResult getGroupPortrait(@RequestBody DeptPortraitQueryDTO query) {
160
         try {
166
         try {
161
             // 参数校验
167
             // 参数校验
@@ -180,6 +186,21 @@ public class DeptPortraitController extends BaseController {
180
     }
186
     }
181
 
187
 
182
     /**
188
     /**
189
+     * 清空所有画像相关缓存
190
+     * <p>
191
+     * 当录入新的事件数据后,调用此接口清空缓存,确保下次查询时重新计算
192
+     * </p>
193
+     *
194
+     * @return 操作结果
195
+     */
196
+    @ApiOperation("清空所有画像缓存")
197
+    @PostMapping("/clear-cache")
198
+    @CacheEvict(value = {"dept:members", "dept:distribution", "dept:position", "portrait"}, allEntries = true)
199
+    public AjaxResult clearPortraitCache() {
200
+        return success("缓存已清空");
201
+    }
202
+
203
+    /**
183
      * 获取站级别下所有部门的团队画像统计
204
      * 获取站级别下所有部门的团队画像统计
184
      * <p>
205
      * <p>
185
      * 展示站下各部门的:
206
      * 展示站下各部门的:
@@ -192,6 +213,7 @@ public class DeptPortraitController extends BaseController {
192
      */
213
      */
193
     @ApiOperation("获取站级别下所有部门的团队画像统计")
214
     @ApiOperation("获取站级别下所有部门的团队画像统计")
194
     @PostMapping("/station-team-stats")
215
     @PostMapping("/station-team-stats")
216
+    @Cacheable(value = "station:stats", key = "#query.deptId + ':' + (#query.startDate ?: 'default') + ':' + (#query.endDate ?: 'default')")
195
     public AjaxResult getStationTeamStats(@RequestBody DeptPortraitQueryDTO query) {
217
     public AjaxResult getStationTeamStats(@RequestBody DeptPortraitQueryDTO query) {
196
         try {
218
         try {
197
             // 参数校验
219
             // 参数校验
@@ -218,6 +240,7 @@ public class DeptPortraitController extends BaseController {
218
 
240
 
219
     @ApiOperation("获取部门的团队画像统计")
241
     @ApiOperation("获取部门的团队画像统计")
220
     @PostMapping("/team-stats")
242
     @PostMapping("/team-stats")
243
+    @Cacheable(value = "team:stats", key = "#query.deptId + ':' + (#query.startDate ?: 'default') + ':' + (#query.endDate ?: 'default')")
221
     public AjaxResult getTeamStats(@RequestBody DeptPortraitQueryDTO query) {
244
     public AjaxResult getTeamStats(@RequestBody DeptPortraitQueryDTO query) {
222
         try {
245
         try {
223
             // 参数校验
246
             // 参数校验

+ 5 - 2
airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/GroupPortraitServiceImpl.java

@@ -233,14 +233,17 @@ public class GroupPortraitServiceImpl implements IGroupPortraitService {
233
         // 取第一个匹配的维度
233
         // 取第一个匹配的维度
234
         ScoreDimension lowerDim = lowerDims.get(0);
234
         ScoreDimension lowerDim = lowerDims.get(0);
235
 
235
 
236
+        BigDecimal result;
236
         // 4. 根据下一级的org决定如何处理
237
         // 4. 根据下一级的org决定如何处理
237
         if (ScoreLevelEnum.PERSON.getCode().equals(lowerOrg)) {
238
         if (ScoreLevelEnum.PERSON.getCode().equals(lowerOrg)) {
238
             // 下一级是人员维度,计算人员事件平均值
239
             // 下一级是人员维度,计算人员事件平均值
239
-            return calculatePersonDimensionAverage(lowerDim, beginTime, endTime, deptId);
240
+            result = calculatePersonDimensionAverage(lowerDim, beginTime, endTime, deptId);
240
         } else {
241
         } else {
241
             // 下一级是 TEAM 或 GROUP 层级,需要获取子部门并计算每个子部门的最终分数
242
             // 下一级是 TEAM 或 GROUP 层级,需要获取子部门并计算每个子部门的最终分数
242
-            return calculateChildDeptAverage(lowerDim, beginTime, endTime, deptId);
243
+            result = calculateChildDeptAverage(lowerDim, beginTime, endTime, deptId);
243
         }
244
         }
245
+        
246
+        return result;
244
     }
247
     }
245
 
248
 
246
     /**
249
     /**