Quellcode durchsuchen

add 从his拉取数据时自动添加常量信息

A17404李放 vor 3 Jahren
Ursprung
Commit
2dcab5605e
41 geänderte Dateien mit 541 neuen und 124 gelöschten Zeilen
  1. 110 0
      coffee-admin/src/main/resources/application-prod.yml
  2. 1 1
      coffee-admin/src/main/resources/application.yml
  3. 5 1
      coffee-admin/src/test/java/com/coffee/admin/BusHospitalTest.java
  4. 5 1
      coffee-common/src/main/java/com/coffee/common/config/mybatis/TenantNameHandler.java
  5. 1 0
      coffee-common/src/main/java/com/coffee/common/config/websocket/WebSocketConstant.java
  6. 29 6
      coffee-common/src/main/java/com/coffee/common/config/websocket/handler/Subscribe.java
  7. 15 2
      coffee-common/src/main/java/com/coffee/common/util/SecurityUtil.java
  8. 2 0
      coffee-framework/src/main/java/com/coffee/framework/config/SwaggerConfig.java
  9. 33 0
      coffee-framework/src/main/java/com/coffee/framework/config/aspect/PermissionAutoConfiguration.java
  10. 47 0
      coffee-framework/src/main/java/com/coffee/framework/config/aspect/PermissionMethodInterceptor.java
  11. 4 1
      coffee-framework/src/main/java/com/coffee/framework/config/convert/EnumDeserializer.java
  12. 3 5
      coffee-framework/src/main/java/com/coffee/framework/web/service/impl/UserServiceImpl.java
  13. 7 0
      coffee-system/src/main/java/com/coffee/bus/controller/BusClinicController.java
  14. 46 0
      coffee-system/src/main/java/com/coffee/bus/controller/BusDeviceRunningController.java
  15. 1 0
      coffee-system/src/main/java/com/coffee/bus/hospital/his/HisScriptSession.java
  16. 2 0
      coffee-system/src/main/java/com/coffee/bus/mapper/BusClinicMapper.java
  17. 4 0
      coffee-system/src/main/java/com/coffee/bus/service/LocalBusClinicService.java
  18. 14 0
      coffee-system/src/main/java/com/coffee/bus/service/LocalBusHospitalService.java
  19. 7 5
      coffee-system/src/main/java/com/coffee/bus/service/LocalBusPatientService.java
  20. 11 3
      coffee-system/src/main/java/com/coffee/bus/service/constant/LocalBusConDoctorService.java
  21. 1 13
      coffee-system/src/main/java/com/coffee/bus/service/constant/LocalBusConMixService.java
  22. 1 1
      coffee-system/src/main/java/com/coffee/bus/stats/CommonStats.java
  23. 1 1
      coffee-system/src/main/java/com/coffee/bus/stats/analyse/AlarmStatsAnalyse.java
  24. 1 1
      coffee-system/src/main/java/com/coffee/bus/stats/analyse/AnalStatsAnalyse.java
  25. 6 6
      coffee-system/src/main/java/com/coffee/bus/stats/analyse/EvalStatsAnalyse.java
  26. 2 2
      coffee-system/src/main/java/com/coffee/bus/stats/analyse/PcaStatsAnalyse.java
  27. 4 4
      coffee-system/src/main/java/com/coffee/bus/stats/report/AgeAndGenderStatsReport.java
  28. 4 4
      coffee-system/src/main/java/com/coffee/bus/stats/report/AgeStatsReport.java
  29. 3 3
      coffee-system/src/main/java/com/coffee/bus/stats/report/GenderStatsReport.java
  30. 32 0
      coffee-system/src/main/java/com/coffee/bus/websocket/AllUnSubHandler.java
  31. 0 3
      coffee-system/src/main/java/com/coffee/bus/websocket/DefaultWebSocketMsgHandler.java
  32. 9 1
      coffee-system/src/main/java/com/coffee/bus/websocket/listener/DeviceInfoListener.java
  33. 16 1
      coffee-system/src/main/java/com/coffee/system/controller/SysRoleController.java
  34. 4 32
      coffee-system/src/main/java/com/coffee/system/entity/SysRole.java
  35. 4 7
      coffee-system/src/main/java/com/coffee/system/entity/SysRoleDept.java
  36. 2 0
      coffee-system/src/main/java/com/coffee/system/entity/SysUser.java
  37. 4 7
      coffee-system/src/main/java/com/coffee/system/entity/SysUserRole.java
  38. 11 4
      coffee-system/src/main/java/com/coffee/system/service/impl/SysRoleServiceImpl.java
  39. 3 7
      coffee-system/src/main/java/com/coffee/system/service/impl/SysUserServiceImpl.java
  40. 75 0
      coffee-system/src/main/resources/mapper/bus/BusClinicMapper.xml
  41. 11 2
      coffee-system/src/main/resources/mapper/bus/BusPatientMapper.xml

+ 110 - 0
coffee-admin/src/main/resources/application-prod.yml

@@ -0,0 +1,110 @@
+# 项目相关配置
+app:
+  # 项目名称
+  name: coffee
+  # 实例演示开关
+  demoEnabled: false
+  # 获取ip地址开关
+  addressEnabled: false
+  # 上传类型,minio;aliyun
+  uploadType: minio
+  # 上传目录
+  uploadDir: D:/${app.name}-files
+  # 缓存前缀
+  cachePrefix: ${app.name}:${profiles.active}
+
+# MinIO相关配置
+minio:
+  endpoint: http://127.0.0.1:9000
+  accessKey: minioadmin
+  secretKey: minioadmin
+  bucketName: ${app.name}-${profiles.active}-bucket
+
+# 数据源配置
+spring:
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    driverClassName: com.mysql.cj.jdbc.Driver
+    druid:
+      # 主库数据源
+      master:
+        url: jdbc:mysql://192.168.100.32:3306/nbnetpump?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&autoReconnect=true
+        username: root
+        password: 123456
+      # 从库数据源
+      slave:
+        # 从数据源开关/默认关闭
+        enabled: false
+        url:
+        username:
+        password:
+      # 初始连接数
+      initialSize: 5
+      # 最小连接池数量
+      minIdle: 10
+      # 最大连接池数量
+      maxActive: 20
+      # 配置获取连接等待超时的时间
+      maxWait: 60000
+      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+      timeBetweenEvictionRunsMillis: 60000
+      # 配置一个连接在池中最小生存的时间,单位是毫秒
+      minEvictableIdleTimeMillis: 300000
+      # 配置一个连接在池中最大生存的时间,单位是毫秒
+      maxEvictableIdleTimeMillis: 900000
+      # 配置检测连接是否有效
+      validationQuery: SELECT 1 FROM DUAL
+      testWhileIdle: true
+      testOnBorrow: false
+      testOnReturn: false
+      webStatFilter:
+        enabled: true
+      statViewServlet:
+        enabled: true
+        # 设置白名单,不填则允许所有访问
+        allow:
+        url-pattern: /druid/*
+        # 控制台管理用户名和密码
+        login-username: scott
+        login-password: tiger
+      filter:
+        stat:
+          enabled: true
+          # 慢SQL记录
+          log-slow-sql: true
+          slow-sql-millis: 1000
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
+  # redis 配置
+  redis:
+    # 地址
+    host: 192.168.100.32
+    # 端口,默认为6379
+    port: 9736
+    # 数据库索引
+    database: 6
+    # 密码
+    password: 6E6985E1F7CB40F24A\.
+    # 连接超时时间
+    timeout: 30s
+    lettuce:
+      pool:
+        # 连接池中的最小空闲连接
+        min-idle: 16
+        # 连接池中的最大空闲连接
+        max-idle: 16
+        # 连接池的最大数据库连接数
+        max-active: 16
+        # #连接池最大阻塞等待时间(使用负值表示没有限制)
+        max-wait: -1ms
+request:
+  check:
+    enable: true
+    # 开启请求验签
+    sign: true
+    # 请求与服务器时间间隔不得超过 10分钟
+    expire-interval: 600
+    # 请求不可重复接收时间 10分钟
+    repeat-interval: 600

+ 1 - 1
coffee-admin/src/main/resources/application.yml

@@ -1,6 +1,6 @@
 spring:
   application:
-    name: coffee-service
+    name: coffee-service.
   profiles:
     active: @profiles.active@
   jackson:

+ 5 - 1
coffee-admin/src/test/java/com/coffee/admin/BusHospitalTest.java

@@ -7,7 +7,9 @@ import com.coffee.bus.controller.BusHospitalController;
 import com.coffee.bus.entity.BusHospitalEntity;
 import com.coffee.bus.enums.ConstantMixEnum;
 import com.coffee.bus.service.LocalBusHospitalService;
+import com.coffee.bus.service.LocalBusPatientService;
 import com.coffee.bus.service.constant.LocalBusConMixService;
+import com.coffee.bus.service.dto.MonitorStatusStatsCountResult;
 import com.coffee.bus.utils.CodeUtils;
 import com.coffee.common.result.R;
 import org.junit.Test;
@@ -32,7 +34,8 @@ import java.util.stream.Collectors;
 public class BusHospitalTest {
     @Autowired
     private LocalBusHospitalService busHospitalService;
-
+    @Autowired
+    private LocalBusPatientService patientService;
     @Autowired
     private LocalBusConMixService conMixService;
     @Autowired
@@ -93,6 +96,7 @@ public class BusHospitalTest {
 
     @Test
     public void debug(){
+        MonitorStatusStatsCountResult monitorStatusStatsCountResult = patientService.statusStats("1");
 //        conMixService.insertUniqueCon(ConstantMixEnum.ward, Arrays.asList("手术名称1","手术名称2","手术3").stream().collect(Collectors.toSet()), "1");
     }
 }

+ 5 - 1
coffee-common/src/main/java/com/coffee/common/config/mybatis/TenantNameHandler.java

@@ -1,5 +1,6 @@
 package com.coffee.common.config.mybatis;
 
+import cn.hutool.core.text.CharSequenceUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import org.apache.ibatis.type.JdbcType;
 import org.apache.ibatis.type.MappedJdbcTypes;
@@ -35,7 +36,10 @@ public class TenantNameHandler implements TypeHandler<String> {
         if(getHospitalName==null){
             getHospitalName= SpringUtil.getBean(GetNameInterface.class);
         }
-        return getHospitalName.getName( rs.getString(columnName));
+        if (CharSequenceUtil.isNotBlank(rs.getString(columnName))) {
+            return getHospitalName.getName( rs.getString(columnName));
+        }
+        return null;
     }
 
     @Override

+ 1 - 0
coffee-common/src/main/java/com/coffee/common/config/websocket/WebSocketConstant.java

@@ -26,6 +26,7 @@ public class WebSocketConstant {
 
     public static final String DEVICE_NONE ="device-none";
 
+    public static final String UNSUB_ALL ="all";
 
     /**
      * 病人监控订阅

+ 29 - 6
coffee-common/src/main/java/com/coffee/common/config/websocket/handler/Subscribe.java

@@ -87,6 +87,7 @@ public abstract class Subscribe implements WsHandler {
      * @param topicWrapper
      */
     public void subscribe(ChannelContext channelContext, TopicWrapper topicWrapper){
+        getChannelTopic(channelContext).add(topicWrapper.getTopic());
         //同一主题只订阅一次
         RPatternTopic rTopic = topicMap.computeIfAbsent(topicWrapper.getTopic(),topic->redissonUtil.getPatternTopic(topicWrapper.getTopic()));
         addTopicListener(rTopic,channelContext, topicWrapper.getTopic());
@@ -101,12 +102,22 @@ public abstract class Subscribe implements WsHandler {
         if(StrUtil.isEmpty(topic)){
             return;
         }
-        topicMap.computeIfPresent(topic,(k,rTopic)->{
-            rTopic.removeListener( getTopicListener(channelContext,k));
-            return rTopic;
-        });
-        Map<String, DefaultMessageListener> topicListeners = getTopicListeners(channelContext);
-        topicListeners.remove(topic);
+        Set<String> allTopics=new HashSet<>();
+        allTopics.add(topic);
+        if("all".equalsIgnoreCase(topic)){
+            allTopics.addAll(getChannelTopic(channelContext));
+        }
+
+        //取消订阅
+        for (String subTopic : allTopics) {
+            topicMap.computeIfPresent(subTopic,(k,rTopic)->{
+                rTopic.removeListener( getTopicListener(channelContext,k));
+                return rTopic;
+            });
+            Map<String, DefaultMessageListener> topicListeners = getTopicListeners(channelContext);
+            topicListeners.remove(subTopic);
+        }
+
     };
 
 
@@ -130,4 +141,16 @@ public abstract class Subscribe implements WsHandler {
         });
         return  messageListener;
     }
+
+    private Set<String> getChannelTopic(ChannelContext channelContext){
+        Set<String> topics=null;
+        Object topicSet = channelContext.getAttribute("subtopic");
+        if(topicSet==null){
+            topics=new HashSet<>();
+        }else {
+            topics= (Set<String>) topicSet;
+        }
+        channelContext.setAttribute("subtopic",topics);
+        return topics;
+    }
 }

+ 15 - 2
coffee-common/src/main/java/com/coffee/common/util/SecurityUtil.java

@@ -1,12 +1,18 @@
 package com.coffee.common.util;
 
 import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.digest.BCrypt;
+import cn.hutool.extra.spring.SpringUtil;
 import com.coffee.common.Constants;
 import com.coffee.common.bo.LoginUser;
+import com.coffee.common.bo.SysRoleBO;
 import com.coffee.common.bo.SysUserBO;
 
+import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 安全服务工具类
@@ -43,13 +49,20 @@ public class SecurityUtil {
      * 是否是超级管理员
      **/
     public static Boolean isSuperAdmin() {
-        return isSuperAdmin(getSysUser().getId());
+        List<SysRoleBO> roles = getSysUser().getRoles();
+        if(CollUtil.isEmpty(roles)){
+            return false;
+        }
+        return roles.stream().filter(role-> StrUtil.isNotBlank(role.getRoleCode()))
+                .map(SysRoleBO::getRoleCode)
+                .collect(Collectors.toSet())
+                .contains("admin");
     }
 
     /**
      * 是否是超级管理员
      **/
-    public static Boolean isSuperAdmin(Long userId) {
+    public static Boolean isSysSuperAdmin(Long userId) {
         return Objects.nonNull(userId) && userId == 1L;
     }
 

+ 2 - 0
coffee-framework/src/main/java/com/coffee/framework/config/SwaggerConfig.java

@@ -5,6 +5,7 @@ import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
 import io.swagger.models.auth.In;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Profile;
 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@@ -24,6 +25,7 @@ import java.util.*;
 @Configuration
 @EnableKnife4j
 @EnableSwagger2WebMvc
+@Profile("dev")
 public class SwaggerConfig implements WebMvcConfigurer {
 
     public static final String VERSION = "1.0.0";

+ 33 - 0
coffee-framework/src/main/java/com/coffee/framework/config/aspect/PermissionAutoConfiguration.java

@@ -0,0 +1,33 @@
+package com.coffee.framework.config.aspect;
+
+
+import org.springframework.aop.aspectj.AspectJExpressionPointcut;
+import org.springframework.aop.support.DefaultPointcutAdvisor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+/**
+ * ClassName:
+ * date: 2020/5/21
+ *
+ * @author lifang
+ * @version 1.0
+ */
+@Component
+public class PermissionAutoConfiguration {
+    private final String POINT_CUT= "@annotation(cn.dev33.satoken.annotation.SaCheckPermission)";
+    @Bean
+    public DefaultPointcutAdvisor permissionPointCutAdvice(){
+        //声明一个AspectJ切点
+        AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
+        //设置切点表达式
+        pointcut.setExpression(POINT_CUT);
+        // 配置增强类advisor, 切面=切点+增强
+        DefaultPointcutAdvisor advisor = new DefaultPointcutAdvisor();
+        //设置切点
+        advisor.setPointcut(pointcut);
+        //设置增强(Advice)
+        advisor.setAdvice(new PermissionMethodInterceptor());
+        return advisor;
+    }
+}

+ 47 - 0
coffee-framework/src/main/java/com/coffee/framework/config/aspect/PermissionMethodInterceptor.java

@@ -0,0 +1,47 @@
+package com.coffee.framework.config.aspect;
+
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.annotation.SaMode;
+import cn.dev33.satoken.spring.SpringMVCUtil;
+import cn.dev33.satoken.stp.StpUtil;
+import com.coffee.common.bo.LoginUser;
+import com.coffee.common.util.SecurityUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.aopalliance.intercept.MethodInterceptor;
+import org.aopalliance.intercept.MethodInvocation;
+
+import javax.servlet.http.HttpServletRequest;
+import java.lang.annotation.Annotation;
+import java.util.List;
+
+@Slf4j
+public class PermissionMethodInterceptor implements MethodInterceptor {
+    @Override
+    public Object invoke(MethodInvocation invocation) throws Throwable {
+        Annotation[] annotations = invocation.getMethod().getAnnotations();
+        SaCheckPermission checkPermission=null;
+        for (Annotation annotation : annotations) {
+            if(annotation.annotationType().equals(SaCheckPermission.class)){
+                checkPermission= (SaCheckPermission) annotation;
+                break;
+            }
+        }
+        if(checkPermission==null){
+            return invocation.proceed();
+        }
+        HttpServletRequest request = SpringMVCUtil.getRequest();
+        //判断是否为系统级别用户,系统级别用户在所有医院为通用权限
+        List<String> permissionList = StpUtil.getPermissionList();
+        if (permissionList.contains("admin")) {
+            return invocation.proceed();
+        }else {
+            if(SaMode.AND.equals(checkPermission.mode())){
+                StpUtil.checkPermissionAnd(checkPermission.value());
+            }else if(SaMode.OR.equals(checkPermission.mode())){
+                StpUtil.checkPermissionOr(checkPermission.value());
+            }
+        }
+        return invocation.proceed();
+    }
+}

+ 4 - 1
coffee-framework/src/main/java/com/coffee/framework/config/convert/EnumDeserializer.java

@@ -27,7 +27,10 @@ public class EnumDeserializer extends JsonDeserializer<Enum<?>> implements Conte
             return null;
         }
         if (IEnum.class.isAssignableFrom(target)) {
-            return (Enum<?>) EnumConvertFactory.getEnum((Class) target, jsonParser.getText());
+            IEnum anEnum = EnumConvertFactory.getEnum((Class) target, jsonParser.getText());
+            if(anEnum!=null){
+                return (Enum<?>) anEnum;
+            }
         }
        return (Enum<?>) Value.simple(jsonParser.getText()).as(target);
     }

+ 3 - 5
coffee-framework/src/main/java/com/coffee/framework/web/service/impl/UserServiceImpl.java

@@ -3,8 +3,8 @@ package com.coffee.framework.web.service.impl;
 import cn.dev33.satoken.spring.SpringMVCUtil;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
-import cn.hutool.extra.spring.SpringUtil;
 import cn.hutool.http.useragent.UserAgent;
 import cn.hutool.http.useragent.UserAgentUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -34,9 +34,6 @@ import com.google.common.collect.Sets;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.stereotype.Service;
-import org.springframework.web.bind.ServletRequestUtils;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
@@ -142,7 +139,8 @@ public class UserServiceImpl implements IUserService {
         sysUserBO.setRoles(sysRoleList.stream().map(item -> BeanUtil.copyProperties(item, SysRoleBO.class)).collect(Collectors.toList()));
         // 查询权限标识
         Set<String> permissions = Sets.newHashSet();
-        if (SecurityUtil.isSuperAdmin(sysUser.getId())) {
+        if (CollUtil.isNotEmpty(sysRoleList)&&
+                sysRoleList.stream().anyMatch(sysRole -> "admin".equalsIgnoreCase(sysRole.getRoleCode()))) {
             permissions.add(Constants.ALL_PERMISSION);
         } else {
             permissions = sysMenuService.getPermissionsByUserId(sysUser.getId());

+ 7 - 0
coffee-system/src/main/java/com/coffee/bus/controller/BusClinicController.java

@@ -61,6 +61,13 @@ public class BusClinicController {
         return R.success(clinicService.pageQuery(query));
     }
 
+    @PostMapping("/latest/page")
+    @SaCheckPermission("bus:clinic:query")
+    @ApiOperation(value = "病人当前临床管理分页查询",notes = "权限【bus:clinic:query】")
+    public R<IPage<ClinicResult>> latestPage(@RequestBody@Validated ClinicQuery query) {
+        return R.success(clinicService.latestQueryPage(query));
+    }
+
 
     @PostMapping("/anal/record/{clinicId}/{after}")
     @SaCheckPermission("bus:clinic:query")

+ 46 - 0
coffee-system/src/main/java/com/coffee/bus/controller/BusDeviceRunningController.java

@@ -0,0 +1,46 @@
+package com.coffee.bus.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.coffee.bus.controller.vo.NoPumpConfigVo;
+import com.coffee.bus.enums.DeviceAlarmEnum;
+import com.coffee.bus.enums.DeviceStatusEnum;
+import com.coffee.common.result.R;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName BusHospitalController.java
+ * @Description
+ * @createTime 2022年03月19日 09:28:00
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/bus/device/running")
+@Api(tags = "设备运行状态管理")
+public class BusDeviceRunningController {
+
+    @GetMapping("/alarm/dict")
+    @ApiOperation(value = "设备报警状态枚举,无权限配置, alarm字段表示该状态是否为报警状态")
+    public R alarm() {
+        return R.success(DeviceAlarmEnum.values());
+    }
+
+    @GetMapping("/status/dict")
+    @ApiOperation(value = "设备运行状态枚举,无权限配置")
+    public R status() {
+        return R.success(DeviceStatusEnum.values());
+    }
+
+    @PostMapping("/nopump")
+    @SaCheckPermission("device:running:add")
+    @ApiOperation(value = "新增无泵数据,权限为device:running:add")
+    public R saveNoPump(@RequestBody NoPumpConfigVo noPump) {
+        return R.success();
+    }
+
+
+}

+ 1 - 0
coffee-system/src/main/java/com/coffee/bus/hospital/his/HisScriptSession.java

@@ -212,6 +212,7 @@ public class HisScriptSession {
             sources = SpringUtil.getBean(ObjectMapper.class).readValue(result.toStringPretty(), new TypeReference<List<BusClinicEntity>>() {
             });
         }catch (Exception e){
+            exec.setMessage(e.toString());
             log.error("数据解析后转化为json失败,{},",text,e.getMessage());
             if(StrUtil.isNotEmpty(text)){
                 throw new ScriptException("脚本解析失败");

+ 2 - 0
coffee-system/src/main/java/com/coffee/bus/mapper/BusClinicMapper.java

@@ -44,4 +44,6 @@ public interface BusClinicMapper extends BaseMapper<BusClinicEntity> {
      * @return IPage<ClinicResult>
      */
     IPage<ClinicResult> pageQuery(Page<ClinicResult> page,@Param("query") ClinicQuery query);
+
+    IPage<ClinicResult> latestQueryPage(Page<ClinicResult> page, ClinicQuery query);
 }

+ 4 - 0
coffee-system/src/main/java/com/coffee/bus/service/LocalBusClinicService.java

@@ -227,4 +227,8 @@ public class LocalBusClinicService extends BaseService<BusClinicMapper, BusClini
     public void resetClinic(String clinicId) {
         this.update(new UpdateWrapper<BusClinicEntity>().lambda().eq(BusClinicEntity::getId,clinicId).set(BusClinicEntity::getFinished,false));
     }
+
+    public IPage<ClinicResult> latestQueryPage(ClinicQuery query){
+        return this.baseMapper.latestQueryPage(query.getPage(),query);
+    }
 }

+ 14 - 0
coffee-system/src/main/java/com/coffee/bus/service/LocalBusHospitalService.java

@@ -17,6 +17,8 @@ import com.coffee.common.config.mybatis.GetNameInterface;
 import com.coffee.common.config.websocket.HospitalCodeCheck;
 import com.coffee.common.crud.BaseService;
 import com.coffee.common.exception.CustomException;
+import com.coffee.system.entity.SysRole;
+import com.coffee.system.service.impl.SysRoleServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.context.annotation.Lazy;
@@ -42,6 +44,10 @@ public class LocalBusHospitalService extends BaseService<BusHospitalMapper, BusH
 
     private ConfigStorage nameCache;
 
+    @Autowired
+    @Lazy
+    private SysRoleServiceImpl sysRoleService;
+
     @Autowired
     @Lazy
     private HospitalManagerRegister hospitalManagerRegister;
@@ -109,6 +115,14 @@ public class LocalBusHospitalService extends BaseService<BusHospitalMapper, BusH
                         log.error("新增医院默认配置失败,",e);
                     }
                 });
+        //设置默认管理员角色
+        SysRole sysRole = new SysRole();
+        sysRole.setTenantId(entity.getId());
+        sysRole.setRoleName("超级管理员");
+        sysRole.setDataScope("1");
+        sysRole.setRoleCode("admin");
+        sysRole.setRemarks("超级管理员角色,不可编辑,不可删除");
+        sysRoleService.save(sysRole);
         nameCache.setConfig(entity.getId(),entity.getName());
     }
 

+ 7 - 5
coffee-system/src/main/java/com/coffee/bus/service/LocalBusPatientService.java

@@ -7,10 +7,7 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.coffee.bus.entity.BusClinicEntity;
-import com.coffee.bus.entity.BusInfusionHistoryEntity;
-import com.coffee.bus.entity.BusPatientEntity;
-import com.coffee.bus.entity.PatientDeviceRepeatDomain;
+import com.coffee.bus.entity.*;
 import com.coffee.bus.enums.DeviceAlarmEnum;
 import com.coffee.bus.enums.DeviceStatusEnum;
 import com.coffee.bus.enums.PatientAlarmEnum;
@@ -77,6 +74,10 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
     @Lazy
     private DeviceRegistry deviceRegistry;
 
+    @Autowired
+    @Lazy
+    private LocalBusHospitalService hospitalService;
+
     private ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
 
     @Override
@@ -117,9 +118,10 @@ public class LocalBusPatientService extends BaseService<BusPatientMapper, BusPat
      * @param sync 是否为同步操作
      */
     public DeferredResult<R<BusClinicEntity>> getPatientInfoFromHis(String hospitalId, String patientCode, long timeout,boolean sync){
+        BusHospitalEntity hospital = hospitalService.getById(hospitalId);
         HospitalManager hospitalManager = hospitalManagerRegister.get(hospitalId);
         HisScriptSession hisScriptSession = hospitalManager.getScriptSession();
-        HisStrategyEnum strategy = hospitalManager.getStrategy();
+        HisStrategyEnum strategy = hospital.getStrategy();
         if(null==strategy||HisStrategyEnum.NONE.equals(strategy)){
             throw new CustomException("医院未对接his,请到【信息维护】->【HIS对接】配置his策略");
         }

+ 11 - 3
coffee-system/src/main/java/com/coffee/bus/service/constant/LocalBusConDoctorService.java

@@ -9,7 +9,7 @@ import com.coffee.bus.entity.BusClinicEntity;
 import com.coffee.bus.entity.BusConDoctor;
 import com.coffee.bus.enums.ConstantEnum;
 import com.coffee.bus.mapper.BusConDoctorMapper;
-import com.coffee.common.crud.BaseService;
+import com.coffee.common.exception.CustomException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -29,12 +29,20 @@ import java.util.Map;
 public class LocalBusConDoctorService extends AbstractConstantService<BusConDoctorMapper, BusConDoctor,String> {
     @Override
     public void validateBeforeSave(BusConDoctor entity) {
-
+        if(!Boolean.TRUE.equals(entity.getAnesthetists())
+                &&!Boolean.TRUE.equals(entity.getReviewer())
+                && !Boolean.TRUE.equals(entity.getSurgeon())){
+            throw new CustomException("人员类型不能为空");
+        }
     }
 
     @Override
     public void validateBeforeUpdate(BusConDoctor entity) {
-
+        if(!Boolean.TRUE.equals(entity.getAnesthetists())
+                &&!Boolean.TRUE.equals(entity.getReviewer())
+                && !Boolean.TRUE.equals(entity.getSurgeon())){
+            throw new CustomException("人员类型不能为空");
+        }
     }
 
     @Override

+ 1 - 13
coffee-system/src/main/java/com/coffee/bus/service/constant/LocalBusConMixService.java

@@ -57,24 +57,12 @@ public class LocalBusConMixService extends AbstractConstantService<BusConMixMapp
 
     @Override
     public void postSave(BusConMixEntity entity) {
-        if (ConstantMixEnum.ward.equals(entity.getType())&& StrUtil.isNotEmpty(entity.getCode())) {
-            wardMap.get(entity.getTenantId()).putAsync(entity.getCode(),entity.getName());
-        }
+
     }
 
     @Override
     public void postUpdate(BusConMixEntity entity) {
-        if (ConstantMixEnum.ward.equals(entity.getType())&& StrUtil.isNotEmpty(entity.getCode())) {
-            wardMap.computeIfAbsent(entity.getTenantId(), k -> redissonUtil.getRedissonClient().getMapCache(k))
-                    .putAsync(entity.getCode(),entity.getName());
-        }
-    }
 
-    public String getWard(String tenantId,String code){
-        if(StrUtil.isBlank(tenantId)){
-            return code;
-        }
-        return wardMap.get(tenantId).getOrDefault(code,code);
     }
 
     @Override

+ 1 - 1
coffee-system/src/main/java/com/coffee/bus/stats/CommonStats.java

@@ -79,7 +79,7 @@ public interface CommonStats<T extends CombineResult> {
 
     default List<StatsColumn> getAllColumn(List<String> allAnalName){
         List<StatsColumn> columnNames = new ArrayList<>();
-        columnNames.add(StatsColumn.of("时间","time"));
+        columnNames.add(StatsColumn.of("时间","时间"));
         for (String name : allAnalName) {
             columnNames.add(StatsColumn.of(name,name));
             columnNames.add(StatsColumn.of(name,name,true));

+ 1 - 1
coffee-system/src/main/java/com/coffee/bus/stats/analyse/AlarmStatsAnalyse.java

@@ -212,7 +212,7 @@ public class AlarmStatsAnalyse implements CommonStats<CombineAlarmResult> {
             //表格内容
             LinkedHashMap<String, Object> contentValues = new LinkedHashMap<>();
             BigDecimal total =BigDecimal.valueOf( totalResult.getTotal());
-            contentValues.put("time",timeRange);
+            contentValues.put("时间",timeRange);
             contentValues.put("输注总数",totalResult.getInfusionCount());
             contentValues.put("提示总数",total);
             contentValues.put("堵塞",totalResult.getJam().getValue());

+ 1 - 1
coffee-system/src/main/java/com/coffee/bus/stats/analyse/AnalStatsAnalyse.java

@@ -107,7 +107,7 @@ public class AnalStatsAnalyse implements CommonStats<CombineResult> {
             Map<String, Long> groupByAnal = groupByAnal(combineResult);
             //表格内容
             LinkedHashMap<String, Object> contentValues = new LinkedHashMap<>();
-            contentValues.put("time",timeRange);
+            contentValues.put("时间",timeRange);
             contentValues.put("输注总数",combineResult.stream().map(CombineResult::getId).distinct().count());
             //获取特定时间区间内 各镇痛方式的 数量
             allAnal.forEach(anal->{

+ 6 - 6
coffee-system/src/main/java/com/coffee/bus/stats/analyse/EvalStatsAnalyse.java

@@ -241,9 +241,9 @@ public class EvalStatsAnalyse implements CommonStats<CombineEvalResult> {
             //表格内容
             long evalCount = combineResult.stream().filter(r -> StrUtil.isNotEmpty(r.getEvalId())).count();
             LinkedHashMap<String, Object> contentValues = new LinkedHashMap<>();
-            contentValues.put("time",timeRange);
-            contentValues.put("infusionCount",totalSize);
-            contentValues.put("evalCount",evalCount);
+            contentValues.put("时间",timeRange);
+            contentValues.put("输注次数",totalSize);
+            contentValues.put("评价次数",evalCount);
             contentValues.put("评价比率",computeRatio(BigDecimal.valueOf(evalCount),totalSize));
             //获取特定时间区间内
             EvalTableResult evalTableResult = new EvalTableResult();
@@ -259,9 +259,9 @@ public class EvalStatsAnalyse implements CommonStats<CombineEvalResult> {
 
     private List<StatsColumn> getAllColumn(FunctionEvalConfig config) {
         List<StatsColumn> result = new ArrayList<>();
-        result.add(StatsColumn.of("时间","time"));
-        result.add(StatsColumn.of("输注次数","infusionCount"));
-        result.add(StatsColumn.of("评价次数","evalCount"));
+        result.add(StatsColumn.of("时间","时间"));
+        result.add(StatsColumn.of("输注次数","输注次数"));
+        result.add(StatsColumn.of("评价次数","评价次数"));
         result.add(StatsColumn.of("评价","评价",true));
         if(Boolean.TRUE.equals(config.getStatics())){
             result.add(StatsColumn.of("静息疼痛","静息疼痛"));

+ 2 - 2
coffee-system/src/main/java/com/coffee/bus/stats/analyse/PcaStatsAnalyse.java

@@ -125,7 +125,7 @@ public class PcaStatsAnalyse implements CommonStats<CombineResult> {
         //根据时间对结果进行区分统计
         Map<String, List<CombineResult>> groupByTime = groupByTime(results, unit);
         List<StatsColumn> allColumn = Arrays.asList(
-                StatsColumn.of("时间","time"),
+                StatsColumn.of("时间","时间"),
                 StatsColumn.of("输注总数","输注总数"),
                 StatsColumn.of("自控总数","自控总数"),
                 StatsColumn.of("自控有效数","自控无效数"),
@@ -138,7 +138,7 @@ public class PcaStatsAnalyse implements CommonStats<CombineResult> {
         //根据时间区间对镇痛方式进行统计
         groupByTime.forEach((timeRange,combineResults)->{
             LinkedHashMap<String, Object> contentValues = new LinkedHashMap<>();
-            contentValues.put("time",timeRange);
+            contentValues.put("时间",timeRange);
             long total=0;
             long pcaValidTotalCount=0;
             long pcaInvalidTotalCount=0;

+ 4 - 4
coffee-system/src/main/java/com/coffee/bus/stats/report/AgeAndGenderStatsReport.java

@@ -113,8 +113,8 @@ public class AgeAndGenderStatsReport implements CommonStats<CombineResult> {
     private   TableResult handleTable( Map<String, List<CombineResult>> groupByTime , SexEnum gender,TableResult result) {
         //根据时间对结果进行区分统计
         List<StatsColumn> allColumn = Arrays.asList(
-                StatsColumn.of("时间","time"),
-                StatsColumn.of("总人数","total"),
+                StatsColumn.of("时间","时间"),
+                StatsColumn.of("总人数","总人数"),
                 StatsColumn.of(AgeStatsEnum.infant.getName(),AgeStatsEnum.infant.getName()),
                 StatsColumn.of("婴幼儿","婴幼儿",true),
                 StatsColumn.of(AgeStatsEnum.child.getName(),AgeStatsEnum.child.getName()),
@@ -151,8 +151,8 @@ public class AgeAndGenderStatsReport implements CommonStats<CombineResult> {
                     ++total;
                 }
             }
-            contentValues.put("time",timeRange);
-            contentValues.put("total",total);
+            contentValues.put("时间",timeRange);
+            contentValues.put("总人数",total);
             contentValues.put(AgeStatsEnum.infant.getName(),ageMap.get(AgeStatsEnum.infant));
             contentValues.put(AgeStatsEnum.child.getName(),ageMap.get(AgeStatsEnum.child));
             contentValues.put(AgeStatsEnum.juvenile.getName(),ageMap.get(AgeStatsEnum.juvenile));

+ 4 - 4
coffee-system/src/main/java/com/coffee/bus/stats/report/AgeStatsReport.java

@@ -104,8 +104,8 @@ public class AgeStatsReport implements CommonStats<CombineResult> {
         //根据时间对结果进行区分统计
         Map<String, List<CombineResult>> groupByTime = groupByTime(results, unit);
         List<StatsColumn> allColumn = Arrays.asList(
-                StatsColumn.of("时间","time"),
-                StatsColumn.of("总人数","total"),
+                StatsColumn.of("时间","时间"),
+                StatsColumn.of("总人数","总人数"),
 
                 StatsColumn.of(AgeStatsEnum.infant.getName(),AgeStatsEnum.infant.getName()),
                 StatsColumn.of("婴幼儿比率","婴幼儿比率"),
@@ -140,8 +140,8 @@ public class AgeStatsReport implements CommonStats<CombineResult> {
             for (CombineResult combineResult : combineResults) {
                 ageMap.merge(AgeStatsEnum.judgeAge(combineResult.getPatientAge()),1,(t1,t2)->t1+t2);
             }
-            contentValues.put("time",timeRange);
-            contentValues.put("total",total);
+            contentValues.put("时间",timeRange);
+            contentValues.put("总人数",total);
             contentValues.put(AgeStatsEnum.infant.getName(),ageMap.get(AgeStatsEnum.infant));
             contentValues.put(AgeStatsEnum.child.getName(),ageMap.get(AgeStatsEnum.child));
             contentValues.put(AgeStatsEnum.juvenile.getName(),ageMap.get(AgeStatsEnum.juvenile));

+ 3 - 3
coffee-system/src/main/java/com/coffee/bus/stats/report/GenderStatsReport.java

@@ -157,7 +157,7 @@ public class GenderStatsReport implements CommonStats<CombineResult> {
         //根据时间对结果进行区分统计
         Map<String, List<CombineResult>> groupByTime = groupByTime(results, unit);
         List<StatsColumn> allColumn = getAllColumn(Arrays.asList("男性", "女性", "未知"));
-        allColumn.add(1,StatsColumn.of("总人数","total"));
+        allColumn.add(1,StatsColumn.of("总人数","总人数"));
 
         List<Map<String, Object>> contents = new ArrayList<>();
         result.setContent(contents);
@@ -185,8 +185,8 @@ public class GenderStatsReport implements CommonStats<CombineResult> {
                 }
             }
 
-            contentValues.put("time",timeRange);
-            contentValues.put("total",total);
+            contentValues.put("时间",timeRange);
+            contentValues.put("总人数",total);
             contentValues.put("男性",man);
             contentValues.put("男性比率",computeRatio(BigDecimal.valueOf(man),total));
             contentValues.put("女性",woman);

+ 32 - 0
coffee-system/src/main/java/com/coffee/bus/websocket/AllUnSubHandler.java

@@ -0,0 +1,32 @@
+package com.coffee.bus.websocket;
+
+import com.coffee.common.config.websocket.WebSocketConstant;
+import com.coffee.common.config.websocket.handler.Subscribe;
+import org.springframework.stereotype.Component;
+import org.tio.core.ChannelContext;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName AllUnSubHandler.java
+ * @Description TODO
+ * @createTime 2022年06月16日 15:22:00
+ */
+@Component
+public class AllUnSubHandler extends Subscribe {
+
+    @Override
+    public String getId() {
+        return WebSocketConstant.UNSUB_ALL;
+    }
+
+    @Override
+    public void close(ChannelContext channelContext) {
+
+    }
+
+    @Override
+    public boolean needParam() {
+        return false;
+    }
+}

+ 0 - 3
coffee-system/src/main/java/com/coffee/bus/websocket/DefaultWebSocketMsgHandler.java

@@ -8,7 +8,6 @@ import cn.hutool.json.JSONUtil;
 import com.coffee.bus.hospital.HospitalManagerRegister;
 import com.coffee.bus.hospital.his.HisResponse;
 import com.coffee.bus.hospital.his.HisScriptSession;
-import com.coffee.bus.hospital.his.HisScriptSessionManager;
 import com.coffee.common.Constants;
 import com.coffee.common.bo.LoginUser;
 import com.coffee.common.config.websocket.HospitalCodeCheck;
@@ -17,9 +16,7 @@ import com.coffee.common.config.websocket.handler.WsHandler;
 import com.coffee.common.result.R;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.context.annotation.Lazy;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 import org.tio.core.ChannelContext;

+ 9 - 1
coffee-system/src/main/java/com/coffee/bus/websocket/listener/DeviceInfoListener.java

@@ -61,6 +61,7 @@ public class DeviceInfoListener {
 
     private final WsPublishUtils wsPublishUtils;
 
+    private final LocalBusDeviceService deviceService;
 
     private final Executor executor;
     private final HospitalManagerRegister hospitalManagerRegister;
@@ -223,15 +224,21 @@ public class DeviceInfoListener {
      * @param cacheOperation 缓存操作
      */
     private BusInfusionHistoryEntity handleInfusionHistory(BusDeviceRunningEntity device, DeviceOperator deviceOperator, List<Supplier<?>> cacheOperation) {
+        boolean newInfusion=isNewInFusion(device.getDeviceId(),device.getClassification());
+        if(newInfusion){
+            BusDeviceEntity deviceEntity = deviceService.getByDeviceId(device.getDeviceId());
+            device.setTenantId(deviceEntity.getTenantId());
+        }
         PatientOperator patientOperator = patientRegistry.getOperator(device.getTenantId(), device.getPatientCode(),MapUtil.of("startTime", device.getStartTime()));
         device.setClinicId(patientOperator.getClinicId());
         device.setPatientId(patientOperator.getPatientId());
+
         BusInfusionHistoryEntity infusionHistory = BusInfusionHistoryEntity.parseRunningInfo(device);
         String originInfusionId = deviceOperator.getInfusionId();
         if(ObjectUtil.equal(device.getDeviceId(),patientOperator.getBindDeviceId())){
             device.setMaster(true);
         }
-        if (isNewInFusion(device.getDeviceId(),device.getClassification())) {
+        if (newInfusion) {
             infusionHistory.setId(IdWorker.getIdStr());
             infusionHistory.setFinished(false);
             infusionHistory.setStartTime(device.getUploadTime());
@@ -253,6 +260,7 @@ public class DeviceInfoListener {
                 deviceOperator.setInfusionId(device.getInfusionId());
                 deviceOperator.setClassification(device.getClassification());
                 deviceOperator.setStartTime(infusionHistory.getStartTime());
+                deviceOperator.setTenantId(device.getTenantId());
             }
             return null;
         });

+ 16 - 1
coffee-system/src/main/java/com/coffee/system/controller/SysRoleController.java

@@ -1,15 +1,22 @@
 package com.coffee.system.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.coffee.common.annotation.Log;
+import com.coffee.common.enums.MenuTypeEnum;
+import com.coffee.common.enums.StatusEnum;
 import com.coffee.common.result.R;
 import com.coffee.common.util.ExcelUtil;
+import com.coffee.common.util.SecurityUtil;
 import com.coffee.system.common.dto.SysRoleAddDTO;
 import com.coffee.system.common.dto.SysRoleAssignMenuDTO;
 import com.coffee.system.common.dto.SysRoleEditDTO;
 import com.coffee.system.common.dto.SysRoleQueryDTO;
+import com.coffee.system.entity.SysMenu;
 import com.coffee.system.entity.SysRole;
+import com.coffee.system.service.ISysMenuService;
 import com.coffee.system.service.ISysRoleService;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -31,6 +38,8 @@ public class SysRoleController {
     @Resource
     private ISysRoleService sysRoleService;
 
+    @Resource
+    private ISysMenuService menuService;
     /**
      * 分页查询
      */
@@ -69,7 +78,7 @@ public class SysRoleController {
     @PostMapping("/remove")
     @SaCheckPermission("system:sysRole:remove")
     @Log(title = "角色管理删除")
-    public R remove(@RequestParam String ids) {
+    public R remove(@RequestParam("ids") String ids) {
         sysRoleService.remove(ids);
         return R.success();
     }
@@ -119,6 +128,12 @@ public class SysRoleController {
      */
     @GetMapping("/listRoleMenus")
     public R listRoleMenus(@RequestParam String roleId) {
+        if(SecurityUtil.isSuperAdmin()){
+            LambdaQueryWrapper<SysMenu> queryWrapper = Wrappers.lambdaQuery();
+            queryWrapper.eq(SysMenu::getStatus, StatusEnum.YES.getCode());
+            queryWrapper.in(SysMenu::getMenuType, MenuTypeEnum.DIR.getCode(), MenuTypeEnum.MENU.getCode());
+            return R.success(menuService.list(queryWrapper));
+        }
         return R.success(sysRoleService.listRoleMenus(roleId));
     }
 

+ 4 - 32
coffee-system/src/main/java/com/coffee/system/entity/SysRole.java

@@ -6,8 +6,10 @@ import com.alibaba.excel.annotation.write.style.*;
 import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.coffee.common.annotation.ExcelDict;
 import com.coffee.common.convert.ExcelDictConverter;
+import com.coffee.common.entity.TenantGenericEntity;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
@@ -33,7 +35,8 @@ import java.util.Date;
 @ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER)
 @ContentFontStyle(fontHeightInPoints = 10)
 @ExcelIgnoreUnannotated
-public class SysRole implements Serializable {
+@TableName("sys_role")
+public class SysRole extends TenantGenericEntity<Long,String> implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
@@ -80,35 +83,4 @@ public class SysRole implements Serializable {
     @ExcelProperty(value = "状态", index = 4, converter = ExcelDictConverter.class)
     @ExcelDict("sys_status")
     private String status;
-
-    /**
-     * 创建人
-     */
-    @TableField(fill = FieldFill.INSERT)
-    private String createBy;
-
-    /**
-     * 创建时间
-     */
-    @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
-    @ColumnWidth(20)
-    @ExcelProperty(value = "创建时间", index = 6)
-    private Date createTime;
-
-    /**
-     * 更新人
-     */
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private String updateBy;
-
-    /**
-     * 更新时间
-     */
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
-    @ColumnWidth(20)
-    @ExcelProperty(value = "更新时间", index = 7)
-    private Date updateTime;
-
 }

+ 4 - 7
coffee-system/src/main/java/com/coffee/system/entity/SysRoleDept.java

@@ -1,5 +1,7 @@
 package com.coffee.system.entity;
 
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.coffee.common.entity.TenantGenericEntity;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
@@ -15,16 +17,11 @@ import java.io.Serializable;
  * @since 2021-06-10
  */
 @Data
-public class SysRoleDept implements Serializable {
+@TableName("sys_role_dept")
+public class SysRoleDept extends TenantGenericEntity<Long,String> implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    /**
-     * 主键
-     */
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Long id;
-
     /**
      * 角色ID
      */

+ 2 - 0
coffee-system/src/main/java/com/coffee/system/entity/SysUser.java

@@ -16,6 +16,7 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.models.auth.In;
 import lombok.Data;
 import lombok.Getter;
+import org.apache.ibatis.annotations.Delete;
 import org.python.antlr.ast.Str;
 
 import java.io.Serializable;
@@ -150,6 +151,7 @@ public class SysUser extends TenantGenericEntity<Long,Long> {
     /**
      * 删除标记 0存在;1删除
      */
+    @TableLogic(value = "0",delval = "1")
     private String delFlag;
 
     /**

+ 4 - 7
coffee-system/src/main/java/com/coffee/system/entity/SysUserRole.java

@@ -1,5 +1,7 @@
 package com.coffee.system.entity;
 
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.coffee.common.entity.TenantGenericEntity;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import lombok.Data;
@@ -15,16 +17,11 @@ import java.io.Serializable;
  * @since 2021-06-10
  */
 @Data
-public class SysUserRole implements Serializable {
+@TableName("sys_user_role")
+public class SysUserRole extends TenantGenericEntity<Long,String> implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    /**
-     * 主键
-     */
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Long id;
-
     /**
      * 用户编号
      */

+ 11 - 4
coffee-system/src/main/java/com/coffee/system/service/impl/SysRoleServiceImpl.java

@@ -99,6 +99,10 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
         if (!this.checkUniqueRoleCode(req.getRoleCode(), req.getId())) {
             throw new CustomException("角色编码已存在");
         }
+        SysRole originRole = this.getById(req.getId());
+        if("admin".equalsIgnoreCase(originRole.getRoleCode())){
+            throw new CustomException("管理员角色不可修改");
+        }
         SysRole entity = BeanUtil.copyProperties(req, SysRole.class);
         this.updateById(entity);
         // 删除角色和部门关联
@@ -120,12 +124,15 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
         List<String> idList = Arrays.asList(ids.split(","));
         idList.forEach(item -> {
             SysRole sysRole = this.getById(item);
-            SysUserRole sysUserRole = sysUserRoleService.getOne(Wrappers.lambdaQuery(SysUserRole.class).eq(SysUserRole::getRoleId, item));
-            if (Objects.nonNull(sysUserRole)) {
+            if("admin".equalsIgnoreCase(sysRole.getRoleCode())){
+                throw new CustomException("管理员角色不可删除");
+            }
+            long userRoleCount = sysUserRoleService.count(Wrappers.lambdaQuery(SysUserRole.class).eq(SysUserRole::getRoleId, item));
+            if (userRoleCount!=0) {
                 throw new CustomException(String.format("角色【%s】存在用户,无法删除", sysRole.getRoleName()));
             }
-            SysRoleDept sysRoleDept = sysRoleDeptService.getOne(Wrappers.lambdaQuery(SysRoleDept.class).eq(SysRoleDept::getRoleId, item));
-            if (Objects.nonNull(sysRoleDept)) {
+            long deptRoleCount = sysRoleDeptService.count(Wrappers.lambdaQuery(SysRoleDept.class).eq(SysRoleDept::getRoleId, item));
+            if (deptRoleCount!=0) {
                 throw new CustomException(String.format("角色【%s】已被使用,无法删除", sysRole.getRoleName()));
             }
         });

+ 3 - 7
coffee-system/src/main/java/com/coffee/system/service/impl/SysUserServiceImpl.java

@@ -1,7 +1,5 @@
 package com.coffee.system.service.impl;
 
-import cn.dev33.satoken.SaManager;
-import cn.dev33.satoken.exception.NotLoginException;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
@@ -12,7 +10,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.coffee.common.Constants;
 import com.coffee.common.bo.LoginUser;
-import com.coffee.common.enums.DelFlagEnum;
 import com.coffee.common.enums.StatusEnum;
 import com.coffee.common.enums.YesNoEnum;
 import com.coffee.common.exception.CustomException;
@@ -189,7 +186,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             }
         }
         // 当前用户不是超级管理员,不允许修改
-        if (!SecurityUtil.getSysUser().getId().equals(req.getId()) && SecurityUtil.isSuperAdmin(req.getId())) {
+        if (!SecurityUtil.getSysUser().getId().equals(req.getId()) && SecurityUtil.isSysSuperAdmin(req.getId())) {
             throw new CustomException("超管账户不允许修改");
         }
         SysUser entity = BeanUtil.copyProperties(req, SysUser.class);
@@ -226,12 +223,11 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     public void remove(String ids) {
         List<String> idList = Arrays.asList(ids.split(","));
         idList.forEach(item -> {
-            if (SecurityUtil.isSuperAdmin(Long.valueOf(item))) {
+            if (SecurityUtil.isSysSuperAdmin(Long.valueOf(item))) {
                 throw new CustomException("超管账户不允许删除");
             }
-            this.update(Wrappers.lambdaUpdate(SysUser.class).eq(SysUser::getId, item).set(SysUser::getDelFlag, DelFlagEnum.YES.getCode()));
         });
-        // this.removeByIds(Arrays.asList(deviceIds.split(",")));
+         this.removeByIds(idList.stream().map(Long::valueOf).collect(Collectors.toSet()));
     }
 
     @Override

+ 75 - 0
coffee-system/src/main/resources/mapper/bus/BusClinicMapper.xml

@@ -145,4 +145,79 @@
             </foreach>
         </if>
     </select>
+
+
+    <select id="latestQueryPage" resultMap="queryResult" parameterType="com.coffee.bus.service.dto.ClinicQuery">
+        select
+        c.id as clinic_id,
+        c.patient_code as patient_code,
+        c.patient_name as patient_name,
+        c.ward as ward,
+        c.bed_no as bed_no,
+        c.`surgery_name` as surgery_name,
+        c.surgery_doctor as surgery_doctor,
+        c.ana_doctor as ana_doctor,
+        c.monitor_type as monitor_type,
+        c.finished as finished,
+        c.start_time as clinic_start_time,
+        c.monitor_start_time as monitor_start_time,
+        c.end_time as monitor_end_time,
+        i.infusion_count as infusion_count,
+        eval.eval_count as eval_count
+        from
+        (select * from bus_patient
+        <if test="query.patientCode!=null">
+            and patient_code like concat('%',#{query.patientCode},'%')
+        </if>
+        )as p
+        left join
+        (select * from bus_clinic
+        <where>
+            <if test="query.monitorType!=null">
+                and monitor_type=#{query.monitorType}
+            </if>
+            <if test="query.finished!=null">
+                and finished=#{query.finished}
+            </if>
+            <if test="query.surgeryName!=null">
+                and surgery_name like concat('%',#{query.surgeryName},'%')
+            </if>
+            <if test="query.patientName!=null">
+                and patient_name like concat('%',#{query.patientName},'%')
+            </if>
+
+            <if test="query.ward != null and query.ward.size > 0">
+                and ward in
+                <foreach item="w" index="index" collection="query.ward" open="(" separator="," close=")">
+                    #{w, jdbcType=VARCHAR}
+                </foreach>
+            </if>
+            <if test="query.bedNo!=null">
+                and bed_no like concat('%',#{query.bedNo},'%')
+            </if>
+            <if test="query.timeRange != null and query.timeRange.size >0">
+                and monitor_start_time &gt; #{query.timeRange[0]} and  monitor_start_time &lt; #{query.timeRange[1]}
+            </if>
+        </where>
+
+        ) as c on p.clinic_id=c.id
+        left join  (select clinic_id,count(1) as infusion_count from bus_infusion_history GROUP BY clinic_id) as i on i.clinic_id=c.id
+        left join (select clinic_id,count(1) as eval_count from bus_evaluation  GROUP BY clinic_id) as eval on eval.clinic_id=c.id
+        <if test="(query.orderByDesc!=null and query.orderByDesc.size > 0 ) or (query.orderByAsc!=null and query.orderByAsc.size > 0)">
+            order by
+        </if>
+        <if test="query.orderByDesc!=null and query.orderByDesc.size > 0">
+            <foreach item="descItem" index="index" collection="query.orderByDesc" open="" separator="," close="">
+                ${descItem} desc
+            </foreach>
+        </if>
+        <if test="query.orderByAsc!=null and query.orderByAsc.size > 0">
+            <if test="query.orderByDesc!=null and query.orderByDesc.size > 0">
+                ,
+            </if>
+            <foreach item="ascItem" index="index" collection="query.orderByAsc" open="" separator="," close="">
+                ${ascItem} asc
+            </foreach>
+        </if>
+    </select>
 </mapper>

+ 11 - 2
coffee-system/src/main/resources/mapper/bus/BusPatientMapper.xml

@@ -222,6 +222,9 @@
                     #{type, jdbcType=VARCHAR}
                 </foreach>
             </if>
+            <if test="query.tenantId!=null">
+                and tenant_id=#{query.tenantId}
+            </if>
             <choose>
                 <when test="query.deviceStatus != null and query.deviceStatus.size > 0">
                     and (
@@ -256,7 +259,7 @@
                     and (
                     <choose>
                         <when test="query.warnWillFinished != false">warn_will_finished=1</when>
-                        <otherwise>warn_will_finished!=1</otherwise>
+                        <otherwise>0=1</otherwise>
                     </choose>
                     <if test="query.warnAnalgesicPoor != false">or warn_analgesic_poor=1 </if>
                     <if test="query.warnLowBattery != false"> or warn_low_battery=1 </if>
@@ -273,7 +276,13 @@
             </choose>
         </where>
         ) as i on p.infusion_id=i.id
-        left join (select device_id,alias from bus_device) as d on d.device_id=i.device_id
+        left join (select device_id,alias
+         from bus_device
+        <where>
+            <if test="query.tenantId!=null">
+                and tenant_id=#{query.tenantId}
+            </if>
+        </where>) as d on d.device_id=i.device_id
         join (select * from bus_clinic
         <where>
             finished=0