4
LICENSE
4
LICENSE
@@ -632,7 +632,7 @@ state the exclusion of warranty; and each file should have at least
|
|||||||
the "copyright" line and a pointer to where the full notice is found.
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
<one line to give the program's name and a brief idea of what it does.>
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
Copyright 2022-2024 武汉新致数字科技有限公司
|
Copyright 2022-2025 湖北天天数链技术有限公司
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@@ -652,7 +652,7 @@ Also add information on how to contact you by electronic and paper mail.
|
|||||||
If the program does terminal interaction, make it output a short
|
If the program does terminal interaction, make it output a short
|
||||||
notice like this when it starts in an interactive mode:
|
notice like this when it starts in an interactive mode:
|
||||||
|
|
||||||
OpenHis Copyright (C) 2022-2024 武汉新致数字科技有限公司
|
OpenHis Copyright (C) 2022-2025 湖北天天数链技术有限公司
|
||||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
This is free software, and you are welcome to redistribute it
|
This is free software, and you are welcome to redistribute it
|
||||||
under certain conditions; type `show c' for details.
|
under certain conditions; type `show c' for details.
|
||||||
|
|||||||
48
README.md
48
README.md
@@ -1,6 +1,50 @@
|
|||||||
# OpenHis-ITAII
|
# 平台介绍
|
||||||
|
|
||||||
|
## 🏠【关于我们】
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
天天开源致⼒于打造中国应⽤管理软件开源⽣态,⾯向医疗、企业、教育三⼤⾏业信息化需求,提供优质的开源软件产品与解决⽅案。平台现已发布OpenHIS、OpenCOM、OpenEDU系列开源产品,并持续招募⽣态合作伙伴,期待共同构建开源创新的⾏业协作模式,加速⾏业的数字化进程。
|
||||||
|
|
||||||
|
天天开源的前⾝是新致开源,最早于2022年6⽉发布开源医疗软件平台OpenHIS.org.cn,于2023年6⽉发布开源企业软件平台OpenCOM.com.cn。2025年7⽉,新致开源品牌更新为天天开源,我们始终秉持开源、专业、协作的理念,致⼒于为医疗、教育、中⼩企业等⾏业提供优质的开源解决⽅案。
|
||||||
|
|
||||||
|
了解我们:https://open.tntlinking.com/about?site=gitee
|
||||||
|
|
||||||
|
## 💾【部署包下载】
|
||||||
|
|
||||||
|
请访问官网产品中心下载部署包:https://open.tntlinking.com/resource/productCenter?site=gitee
|
||||||
|
|
||||||
|
## 📚【支持文档】
|
||||||
|
|
||||||
|
技术支持资源:https://open.tntlinking.com/resource/technicalSupport?site=gitee
|
||||||
|
(含演示环境、操作手册、部署手册、开发手册、常见问题等)
|
||||||
|
|
||||||
|
产品介绍:https://open.tntlinking.com/resource/industryKnowledge?site=gitee
|
||||||
|
|
||||||
|
操作教程:https://open.tntlinking.com/resource/operationTutorial?site=gitee
|
||||||
|
|
||||||
|
沙龙回顾:https://open.tntlinking.com/resource/openSourceSalon#23?site=gitee
|
||||||
|
|
||||||
|
## 🤝【合作方式】
|
||||||
|
|
||||||
|
产品服务价格:https://open.tntlinking.com/cost?site=gitee
|
||||||
|
|
||||||
|
加入生态伙伴:https://open.tntlinking.com/ecology/becomePartner?site=gitee
|
||||||
|
|
||||||
|
## 🤗【技术社区】
|
||||||
|
|
||||||
|
请访问官网扫码加入技术社区交流:https://open.tntlinking.com/ecology/joinCommunity?site=gitee
|
||||||
|
|
||||||
|
请关注公众号【天天开源软件】以便获得最新产品更新信息。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 项目介绍
|
||||||
|
|
||||||
|
OpenHIS医院系统(信创版)集十大核心模块于一体,涵盖目录管理、基础数据配置、个性化设置、门诊/住院全流程管理、药房药库智能管控、精细化耗材管理、财务核算体系、医保合规对接及多维报表分析等功能模块,共计372项标准化功能。
|
||||||
|
|
||||||
|
系统深度适配民营及公立一二级医院业务场景,支持单体医院、集团化运营及区域医疗协同等多种部署模式,并通过国家信创认证体系,确保全栈技术自主可控。如有项目需求,可联系官方平台合作。
|
||||||
|
|
||||||
OpenHis 信创版
|
|
||||||
|
|
||||||
|
|
||||||
## 运行环境
|
## 运行环境
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import com.core.framework.web.service.SysPermissionService;
|
|||||||
import com.core.framework.web.service.TokenService;
|
import com.core.framework.web.service.TokenService;
|
||||||
import com.core.system.service.ISysMenuService;
|
import com.core.system.service.ISysMenuService;
|
||||||
|
|
||||||
/**
|
/**已评审
|
||||||
* 登录验证
|
* 登录验证
|
||||||
*
|
*
|
||||||
* @author system
|
* @author system
|
||||||
@@ -40,7 +40,7 @@ public class SysLoginController {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private TokenService tokenService;
|
private TokenService tokenService;
|
||||||
|
|
||||||
/**
|
/**已评审
|
||||||
* 登录方法
|
* 登录方法
|
||||||
*
|
*
|
||||||
* @param loginBody 登录信息
|
* @param loginBody 登录信息
|
||||||
@@ -56,7 +56,7 @@ public class SysLoginController {
|
|||||||
return ajax;
|
return ajax;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**已评审 整个admin合拼到app层
|
||||||
* 获取用户信息
|
* 获取用户信息
|
||||||
*
|
*
|
||||||
* @return 用户信息
|
* @return 用户信息
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
package com.core.web.controller.system;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import com.core.common.core.controller.BaseController;
|
||||||
|
import com.core.common.core.domain.R;
|
||||||
|
import com.core.system.domain.dto.SaveTenantOptionDetailDto;
|
||||||
|
import com.core.system.domain.dto.TenantOptionDto;
|
||||||
|
import com.core.system.service.ISysTenantOptionService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 租户配置项信息controller
|
||||||
|
*
|
||||||
|
* @author system
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/system/tenant-option")
|
||||||
|
public class SysTenantOptionController extends BaseController {
|
||||||
|
@Autowired
|
||||||
|
private ISysTenantOptionService sysTenantOptionService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询租户配置项详情列表
|
||||||
|
*
|
||||||
|
* @param tenantId 租户ID
|
||||||
|
* @return 租户配置项详情列表
|
||||||
|
*/
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:tenant:operate')")
|
||||||
|
@GetMapping("/detail-list/{tenantId}")
|
||||||
|
public R<List<TenantOptionDto>> getTenantOptionDetailList(@PathVariable Integer tenantId) {
|
||||||
|
return R.ok(sysTenantOptionService.getTenantOptionDetailList(tenantId));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存租户配置项详情列表
|
||||||
|
*
|
||||||
|
* @param saveTenantOptionDetailDto 参数DTO
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:tenant:operate')")
|
||||||
|
@PostMapping("/detail-list")
|
||||||
|
public R<?> saveTenantOptionDetailList(@RequestBody SaveTenantOptionDetailDto saveTenantOptionDetailDto) {
|
||||||
|
return sysTenantOptionService.saveTenantOptionDetailList(saveTenantOptionDetailDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询租户配置项前端form表单列表
|
||||||
|
*
|
||||||
|
* @return 租户配置项前端form表单列表
|
||||||
|
*/
|
||||||
|
@PreAuthorize("@ss.hasPermi('system:tenant:operate')")
|
||||||
|
@GetMapping("/form-list")
|
||||||
|
public R<?> getTenantOptionFormList() {
|
||||||
|
return R.ok(sysTenantOptionService.getTenantOptionFormList());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package com.core.web.util;
|
||||||
|
|
||||||
|
import com.core.common.core.domain.model.LoginUser;
|
||||||
|
import com.core.common.enums.TenantOptionDict;
|
||||||
|
import com.core.common.utils.SecurityUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 租户配置工具类
|
||||||
|
*
|
||||||
|
* @author system
|
||||||
|
*/
|
||||||
|
public class TenantOptionUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取租户配置项内容
|
||||||
|
*
|
||||||
|
* @param optionDict 租户配置项字典
|
||||||
|
* @return 租户配置项内容
|
||||||
|
*/
|
||||||
|
public static String getOptionContent(TenantOptionDict optionDict) {
|
||||||
|
LoginUser loginUser;
|
||||||
|
try {
|
||||||
|
loginUser = SecurityUtils.getLoginUser();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (loginUser == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (loginUser.getOptionMap() == null || loginUser.getOptionMap().isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return loginUser.getOptionMap().get(optionDict.getCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,8 +1,11 @@
|
|||||||
package com.core.common.core.domain.model;
|
package com.core.common.core.domain.model;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import com.core.common.core.domain.entity.SysRole;
|
||||||
import org.springframework.security.core.GrantedAuthority;
|
import org.springframework.security.core.GrantedAuthority;
|
||||||
import org.springframework.security.core.userdetails.UserDetails;
|
import org.springframework.security.core.userdetails.UserDetails;
|
||||||
|
|
||||||
@@ -94,6 +97,16 @@ public class LoginUser implements UserDetails {
|
|||||||
*/
|
*/
|
||||||
private JSONObject optionJson;
|
private JSONObject optionJson;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* option Map
|
||||||
|
*/
|
||||||
|
private Map<String, String> optionMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 当前登录账号角色集合
|
||||||
|
*/
|
||||||
|
private List<SysRole> roleList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户信息
|
* 用户信息
|
||||||
*/
|
*/
|
||||||
@@ -0,0 +1,235 @@
|
|||||||
|
package com.core.common.enums;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 租户配置项字典(不存在DB中,以此文件为基准,新增修改只需在这里改)
|
||||||
|
*
|
||||||
|
* @author system
|
||||||
|
*/
|
||||||
|
public enum TenantOptionDict {
|
||||||
|
/**
|
||||||
|
* 医院名称
|
||||||
|
*/
|
||||||
|
HOSPITAL_NAME("hospitalName", "医院名称", 0),
|
||||||
|
/**
|
||||||
|
* 医疗机构等级
|
||||||
|
*/
|
||||||
|
MEDINS_LV("medinsLv", "医疗机构等级", 1),
|
||||||
|
/**
|
||||||
|
* 定点医药机构编号
|
||||||
|
*/
|
||||||
|
FIXMEDINS_CODE("fixmedinsCode", "定点医药机构编号", 2),
|
||||||
|
/**
|
||||||
|
* 电子发票appid
|
||||||
|
*/
|
||||||
|
APP_ID("app_id", "电子发票appid", 3),
|
||||||
|
/**
|
||||||
|
* 电子发票key
|
||||||
|
*/
|
||||||
|
KEY("key", "电子发票key", 4),
|
||||||
|
/**
|
||||||
|
* 电子发票url
|
||||||
|
*/
|
||||||
|
URL("url", "电子发票url", 5),
|
||||||
|
/**
|
||||||
|
* 医保开关
|
||||||
|
*/
|
||||||
|
YB_SWITCH("yb_switch", "医保开关", 6),
|
||||||
|
/**
|
||||||
|
* 客户端私钥
|
||||||
|
*/
|
||||||
|
CLI_PRV_KEY("cliPrvKey", "客户端私钥", 7),
|
||||||
|
/**
|
||||||
|
* 客户端公钥
|
||||||
|
*/
|
||||||
|
CLI_PUB_KEY("cliPubKey", "客户端公钥", 8),
|
||||||
|
/**
|
||||||
|
* 服务端公钥
|
||||||
|
*/
|
||||||
|
SERVER_PUB_KEY("serverPubKey", "服务端公钥", 9),
|
||||||
|
/**
|
||||||
|
* 定点医药机构名称
|
||||||
|
*/
|
||||||
|
FIXMEDINS_NAME("fixmedinsName", "定点医药机构名称", 10),
|
||||||
|
/**
|
||||||
|
* 行政区划
|
||||||
|
*/
|
||||||
|
ADMVS("admvs", "行政区划", 11),
|
||||||
|
/**
|
||||||
|
* 授权范围
|
||||||
|
*/
|
||||||
|
SCOPE("scope", "授权范围", 12),
|
||||||
|
/**
|
||||||
|
* 授权类型
|
||||||
|
*/
|
||||||
|
GRANT_TYPE("grantType", "授权类型", 13),
|
||||||
|
/**
|
||||||
|
* 密码
|
||||||
|
*/
|
||||||
|
PASSWORD("password", "密码", 14),
|
||||||
|
/**
|
||||||
|
* 用户名
|
||||||
|
*/
|
||||||
|
USERNAME("username", "用户名", 15),
|
||||||
|
/**
|
||||||
|
* 客户端安全码
|
||||||
|
*/
|
||||||
|
CLIENT_SECRET("clientSecret", "客户端安全码", 16),
|
||||||
|
/**
|
||||||
|
* 客户端ID
|
||||||
|
*/
|
||||||
|
CLIENT_ID("clientId", "客户端ID", 17),
|
||||||
|
/**
|
||||||
|
* 生产环境客户端公钥
|
||||||
|
*/
|
||||||
|
PROD_CLI_PUB_KEY("prod_cliPubKey", "生产环境客户端公钥", 18),
|
||||||
|
/**
|
||||||
|
* 生产环境客户端私钥
|
||||||
|
*/
|
||||||
|
PROD_CLI_PRV_KEY("prod_cliPrvKey", "生产环境客户端私钥", 19),
|
||||||
|
/**
|
||||||
|
* 生产环境客户端ID
|
||||||
|
*/
|
||||||
|
PROD_CLIENT_ID("prod_clientId", "生产环境客户端ID", 20),
|
||||||
|
/**
|
||||||
|
* 文件路径
|
||||||
|
*/
|
||||||
|
FILE_PATH("filePath", "文件路径", 21),
|
||||||
|
/**
|
||||||
|
* 电子地址
|
||||||
|
*/
|
||||||
|
ELE_ADDRESS("eleAddress", "电子地址", 22),
|
||||||
|
/**
|
||||||
|
* 服务地址
|
||||||
|
*/
|
||||||
|
ADDRESS("address", "服务地址", 23),
|
||||||
|
/**
|
||||||
|
* 超时时间
|
||||||
|
*/
|
||||||
|
TIME("time", "超时时间", 24),
|
||||||
|
/**
|
||||||
|
* 是否加密
|
||||||
|
*/
|
||||||
|
IS_ENCRYPT("isEncrypt", "是否加密", 25),
|
||||||
|
/**
|
||||||
|
* 医保区划
|
||||||
|
*/
|
||||||
|
INSUPLC_ADMDVS("insuplc_admdvs", "医保区划", 26),
|
||||||
|
/**
|
||||||
|
* 电子处方appId
|
||||||
|
*/
|
||||||
|
PRE_APP_ID("pre_app_id", "电子处方appId", 27),
|
||||||
|
/**
|
||||||
|
* 电子处方appSecret
|
||||||
|
*/
|
||||||
|
PRE_APP_SECRET("pre_app_secret", "电子处方appSecret", 28),
|
||||||
|
/**
|
||||||
|
* 电子处方私钥
|
||||||
|
*/
|
||||||
|
APP_PRVKEY("APP_PRVKEY", "电子处方私钥", 29),
|
||||||
|
/**
|
||||||
|
* 电子处方公钥
|
||||||
|
*/
|
||||||
|
PLAF_PUBKEY("PLAF_PUBKEY", "电子处方公钥", 30),
|
||||||
|
/**
|
||||||
|
* 医保客户端ID
|
||||||
|
*/
|
||||||
|
YB_CLIENT_ID("ybClientId", "医保客户端ID", 31),
|
||||||
|
/**
|
||||||
|
* 医保客户端安全码
|
||||||
|
*/
|
||||||
|
YB_CLIENT_SECRET("ybClientSecret", "医保客户端安全码", 32),
|
||||||
|
/**
|
||||||
|
* 医保用户名
|
||||||
|
*/
|
||||||
|
YB_USERNAME("ybUsername", "医保用户名", 33),
|
||||||
|
/**
|
||||||
|
* 医保密码
|
||||||
|
*/
|
||||||
|
YB_PASSWORD("ybPassword", "医保密码", 34),
|
||||||
|
/**
|
||||||
|
* 医保授权类型
|
||||||
|
*/
|
||||||
|
YB_GRANT_TYPE("ybGrantType", "医保授权类型", 35),
|
||||||
|
/**
|
||||||
|
* 医保授权范围
|
||||||
|
*/
|
||||||
|
YB_SCOPE("ybScope", "医保授权范围", 36),
|
||||||
|
/**
|
||||||
|
* 医保密钥
|
||||||
|
*/
|
||||||
|
YB_CLI_PRV_KEY("ybCliPrvKey", "医保密钥", 37),
|
||||||
|
/**
|
||||||
|
* 医保服务URL
|
||||||
|
*/
|
||||||
|
YB_URL("ybUrl", "医保服务URL", 38),
|
||||||
|
/**
|
||||||
|
* 医院等级
|
||||||
|
*/
|
||||||
|
HOSPITAL_LV("hospital_lv", "医院等级", 39),
|
||||||
|
/**
|
||||||
|
* LIS接口地址
|
||||||
|
*/
|
||||||
|
LIS_API_URL("lisApiUrl", "LIS接口地址", 40),
|
||||||
|
/**
|
||||||
|
* LISAppId
|
||||||
|
*/
|
||||||
|
LIS_APP_ID("lisAppId", "LISAppId", 41),
|
||||||
|
/**
|
||||||
|
* LISAppSecret
|
||||||
|
*/
|
||||||
|
LIS_APP_SECRET("lisAppSecret", "LISAppSecret", 42),
|
||||||
|
/**
|
||||||
|
* PACS接口地址
|
||||||
|
*/
|
||||||
|
PACS_API_URL("pacsApiUrl", "PACS接口地址", 43),
|
||||||
|
/**
|
||||||
|
* PACSAppId
|
||||||
|
*/
|
||||||
|
PACS_APP_ID("pacsAppId", "PACSAppId", 44),
|
||||||
|
/**
|
||||||
|
* PACSAppSecret
|
||||||
|
*/
|
||||||
|
PACS_APP_SECRET("pacsAppSecret", "PACSAppSecret", 45),
|
||||||
|
/**
|
||||||
|
* PACSAppSecret
|
||||||
|
*/
|
||||||
|
INVOICE_URL("invoiceUrl", "电子发票中转服务的路径", 46),
|
||||||
|
/**
|
||||||
|
* PACSAppSecret
|
||||||
|
*/
|
||||||
|
FORWARD_SWITCH("forwardSwitch", "电子发票中转服务开关", 47);
|
||||||
|
|
||||||
|
private final String code;
|
||||||
|
private final String name;
|
||||||
|
private final Integer sort;
|
||||||
|
|
||||||
|
TenantOptionDict(String code, String name, Integer sort) {
|
||||||
|
this.code = code;
|
||||||
|
this.name = name;
|
||||||
|
this.sort = sort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getSort() {
|
||||||
|
return sort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TenantOptionDict getByCode(String code) {
|
||||||
|
if (code == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
for (TenantOptionDict val : values()) {
|
||||||
|
if (val.getCode().equals(code)) {
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user