This commit is contained in:
liupanting
2025-02-24 09:07:51 +08:00
56 changed files with 1354 additions and 276 deletions

View File

@@ -1,66 +0,0 @@
package com.core.common.biz;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
import org.springframework.core.annotation.AnnotationUtils;
import java.util.List;
public interface HisBaseMapper<T> extends BaseMapper<T> {
/**
* 根据ID逻辑删除单条记录
*/
default int logicalDelById(Long id) {
String tableName = getTableName();
return logicalDelById(tableName, id);
}
/**
* 根据ID列表批量逻辑删除记录
*/
default int logicalDelByIds(List<Long> ids) {
String tableName = getTableName();
return logicalDelByIds(tableName, ids);
}
/**
* 根据 UpdateWrapper 逻辑删除记录
*/
default int logicalDelByWrapper(LambdaUpdateWrapper<T> updateWrapper) {
String tableName = getTableName();
return logicalDelByWrapper(updateWrapper, tableName);
}
@Update("UPDATE ${tableName} SET delete_flag = 1 WHERE id = #{id}")
int logicalDelById(@Param("tableName") String tableName, @Param("id") Long id);
@Update({
"<script>",
"UPDATE ${tableName} SET delete_flag = 1 WHERE id IN",
"<foreach collection='ids' item='id' open='(' separator=',' close=')'>",
"#{id}",
"</foreach>",
"</script>"
})
int logicalDelByIds(@Param("tableName") String tableName, @Param("ids") List<Long> ids);
@Update("UPDATE ${tableName} SET delete_flag = 1 ${ew.customSqlSegment}")
int logicalDelByWrapper(@Param(Constants.WRAPPER) LambdaUpdateWrapper<T> updateWrapper, @Param("tableName") String tableName);
/**
* 获取表名
*/
default String getTableName() {
TableName tableNameAnnotation = AnnotationUtils.findAnnotation(this.getClass(), TableName.class);
if (tableNameAnnotation == null) {
throw new RuntimeException("Table name annotation not found on Mapper interface");
}
return tableNameAnnotation.value();
}
}

View File

@@ -1,33 +0,0 @@
package com.core.common.biz;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
public interface HisBaseService<T> extends IService<T> {
/**
* 根据ID逻辑删除单条记录
*
* @param id 主键ID
* @return 是否成功
*/
boolean logicalDelById(Long id);
/**
* 根据ID列表批量逻辑删除记录
*
* @param ids 主键ID列表
* @return 是否成功
*/
boolean logicalDelByIds(List<Long> ids);
/**
* 根据条件逻辑删除记录
*
* @param updateWrapper 更新条件Lambda形式
* @return 是否成功
*/
boolean logicalDelByWrapper(LambdaUpdateWrapper<T> updateWrapper);
}

View File

@@ -1,24 +0,0 @@
package com.core.common.biz;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
public class HisBaseServiceImpl<M extends BaseMapper<T>, T> extends ServiceImpl<M, T> implements HisBaseService<T> {
@Override
public boolean logicalDelById(Long id) {
return ((HisBaseMapper<T>) baseMapper).logicalDelById(id) > 0;
}
@Override
public boolean logicalDelByIds(List<Long> ids) {
return ((HisBaseMapper<T>) baseMapper).logicalDelByIds(ids) > 0;
}
@Override
public boolean logicalDelByWrapper(LambdaUpdateWrapper<T> updateWrapper) {
return ((HisBaseMapper<T>) baseMapper).logicalDelByWrapper(updateWrapper) > 0;
}
}

View File

@@ -6,6 +6,7 @@ import java.util.Date;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@@ -38,9 +39,11 @@ public class HisBaseEntity implements Serializable {
private Date updateTime;
/** 租户ID */
@TableField(fill = FieldFill.INSERT)
private Integer tenantId;
/** 删除标识 */
private Integer deleteFlag;
@TableLogic(value = "0", delval = "1") // 0 为未删除1 为删除
private String deleteFlag;
}

View File

@@ -3,6 +3,7 @@ package com.core.common.core.domain.model;
import java.util.Collection;
import java.util.Set;
import lombok.Data;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
@@ -14,6 +15,7 @@ import com.core.common.core.domain.entity.SysUser;
*
* @author system
*/
@Data
public class LoginUser implements UserDetails {
private static final long serialVersionUID = 1L;
@@ -67,6 +69,9 @@ public class LoginUser implements UserDetails {
*/
private Set<String> permissions;
/** 租户ID */
private Integer tenantId;
/**
* 用户信息
*/

View File

@@ -0,0 +1,42 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.core.common.enums;
/**
* 定价类型
*
* @author zxy
* @date 2025-02-21
*/
public enum DefinitionTypeEnum {
/**
* 药品
*/
MEDICATION("1", "药品"),
/**
* 耗材
*/
DEVICE("2", "耗材"),
/**
* 手术
*/
ACTIVITY("3", "手术");
private final String code;
private final String info;
DefinitionTypeEnum(String code, String info) {
this.code = code;
this.info = info;
}
public String getCode() {
return code;
}
public String getInfo() {
return info;
}
}

View File

@@ -1,14 +1,22 @@
package com.core.framework.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
import com.core.common.utils.SecurityUtils;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
@EnableTransactionManagement(proxyTargetClass = true)
@Configuration
@@ -22,6 +30,8 @@ public class MybatisPlusConfig {
interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor());
// 阻断插件
interceptor.addInnerInterceptor(blockAttackInnerInterceptor());
// 多租户插件
interceptor.addInnerInterceptor(tenantLineInnerInterceptor());
return interceptor;
}
@@ -50,4 +60,93 @@ public class MybatisPlusConfig {
public BlockAttackInnerInterceptor blockAttackInnerInterceptor() {
return new BlockAttackInnerInterceptor();
}
/**
* 多租户插件
*/
public TenantLineInnerInterceptor tenantLineInnerInterceptor() {
TenantLineInnerInterceptor tenantInterceptor = new TenantLineInnerInterceptor();
tenantInterceptor.setTenantLineHandler(new TenantLineHandler() {
@Override
public Expression getTenantId() {
// 返回当前租户 ID
return new LongValue(getCurrentTenantId());
}
@Override
public String getTenantIdColumn() {
// 返回租户 ID 的字段名
return "tenant_id";
}
// 配置需要租户隔离的表名集合
private static final Set<String> TENANT_TABLES = new HashSet<>(Arrays.asList(
"adm_account",
"adm_charge_item",
"adm_charge_item_def_app",
"adm_charge_item_definition",
"adm_device",
"adm_device_definition",
"adm_encounter",
"adm_encounter_diagnosis",
"adm_encounter_location",
"adm_encounter_participant",
"adm_encounter_reason",
"adm_healthcare_service",
"adm_invoice",
"adm_location",
"adm_organization",
"adm_organization_location",
"adm_patient",
"adm_patient_identifier",
"adm_practitioner",
"adm_practitioner_role",
"adm_supplier",
"cli_condition",
"cli_condition_definition",
"cli_procedure",
"cli_procedure_performer",
"doc_emr",
"doc_emr_template",
"fin_claim",
"fin_claim_response",
"fin_contract",
"fin_payment_notice",
"fin_payment_rec_detail",
"fin_payment_reconciliation",
"med_medication",
"med_medication_definition",
"med_medication_dispense",
"med_medication_request",
"wor_activity_definition",
"wor_device_dispense",
"wor_device_request",
"wor_inventory_item",
"wor_service_request",
"wor_service_request_detail",
"wor_supply_delivery",
"wor_supply_request"
));
@Override
public boolean ignoreTable(String tableName) {
// 忽略不需要租户隔离的表
// return false; // 默认所有表都开启租户隔离
// 如果表名不在集合中,则忽略租户隔离
return !TENANT_TABLES.contains(tableName);
}
});
return tenantInterceptor;
}
/**
* 获取当前租户 ID
*/
private Integer getCurrentTenantId() {
// 获取当前登录用户的租户 ID
if (SecurityUtils.getAuthentication() != null) {
return SecurityUtils.getLoginUser().getTenantId();
}
return 0;
}
}

View File

@@ -25,6 +25,7 @@ public class MybastisColumnsHandler implements MetaObjectHandler {
} catch (Exception ignored) {
}
this.strictInsertFill(metaObject, "createBy", String.class, username);
this.strictInsertFill(metaObject, "tenantId", Integer.class, getCurrentTenantId());
}
// 设置数据修改update时候的字段自动赋值规则
@@ -41,4 +42,15 @@ public class MybastisColumnsHandler implements MetaObjectHandler {
}
this.strictUpdateFill(metaObject, "updateBy", String.class, username);
}
/**
* 获取当前租户 ID
*/
private Integer getCurrentTenantId() {
// 获取当前登录用户的租户 ID
if (SecurityUtils.getAuthentication() != null) {
return SecurityUtils.getLoginUser().getTenantId();
}
return 0;
}
}

View File

@@ -60,7 +60,7 @@ public class SysLoginService {
*/
public String login(String username, String password, String code, String uuid) {
// 验证码校验
validateCaptcha(username, code, uuid);
validateCaptcha(username, code, uuid);
// 登录前置校验
loginPreCheck(username, password);
// 用户验证
@@ -87,6 +87,11 @@ public class SysLoginService {
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS,
MessageUtils.message("user.login.success")));
LoginUser loginUser = (LoginUser)authentication.getPrincipal();
// -----start-----登录时set租户id,正常应该从请求头获取,这行代码只是测试使用
loginUser.setTenantId(1);
// -----end-----登录时set租户id,正常应该从请求头获取,这行代码只是测试使用
recordLoginInfo(loginUser.getUserId());
// 生成token
return tokenService.createToken(loginUser);

View File

@@ -0,0 +1,197 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.datadictionary.assembler;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.openhis.administration.domain.ChargeItemDefApp;
import com.openhis.administration.domain.ChargeItemDefinition;
import com.openhis.administration.domain.DeviceDefinition;
import com.openhis.medication.domain.MedicationDefinition;
import com.openhis.web.datadictionary.dto.ChargeItemDefPageDto;
import com.openhis.web.datadictionary.dto.ItemDefSearchParam;
import com.openhis.workflow.domain.ActivityDefinition;
/**
* 费用定价dto转换器
*
* @author zxy
* @date 2025-02-21
*/
public class ItemDefinitionAssembler {
// /**
// * 装配【费用定价分页列表DTO】分页 药品
// *
// * @param chargeItemDefinitionPage 【费用定价管理Entity实体】分页
// * @param chargeItemDefAppList 【费用定价管理子表Entity实体】列表
// * @param medicationDefinitionList【药品定义管理Entity实体】列表
// * @return 【费用定价分页列表DTO】分页
// */
// public static Page<ChargeItemDefPageDto> assembleMedDefinitionDto(
// Page<ChargeItemDefinition> chargeItemDefinitionPage, List<ChargeItemDefApp> chargeItemDefAppList,
// List<MedicationDefinition> medicationDefinitionList, ItemDefSearchParam itemDefSearchParam) {
//
// // 将查询到的【药品基本信息管理】列表作成以ID为Key的Map
// Map<Long, MedicationDefinition> medicationDefinitionMap = medicationDefinitionList.stream()
// .collect(Collectors.toMap(MedicationDefinition::getId, Function.identity()));
//
// // 将查询到的【患者管理】列表作成以ID为Key的Map
// Map<Long, ChargeItemDefApp> chargeItemDefAppMap =
// chargeItemDefAppList.stream().collect(Collectors.toMap(ChargeItemDefApp::getId, Function.identity()));
//
// // 定义【入库单据分页列表DTO】的分页传入【页码】、【行数】、及上面分页的【总数】
// Page<ChargeItemDefPageDto> returnPage = new Page<>(chargeItemDefinitionPage.getCurrent(),
// chargeItemDefinitionPage.getSize(), chargeItemDefinitionPage.getTotal());
//
// // 将【供应申请管理】的分页转化为返回【入库单据分页列表DTO】的分页
// returnPage.setRecords(chargeItemDefinitionPage.getRecords().stream().map(entity -> {
// // 定义【入库单据分页列表DTO】
// ChargeItemDefPageDto dto = new ChargeItemDefPageDto();
// ChargeItemDefApp chargeItemDefApp =
// chargeItemDefAppMap.getOrDefault(entity.getInstanceId(), new ChargeItemDefApp());
// MedicationDefinition medicationDefinition =
// medicationDefinitionMap.getOrDefault(entity.getInstanceId(), new MedicationDefinition());
// // 从主表COPY需要的字段
// dto.setId(entity.getId());
// dto.setConditionLotnumber(chargeItemDefApp.getConditionLotnumber());
// dto.setPyCode(medicationDefinition.getPyCode());
// dto.setTypeEnum(medicationDefinition.getCategoryCode());
// return dto;
// }).collect(Collectors.toList()));
// // 模糊查询项目名称/项目编码/助记码
// if (itemDefSearchParam.getSearchKey() != null) {
// returnPage.setRecords(returnPage.getRecords().stream()
// .filter(e -> e.getChargeName().contains(itemDefSearchParam.getSearchKey())
// || e.getTitle().contains(itemDefSearchParam.getSearchKey())
// || e.getPyCode().contains(itemDefSearchParam.getSearchKey()))
// .collect(Collectors.toList()));
// }
// // 精确查询收费项目
// if (itemDefSearchParam.getChargeItem() != null) {
// returnPage.setRecords(returnPage.getRecords().stream()
// .filter(e -> e.getTypeEnum().equals(itemDefSearchParam.getChargeItem())).collect(Collectors.toList()));
// }
//
// // 返回【入库单据分页列表DTO】分页
// return returnPage;
// }
//
// /**
// * 装配【费用定价分页列表DTO】分页 器具
// *
// * @param chargeItemDefinitionPage 【费用定价管理Entity实体】分页
// * @param chargeItemDefAppList 【费用定价管理子表Entity实体】列表
// * @param medicationDefinitionList【药品定义管理Entity实体】列表
// * @return 【费用定价分页列表DTO】分页
// */
// public static Page<ChargeItemDefPageDto> assembleDevDefinitionDto(
// Page<ChargeItemDefinition> chargeItemDefinitionPage, List<ChargeItemDefApp> chargeItemDefAppList,
// List<DeviceDefinition> medicationDefinitionList, ItemDefSearchParam itemDefSearchParam) {
//
// // 将查询到的【药品基本信息管理】列表作成以ID为Key的Map
// Map<Long, DeviceDefinition> deviceDefinitionMap =
// medicationDefinitionList.stream().collect(Collectors.toMap(DeviceDefinition::getId, Function.identity()));
//
// // 将查询到的【患者管理】列表作成以ID为Key的Map
// Map<Long, ChargeItemDefApp> chargeItemDefAppMap =
// chargeItemDefAppList.stream().collect(Collectors.toMap(ChargeItemDefApp::getId, Function.identity()));
//
// // 定义【入库单据分页列表DTO】的分页传入【页码】、【行数】、及上面分页的【总数】
// Page<ChargeItemDefPageDto> returnPage = new Page<>(chargeItemDefinitionPage.getCurrent(),
// chargeItemDefinitionPage.getSize(), chargeItemDefinitionPage.getTotal());
//
// // 将【供应申请管理】的分页转化为返回【入库单据分页列表DTO】的分页
// returnPage.setRecords(chargeItemDefinitionPage.getRecords().stream().map(entity -> {
// // 定义【入库单据分页列表DTO】
// ChargeItemDefPageDto dto = new ChargeItemDefPageDto();
// ChargeItemDefApp chargeItemDefApp =
// chargeItemDefAppMap.getOrDefault(entity.getInstanceId(), new ChargeItemDefApp());
// DeviceDefinition deviceDefinition =
// deviceDefinitionMap.getOrDefault(entity.getInstanceId(), new DeviceDefinition());
// // 从主表COPY需要的字段
// dto.setId(entity.getId());
// dto.setConditionLotnumber(chargeItemDefApp.getConditionLotnumber());
// dto.setPyCode(deviceDefinition.getPyCode());
// dto.setTypeEnum(deviceDefinition.getDeviceClass());
// return dto;
// }).collect(Collectors.toList()));
// // 模糊查询项目名称/项目编码/助记码
// if (itemDefSearchParam.getSearchKey() != null) {
// returnPage.setRecords(returnPage.getRecords().stream()
// .filter(e -> e.getChargeName().contains(itemDefSearchParam.getSearchKey())
// || e.getTitle().contains(itemDefSearchParam.getSearchKey())
// || e.getPyCode().contains(itemDefSearchParam.getSearchKey()))
// .collect(Collectors.toList()));
// }
// // 精确查询收费项目
// if (itemDefSearchParam.getChargeItem() != null) {
// returnPage.setRecords(returnPage.getRecords().stream()
// .filter(e -> e.getTypeEnum().equals(itemDefSearchParam.getChargeItem())).collect(Collectors.toList()));
// }
//
// // 返回【入库单据分页列表DTO】分页
// return returnPage;
// }
//
// /**
// * 装配【费用定价分页列表DTO】分页 诊疗
// *
// * @param chargeItemDefinitionPage 【费用定价管理Entity实体】分页
// * @param chargeItemDefAppList 【费用定价管理子表Entity实体】列表
// * @param medicationDefinitionList【药品定义管理Entity实体】列表
// * @return 【费用定价分页列表DTO】分页
// */
// public static Page<ChargeItemDefPageDto> assembleProDefinitionDto(
// Page<ChargeItemDefinition> chargeItemDefinitionPage, List<ChargeItemDefApp> chargeItemDefAppList,
// List<ActivityDefinition> medicationDefinitionList, ItemDefSearchParam itemDefSearchParam) {
//
// // 将查询到的【药品基本信息管理】列表作成以ID为Key的Map
// Map<Long, ActivityDefinition> activityDefinitionMap =
// medicationDefinitionList.stream().collect(Collectors.toMap(ActivityDefinition::getId, Function.identity()));
//
// // 将查询到的【患者管理】列表作成以ID为Key的Map
// Map<Long, ChargeItemDefApp> chargeItemDefAppMap =
// chargeItemDefAppList.stream().collect(Collectors.toMap(ChargeItemDefApp::getId, Function.identity()));
//
// // 定义【入库单据分页列表DTO】的分页传入【页码】、【行数】、及上面分页的【总数】
// Page<ChargeItemDefPageDto> returnPage = new Page<>(chargeItemDefinitionPage.getCurrent(),
// chargeItemDefinitionPage.getSize(), chargeItemDefinitionPage.getTotal());
//
// // 将【供应申请管理】的分页转化为返回【入库单据分页列表DTO】的分页
// returnPage.setRecords(chargeItemDefinitionPage.getRecords().stream().map(entity -> {
// // 定义【入库单据分页列表DTO】
// ChargeItemDefPageDto dto = new ChargeItemDefPageDto();
// ChargeItemDefApp chargeItemDefApp =
// chargeItemDefAppMap.getOrDefault(entity.getInstanceId(), new ChargeItemDefApp());
// ActivityDefinition deviceDefinition =
// activityDefinitionMap.getOrDefault(entity.getInstanceId(), new ActivityDefinition());
// // 从主表COPY需要的字段
// dto.setId(entity.getId());
// dto.setConditionLotnumber(chargeItemDefApp.getConditionLotnumber());
// dto.setPyCode(deviceDefinition.getPyCode());
// dto.setTypeEnum(deviceDefinition.getTypeEnum().toString());
// return dto;
// }).collect(Collectors.toList()));
// // 模糊查询项目名称/项目编码/助记码
// if (itemDefSearchParam.getSearchKey() != null) {
// returnPage.setRecords(returnPage.getRecords().stream()
// .filter(e -> e.getChargeName().contains(itemDefSearchParam.getSearchKey())
// || e.getTitle().contains(itemDefSearchParam.getSearchKey())
// || e.getPyCode().contains(itemDefSearchParam.getSearchKey()))
// .collect(Collectors.toList()));
// }
// // 精确查询收费项目
// if (itemDefSearchParam.getChargeItem() != null) {
// returnPage.setRecords(returnPage.getRecords().stream()
// .filter(e -> e.getTypeEnum().equals(itemDefSearchParam.getChargeItem())).collect(Collectors.toList()));
// }
//
// // 返回【入库单据分页列表DTO】分页
// return returnPage;
// }
}

View File

@@ -55,7 +55,7 @@ public class DiseaseManagementController {
void AddDisease(DiseaseInDto diseaseInDto) {
ConditionDefinition conditionDefinition = new ConditionDefinition();
BeanUtils.copyProperties(diseaseInDto,conditionDefinition);
iConditionDefinitionService.AddDisease(conditionDefinition);
// iConditionDefinitionService.AddDisease(conditionDefinition);
}
// 新增医保病种目录

View File

@@ -0,0 +1,200 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.datadictionary.controller;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.core.common.enums.DefinitionTypeEnum;
import com.core.common.utils.MessageUtils;
import com.core.common.utils.bean.BeanUtils;
import com.openhis.administration.domain.ChargeItemDefApp;
import com.openhis.administration.domain.ChargeItemDefinition;
import com.openhis.administration.service.IChargeItemDefAppService;
import com.openhis.administration.service.IChargeItemDefinitionService;
import com.openhis.administration.service.IDeviceDefinitionService;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.medication.service.IMedicationDefinitionService;
import com.openhis.web.datadictionary.dto.ChargeItemDefPageDto;
import com.openhis.web.datadictionary.dto.ItemDefSearchParam;
import com.openhis.web.datadictionary.dto.ItemDefinitionDto;
import com.openhis.web.datadictionary.mapper.ChargeItemDefSearchMapper;
import com.openhis.workflow.service.IActivityDefinitionService;
import lombok.extern.slf4j.Slf4j;
/**
* 项目定价
*
* @author zxy
* @date 2025-02-21
*/
@RestController
@RequestMapping("/dict-manager/definition")
@Slf4j
public class ItemDefinitionController {
@Autowired(required = false)
private IChargeItemDefinitionService chargeItemDefinitionService;
@Autowired(required = false)
private IChargeItemDefAppService chargeItemDefAppService;
@Autowired(required = false)
private ChargeItemDefSearchMapper chargeItemDefSearchMapper;
@Autowired(required = false)
private IMedicationDefinitionService medicationDefinitionService;
@Autowired(required = false)
private IDeviceDefinitionService deviceDefinitionService;
@Autowired(required = false)
private IActivityDefinitionService activityDefinitionService;
/**
* 项目定价列表
*
* @param itemDefSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param request 请求数据
* @return 项目定价列表
*/
@GetMapping(value = "/item-definition-page")
public R<?> getDefinitionPage(ItemDefSearchParam itemDefSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) {
// region
/// todo: 代码未测试
// 获取定价查询条件
// ChargeItemDefinition chargeItemDefinition = new ChargeItemDefinition();
// BeanUtils.copyProperties(itemDefSearchParam, chargeItemDefinition);
// ====================================================================================
// 查询【费用定价管理】分页列表
// Page<ChargeItemDefinition> chargeItemDefinitionPage =
// chargeItemDefinitionMapper.getPage(itemDefSearchParam, pageNo, pageSize);
// if (chargeItemDefinitionPage.getRecords() != null) {
// List<ChargeItemDefApp> chargeItemDefAppList = chargeItemDefAppService.listByIds(chargeItemDefinitionPage
// .getRecords().stream().filter(e -> e.getInstanceTable().equals("adm_charge_item_def_app"))
// .map(ChargeItemDefinition::getInstanceId).collect(Collectors.toList()));
// // 通过 DefinitionType 区分药品定价/器具定价/手术定价
// if (DefinitionTypeEnum.MEDICATION.getCode().equals(itemDefSearchParam.getDefinitionType())) {
// // 获取药品定价列表
// List<MedicationDefinition> medicationList =
// medicationDefinitionService.listByIds(chargeItemDefinitionPage.getRecords().stream()
// .filter(e -> e.getInstanceTable().equals("med_medication_definition"))
// .map(ChargeItemDefinition::getInstanceId).collect(Collectors.toList()));
//
// return R.ok(ItemDefinitionAssembler.assembleMedDefinitionDto(chargeItemDefinitionPage,
// chargeItemDefAppList, medicationList, itemDefSearchParam));
// } else if (DefinitionTypeEnum.DEVICE.getCode().equals(itemDefSearchParam.getDefinitionType())) {
// // 获取器具定价列表
// List<DeviceDefinition> deviceDefinitionList = deviceDefinitionService.listByIds(chargeItemDefinitionPage
// .getRecords().stream().filter(e -> e.getInstanceTable().equals("adm_device_definition"))
// .map(ChargeItemDefinition::getInstanceId).collect(Collectors.toList()));
//
// return R.ok(ItemDefinitionAssembler.assembleDevDefinitionDto(chargeItemDefinitionPage,
// chargeItemDefAppList, deviceDefinitionList, itemDefSearchParam));
// } else if (DefinitionTypeEnum.ACTIVITY.getCode().equals(itemDefSearchParam.getDefinitionType())) {
// List<ActivityDefinition> activityDefinitionList =
// activityDefinitionService.listByIds(chargeItemDefinitionPage.getRecords().stream()
// .filter(e -> e.getInstanceTable().equals("wor_activity_definition"))
// .map(ChargeItemDefinition::getInstanceId).collect(Collectors.toList()));
//
// return R.ok(ItemDefinitionAssembler.assembleProDefinitionDto(chargeItemDefinitionPage,
// chargeItemDefAppList, activityDefinitionList, itemDefSearchParam));
// } else {
// return R.ok(new Page<ChargeItemDefPageDto>());
// }
// } else {
// return R.ok(new Page<ChargeItemDefPageDto>());
// }
// endregion
IPage<ChargeItemDefPageDto> chargeItemDefinitionPage = new Page<>();
List<ChargeItemDefPageDto> chargeItemDefinitionList;
// TODO: 待测试
// 跳过的数量
int skipCount = 0;
if (pageNo > 0) {
skipCount = (pageNo - 1) * pageSize;
}
// 通过 DefinitionType 区分药品定价/器具定价/手术定价
if (DefinitionTypeEnum.MEDICATION.getCode().equals(itemDefSearchParam.getDefinitionType())) {
chargeItemDefinitionList =
chargeItemDefSearchMapper.getMedList(itemDefSearchParam, pageNo, pageSize, skipCount);
chargeItemDefinitionPage.setSize(pageSize);
chargeItemDefinitionPage.setCurrent(pageNo);
if (chargeItemDefinitionList.size() > 0) {
chargeItemDefinitionPage.setTotal(chargeItemDefinitionList.get(0).getTotalCount());
chargeItemDefinitionPage.setRecords(chargeItemDefinitionList);
} else {
chargeItemDefinitionPage.setTotal(0);
chargeItemDefinitionPage.setRecords(new ArrayList<>());
}
return R.ok(chargeItemDefinitionPage);
} else if (DefinitionTypeEnum.DEVICE.getCode().equals(itemDefSearchParam.getDefinitionType())) {
chargeItemDefinitionList =
chargeItemDefSearchMapper.getDevList(itemDefSearchParam, pageNo, pageSize, skipCount);
chargeItemDefinitionPage.setSize(pageSize);
chargeItemDefinitionPage.setCurrent(pageNo);
if (chargeItemDefinitionList.size() > 0) {
chargeItemDefinitionPage.setTotal(chargeItemDefinitionList.get(0).getTotalCount());
chargeItemDefinitionPage.setRecords(chargeItemDefinitionList);
} else {
chargeItemDefinitionPage.setTotal(0);
chargeItemDefinitionPage.setRecords(new ArrayList<>());
}
return R.ok(chargeItemDefinitionPage);
} else if (DefinitionTypeEnum.ACTIVITY.getCode().equals(itemDefSearchParam.getDefinitionType())) {
chargeItemDefinitionList =
chargeItemDefSearchMapper.getActList(itemDefSearchParam, pageNo, pageSize, skipCount);
chargeItemDefinitionPage.setSize(pageSize);
chargeItemDefinitionPage.setCurrent(pageNo);
if (chargeItemDefinitionList.size() > 0) {
chargeItemDefinitionPage.setTotal(chargeItemDefinitionList.get(0).getTotalCount());
chargeItemDefinitionPage.setRecords(chargeItemDefinitionList);
} else {
chargeItemDefinitionPage.setTotal(0);
chargeItemDefinitionPage.setRecords(new ArrayList<>());
}
return R.ok(chargeItemDefinitionPage);
} else {
return R.ok();
}
}
/**
* 修改项目定价
*
* @param itemDefinitionDto 修改内容
* @return 修改结果
*/
@PutMapping(value = "/item-definition")
public R<?> edit(@Validated @RequestBody ItemDefinitionDto itemDefinitionDto) {
// 更新adm_charge_item_definition信息
ChargeItemDefinition chargeItemDefinition = new ChargeItemDefinition();
BeanUtils.copyProperties(itemDefinitionDto, chargeItemDefinition);
if (!chargeItemDefinitionService.updateById(chargeItemDefinition)) {
return R.fail();
}
// 更新收费项目adm_charge_item_def_app
ChargeItemDefApp chargeItemDefApp = new ChargeItemDefApp();
BeanUtils.copyProperties(itemDefinitionDto, chargeItemDefApp);
chargeItemDefApp.setDefinitionId(itemDefinitionDto.getId());
chargeItemDefApp.setId(itemDefinitionDto.getItemId());
return chargeItemDefAppService.updateChargeItemDefApp(chargeItemDefApp)
? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"费用定价"}))
: R.fail(PromptMsgConstant.Common.M00007, null);
}
}

View File

@@ -0,0 +1,90 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.datadictionary.dto;
import java.math.BigDecimal;
import java.util.Date;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 费用定价分页Dto
*
* @author zxy
* @date 2025-02-21
*/
@Data
@Accessors(chain = true)
public class ChargeItemDefPageDto {
/** ID */
private Long id;
/** 费用定价子表主键 */
private Long itemId;
/** 名称 */
private String chargeName;
/** 项目编号 */
private String itemNo;
/** 规格 */
private String totalVolume;
/** 状态 */
private Integer statusEnum;
/** 单位 */
private String unitCode;
/** 拆零比 */
private BigDecimal partPercent;
/** 指导价 */
private BigDecimal conditionYbCode;
/** 批次号 */
private String conditionLotnumber;
/** 价格 */
private BigDecimal price;
/** 有效时间开始 */
private Date effectiveStart;
/** 有效时间结束 */
private Date effectiveEnd;
/** 拆零最小单位 */
private String partMinUnitCode;
/** 拆零指导价 */
private BigDecimal partConditionPrice;
/** 拆零价格 */
private BigDecimal partPrice;
/** 条件价格 */
private BigDecimal amount;
/** 调价说明 */
private String description;
/** 优先级 */
private Integer priority;
/** 条件规则 */
private Integer conditionRuleId;
/** 创建时间 */
private Date createTime;
/** 调价时间 */
private Date updateTime;
/** 总条数 */
private Integer totalCount;
}

View File

@@ -0,0 +1,27 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.datadictionary.dto;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 项目定价查询dto
*
* @author zxy
* @date 2025-02-21
*/
@Data
@Accessors(chain = true)
public class ItemDefSearchParam {
/** 定价类型 */
private String DefinitionType;
/** 定价项目 */
private String chargeItem;
/** 模糊搜索条件 */
private String searchKey;
/** 状态 */
private Integer statusEnum;
}

View File

@@ -0,0 +1,96 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.datadictionary.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.util.Date;
/**
* 收费项目保存dto
*
* @author zxy
* @date 2025-02-21
*/
@Data
@Accessors(chain = true)
public class ItemDefinitionDto {
/** ID */
private Long id;
/** 子表ID */
private Long itemId;
/** 名称 */
private String chargeName;
/** 标题 */
private String title;
/** 状态 */
private Integer statusEnum;
/** 机构编码 */
private String orgCode;
/** 描述 */
private String description;
/** 代码 */
private String instanceTable;
/** 关联项目 */
private Long instanceId;
/** 有效时间开始 */
private Date effectiveStart;
/** 有效时间结束 */
private Date effectiveEnd;
/** 财务类别 */
private String typeCode;
/** 医保类别 */
private Integer ybType;
/** 是否使用详细价格规则 */
private Integer conditionFlag;
/** 基础价格 */
private BigDecimal price;
/** 条件规则 */
private Long conditionRuleId;
/** 批次号 */
private String conditionLotnumber;
/** 医保相关价格 */
private String conditionYbCode;
/** 采购售卖条件 */
private String conditionInoutCode;
/** 条件类型 */
private String conditionUnitCode;
/** 条件 */
private String conditionCode;
/** 优先级 */
private Integer priority;
/** 价格 */
private BigDecimal amount;
/** 名称拼音码 */
private String pyCode;
/** 类型 */
private String typeEnum;
}

View File

@@ -0,0 +1,57 @@
package com.openhis.web.datadictionary.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.openhis.administration.domain.ChargeItemDefinition;
import com.openhis.web.datadictionary.dto.ChargeItemDefPageDto;
import com.openhis.web.datadictionary.dto.ItemDefSearchParam;
/**
* 费用定价管理Mapper接口
*
* @author system
* @date 2025-02-20
*/
@Repository
public interface ChargeItemDefSearchMapper extends BaseMapper<ChargeItemDefinition> {
/**
* 药品费用定价分页查询
*
* @param itemDefSearchParam 查询条件
* @param pageNo 页码
* @param pageSize 页面大小
* @param skipCount 跳过条数
* @return 分页查询
*/
List<ChargeItemDefPageDto> getMedList(@Param("itemDefSearchParam") ItemDefSearchParam itemDefSearchParam,
@Param("pageNo") Integer pageNo, @Param("pageSize") Integer pageSize, @Param("skipCount") Integer skipCount);
/**
* 器具费用定价分页查询
*
* @param itemDefSearchParam 查询条件
* @param pageNo 页码
* @param pageSize 页面大小
* @param skipCount 跳过条数
* @return 分页查询
*/
List<ChargeItemDefPageDto> getDevList(@Param("itemDefSearchParam") ItemDefSearchParam itemDefSearchParam,
@Param("pageNo") Integer pageNo, @Param("pageSize") Integer pageSize, @Param("skipCount") int skipCount);
/**
* 活动费用定价分页查询
*
* @param itemDefSearchParam 查询条件
* @param pageNo 页码
* @param pageSize 页面大小
* @param skipCount 跳过条数
* @return 分页查询
*/
List<ChargeItemDefPageDto> getActList(@Param("itemDefSearchParam") ItemDefSearchParam itemDefSearchParam,
@Param("pageNo") Integer pageNo, @Param("pageSize") Integer pageSize, @Param("skipCount") int skipCount);
}

View File

@@ -0,0 +1,238 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.openhis.web.datadictionary.mapper.ChargeItemDefSearchMapper">
<select id="getMedList" resultType="com.openhis.web.datadictionary.dto.ChargeItemDefPageDto">
SELECT
T5.id,
T5.charge_name,
T5.status_enum,
T5.description,
T5.effective_start,
T5.effective_end,
T5.instance_table,
T5.price,
T5.create_time,
T5.update_time,
T5.item_id,
T5.condition_rule_id,
T5.condition_lotnumber,
T5.condition_yb_code,
T5.priority,
T5.amount,
T5.item_no,
T5.py_str,
T5.wb_str,
T5.unit_code,
T5.category_code,
T5.total_volume,
T5.lot_number,
COUNT(1) OVER() AS TOTAL_COUNT
FROM (
SELECT
T1.id,
T1.charge_name,
T1.status_enum,
T1.description,
T1.effective_start,
T1.effective_end,
T1.instance_table,
T1.price,
T1.create_time,
T1.update_time,
T2.id AS item_id,
T2.condition_rule_id,
T2.condition_lotnumber,
T2.condition_yb_code,
T2.priority,
T2.amount,
T3.bus_no AS item_no,
T3.py_str,
T3.wb_str,
T3.unit_code,
T3.category_code,
T4.total_volume,
T4.lot_number
FROM
adm_charge_item_definition T1
LEFT JOIN adm_charge_item_def_app T2
ON T1.id = T2.definition_id
LEFT JOIN med_medication_definition T3
ON T1.instance_id = T3.id
LEFT JOIN med_medication T4
ON T3.id = T4.medication_def_id) T5
<where>
T5.instance_table = 'med_medication_definition'
<if test="itemDefSearchParam.getSearchKey() != null">
AND T5.charge_name LIKE CONCAT('%', #{itemDefSearchParam.searchKey}, '%')
OR T5.code LIKE CONCAT('%', #{itemDefSearchParam.searchKey}, '%')
OR T5.py_code LIKE CONCAT('%', #{itemDefSearchParam.searchKey}, '%')
</if>
<if test="itemDefSearchParam.getStatusEnum() != null">
AND T5.status_enum = #{itemDefSearchParam.statusEnum}
</if>
<if test="itemDefSearchParam.getCategoryCode() != null">
AND T5.category_code = #{itemDefSearchParam.chargeItem}
</if>
</where>
ORDER BY T5.create_time DESC
<!-- 拼接页码 -->
<if test="skipCount != null and pageSize != null and pageSize > 0">
LIMIT #{pageSize} OFFSET #{skipCount}
</if>
</select>
<select id="getDevList" resultType="com.openhis.web.datadictionary.dto.ChargeItemDefPageDto">
SELECT
T5.id,
T5.charge_name,
T5.status_enum,
T5.description,
T5.effective_start,
T5.effective_end,
T5.instance_table,
T5.price,
T5.create_time,
T5.update_time,
T5.item_id,
T5.condition_rule_id,
T5.condition_lotnumber,
T5.condition_yb_code,
T5.priority,
T5.amount,
T5.item_no,
T5.py_code,
T5.wb_code,
T5.unit_code,
T5.category_code,
T5.lot_number,
COUNT(1) OVER() AS TOTAL_COUNT
FROM (
SELECT
T1.id,
T1.charge_name,
T1.status_enum,
T1.description,
T1.effective_start,
T1.effective_end,
T1.instance_table,
T1.price,
T1.create_time,
T1.update_time,
T2.id AS item_id,
T2.condition_rule_id,
T2.condition_lotnumber,
T2.condition_yb_code,
T2.priority,
T2.amount,
T3.code AS item_no,
T3.py_code,
T3.wb_code,
T3.unit_code AS unit_code,
T3.device_class AS category_code,
T4.lot_number
FROM
adm_charge_item_definition T1
LEFT JOIN adm_charge_item_def_app T2
ON T1.id = T2.definition_id
LEFT JOIN adm_device_definition T3
ON T1.instance_id = T3.id
LEFT JOIN adm_device T4
ON T3.id = T4.def_id) T5
<where>
T5.instance_table = 'adm_device_definition'
<if test="itemDefSearchParam.getSearchKey() != null">
AND T5.charge_name LIKE CONCAT('%', #{itemDefSearchParam.searchKey}, '%')
OR T5.code LIKE CONCAT('%', #{itemDefSearchParam.searchKey}, '%')
OR T5.py_code LIKE CONCAT('%', #{itemDefSearchParam.searchKey}, '%')
</if>
<if test="itemDefSearchParam.getStatusEnum() != null">
AND T5.status_enum = #{itemDefSearchParam.statusEnum}
</if>
<if test="itemDefSearchParam.getCategoryCode() != null">
AND T5.category_code = #{itemDefSearchParam.chargeItem}
</if>
</where>
ORDER BY T5.create_time DESC
<!-- 拼接页码 -->
<if test="skipCount != null and pageSize != null and pageSize > 0">
LIMIT #{pageSize} OFFSET #{skipCount}
</if>
</select>
<select id="getActList" resultType="com.openhis.web.datadictionary.dto.ChargeItemDefPageDto">
SELECT
T5.id,
T5.charge_name,
T5.status_enum,
T5.description,
T5.effective_start,
T5.effective_end,
T5.instance_table,
T5.price,
T5.create_time,
T5.update_time,
T5.item_id,
T5.condition_rule_id,
T5.condition_lotnumber,
T5.condition_yb_code,
T5.priority,
T5.amount,
T5.item_no,
T5.py_code,
T5.wb_code,
T5.unit_code,
T5.category_code,
COUNT(1) OVER() AS TOTAL_COUNT
FROM (
SELECT
T1.id,
T1.charge_name,
T1.status_enum,
T1.description,
T1.effective_start,
T1.effective_end,
T1.instance_table,
T1.price,
T1.create_time,
T1.update_time,
T2.id AS item_id,
T2.condition_rule_id,
T2.condition_lotnumber,
T2.condition_yb_code,
T2.priority,
T2.amount,
T3.code AS item_no,
T3.py_code,
T3.wb_code,
T3.permitted_unit AS unit_code,
T3.type_enum AS category_code
FROM
adm_charge_item_definition T1
LEFT JOIN adm_charge_item_def_app T2
ON T1.id = T2.definition_id
LEFT JOIN wor_activity_definition T3
ON T1.instance_id = T3.id) T5
<where>
T5.instance_table = 'wor_activity_definition'
<if test="itemDefSearchParam.getSearchKey() != null">
AND T5.charge_name LIKE CONCAT('%', #{itemDefSearchParam.searchKey}, '%')
OR T5.code LIKE CONCAT('%', #{itemDefSearchParam.searchKey}, '%')
OR T5.py_code LIKE CONCAT('%', #{itemDefSearchParam.searchKey}, '%')
</if>
<if test="itemDefSearchParam.getStatusEnum() != null">
AND T5.status_enum = #{itemDefSearchParam.statusEnum}
</if>
<if test="itemDefSearchParam.getCategoryCode() != null">
AND T5.category_code = #{itemDefSearchParam.chargeItem}
</if>
</where>
ORDER BY T5.create_time DESC
<!-- 拼接页码 -->
<if test="skipCount != null and pageSize != null and pageSize > 0">
LIMIT #{pageSize} OFFSET #{skipCount}
</if>
</select>
</mapper>

View File

@@ -50,10 +50,10 @@ public class Account extends HisBaseEntity {
private BigDecimal balanceAmount;
/** 医保区域编码 */
private String ybAreaCode;
private String ybAreaNo;
/** 合同编码 */
private String contractCode;
private String contractNo;
/** 欠费限制额度 */
private BigDecimal limitAccount;

View File

@@ -32,13 +32,13 @@ public class ChargeItem extends HisBaseEntity {
private Integer statusEnum;
/** 层级 */
private String code;
private String busNo;
/** 患者ID */
private Long patientId;
/** 类别 */
private Integer context;
private Integer contextEnum;
/** 就诊ID */
private Long encounterId;
@@ -47,7 +47,7 @@ public class ChargeItem extends HisBaseEntity {
private Date occurrenceTime;
/** 执行人Id */
private Long performer;
private Long performerId;
/** 执行科室 */
private Long performingOrgId;
@@ -110,7 +110,7 @@ public class ChargeItem extends HisBaseEntity {
private Long accountId;
/** 机构 */
private String orgCode;
private Integer orgId;
}

View File

@@ -29,16 +29,16 @@ public class Device extends HisBaseEntity {
private Long id;
/** 器材编码 */
private String deviceCode;
private String busNo;
/** 器材定义编号 */
private Long defId;
private Long deviceDefId;
/** 器材状态 */
private Integer statusEnum;
/** 器材可用状态 */
private Integer availabilityStatus;
private Integer availabilityEnum;
/** 厂家 */
private String manufacturer;

View File

@@ -29,19 +29,19 @@ public class DeviceDefinition extends HisBaseEntity {
private Long id;
/** 编码 */
private String code;
private String busNo;
/** 器材名称 */
private String name;
/** 器材名称拼音 */
private String pyCode;
private String pyStr;
/** 器材五笔拼音 */
private String wbCode;
private String wbStr;
/** 器材分类 */
private String deviceClass;
private String deviceCode;
/** 器材种类 */
private String deviceTypeCode;
@@ -74,13 +74,13 @@ public class DeviceDefinition extends HisBaseEntity {
private Integer ybFlag;
/** 医保编码 */
private String ybCode;
private String ybNo;
/** 医保对码标记 */
private Integer ybMatchFlag;
/** 状态 */
private Integer status;
private Integer statusEnum;
/** 生产厂家 */
private Long manufacturerId;
@@ -92,7 +92,7 @@ public class DeviceDefinition extends HisBaseEntity {
private String description;
/** 适用范围 */
private Long jurisdiction;
private String jurisdiction;
/** 执行科室 */
private Long ruleId;

View File

@@ -35,7 +35,7 @@ public class Encounter extends HisBaseEntity {
private Long groupId;
/** 就诊编码 */
private String code;
private String busNo;
/** 状态编码 */
private String statusCode;

View File

@@ -34,9 +34,6 @@ public class EncounterDiagnosis extends HisBaseEntity {
/** 诊断_id */
private Long conditionId;
/** 诊断编码 */
private String code;
/** 住院患者疾病诊 */
private Integer iptDiseCrsp;

View File

@@ -29,7 +29,7 @@ public class HealthcareService extends HisBaseEntity {
private Long id;
/** 活动标记 */
private Integer active;
private Integer activeFlag;
/** 提供部门ID */
private Long offeredOrgId;

View File

@@ -29,7 +29,7 @@ public class Location extends HisBaseEntity {
private Long id;
/** 编码 */
private String code;
private String busNo;
/** 名称 */
private String name;
@@ -47,10 +47,10 @@ public class Location extends HisBaseEntity {
private String typeJson;
/** 拼音码 */
private String spellCode;
private String pyStr;
/** 五笔码 */
private String wbCode;
private String wbStr;
/** 物理形式枚举 */
private String formEnum;

View File

@@ -29,7 +29,7 @@ public class Organization extends HisBaseEntity {
private Long id;
/** 编码 */
private String code;
private String bus_no;
/** 名称 */
private String name;
@@ -44,13 +44,13 @@ public class Organization extends HisBaseEntity {
private Integer classEnum;
/** 拼音码 */
private String spellCode;
private String pyStr;
/** 五笔码 */
private String wbCode;
private String wbStr;
/** 医保码 */
private String ybCode;
private String ybNo;
/** 医保名称 */
private String ybName;

View File

@@ -41,7 +41,7 @@ public class Patient extends HisBaseEntity {
private String nameJson;
/** 患者院内编码/病历号 */
private String code;
private String busNo;
/** 性别编码 */
private Integer genderEnum;
@@ -80,16 +80,16 @@ public class Patient extends HisBaseEntity {
private String addressJson;
/** 民族 */
private String nationality;
private String nationalityCode;
/** 身份证号 */
private String idCard;
/** 拼音码 */
private String spellCode;
private String pyStr;
/** 五笔码 */
private String wbCode;
private String wbStr;
/** 血型ABO */
private String bloodAbo;

View File

@@ -68,16 +68,16 @@ public class Practitioner extends HisBaseEntity {
private String addressJson;
/** 拼音码 */
private String spellCode;
private String pyStr;
/** 五笔码 */
private String wbCode;
private String wbStr;
/** 患者院内编码/病历号 */
private String code;
private String busNo;
/** 医保码 */
private String ybCode;
private String ybNo;
/** 系统用户id */
private Long userId;

View File

@@ -31,8 +31,8 @@ public class PractitionerRole extends HisBaseEntity {
/** 名称 */
private String name;
/** 编码 */
private String code;
/** 角色编码 */
private String role_code;
/** 活动标识 */
private Integer activeFlag;

View File

@@ -29,7 +29,7 @@ public class Supplier extends HisBaseEntity {
private Long id;
/** 编号 */
private String code;
private String busNo;
/** 名称 */
private String name;
@@ -41,10 +41,10 @@ public class Supplier extends HisBaseEntity {
private String address;
/** 拼音码 */
private String pyCode;
private String pyStr;
/** 五笔码 */
private String wbCode;
private String wbStr;
/** 联系人电话 */
private String phone;

View File

@@ -11,4 +11,27 @@ import com.openhis.administration.domain.ChargeItemDefApp;
*/
public interface IChargeItemDefAppService extends IService<ChargeItemDefApp> {
/**
* 更新项目定价
*
* @param chargeItemDefApp 更新内容
* @return 更新结果
*/
boolean updateChargeItemDefApp(ChargeItemDefApp chargeItemDefApp);
/**
* 新增费用定价
*
* @param chargeItemDefApp 新增内容
* @return 新增结果
*/
boolean addChargeItemDefApp(ChargeItemDefApp chargeItemDefApp);
/**
* 删除费用定价
*
* @param id 费用定价id
* @return 新增结果
*/
boolean deleteChargeItemDefApp(Long id);
}

View File

@@ -1,5 +1,6 @@
package com.openhis.administration.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.openhis.administration.domain.ChargeItemDefinition;
@@ -11,4 +12,29 @@ import com.openhis.administration.domain.ChargeItemDefinition;
*/
public interface IChargeItemDefinitionService extends IService<ChargeItemDefinition> {
/**
* 获取定价分页列表
*
* @param chargeItemDefinition 定价查询条件
* @param pageNo 页码
* @param pageSize 页面大小
* @return 定价分页列表
*/
Page<ChargeItemDefinition> getPage(ChargeItemDefinition chargeItemDefinition, Integer pageNo, Integer pageSize);
/**
* 新增费用定价
*
* @param chargeItemDefinition 新增内容
* @return 新增结果
*/
boolean addChargeItemDefinition(ChargeItemDefinition chargeItemDefinition);
/**
* 删除费用定价
*
* @param id 费用定价id
* @return 新增结果
*/
boolean deleteChargeItemDefinition(Long id);
}

View File

@@ -14,6 +14,58 @@ import com.openhis.administration.service.IChargeItemDefAppService;
* @date 2025-02-20
*/
@Service
public class ChargeItemDefAppServiceImpl extends ServiceImpl<ChargeItemDefAppMapper, ChargeItemDefApp> implements IChargeItemDefAppService {
public class ChargeItemDefAppServiceImpl extends ServiceImpl<ChargeItemDefAppMapper, ChargeItemDefApp>
implements IChargeItemDefAppService {
/**
* 更新项目定价
*
* @param chargeItemDefApp 更新内容
* @return 更新结果
*/
@Override
public boolean updateChargeItemDefApp(ChargeItemDefApp chargeItemDefApp) {
// 更新样例 一切以实际为主
if (chargeItemDefApp.getId() != null) {
// 获取更新前收费项目,避免更新导致数据库崩溃
if (baseMapper.selectById(chargeItemDefApp.getId()) == null) {
return false;
} else {
return baseMapper.updateById(chargeItemDefApp) > 0;
}
} else {
return false;
}
}
/**
* 新增费用定价
*
* @param chargeItemDefApp 新增内容
* @return 新增结果
*/
@Override
public boolean addChargeItemDefApp(ChargeItemDefApp chargeItemDefApp) {
//此判断是为了避免插入时主键重复
if (chargeItemDefApp.getId() != null) {
return false;
} else {
return baseMapper.insert(chargeItemDefApp) > 0;
}
}
/**
* 删除费用定价
*
* @param id 费用定价id
* @return 新增结果
*/
@Override
public boolean deleteChargeItemDefApp(Long id) {
if (baseMapper.selectById(id) == null) {
return false;
} else {
return baseMapper.deleteById(id) > 0;
}
}
}

View File

@@ -2,10 +2,13 @@ package com.openhis.administration.service.impl;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.openhis.administration.domain.ChargeItemDefinition;
import com.openhis.administration.mapper.ChargeItemDefinitionMapper;
import com.openhis.administration.service.IChargeItemDefinitionService;
import com.openhis.common.enums.DelFlag;
/**
* 费用定价管理Service业务层处理
@@ -14,6 +17,60 @@ import com.openhis.administration.service.IChargeItemDefinitionService;
* @date 2025-02-20
*/
@Service
public class ChargeItemDefinitionServiceImpl extends ServiceImpl<ChargeItemDefinitionMapper, ChargeItemDefinition> implements IChargeItemDefinitionService {
public class ChargeItemDefinitionServiceImpl extends ServiceImpl<ChargeItemDefinitionMapper, ChargeItemDefinition>
implements IChargeItemDefinitionService {
/**
* 获取分页列表
*
* @param chargeItemDefinition 查询条件
* @param pageNo 页码
* @param pageSize 页面大小
* @return 分页列表
*/
@Override
public Page<ChargeItemDefinition> getPage(ChargeItemDefinition chargeItemDefinition, Integer pageNo,
Integer pageSize) {
LambdaQueryWrapper<ChargeItemDefinition> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ChargeItemDefinition::getDeleteFlag, DelFlag.NO.getValue());
//拼接查询条件
if (chargeItemDefinition.getStatusEnum() != null) {
queryWrapper.eq(ChargeItemDefinition::getStatusEnum, chargeItemDefinition.getStatusEnum());
}
return baseMapper.selectPage(new Page<>(pageNo, pageSize), queryWrapper);
}
/**
* 新增费用定价
*
* @param chargeItemDefinition 新增内容
* @return 新增结果
*/
@Override
public boolean addChargeItemDefinition(ChargeItemDefinition chargeItemDefinition) {
//此判断是为了避免插入时主键重复
if (chargeItemDefinition.getId() != null) {
return false;
} else {
return baseMapper.insert(chargeItemDefinition) > 0;
}
}
/**
* 删除费用定价
*
* @param id 费用定价id
* @return 新增结果
*/
@Override
public boolean deleteChargeItemDefinition(Long id) {
if (baseMapper.selectById(id) == null) {
return false;
} else {
return baseMapper.deleteById(id) > 0;
}
}
}

View File

@@ -41,7 +41,7 @@ public class Condition extends HisBaseEntity {
private Integer severityEnum;
/** 疾病或诊断编码 */
private String code;
private String busNo;
/** 身体部位 */
private String bodySiteJson;
@@ -77,7 +77,7 @@ public class Condition extends HisBaseEntity {
private Date recordedDatetime;
/** 记录人 */
private Long recorder;
private Long recorderId;
/** 阶段总结 */
private String stageSummaryText;
@@ -86,7 +86,7 @@ public class Condition extends HisBaseEntity {
private String evidence;
/** 医保编码 */
private String ybCode;
private String ybNo;
}

View File

@@ -32,16 +32,16 @@ public class ConditionDefinition extends HisBaseEntity {
private Integer sourceEnum;
/** 编码 */
private String code;
private String condition_code;
/** 诊断名称 */
private String name;
/** 诊断名称拼音 */
private String pyCode;
private String pyStr;
/** 诊断名称五笔拼音 */
private String wbCode;
private String wbStr;
/** 类型 */
private String typeCode;
@@ -53,7 +53,7 @@ public class ConditionDefinition extends HisBaseEntity {
private Integer ybFlag;
/** 医保编码 */
private String ybCode;
private String ybNo;
/** 医保对码标记 */
private Integer ybMatchFlag;

View File

@@ -43,8 +43,8 @@ public class Procedure extends HisBaseEntity {
/** 分类 */
private Integer categoryEnum;
/** 编码 */
private String code;
/** 手术编码 */
private String procedureCode;
/** 患者Id */
private Long patientId;
@@ -65,7 +65,7 @@ public class Procedure extends HisBaseEntity {
private Date recordedTime;
/** 记录人 */
private Long recorder;
private Long recorderId;
/** 是否有报告 */
private Integer reportFlag;

View File

@@ -44,7 +44,7 @@ public class Claim extends HisBaseEntity {
private Integer useEnum;
/** 索赔指向 */
private Integer insurer;
private Integer insurerEnum;
/** condition_dis */
private String conditionDis;

View File

@@ -38,7 +38,7 @@ public class Contract extends HisBaseEntity {
private Integer categoryEnum;
/** 合同编码 */
private String code;
private String busNo;
/** 机构 */
private Long orgId;

View File

@@ -38,13 +38,13 @@ public class PaymentNotice extends HisBaseEntity {
private Long paypmentReconciliationId;
/** 被支付方 */
private Long payee;
private Long payeeId;
/** 通知方式 */
private String wayCode;
/** 通知内容 */
private String content;
private String contentText;
/** 被通知方 */
private String recipient;
@@ -56,7 +56,7 @@ public class PaymentNotice extends HisBaseEntity {
private Integer payStatus;
/** 机构 */
private String orgCode;
private Integer orgId;
}

View File

@@ -28,8 +28,8 @@ public class PaymentRecDetail extends HisBaseEntity {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** recId */
private Long predecessor;
/** 先前支付明细id */
private Long predecessorId;
/** 付款类型 */
private Integer targetEnum;
@@ -38,13 +38,13 @@ public class PaymentRecDetail extends HisBaseEntity {
private Long accountId;
/** 账户类型 */
private Integer accountType;
private Integer accountEnum;
/** 支付类型 */
private Integer payType;
private Integer payEnum;
/** 支付类型等级 */
private Integer payTypeClass;
private Integer payLevelEnum;
/** 金额 */
private BigDecimal amount;
@@ -56,7 +56,7 @@ public class PaymentRecDetail extends HisBaseEntity {
private BigDecimal chargeAmount;
/** 支付平台返回交易号 */
private String payTransId;
private String payTransNo;
/** 支付平台返回交易信息 */
private String payTransText;

View File

@@ -35,10 +35,10 @@ public class PaymentReconciliation extends HisBaseEntity {
private Long relationId;
/** 支付的业务标识符 */
private String paymentIdentifier;
private String paymentNo;
/** 付款类别 */
private Integer type;
private Integer paymentEnum;
/** 付款实体ID */
private Long paypmentReconciliationId;
@@ -47,10 +47,10 @@ public class PaymentReconciliation extends HisBaseEntity {
private Integer kindEnum;
/** 收款员 */
private Long enterer;
private Long entererId;
/** 支付发起人类型 */
private Integer issuerType;
private Integer issuerEnum;
/** 支付的患者ID */
private Long patientId;
@@ -80,13 +80,13 @@ public class PaymentReconciliation extends HisBaseEntity {
private Integer printCount;
/** 合同编码 */
private String contractCode;
private String contractNo;
/** 处方号集合 */
private String chargeItemJson;
/** 就诊ID */
private Long encoutnerId;
private Long encounterId;
}

View File

@@ -29,7 +29,7 @@ public class Medication extends HisBaseEntity {
private Long id;
/** 药品编码 */
private Long medicationProductId;
private Long medicationDefId;
/** 药品状态 */
private Integer statusEnum;

View File

@@ -29,7 +29,7 @@ public class MedicationDefinition extends HisBaseEntity {
private Long id;
/** 药品编号 */
private Long code;
private String busNo;
/** 药品名称 */
private String name;
@@ -44,10 +44,10 @@ public class MedicationDefinition extends HisBaseEntity {
private String nameEn;
/** 药品名称拼音码 */
private String pyCode;
private String pyStr;
/** 药品五笔码 */
private String wbCode;
private String wbStr;
/** 药品分类 */
private String categoryCode;
@@ -56,10 +56,10 @@ public class MedicationDefinition extends HisBaseEntity {
private String merchandiseName;
/** 商品名称拼音码 */
private String merchandisePyCode;
private String merchandisePyStr;
/** 商品五笔码 */
private String merchandiseWbCode;
private String merchandiseWbStr;
/** 药品单位 */
private String unitCode;
@@ -86,7 +86,7 @@ public class MedicationDefinition extends HisBaseEntity {
private Integer ybMatchFlag;
/** 医保编码 */
private String ybCode;
private String ybNo;
/** 药理作用分类 */
private String pharmacologyCategoryCode;

View File

@@ -29,7 +29,7 @@ public class MedicationDispense extends HisBaseEntity {
private Long id;
/** 药品发放id */
private String code;
private String busNo;
/** 药品发放状态 */
private Integer statusEnum;
@@ -41,7 +41,7 @@ public class MedicationDispense extends HisBaseEntity {
private Date statusChangedTime;
/** 发药类型 */
private Integer dispenseCategory;
private Integer dispenseEnum;
/** 药品编码 */
private Long medicationId;

View File

@@ -29,10 +29,10 @@ public class MedicationRequest extends HisBaseEntity {
private Long id;
/** 药品请求编码 */
private String code;
private String bus_no;
/** 处方号 */
private String prescriptionCode;
private String prescriptionNo;
/** 分组id */
private Long groupId;
@@ -116,7 +116,7 @@ public class MedicationRequest extends HisBaseEntity {
private String reasonJson;
/** 治疗类型 */
private Integer therapyType;
private Integer therapyEnum;
/** 服药时间(开始) */
private Date effectiveDoseStart;
@@ -128,7 +128,7 @@ public class MedicationRequest extends HisBaseEntity {
private Integer skinTestFlag;
/** 合同Id */
private String contractCode;
private String contractNo;
/** 输液标志 */
private Integer infusionFlag;
@@ -167,7 +167,7 @@ public class MedicationRequest extends HisBaseEntity {
private Integer dispensePerDuration;
/** 发药人 */
private Long dispenser;
private Long dispenserId;
}

View File

@@ -1,12 +1,9 @@
package com.openhis.medication.mapper;
import com.baomidou.mybatisplus.annotation.TableName;
import com.core.common.biz.HisBaseMapper;
import com.openhis.medication.domain.MedicationDetail;
import org.springframework.stereotype.Repository;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.openhis.medication.domain.Medication;
import com.openhis.medication.domain.MedicationDetail;
import org.springframework.stereotype.Repository;
import java.util.List;
@@ -16,9 +13,8 @@ import java.util.List;
* @author system
* @date 2025-02-20
*/
@TableName("med_medication")
@Repository
public interface MedicationMapper extends HisBaseMapper<Medication> {
public interface MedicationMapper extends BaseMapper<Medication> {
/**
* 查询药品详细信息列表

View File

@@ -1,6 +1,6 @@
package com.openhis.medication.service;
import com.core.common.biz.HisBaseService;
import com.baomidou.mybatisplus.extension.service.IService;
import com.openhis.medication.domain.Medication;
import com.openhis.medication.domain.MedicationDetail;
@@ -12,7 +12,7 @@ import java.util.List;
* @author system
* @date 2025-02-20
*/
public interface IMedicationService extends HisBaseService<Medication> {
public interface IMedicationService extends IService<Medication> {
/**
* 查询药品信息列表

View File

@@ -1,11 +1,5 @@
package com.openhis.medication.service.impl;
import java.util.List;
import com.core.common.biz.HisBaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.openhis.common.enums.DelFlag;
@@ -13,8 +7,11 @@ import com.openhis.medication.domain.Medication;
import com.openhis.medication.domain.MedicationDetail;
import com.openhis.medication.mapper.MedicationMapper;
import com.openhis.medication.service.IMedicationService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 药品基本信息管理Service业务层处理
@@ -24,7 +21,7 @@ import lombok.extern.slf4j.Slf4j;
*/
@Slf4j
@Service
public class MedicationServiceImpl extends HisBaseServiceImpl<MedicationMapper, Medication> implements IMedicationService {
public class MedicationServiceImpl extends ServiceImpl<MedicationMapper, Medication> implements IMedicationService {
@Autowired
private MedicationMapper medicationMapper;

View File

@@ -32,34 +32,34 @@ public class ActivityDefinition extends HisBaseEntity {
private Integer categoryEnum;
/** 编码 */
private String code;
private String busNo;
/** 项目名称 */
private String name;
/** 项目名称拼音 */
private String pyCode;
private String pyStr;
/** 五笔拼音 */
private String wbCode;
private String wbStr;
/** 类型 */
private Integer typeEnum;
/** 使用单位 */
private String permittedUnit;
private String permittedUnitCode;
/** 医保标记 */
private Integer ybFlag;
/** 医保编码 */
private String ybCode;
private String ybNo;
/** 医保对码标记 */
private Integer ybMatchFlag;
/** 状态 */
private String statusCode;
private Integer statusEnum;
/** 身体部位 */
private String bodySiteCode;
@@ -71,7 +71,7 @@ public class ActivityDefinition extends HisBaseEntity {
private String description;
/** 规则id */
private String ruleId;
private Integer ruleId;
}

View File

@@ -29,7 +29,7 @@ public class DeviceDispense extends HisBaseEntity {
private Long id;
/** 器材发放id */
private String code;
private String busNo;
/** 器材请求id */
private String deviceReqId;

View File

@@ -29,13 +29,13 @@ public class DeviceRequest extends HisBaseEntity {
private Long id;
/** 器材请求编码 */
private String code;
private String busNo;
/** 处方号 */
private String prescriptionCode;
private String prescriptionNo;
/** 相关诊疗项目 */
private String activityId;
private Integer activityId;
/** 组套id */
private Long packageId;

View File

@@ -32,19 +32,19 @@ public class InventoryItem extends HisBaseEntity {
private Integer categoryEnum;
/** 编码 */
private String code;
private String busNo;
/** 名称 */
private String name;
/** 拼音码 */
private String pyCode;
private String pyStr;
/** 五笔码 */
private String wbCode;
private String wbStr;
/** 库存状态 */
private Integer inventoryStatus;
private Integer inventoryStatusEnum;
/** 供应商id */
private Long supplierId;
@@ -92,7 +92,7 @@ public class InventoryItem extends HisBaseEntity {
private Long locationId;
/** 追溯码 */
private String traceCode;
private String traceNo;
/** 追溯码包装层级 */
private Integer packagingLevels;

View File

@@ -29,7 +29,7 @@ public class ServiceRequest extends HisBaseEntity {
private Long id;
/** 处方号 */
private String prescriptionCode;
private String prescriptionNo;
/** 请求基于什么 */
private String basedOnTable;
@@ -56,7 +56,7 @@ public class ServiceRequest extends HisBaseEntity {
private Integer performFlag;
/** 请求code */
private Long code;
private Long activityId;
/** 数量 */
private BigDecimal quantity;
@@ -77,7 +77,7 @@ public class ServiceRequest extends HisBaseEntity {
private Long requesterId;
/** 执行者类型 */
private String performerType;
private String performerTypeCode;
/** 执行人 */
private Long performerId;
@@ -98,7 +98,7 @@ public class ServiceRequest extends HisBaseEntity {
private Date occurrenceEndTime;
/** 历史请求 */
private Long relevantHistory;
private Long relevantHistoryId;
}

View File

@@ -35,13 +35,13 @@ public class SupplyDelivery extends HisBaseEntity {
private Long summaryId;
/** 状态 */
private Integer status;
private Integer statusEnum;
/** 患者id */
private Long patientId;
/** 类型 */
private Integer type;
private Integer typeEnum;
/** 发放项目所属表 */
private String itemTable;
@@ -62,7 +62,7 @@ public class SupplyDelivery extends HisBaseEntity {
private String lotNumber;
/** 追溯码 */
private String traceCode;
private String traceNo;
/** 供应商 */
private Long supplierId;
@@ -82,24 +82,6 @@ public class SupplyDelivery extends HisBaseEntity {
/** 发放周期时间 */
private String occurrenceTiming;
/** 源仓库类型 */
private Integer sourceType;
/** 源仓库 */
private Long sourceLocationId;
/** 源仓位 */
private Long sourceLocationStoreId;
/** 目的仓库类型 */
private Integer purposeType;
/** 目的仓库 */
private Long purposeLocationId;
/** 目的仓位 */
private Long purposeLocationStoreId;
/** 接收人 */
private Long receiverId;

View File

@@ -65,7 +65,7 @@ public class SupplyRequest extends HisBaseEntity {
private Integer itemQuantity;
/** 物品编码 */
private Long code;
private Long itemId;
/** 物品计量单位 */
private String unitIdCode;
@@ -89,7 +89,7 @@ public class SupplyRequest extends HisBaseEntity {
private String reason;
/** 源仓库类型 */
private Integer sourceType;
private Integer sourceTypeEnum;
/** 源仓库 */
private Long sourceLocationId;
@@ -98,7 +98,7 @@ public class SupplyRequest extends HisBaseEntity {
private Long sourceLocationStoreId;
/** 目的类型 */
private Integer purposeType;
private Integer purposeTypeEnum;
/** 目的仓库 */
private Long purposeLocationId;