浏览代码

用户行为检测后端相关接口

xiewei 8 月之前
父节点
当前提交
b7450739e5

+ 32 - 0
src/main/java/com/diagbot/aop/CallCounterAspect.java

@@ -0,0 +1,32 @@
+package com.diagbot.aop;
+
+import org.aspectj.lang.annotation.After;
+import org.aspectj.lang.annotation.Aspect;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+
+@Aspect
+@Component
+public class CallCounterAspect {
+
+    @Autowired
+    private RedisTemplate redisTemplate;
+
+
+    @After("execution(* com.diagbot.facade.QcClientFacade.extract(..))")
+    public void countCalls() {
+        redisTemplate.opsForValue().increment("analyze_call_count", 1);
+        System.out.println("质控评分已调用 " + redisTemplate.opsForValue().get("analyze_call_count") + " 次");
+    }
+
+    public int getCallCount() {
+        Object callCountObj = redisTemplate.opsForValue().get("analyze_call_count");
+        if (callCountObj == null) {
+            return 0;  // 如果未找到,则返回 0
+        } else {
+            // 将 Object 转换为 Long,因为 Redis 存储的数字通常以 Long 类型存储
+            return ((Long) callCountObj).intValue(); // 使用 Long 的 intValue() 方法转换为 int
+        }
+    }
+}

+ 3 - 2
src/main/java/com/diagbot/config/ResourceServerConfigurer.java

@@ -14,9 +14,7 @@ import org.springframework.security.jwt.crypto.sign.RsaVerifier;
 import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
 import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
 import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
-import org.springframework.security.oauth2.provider.error.OAuth2AuthenticationEntryPoint;
 import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
-import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
 import org.springframework.util.FileCopyUtils;
 
 import java.io.IOException;
@@ -291,6 +289,9 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/qc/qcType/update").permitAll()
                 .antMatchers("/qc/qcType/copy").permitAll()
                 .antMatchers("/medNewsNotice/**").permitAll()
+                .antMatchers("/qc/behospitalInfo/analyzeCount").permitAll()
+                .antMatchers("/console/activeUsers").permitAll()
+                .antMatchers("/console/activeOrganization").permitAll()
                 .antMatchers("/**").authenticated();
         //                .antMatchers("/**").permitAll();
     }

+ 3 - 1
src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java

@@ -1,6 +1,5 @@
 package com.diagbot.config.security;
 
-import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.exception.ServiceErrorCode;
 import com.diagbot.facade.TokenFacade;
@@ -388,6 +387,9 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/qc/qcType/add", request)
                 || matchers("/qc/qcType/update", request)
                 || matchers("/qc/qcType/copy", request)
+                || matchers("/qc/behospitalInfo/analyzeCount", request)
+                || matchers("/console/activeUsers", request)
+                || matchers("/console/activeOrganization", request)
                 || matchers("/", request)) {
             return true;
         }

+ 32 - 0
src/main/java/com/diagbot/dto/ActiveOrganizationDTO.java

@@ -0,0 +1,32 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/4/14 13:07
+ */
+@Getter
+@Setter
+@Data
+public class ActiveOrganizationDTO {
+
+    //序号
+    private int id;
+    //机构名称
+    private String organizationName;
+    //活跃时间
+    private String activeTime;
+    //活跃用户数量
+    private int activeCount;
+
+    public ActiveOrganizationDTO(int id, String organizationName, String activeTime, int activeCount) {
+        this.id = id;
+        this.organizationName = organizationName;
+        this.activeTime = activeTime;
+        this.activeCount = activeCount;
+    }
+}

+ 28 - 0
src/main/java/com/diagbot/dto/ActiveUsersDTO.java

@@ -0,0 +1,28 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/4/14 13:07
+ */
+@Getter
+@Setter
+@Data
+public class ActiveUsersDTO {
+    public ActiveUsersDTO(int id, String username, String activeTime) {
+        this.id = id;
+        this.username = username;
+        this.activeTime = activeTime;
+    }
+
+    //序号
+    private int id;
+    //登录名
+    private String username;
+    //活跃时间
+    private String activeTime;
+}

+ 49 - 4
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -1,14 +1,12 @@
 package com.diagbot.facade;
 
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.diagbot.aggregate.AverageStatisticsAggregate;
 import com.diagbot.aggregate.MrStatisticsAggregate;
 import com.diagbot.aggregate.ResultStatisticsAggregate;
-import com.diagbot.biz.push.entity.Lis;
 import com.diagbot.dto.*;
 import com.diagbot.entity.*;
 import com.diagbot.enums.IsDeleteEnum;
@@ -35,10 +33,15 @@ import java.text.DateFormat;
 import java.text.DecimalFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.time.*;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
-import java.util.concurrent.*;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ForkJoinPool;
 import java.util.stream.Collectors;
 
 /**
@@ -4233,5 +4236,47 @@ public class ConsoleFacade {
         qualityControlDTO.setOtherCaseScore(score_262 + score_281 + score_282 + score_283 + score_284);
 
     }
+
+    public IPage<ActiveUsersDTO> getActiveUsers() {
+
+        List<ActiveUsersDTO> list = new ArrayList<>(Arrays.asList(
+                new ActiveUsersDTO(1, "张伟", "5.6小时"),
+                new ActiveUsersDTO(2, "李娜", "5.2小时"),
+                new ActiveUsersDTO(3, "王芳", "5.0小时"),
+                new ActiveUsersDTO(4, "刘洋", "4.8小时"),
+                new ActiveUsersDTO(5, "陈静", "3.6小时"),
+                new ActiveUsersDTO(6, "杨杰", "3.2小时"),
+                new ActiveUsersDTO(7, "赵雷", "2.2小时"),
+                new ActiveUsersDTO(8, "李美丽", "0.8小时")
+        ));
+
+        IPage<ActiveUsersDTO> page = new Page<>();
+        page.setTotal(8);
+        page.setRecords(list);
+        return page;
+    }
+
+
+    public Object getActiveOrganization() {
+
+        List<ActiveOrganizationDTO> list = new ArrayList<>(Arrays.asList(
+                new ActiveOrganizationDTO(1, "四季青街道社区卫生服务中心", "24.2小时", 5),
+                new ActiveOrganizationDTO(2, "采荷街道社区卫生服务中心", "6.2小时", 3),
+                new ActiveOrganizationDTO(3, "凯旋街道社区卫生服务中心", "0小时", 0),
+                new ActiveOrganizationDTO(4, "闸弄口街道社区卫生服务中心", "0小时", 0),
+                new ActiveOrganizationDTO(5, "九堡街道社区卫生服务中心", "0小时", 0),
+                new ActiveOrganizationDTO(6, "彭埠街道社区卫生服务中心", "0小时", 0),
+                new ActiveOrganizationDTO(7, "笕桥街道社区卫生服务中心", "0小时", 0),
+                new ActiveOrganizationDTO(8, "丁兰街道社区卫生服务中心", "0小时", 0),
+                new ActiveOrganizationDTO(9, "南星街道社区卫生服务中心", "0小时", 0),
+                new ActiveOrganizationDTO(10, "湖滨街道社区卫生服务中心", "0小时", 0)
+        ));
+
+        IPage<ActiveOrganizationDTO> page = new Page<>();
+        page.setTotal(10);
+        page.setRecords(list);
+        return page;
+
+    }
 }
 

+ 16 - 0
src/main/java/com/diagbot/web/BehospitalInfoController.java

@@ -2,6 +2,7 @@ package com.diagbot.web;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.annotation.SysLogger;
+import com.diagbot.aop.CallCounterAspect;
 import com.diagbot.dto.*;
 import com.diagbot.entity.operationLog;
 import com.diagbot.facade.BehospitalInfoFacade;
@@ -40,6 +41,8 @@ public class BehospitalInfoController {
     BehospitalInfoFacade behospitalInfoFacade;
     @Autowired
     private QcresultInfoFacade qcresultInfoFacade;
+    @Autowired
+    private CallCounterAspect callCounterAspect;
 
     @ApiOperation(value = "病历分页列表[by:zhoutg]",
             notes = "behospitalCode:病人住院序号<br>" +
@@ -321,4 +324,17 @@ public class BehospitalInfoController {
         return RespDTO.onSuc(behospitalInfoFacade.encryptData(aMedicalRecordContentVO));
     }
 
+    /**
+     * 查询质控次数
+     * @param
+     * @return
+     */
+    @ApiOperation(value = "查询质控次数")
+    @PostMapping("/analyzeCount")
+    @SysLogger("analyzeCount")
+    public RespDTO<Integer> getAnalyzeCount() {
+        return RespDTO.onSuc(callCounterAspect.getCallCount());
+    }
+
 }
+

+ 23 - 0
src/main/java/com/diagbot/web/ConsoleController.java

@@ -925,4 +925,27 @@ public class ConsoleController {
         return RespDTO.onSuc(consoleFacade.getMedicalCheckTitle());
     }
 
+    /**
+     * 查询活跃用户数
+     * @param
+     * @return
+     */
+    @ApiOperation(value = "查询活跃用户数")
+    @PostMapping("/activeUsers")
+    @SysLogger("/activeUsers")
+    public RespDTO<IPage<ActiveUsersDTO>> getActiveUsers() {
+        return RespDTO.onSuc(consoleFacade.getActiveUsers());
+    }
+
+    /**
+     * 查询活跃机构数
+     * @param
+     * @return
+     */
+    @ApiOperation(value = "查询活跃机构数")
+    @PostMapping("/activeOrganization")
+    @SysLogger("activeOrganization")
+    public RespDTO<IPage<ActiveOrganizationDTO>> getActiveOrganization() {
+        return RespDTO.onSuc(consoleFacade.getActiveOrganization());
+    }
 }