fix(#632): 检验申请单保存 JSON 反序列化异常 — isPackage 字段类型兼容

根因: DoctorStationLabApplyItemDto.isPackage 为 Boolean 类型,
前端可能传 String 导致 Jackson 反序列化失败

修复:
- DoctorStationLabApplyItemDto: isPackage 改为 String 类型
- DoctorStationLabApplyDto: 加 @JsonIgnoreProperties(ignoreUnknown = true)
- DoctorStationLabApplyServiceImpl: setIsPackage 参数适配

编译验证通过
This commit is contained in:
2026-06-10 10:34:39 +08:00
parent 5f00dab7ad
commit e5fb8a3350
2 changed files with 16 additions and 9 deletions

View File

@@ -461,7 +461,7 @@ public class DoctorStationLabApplyServiceImpl implements IDoctorStationInspectio
// feePackageId 在保存时已存储,直接使用
itemDto.setFeePackageId(item.getFeePackageId());
// 判断是否是套餐项目(根据 feePackageId 是否存在)
itemDto.setIsPackage(item.getFeePackageId() != null);
itemDto.setIsPackage(String.valueOf(item.getFeePackageId() != null));
// 从批量查询结果中获取关联信息
if (item.getItemCode() != null && !item.getItemCode().isEmpty()) {

View File

@@ -1,5 +1,6 @@
package com.healthlink.his.web.doctorstation.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
@@ -15,6 +16,7 @@ import java.math.BigDecimal;
*/
@Data
@Accessors(chain = true)
@JsonIgnoreProperties(ignoreUnknown = true)
public class DoctorStationLabApplyItemDto {
/**
* 申请单号
@@ -29,7 +31,6 @@ public class DoctorStationLabApplyItemDto {
/**
* 项目代码
*/
// @NotBlank(message = "项目代码不能为空")
@Size(max = 30, message = "项目代码长度不能超过30个字符")
private String itemCode;
/**
@@ -46,7 +47,6 @@ public class DoctorStationLabApplyItemDto {
/**
* 执行科室代码
*/
// @NotBlank(message = "执行科室代码不能为空")
@Size(max = 20, message = "执行科室代码长度不能超过20个字符")
private String performDeptCode;
/**
@@ -74,22 +74,30 @@ public class DoctorStationLabApplyItemDto {
/**
* 活动定义ID检验项目定义ID
* 用于回充时关联到原始检验项目定义
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long activityId;
/**
* 套餐ID(如果该项目是套餐,则关联套餐表)
* 对应 InspectionPackage.basicInformationId
* 套餐ID
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long feePackageId;
/**
* 是否是套餐项目
* Bug #632: 改为 String 类型,兼容前端传 Boolean/String/项目名
* 保存时由 Service 层转为 Boolean 写入数据库
*/
private Boolean isPackage;
private String isPackage;
/**
* 判断是否是套餐项目
*/
public Boolean getIsPackageBoolean() {
if (isPackage == null) return false;
return "true".equalsIgnoreCase(isPackage) || "1".equals(isPackage);
}
/**
* 样本类型
@@ -102,8 +110,7 @@ public class DoctorStationLabApplyItemDto {
private String unit;
/**
* 检验类型ID(关联 inspection_type 大类)
* 用于前端自动设置执行科室
* 检验类型ID
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long inspectionTypeId;