层级优化,方法内容优化,字段修改

This commit is contained in:
Zhang.WH
2025-03-08 16:17:20 +08:00
parent 85d9cd2e31
commit 78ef62b675
22 changed files with 631 additions and 423 deletions

View File

@@ -3,20 +3,6 @@
*/
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转换器
*
@@ -33,7 +19,7 @@ public class ItemDefinitionAssembler {
// * @return 【费用定价分页列表DTO】分页
// */
// public static Page<ChargeItemDefPageDto> assembleMedDefinitionDto(
// Page<ChargeItemDefinition> chargeItemDefinitionPage, List<ChargeItemDefApp> chargeItemDefAppList,
// Page<ChargeItemDefinition> chargeItemDefinitionPage, List<ChargeItemDefDetail> chargeItemDefAppList,
// List<MedicationDefinition> medicationDefinitionList, ItemDefSearchParam itemDefSearchParam) {
//
// // 将查询到的【药品基本信息管理】列表作成以ID为Key的Map
@@ -41,8 +27,8 @@ public class ItemDefinitionAssembler {
// .collect(Collectors.toMap(MedicationDefinition::getId, Function.identity()));
//
// // 将查询到的【患者管理】列表作成以ID为Key的Map
// Map<Long, ChargeItemDefApp> chargeItemDefAppMap =
// chargeItemDefAppList.stream().collect(Collectors.toMap(ChargeItemDefApp::getId, Function.identity()));
// Map<Long, ChargeItemDefDetail> chargeItemDefAppMap =
// chargeItemDefAppList.stream().collect(Collectors.toMap(ChargeItemDefDetail::getId, Function.identity()));
//
// // 定义【入库单据分页列表DTO】的分页传入【页码】、【行数】、及上面分页的【总数】
// Page<ChargeItemDefPageDto> returnPage = new Page<>(chargeItemDefinitionPage.getCurrent(),
@@ -52,8 +38,8 @@ public class ItemDefinitionAssembler {
// returnPage.setRecords(chargeItemDefinitionPage.getRecords().stream().map(entity -> {
// // 定义【入库单据分页列表DTO】
// ChargeItemDefPageDto dto = new ChargeItemDefPageDto();
// ChargeItemDefApp chargeItemDefApp =
// chargeItemDefAppMap.getOrDefault(entity.getInstanceId(), new ChargeItemDefApp());
// ChargeItemDefDetail chargeItemDefApp =
// chargeItemDefAppMap.getOrDefault(entity.getInstanceId(), new ChargeItemDefDetail());
// MedicationDefinition medicationDefinition =
// medicationDefinitionMap.getOrDefault(entity.getInstanceId(), new MedicationDefinition());
// // 从主表COPY需要的字段
@@ -90,7 +76,7 @@ public class ItemDefinitionAssembler {
// * @return 【费用定价分页列表DTO】分页
// */
// public static Page<ChargeItemDefPageDto> assembleDevDefinitionDto(
// Page<ChargeItemDefinition> chargeItemDefinitionPage, List<ChargeItemDefApp> chargeItemDefAppList,
// Page<ChargeItemDefinition> chargeItemDefinitionPage, List<ChargeItemDefDetail> chargeItemDefAppList,
// List<DeviceDefinition> medicationDefinitionList, ItemDefSearchParam itemDefSearchParam) {
//
// // 将查询到的【药品基本信息管理】列表作成以ID为Key的Map
@@ -98,8 +84,8 @@ public class ItemDefinitionAssembler {
// 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()));
// Map<Long, ChargeItemDefDetail> chargeItemDefAppMap =
// chargeItemDefAppList.stream().collect(Collectors.toMap(ChargeItemDefDetail::getId, Function.identity()));
//
// // 定义【入库单据分页列表DTO】的分页传入【页码】、【行数】、及上面分页的【总数】
// Page<ChargeItemDefPageDto> returnPage = new Page<>(chargeItemDefinitionPage.getCurrent(),
@@ -109,8 +95,8 @@ public class ItemDefinitionAssembler {
// returnPage.setRecords(chargeItemDefinitionPage.getRecords().stream().map(entity -> {
// // 定义【入库单据分页列表DTO】
// ChargeItemDefPageDto dto = new ChargeItemDefPageDto();
// ChargeItemDefApp chargeItemDefApp =
// chargeItemDefAppMap.getOrDefault(entity.getInstanceId(), new ChargeItemDefApp());
// ChargeItemDefDetail chargeItemDefApp =
// chargeItemDefAppMap.getOrDefault(entity.getInstanceId(), new ChargeItemDefDetail());
// DeviceDefinition deviceDefinition =
// deviceDefinitionMap.getOrDefault(entity.getInstanceId(), new DeviceDefinition());
// // 从主表COPY需要的字段
@@ -147,7 +133,7 @@ public class ItemDefinitionAssembler {
// * @return 【费用定价分页列表DTO】分页
// */
// public static Page<ChargeItemDefPageDto> assembleProDefinitionDto(
// Page<ChargeItemDefinition> chargeItemDefinitionPage, List<ChargeItemDefApp> chargeItemDefAppList,
// Page<ChargeItemDefinition> chargeItemDefinitionPage, List<ChargeItemDefDetail> chargeItemDefAppList,
// List<ActivityDefinition> medicationDefinitionList, ItemDefSearchParam itemDefSearchParam) {
//
// // 将查询到的【药品基本信息管理】列表作成以ID为Key的Map
@@ -155,8 +141,8 @@ public class ItemDefinitionAssembler {
// 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()));
// Map<Long, ChargeItemDefDetail> chargeItemDefAppMap =
// chargeItemDefAppList.stream().collect(Collectors.toMap(ChargeItemDefDetail::getId, Function.identity()));
//
// // 定义【入库单据分页列表DTO】的分页传入【页码】、【行数】、及上面分页的【总数】
// Page<ChargeItemDefPageDto> returnPage = new Page<>(chargeItemDefinitionPage.getCurrent(),
@@ -166,8 +152,8 @@ public class ItemDefinitionAssembler {
// returnPage.setRecords(chargeItemDefinitionPage.getRecords().stream().map(entity -> {
// // 定义【入库单据分页列表DTO】
// ChargeItemDefPageDto dto = new ChargeItemDefPageDto();
// ChargeItemDefApp chargeItemDefApp =
// chargeItemDefAppMap.getOrDefault(entity.getInstanceId(), new ChargeItemDefApp());
// ChargeItemDefDetail chargeItemDefApp =
// chargeItemDefAppMap.getOrDefault(entity.getInstanceId(), new ChargeItemDefDetail());
// ActivityDefinition deviceDefinition =
// activityDefinitionMap.getOrDefault(entity.getInstanceId(), new ActivityDefinition());
// // 从主表COPY需要的字段

View File

@@ -8,6 +8,7 @@ import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
import com.openhis.administration.domain.ChargeItemDefDetail;
import org.apache.ibatis.builder.MapperBuilderAssistant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -26,9 +27,8 @@ import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.MessageUtils;
import com.core.common.utils.StringUtils;
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.IChargeItemDefDetailService;
import com.openhis.administration.service.IChargeItemDefinitionService;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
@@ -55,7 +55,7 @@ public class ItemDefinitionController {
@Autowired(required = false)
private IChargeItemDefinitionService chargeItemDefinitionService;
@Autowired(required = false)
private IChargeItemDefAppService chargeItemDefAppService;
private IChargeItemDefDetailService chargeItemDefAppService;
@Autowired(required = false)
private ChargeItemDefSearchMapper chargeItemDefSearchMapper;
@Autowired(required = false)
@@ -185,11 +185,11 @@ public class ItemDefinitionController {
}
// 更新收费项目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)
ChargeItemDefDetail chargeItemDefDetail = new ChargeItemDefDetail();
BeanUtils.copyProperties(itemDefinitionDto, chargeItemDefDetail);
chargeItemDefDetail.setDefinitionId(itemDefinitionDto.getId());
chargeItemDefDetail.setId(itemDefinitionDto.getItemId());
return chargeItemDefAppService.updateChargeItemDefApp(chargeItemDefDetail)
? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"费用定价"}))
: R.fail(PromptMsgConstant.Common.M00007, null);
}

View File

@@ -0,0 +1,72 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.inventorymanage.appservice;
import javax.servlet.http.HttpServletRequest;
import com.core.common.core.domain.R;
import com.openhis.web.inventorymanage.dto.InventoryReceiptDto;
import com.openhis.web.inventorymanage.dto.InventorySearchParam;
/**
* 采购入库 service
*
* @author zwh
* @date 2025-03-08
*/
public interface IPurchaseInventoryAppService {
/**
* 入库单据列表
*
* @param inventorySearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 入库单据分页列表
*/
R<?> getPage(InventorySearchParam inventorySearchParam, Integer pageNo, Integer pageSize, String searchKey,
HttpServletRequest request);
/**
* 入库单据详情
*
* @param busNo 单据号
* @return 入库单据详情
*/
R<?> getDetail(String busNo);
/**
* 添加/编辑入库单据
*
* @param inventoryReceiptDto 入库单据
* @return 操作结果
*/
R<?> addOrEditInventoryReceipt(InventoryReceiptDto inventoryReceiptDto);
/**
* 删除方法
*
* @param supplyRequestId 主表id
* @return 操作结果
*/
R<?> deleteInventoryReceipt(Long supplyRequestId);
/**
* 提交审批
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> submitApproval(String busNo);
/**
* 撤回审批
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> withdrawApproval(String busNo);
}

View File

@@ -5,19 +5,20 @@ package com.openhis.web.inventorymanage.appservice;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.core.common.core.domain.R;
import com.openhis.administration.domain.ChargeItemDefApp;
import com.openhis.web.inventorymanage.dto.ItemChargeDetailDto;
import com.openhis.web.inventorymanage.dto.SupplyItemDetailDto;
import com.openhis.workflow.domain.SupplyRequest;
/**
* 采购入库 service
* 单据审批 service
*
* @author zwh
* @date 2025-03-05
*/
public interface IInventoryManageService {
public interface IReceiptApprovalAppService {
/**
* 校验单据是否正确
@@ -45,11 +46,20 @@ public interface IInventoryManageService {
List<ItemChargeDetailDto> getItemChargeDetail(List<Long> itemIdList);
/**
* 入库项价格验证
* 审批通过
*
* @param agreedList 供应单据
* @param chargeDetailList 项目价格
* @return 价格定义子表数据
* @param busNo 单据
* @param request 请求数据
* @return 操作结果
*/
List<ChargeItemDefApp> verifyItemCharge(List<SupplyRequest> agreedList, List<ItemChargeDetailDto> chargeDetailList);
R<?> approved(String busNo, HttpServletRequest request);
/**
* 审批驳回
*
* @param busNo 单据号
* @param request 请求数据
* @return 操作结果
*/
R<?> reject(String busNo, HttpServletRequest request);
}

View File

@@ -1,151 +0,0 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.inventorymanage.appservice.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.core.common.core.domain.R;
import com.openhis.administration.domain.ChargeItemDefApp;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.enums.EventStatus;
import com.openhis.web.inventorymanage.appservice.IInventoryManageService;
import com.openhis.web.inventorymanage.dto.ItemChargeDetailDto;
import com.openhis.web.inventorymanage.dto.SupplyItemDetailDto;
import com.openhis.web.inventorymanage.mapper.InventoryManageMapper;
import com.openhis.workflow.domain.SupplyRequest;
/**
* 采购入库 impl
*
* @author zwh
* @date 2025-03-05
*/
@Service
public class InventoryManageServiceImpl implements IInventoryManageService {
@Autowired
private InventoryManageMapper inventoryManageMapper;
/**
* 校验单据是否正确
*
* @param supplyRequest 单据信息
* @return 校验结果
*/
@Override
public R<?> verifyInventoryReceipt(SupplyRequest supplyRequest) {
// // 判断同一物品的批次号是否重复
// boolean result = supplyRequestMapper
// .exists(new LambdaQueryWrapper<SupplyRequest>().eq(SupplyRequest::getItemId, supplyRequest.getItemId())
// .eq(SupplyRequest::getLotNumber, supplyRequest.getLotNumber())
// .ne(supplyRequest.getId() != null, SupplyRequest::getId, supplyRequest.getId()));
// if (result) {
// return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00003, new Object[] {"批次号"}));
// }
return R.ok();
}
/**
* 根据单据号获取供应单据及供应项相关详细信息
*
* @param busNo 单据号
* @param itemTable 供应项所在表名
* @return 供应单据及供应项相关详细信息
*/
@Override
public List<SupplyItemDetailDto> getSupplyItemDetail(String busNo, String itemTable) {
List<SupplyItemDetailDto> supplyItemDetailList;
// 判断供应项是药品还是耗材
if (CommonConstants.TableName.MED_MEDICATION_DEFINITION.equals(itemTable)) {
supplyItemDetailList = inventoryManageMapper.selectSupplyMedDetail(busNo, EventStatus.COMPLETED.getValue());
} else if (CommonConstants.TableName.ADM_DEVICE.equals(itemTable)) {
supplyItemDetailList = inventoryManageMapper.selectSupplyDevDetail(busNo, EventStatus.COMPLETED.getValue());
} else {
return null;
}
return supplyItemDetailList;
}
/**
* 获取物品的价格信息
*
* @param itemIdList 物品id
* @return 价格信息
*/
@Override
public List<ItemChargeDetailDto> getItemChargeDetail(List<Long> itemIdList) {
// todo未来会移到charge相关的service中
if (!itemIdList.isEmpty()) {
return inventoryManageMapper.selectChargeDetail(itemIdList);
}
return null;
}
/**
* 入库项价格验证
*
* @param agreedList 供应单据
* @param chargeDetailList 项目价格
* @return 价格定义子表数据
*/
@Override
public List<ChargeItemDefApp> verifyItemCharge(List<SupplyRequest> agreedList,
List<ItemChargeDetailDto> chargeDetailList) {
// todo价格换算的事情后续补上
List<ChargeItemDefApp> resultList = new ArrayList<>();
// 创建以项目id为key的map用于匹配对应的供应项目
Map<Long, ItemChargeDetailDto> chargeDetailMap =
chargeDetailList.stream().collect(Collectors.toMap(ItemChargeDetailDto::getInstanceId, dto -> dto));
for (SupplyRequest supplyRequest : agreedList) {
Long itemId = supplyRequest.getItemId();
ItemChargeDetailDto chargeDetail = chargeDetailMap.get(itemId);
if (chargeDetail == null) {
// 未找到匹配的价格项则跳过
continue;
}
// 比较批号是否一致
if (!chargeDetail.getConditionLotnumber().equals(supplyRequest.getLotNumber())) {
// todo:此时之加入了一条单位价格,需不需要进行大单位小单位的换算,增加两条价格
resultList.add(this.addChargeItemDefApp(supplyRequest, chargeDetail));
} else {
// 检查单位是否匹配
if (chargeDetail.getConditionUnitCode().equals(supplyRequest.getUnitCode())) {
// 比较价格是否一致
if (chargeDetail.getUnitPrice().compareTo(supplyRequest.getPrice()) != 0) {
// todo此时需不需要增加两条价格进行单位换算
resultList.add(this.addChargeItemDefApp(supplyRequest, chargeDetail));
}
} else {
// todo如果以上换算加入了两条则不存在这种情况否则需要添加一条批次号相同单位不同的两条记录理论上不存在
}
}
}
return resultList;
}
/**
* 添加项目定价子表信息
*
* @param supplyRequest 供应申请单
* @param itemChargeDetail 项目价格信息
* @return 项目定价子表
*/
private ChargeItemDefApp addChargeItemDefApp(SupplyRequest supplyRequest, ItemChargeDetailDto itemChargeDetail) {
ChargeItemDefApp app = new ChargeItemDefApp();
app.setAmount(supplyRequest.getPrice()).setConditionLotnumber(supplyRequest.getLotNumber())
.setDefinitionId(itemChargeDetail.getDefinitionId()).setConditionUnitCode(supplyRequest.getUnitCode());
return app;
}
}

View File

@@ -0,0 +1,166 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.inventorymanage.appservice.impl;
import java.util.HashSet;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.core.common.utils.bean.BeanUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.SupplyCategory;
import com.openhis.common.enums.SupplyType;
import com.openhis.common.utils.HisPageUtils;
import com.openhis.common.utils.HisQueryUtils;
import com.openhis.web.inventorymanage.appservice.IPurchaseInventoryAppService;
import com.openhis.web.inventorymanage.dto.InventoryReceiptDto;
import com.openhis.web.inventorymanage.dto.InventoryReceiptPageDto;
import com.openhis.web.inventorymanage.dto.InventorySearchParam;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.mapper.SupplyRequestMapper;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 采购入库 impl
*
* @author zwh
* @date 2025-03-08
*/
@Service
public class PurchaseInventoryAppServiceImpl implements IPurchaseInventoryAppService {
@Autowired
private SupplyRequestMapper supplyRequestMapper;
@Autowired
private ISupplyRequestService supplyRequestService;
/**
* 入库单据列表
*
* @param inventorySearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 入库单据分页列表
*/
@Override
public R<?> getPage(InventorySearchParam inventorySearchParam, Integer pageNo, Integer pageSize, String searchKey,
HttpServletRequest request) {
// 按照单据号groupBy
// 设置模糊查询的字段名
HashSet<String> searchFields = new HashSet<>();
searchFields.add(CommonConstants.FieldName.BusNo);
// 构建查询条件
QueryWrapper<SupplyRequest> queryWrapper =
HisQueryUtils.buildQueryWrapper(inventorySearchParam, searchKey, searchFields, request);
// 查询入库单据分页列表
Page<InventoryReceiptPageDto> inventoryReceiptPage =
HisPageUtils.selectPage(supplyRequestMapper, queryWrapper, pageNo, pageSize, InventoryReceiptPageDto.class);
return R.ok(inventoryReceiptPage);
}
/**
* 入库单据详情
*
* @param busNo 单据号
* @return 入库单据详情
*/
@Override
public R<?> getDetail(String busNo) {
return null;
}
/**
* 添加/编辑入库单据
*
* @param inventoryReceiptDto 入库单据
* @return 操作结果
*/
@Override
public R<?> addOrEditInventoryReceipt(InventoryReceiptDto inventoryReceiptDto) {
// 初始化单据信息
SupplyRequest supplyRequest = new SupplyRequest();
BeanUtils.copyProperties(inventoryReceiptDto, supplyRequest);
// // 业务校验
// R<?> result = purchaseInventoryService.verifyInventoryReceipt(supplyRequest);
// // 校验失败返回提示信息
// if (result.getCode() == HttpStatus.ERROR) {
// return result;
// }
if (inventoryReceiptDto.getId() != null) {
// 更新单据信息
supplyRequestService.updateById(supplyRequest);
} else {
// 生成待发送的入库单据
supplyRequest
// 单据分类:非库存供应
.setCategoryEnum(SupplyCategory.NON_STOCK.getValue())
// 单据类型:采购入库
.setTypeEnum(SupplyType.PURCHASE_INVENTORY.getValue())
// 申请时间
.setApplyTime(DateUtils.getNowDate());
supplyRequestService.save(supplyRequest);
}
// 返回单据id
return R.ok(supplyRequest.getId(), null);
}
/**
* 删除方法
*
* @param supplyRequestId 主表id
* @return 操作结果
*/
@Override
public R<?> deleteInventoryReceipt(Long supplyRequestId) {
// 删除单据
boolean result = supplyRequestService.removeById(supplyRequestId);
return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null))
: R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
/**
* 提交审批
*
* @param busNo 单据号
* @return 操作结果
*/
@Override
public R<?> submitApproval(String busNo) {
// 单据提交审核
boolean result = supplyRequestService.submitApproval(busNo);
return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null))
: R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
/**
* 撤回审批
*
* @param busNo 单据号
* @return 操作结果
*/
@Override
public R<?> withdrawApproval(String busNo) {
// 撤回审核
boolean result = supplyRequestService.withdrawApproval(busNo);
return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null))
: R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
}

View File

@@ -0,0 +1,267 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.inventorymanage.appservice.impl;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.tuple.Pair;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.core.common.core.domain.R;
import com.core.common.core.domain.model.LoginUser;
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.core.framework.web.service.TokenService;
import com.openhis.administration.domain.ChargeItem;
import com.openhis.administration.domain.ChargeItemDefDetail;
import com.openhis.administration.service.IChargeItemDefDetailService;
import com.openhis.administration.service.IChargeItemService;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.EventStatus;
import com.openhis.web.inventorymanage.appservice.IReceiptApprovalAppService;
import com.openhis.web.inventorymanage.assembler.InventoryManageAssembler;
import com.openhis.web.inventorymanage.dto.ItemChargeDetailDto;
import com.openhis.web.inventorymanage.dto.SupplyItemDetailDto;
import com.openhis.web.inventorymanage.mapper.InventoryManageMapper;
import com.openhis.workflow.domain.InventoryItem;
import com.openhis.workflow.domain.SupplyDelivery;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.IInventoryItemService;
import com.openhis.workflow.service.ISupplyDeliveryService;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 单据审批 impl
*
* @author zwh
* @date 2025-03-05
*/
@Service
public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService {
@Autowired
private ISupplyRequestService supplyRequestService;
@Autowired
private ISupplyDeliveryService supplyDeliveryService;
@Autowired
private IChargeItemDefDetailService chargeItemDefAppService;
@Autowired
private IInventoryItemService inventoryItemService;
@Autowired
private IChargeItemService chargeItemService;
@Autowired
private TokenService tokenService;
@Autowired
private InventoryManageMapper inventoryManageMapper;
/**
* 校验单据是否正确
*
* @param supplyRequest 单据信息
* @return 校验结果
*/
@Override
public R<?> verifyInventoryReceipt(SupplyRequest supplyRequest) {
// // 判断同一物品的批次号是否重复
// boolean result = supplyRequestMapper
// .exists(new LambdaQueryWrapper<SupplyRequest>().eq(SupplyRequest::getItemId, supplyRequest.getItemId())
// .eq(SupplyRequest::getLotNumber, supplyRequest.getLotNumber())
// .ne(supplyRequest.getId() != null, SupplyRequest::getId, supplyRequest.getId()));
// if (result) {
// return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00003, new Object[] {"批次号"}));
// }
return R.ok();
}
/**
* 根据单据号获取供应单据及供应项相关详细信息
*
* @param busNo 单据号
* @param itemTable 供应项所在表名
* @return 供应单据及供应项相关详细信息
*/
@Override
public List<SupplyItemDetailDto> getSupplyItemDetail(String busNo, String itemTable) {
List<SupplyItemDetailDto> supplyItemDetailList;
// 判断供应项是药品还是耗材
if (CommonConstants.TableName.MED_MEDICATION_DEFINITION.equals(itemTable)) {
supplyItemDetailList = inventoryManageMapper.selectSupplyMedDetail(busNo, EventStatus.COMPLETED.getValue());
} else if (CommonConstants.TableName.ADM_DEVICE.equals(itemTable)) {
supplyItemDetailList = inventoryManageMapper.selectSupplyDevDetail(busNo, EventStatus.COMPLETED.getValue());
} else {
return null;
}
return supplyItemDetailList;
}
/**
* 获取物品的价格信息
*
* @param itemIdList 物品id
* @return 价格信息
*/
@Override
public List<ItemChargeDetailDto> getItemChargeDetail(List<Long> itemIdList) {
// todo未来会移到charge相关的service中
if (!itemIdList.isEmpty()) {
return inventoryManageMapper.selectChargeDetail(itemIdList);
}
return null;
}
/**
* 审批通过
*
* @param busNo 单据号
* @param request 请求数据
* @return 操作结果
*/
@Override
public R<?> approved(String busNo, HttpServletRequest request) {
// 获取登录者的信息
LoginUser loginUser = tokenService.getLoginUser(request);
// 获取当前时间
Date now = DateUtils.getNowDate();
// 审批单据并返回单据详情
List<SupplyRequest> agreedList = supplyRequestService.agreeRequest(busNo, loginUser, now);
if (agreedList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
// 根据单据,发放物品
List<SupplyDelivery> deliveredList = supplyDeliveryService.createCompletedSupplyDelivery(agreedList, now);
if (deliveredList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
// 获取供应项目所在表
String itemTable = supplyRequestService.getItemTable(agreedList);
// 获取供应的物品
List<Long> itemIdList = supplyRequestService.getItem(agreedList);
// 获取项目价格相关信息
List<ItemChargeDetailDto> chargeDetailList = this.getItemChargeDetail(itemIdList);
List<ChargeItemDefDetail> chargeItemDefDetailList = new ArrayList<>();
if (!chargeDetailList.isEmpty()) {
// 生成与之前定价不同的定价子表数据
chargeItemDefDetailList = this.creatChargeItemDetail(agreedList, chargeDetailList);
}
if (!chargeItemDefDetailList.isEmpty()) {
for (ChargeItemDefDetail chargeItemDefDetail : chargeItemDefDetailList) {
// 增加项目定价子表数据
chargeItemDefAppService.addChargeItemDefApp(chargeItemDefDetail);
}
}
// 查询供应项目的详细信息
List<SupplyItemDetailDto> supplyItemDetailList = this.getSupplyItemDetail(busNo, itemTable);
if (!supplyItemDetailList.isEmpty()) {
// 将供应项目的详细信息装配为库存项目和采购账单
Pair<List<ChargeItem>, List<InventoryItem>> listPair =
InventoryManageAssembler.assembleChargeAndInventory(supplyItemDetailList, now);
if (listPair != null) {
// 创建已结算的采购财务流水
chargeItemService.createBilledPurchaseCharge(listPair.getLeft());
// 入库
inventoryItemService.stockIn(listPair.getRight());
}
}
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
/**
* 审批驳回
*
* @param busNo 单据号
* @param request 请求数据
* @return 操作结果
*/
@Override
public R<?> reject(String busNo, HttpServletRequest request) {
// 获取当前时间
Date now = DateUtils.getNowDate();
// 获取登录者的信息
LoginUser loginUser = tokenService.getLoginUser(request);
// 驳回单据
boolean result = supplyRequestService.rejectRequest(busNo, loginUser, now);
return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null))
: R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
/**
* 入库项价格验证
*
* @param agreedList 供应单据
* @param chargeDetailList 项目价格
* @return 价格定义子表数据
*/
private List<ChargeItemDefDetail> creatChargeItemDetail(List<SupplyRequest> agreedList,
List<ItemChargeDetailDto> chargeDetailList) {
List<ChargeItemDefDetail> resultList = new ArrayList<>();
// 将各个项目的定价信息按项目id分组
Map<Long, List<ItemChargeDetailDto>> chargeDetailGroup =
chargeDetailList.stream().collect(Collectors.groupingBy(ItemChargeDetailDto::getInstanceId));
for (SupplyRequest supplyRequest : agreedList) {
Long itemId = supplyRequest.getItemId();
// 通过供应项目id匹配项目定价
List<ItemChargeDetailDto> details = chargeDetailGroup.get(itemId);
if (details == null)
continue;
// 生成请求的命中值
String lotUnitCondition =
String.format(CommonConstants.Common.COMMA, supplyRequest.getLotNumber(), supplyRequest.getUnitCode());
String lotMinUnitCondition = String.format(CommonConstants.Common.COMMA, supplyRequest.getLotNumber(),
supplyRequest.getMinUnitCode());
for (ItemChargeDetailDto detail : details) {
// 判断请求中的命中值是否命中了定价的条件
boolean isConditionMatched = lotUnitCondition.equals(detail.getConditionValue())
|| lotMinUnitCondition.equals(detail.getConditionValue());
// 如果未命中或命中价格不同,则新增数据
if (isConditionMatched || !lotUnitCondition.equals(detail.getConditionValue())) {
resultList.add(this.addChargeItemDefApp(lotMinUnitCondition, supplyRequest.getMinSellPrice(),
detail.getDefinitionId()));
resultList.add(this.addChargeItemDefApp(lotUnitCondition, supplyRequest.getSellPrice(),
detail.getDefinitionId()));
}
}
}
return resultList;
}
/**
* 添加项目定价子表信息
*
* @param conditionValue 命中值
* @param sellPrice 售价
* @param definitionId 主表id
* @return 子表信息
*/
private ChargeItemDefDetail addChargeItemDefApp(String conditionValue, BigDecimal sellPrice, Long definitionId) {
ChargeItemDefDetail chargeItemDefDetail = new ChargeItemDefDetail();
// todo命中条件或建成字典枚举此处为批次号单位
chargeItemDefDetail
// 命中值
.setConditionValue(conditionValue)
// 主表id
.setDefinitionId(definitionId)
// 售价
.setAmount(sellPrice);
return chargeItemDefDetail;
}
}

View File

@@ -3,33 +3,16 @@
*/
package com.openhis.web.inventorymanage.controller;
import java.util.HashSet;
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.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.core.common.utils.bean.BeanUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.SupplyCategory;
import com.openhis.common.enums.SupplyType;
import com.openhis.common.utils.HisPageUtils;
import com.openhis.common.utils.HisQueryUtils;
import com.openhis.web.inventorymanage.appservice.IInventoryManageService;
import com.openhis.web.inventorymanage.appservice.IPurchaseInventoryAppService;
import com.openhis.web.inventorymanage.dto.InventoryReceiptDto;
import com.openhis.web.inventorymanage.dto.InventoryReceiptPageDto;
import com.openhis.web.inventorymanage.dto.InventorySearchParam;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.mapper.SupplyRequestMapper;
import com.openhis.workflow.service.ISupplyRequestService;
import lombok.extern.slf4j.Slf4j;
@@ -45,11 +28,7 @@ import lombok.extern.slf4j.Slf4j;
public class PurchaseInventoryController {
@Autowired
private ISupplyRequestService supplyRequestService;
@Autowired
private IInventoryManageService inventoryManageService;
@Autowired
private SupplyRequestMapper supplyRequestMapper;
private IPurchaseInventoryAppService purchaseInventoryAppService;
// @GetMapping(value = "/init")
// public R<?> init() {
@@ -86,20 +65,7 @@ public class PurchaseInventoryController {
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
// 按照单据号groupBy
// 设置模糊查询的字段名
HashSet<String> searchFields = new HashSet<>();
searchFields.add(CommonConstants.FieldName.BusNo);
// 构建查询条件
QueryWrapper<SupplyRequest> queryWrapper =
HisQueryUtils.buildQueryWrapper(inventorySearchParam, searchKey, searchFields, request);
// 查询入库单据分页列表
Page<InventoryReceiptPageDto> inventoryReceiptPage =
HisPageUtils.selectPage(supplyRequestMapper, queryWrapper, pageNo, pageSize, InventoryReceiptPageDto.class);
return R.ok(inventoryReceiptPage);
return purchaseInventoryAppService.getPage(inventorySearchParam, pageNo, pageSize, searchKey, request);
}
/**
@@ -108,10 +74,9 @@ public class PurchaseInventoryController {
* @param busNo 单据号
* @return 入库单据详情
*/
@GetMapping(value = "/inventory-receipt")
public R<?> getDetail(@RequestParam String busNo) {
//
return R.ok();
return purchaseInventoryAppService.getDetail(busNo);
}
/**
@@ -120,36 +85,9 @@ public class PurchaseInventoryController {
* @param inventoryReceiptDto 入库单据
* @return 操作结果
*/
@PostMapping("/inventory-receipt")
@PutMapping("/inventory-receipt")
public R<?> addOrEditInventoryReceipt(@Validated @RequestBody InventoryReceiptDto inventoryReceiptDto) {
// 初始化单据信息
SupplyRequest supplyRequest = new SupplyRequest();
BeanUtils.copyProperties(inventoryReceiptDto, supplyRequest);
// // 业务校验
// R<?> result = purchaseInventoryService.verifyInventoryReceipt(supplyRequest);
// // 校验失败返回提示信息
// if (result.getCode() == HttpStatus.ERROR) {
// return result;
// }
if (inventoryReceiptDto.getId() != null) {
// 更新单据信息
supplyRequestService.updateById(supplyRequest);
} else {
// 生成待发送的入库单据
supplyRequest
// 单据分类:非库存供应
.setCategoryEnum(SupplyCategory.NON_STOCK.getValue())
// 单据类型:采购入库
.setTypeEnum(SupplyType.PURCHASE_INVENTORY.getValue())
// 申请时间
.setApplyTime(DateUtils.getNowDate());
supplyRequestService.save(supplyRequest);
}
// 返回单据id
return R.ok(supplyRequest.getId(), null);
return purchaseInventoryAppService.addOrEditInventoryReceipt(inventoryReceiptDto);
}
/**
@@ -160,22 +98,18 @@ public class PurchaseInventoryController {
*/
@DeleteMapping("/inventory-receipt")
public R<?> deleteInventoryReceipt(@RequestParam Long supplyRequestId) {
// 删除单据
boolean result = supplyRequestService.removeById(supplyRequestId);
return result ? R.ok() : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
return purchaseInventoryAppService.deleteInventoryReceipt(supplyRequestId);
}
/**
* 提交审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/submit-approval")
public R<?> submitApproval(@RequestParam String busNo) {
// 单据提交审核
boolean result = supplyRequestService.submitApproval(busNo);
return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null))
: R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
return purchaseInventoryAppService.submitApproval(busNo);
}
/**
@@ -186,9 +120,6 @@ public class PurchaseInventoryController {
*/
@PutMapping("/withdraw-approval")
public R<?> withdrawApproval(@RequestParam String busNo) {
// 撤回审核
boolean result = supplyRequestService.withdrawApproval(busNo);
return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null))
: R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
return purchaseInventoryAppService.withdrawApproval(busNo);
}
}

View File

@@ -3,13 +3,8 @@
*/
package com.openhis.web.inventorymanage.controller;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.tuple.Pair;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -17,25 +12,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.core.common.core.domain.R;
import com.core.common.core.domain.model.LoginUser;
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.core.framework.web.service.TokenService;
import com.openhis.administration.domain.ChargeItem;
import com.openhis.administration.domain.ChargeItemDefApp;
import com.openhis.administration.service.IChargeItemDefAppService;
import com.openhis.administration.service.IChargeItemService;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.web.inventorymanage.appservice.IInventoryManageService;
import com.openhis.web.inventorymanage.assembler.InventoryManageAssembler;
import com.openhis.web.inventorymanage.dto.ItemChargeDetailDto;
import com.openhis.web.inventorymanage.dto.SupplyItemDetailDto;
import com.openhis.workflow.domain.InventoryItem;
import com.openhis.workflow.domain.SupplyDelivery;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.IInventoryItemService;
import com.openhis.workflow.service.ISupplyDeliveryService;
import com.openhis.workflow.service.ISupplyRequestService;
import com.openhis.web.inventorymanage.appservice.IReceiptApprovalAppService;
import lombok.extern.slf4j.Slf4j;
@@ -51,93 +28,29 @@ import lombok.extern.slf4j.Slf4j;
public class ReceiptApprovalController {
@Autowired
private ISupplyRequestService supplyRequestService;
@Autowired
private ISupplyDeliveryService supplyDeliveryService;
@Autowired
private IChargeItemDefAppService chargeItemDefAppService;
@Autowired
private IInventoryItemService inventoryItemService;
@Autowired
private IChargeItemService chargeItemService;
@Autowired
private IInventoryManageService inventoryManageService;
@Autowired
private TokenService tokenService;
private IReceiptApprovalAppService receiptApprovalAppService;
/**
* 审批通过
*
* @param busNo 单据号
* @param request 请求数据
* @return 操作结果
*/
@PostMapping("/approved")
public R<?> approved(@RequestParam String busNo, HttpServletRequest request) {
// 获取登录者的信息
LoginUser loginUser = tokenService.getLoginUser(request);
// 获取当前时间
Date now = DateUtils.getNowDate();
// 审批单据并返回单据详情
List<SupplyRequest> agreedList = supplyRequestService.agreeRequest(busNo, loginUser, now);
if (agreedList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
// 根据单据,发放物品
List<SupplyDelivery> deliveredList = supplyDeliveryService.createCompletedSupplyDelivery(agreedList, now);
if (deliveredList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
// 获取供应项目所在表
String itemTable = supplyRequestService.getItemTable(agreedList);
// 获取供应的物品
List<Long> itemIdList = supplyRequestService.getItem(agreedList);
// 获取项目价格相关信息
List<ItemChargeDetailDto> chargeDetailList = inventoryManageService.getItemChargeDetail(itemIdList);
List<ChargeItemDefApp> chargeItemDefAppList = new ArrayList<>();
if (!chargeDetailList.isEmpty()) {
// 入库项价格验证(验证项:单位价格,批次号)
chargeItemDefAppList = inventoryManageService.verifyItemCharge(agreedList, chargeDetailList);
}
if (!chargeItemDefAppList.isEmpty()) {
for (ChargeItemDefApp chargeItemDefApp : chargeItemDefAppList) {
// 增加项目定价子表数据
chargeItemDefAppService.addChargeItemDefApp(chargeItemDefApp);
}
}
// 查询供应项目的详细信息
List<SupplyItemDetailDto> supplyItemDetailList = inventoryManageService.getSupplyItemDetail(busNo, itemTable);
if (!supplyItemDetailList.isEmpty()) {
// 将供应项目的详细信息装配为库存项目和采购账单
Pair<List<ChargeItem>, List<InventoryItem>> listPair =
InventoryManageAssembler.assembleChargeAndInventory(supplyItemDetailList, now);
if (listPair != null) {
// 创建已结算的采购财务流水
chargeItemService.createBilledPurchaseCharge(listPair.getLeft());
// 入库
inventoryItemService.stockIn(listPair.getRight());
}
}
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
return receiptApprovalAppService.approved(busNo, request);
}
/**
* 审批驳回
*
* @param busNo 单据号
* @param request 请求数据
* @return 操作结果
*/
@PostMapping("/reject")
public R<?> reject(@RequestParam String busNo, HttpServletRequest request) {
// 获取当前时间
Date now = DateUtils.getNowDate();
// 获取登录者的信息
LoginUser loginUser = tokenService.getLoginUser(request);
// 驳回单据
boolean result = supplyRequestService.rejectRequest(busNo, loginUser, now);
return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null))
: R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
return receiptApprovalAppService.reject(busNo, request);
}
}

View File

@@ -7,6 +7,9 @@ import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@@ -15,9 +18,6 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
/**
* 入库单据
*
@@ -116,4 +116,12 @@ public class InventoryReceiptDto implements Serializable {
@NotNull
private BigDecimal totalPrice;
/** 售价 */
@NotNull
private BigDecimal sellPrice;
/** 拆零售价 */
@NotNull
private BigDecimal minSellPrice;
}

View File

@@ -22,7 +22,7 @@ import lombok.experimental.Accessors;
@Accessors(chain = true)
public class InventoryReceiptInitDto {
//返回前台的应是dto 懒得定义请勿学习
// 返回前台的应是dto 懒得定义请勿学习
/** 药房信息 */
private List<Location> location;

View File

@@ -6,7 +6,6 @@ package com.openhis.web.inventorymanage.dto;
import java.io.Serializable;
import java.util.Date;
import com.openhis.common.annotation.Dict;
import org.hibernate.validator.constraints.Length;
import lombok.Data;

View File

@@ -3,12 +3,12 @@
*/
package com.openhis.web.inventorymanage.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 项目价格详情
*
@@ -27,11 +27,11 @@ public class ItemChargeDetailDto implements Serializable {
/** 名称 */
private String chargeName;
/** 批次号 */
private String conditionLotnumber;
/** 条件 */
private String conditionCode;
/** 条件类型 */
private String conditionUnitCode;
/** 命中值 */
private String conditionValue;
/** 单位价格 */
private BigDecimal unitPrice;

View File

@@ -91,6 +91,6 @@ public class SupplyItemDetailDto implements Serializable {
/** 原价 */
private BigDecimal baseAmount;
/** 费用定价子表ID */
private Long applicabilityId;
/** 定价子表主键 */
private Long defDetailId;
}

View File

@@ -9,6 +9,8 @@
T1.unit_code AS item_unit,
T1.price,
T1.total_price,
T1.sell_price,
T1.min_sell_price,
T1.approver_id,
T1.purpose_location_id,
T1.purpose_location_store_id,
@@ -49,6 +51,8 @@
T1.unit_code AS item_unit,
T1.price,
T1.total_price,
T1.sell_price,
T1.min_sell_price,
T1.approver_id,
T1.purpose_location_id,
T1.purpose_location_store_id,

View File

@@ -25,6 +25,11 @@ public class CommonConstants {
* 结束时间(用于分页条件查询)
*/
String E_TIME = "ETime";
/**
* 逗号(用于拼接)
*/
String COMMA = "%s,%s";
}
/**

View File

@@ -6,9 +6,8 @@ import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.core.common.core.domain.HisBaseEntity;
import com.openhis.common.enums.ChargeItemStatus;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@@ -75,7 +74,7 @@ public class ChargeItem extends HisBaseEntity {
private Long definitionId;
/** 定价子表主键 */
private Long applicabilityId;
private Long defDetailId;
/** 原价 */
private BigDecimal baseAmount;
@@ -122,5 +121,4 @@ public class ChargeItem extends HisBaseEntity {
/** 机构 */
private Integer orgId;
}

View File

@@ -19,10 +19,10 @@ import lombok.experimental.Accessors;
* @date 2025-02-20
*/
@Data
@TableName("adm_charge_item_def_app")
@TableName("adm_charge_item_def_detail")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
public class ChargeItemDefApp extends HisBaseEntity {
public class ChargeItemDefDetail extends HisBaseEntity {
/** ID */
@TableId(type = IdType.ASSIGN_ID)
@@ -34,28 +34,19 @@ public class ChargeItemDefApp extends HisBaseEntity {
/** 条件规则 */
private Long conditionRuleId;
/** 批次号 */
private String conditionLotnumber;
/** 医保相关价格 */
private String conditionYbCode;
/** 采购售卖条件 */
private String conditionInoutCode;
/** 条件类型 */
private String conditionUnitCode;
/** 条件 */
private String conditionCode;
/** 命中值 */
private String conditionValue;
/** 优先级 */
private Integer priority;
/** 价格 */
private BigDecimal amount;
public ChargeItemDefApp() {
public ChargeItemDefDetail() {
// 默认优先级常规
this.priority = ActPriority.ROUTINE.getValue();
}

View File

@@ -1,9 +1,9 @@
package com.openhis.administration.mapper;
import com.openhis.administration.domain.ChargeItemDefDetail;
import org.springframework.stereotype.Repository;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.openhis.administration.domain.ChargeItemDefApp;
/**
* 费用定价管理子Mapper接口
@@ -12,6 +12,6 @@ import com.openhis.administration.domain.ChargeItemDefApp;
* @date 2025-02-20
*/
@Repository
public interface ChargeItemDefAppMapper extends BaseMapper<ChargeItemDefApp> {
public interface ChargeItemDefAppMapper extends BaseMapper<ChargeItemDefDetail> {
}

View File

@@ -1,7 +1,7 @@
package com.openhis.administration.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.openhis.administration.domain.ChargeItemDefApp;
import com.openhis.administration.domain.ChargeItemDefDetail;
/**
* 费用定价管理子Service接口
@@ -9,23 +9,23 @@ import com.openhis.administration.domain.ChargeItemDefApp;
* @author system
* @date 2025-02-20
*/
public interface IChargeItemDefAppService extends IService<ChargeItemDefApp> {
public interface IChargeItemDefDetailService extends IService<ChargeItemDefDetail> {
/**
* 更新项目定价
*
* @param chargeItemDefApp 更新内容
* @param chargeItemDefDetail 更新内容
* @return 更新结果
*/
boolean updateChargeItemDefApp(ChargeItemDefApp chargeItemDefApp);
boolean updateChargeItemDefApp(ChargeItemDefDetail chargeItemDefDetail);
/**
* 新增费用定价
*
* @param chargeItemDefApp 新增内容
* @param chargeItemDefDetail 新增内容
* @return 新增结果
*/
boolean addChargeItemDefApp(ChargeItemDefApp chargeItemDefApp);
boolean addChargeItemDefApp(ChargeItemDefDetail chargeItemDefDetail);
/**
* 删除费用定价

View File

@@ -1,11 +1,11 @@
package com.openhis.administration.service.impl;
import com.openhis.administration.domain.ChargeItemDefDetail;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.openhis.administration.domain.ChargeItemDefApp;
import com.openhis.administration.mapper.ChargeItemDefAppMapper;
import com.openhis.administration.service.IChargeItemDefAppService;
import com.openhis.administration.service.IChargeItemDefDetailService;
/**
* 费用定价管理子Service业务层处理
@@ -14,24 +14,24 @@ import com.openhis.administration.service.IChargeItemDefAppService;
* @date 2025-02-20
*/
@Service
public class ChargeItemDefAppServiceImpl extends ServiceImpl<ChargeItemDefAppMapper, ChargeItemDefApp>
implements IChargeItemDefAppService {
public class ChargeItemDefDetailServiceImpl extends ServiceImpl<ChargeItemDefAppMapper, ChargeItemDefDetail>
implements IChargeItemDefDetailService {
/**
* 更新项目定价
*
* @param chargeItemDefApp 更新内容
* @param chargeItemDefDetail 更新内容
* @return 更新结果
*/
@Override
public boolean updateChargeItemDefApp(ChargeItemDefApp chargeItemDefApp) {
public boolean updateChargeItemDefApp(ChargeItemDefDetail chargeItemDefDetail) {
// 更新样例 一切以实际为主
if (chargeItemDefApp.getId() != null) {
if (chargeItemDefDetail.getId() != null) {
// 获取更新前收费项目避免更新导致数据库崩溃
if (baseMapper.selectById(chargeItemDefApp.getId()) == null) {
if (baseMapper.selectById(chargeItemDefDetail.getId()) == null) {
return false;
} else {
return baseMapper.updateById(chargeItemDefApp) > 0;
return baseMapper.updateById(chargeItemDefDetail) > 0;
}
} else {
return false;
@@ -41,16 +41,16 @@ public class ChargeItemDefAppServiceImpl extends ServiceImpl<ChargeItemDefAppMap
/**
* 新增费用定价
*
* @param chargeItemDefApp 新增内容
* @param chargeItemDefDetail 新增内容
* @return 新增结果
*/
@Override
public boolean addChargeItemDefApp(ChargeItemDefApp chargeItemDefApp) {
public boolean addChargeItemDefApp(ChargeItemDefDetail chargeItemDefDetail) {
// 此判断是为了避免插入时主键重复
if (chargeItemDefApp.getId() != null) {
if (chargeItemDefDetail.getId() != null) {
return false;
} else {
return baseMapper.insert(chargeItemDefApp) > 0;
return baseMapper.insert(chargeItemDefDetail) > 0;
}
}

View File

@@ -71,6 +71,9 @@ public class SupplyRequest extends HisBaseEntity {
/** 物品计量单位 */
private String unitCode;
/** 拆零单位 */
private String minUnitCode;
/** 请求细节 */
private String detailJson;
@@ -137,6 +140,12 @@ public class SupplyRequest extends HisBaseEntity {
/** 总价 */
private BigDecimal totalPrice;
/** 售价 */
private BigDecimal sellPrice;
/** 拆零售价 */
private BigDecimal minSellPrice;
public SupplyRequest() {
// 默认单据类型:商品调拨
this.typeEnum = SupplyType.PRODUCT_ALLOCATION.getValue();