诊疗下没有项目功能完善

This commit is contained in:
2026-01-26 10:10:42 +08:00
parent 1975fda73c
commit bd873f81d2
18 changed files with 382 additions and 118 deletions

View File

@@ -242,6 +242,8 @@ public class DiagTreatMAppServiceImpl implements IDiagTreatMAppService {
// 显式设置新增的字段
activityDefinition.setSortOrder(diagnosisTreatmentUpDto.getSortOrder());
activityDefinition.setServiceRange(diagnosisTreatmentUpDto.getServiceRange());
// 显式设置划价标记(避免前端字段/类型差异导致 copyProperties 后仍为默认值)
activityDefinition.setPricingFlag(diagnosisTreatmentUpDto.getPricingFlag());
// 拼音码
activityDefinition.setPyStr(ChineseConvertUtils.toPinyinFirstLetter(activityDefinition.getName()));
@@ -402,6 +404,7 @@ public class DiagTreatMAppServiceImpl implements IDiagTreatMAppService {
activityDefinition.setStatusEnum(PublicationStatus.ACTIVE.getValue());
// 显式设置创建者和租户ID确保插入时不为null
String createBy = "system";
Integer tenantId = null;
try {
@@ -415,6 +418,10 @@ public class DiagTreatMAppServiceImpl implements IDiagTreatMAppService {
}
activityDefinition.setCreateBy(createBy);
activityDefinition.setTenantId(tenantId != null ? tenantId : 1); // 默认租户ID为1
// 确保创建时间不为null
if (activityDefinition.getCreateTime() == null) {
activityDefinition.setCreateTime(new java.util.Date());
}
// 检查编码是否已存在
List<ActivityDefinition> existingDefinitions = activityDefinitionMapper.selectList(
@@ -484,7 +491,8 @@ public class DiagTreatMAppServiceImpl implements IDiagTreatMAppService {
for (DiagnosisTreatmentImportDto importDto : importDtoList) {
// 创建诊疗定义
ActivityDefinition activityDefinition = createActivityDefinitionEntity(importDto, orgId);
activityDefinitionService.save(activityDefinition);
// 使用 addDiagnosisTreatment 方法,确保字段完整性
activityDefinitionService.addDiagnosisTreatment(activityDefinition);
// 创建费用定价和详情
chargeItemDefinitionService.addChargeItemDefinitionAndDetail(importDto.getName(), importDto.getTypeCode(),
importDto.getYbType(), importDto.getPermittedUnitCode(), null, importDto.getRetailPrice(),
@@ -654,6 +662,10 @@ public class DiagTreatMAppServiceImpl implements IDiagTreatMAppService {
}
activityDefinition.setCreateBy(createBy);
activityDefinition.setTenantId(tenantId != null ? tenantId : 1); // 默认租户ID为1
// 确保创建时间不为null
if (activityDefinition.getCreateTime() == null) {
activityDefinition.setCreateTime(new java.util.Date());
}
return activityDefinition;
}
}

View File

@@ -2,6 +2,8 @@ package com.openhis.web.datadictionary.appservice.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.core.common.core.domain.model.LoginUser;
import com.core.common.utils.SecurityUtils;
import com.core.common.utils.bean.BeanUtils;
import com.openhis.administration.domain.ChargeItemDefDetail;
import com.openhis.administration.domain.ChargeItemDefinition;
@@ -17,6 +19,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
@@ -47,6 +50,9 @@ public class ItemDefinitionServiceImpl implements IItemDefinitionService {
ChargeItemDefinition chargeItemDefinition = new ChargeItemDefinition();
BeanUtils.copyProperties(itemUpFromDirectoryDto, chargeItemDefinition);
// 显式设置创建者、创建时间和租户ID确保插入时不为null
setRequiredFields(chargeItemDefinition);
boolean insertCIDSuccess = chargeItemDefinitionService.save(chargeItemDefinition);
@@ -86,6 +92,9 @@ public class ItemDefinitionServiceImpl implements IItemDefinitionService {
shargeItemDefDetails.add(chargeItemDefDetail3);
// 批量设置必需字段tenant_id、create_by、create_time
setRequiredFieldsForDetailList(shargeItemDefDetails);
return chargeItemDefDetailService.saveBatch(shargeItemDefDetails);
}
@@ -139,4 +148,55 @@ public class ItemDefinitionServiceImpl implements IItemDefinitionService {
}
/**
* 设置必需的字段tenant_id、create_by、create_time确保插入时不为null
*
* @param chargeItemDefinition 费用定价对象
*/
private void setRequiredFields(ChargeItemDefinition chargeItemDefinition) {
String createBy = "system";
Integer tenantId = null;
try {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null) {
createBy = loginUser.getUsername();
tenantId = loginUser.getTenantId();
}
} catch (Exception e) {
// 如果获取失败,使用默认值
}
chargeItemDefinition.setCreateBy(createBy != null ? createBy : "system");
chargeItemDefinition.setTenantId(tenantId != null ? tenantId : 1);
if (chargeItemDefinition.getCreateTime() == null) {
chargeItemDefinition.setCreateTime(new Date());
}
}
/**
* 批量设置费用定价详情列表的必需字段tenant_id、create_by、create_time
*
* @param chargeItemDefDetailList 费用定价详情对象列表
*/
private void setRequiredFieldsForDetailList(List<ChargeItemDefDetail> chargeItemDefDetailList) {
String createBy = "system";
Integer tenantId = null;
try {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null) {
createBy = loginUser.getUsername();
tenantId = loginUser.getTenantId();
}
} catch (Exception e) {
// 如果获取失败,使用默认值
}
Date now = new Date();
for (ChargeItemDefDetail detail : chargeItemDefDetailList) {
detail.setCreateBy(createBy != null ? createBy : "system");
detail.setTenantId(tenantId != null ? tenantId : 1);
if (detail.getCreateTime() == null) {
detail.setCreateTime(now);
}
}
}
}

View File

@@ -1,5 +1,6 @@
package com.openhis.web.datadictionary.dto;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.openhis.common.annotation.Dict;
@@ -105,8 +106,18 @@ public class DiagnosisTreatmentUpDto {
private String childrenJson;
/** 划价标记 */
@JsonAlias({"pricing_flag"})
private Integer pricingFlag;
/**
* 兼容前端把勾选框按 boolean 传参true/false的场景
* - true -> 1
* - false -> 0
*/
public void setPricingFlag(Boolean pricingFlag) {
this.pricingFlag = pricingFlag == null ? null : (pricingFlag ? 1 : 0);
}
/**
* 物价编码
*/

View File

@@ -369,9 +369,7 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
.collect(Collectors.toList());
// 价格信息
baseDto.setPriceList(priceList);
// 活动类型
baseDto.setActivityType_enumText(
EnumUtils.getInfoByValue(ActivityType.class, baseDto.getActivityType()));
// 活动类型:字典转换框架会自动填充 activityType_dictText无需手动设置
}
}

View File

@@ -29,7 +29,9 @@ public class AdviceBaseDto {
/**
* 医嘱详细分类
*/
@Dict(dictCode = "activity_category_code")
private String categoryCode;
private String categoryCode_dictText;
/**
* 药品性质
@@ -104,10 +106,11 @@ public class AdviceBaseDto {
private String productName;
/**
* 活动类型
* 活动类型(诊疗项目使用目录类别)
*/
@Dict(dictCode = "activity_category_code")
private Integer activityType;
private String activityType_enumText;
private String activityType_dictText;
/**
* 是否皮试

View File

@@ -200,7 +200,29 @@ public class IInventoryAdjustPriceServiceImpl implements IInventoryAdjustPriceSe
itemDefDetailPurchaseList.add(chargeItemDefDetail);
}
}
// 批量插入价格子表
// 批量插入价格子表(在保存前设置必需字段)
// 只对新插入的记录id为null设置字段
List<ChargeItemDefDetail> newRetailList = itemDefDetailRetailList.stream()
.filter(detail -> detail.getId() == null)
.collect(Collectors.toList());
if (!newRetailList.isEmpty()) {
this.chargeItemDefDetailService.setRequiredFieldsBatch(newRetailList);
}
List<ChargeItemDefDetail> newBuyingList = itemDefDetailBuyingList.stream()
.filter(detail -> detail.getId() == null)
.collect(Collectors.toList());
if (!newBuyingList.isEmpty()) {
this.chargeItemDefDetailService.setRequiredFieldsBatch(newBuyingList);
}
List<ChargeItemDefDetail> newPurchaseList = itemDefDetailPurchaseList.stream()
.filter(detail -> detail.getId() == null)
.collect(Collectors.toList());
if (!newPurchaseList.isEmpty()) {
this.chargeItemDefDetailService.setRequiredFieldsBatch(newPurchaseList);
}
this.chargeItemDefDetailService.saveOrUpdateBatch(itemDefDetailRetailList);
this.chargeItemDefDetailService.saveOrUpdateBatch(itemDefDetailBuyingList);
this.chargeItemDefDetailService.saveOrUpdateBatch(itemDefDetailPurchaseList);

View File

@@ -24,6 +24,7 @@
abi.yb_no,
abi.product_name,
abi.activity_type,
abi.activity_type_dictText,
abi.unit_code,
abi.min_unit_code,
abi.volume,
@@ -69,6 +70,7 @@
T1.yb_no AS yb_no,
T1.merchandise_name AS product_name,
0 AS activity_type,
'' AS activity_type_dictText,
T1.unit_code AS unit_code,
T1.min_unit_code AS min_unit_code,
T2.total_volume AS volume,
@@ -138,6 +140,7 @@
T1.yb_no AS yb_no,
'' AS product_name,
0 AS activity_type,
'' AS activity_type_dictText,
T1.unit_code AS unit_code,
T1.min_unit_code AS min_unit_code,
T1.SIZE AS volume,
@@ -200,8 +203,12 @@
T1.wb_str AS wb_str,
T1.yb_no AS yb_no,
'' AS product_name,
T1.type_enum AS activity_type,
'' AS unit_code,
-- 前端"类型"列显示目录类别category_code
-- 将category_code转换为整数用于字典转换字典转换框架会自动填充activityType_dictText
CAST(T1.category_code AS INTEGER) AS activity_type,
NULL AS activity_type_dictText,
-- 前端"包装单位"列显示使用单位permitted_unit_code
T1.permitted_unit_code AS unit_code,
'' AS min_unit_code,
'' AS volume,
'' AS method_code,
@@ -263,6 +270,7 @@
CAST('' AS VARCHAR) AS yb_no,
CAST('' AS VARCHAR) AS product_name,
CAST(0 AS INTEGER) AS activity_type,
CAST('' AS VARCHAR) AS activity_type_dictText,
CAST('' AS VARCHAR) AS unit_code,
CAST('' AS VARCHAR) AS min_unit_code,
CAST(0 AS NUMERIC) AS volume,