diff --git a/auth/src/main/java/com/rax/auth/support/handler/RaxAuthenticationFailureEventHandler.java b/auth/src/main/java/com/rax/auth/support/handler/RaxAuthenticationFailureEventHandler.java index af27a33..b3b9d99 100644 --- a/auth/src/main/java/com/rax/auth/support/handler/RaxAuthenticationFailureEventHandler.java +++ b/auth/src/main/java/com/rax/auth/support/handler/RaxAuthenticationFailureEventHandler.java @@ -54,6 +54,7 @@ public class RaxAuthenticationFailureEventHandler implements AuthenticationFailu logVo.setTitle("登录失败"); logVo.setLogType(LogTypeEnum.ERROR.getType()); logVo.setException(exception.getLocalizedMessage()); + logVo.setCreateBy(username); // 发送异步日志事件 String startTimeStr = request.getHeader(CommonConstants.REQUEST_START_TIME); if (StrUtil.isNotBlank(startTimeStr)) { diff --git a/common/common-core/src/main/java/com/rax/common/core/util/RedisUtils.java b/common/common-core/src/main/java/com/rax/common/core/util/RedisUtils.java index ff5fe37..3bc1d9c 100644 --- a/common/common-core/src/main/java/com/rax/common/core/util/RedisUtils.java +++ b/common/common-core/src/main/java/com/rax/common/core/util/RedisUtils.java @@ -118,10 +118,11 @@ public class RedisUtils { */ public void del(String... keys) { RedisTemplate redisTemplate = SpringContextHolder.getBean(RedisTemplate.class); - Optional.ofNullable(keys) - .map(Arrays::asList) - .filter(keysList -> !keysList.isEmpty()) - .ifPresent(redisTemplate::delete); +// Optional.ofNullable(keys) +// .map(Arrays::asList) +// .filter(keysList -> !keysList.isEmpty()) +// .ifPresent(redisTemplate::delete); + redisTemplate.delete(Arrays.asList(keys)); } /** diff --git a/common/common-security/src/main/java/com/rax/common/security/util/SecurityUtils.java b/common/common-security/src/main/java/com/rax/common/security/util/SecurityUtils.java index 3b6052b..339ccf7 100644 --- a/common/common-security/src/main/java/com/rax/common/security/util/SecurityUtils.java +++ b/common/common-security/src/main/java/com/rax/common/security/util/SecurityUtils.java @@ -92,4 +92,5 @@ public class SecurityUtils { List roleCodeList = user.getRoleCodeList(); return roleCodeList.contains(roleCode); } + } diff --git a/quartz/src/main/java/com/rax/daemon/quartz/controller/SysJobLogController.java b/quartz/src/main/java/com/rax/daemon/quartz/controller/SysJobLogController.java index 64d701d..cec3f93 100644 --- a/quartz/src/main/java/com/rax/daemon/quartz/controller/SysJobLogController.java +++ b/quartz/src/main/java/com/rax/daemon/quartz/controller/SysJobLogController.java @@ -1,65 +1,65 @@ -/* - * Copyright (c) 2018-2025, lengleng All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * Neither the name of the pig4cloud.com developer nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * Author: lengleng (wangiegie@gmail.com) - */ - -package com.rax.daemon.quartz.controller; - -import cn.hutool.core.collection.CollUtil; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.rax.common.core.util.R; -import com.rax.daemon.quartz.entity.SysJobLog; -import com.rax.daemon.quartz.service.SysJobLogService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.security.SecurityRequirement; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.AllArgsConstructor; -import org.springframework.http.HttpHeaders; -import org.springframework.web.bind.annotation.*; - -/** - * @author frwcloud - *

- * 定时任务执行日志表 - */ -@RestController -@AllArgsConstructor -@RequestMapping("/sys-job-log") -@Tag(description = "sys-job-log", name = "定时任务日志") -@SecurityRequirement(name = HttpHeaders.AUTHORIZATION) -public class SysJobLogController { - - private final SysJobLogService sysJobLogService; - - /** - * 分页查询 - * @param page 分页对象 - * @param sysJobLog 定时任务执行日志表 - * @return - */ - @GetMapping("/page") - @Operation(description = "分页定时任务日志查询") - public R getSysJobLogPage(Page page, SysJobLog sysJobLog) { - return R.ok(sysJobLogService.page(page, Wrappers.query(sysJobLog))); - } - - @DeleteMapping - @Operation(description = "批量删除日志") - public R deleteLogs(@RequestBody Long[] ids) { - return R.ok(sysJobLogService.removeBatchByIds(CollUtil.toList(ids))); - } - -} +///* +// * Copyright (c) 2018-2025, lengleng All rights reserved. +// * +// * Redistribution and use in source and binary forms, with or without +// * modification, are permitted provided that the following conditions are met: +// * +// * Redistributions of source code must retain the above copyright notice, +// * this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright +// * notice, this list of conditions and the following disclaimer in the +// * documentation and/or other materials provided with the distribution. +// * Neither the name of the pig4cloud.com developer nor the names of its +// * contributors may be used to endorse or promote products derived from +// * this software without specific prior written permission. +// * Author: lengleng (wangiegie@gmail.com) +// */ +// +//package com.rax.daemon.quartz.controller; +// +//import cn.hutool.core.collection.CollUtil; +//import com.baomidou.mybatisplus.core.toolkit.Wrappers; +//import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +//import com.rax.common.core.util.R; +//import com.rax.daemon.quartz.entity.SysJobLog; +//import com.rax.daemon.quartz.service.SysJobLogService; +//import io.swagger.v3.oas.annotations.Operation; +//import io.swagger.v3.oas.annotations.security.SecurityRequirement; +//import io.swagger.v3.oas.annotations.tags.Tag; +//import lombok.AllArgsConstructor; +//import org.springframework.http.HttpHeaders; +//import org.springframework.web.bind.annotation.*; +// +///** +// * @author frwcloud +// *

+// * 定时任务执行日志表 +// */ +//@RestController +//@AllArgsConstructor +//@RequestMapping("/sys-job-log") +//@Tag(description = "sys-job-log", name = "定时任务日志") +//@SecurityRequirement(name = HttpHeaders.AUTHORIZATION) +//public class SysJobLogController { +// +// private final SysJobLogService sysJobLogService; +// +// /** +// * 分页查询 +// * @param page 分页对象 +// * @param sysJobLog 定时任务执行日志表 +// * @return +// */ +// @GetMapping("/page") +// @Operation(description = "分页定时任务日志查询") +// public R getSysJobLogPage(Page page, SysJobLog sysJobLog) { +// return R.ok(sysJobLogService.page(page, Wrappers.query(sysJobLog))); +// } +// +// @DeleteMapping +// @Operation(description = "批量删除日志") +// public R deleteLogs(@RequestBody Long[] ids) { +// return R.ok(sysJobLogService.removeBatchByIds(CollUtil.toList(ids))); +// } +// +//} diff --git a/upms/upms-api/src/main/java/com/rax/admin/api/dto/HospitalDTO.java b/upms/upms-api/src/main/java/com/rax/admin/api/dto/HospitalDTO.java index bb4b4de..5d2d5e4 100644 --- a/upms/upms-api/src/main/java/com/rax/admin/api/dto/HospitalDTO.java +++ b/upms/upms-api/src/main/java/com/rax/admin/api/dto/HospitalDTO.java @@ -34,4 +34,9 @@ public class HospitalDTO { @Schema(description = "域名") private String domain; + private String userId; + + @Schema(description = "医院管理员") + private String doctorName; + } diff --git a/upms/upms-biz/pom.xml b/upms/upms-biz/pom.xml index 5f37ffc..d293642 100644 --- a/upms/upms-biz/pom.xml +++ b/upms/upms-biz/pom.xml @@ -122,6 +122,16 @@ dysmsapi20170525 2.0.24 + + + org.springframework.boot + spring-boot-starter-test + + + + cn.hutool + hutool-core + diff --git a/upms/upms-biz/src/main/java/com/rax/RaxAdminApplication.java b/upms/upms-biz/src/main/java/com/rax/RaxAdminApplication.java index fcd4577..26bc9f2 100644 --- a/upms/upms-biz/src/main/java/com/rax/RaxAdminApplication.java +++ b/upms/upms-biz/src/main/java/com/rax/RaxAdminApplication.java @@ -5,6 +5,8 @@ import com.rax.common.swagger.annotation.EnableRaxDoc; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.FilterType; import org.springframework.scheduling.annotation.EnableScheduling; @@ -25,10 +27,20 @@ import org.springframework.scheduling.annotation.EnableScheduling; excludeFilters = { @ComponentScan.Filter(type = FilterType.REGEX, pattern = "com.rax.vital.v1.*") }) -public class RaxAdminApplication { +public class RaxAdminApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(RaxAdminApplication.class, args); } + /** + * @Description: 定时任务 + * @param: [application] + * @return: org.springframework.boot.builder.SpringApplicationBuilder + */ + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(RaxAdminApplication.class); + } + } diff --git a/upms/upms-biz/src/main/java/com/rax/admin/controller/SysHospitalController.java b/upms/upms-biz/src/main/java/com/rax/admin/controller/SysHospitalController.java index 85247d5..2b1e5a9 100644 --- a/upms/upms-biz/src/main/java/com/rax/admin/controller/SysHospitalController.java +++ b/upms/upms-biz/src/main/java/com/rax/admin/controller/SysHospitalController.java @@ -5,14 +5,12 @@ import com.rax.admin.api.entity.SysHospital; import com.rax.admin.service.SysHospitalService; import com.rax.common.core.util.R; import com.rax.common.log.annotation.SysLog; -import com.rax.common.security.service.RaxUser; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -78,29 +76,33 @@ public class SysHospitalController { return R.ok(myHospitalList); } - @SysLog(value = "添加医院管理员") - @PostMapping("/saveHospitalManager") - @Operation(description = "添加医院管理员", summary = "添加医院管理员") - @PreAuthorize("@pms.hasPermission('sys_hospital_manager_add')") - R saveHospitalManager(String userId, String hospitalId) { - boolean status = sysHospitalService.saveHospitalManager(userId, hospitalId); - return R.ok(status); - } +// @SysLog(value = "添加医院管理员") +// @PostMapping("/saveHospitalManager") +// @Operation(description = "添加医院管理员", summary = "添加医院管理员") +// @PreAuthorize("@pms.hasPermission('sys_hospital_manager_add')") +// R saveHospitalManager(String userId, String hospitalId) { +// boolean status = sysHospitalService.saveHospitalManager(userId, hospitalId); +// return R.ok(status); +// } - @PostMapping("/getHospitalManager") - @Operation(description = "获取医院管理员", summary = "获取医院呢管理员") - R getHospitalManager(String hospitalId) { - List list = sysHospitalService.getHospitalManager(hospitalId); - return R.ok(list); - } +// @PostMapping("/getHospitalManager") +// @Operation(description = "获取医院管理员", summary = "获取医院呢管理员") +// R getHospitalManager(String hospitalId) { +// List list = sysHospitalService.getHospitalManager(hospitalId); +// return R.ok(list); +// } + + /** + * changeHostpital, 切换医院, 可以把token中的医院id修改为指定的医院id + * @param id 医院id + * @return + */ @PostMapping("/changeHospital") @PreAuthorize("@pms.hasPermission('sys_hospital_change')") @SysLog(value = "切换医院") R changeHospital(String id) { - RaxUser raxUser = (RaxUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - String userId = String.valueOf(raxUser.getId()); - return R.ok(sysHospitalService.changeHospital(id, userId)); + return R.ok(sysHospitalService.changeHospital(id)); } @PostMapping("/getCurrentHospital") diff --git a/upms/upms-biz/src/main/java/com/rax/admin/controller/SysMessageController.java b/upms/upms-biz/src/main/java/com/rax/admin/controller/SysMessageController.java index 6c805da..f45bc6f 100644 --- a/upms/upms-biz/src/main/java/com/rax/admin/controller/SysMessageController.java +++ b/upms/upms-biz/src/main/java/com/rax/admin/controller/SysMessageController.java @@ -5,9 +5,9 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.rax.admin.api.entity.SysMessage; import com.rax.admin.api.vo.SysMessageVO; -import com.rax.admin.service.SysHospitalService; import com.rax.admin.service.SysMessageService; import com.rax.common.core.util.R; +import com.rax.common.log.annotation.SysLog; import com.rax.common.security.service.RaxUser; import com.rax.common.security.util.SecurityUtils; import io.swagger.v3.oas.annotations.tags.Tag; @@ -26,11 +26,10 @@ public class SysMessageController { @Autowired private SysMessageService sysMessageService; - @Autowired - private SysHospitalService sysHospitalService; @PostMapping("/save") @PreAuthorize("@pms.hasPermission('sys_msg_add')") + @SysLog(value = "发布系统消息") public R save(SysMessageVO sysMessageVO) { return sysMessageService.saveMessage(sysMessageVO); } diff --git a/upms/upms-biz/src/main/java/com/rax/admin/controller/SysUserController.java b/upms/upms-biz/src/main/java/com/rax/admin/controller/SysUserController.java index bcd71c6..f0d7e24 100644 --- a/upms/upms-biz/src/main/java/com/rax/admin/controller/SysUserController.java +++ b/upms/upms-biz/src/main/java/com/rax/admin/controller/SysUserController.java @@ -1,6 +1,5 @@ package com.rax.admin.controller; -import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -10,6 +9,7 @@ import com.rax.admin.api.vo.UserExcelVO; import com.rax.admin.service.SysHospitalService; import com.rax.admin.service.SysRoleService; import com.rax.admin.service.SysUserService; +import com.rax.admin.utils.AuthUtils; import com.rax.common.core.constant.CommonConstants; import com.rax.common.core.exception.ErrorCodes; import com.rax.common.core.util.MsgUtils; @@ -191,14 +191,21 @@ public class SysUserController { @PostMapping("/page") public R getUserPage(Page page, UserDTO userDTO) { RaxUser user = SecurityUtils.getUser(); - if (ObjectUtil.isNotNull(user.getHospitalId())) { + System.out.println("user = " + user); + boolean access = AuthUtils.authAdmin(user); + if (!access) { userDTO.setHospitalId(user.getHospitalId()); - } else { - Boolean adminRole = SecurityUtils.hasRoleCode(ADMIN_ROLE_CODE); - if (!adminRole) { - return R.ok(new Page<>()); + }else { + // 超级管理员查询, 获取当前医院 + Long currentHospital = AuthUtils.getCurrentHospital(user); + System.out.println("currentHospital = " + currentHospital); + if (currentHospital != null && currentHospital == 0) { + userDTO.setHospitalId(null); + } else { + userDTO.setHospitalId(currentHospital); } } + return R.ok(userService.getUsersWithRolePage(page, userDTO)); } diff --git a/upms/upms-biz/src/main/java/com/rax/admin/immu/RoleRecord.java b/upms/upms-biz/src/main/java/com/rax/admin/immu/RoleRecord.java index ba98232..00a59bb 100644 --- a/upms/upms-biz/src/main/java/com/rax/admin/immu/RoleRecord.java +++ b/upms/upms-biz/src/main/java/com/rax/admin/immu/RoleRecord.java @@ -6,6 +6,6 @@ package com.rax.admin.immu; */ public record RoleRecord() { - public static final String ADMIN_ROLE_CODE = "ROLE_ADMIN"; + public final static String ADMIN_ROLE_CODE = "ROLE_ADMIN"; public static final String SITE_ROLE_CODE = "ROLE_CHIEF"; } diff --git a/upms/upms-biz/src/main/java/com/rax/admin/mapper/SysLogMapper.java b/upms/upms-biz/src/main/java/com/rax/admin/mapper/SysLogMapper.java index dd16776..8a0e964 100644 --- a/upms/upms-biz/src/main/java/com/rax/admin/mapper/SysLogMapper.java +++ b/upms/upms-biz/src/main/java/com/rax/admin/mapper/SysLogMapper.java @@ -15,5 +15,15 @@ import java.util.Map; */ @Mapper public interface SysLogMapper extends BaseMapper { - List getMonthlyLogCount(@Param("startTime") String startTime, @Param("endTime") String endTime); + + List getMonthlyLogCount(@Param("startTime") String startTime, @Param("endTime") String endTime, + @Param("hospitalId") String hospitalId, @Param("username") String username); + + /** + * 根据传入的id列表批量删除日志,硬删除 + * @param idList + */ + void deleteBatchByIds(List idList); + + List selectListByTime(@Param("username") String username,@Param("time") String time); } diff --git a/upms/upms-biz/src/main/java/com/rax/admin/service/SysHospitalService.java b/upms/upms-biz/src/main/java/com/rax/admin/service/SysHospitalService.java index b4b7d26..7fee67b 100644 --- a/upms/upms-biz/src/main/java/com/rax/admin/service/SysHospitalService.java +++ b/upms/upms-biz/src/main/java/com/rax/admin/service/SysHospitalService.java @@ -70,14 +70,6 @@ public interface SysHospitalService extends IService { */ boolean saveHospitalManager(String userId, String hospitalId); - /** - * 获取医院管理人员 - * @param hospitalId - * @return - */ - List getHospitalManager(String hospitalId); - - boolean changeHospital(String id, String userId); String getCurrentHospital(); @@ -85,4 +77,5 @@ public interface SysHospitalService extends IService { Map getCountByCity(String province); + boolean changeHospital(String id); } diff --git a/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SendSmsService.java b/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SendSmsService.java deleted file mode 100644 index 92b9642..0000000 --- a/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SendSmsService.java +++ /dev/null @@ -1,64 +0,0 @@ -//package com.rax.vital.util; -// -//import com.aliyun.dysmsapi20170525.Client; -//import com.aliyun.dysmsapi20170525.models.SendSmsRequest; -//import com.aliyun.teaopenapi.models.Config; -//import com.aliyun.teautil.models.RuntimeOptions; -//import com.aliyuncs.exceptions.ClientException; -//import com.rax.admin.config.SmsProperties; -//import lombok.Data; -//import lombok.extern.slf4j.Slf4j; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.beans.factory.annotation.Value; -//import org.springframework.stereotype.Component; -// -// -//@Component -//@Slf4j -//@Data -//public class SendSmsService { -// -// @Autowired -// private SmsProperties smsProperties; -// -// private String REGION_ID = "cn-hangzhou"; -// private String PRODUCT = "Dysmsapi"; -// private String ENDPOINT = "dysmsapi.aliyuncs.com"; -// -// /** -// * 发送短信通知 -// * -// * @param mobile 手机号 -// * @param code 验证码 -// * @return 执行结果 -// */ -// public boolean sendSMS(String mobile, String code) { -// try { -// Config config = new Config(); -// config.setAccessKeyId(smsProperties.getAccessKeyId()); -// config.setAccessKeySecret(smsProperties.getAccessSecret()); -// config.endpoint = ENDPOINT; -// -// Client client = new Client(config); -// -// -// SendSmsRequest request = new SendSmsRequest() -// .setSignName(smsProperties.getSignName()) -// .setTemplateCode(smsProperties.getTemplateCode()); -// -// request.setPhoneNumbers(mobile); -// request.setTemplateParam("{\"code\":\"" + code + "\"}"); -// -// RuntimeOptions runtimeOptions = new RuntimeOptions(); -// client.sendSmsWithOptions(request, runtimeOptions); -// return true; -// } catch (ClientException e) { -// log.error("发送短信失败{}", e.getMessage()); -// return false; -// } catch (Exception e) { -// log.error("发送短信失败{}", e.getMessage()); -// return false; -// } -// } -//} -// diff --git a/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SysHospitalServiceImpl.java b/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SysHospitalServiceImpl.java index 38e86ac..2445f62 100644 --- a/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SysHospitalServiceImpl.java +++ b/upms/upms-biz/src/main/java/com/rax/admin/service/impl/SysHospitalServiceImpl.java @@ -1,21 +1,24 @@ package com.rax.admin.service.impl; +import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.rax.admin.api.dto.HospitalDTO; import com.rax.admin.api.entity.SysHospital; +import com.rax.admin.immu.RoleRecord; import com.rax.admin.mapper.SysHospitalMapper; import com.rax.admin.service.SysHospitalService; -import com.rax.admin.service.SysRoleService; +import com.rax.admin.utils.AuthUtils; import com.rax.common.core.constant.CacheConstants; import com.rax.common.core.util.R; +import com.rax.common.core.util.RedisUtils; import com.rax.common.security.service.RaxUser; import com.rax.common.security.util.SecurityUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -32,11 +35,6 @@ public class SysHospitalServiceImpl extends ServiceImpl getHospitalById(String id) { SysHospital sysHospital = getById(id); @@ -69,12 +67,15 @@ public class SysHospitalServiceImpl extends ServiceImpl getHospitalList(String name, long offset, long limit) { - List hospitalList = sysHospitalMapper.getHospitalList(limit, offset, name); - Integer hospitalTotal = sysHospitalMapper.getHospitalTotal(); - +// List hospitalList = sysHospitalMapper.getHospitalList(limit, offset, name); +// Integer hospitalTotal = sysHospitalMapper.getHospitalTotal(); + Page page = this.lambdaQuery() + .eq(SysHospital::getDelFlag, 0) + .like(name != null, SysHospital::getName, name) + .page(new Page<>(offset, limit)); Map result = new HashMap(); - result.put("total", hospitalTotal); - result.put("list", hospitalList); + result.put("total", page.getTotal()); + result.put("list", page.getRecords()); return R.ok(result); } @@ -95,6 +96,16 @@ public class SysHospitalServiceImpl extends ServiceImpl list = this.lambdaQuery() + .eq(SysHospital::getDelFlag, 0) + .list(); + SysHospital sysHospital = new SysHospital(); + sysHospital.setId(0L); + sysHospital.setName("全部医院"); + list.add(0, sysHospital); + return list; + } Long hospitalId = SecurityUtils.getUser().getHospitalId(); if (hospitalId != null) { List oneHospitalList = this.lambdaQuery() @@ -102,13 +113,6 @@ public class SysHospitalServiceImpl extends ServiceImpl list = this.lambdaQuery().list(); - SysHospital sysHospital = new SysHospital(); - sysHospital.setName("全部医院"); - list.add(0,sysHospital); - return list; - } return null; } @@ -122,36 +126,17 @@ public class SysHospitalServiceImpl extends ServiceImpl currentHospital = sysHospitalMapper.getCurrentHospital(userId); - if (currentHospital.isEmpty()) { - hospitalId = raxUser.getHospitalId() != null ? raxUser.getHospitalId().toString() : null; - } else { - hospitalId = (String) currentHospital.get(0).get("hospital_id"); - } - } + RaxUser user = SecurityUtils.getUser(); + String key = CacheConstants.CURRENT_HOSPITAL + ":" + user.getId(); + if (RedisUtils.hasKey(key)) { + return Convert.toStr(RedisUtils.get(key)); + } else { + RedisUtils.set(key, user.getHospitalId()); + return Convert.toStr(user.getHospitalId()); } - return hospitalId; } @Override @@ -173,4 +158,22 @@ public class SysHospitalServiceImpl extends ServiceImpl implements SysLogService { - private final static String ADMIN_ROLE_CODE = "ROLE_ADMIN"; - - private final static String SITE_ROLE_CODE = "ROLE_CHIEF"; @Autowired - private SysRoleService roleService; - - @Autowired - private SysUserService userService; - + private SysUserMapper sysUserMapper; /** * 三种情况 - * 系统管理员可以查看全部的日志信息 + * 系统管理员可以查看全部的日志信息, 且切换医院时只能看到当前医院的日志信息 * 站点管理员可以查看自己所属医院的日志信息 * 普通用户只能查看自己的日志信息 */ @@ -61,20 +56,34 @@ public class SysLogServiceImpl extends ServiceImpl impleme // 当月的最后一天 LocalDateTime lastDayOfMonth = now.with(TemporalAdjusters.lastDayOfMonth()); if (roleCodeList.contains(RoleRecord.ADMIN_ROLE_CODE)) { - // 查看三十天的所有日志信息 - List list = this.lambdaQuery() - .ge(SysLog::getCreateTime, firstDayOfMonth) - .le(SysLog::getCreateTime, lastDayOfMonth) - .orderByDesc(SysLog::getCreateTime).list(); + Long currentHospital = AuthUtils.getCurrentHospital(user); + List list; Page logPage = new Page<>(); + if (currentHospital == 0) { + // 查看三十天的所有日志信息 + list = this.lambdaQuery() + .ge(SysLog::getCreateTime, firstDayOfMonth) + .le(SysLog::getCreateTime, lastDayOfMonth) + .eq(sysLog.getLogType() != null, SysLog::getLogType, sysLog.getLogType()) + .orderByDesc(SysLog::getCreateTime).list(); + }else { + list = this.lambdaQuery() + .eq(SysLog::getHospitalId, currentHospital) + .eq(sysLog.getLogType() != null, SysLog::getLogType, sysLog.getLogType()) + .ge(SysLog::getCreateTime, firstDayOfMonth) + .le(SysLog::getCreateTime, lastDayOfMonth) + .orderByDesc(SysLog::getCreateTime).list(); + } logPage.setRecords(list) .setTotal(list.size()); return logPage; + } if (roleCodeList.contains(RoleRecord.SITE_ROLE_CODE)) { // 查看自己所属医院的日志信息 List list = this.lambdaQuery() .eq(SysLog::getHospitalId, user.getHospitalId()) + .eq(sysLog.getLogType() != null, SysLog::getLogType, sysLog.getLogType()) .ge(SysLog::getCreateTime, firstDayOfMonth) .le(SysLog::getCreateTime, lastDayOfMonth) .orderByDesc(SysLog::getCreateTime).list(); @@ -86,6 +95,7 @@ public class SysLogServiceImpl extends ServiceImpl impleme // 返回自己的日志信息 List list = this.lambdaQuery() .eq(SysLog::getCreateBy, user.getName()) + .eq(sysLog.getLogType() != null, SysLog::getLogType, sysLog.getLogType()) .ge(SysLog::getCreateTime, firstDayOfMonth) .le(SysLog::getCreateTime, lastDayOfMonth) .orderByDesc(SysLog::getCreateTime).list(); @@ -104,13 +114,43 @@ public class SysLogServiceImpl extends ServiceImpl impleme @Override @Transactional(rollbackFor = Exception.class) public Boolean saveLog(SysLog sysLog) { - sysLog.setHospitalId(SecurityUtils.getUser().getHospitalId()); + // 获取到医院ID + LambdaQueryWrapper userLambdaQueryWrapper = new LambdaQueryWrapper<>(); + userLambdaQueryWrapper.eq(SysUser::getUsername, sysLog.getCreateBy()); + SysUser sysUser = sysUserMapper.selectOne(userLambdaQueryWrapper); + // 设置到日志对象中 + sysLog.setHospitalId(sysUser.getHospitalId()); baseMapper.insert(sysLog); return Boolean.TRUE; } + /** + * map中的字段 + * date: + * count: + * + * @param startTime + * @param endTime + * @return + */ @Override public List getMonthlyLogCount(String startTime, String endTime) { - return baseMapper.getMonthlyLogCount(startTime, endTime); + RaxUser user = SecurityUtils.getUser(); + List roleCodeList = user.getRoleCodeList(); + + if (roleCodeList.contains(RoleRecord.ADMIN_ROLE_CODE)) { + // 返回全部的 + Long currentHospital = AuthUtils.getCurrentHospital(user); + if (currentHospital == 0) { + return baseMapper.getMonthlyLogCount(startTime, endTime, null, null); + } + return baseMapper.getMonthlyLogCount(startTime, endTime, String.valueOf(currentHospital), null); + } + if (roleCodeList.contains(RoleRecord.SITE_ROLE_CODE)) { + // 返回医院的日志数量 + return baseMapper.getMonthlyLogCount(startTime, endTime, String.valueOf(user.getHospitalId()), null); + } + // 返回自己的日志数量 + return baseMapper.getMonthlyLogCount(startTime, endTime, null, user.getName()); } } diff --git a/upms/upms-biz/src/main/java/com/rax/vital/common/util/DBNameTest.java b/upms/upms-biz/src/main/java/com/rax/vital/common/util/DBNameTest.java index 679cc4a..687e16f 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/common/util/DBNameTest.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/common/util/DBNameTest.java @@ -1,6 +1,10 @@ package com.rax.vital.common.util; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.Date; /** * project_name:remote-control-backend @@ -12,5 +16,20 @@ public class DBNameTest { String idNum = DatabaseNameUtil.encrypt("10"); System.out.println("DBName = " + patientName + "_" + idNum); + + String date = getDate(new Date(), 10); + System.out.println("date = " + date); + } + + public static String getDate(Date now, int days){ + // 将 java.util.Date 转换为 java.time.LocalDateTime + LocalDateTime localDateTime = now.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + + // 计算 days 天前的日期时间 + LocalDateTime daysAgo = localDateTime.minusDays(days); + + // 格式化为年月日时分秒 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + return daysAgo.format(formatter); } } diff --git a/upms/upms-biz/src/main/java/com/rax/vital/common/util/GetHttpParamUtil.java b/upms/upms-biz/src/main/java/com/rax/vital/common/util/GetHttpParamUtil.java index 8468bf5..589e750 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/common/util/GetHttpParamUtil.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/common/util/GetHttpParamUtil.java @@ -5,9 +5,14 @@ import java.util.Map; public class GetHttpParamUtil { - public static Map getParams(String url) { - String[] paramArr = url.split("&"); - Map params = new HashMap(); + /** + * + * @param paramsStr uri.getQuery() 获取到的query = a=1&b=2 ... 字符串 + * @return + */ + public static Map getParams(String paramsStr) { + String[] paramArr = paramsStr.split("&"); + Map params = new HashMap<>(); for (String s : paramArr) { if (s.contains("=")) { String[] keyValue = s.split("="); @@ -16,4 +21,8 @@ public class GetHttpParamUtil { } return params; } + + public static String getParam(String paramsStr, String key) { + return getParams(paramsStr).get(key); + } } diff --git a/upms/upms-biz/src/main/java/com/rax/vital/v2/config/WebSocketConfig.java b/upms/upms-biz/src/main/java/com/rax/vital/v2/config/WebSocketConfig.java index bdac6f0..c3eab0c 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/v2/config/WebSocketConfig.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/v2/config/WebSocketConfig.java @@ -5,26 +5,32 @@ import com.rax.vital.v2.handler.ChatHandler; import com.rax.vital.v2.handler.MachineFeedbackHandler; import com.rax.vital.v2.handler.MedicineHandler; import com.rax.vital.v2.interceptor.WebSocketInterceptors; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; -import org.springframework.web.socket.server.HandshakeInterceptor; +import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor; @EnableWebSocket @Configuration public class WebSocketConfig implements WebSocketConfigurer { + @Autowired + private WebSocketInterceptors webSocketInterceptors; + + + @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(medicineHandler(), "/rax/vitalSignsMedicine") .addHandler(chatHandler(), "/rax/chatRoom") .addHandler(addMedicineHandler(), "/rax/addMedicine") .addHandler(machineFeedbackHandler(),"/rax/getMedicine") -// .addInterceptors(new HttpSessionHandshakeInterceptor()) -// .addInterceptors(webSocketInterceptors()) + .addInterceptors(new HttpSessionHandshakeInterceptor()) + .addInterceptors(webSocketInterceptors) .setAllowedOrigins("*"); } @@ -48,8 +54,4 @@ public class WebSocketConfig implements WebSocketConfigurer { return new MachineFeedbackHandler(); } - @Bean - public HandshakeInterceptor webSocketInterceptors() { - return new WebSocketInterceptors(); - } } diff --git a/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/AddMedicineHandler.java b/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/AddMedicineHandler.java index c608fa8..40d3918 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/AddMedicineHandler.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/AddMedicineHandler.java @@ -13,6 +13,7 @@ import org.springframework.security.oauth2.server.authorization.OAuth2Authorizat import org.springframework.security.oauth2.server.authorization.OAuth2TokenType; import org.springframework.web.socket.*; +import java.net.URI; import java.net.URLDecoder; import java.util.Date; import java.util.Map; @@ -41,6 +42,8 @@ public class AddMedicineHandler implements WebSocketHandler { @Override public void afterConnectionEstablished(WebSocketSession session) { + URI uri = session.getUri(); + System.out.println("uri = " + uri); startHeartbeat(session); } @@ -81,28 +84,6 @@ public class AddMedicineHandler implements WebSocketHandler { aiMedicineTimer.sendWebRequestConnectionMsg(patientName, idNum, date, databaseName, webRequestFlag); } -// if (aiMedicineTimer.getUnitySession(databaseName) != null) { -// JSONObject result = new JSONObject(); -// result.put("msg", "unity端已登录"); -// result.put("msgType", "msg"); -// session.sendMessage(new TextMessage(result.toJSONString().getBytes())); -// } else { -// JSONObject result = new JSONObject(); -// result.put("msg", "unity端未登录"); -// result.put("msgType", "msg"); -// session.sendMessage(new TextMessage(result.toJSONString().getBytes())); -// } -// -// if (aiMedicineTimer.getWebSession(databaseName) != null) { -// JSONObject result = new JSONObject(); -// result.put("msg", "网页端已登录"); -// result.put("msgType", "msg"); -// session.sendMessage(new TextMessage(result.toJSONString().getBytes())); -// WebSocketSession unitySession = aiMedicineTimer.getUnitySession(databaseName); -// if (unitySession != null) { -// unitySession.sendMessage(new TextMessage(result.toJSONString().getBytes())); -// } -// } // 处理发送给药相关 if ("addMedicine".equals(msgType) && aiMedicineTimer.getWebSession(databaseName) != null && aiMedicineTimer.getUnitySession(databaseName) != null diff --git a/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/MedicineHandler.java b/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/MedicineHandler.java index 4fb211e..a83649d 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/MedicineHandler.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/v2/handler/MedicineHandler.java @@ -5,6 +5,7 @@ import com.rax.vital.common.util.DatabaseNameUtil; import com.rax.vital.common.util.GetHttpParamUtil; import com.rax.vital.v2.timer.VitalSignTimerV2; import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; import org.springframework.security.oauth2.server.authorization.OAuth2Authorization; import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService; import org.springframework.security.oauth2.server.authorization.OAuth2TokenType; @@ -20,6 +21,8 @@ import java.util.concurrent.TimeUnit; /** * 生命体征和标志位信息 */ + +@Slf4j public class MedicineHandler implements WebSocketHandler { @@ -29,7 +32,7 @@ public class MedicineHandler implements WebSocketHandler { @Resource private OAuth2AuthorizationService authorizationService; - private Map timerTaskMap = new ConcurrentHashMap(); + private Map timerTaskMap = new ConcurrentHashMap<>(); @Override public void afterConnectionEstablished(WebSocketSession session) { @@ -58,14 +61,12 @@ public class MedicineHandler implements WebSocketHandler { @Override public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { - System.out.println("Error: " + exception.getMessage()); stopHeartbeat(session); vitalSignTimerV2.stopTimerTask(session.getId()); } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception { - System.out.println("MedicineHandler Connection closed:" + closeStatus.getReason()); stopHeartbeat(session); vitalSignTimerV2.stopTimerTask(session.getId()); } diff --git a/upms/upms-biz/src/main/java/com/rax/vital/v2/interceptor/WebSocketInterceptors.java b/upms/upms-biz/src/main/java/com/rax/vital/v2/interceptor/WebSocketInterceptors.java index 0272f79..4353072 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/v2/interceptor/WebSocketInterceptors.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/v2/interceptor/WebSocketInterceptors.java @@ -7,23 +7,32 @@ import org.springframework.http.server.ServerHttpResponse; import org.springframework.security.oauth2.server.authorization.OAuth2Authorization; import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService; import org.springframework.security.oauth2.server.authorization.OAuth2TokenType; +import org.springframework.stereotype.Component; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.server.HandshakeInterceptor; -import java.net.URLDecoder; import java.util.Map; + +@Component public class WebSocketInterceptors implements HandshakeInterceptor { @Resource private OAuth2AuthorizationService authorizationService; - + /** + * 在这里做一个全局的日志插入根据路径匹配不同的操作title + * @param request + * @param response + * @param wsHandler + * @param attributes + * @return + * @throws Exception + */ @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map attributes) throws Exception { - String decode = URLDecoder.decode(request.getURI().getQuery()); - Map params = GetHttpParamUtil.getParams(decode); - String token = (String) params.get("token"); + String query = request.getURI().getQuery(); + String token = GetHttpParamUtil.getParam(query, "token"); OAuth2Authorization authorization = authorizationService.findByToken(token, OAuth2TokenType.ACCESS_TOKEN); if (authorization == null ) { return false; diff --git a/upms/upms-biz/src/main/java/com/rax/vital/v2/medicine/service/impl/SurgeryServiceV2Impl.java b/upms/upms-biz/src/main/java/com/rax/vital/v2/medicine/service/impl/SurgeryServiceV2Impl.java index f2ce0bc..3f3a3e0 100644 --- a/upms/upms-biz/src/main/java/com/rax/vital/v2/medicine/service/impl/SurgeryServiceV2Impl.java +++ b/upms/upms-biz/src/main/java/com/rax/vital/v2/medicine/service/impl/SurgeryServiceV2Impl.java @@ -119,9 +119,15 @@ public class SurgeryServiceV2Impl implements SurgeryServiceV2 { MongoTemplate template = mongoDBSource.getConnection(); List operations = new ArrayList<>(); - Criteria criteria = new Criteria("Time"); - criteria.gte(start); - criteria.lte(end); +// Criteria criteria = new Criteria("Time"); +// criteria.gte(start); +// criteria.lte(end); + + Criteria criteria = Criteria.where("Time") + .gte(start) + .lte(end); + + operations.add(Aggregation.match(criteria)); ProjectionOperation timeToDateOperation = Aggregation.project() diff --git a/upms/upms-biz/src/main/resources/application.yml b/upms/upms-biz/src/main/resources/application.yml index 346f6ac..15b154b 100644 --- a/upms/upms-biz/src/main/resources/application.yml +++ b/upms/upms-biz/src/main/resources/application.yml @@ -103,6 +103,7 @@ mybatis-plus: jdbc-type-for-null: 'null' call-setters-on-nulls: true shrink-whitespaces-in-sql: true +# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl --- spring: diff --git a/upms/upms-biz/src/main/resources/mapper/SysHospitalMapper.xml b/upms/upms-biz/src/main/resources/mapper/SysHospitalMapper.xml index 59797c7..48a2fa8 100644 --- a/upms/upms-biz/src/main/resources/mapper/SysHospitalMapper.xml +++ b/upms/upms-biz/src/main/resources/mapper/SysHospitalMapper.xml @@ -28,10 +28,24 @@ SELECT - date_format( create_time,'%Y-%m-%d') "date", COUNT(*) "count" + date_format( create_time,'%Y-%m-%d') "date", COUNT(*) "count" FROM `sys_log` - WHERE - create_time = ]]> #{startTime} AND create_time #{endTime} + WHERE 0 = 0 + + and hospital_id = #{hospitalId} + + + and create_by = #{username} + + + and create_time = ]]> #{startTime} + + + and create_time #{endTime} + GROUP BY date_format(create_time,'%Y-%m-%d') + + \ No newline at end of file diff --git a/upms/upms-biz/src/main/resources/mapper/SysUserMapper.xml b/upms/upms-biz/src/main/resources/mapper/SysUserMapper.xml index 3428e2c..8284740 100644 --- a/upms/upms-biz/src/main/resources/mapper/SysUserMapper.xml +++ b/upms/upms-biz/src/main/resources/mapper/SysUserMapper.xml @@ -143,25 +143,26 @@ @@ -218,7 +218,7 @@ SELECT user_id "id", name, hospital_id "hospitalId", phone FROM sys_user WHERE del_flag = 0 - AND hospital_id = #{hospitalId} + AND hospital_id = #{hospitalId} ORDER BY create_time DESC;