diff --git a/cloud-auth/src/main/java/cn/sh/stc/sict/cloud/auth/endpoint/SictTokenEndpoint.java b/cloud-auth/src/main/java/cn/sh/stc/sict/cloud/auth/endpoint/SictTokenEndpoint.java index b0410cd301d4c7c564b089673b7d67435dca6ffc..b6b5b9fe62d0d87695b4007ee9c07d093a44ecd3 100644 --- a/cloud-auth/src/main/java/cn/sh/stc/sict/cloud/auth/endpoint/SictTokenEndpoint.java +++ b/cloud-auth/src/main/java/cn/sh/stc/sict/cloud/auth/endpoint/SictTokenEndpoint.java @@ -1,18 +1,19 @@ package cn.sh.stc.sict.cloud.auth.endpoint; import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.sh.stc.sict.cloud.common.core.constant.Constant; import cn.sh.stc.sict.cloud.common.core.constant.PaginationConstants; import cn.sh.stc.sict.cloud.common.core.constant.RedisCacheConstant; import cn.sh.stc.sict.cloud.common.core.constant.SecurityConstants; import cn.sh.stc.sict.cloud.common.core.util.R; +import cn.sh.stc.sict.cloud.common.security.annotation.Inner; +import cn.sh.stc.sict.cloud.common.security.service.SictUser; import cn.sh.stc.sict.cloud.common.security.util.SysLogUtils; import cn.sh.stc.sict.cloud.upms.feign.RemoteLogService; import cn.sh.stc.sict.cloud.upms.model.SysLog; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import cn.sh.stc.sict.cloud.common.security.annotation.Inner; -import cn.sh.stc.sict.cloud.common.security.service.SictUser; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.CacheManager; @@ -45,125 +46,143 @@ import java.util.Map; @AllArgsConstructor @RequestMapping("/token") public class SictTokenEndpoint { - private static final String SICT_OAUTH_ACCESS = SecurityConstants.SICT_PREFIX + SecurityConstants.OAUTH_PREFIX + "auth_to_access:"; - private static final String SICT_ACCESS = SecurityConstants.SICT_PREFIX + SecurityConstants.OAUTH_PREFIX + "access:"; - private final TokenStore tokenStore; - private final RedisTemplate redisTemplate; - private final CacheManager cacheManager; - private final RemoteLogService remoteLogService; - - /** - * 认证页面 - * - * @return ModelAndView - */ - @GetMapping("/login") - public ModelAndView require() { - return new ModelAndView("ftl/login"); - } - - /** - * 退出token - * - * @param authHeader Authorization - */ - @DeleteMapping("/logout") - public R logout(HttpServletRequest request, - @RequestHeader(value = HttpHeaders.AUTHORIZATION, required = false) String authHeader) { - if (StrUtil.isBlank(authHeader)) { - return R.builder() - .code(Constant.BYTE_NO) - .data(Boolean.FALSE) - .msg("退出失败,token 为空").build(); - } - - String tokenValue = authHeader.replaceAll("(?i)Bearer", "").trim(); - OAuth2AccessToken accessToken = tokenStore.readAccessToken(tokenValue); - if (accessToken == null || StrUtil.isBlank(accessToken.getValue())) { - return new R(); - } - - OAuth2Authentication auth2Authentication = tokenStore.readAuthentication(accessToken); - String username = auth2Authentication.getName(); - SictUser user = (SictUser) cacheManager.getCache(RedisCacheConstant.USER_DETAILS).get(username).get(); - cacheManager.getCache(RedisCacheConstant.USER_DETAILS) - .evict(username); - tokenStore.removeAccessToken(accessToken); - SysLog sysLog = SysLogUtils.getSysLog(request, username); - sysLog.setTitle(username + "-用户登出"); - sysLog.setParams(user.getName()); - - sysLog.setServiceId(auth2Authentication.getOAuth2Request().getClientId()); - // 保存退出的token - String token = request.getHeader(HttpHeaders.AUTHORIZATION); - sysLog.setParams(token); - - remoteLogService.saveLog(sysLog, SecurityConstants.FROM_IN); - log.info("用户:{} 退出成功, token:{} 已注销", username, token); - - return new R<>(Boolean.TRUE); - } - - /** - * 令牌管理调用 - * - * @param token token - * @return - */ - @Inner - @DeleteMapping("/{token}") - public R delToken(@PathVariable("token") String token) { - OAuth2AccessToken oAuth2AccessToken = tokenStore.readAccessToken(token); - tokenStore.removeAccessToken(oAuth2AccessToken); - return new R<>(); - } - - - /** - * 查询token - * - * @param params 分页参数 - * @return - */ - @Inner - @PostMapping("/page") - public R tokenList(@RequestBody Map params) { - //根据分页参数获取对应数据 - String key = String.format("%s", SICT_OAUTH_ACCESS); - List pages = findKeysForPage(key, MapUtil.getInt(params, PaginationConstants.CURRENT) - , MapUtil.getInt(params, PaginationConstants.SIZE)); - - redisTemplate.setKeySerializer(new StringRedisSerializer()); - redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer()); - Page result = new Page(MapUtil.getInt(params, PaginationConstants.CURRENT), MapUtil.getInt(params, PaginationConstants.SIZE)); - result.setRecords(redisTemplate.opsForValue().multiGet(pages)); - result.setTotal(Long.valueOf(redisTemplate.keys(key).size())); - return new R<>(result); - } - - - private List findKeysForPage(String patternKey, int pageNum, int pageSize) { - ScanOptions options = ScanOptions.scanOptions().match(patternKey).build(); - RedisSerializer redisSerializer = (RedisSerializer) redisTemplate.getKeySerializer(); - Cursor cursor = (Cursor) redisTemplate.executeWithStickyConnection(redisConnection -> new ConvertingCursor<>(redisConnection.scan(options), redisSerializer::deserialize)); - List result = new ArrayList<>(); - int tmpIndex = 0; - int startIndex = (pageNum - 1) * pageSize; - int end = pageNum * pageSize; - - assert cursor != null; - while (cursor.hasNext()) { - if (tmpIndex >= startIndex && tmpIndex < end) { - result.add(cursor.next().toString()); - tmpIndex++; - continue; - } - if (tmpIndex >= end) { - break; - } - tmpIndex++; - cursor.next(); - } - return result; - } + private static final String SICT_OAUTH_ACCESS = SecurityConstants.SICT_PREFIX + SecurityConstants.OAUTH_PREFIX + "auth_to_access:"; + private static final String SICT_ACCESS = SecurityConstants.SICT_PREFIX + SecurityConstants.OAUTH_PREFIX + "access:"; + private final TokenStore tokenStore; + private final RedisTemplate redisTemplate; + private final CacheManager cacheManager; + private final RemoteLogService remoteLogService; + + /** + * 认证页面 + * + * @return ModelAndView + */ + @GetMapping("/login") + public ModelAndView require() { + return new ModelAndView("ftl/login"); + } + + /** + * 退出token + * + * @param authHeader Authorization + */ + @DeleteMapping("/logout") + public R logout(HttpServletRequest request, + @RequestHeader(value = HttpHeaders.AUTHORIZATION, required = false) String authHeader) { + if (StrUtil.isBlank(authHeader)) { + return R.builder() + .code(Constant.BYTE_NO) + .data(Boolean.FALSE) + .msg("退出失败,token 为空").build(); + } + + String tokenValue = authHeader.replaceAll("(?i)Bearer", "").trim(); + OAuth2AccessToken accessToken = tokenStore.readAccessToken(tokenValue); + if (accessToken == null || StrUtil.isBlank(accessToken.getValue())) { + return new R(); + } + + OAuth2Authentication auth2Authentication = tokenStore.readAuthentication(accessToken); + String username = auth2Authentication.getName(); + SictUser user = (SictUser) cacheManager.getCache(RedisCacheConstant.USER_DETAILS).get(username).get(); + cacheManager.getCache(RedisCacheConstant.USER_DETAILS) + .evict(username); + tokenStore.removeAccessToken(accessToken); + SysLog sysLog = SysLogUtils.getSysLog(request, username); + sysLog.setTitle(username + "-用户登出"); + sysLog.setParams(user.getName()); + + sysLog.setServiceId(auth2Authentication.getOAuth2Request().getClientId()); + // 保存退出的token + String token = request.getHeader(HttpHeaders.AUTHORIZATION); + sysLog.setParams(token); + + remoteLogService.saveLog(sysLog, SecurityConstants.FROM_IN); + log.info("用户:{} 退出成功, token:{} 已注销", username, token); + + return new R<>(Boolean.TRUE); + } + + /** + * 令牌管理调用 + * + * @param token token + * @return + */ + @Inner + @DeleteMapping("/{token}") + public R delToken(@PathVariable("token") String token) { + OAuth2AccessToken oAuth2AccessToken = tokenStore.readAccessToken(token); + tokenStore.removeAccessToken(oAuth2AccessToken); + return new R<>(); + } + + /** + * 令牌管理调用 + * + * @param token token + * @return + */ + @GetMapping("/check/{token}") + public R isValid(@PathVariable("token") String token) { + String tokenValue = token.replaceAll("(?i)Bearer", "").trim(); + OAuth2AccessToken accessToken = tokenStore.readAccessToken(tokenValue); + if (accessToken == null || StrUtil.isBlank(accessToken.getValue())) { + return new R(false); + } + + OAuth2Authentication auth2Authentication = tokenStore.readAuthentication(accessToken); + return new R<>(auth2Authentication.isAuthenticated()); + } + + + /** + * 查询token + * + * @param params 分页参数 + * @return + */ + @Inner + @PostMapping("/page") + public R tokenList(@RequestBody Map params) { + //根据分页参数获取对应数据 + String key = String.format("%s", SICT_OAUTH_ACCESS); + List pages = findKeysForPage(key, MapUtil.getInt(params, PaginationConstants.CURRENT) + , MapUtil.getInt(params, PaginationConstants.SIZE)); + + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer()); + Page result = new Page(MapUtil.getInt(params, PaginationConstants.CURRENT), MapUtil.getInt(params, PaginationConstants.SIZE)); + result.setRecords(redisTemplate.opsForValue().multiGet(pages)); + result.setTotal(Long.valueOf(redisTemplate.keys(key).size())); + return new R<>(result); + } + + + private List findKeysForPage(String patternKey, int pageNum, int pageSize) { + ScanOptions options = ScanOptions.scanOptions().match(patternKey).build(); + RedisSerializer redisSerializer = (RedisSerializer) redisTemplate.getKeySerializer(); + Cursor cursor = (Cursor) redisTemplate.executeWithStickyConnection(redisConnection -> new ConvertingCursor<>(redisConnection.scan(options), redisSerializer::deserialize)); + List result = new ArrayList<>(); + int tmpIndex = 0; + int startIndex = (pageNum - 1) * pageSize; + int end = pageNum * pageSize; + + assert cursor != null; + while (cursor.hasNext()) { + if (tmpIndex >= startIndex && tmpIndex < end) { + result.add(cursor.next().toString()); + tmpIndex++; + continue; + } + if (tmpIndex >= end) { + break; + } + tmpIndex++; + cursor.next(); + } + return result; + } } diff --git a/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/constant/ServiceNameConstants.java b/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/constant/ServiceNameConstants.java index 9428944d8bbf7d4b0a7ee8256a12fab30d5e5b29..77fbe1a77648b9baaeb6ad26e69b70fe253bee5f 100644 --- a/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/constant/ServiceNameConstants.java +++ b/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/constant/ServiceNameConstants.java @@ -11,4 +11,6 @@ public interface ServiceNameConstants { * 认证中心 */ String UPMS_SERVICE = "cloud-upms-biz"; + + String AUTH_SERVICE = "cloud-auth"; } diff --git a/cloud-common/cloud-common-gateway/src/main/java/cn/sh/stc/sict/cloud/common/gateway/feign/RemoteAuthService.java b/cloud-common/cloud-common-gateway/src/main/java/cn/sh/stc/sict/cloud/common/gateway/feign/RemoteAuthService.java new file mode 100644 index 0000000000000000000000000000000000000000..5d6558d6b45a401de718fb13ce3bda1be90ca36e --- /dev/null +++ b/cloud-common/cloud-common-gateway/src/main/java/cn/sh/stc/sict/cloud/common/gateway/feign/RemoteAuthService.java @@ -0,0 +1,30 @@ +package cn.sh.stc.sict.cloud.common.gateway.feign; + +import cn.sh.stc.sict.cloud.common.core.constant.ServiceNameConstants; +import cn.sh.stc.sict.cloud.common.core.util.R; +import cn.sh.stc.sict.cloud.common.gateway.feign.fallback.RemoteAuthFallback; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +/** + * @Description + * @Author + * @Date + */ +@FeignClient(contextId = "remoteUserService", value = ServiceNameConstants.AUTH_SERVICE, fallbackFactory = RemoteAuthFallback.class) +//@FeignClient(contextId = "remoteUserService", value = ServiceNameConstants.AUTH_SERVICE) +@Service +public interface RemoteAuthService { + /** + * 通过用户名或手机号查询用户 + * + * @param username 用户名 + * @param from 调用标志 + * @return R + */ + @GetMapping("/token/check/{token}") + R isValid(@PathVariable("token") String token); + +} diff --git a/cloud-common/cloud-common-gateway/src/main/java/cn/sh/stc/sict/cloud/common/gateway/feign/fallback/RemoteAuthFallback.java b/cloud-common/cloud-common-gateway/src/main/java/cn/sh/stc/sict/cloud/common/gateway/feign/fallback/RemoteAuthFallback.java new file mode 100644 index 0000000000000000000000000000000000000000..3761463f9ce7877dbf875c1520d7745c7b9c6211 --- /dev/null +++ b/cloud-common/cloud-common-gateway/src/main/java/cn/sh/stc/sict/cloud/common/gateway/feign/fallback/RemoteAuthFallback.java @@ -0,0 +1,27 @@ +package cn.sh.stc.sict.cloud.common.gateway.feign.fallback; + +import cn.sh.stc.sict.cloud.common.core.util.R; +import cn.sh.stc.sict.cloud.common.gateway.feign.RemoteAuthService; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author gao + * @date 2023/09/04 09:51 + */ +@Component +@Slf4j +public class RemoteAuthFallback implements FallbackFactory { + + @Override + public RemoteAuthService create(Throwable throwable) { + return new RemoteAuthService() { + @Override + public R isValid(String toke) { + log.info("远程调用失败:权限校验错误"); + return null; + } + }; + } +} diff --git a/cloud-common/cloud-common-gateway/src/main/java/cn/sh/stc/sict/cloud/common/gateway/filter/GptServerFilter.java b/cloud-common/cloud-common-gateway/src/main/java/cn/sh/stc/sict/cloud/common/gateway/filter/GptServerFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..9c6581d7c4886265ba8e3b857c5cc8604142d6d7 --- /dev/null +++ b/cloud-common/cloud-common-gateway/src/main/java/cn/sh/stc/sict/cloud/common/gateway/filter/GptServerFilter.java @@ -0,0 +1,62 @@ +package cn.sh.stc.sict.cloud.common.gateway.filter; + +import cn.hutool.core.util.ObjectUtil; +import cn.sh.stc.sict.cloud.common.core.util.R; + +import cn.sh.stc.sict.cloud.common.gateway.feign.RemoteAuthService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.cloud.gateway.filter.GatewayFilter; +import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.stereotype.Component; +import reactor.core.publisher.Mono; + +/** + * @author gao + * @date 2023/08/30 10:23 + */ +@Slf4j +@Component +@AllArgsConstructor +public class GptServerFilter extends AbstractGatewayFilterFactory { + + public final RemoteAuthService remoteAuthService; + + public static final String SEC_WEBSOCKET_PROTOCOL = "Sec-WebSocket-Protocol"; + + @Override + public GatewayFilter apply(Object config) { + return (exchange, chain) -> { + ServerHttpRequest request = exchange.getRequest(); + String token = request.getHeaders().getFirst(SEC_WEBSOCKET_PROTOCOL); + log.info("ws-token{}", token); + // 权限校验 + if (checkToken(token)) { + return chain.filter(exchange); + } else { + return Mono.error(new RuntimeException("权限校验失败")); + } + }; + } + + /** + * 校验token + * + * @param token + * @return + */ + private boolean checkToken(String token) { +// if (StringUtils.isEmpty(token)) { +// return false; +// } + return true; +// R valid = remoteAuthService.isValid(token); +// if (ObjectUtil.isNull(valid) || ObjectUtil.isNull(valid.getData())) { +// return false; +// } +// return valid.getData(); + } + +} diff --git a/cloud-gateway/src/main/java/cn/sh/stc/sict/cloud/gateway/SictGatewayApplication.java b/cloud-gateway/src/main/java/cn/sh/stc/sict/cloud/gateway/SictGatewayApplication.java index eba72b2e2e3df28ddb1bbc1074f840e1f44c468e..4c7a4360594c9ba1ed499c449a607b5bb0d144a4 100644 --- a/cloud-gateway/src/main/java/cn/sh/stc/sict/cloud/gateway/SictGatewayApplication.java +++ b/cloud-gateway/src/main/java/cn/sh/stc/sict/cloud/gateway/SictGatewayApplication.java @@ -3,6 +3,7 @@ package cn.sh.stc.sict.cloud.gateway; import cn.sh.stc.sict.cloud.common.dynamic.gateway.annotation.EnableDynamicRoute; import org.springframework.boot.SpringApplication; import org.springframework.cloud.client.SpringCloudApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; /** * @Description @@ -11,6 +12,7 @@ import org.springframework.cloud.client.SpringCloudApplication; */ @EnableDynamicRoute @SpringCloudApplication +@EnableFeignClients(basePackages = {"cn.sh.stc.sict.cloud.common.gateway.feign"}) public class SictGatewayApplication { public static void main(String[] args) { SpringApplication.run(SictGatewayApplication.class, args); diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hpgp/dao/HpgpDepartmentRankMapper.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hpgp/dao/HpgpDepartmentRankMapper.java index 6b4189c2385a6839780e9fb9fd63ca0e20104f19..0ed9faa7280989bea56dad1e0aeb113c050b97cd 100644 --- a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hpgp/dao/HpgpDepartmentRankMapper.java +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hpgp/dao/HpgpDepartmentRankMapper.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** * 黄浦全科导诊——科室排名(HpgpDepartmentRank)表数据库访问层 @@ -25,4 +26,6 @@ public interface HpgpDepartmentRankMapper extends BaseMapper List getRankByHosAndStandardDept(@Param("hospitalCode") String hospitalCode, @Param("deptName") String deptName, @Param("size") int size); + + List>>> getStandardDeptDic(@Param("hospitalCode") String hospitalCode); } diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hpgp/model/HpgpDepartmentRank.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hpgp/model/HpgpDepartmentRank.java index 7efe1f211791bb48704822039a5dc45210017e6b..128d8510324958a20929517f68f241ec8a708cff 100644 --- a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hpgp/model/HpgpDepartmentRank.java +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hpgp/model/HpgpDepartmentRank.java @@ -17,6 +17,9 @@ import java.io.Serializable; @EqualsAndHashCode(callSuper = true) public class HpgpDepartmentRank extends Model { private Integer id; + + @ApiModelProperty(hidden = false, value = "标准科室所属分类") + private String standardDeptCategory; //标准科室 @ApiModelProperty(hidden = false, value = "标准科室") private String standardDept; diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hpgp/service/HpgpDepartmentRankService.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hpgp/service/HpgpDepartmentRankService.java index 655c2d2b60cd6ca1e9a4a4bd96f2ad891caed2e6..db4487ce6fe58994ea842415b46fedfc5b6a596c 100644 --- a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hpgp/service/HpgpDepartmentRankService.java +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hpgp/service/HpgpDepartmentRankService.java @@ -1,9 +1,10 @@ package cn.sh.stc.sict.theme.hpgp.service; -import com.baomidou.mybatisplus.extension.service.IService; import cn.sh.stc.sict.theme.hpgp.model.HpgpDepartmentRank; +import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; +import java.util.Map; /** * 黄浦全科导诊——科室排名(HpgpDepartmentRank)表服务接口 @@ -18,4 +19,12 @@ public interface HpgpDepartmentRankService extends IService HpgpDepartmentRank getByCode(String hospCode, String oneDeptCode, String deptCode); List listHotDept(); + + /** + * 医院标准科室字典 + * + * @param hospitalCode 医院编码 + * @return + */ + List>>> getStandardDeptDic(String hospitalCode); } diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hpgp/service/impl/HpgpDepartmentRankServiceImpl.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hpgp/service/impl/HpgpDepartmentRankServiceImpl.java index 9be0a162ac1d20c5ba935560159f50996322878e..2ecf154917fa06fbd0f3af514ac7069f5cc80477 100644 --- a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hpgp/service/impl/HpgpDepartmentRankServiceImpl.java +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hpgp/service/impl/HpgpDepartmentRankServiceImpl.java @@ -20,6 +20,7 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Map; /** * 黄浦全科导诊——科室排名(HpgpDepartmentRank)表服务实现类 @@ -61,6 +62,11 @@ public class HpgpDepartmentRankServiceImpl extends ServiceImpl>>> getStandardDeptDic(String hospitalCode) { + return this.getStandardDeptDic(hospitalCode); + } + @Async void asyncUpdateRank(HpgpDepartmentRank dept) { DeptInfo deptInfo = new DeptInfo(); diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/HpDeptInfoController.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/HpDeptInfoController.java index 8a8c92e0ee3080d90f6c45a74735d929a1fd4dcc..1a62a5ce8a9e612460c1cfe45fd7d0bf3736cad5 100644 --- a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/HpDeptInfoController.java +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/HpDeptInfoController.java @@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.sh.stc.sict.cloud.common.core.constant.Constant; import cn.sh.stc.sict.cloud.common.core.util.R; +import cn.sh.stc.sict.cloud.common.security.util.SecurityUtils; import cn.sh.stc.sict.theme.hpgp.model.HpgpDepartmentRank; import cn.sh.stc.sict.theme.hpgp.service.HpgpBusyIdlePredictionService; import cn.sh.stc.sict.theme.hpgp.service.HpgpDepartmentRankService; @@ -95,4 +96,9 @@ public class HpDeptInfoController extends ApiController { }); return new R(); } + + @GetMapping("/standard-dic") + public R standardDeptDic(@ApiParam("医院编码") @RequestParam(value = "hospitalCode", required = false) String hospitalCode) { + return new R<>().success(hpgpDepartmentRankService.getStandardDeptDic(hospitalCode)); + } } diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/service/HpDeptInfoService.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/service/HpDeptInfoService.java index 4d9b92d71ba931d470b78b2e2baea0ed5171047f..c4eb2da5e762f98ec7529a2841dedb112e78bc91 100644 --- a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/service/HpDeptInfoService.java +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/service/HpDeptInfoService.java @@ -23,4 +23,6 @@ public interface HpDeptInfoService extends IService { void asyncUpdate(HpDeptInfo dept); + + } diff --git a/smart-health-modules/theme-schema/src/main/resources/mapper/hpgp/HpgpDepartmentRankMapper.xml b/smart-health-modules/theme-schema/src/main/resources/mapper/hpgp/HpgpDepartmentRankMapper.xml index ace4cabf5e1dd3dff600c1380abfc3b467ca4e83..7977bbf3a2fbdb327672e2b91235f33e67543bc6 100644 --- a/smart-health-modules/theme-schema/src/main/resources/mapper/hpgp/HpgpDepartmentRankMapper.xml +++ b/smart-health-modules/theme-schema/src/main/resources/mapper/hpgp/HpgpDepartmentRankMapper.xml @@ -3,6 +3,7 @@ + @@ -11,7 +12,14 @@ - standard_dept , hospital_code, hospital_name, dept_code, dept_name, rank_score + + + + + + + + standard_dept_category, standard_dept , hospital_code, hospital_name, dept_code, dept_name, rank_score + +