Compare commits

..

34 Commits

Author SHA1 Message Date
c21a96da05 chore(dev): 添加代码格式化工具 prettier
- 在 package.json 中添加 format 脚本用于代码格式化
- 安装 prettier 依赖到项目中
- 配置 prettier 支持 vue js ts jsx tsx scss css json 文件格式化
2026-06-15 15:50:50 +08:00
601be0d66b style(App): 统一代码风格和导入语句格式
- 调整 import 语句的格式,统一使用分号结尾
- 规范化 handleThemeStyle 函数导入的括号和空格
- 在 handleThemeStyle 函数调用后添加分号
- 为 nextTick 回调函数末尾添加分号
- 移除文件末尾的多余空行
2026-06-15 15:40:27 +08:00
e825f5fb33 test(e2e): 清理 debug 测试 + 修 bug-630 端口 + 新增 #681 E2E
- 删除开发遗留的 debug 测试文件:
  - debug-console.spec.ts
  - debug-login.spec.ts
  - debug-page.spec.ts
- bug-630.spec.ts: 后端端口 18082 → 18080(匹配 application.yml)
- 新增 bug-681-e2e.spec.ts: 真实登录+fetch+proxy 混合 E2E
  验证 Jackson 3 迁移后 Long 字段以字符串形式返回
2026-06-15 15:40:27 +08:00
97827b6ff0 refactor(jackson): Jackson 2 → Jackson 3 全项目迁移
Spring Boot 4.0.6 默认引入 Jackson 3.1.2,但项目中 1018 处 @JsonSerialize
注解使用的是 Jackson 2 的 com.fasterxml.jackson.* 包,导致注解被忽略,
Long 字段序列化为裸数字,引发前端 JS Number 精度丢失(Bug #681 的根因)。

- com.fasterxml.jackson.databind.* → tools.jackson.databind.*
- com.fasterxml.jackson.core.* → tools.jackson.core.*
- com.fasterxml.jackson.annotation.* 保留(Jackson 3 仍用同包名)
- com.fasterxml.jackson.datatype.jsr310.* 保留(不再需要,Jackson 3 内置 JavaTime 支持)

- JsonSerializer<T> → ValueSerializer<T>
- JsonDeserializer<T> → ValueDeserializer<T>
- SerializerProvider → SerializationContext
- JsonMappingException → DatabindException
- JsonProcessingException → JacksonException(变 RuntimeException)
- ContextualSerializer → 合并入 ValueSerializer(createContextual 成 default 方法)
- LaissezFaireSubTypeValidator → BasicPolymorphicTypeValidator.builder()
- Jackson2ObjectMapperBuilderCustomizer → JsonMapperBuilderCustomizer

- ObjectMapper.configure() 返回 void → JsonMapper.builder().disable(...).build()
- ObjectMapper.setPropertyNamingStrategy() → JsonMapper.builder().propertyNamingStrategy()
- ObjectMapper.setDateFormat() → JsonMapper.builder().defaultDateFormat()
- ObjectNode.fieldNames() → JsonNode.propertyNames()(返回 Collection<String>)
- SerializationFeature.WRITE_DATES_AS_TIMESTAMPS 已移除(JavaTime 自动处理)
- ObjectMapper 的 JavaTimeModule 注册不再需要(Jackson 3 内置)

- core-framework/.../ApplicationConfig.java:重写为 JsonMapperBuilderCustomizer +
  自定义 LocalDateTime 序列化(Jackson 3 内置 ext.javatime.*)
- core-framework/.../FastJson2JsonRedisSerializer.java:用 BasicPolymorphicTypeValidator
  替代 LaissezFaireSubTypeValidator
- core-common/.../JsonUtils.java:改为 JsonMapper.builder() 模式
- core-common/.../SensitiveJsonSerializer.java:JsonSerializer → ValueSerializer

- 5 个模块 jackson-databind groupId 改为 tools.jackson.core(版本由 Spring Boot BOM 管理)
- jackson-annotations 保留 com.fasterxml.jackson.core(Jackson 3 仍用同包名)

-  mvn compile 全 11 模块通过
-  mvn package 成功生成 fat JAR
-  后端启动正常(JDK 25,Spring Boot 4.0.6)
-  登录 API 返回 JWT token
-  /charge-manage/charge/encounter-patient-page 响应:
    - encounterId: "2032288214655660033"(字符串,@JsonSerialize 生效)
    - patientId: "2026486681850499074"(字符串,@JsonSerialize 生效)
-  Bug #681 根因彻底解决(Long 精度丢失)

- Bug #681(前端兜底 fix: acf685fba)+ 本 commit(后端根治)
- Bug #281(历史 jsr310 模块问题)随 Jackson 3 内置 JavaTime 一并解决

- Playwright E2E 全量回归(51 个 spec)
- 时间字段序列化专项测试(LocalDateTime 格式验证)
- 删除 Jackson 2 starter(spring-boot-jackson2)的可行性评估
2026-06-15 15:40:26 +08:00
01e8cc459c fix(#748): guanyu (文件合入) 2026-06-15 15:37:12 +08:00
wangjian963
cc7c669fc1 Merge remote-tracking branch 'origin/develop' into develop 2026-06-15 15:28:05 +08:00
wangjian963
5c73cc6987 fix(#643): 门诊手术安排-术中医嘱删除改为状态回退,修复刷新后医嘱重现
- 前端:删除操作改为 UPDATE 状态回退(statusEnum ACTIVE→DRAFT),清除签发人/签发时间
  - 后端:回退时跳过发放/计费/绑耗逻辑,清除 signCode,回退 chargeItem 状态为 DRAFT
  - 后端:回退时保持原始 generateSourceEnum,避免刷新查询不到记录
  - 安全:回退前校验 encounterId 所有权,防止跨就诊 IDOR
2026-06-15 15:27:31 +08:00
cb792684e2 Merge branch 'develop' of https://gitea.gentronhealth.com/wangyizhe/his into develop 2026-06-15 15:22:50 +08:00
871690848e fix(#738): guanyu (文件合入) 2026-06-15 15:18:48 +08:00
17616a32cb fix(#749): guanyu (文件合入) 2026-06-15 15:01:52 +08:00
wangjian963
2609791b62 637 [住院护士站-体温单] 选中患者后系统上下文不同步,导致无法触发“变更体温单”录入弹窗 2026-06-15 14:29:40 +08:00
wangjian963
c7ae277613 fix(#773): 门诊医生工作站新增医嘱单次剂量/总量列缺min-width导致输入框重叠
vxe-table中"单次剂量"和"总量"两个vxe-column未设置min-width,
  其他13列均为固定宽度,剩余空间不足导致编辑模式下el-input-number
  与单位文本溢出到相邻列。添加min-width="130"和min-width="110"修复。
2026-06-15 14:15:16 +08:00
wangjian963
6882085d69 fix(#613): 医嘱退回流程增加退回原因录入与展示
护士端退回操作已有退回原因弹窗(prescriptionList.vue),本次主要补齐:

  后端:
  - DeviceRequest 实体新增 backReason/performerCheckId/checkTime 三个字段
  - IDeviceRequestService/Impl 新增含退回信息的 updateDraftStatusBatch 重载
  - AdviceProcessAppServiceImpl 退回耗材医嘱时传入退回原因/护士/时间
  - InpatientAdviceDto 新增 reasonText/checkTime 字段
  - AdviceProcessAppMapper.xml(护士站查询):3路 UNION ALL 均新增 reason_text + check_time
  - AdviceManageAppMapper.xml(医生站查询):3路 UNION ALL 均新增 reason_text

  前端:
  - 住院医生站 order/index.vue:医嘱列表新增"退回原因"列(诊断列前面)
  - 住院护士站 prescriptionList.vue:医嘱列表新增"退回原因"列

  数据库:
  - V20260615__bug613_add_return_fields_to_device_request.sql:wor_device_request 表新增 3 列
2026-06-15 14:04:52 +08:00
Ranyunqiao
b1391afcd8 bug 657 713 2026-06-15 13:30:20 +08:00
d12b77f81a test(#681): 添加 Playwright E2E 验证 clickRow 兜底逻辑
- 6 种场景:有 encounterId / 仅 id(兜底)/ 全无 / undefined / null / 空串
- 修复前会发出 encounterId=undefined 请求(复现 bug)
- 修复后所有缺失场景触发 msgError 而非发请求
- Playwright + Vitest 全绿(51/51 + 2/2)
2026-06-15 12:43:13 +08:00
acf685fbaf fix(#681): 门诊收费点击已收费患者增加 encounterId 兜底
- 问题:已收费列表点击患者行时报错"参数[encounterId]要求类型为
  Long,但输入值为'undefined'",导致右侧基本信息为空、收费项目一直 Loading
- 根因:row.encounterId 为 undefined 时直接拼入 URL,后端类型校验拒绝
- 修复:clickRow 加 encounterId ?? id 兜底;无 ID 时 msgError 提示并中止调用;
  同步写入 patientInfo.value 防止 handleClose/confirmCharge/changePayType 等
  后续路径再次读到 undefined
- 风格对齐 clinicrefund/index.vue、outpatientregistration/reprintDialog.vue
  已有的 encounterId || id 防御模式
- 编译:npm run build:dev ✓
2026-06-15 12:24:45 +08:00
wangjian963
dfce7d0332 606 门诊术中安排-医嘱】预览列表字段显示及逻辑异常(涉及单位、频次、执行时间) 2026-06-15 11:44:39 +08:00
9ae9fae2c8 Merge remote-tracking branch 'origin/develop' into develop 2026-06-15 09:26:08 +08:00
7374e17f2e feat(clinical): 添加临床检验管理API兼容层
- 新增ClinicalManageLaboratoryController支持检验结果页面API映射
- 新增ClinicalManageObservationController提供检查结果API兼容接口
- 实现检验结果分页查询和详情获取功能
- 为检查结果预留接口并返回空数据避免前端报错
- 修复封存表medical_record_id字段非空约束导致的插入错误
2026-06-15 09:25:57 +08:00
6ca467a81a refactor(ui): 优化页面布局和表格组件
- 将多个页面的固定高度样式改为flex布局,提升响应式体验
- 替换菜单管理页面的vxe-table为el-table组件以统一技术栈
- 为菜单名称添加图标标识区分不同菜单类型
- 调整表单和表格容器的尺寸计算方式,支持自适应高度
- 优化滚动和溢出处理,改善页面渲染性能
- 修复部分组件的样式和数据绑定问题
2026-06-15 09:25:29 +08:00
d5e2eb6479 fix(#611): 补费弹窗操作栏移至顶部,无需滚动即可确认
根因: 确认/取消按钮、执行时间、补费总金额在弹窗底部(70vh滚动区域后)
       当划价项目多时按钮被挤出首屏,需滚动才能操作

修复: 将操作栏从底部移至顶部(划价组套按钮后面)
      - 执行时间 + 总金额 + 确认/取消 水平排列
      - 灰色背景视觉区分,始终可见无需滚动
2026-06-15 09:12:19 +08:00
e877dfd259 fix(#606): guanyu (文件合入) 2026-06-15 08:18:15 +08:00
60c84b5a8c fix(#726): guanyu (文件合入) 2026-06-15 06:06:05 +08:00
575e4d6c12 fix(#681): guanyu (文件合入) 2026-06-15 00:04:15 +08:00
3eb506da2b fix(#742): guanyu (文件合入) 2026-06-14 20:31:39 +08:00
65a895a8e3 fix(#742): guanyu (文件合入) 2026-06-14 20:22:16 +08:00
c4bfc1bba3 fix(#725): guanyu (文件合入) 2026-06-14 19:40:29 +08:00
f7b1e6589c fix(#739): zhugeliang (文件合入) 2026-06-14 18:01:59 +08:00
0d536ea800 fix(#654): zhugeliang (文件合入) 2026-06-14 17:26:55 +08:00
254c8d8046 fix(database): 修复封存表医疗记录ID非空约束导致插入错误
- 移除 mr_sealing 表中 medical_record_id 字段的 NOT NULL 约束
- 解决前端不传递该字段时的插入报错问题
- 允许封存业务通过病案号手动录入时 medicalRecordId 为空值
2026-06-14 17:05:54 +08:00
9c1753eb55 fix(#653): guanyu (文件合入) 2026-06-14 17:01:00 +08:00
0b1882c82a fix(#757): guanyu (文件合入) 2026-06-14 15:12:40 +08:00
1662db161f fix(#693): guanyu (文件合入) 2026-06-14 12:34:03 +08:00
848d8e0043 fix(#665): guanyu (降级合入) 2026-06-14 12:32:21 +08:00
523 changed files with 2594 additions and 5533 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,15 @@
# Bug #503 分析报告
## 基本信息
- Bug ID: 503
- 标题: 【住院发退药】发药明细与发药汇总单数据触发时机不一致,存在业务脱节风险
- 严重程度: 3
- 模块:
## 根因分析
(待深入分析)
## 修复方案
(待分析后确定)
FIXER_ID: guanyu

View File

@@ -0,0 +1,15 @@
# Bug #606 分析报告
## 基本信息
- Bug ID: 606
- 标题: 门诊术中安排-医嘱】预览列表字段显示及逻辑异常(涉及单位、频次、执行时间)
- 严重程度: 3
- 模块:
## 根因分析
(待深入分析)
## 修复方案
(待分析后确定)
FIXER_ID: zhaoyun

View File

@@ -0,0 +1,15 @@
# Bug #611 分析报告
## 基本信息
- Bug ID: 611
- 标题: 【住院护士站-住院记账】“补费”弹窗确认按钮位置过深且未固定,建议将核心操作与汇总信息上移
- 严重程度: 3
- 模块:
## 根因分析
(待深入分析)
## 修复方案
(待分析后确定)
FIXER_ID: zhaoyun

View File

@@ -0,0 +1,15 @@
# Bug #613 分析报告
## 基本信息
- Bug ID: 613
- 标题: 【医嘱校对/住院医生工作站】医嘱“退回”流程缺失反馈机制:护士端退回无原因录入,医生端缺失原因显示
- 严重程度: 3
- 模块:
## 根因分析
(待深入分析)
## 修复方案
(待分析后确定)
FIXER_ID: zhaoyun

View File

@@ -0,0 +1,15 @@
# Bug #616 分析报告
## 基本信息
- Bug ID: 616
- 标题: 【住院医生工作站-临床医嘱】医嘱录入频次下拉框缺少英文缩写(字典键值)显示,不符合临床书写习惯
- 严重程度: 3
- 模块:
## 根因分析
(待深入分析)
## 修复方案
(待分析后确定)
FIXER_ID: zhaoyun

View File

@@ -0,0 +1,15 @@
# Bug #617 分析报告
## 基本信息
- Bug ID: 617
- 标题: [住院登记] “费用性质”字段保存逻辑错误(登记选择医保保存后变为全自费)
- 严重程度: 3
- 模块:
## 根因分析
(待深入分析)
## 修复方案
(待分析后确定)
FIXER_ID: guanyu

View File

@@ -0,0 +1,15 @@
# Bug #637 分析报告
## 基本信息
- Bug ID: 637
- 标题: [住院护士站-体温单] 选中患者后系统上下文不同步,导致无法触发“变更体温单”录入弹窗
- 严重程度: 3
- 模块:
## 根因分析
(待深入分析)
## 修复方案
(待分析后确定)
FIXER_ID: zhaoyun

View File

@@ -0,0 +1,15 @@
# Bug #638 分析报告
## 基本信息
- Bug ID: 638
- 标题: [分诊排队管理] 智能候选池数据过滤失效,导致跨科室患者数据错误显示
- 严重程度: 3
- 模块:
## 根因分析
(待深入分析)
## 修复方案
(待分析后确定)
FIXER_ID: guanyu

View File

@@ -0,0 +1,15 @@
# Bug #643 分析报告
## 基本信息
- Bug ID: 643
- 标题: [门诊手术安排-术中医嘱] 删除已生成的临时医嘱提示成功,但点击刷新后医嘱重新出现
- 严重程度: 3
- 模块:
## 根因分析
(待深入分析)
## 修复方案
(待分析后确定)
FIXER_ID: zhaoyun

View File

@@ -0,0 +1,15 @@
# Bug #730 分析报告
## 基本信息
- Bug ID: 730
- 标题: 【门诊医生工作站】医嘱下的个人组套都是空的删不掉
- 严重程度: 3
- 模块:
## 根因分析
(待深入分析)
## 修复方案
(待分析后确定)
FIXER_ID: zhaoyun

View File

@@ -0,0 +1,24 @@
# Bug #751 分析报告
## 基本信息
- Bug ID: 751
- 标题: 【门诊医生站-医嘱】点击"新增"医嘱时未展示详细参数编辑面板
- 严重程度: 一般
- 模块: doctorstation
## 根因分析
**直接原因**:前端"新增医嘱"按钮的点击事件未正确打开参数编辑面板。
**涉及文件**
- `healthlink-his-ui/src/views/doctorstation/components/OrderPanel.vue` — 医嘱面板主组件
- `healthlink-his-ui/src/views/doctorstation/components/OrderForm.vue` — 医嘱编辑表单
**修复方案**
1. 检查 OrderPanel.vue 中"新增"按钮的 @click 事件绑定
2. 确认 OrderForm 组件是否正确引入和渲染
3. 检查 v-if/v-show 条件是否阻止了面板显示
## 涉及模块
- 前端: doctorstation
- 后端: 无需修改
FIXER_ID: zhaoyun

View File

@@ -0,0 +1,15 @@
# Bug #754 分析报告
## 基本信息
- Bug ID: 754
- 标题: 【住院医生工作站-临床医嘱】删除“待签发”出院带药医嘱时,系统提示“删除成功”但医嘱状态未变更为“已作废”
- 严重程度: 3
- 模块:
## 根因分析
(待深入分析)
## 修复方案
(待分析后确定)
FIXER_ID: zhaoyun

View File

@@ -0,0 +1,15 @@
# Bug #755 分析报告
## 基本信息
- Bug ID: 755
- 标题: 【门诊医生工作站】新增医嘱时明明有显示库存数量,但是确无法保存成功,显示无库存
- 严重程度: 3
- 模块:
## 根因分析
(待深入分析)
## 修复方案
(待分析后确定)
FIXER_ID: guanyu

View File

@@ -0,0 +1,15 @@
# Bug #756 分析报告
## 基本信息
- Bug ID: 756
- 标题: 【门诊医生工作站】在诊断里修改并保存会出现报错Cannot deserialize value of type `com.core.common.core.domain.entity.SysDictData` from Array value (token `JsonToken.START_ARRAY`) at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: java.util.ArrayList[0])
- 严重程度: 3
- 模块:
## 根因分析
(待深入分析)
## 修复方案
(待分析后确定)
FIXER_ID: guanyu

View File

@@ -110,9 +110,9 @@
</dependency>
<!-- JSONå÷ååââ¬Â¦Ã·Ã§Ã±Ã» -->
<!-- JSON工具类 -->
<!-- JSON工具类 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<groupId>tools.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>

View File

@@ -3,7 +3,7 @@ package com.core.common.annotation;
import com.core.common.config.serializer.SensitiveJsonSerializer;
import com.core.common.enums.DesensitizedType;
import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.annotation.JsonSerialize;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@@ -4,14 +4,13 @@ import com.core.common.annotation.Sensitive;
import com.core.common.core.domain.model.LoginUser;
import com.core.common.enums.DesensitizedType;
import com.core.common.utils.SecurityUtils;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.BeanProperty;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
import tools.jackson.core.JacksonException;
import tools.jackson.core.JsonGenerator;
import tools.jackson.databind.BeanProperty;
import tools.jackson.databind.DatabindException;
import tools.jackson.databind.ValueSerializer;
import tools.jackson.databind.SerializationContext;
import java.io.IOException;
import java.util.Objects;
/**
@@ -19,11 +18,11 @@ import java.util.Objects;
*
* @author system
*/
public class SensitiveJsonSerializer extends JsonSerializer<String> implements ContextualSerializer {
public class SensitiveJsonSerializer extends ValueSerializer<String> {
private DesensitizedType desensitizedType;
@Override
public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
public void serialize(String value, JsonGenerator gen, SerializationContext serializers) throws JacksonException {
if (desensitization()) {
gen.writeString(desensitizedType.desensitizer().apply(value));
} else {
@@ -32,14 +31,14 @@ public class SensitiveJsonSerializer extends JsonSerializer<String> implements C
}
@Override
public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property)
throws JsonMappingException {
public ValueSerializer<?> createContextual(SerializationContext prov, BeanProperty property)
throws DatabindException {
Sensitive annotation = property.getAnnotation(Sensitive.class);
if (Objects.nonNull(annotation) && Objects.equals(String.class, property.getType().getRawClass())) {
this.desensitizedType = annotation.desensitizedType();
return this;
}
return prov.findValueSerializer(property.getType(), property);
return prov.findPrimaryPropertySerializer(property.getType(), property);
}
/**

View File

@@ -9,8 +9,8 @@ import com.core.common.annotation.Excel.Type;
import com.core.common.annotation.Excels;
import com.core.common.core.domain.BaseEntity;
import com.core.common.xss.Xss;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

View File

@@ -1,9 +1,9 @@
package com.core.common.filter;
import com.fasterxml.jackson.annotation.JsonFilter;
import com.fasterxml.jackson.databind.ser.FilterProvider;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
import tools.jackson.databind.ser.FilterProvider;
import tools.jackson.databind.ser.std.SimpleBeanPropertyFilter;
import tools.jackson.databind.ser.std.SimpleFilterProvider;
import org.apache.commons.lang3.ArrayUtils;
import java.util.HashSet;

View File

@@ -1,7 +1,7 @@
package com.core.common.utils;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import tools.jackson.core.type.TypeReference;
import tools.jackson.databind.ObjectMapper;
import com.core.common.constant.CacheConstants;
import com.core.common.core.domain.entity.SysDictData;
import com.core.common.core.redis.RedisCache;

View File

@@ -1,11 +1,12 @@
package com.core.common.utils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import tools.jackson.core.JacksonException;
import tools.jackson.core.type.TypeReference;
import tools.jackson.databind.DeserializationFeature;
import tools.jackson.databind.JsonNode;
import tools.jackson.databind.ObjectMapper;
import tools.jackson.databind.SerializationFeature;
import tools.jackson.databind.json.JsonMapper;
/**
* Jackson JSON 工具类
@@ -13,12 +14,10 @@ import com.fasterxml.jackson.databind.SerializationFeature;
* @author system
*/
public class JsonUtils {
private static final ObjectMapper MAPPER = new ObjectMapper();
static {
MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
MAPPER.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
}
private static final ObjectMapper MAPPER = JsonMapper.builder()
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS)
.build();
public static ObjectMapper getMapper() {
return MAPPER;
@@ -27,7 +26,7 @@ public class JsonUtils {
public static String toJson(Object obj) {
try {
return MAPPER.writeValueAsString(obj);
} catch (JsonProcessingException e) {
} catch (JacksonException e) {
return "{}";
}
}

View File

@@ -1,8 +1,8 @@
package com.core.common.utils.ip;
import com.fasterxml.jackson.databind.ObjectMapper;
import tools.jackson.databind.ObjectMapper;
import com.core.common.utils.JsonUtils;
import com.fasterxml.jackson.databind.JsonNode;
import tools.jackson.databind.JsonNode;
import com.core.common.config.CoreConfig;
import com.core.common.constant.Constants;
import com.core.common.utils.StringUtils;

View File

@@ -34,7 +34,7 @@
<!-- JSON工具类 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<groupId>tools.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>

View File

@@ -1,11 +1,11 @@
package com.core.flowable.service.impl;
import com.core.common.utils.JsonUtils;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.core.type.TypeReference;
import tools.jackson.databind.ObjectMapper;
import tools.jackson.databind.node.ObjectNode;
import tools.jackson.databind.node.ArrayNode;
import tools.jackson.databind.JsonNode;
import tools.jackson.core.type.TypeReference;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.AjaxResult;
import com.core.common.core.domain.entity.SysRole;

View File

@@ -1,6 +1,6 @@
package com.core.framework.aspectj;
import com.fasterxml.jackson.databind.ObjectMapper;
import tools.jackson.databind.ObjectMapper;
import com.core.common.utils.JsonUtils;
import com.core.common.annotation.Log;
import com.core.common.core.domain.entity.SysUser;

View File

@@ -1,51 +1,64 @@
package com.core.framework.config;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.jackson2.autoconfigure.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.boot.jackson.autoconfigure.JsonMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import tools.jackson.core.JacksonException;
import tools.jackson.core.JsonParser;
import tools.jackson.core.JsonGenerator;
import tools.jackson.databind.DeserializationContext;
import tools.jackson.databind.SerializationContext;
import tools.jackson.databind.ValueDeserializer;
import tools.jackson.databind.ValueSerializer;
import tools.jackson.databind.module.SimpleModule;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.TimeZone;
@Configuration
@EnableAspectJAutoProxy(exposeProxy = true)
@MapperScan({"com.core.**.mapper", "com.healthlink.his.**.mapper"})
public class ApplicationConfig {
private static final JsonDeserializer<LocalDateTime> LOCAL_DATE_TIME_DESERIALIZER = new JsonDeserializer<>() {
private static final DateTimeFormatter ISO_FORMATTER = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
private static final DateTimeFormatter SIMPLE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
private static final DateTimeFormatter SLASH_FORMATTER = DateTimeFormatter.ofPattern("yyyy/M/d HH:mm:ss");
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
private static final DateTimeFormatter ISO_FORMATTER = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
private static final DateTimeFormatter SLASH_FORMATTER = DateTimeFormatter.ofPattern("yyyy/M/d HH:mm:ss");
@Override
public LocalDateTime deserialize(JsonParser p, DeserializationContext context) throws IOException {
String text = p.getText();
if (text == null || text.isEmpty()) return null;
String cleaned = text.replaceAll("[Zz]$", "").replaceAll("[+-]\\d{2}:?\\d{2}$", "");
try { return LocalDateTime.parse(cleaned, ISO_FORMATTER); } catch (Exception ignored) {}
try { return LocalDateTime.parse(cleaned, SIMPLE_FORMATTER); } catch (Exception ignored) {}
return LocalDateTime.parse(cleaned, SLASH_FORMATTER);
}
};
private static final ValueDeserializer<LocalDateTime> LOCAL_DATE_TIME_DESERIALIZER =
new ValueDeserializer<LocalDateTime>() {
@Override
public LocalDateTime deserialize(JsonParser p, DeserializationContext context) throws JacksonException {
String text = p.getText();
if (text == null || text.isEmpty()) return null;
String cleaned = text.replaceAll("[Zz]$", "").replaceAll("[+-]\\d{2}:?\\d{2}$", "");
try { return LocalDateTime.parse(cleaned, ISO_FORMATTER); } catch (Exception ignored) {}
try { return LocalDateTime.parse(cleaned, FORMATTER); } catch (Exception ignored) {}
return LocalDateTime.parse(cleaned, SLASH_FORMATTER);
}
};
private static final ValueSerializer<LocalDateTime> LOCAL_DATE_TIME_SERIALIZER =
new ValueSerializer<LocalDateTime>() {
@Override
public void serialize(LocalDateTime value, JsonGenerator gen, SerializationContext ctx) throws JacksonException {
gen.writeString(value.format(FORMATTER));
}
@Override
public Class<LocalDateTime> handledType() {
return LocalDateTime.class;
}
};
@Bean
public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() {
public JsonMapperBuilderCustomizer jacksonObjectMapperCustomization() {
return builder -> {
builder.timeZone(TimeZone.getDefault());
builder.simpleDateFormat("yyyy-MM-dd HH:mm:ss");
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addDeserializer(LocalDateTime.class, LOCAL_DATE_TIME_DESERIALIZER);
builder.modules(javaTimeModule);
builder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
SimpleModule module = new SimpleModule("HealthLinkLocalDateTime");
module.addDeserializer(LocalDateTime.class, LOCAL_DATE_TIME_DESERIALIZER);
module.addSerializer(LocalDateTime.class, LOCAL_DATE_TIME_SERIALIZER);
builder.addModule(module);
};
}
}

View File

@@ -1,7 +1,10 @@
package com.core.framework.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import tools.jackson.databind.DefaultTyping;
import tools.jackson.databind.ObjectMapper;
import tools.jackson.databind.jsontype.BasicPolymorphicTypeValidator;
import tools.jackson.databind.jsontype.PolymorphicTypeValidator;
import tools.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import org.slf4j.Logger;
@@ -10,16 +13,17 @@ import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.LinkedHashMap;
/**
* Redis序列化器 - 兼容fastjson2旧格式
* Redis序列化器 - 兼容fastjson2旧格式Jackson 3 迁移版)
*
* @author system
*/
public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T> {
private static final Logger log = LoggerFactory.getLogger(FastJson2JsonRedisSerializer.class);
public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
public static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
/** 新格式: 带类型信息 (activateDefaultTyping) */
private final ObjectMapper typedMapper;
@@ -31,16 +35,21 @@ public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T> {
super();
this.clazz = clazz;
// Jackson 3: 用 BasicPolymorphicTypeValidator 替代 LaissezFaireSubTypeValidator
PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder()
.allowIfBaseType(Object.class)
.build();
// 新格式 ObjectMapper (带类型信息)
this.typedMapper = new ObjectMapper();
this.typedMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
this.typedMapper.activateDefaultTyping(
LaissezFaireSubTypeValidator.instance,
ObjectMapper.DefaultTyping.NON_FINAL);
this.typedMapper = JsonMapper.builder()
.changeDefaultVisibility(vc -> vc.withVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY))
.activateDefaultTyping(ptv, DefaultTyping.NON_FINAL)
.build();
// 旧格式 ObjectMapper (不带类型信息)
this.plainMapper = new ObjectMapper();
this.plainMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
this.plainMapper = JsonMapper.builder()
.changeDefaultVisibility(vc -> vc.withVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY))
.build();
}
@Override
@@ -75,4 +84,4 @@ public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T> {
return null;
}
}
}
}

View File

@@ -2,8 +2,10 @@ package com.core.framework.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import tools.jackson.databind.DeserializationFeature;
import tools.jackson.databind.JsonNode;
import tools.jackson.databind.ObjectMapper;
import tools.jackson.databind.json.JsonMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.serializer.RedisSerializer;
@@ -12,7 +14,7 @@ import org.springframework.data.redis.serializer.SerializationException;
import java.nio.charset.StandardCharsets;
/**
* Jackson Redis序列化器 - 兼容fastjson旧格式
* Jackson Redis序列化器 - 兼容fastjson旧格式Jackson 3 迁移版)
*
* 新数据: 纯JSON (无类型包装),调用方用 convertValue 转换
* 旧fastjson: 去除L后缀后按JSON解析
@@ -30,10 +32,10 @@ public class FastjsonCompatibleRedisSerializer implements RedisSerializer<Object
}
private static ObjectMapper createMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
return mapper;
return JsonMapper.builder()
.changeDefaultVisibility(vc -> vc.withVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY))
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
.build();
}
/** 获取共享ObjectMapper供 DictUtils / TokenService 等做 convertValue */
@@ -64,7 +66,7 @@ public class FastjsonCompatibleRedisSerializer implements RedisSerializer<Object
try {
// 处理旧Jackson activateDefaultTyping格式: ["className", {data}]
if (cleaned.startsWith("[\"") && cleaned.length() > 10) {
com.fasterxml.jackson.databind.JsonNode node = objectMapper.readTree(cleaned);
JsonNode node = objectMapper.readTree(cleaned);
if (node.isArray() && node.size() >= 2 && node.get(0).isTextual()) {
// 取data部分第2个元素忽略className
return objectMapper.treeToValue(node.get(1), Object.class);
@@ -76,4 +78,4 @@ public class FastjsonCompatibleRedisSerializer implements RedisSerializer<Object
return null;
}
}
}
}

View File

@@ -1,6 +1,6 @@
package com.core.framework.interceptor;
import com.fasterxml.jackson.databind.ObjectMapper;
import tools.jackson.databind.ObjectMapper;
import com.core.common.utils.JsonUtils;
import com.core.common.annotation.RepeatSubmit;
import com.core.common.core.domain.AjaxResult;

View File

@@ -1,6 +1,6 @@
package com.core.framework.interceptor.impl;
import com.fasterxml.jackson.databind.ObjectMapper;
import tools.jackson.databind.ObjectMapper;
import com.core.common.utils.JsonUtils;
import com.core.common.annotation.RepeatSubmit;
import com.core.common.constant.CacheConstants;

View File

@@ -1,6 +1,6 @@
package com.core.framework.security.handle;
import com.fasterxml.jackson.databind.ObjectMapper;
import tools.jackson.databind.ObjectMapper;
import com.core.common.utils.JsonUtils;
import com.core.common.constant.HttpStatus;
import com.core.common.core.domain.AjaxResult;

View File

@@ -1,6 +1,6 @@
package com.core.framework.security.handle;
import com.fasterxml.jackson.databind.ObjectMapper;
import tools.jackson.databind.ObjectMapper;
import com.core.common.utils.JsonUtils;
import com.core.common.constant.Constants;
import com.core.common.core.domain.AjaxResult;

View File

@@ -71,17 +71,19 @@ public class TokenService {
if (cached instanceof java.util.List<?> list && list.size() >= 2 && list.get(0) instanceof String) {
Object data = list.get(1);
if (data instanceof java.util.Map) {
com.fasterxml.jackson.databind.ObjectMapper mapper =
new com.fasterxml.jackson.databind.ObjectMapper();
mapper.configure(com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
tools.jackson.databind.ObjectMapper mapper =
tools.jackson.databind.json.JsonMapper.builder()
.disable(tools.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
.build();
return mapper.convertValue(data, LoginUser.class);
}
}
// 兼容纯JSON格式: LinkedHashMap -> LoginUser
if (cached instanceof java.util.Map) {
com.fasterxml.jackson.databind.ObjectMapper mapper =
new com.fasterxml.jackson.databind.ObjectMapper();
mapper.configure(com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
tools.jackson.databind.ObjectMapper mapper =
tools.jackson.databind.json.JsonMapper.builder()
.disable(tools.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
.build();
return mapper.convertValue(cached, LoginUser.class);
}
return null;

View File

@@ -61,7 +61,7 @@
<!-- JSON工具类 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<groupId>tools.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>

View File

@@ -1,8 +1,8 @@
package com.core.generator.service;
import com.fasterxml.jackson.databind.ObjectMapper;
import tools.jackson.databind.ObjectMapper;
import com.core.common.utils.JsonUtils;
import com.fasterxml.jackson.databind.JsonNode;
import tools.jackson.databind.JsonNode;
import com.core.common.constant.Constants;
import com.core.common.constant.GenConstants;
import com.core.common.core.text.CharsetKit;

View File

@@ -1,8 +1,8 @@
package com.core.generator.util;
import com.fasterxml.jackson.databind.ObjectMapper;
import tools.jackson.databind.ObjectMapper;
import com.core.common.utils.JsonUtils;
import com.fasterxml.jackson.databind.JsonNode;
import tools.jackson.databind.JsonNode;
import com.core.common.constant.GenConstants;
import com.core.common.utils.DateUtils;
import com.core.common.utils.StringUtils;

View File

@@ -1,8 +1,8 @@
package com.core.system.domain;
import com.core.common.core.domain.BaseEntity;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
/**
* 公告/通知已读记录 sys_notice_read

View File

@@ -0,0 +1,37 @@
package com.healthlink.his.web.Inspection.controller;
import com.core.common.core.domain.R;
import com.healthlink.his.web.Inspection.appservice.ILaboratoryManageAppService;
import com.healthlink.his.web.Inspection.dto.ReportResultManageDto;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import jakarta.servlet.http.HttpServletRequest;
/**
* 前端 lisPascResult 页面 API 兼容映射
* 前端调用 /clinical-manage/laboratory/* 和 /clinical-manage/observation/*
* 路由到已有的 /inspection/* 服务
*/
@RestController
@Slf4j
@AllArgsConstructor
@RequestMapping("/clinical-manage/laboratory")
public class ClinicalManageLaboratoryController {
private final ILaboratoryManageAppService appService;
@GetMapping("/result-page")
public R<?> getResultPage(ReportResultManageDto dto,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey,
HttpServletRequest request) {
return appService.getReportResultList(dto, pageNo, pageSize, searchKey, request);
}
@GetMapping("/result-detail/{id}")
public R<?> getResultDetail(@PathVariable Long id) {
return appService.getReportById(id);
}
}

View File

@@ -0,0 +1,30 @@
package com.healthlink.his.web.Inspection.controller;
import com.core.common.core.domain.R;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.Collections;
/**
* 前端 lisPascResult 检查结果 API 兼容映射
* 后端暂无检查结果独立服务,返回空列表避免前端报错
* TODO: 接入检查报告数据源后替换实现
*/
@RestController
@Slf4j
@AllArgsConstructor
@RequestMapping("/clinical-manage/observation")
public class ClinicalManageObservationController {
@GetMapping("/result-page")
public R<?> getResultPage(@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
// 暂时返回空列表,前端可正常渲染
return R.ok(new java.util.HashMap<String, Object>() {{
put("records", Collections.emptyList());
put("total", 0);
}});
}
}

View File

@@ -1,8 +1,8 @@
package com.healthlink.his.web.Inspection.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.healthlink.his.common.annotation.Dict;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.Inspection.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.healthlink.his.lab.domain.ActivityDefDeviceDef;
import com.healthlink.his.lab.domain.ActivityDefObservationDef;
import com.healthlink.his.lab.domain.ActivityDefSpecimenDef;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.Inspection.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.healthlink.his.common.annotation.Dict;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,8 +1,8 @@
package com.healthlink.his.web.Inspection.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
/**

View File

@@ -1,8 +1,8 @@
package com.healthlink.his.web.Inspection.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.util.Date;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.Inspection.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.adjustprice.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.math.BigDecimal;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.appointmentmanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

View File

@@ -3,8 +3,8 @@
*/
package com.healthlink.his.web.basedatamanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -3,8 +3,8 @@
*/
package com.healthlink.his.web.basedatamanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -3,8 +3,8 @@
*/
package com.healthlink.his.web.basedatamanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.healthlink.his.common.annotation.Dict;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.basedatamanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.healthlink.his.common.annotation.Dict;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -3,8 +3,8 @@
*/
package com.healthlink.his.web.basedatamanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -3,8 +3,8 @@
*/
package com.healthlink.his.web.basedatamanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.healthlink.his.common.annotation.Dict;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -4,8 +4,8 @@
package com.healthlink.his.web.basedatamanage.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -3,8 +3,8 @@
*/
package com.healthlink.his.web.basedatamanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.basedatamanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.healthlink.his.common.annotation.Dict;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -3,8 +3,8 @@
*/
package com.healthlink.his.web.basedatamanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.basedatamanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -3,8 +3,8 @@
*/
package com.healthlink.his.web.basedatamanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.basedatamanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.healthlink.his.common.annotation.Dict;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.basicservice.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.healthlink.his.common.annotation.Dict;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -4,8 +4,8 @@
package com.healthlink.his.web.cardmanagement.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.time.LocalDate;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.chargemanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.healthlink.his.common.constant.CommonConstants;
import com.healthlink.his.common.enums.AccountBillingStatus;
import com.healthlink.his.common.enums.AccountStatus;

View File

@@ -1,8 +1,8 @@
package com.healthlink.his.web.chargemanage.dto;
import com.core.common.utils.SecurityUtils;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.healthlink.his.common.constant.CommonConstants;
import com.healthlink.his.common.enums.ChargeItemContext;
import com.healthlink.his.common.enums.ChargeItemStatus;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.chargemanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.chargemanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.chargemanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.healthlink.his.common.enums.*;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.chargemanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.healthlink.his.common.enums.EncounterActivityStatus;
import com.healthlink.his.common.enums.LocationForm;
import lombok.Data;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.chargemanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.healthlink.his.common.enums.ParticipantType;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -4,8 +4,8 @@
package com.healthlink.his.web.chargemanage.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;

View File

@@ -5,8 +5,8 @@ package com.healthlink.his.web.chargemanage.dto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.healthlink.his.common.annotation.Dict;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -3,8 +3,8 @@
*/
package com.healthlink.his.web.chargemanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.healthlink.his.common.annotation.Dict;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -4,8 +4,8 @@
package com.healthlink.his.web.chargemanage.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.healthlink.his.common.annotation.Dict;
import com.healthlink.his.yb.dto.PaymentDetailDto;
import lombok.Data;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.chargemanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.chargemanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.healthlink.his.common.annotation.Dict;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.chargemanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.healthlink.his.common.annotation.Dict;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.chargemanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.chargemanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -4,8 +4,8 @@
package com.healthlink.his.web.chargemanage.dto;
import com.core.common.utils.SecurityUtils;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.healthlink.his.common.enums.EncounterClass;
import com.healthlink.his.common.enums.RequestStatus;
import com.healthlink.his.common.enums.TherapyTimeType;

View File

@@ -3,8 +3,8 @@
*/
package com.healthlink.his.web.chargemanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.healthlink.his.common.annotation.Dict;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.chargemanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -123,7 +123,7 @@ public class ExamApplyController extends BaseController {
for (ExamApplyItem item : items) {
BigDecimal itemTotal = item.getItemFee() != null ? item.getItemFee() : BigDecimal.ZERO;
BigDecimal methodFee = getMethodAdditionalFee(item.getExamMethodCode());
BigDecimal methodFee = getMethodAdditionalFee(item.getExamMethodCode(), item.getBodyPartCode());
totalAmount = totalAmount.add(itemTotal.add(methodFee));
}
@@ -318,7 +318,7 @@ public class ExamApplyController extends BaseController {
// 金额:单价和总价取检查项目费用
BigDecimal baseFee = itemDto.getItemFee() != null ? itemDto.getItemFee() : BigDecimal.ZERO;
BigDecimal methodFee = getMethodAdditionalFee(itemDto.getExamMethodCode());
BigDecimal methodFee = getMethodAdditionalFee(itemDto.getExamMethodCode(), itemDto.getBodyPartCode());
BigDecimal fee = baseFee.add(methodFee);
chargeItem.setQuantityValue(BigDecimal.ONE); // 数量
chargeItem.setQuantityUnit(""); // 单位
@@ -506,7 +506,7 @@ public class ExamApplyController extends BaseController {
chargeItem.setProductId(0L);
BigDecimal baseFee = itemDto.getItemFee() != null ? itemDto.getItemFee() : BigDecimal.ZERO;
BigDecimal methodFee = getMethodAdditionalFee(itemDto.getExamMethodCode());
BigDecimal methodFee = getMethodAdditionalFee(itemDto.getExamMethodCode(), itemDto.getBodyPartCode());
BigDecimal fee = baseFee.add(methodFee);
chargeItem.setQuantityValue(BigDecimal.ONE);
chargeItem.setQuantityUnit("");
@@ -570,15 +570,17 @@ public class ExamApplyController extends BaseController {
* Bug #655: 根据检查方法代码查询附加金额(套餐价格)
* 查找链路examMethodCode → CheckMethod → packageName → CheckPackage → packagePrice
*/
private BigDecimal getMethodAdditionalFee(String examMethodCode) {
private BigDecimal getMethodAdditionalFee(String examMethodCode, String checkType) {
if (examMethodCode == null || examMethodCode.isEmpty()) {
return BigDecimal.ZERO;
}
// 1. 根据 code 查找 CheckMethod
CheckMethod method = checkMethodService.getOne(
new LambdaQueryWrapper<CheckMethod>()
.eq(CheckMethod::getCode, examMethodCode)
.last("LIMIT 1"));
// 1. 根据 code 和 checkType 查找 CheckMethod
LambdaQueryWrapper<CheckMethod> wrapper = new LambdaQueryWrapper<CheckMethod>()
.eq(CheckMethod::getCode, examMethodCode);
if (checkType != null && !checkType.isEmpty()) {
wrapper.eq(CheckMethod::getCheckType, checkType);
}
CheckMethod method = checkMethodService.getOne(wrapper.last("LIMIT 1"));
if (method == null || method.getPackageName() == null || method.getPackageName().isEmpty()) {
return BigDecimal.ZERO;
}

View File

@@ -9,7 +9,7 @@ import com.core.common.core.domain.entity.SysUser;
import com.core.common.utils.MessageUtils;
import com.core.common.utils.SecurityUtils;
import com.core.system.service.ISysUserService;
import com.fasterxml.jackson.databind.ObjectMapper;
import tools.jackson.databind.ObjectMapper;
import com.core.common.utils.JsonUtils;
import com.healthlink.his.administration.domain.ChargeItem;
import com.healthlink.his.administration.domain.Encounter;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.clinicalmanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.healthlink.his.common.annotation.Dict;
import lombok.Data;

View File

@@ -3,8 +3,8 @@
*/
package com.healthlink.his.web.common.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -3,8 +3,8 @@
*/
package com.healthlink.his.web.common.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.healthlink.his.common.annotation.Dict;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.common.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -3,8 +3,8 @@
*/
package com.healthlink.his.web.common.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -3,8 +3,8 @@
*/
package com.healthlink.his.web.common.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -4,8 +4,8 @@
package com.healthlink.his.web.common.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -3,8 +3,8 @@
*/
package com.healthlink.his.web.common.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.consultation.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.io.Serializable;

View File

@@ -1,8 +1,8 @@
package com.healthlink.his.web.consultation.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.io.Serializable;

View File

@@ -1,7 +1,7 @@
package com.healthlink.his.web.consultation.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.io.Serializable;

Some files were not shown because too many files have changed in this diff Show More