|
|
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 |
|
|
|
a963ad8fdc
|
refactor(core): 替换FastJSON为Jackson并修复字符串编码问题
- 将TenantOptionUtil中的JSONObject.getString()替换为path().asText()
- 从LoginUser类移除FastJSON依赖并添加Jackson注解支持
- 将LoginUser中的optionJson字段类型从JSONObject改为ObjectNode
- 修复PropertyPreExcludeFilter以使用Jackson实现属性过滤功能
- 更新AddressUtils中地理位置解析逻辑以兼容Jackson
- 清理因字符编码导致的文档注释乱码问题
|
2026-06-10 16:05:30 +08:00 |
|
|
|
b55fa84b85
|
refactor(dependency): 升级FastJSON到FastJSON2并替换所有引用
- 从核心系统pom.xml移除FastJSON 1.2.83依赖
- 将所有com.alibaba.fastjson导入替换为com.alibaba.fastjson2
- 更新应用层各个服务类中的JSON相关导入
- 替换领域层服务和DTO中的FastJSON注解引用
- 修改测试类中的JSON库导入声明
- 统一使用object.get()方法替代object.getInnerMap().get()
- 清理重复的FastJSON依赖配置项
|
2026-06-10 10:33:24 +08:00 |
|
|
|
86c82286c6
|
feat(test): 重构测试用例基于业务逻辑验证 + 三甲医院开发计划
测试重构:
- 从简单HTTP状态码检查升级为业务逻辑验证
- 验证响应JSON结构(code/msg/data)
- 验证业务数据正确性(如登录返回JWT token)
- 验证业务规则约束(如无效参数返回错误信息)
- 验证数据完整性(如分页返回records字段)
- 增加SQL注入防护测试
- 88个测试用例全部通过
三甲医院开发计划:
- GRADE3A_DEVELOPMENT_PLAN.md: 总体开发计划
- GRADE3A_DETAILED_DESIGN.md: 10个模块详细设计
- 覆盖合理用药/手术麻醉/院感管理/病案管理/护理评估等
|
2026-06-06 08:59:10 +08:00 |
|
|
|
9f7eb0eac6
|
feat(test): 添加Sprint 3-6接口测试(95个用例)
- Sprint 3 住院管理: InpatientApiTest (25个用例)
- 患者入院/床位/转科/出院
- 押金管理/生命体征/护理记录
- Sprint 4 药品管理: PharmacyApiTest (29个用例)
- 西药发药/耗材发药/退药/待发药
- 药品明细/发药汇总/住院退药
- Sprint 5 检验检查: InspectionApiTest (18个用例)
- 标本采集/观察项/标本定义
- LIS配置/仪器/实验室/检查类型
- Sprint 6 统计报表: ReportApiTest (23个用例)
- 挂号/收费/月结/入库/出库统计
- 报损/盘点/调拨/药房结算
全部158个测试用例通过,冒烟测试8/8通过
|
2026-06-06 07:55:05 +08:00 |
|
|
|
a582a97ef1
|
feat: 三甲医院HIS标准设计 + TDD接口测试
- 新增三甲医院HIS标准规范汇编文档 (47KB)
- 新增Grade3A设计文档
- 新增开发计划 (6个Sprint)
- 门诊挂号测试用例: 12个 (号源/挂号/退号/查询/权限/边界)
- 门诊收费测试用例: 13个 (账单/退费/日结/发票/权限/边界)
- 总计25个测试用例全部通过
- 发现安全问题: 无效Token返回200而非401
|
2026-06-06 00:23:31 +08:00 |
|
|
|
893cbf1fe0
|
refactor: 彻底清除所有openhis痕迹
- 重命名目录: openhis-server-new → healthlink-his-server
- 重命名目录: openhis-ui-vue3 → healthlink-his-ui
- 重命名Java类: OpenHisApplication → HealthLinkHisApplication
- 重命名Java类: OpenHisMiniApp → HealthLinkHisMiniApp
- 重命名组件目录: OpenHis → HealthLinkHis
- 重命名样式文件: openhis.scss → healthlink-his.scss
- 重命名配置: nginx-openhis.conf → nginx-healthlink-his.conf
- 更新所有源码引用 (0个残留)
- 更新所有文档/脚本/配置中的引用
|
2026-06-05 13:36:28 +08:00 |
|