feat: 合并 upstream/v1.3 新增功能模块(安全合并策略)

新增功能模块:
- 药房管理:住院退药、处方审核功能
- 报表管理:门诊管理报表、药房结算报表、医嘱统计报表
- 支付管理:三方对账功能
- 新增枚举类:电子处方类型、频次类型、病历状态等10个
- 新增实体类:处方审核记录、第三方支付请求、中医结算目录
- 工具类增强:年龄计算、Excel工具

合并策略:仅合并低风险新增文件,保留现有业务功能
上游版本:v1.3 (2025-03-06发版)
合并分支:merge-upstream-v1.3-0310

🤖 Auto-generated by Claude Code
This commit is contained in:
2026-03-10 18:16:23 +08:00
parent 39b608dfd0
commit fe07cee58c
116 changed files with 5406 additions and 330 deletions

View File

@@ -0,0 +1,59 @@
package com.openhis.common.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 电子处方类别
*
* @author liuhr
* @date 2025/4/21
*/
@Getter
@AllArgsConstructor
public enum ElePrescriptionType implements HisEnumInterface {
OUTPATIENT_WESTERN_OR_TRADITIONAL_CHINESE_MEDICINE(1, "1", "门诊西药中成药"),
OUTPATIENT_CHINESE_MATERIAL_MEDICATED(2, "2", "门诊中药饮片"),
EMERGENCY_WESTERN_OR_TRADITIONAL_CHINESE_MEDICINE(3, "3", "急诊西药中成药"),
EMERGENCY_CHINESE_MATERIAL_MEDICATED(4, "4", "急诊中药饮片"),
PEDIATRIC_WESTERN_OR_TRADITIONAL_CHINESE_MEDICINE(5, "5", "儿科西药中成药"),
PEDIATRIC_CHINESE_MATERIAL_MEDICATED(6, "6", "儿科中药饮片"),
NARCOTIC_OR_SPIRIT_FIRST_CLASS(7, "7", "麻、精一"),
SPIRIT_SECOND_CLASS(8, "8", "精二"),
CHINESE_MATERIAL_MEDICATED(9, "9", "中药饮片"),
TRADITIONAL_CHINESE_MEDICINE_PREPARATION(10, "10", "中成药"),
INPATIENT_WESTERN_OR_TRADITIONAL_CHINESE_MEDICINE(11, "11", "住院西药中成药"),
OTHER(99, "99", "其它");
@EnumValue
private final Integer value;
private final String code;
private final String info;
public static ElePrescriptionType getByValue(Integer value) {
if (value == null) {
return null;
}
for (ElePrescriptionType val : values()) {
if (val.getValue().equals(value)) {
return val;
}
}
return null;
}
}

View File

@@ -0,0 +1,31 @@
package com.openhis.common.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum FrequencyType implements HisEnumInterface {
DAILY(1, "daily", "每日的"),
EVERY_OTHER_DAY(2, "every_other_day", "隔日的"),
WEEKLY(3, "weekly", "每周的");
@EnumValue
private final Integer value;
private final String code;
private final String info;
public static FrequencyType getByValue(Integer value) {
if (value == null) {
return null;
}
for (FrequencyType val : values()) {
if (val.getValue().equals(value)) {
return val;
}
}
return null;
}
}

View File

@@ -0,0 +1,26 @@
package com.openhis.common.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 病案首页上传状态
*
* @author swb
* @date 2025-01-04
*/
@Getter
@AllArgsConstructor
public enum MedicalRecordStatus {
PENDING_APPROVAL(0,"pending-approval","待审核"),
APPROVED(1,"approved","审核通过"),
UPLOADED(2,"uploaded ","已上传");
@EnumValue
private final Integer value;
private final String code;
private final String info;
}

View File

@@ -0,0 +1,41 @@
package com.openhis.common.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 处方类别 | 对应字典 prescription_category
*
* @author liuhr
* @date 2025/4/21
*/
@Getter
@AllArgsConstructor
public enum PrescriptionCategory implements HisEnumInterface {
OUTPATIENT_PRESCRIPTION(1, "1", "门诊处方"),
HOSPITALIZATION_ORDER(2, "2", "住院医嘱"),
DISCHARGE_MEDICATION(3, "3", "出院带药");
@EnumValue
private final Integer value;
private final String code;
private final String info;
public static PrescriptionCategory getByValue(Integer value) {
if (value == null) {
return null;
}
for (PrescriptionCategory val : values()) {
if (val.getValue().equals(value)) {
return val;
}
}
return null;
}
}

View File

@@ -0,0 +1,57 @@
package com.openhis.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 审方-存在问题枚举
*
* @author swb
* @date 2026-01-29
*/
@Getter
@AllArgsConstructor
public enum ReviewReasonEnum {
/**
* 适应证不适宜
*/
INDICATION_INAPPROPRIATE("1", "INDICATION_INAPPROPRIATE", "适应证不适宜"),
/**
* 遴选的药品不适宜
*/
DRUG_SELECTION_INAPPROPRIATE("2", "DRUG_SELECTION_INAPPROPRIATE", "遴选的药品不适宜"),
/**
* 药品剂型不适宜
*/
DRUG_FORM_INAPPROPRIATE("3", "DRUG_FORM_INAPPROPRIATE", "药品剂型不适宜"),
/**
* 用法用量不适宜
*/
DOSAGE_USAGE_INAPPROPRIATE("4", "DOSAGE_USAGE_INAPPROPRIATE", "用法用量不适宜"),
/**
* 联合用药不适宜
*/
COMBINED_MEDICATION_INAPPROPRIATE("5", "COMBINED_MEDICATION_INAPPROPRIATE", "联合用药不适宜"),
/**
* 重复给药
*/
DUPLICATE_MEDICATION("6", "DUPLICATE_MEDICATION", "重复给药");
private final String value;
private final String code;
private final String info;
public static String getByValue(String value) {
for (ReviewReasonEnum enumItem : values()) {
if (enumItem.getValue().equals(value)) {
return enumItem.getInfo();
}
}
return null;
}
}

View File

@@ -0,0 +1,27 @@
package com.openhis.common.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 审方合理状态枚举
*
* @author LAN
* @date 2026-01-29
*/
@Getter
@AllArgsConstructor
public enum ReviewReasonableStatus implements HisEnumInterface {
UNREASONABLE(0, "0", "不合理"),
REASONABLE(1, "1", "合理"),
TO_BE_COMMENTED(2, "2", "待点评");
@EnumValue
@JsonValue
private final Integer value;
private final String code;
private final String info;
}

View File

@@ -0,0 +1,35 @@
package com.openhis.common.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 医保结算上传状态
*
* @author swb
* @date 2026-02-02
*/
@Getter
@AllArgsConstructor
public enum SettleUpStatus {
PENDING_APPROVAL(0,"not-submitted","未提交"),
APPROVED(1,"submitted","已提交"),
UPLOADED(2,"approved ","审核通过"),
SUBMITTED(3,"approval-rejected","审核不通过");
@EnumValue
private final Integer value;
private final String code;
private final String info;
public static String getInfoByValue(Integer settleUploadStatus) {
for (SettleUpStatus value : values()) {
if (value.getValue().equals(settleUploadStatus)) {
return value.getInfo();
}
}
return PENDING_APPROVAL.getInfo();
}
}

View File

@@ -0,0 +1,49 @@
package com.openhis.common.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 手术类型
*
* @author swb
* @date 2025-12-25
*/
@Getter
@AllArgsConstructor
public enum SurgicalStatus implements HisEnumInterface {
PREPARING(1, "1", "准备中"),
IN_PROGRESS(2, "2", "进行中"),
NOT_DONE(3, "3", "未做"),
PAUSE(4, "4", "暂停"),
STOP(5, "5", "停止"),
COMPLETED(6, "6", "完成"),
INPUT_ERROR(7, "7", "输入错误"),
UNKNOWN(8, "8", "未知");
@EnumValue
private final Integer value;
private final String code;
private final String info;
public static SurgicalStatus getByValue(Integer value) {
if (value == null) {
return null;
}
for (SurgicalStatus val : values()) {
if (val.getValue().equals(value)) {
return val;
}
}
return null;
}
}

View File

@@ -0,0 +1,45 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.common.enums;
import com.github.pagehelper.util.StringUtil;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* ThreePartPayType (0: MEMBER_FIRST; 1: MEMBER_SECOND;)
*
* @author SunJQ
* @date 2026-01-12
*/
@Getter
@AllArgsConstructor
public enum ThreePartPayType {
/**
* 中行
*/
BOC(0,"0", "中行"),
/**
* 云闪付
*/
UNIONPAY(1,"1", "云闪付");
private Integer code;
private String value;
private String description;
public static ThreePartPayType getByValue(String value) {
if (StringUtil.isEmpty(value)) {
return null;
}
for (ThreePartPayType val : values()) {
if (val.getValue().equals(value)) {
return val;
}
}
return null;
}
}