diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IInventoryManageService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IInventoryManageService.java new file mode 100644 index 00000000..6764f6da --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IInventoryManageService.java @@ -0,0 +1,55 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.appservice; + +import java.util.List; + +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 + * + * @author zwh + * @date 2025-03-05 + */ +public interface IInventoryManageService { + + /** + * 校验单据是否正确 + * + * @param supplyRequest 单据信息 + * @return 校验结果 + */ + R verifyInventoryReceipt(SupplyRequest supplyRequest); + + /** + * 根据单据号获取供应单据及供应项相关详细信息 + * + * @param busNo 单据号 + * @param itemTable 供应项所在表名 + * @return 供应单据及供应项相关详细信息 + */ + List getSupplyItemDetail(String busNo, String itemTable); + + /** + * 获取物品的价格信息 + * + * @param itemIdList 物品id + * @return 价格信息 + */ + List getItemChargeDetail(List itemIdList); + + /** + * 入库项价格验证 + * + * @param agreedList 供应单据 + * @param chargeDetailList 项目价格 + * @return 价格定义子表数据 + */ + List verifyItemCharge(List agreedList, List chargeDetailList); +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/InventoryManageServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/InventoryManageServiceImpl.java new file mode 100644 index 00000000..fd28e04a --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/InventoryManageServiceImpl.java @@ -0,0 +1,151 @@ +/* + * 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().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 getSupplyItemDetail(String busNo, String itemTable) { + + List 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 getItemChargeDetail(List itemIdList) { + // todo:未来会移到charge相关的service中 + if (!itemIdList.isEmpty()) { + return inventoryManageMapper.selectChargeDetail(itemIdList); + } + return null; + } + + /** + * 入库项价格验证 + * + * @param agreedList 供应单据 + * @param chargeDetailList 项目价格 + * @return 价格定义子表数据 + */ + @Override + public List verifyItemCharge(List agreedList, + List chargeDetailList) { + + // todo:价格换算的事情后续补上 + List resultList = new ArrayList<>(); + // 创建以项目id为key的map用于匹配对应的供应项目 + Map 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; + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/assembler/InventoryManageAssembler.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/assembler/InventoryManageAssembler.java new file mode 100644 index 00000000..f3477d3e --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/assembler/InventoryManageAssembler.java @@ -0,0 +1,34 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.assembler; + +import java.util.Date; +import java.util.List; + +import org.apache.commons.lang3.tuple.Pair; + +import com.openhis.administration.domain.ChargeItem; +import com.openhis.web.inventorymanage.dto.SupplyItemDetailDto; +import com.openhis.workflow.domain.InventoryItem; + +/** + * 入库管理dto转换器 + * + * @author zwh + * @date 2025-03-05 + */ +public class InventoryManageAssembler { + + /** + * 将供应项目的详细信息装配为库存项目和采购账单 + * + * @param supplyItemDetailList 供应项目的详细信息 + * @param now 当前时间 + * @return 库存项目和采购账单 + */ + public static Pair, List> + assembleChargeAndInventory(List supplyItemDetailList, Date now) { + return null; + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/assembler/PurchaseInventoryAssembler.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/assembler/PurchaseInventoryAssembler.java deleted file mode 100644 index 2a5f0c0e..00000000 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/assembler/PurchaseInventoryAssembler.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright ©2023 CJB-CNIT Team. All rights reserved - */ -package com.openhis.web.inventorymanage.assembler; - -/** - * 采购入库相关dto转换器 - * - * @author zwh - * @date 2025-02-20 - */ -public class PurchaseInventoryAssembler { - - /** - * 装配【入库单据分页列表DTO】分页 - * - * @param supplyRequestPage 【供应申请管理Entity实体】分页 - * @param medicationList 【药品基本信息管理Entity实体】列表 - * @param patientList【患者管理Entity实体】列表 - * @return 【入库单据分页列表DTO】分页 - */ - // public static Page assembleInventoryReceiptDto(Page supplyRequestPage, - // List medicationList, List patientList) { - // - // // 将查询到的【药品基本信息管理】列表,作成以ID为Key的Map - // Map medicationMap = - // medicationList.stream().collect(Collectors.toMap(Medication::getId, Function.identity())); - // - // // 将查询到的【患者管理】列表,作成以ID为Key的Map - // Map patientMap = - // patientList.stream().collect(Collectors.toMap(Patient::getId, Function.identity())); - // - // // 定义【入库单据分页列表DTO】的分页,传入【页码】、【行数】、及上面分页的【总数】 - // Page returnPage = - // new Page<>(supplyRequestPage.getCurrent(), supplyRequestPage.getSize(), supplyRequestPage.getTotal()); - // - // // 将【供应申请管理】的分页转化为返回【入库单据分页列表DTO】的分页 - // returnPage.setRecords(supplyRequestPage.getRecords().stream().map(entity -> { - // // 定义【入库单据分页列表DTO】 - // InventoryReceiptDto dto = new InventoryReceiptDto(); - // // 从主表COPY需要的字段 - // dto.setId(entity.getId()); - // dto.setCategoryEnum(1); - // // 从【药品基本信息管理】Map取值,设置【药品基本信息管理】返回实体 - // dto.setMedication(medicationMap.getOrDefault(entity.getDispenseId(), null)); - // // 从【患者管理】Map取值,设置【患者管理】返回实体 - // dto.setPatient(patientMap.getOrDefault(entity.getPatientId(), null)); - // return dto; - // }).collect(Collectors.toList())); - // - // // 返回【入库单据分页列表DTO】分页 - // return returnPage; - // } -} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/PurchaseInventoryController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/PurchaseInventoryController.java index 81041ad2..bb0f33d6 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/PurchaseInventoryController.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/PurchaseInventoryController.java @@ -3,9 +3,7 @@ */ package com.openhis.web.inventorymanage.controller; -import java.util.ArrayList; import java.util.HashSet; -import java.util.List; import javax.servlet.http.HttpServletRequest; @@ -13,25 +11,22 @@ 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.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 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.administration.domain.ChargeItem; -import com.openhis.administration.domain.Location; -import com.openhis.administration.service.IChargeItemService; -import com.openhis.administration.service.ILocationService; -import com.openhis.administration.service.IPatientService; -import com.openhis.administration.service.ISupplierService; 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.medication.service.IMedicationService; -import com.openhis.web.inventorymanage.dto.*; +import com.openhis.web.inventorymanage.appservice.IInventoryManageService; +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; @@ -45,37 +40,30 @@ import lombok.extern.slf4j.Slf4j; * @date 2025-02-18 */ @RestController -@RequestMapping("/inventory-manage-purchase") +@RequestMapping("/inventory-manage/purchase") @Slf4j public class PurchaseInventoryController { @Autowired private ISupplyRequestService supplyRequestService; @Autowired - private IMedicationService medicationService; - @Autowired - private IPatientService patientService; - @Autowired - private IChargeItemService chargeItemService; - @Autowired - private ISupplierService supplierService; - @Autowired - private ILocationService locationService; + private IInventoryManageService inventoryManageService; @Autowired private SupplyRequestMapper supplyRequestMapper; - @GetMapping(value = "/init") - public R init() { - - InventoryReceiptInitDto initDto = new InventoryReceiptInitDto(); - // 设置供应商列表 - initDto.setSupplier(supplierService.list()) - // 设置药房列表 - .setLocation(locationService.list(new LambdaQueryWrapper().in(Location::getFormEnum, 1))) - // 药品详细 - .setMedicationDetail(medicationService.getDetailList()); - return R.ok(initDto); - } + // @GetMapping(value = "/init") + // public R init() { + // // 采番 + // + // InventoryReceiptInitDto initDto = new InventoryReceiptInitDto(); + // // 设置供应商列表 + // initDto.setSupplier(supplierService.list()) + // // 设置药房列表 + // .setLocation(locationService.list(new LambdaQueryWrapper().in(Location::getFormEnum, 1))) + // // 药品详细 + // .setMedicationDetail(medicationService.getDetailList()); + // return R.ok(initDto); + // } // 添加入库单据之前需要 // 1.supplier供应商信息列表 @@ -99,6 +87,7 @@ public class PurchaseInventoryController { @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + // 按照单据号groupBy // 设置模糊查询的字段名 HashSet searchFields = new HashSet<>(); searchFields.add(CommonConstants.FieldName.BusNo); @@ -107,95 +96,99 @@ public class PurchaseInventoryController { QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(inventorySearchParam, searchKey, searchFields, request); // 查询入库单据分页列表 - Page inventoryReceiptPage = - HisPageUtils.selectPage(supplyRequestMapper, queryWrapper, pageNo, pageSize, InventoryReceiptDto.class); + Page inventoryReceiptPage = + HisPageUtils.selectPage(supplyRequestMapper, queryWrapper, pageNo, pageSize, InventoryReceiptPageDto.class); return R.ok(inventoryReceiptPage); } /** - * 添加入库单据(生成供应请求) - * - * @param inventoryDto 入库单据 + * 入库单据详情 + * + * @param busNo 单据号 + * @return 入库单据详情 */ - @PostMapping("/inventory-receipt") - public R addInventoryReceipt(@Validated @RequestBody InventoryDto inventoryDto) { - // 生成待发送的入库单据 - SupplyRequest supplyRequest = new SupplyRequest(); - BeanUtils.copyProperties(inventoryDto, supplyRequest); - // 如果业务上不需要其它处理 直接调用service的保存方法 - boolean saveSupplyRequestSuccess = supplyRequestService.save(supplyRequest); + public R getDetail(@RequestParam String busNo) { - if (!saveSupplyRequestSuccess) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00006, null)); - } - // 生成收费项目charge_item - ChargeItem chargeItem = new ChargeItem(); - // 如果字段很少建议手动set赋值 - chargeItem.setUnitPrice(inventoryDto.getUnitPrice()); - boolean saveChargeItemSuccess = chargeItemService.saveChargeItem(chargeItem); - // 如果采购单价被修改了,需要根据批次号更新采购单价子表价格、 - - // if (saveChargeItemSuccess) { - // return R.ok(); - // } else { - // return R.fail(); - // } - return saveChargeItemSuccess - ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"采购入库单据"})) - : R.fail(PromptMsgConstant.Common.M00007, null); + // + return R.ok(); } /** - * 编辑入库单据 + * 添加/编辑入库单据 * - * @param saveInventoryReceiptDto 供应请求信息 + * @param inventoryReceiptDto 入库单据 + * @return 操作结果 */ - @PutMapping("/inventory-receipt") - public R editInventoryReceipt(@Validated @RequestBody SaveInventoryReceiptDto saveInventoryReceiptDto) { - // 更新supply_request信息 - SupplyRequest saveRequest = new SupplyRequest(); - BeanUtils.copyProperties(saveInventoryReceiptDto, saveRequest); - if (!supplyRequestService.updateById(saveRequest)) { - return R.fail(); + @PostMapping("/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); } - // 更新收费项目charge_item - ChargeItem chargeItem = new ChargeItem(); - BeanUtils.copyProperties(saveInventoryReceiptDto, chargeItem); - chargeItem.setId(saveInventoryReceiptDto.getChargeItemId()); - return chargeItemService.updateChargeItem(chargeItem) ? R.ok() : R.fail(); + // 返回单据id + return R.ok(supplyRequest.getId(), null); } /** * 删除方法 * * @param supplyRequestId 主表id + * @return 操作结果 */ @DeleteMapping("/inventory-receipt") public R deleteInventoryReceipt(@RequestParam Long supplyRequestId) { - // 全都是逻辑删除 - - boolean deleteSuccess = supplyRequestService.removeById(supplyRequestId); - - if (!deleteSuccess) { - return R.fail(); - } - - boolean deleteChargeItemSuccess = chargeItemService - .remove(new LambdaUpdateWrapper().eq(ChargeItem::getServiceId, supplyRequestId)); - - return deleteChargeItemSuccess ? R.ok() : R.fail(); + // 删除单据 + boolean result = supplyRequestService.removeById(supplyRequestId); + return result ? R.ok() : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); } /** - * 单据提交申请 + * 提交审批 * - * @param supplyRequest 供应请求信息 + * @param busNo 单据号 */ - @PutMapping("/submit-examine") - public void submitExamine(SupplyRequest supplyRequest) { + @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)); + } - // 更改供应请求单据状态 - // 生成供应分发supply_delivery + /** + * 撤回审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @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)); } } diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ReceiptApprovalController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ReceiptApprovalController.java new file mode 100644 index 00000000..35c1d7cf --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ReceiptApprovalController.java @@ -0,0 +1,143 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +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; +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 lombok.extern.slf4j.Slf4j; + +/** + * 单据审批 controller + * + * @author zwh + * @date 2025-03-04 + */ +@RestController +@RequestMapping("/inventory-manage/receipt") +@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; + + /** + * 审批通过 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @PostMapping("/approved") + public R approved(@RequestParam String busNo, HttpServletRequest request) { + // 获取登录者的信息 + LoginUser loginUser = tokenService.getLoginUser(request); + // 获取当前时间 + Date now = DateUtils.getNowDate(); + + // 审批单据并返回单据详情 + List agreedList = supplyRequestService.agreeRequest(busNo, loginUser, now); + if (agreedList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 根据单据,发放物品 + List deliveredList = supplyDeliveryService.createCompletedSupplyDelivery(agreedList, now); + if (deliveredList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + // 获取供应项目所在表 + String itemTable = supplyRequestService.getItemTable(agreedList); + // 获取供应的物品 + List itemIdList = supplyRequestService.getItem(agreedList); + // 获取项目价格相关信息 + List chargeDetailList = inventoryManageService.getItemChargeDetail(itemIdList); + List chargeItemDefAppList = new ArrayList<>(); + if (!chargeDetailList.isEmpty()) { + // 入库项价格验证(验证项:单位价格,批次号) + chargeItemDefAppList = inventoryManageService.verifyItemCharge(agreedList, chargeDetailList); + } + if (!chargeItemDefAppList.isEmpty()) { + for (ChargeItemDefApp chargeItemDefApp : chargeItemDefAppList) { + // 增加项目定价子表数据 + chargeItemDefAppService.addChargeItemDefApp(chargeItemDefApp); + } + } + + // 查询供应项目的详细信息 + List supplyItemDetailList = inventoryManageService.getSupplyItemDetail(busNo, itemTable); + if (!supplyItemDetailList.isEmpty()) { + // 将供应项目的详细信息装配为库存项目和采购账单 + Pair, List> 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 单据号 + * @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)); + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventoryDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventoryDto.java deleted file mode 100644 index 680933b1..00000000 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventoryDto.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright ©2023 CJB-CNIT Team. All rights reserved - */ -package com.openhis.web.inventorymanage.dto; - -import java.math.BigDecimal; -import java.util.Date; - -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; - -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 入库 - * - * @author ZhangYC - * @date 2025-02-20 - */ -@Data -@Accessors(chain = true) -public class InventoryDto { - - /** 项目 */ - private String itemTable; - - /** 数量 */ - private Integer itemQuantity; - - /** 物品编码 */ - @JsonSerialize(using = ToStringSerializer.class) - private Long code; - - /** 物品计量单位 */ - private String unitIdCode; - - /** 物品数量 */ - private Integer unitQuantity; - - /** 请求细节 */ - private String detailJson; - - /** 期望时间 */ - private Date occurrenceTime; - - /** 供应人 */ - private Long practitionerId; - - /** 供应商 */ - private Long supplierId; - - /** 单位 */ - private Long quantityUnit; - - /** 单价 */ - private BigDecimal unitPrice; - - /** 总价 */ - private BigDecimal totalPrice; - -} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventoryReceiptDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventoryReceiptDto.java index c0196b77..21504d7d 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventoryReceiptDto.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventoryReceiptDto.java @@ -4,6 +4,7 @@ package com.openhis.web.inventorymanage.dto; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; @@ -14,11 +15,14 @@ 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; + /** - * 入库单据分页列表 dto + * 入库单据 * - * @author zwh - * @date 2025-02-18 + * @author ZhangYC + * @date 2025-02-20 */ @Data @Accessors(chain = true) @@ -31,37 +35,85 @@ public class InventoryReceiptDto implements Serializable { @JsonSerialize(using = ToStringSerializer.class) private Long id; - /** 单据号 */ - private String busNo; + /** 项目 */ + private String itemTable; - /** 类型 */ - private Integer typeEnum; + /** 数量 */ + @NotNull + @Min(1) + private Integer itemQuantity; - /** 状态 */ - private Integer statusEnum; + /** 物品编码 */ + @NotNull + private Long itemId; - /** 分类 */ - private Integer categoryEnum; + /** 物品计量单位 */ + @NotNull + private String unitCode; + + /** 请求细节 */ + private String detailJson; /** 供应商 */ + @NotNull private Long supplierId; + /** 源仓库类型 */ + @NotNull + private Integer sourceTypeEnum; + /** 源仓库 */ + @NotNull private Long sourceLocationId; + /** 源仓位 */ + @NotNull + private Long sourceLocationStoreId; + + /** 目的仓库类型 */ + @NotNull + private Integer purposeTypeEnum; + /** 目的仓库 */ + @NotNull private Long purposeLocationId; - /** 审批人 */ - private Long approverId; - - /** 审批时间 */ - private Date approvalTime; + /** 目的仓位 */ + @NotNull + private Long purposeLocationStoreId; /** 申请人 */ + @NotNull private Long applicantId; /** 申请时间 */ private Date applyTime; + /** 产品批号 */ + @NotNull + private String lotNumber; + + /** 追溯码 */ + @NotNull + private String traceNo; + + /** 发票号 */ + private String invoiceNo; + + /** 开始时间 */ + @NotNull + private Date startTime; + + /** 结束时间 */ + @NotNull + private Date endTime; + + /** 单价 */ + @NotNull + private BigDecimal price; + + /** 总价 */ + @NotNull + private BigDecimal totalPrice; + } diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventoryReceiptPageDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventoryReceiptPageDto.java new file mode 100644 index 00000000..5ee74717 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventoryReceiptPageDto.java @@ -0,0 +1,67 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.dto; + +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 入库单据分页列表 dto + * + * @author zwh + * @date 2025-02-18 + */ +@Data +@Accessors(chain = true) +public class InventoryReceiptPageDto implements Serializable { + + private static final long serialVersionUID = 1L; + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 单据号 */ + private String busNo; + + /** 类型 */ + private Integer typeEnum; + + /** 状态 */ + private Integer statusEnum; + + /** 分类 */ + private Integer categoryEnum; + + /** 供应商 */ + private Long supplierId; + + /** 源仓库 */ + private Long sourceLocationId; + + /** 目的仓库 */ + private Long purposeLocationId; + + /** 审批人 */ + private Long approverId; + + /** 审批时间 */ + private Date approvalTime; + + /** 申请人 */ + private Long applicantId; + + /** 申请时间 */ + private Date applyTime; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventorySearchParam.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventorySearchParam.java index 44017c78..e886951a 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventorySearchParam.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventorySearchParam.java @@ -6,6 +6,7 @@ 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; diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ItemChargeDetailDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ItemChargeDetailDto.java new file mode 100644 index 00000000..66f735e2 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ItemChargeDetailDto.java @@ -0,0 +1,44 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 项目价格详情 + * + * @author zwh + * @date 2025-03-07 + */ +@Data +@Accessors(chain = true) +public class ItemChargeDetailDto implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 费用定价主键ID */ + private Long definitionId; + + /** 名称 */ + private String chargeName; + + /** 批次号 */ + private String conditionLotnumber; + + /** 条件类型 */ + private String conditionUnitCode; + + /** 单位价格 */ + private BigDecimal unitPrice; + + /** 关联项目 */ + private Long instanceId; + + /** 基础价格 */ + private BigDecimal sellPrice; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ReceiptDetailDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ReceiptDetailDto.java new file mode 100644 index 00000000..6e3a3925 --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ReceiptDetailDto.java @@ -0,0 +1,22 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.dto; + +import java.io.Serializable; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 单据详情 + * + * @author zwh + * @date 2025-03-04 + */ +@Data +@Accessors(chain = true) +public class ReceiptDetailDto implements Serializable { + + private static final long serialVersionUID = 1L; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/SaveInventoryReceiptDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/SaveInventoryReceiptDto.java deleted file mode 100644 index a9235d98..00000000 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/SaveInventoryReceiptDto.java +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Copyright ©2023 CJB-CNIT Team. All rights reserved - */ -package com.openhis.web.inventorymanage.dto; - -import java.math.BigDecimal; -import java.util.Date; - -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 更新dto - * - * @author zxy - * @date 2025-02-20 - */ -@Data -@Accessors(chain = true) -public class SaveInventoryReceiptDto { - /** ID */ - private Long id; - - /** 类型 */ - private Integer typeEnum; - - /** 状态 */ - private Integer statusEnum; - - /** 意图 */ - private Integer intentEnum; - - /** 分类 */ - private Integer categoryEnum; - - /** 优先权 */ - private Integer priorityEnum; - - /** 汇总编号 */ - private Long summaryId; - - /** 交付 */ - private Long deliverId; - - /** 患者id */ - private Long patientId; - - /** 发放实体表名 */ - private String dispenseTable; - - /** 发放id */ - private Long dispenseId; - - /** 项目 */ - private String itemTable; - - /** 数量 */ - private Integer itemQuantity; - - /** 物品编码 */ - private Long code; - - /** 物品计量单位 */ - private String unitIdCode; - - /** 物品数量 */ - private Integer unitQuantity; - - /** 请求细节 */ - private String detailJson; - - /** 期望时间 */ - private Date occurrenceTime; - - /** 供应人 */ - private Long practitionerId; - - /** 供应商 */ - private Long supplierId; - - /** 理由 */ - private String reason; - - /** 源仓库类型 */ - private Integer sourceType; - - /** 源仓库 */ - private Long sourceLocationId; - - /** 源仓位 */ - private Long sourceLocationStoreId; - - /** 目的类型 */ - private Integer purposeType; - - /** 目的仓库 */ - private Long purposeLocationId; - - /** 目的仓位 */ - private Long purposeLocationStoreId; - - /** 审批人 */ - private Long approverId; - - /** 审批时间 */ - private Date approvalTime; - - /** 申请人 */ - private Long applicantId; - - /** 申请时间 */ - private Date applyTime; - - // =======chargeItem实体============ - - /** ID */ - private Long chargeItemId; - - /** 类别 */ - private Integer context; - - /** 就诊ID */ - private Long encounterId; - - /** 执行人Id */ - private Long performer; - - /** 执行科室 */ - private Long performingOrgId; - - /** 开立科室 */ - private Long requestingOrgId; - - /** 成本科室 */ - private Long costOrgId; - - /** 数量 */ - private Long quantityValue; - - /** 单位 */ - private Long quantityUnit; - - /** 单价 */ - private BigDecimal unitPrice; - - /** 总价 */ - private BigDecimal totalPrice; - - /** 费用定价ID */ - private Long definitionId; - - /** applicability表主键 */ - private Long applicabilityId; - - /** 原价 */ - private BigDecimal baseAmount; - - /** 折后价格 */ - private BigDecimal discountAmount; - - /** 附加价格 */ - private BigDecimal surchargeAmount; - - /** 改价原因 */ - private String overrideReasonCode; - - /** 改价原因文本 */ - private String overrideReasonText; - - /** 开立人ID */ - private Long entererId; - - /** 开立时间 */ - private Date enteredDate; - - /** 医疗服务类型 */ - private String serviceTable; - - /** 医疗服务ID */ - private Long serviceId; - - /** 索赔结果 */ - private Integer claimStateEnum; - - /** 关联账户ID */ - private Long accountId; - - /** 机构 */ - private String orgCode; -} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/SupplyItemDetailDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/SupplyItemDetailDto.java new file mode 100644 index 00000000..35c4030e --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/SupplyItemDetailDto.java @@ -0,0 +1,96 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.dto; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 供应单据及供应项相关详细信息 dto + * + * @author zwh + * @date 2025-03-06 + */ +@Data +@Accessors(chain = true) +public class SupplyItemDetailDto implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 项目 */ + private String itemTable; + + /** 物品编码 */ + private Long itemId; + + /** 数量 */ + private BigDecimal itemQuantity; + + /** 项目单位 */ + private String itemUnit; + + /** 单价 */ + private BigDecimal price; + + /** 总价 */ + private BigDecimal totalPrice; + + /** 审批人 */ + private Long approverId; + + /** 目的仓库 */ + private Long purposeLocationId; + + /** 目的仓位 */ + private Long purposeLocationStoreId; + + /** 供应商id */ + private Long supplierId; + + /** 产品批号 */ + private String lotNumber; + + /** 追溯码 */ + private String traceNo; + + /** 单据号 */ + private String busNo; + + /** 开始时间 */ + private Date startTime; + + /** 结束时间 */ + private Date endTime; + + /** 服务id */ + private Long serviceId; + + /** 名称 */ + private String name; + + /** 拼音码 */ + private String pyStr; + + /** 五笔码 */ + private String wbStr; + + /** 常规单位 */ + private String unitCode; + + /** 最小单位 */ + private String minUnitCode; + + /** 费用定价ID */ + private Long definitionId; + + /** 原价 */ + private BigDecimal baseAmount; + + /** 费用定价子表ID */ + private Long applicabilityId; +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/InventoryManageMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/InventoryManageMapper.java index 30045125..2cefd3a8 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/InventoryManageMapper.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/InventoryManageMapper.java @@ -3,9 +3,14 @@ */ package com.openhis.web.inventorymanage.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.web.inventorymanage.dto.ItemChargeDetailDto; +import com.openhis.web.inventorymanage.dto.SupplyItemDetailDto; import com.openhis.workflow.domain.SupplyRequest; /** @@ -15,4 +20,33 @@ import com.openhis.workflow.domain.SupplyRequest; * @date 2025-02-25 */ @Repository -public interface InventoryManageMapper extends BaseMapper {} +public interface InventoryManageMapper extends BaseMapper { + + /** + * 获取药品供应单据详细信息 + * + * @param busNo 单据号 + * @param completed 发放状态:已完成 + * @return 药品供应单据详细信息 + */ + List selectSupplyMedDetail(@Param("busNo") String busNo, + @Param("completed") Integer completed); + + /** + * 获取耗材供应单据详细信息 + * + * @param busNo 单据号 + * @param completed 发放状态:已完成 + * @return 耗材供应单据详细信息 + */ + List selectSupplyDevDetail(@Param("busNo") String busNo, + @Param("completed") Integer completed); + + /** + * 根据物品id获取物品的价格信息 + * + * @param itemIdList 物品id + * @return 价格信息 + */ + List selectChargeDetail(@Param("itemIdList") List itemIdList); +} diff --git a/openhis-server/openhis-application/src/main/resources/mapper/InventoryManage/InventoryManageMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/InventoryManage/InventoryManageMapper.xml index 1371c254..5dd3c9a6 100644 --- a/openhis-server/openhis-application/src/main/resources/mapper/InventoryManage/InventoryManageMapper.xml +++ b/openhis-server/openhis-application/src/main/resources/mapper/InventoryManage/InventoryManageMapper.xml @@ -2,4 +2,99 @@ + + + + \ No newline at end of file diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/constant/CommonConstants.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/constant/CommonConstants.java index 6f64b55d..e4bd4521 100644 --- a/openhis-server/openhis-common/src/main/java/com/openhis/common/constant/CommonConstants.java +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/constant/CommonConstants.java @@ -42,11 +42,21 @@ public class CommonConstants { */ String MED_MEDICATION_DEFINITION = "med_medication_definition"; + /** + * 药品信息 + */ + String MED_MEDICATION = "med_medication"; + /** * 器材定义 */ String ADM_DEVICE_DEFINITION = "adm_device_definition"; + /** + * 器材信息 + */ + String ADM_DEVICE = "adm_device"; + /** * 活动定义 */ diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/constant/PromptMsgConstant.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/constant/PromptMsgConstant.java index 16c0a30d..a67d431d 100644 --- a/openhis-server/openhis-common/src/main/java/com/openhis/common/constant/PromptMsgConstant.java +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/constant/PromptMsgConstant.java @@ -58,4 +58,16 @@ public class PromptMsgConstant { String M00010 = "apl.common.M00010"; } + + /** + * 库存 + */ + public interface Inventory { + + /** + * {0}添加成功 + */ + String M00001 = "apl.inventory.M00001"; + + } } diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/EventStatus.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/EventStatus.java index c647e7aa..04a86be8 100644 --- a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/EventStatus.java +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/EventStatus.java @@ -1,24 +1,71 @@ package com.openhis.common.enums; -import com.baomidou.mybatisplus.annotation.EnumValue; import lombok.AllArgsConstructor; import lombok.Getter; +/** + * 事件状态 + * + * @author lyx + * @date 2025-03-05 + */ @Getter @AllArgsConstructor public enum EventStatus { - PREPARATION(1, "PREP", "Preparation stage, gathering resources and planning."), - IN_PROGRESS(2, "IP", "Task is currently being worked on."), - NOT_DONE(3, "ND", "Task has not been completed."), - ON_HOLD(4, "OH", "Task is temporarily paused."), - STOPPED(5, "ST", "Task has been stopped."), - COMPLETED(6, "CMP", "Task has been completed."), - ENTERED_IN_ERROR(7, "EIE", "Task status was entered in error."), - UNKNOWN(8, "UNK", "Task status is unknown."); + /** + * 草稿 + */ + PREPARATION(1, "PREP", "草稿"), - @EnumValue - private final Integer value; - private final String code; - private final String info; + /** + * 进行中 + */ + IN_PROGRESS(2, "IP", "进行中"), + + /** + * 未完成 + */ + NOT_DONE(3, "ND", "未完成"), + + /** + * 暂停 + */ + ON_HOLD(4, "OH", "暂停"), + + /** + * 停止 + */ + STOPPED(5, "ST", "停止"), + + /** + * 已完成 + */ + COMPLETED(6, "CMP", "已完成"), + + /** + * 录入错误 + */ + ENTERED_IN_ERROR(7, "EIE", "录入错误"), + + /** + * 未知 + */ + UNKNOWN(8, "UNK", "未知"); + + private Integer value; + private String code; + private String info; + + public static EventStatus getByValue(Integer value) { + if (value == null) { + return null; + } + for (EventStatus val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } } diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/SupplyCategory.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/SupplyCategory.java new file mode 100644 index 00000000..570778bf --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/SupplyCategory.java @@ -0,0 +1,43 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 单据类别 + * + * @author zwh + * @date 2025-03-05 + */ +@Getter +@AllArgsConstructor +public enum SupplyCategory { + + /** + * 库存供应 + */ + STOCK_SUPPLY(1, "库存供应"), + + /** + * 非库存供应 + */ + NON_STOCK(2, "非库存供应"); + + private Integer value; + private String info; + + public static SupplyCategory getByValue(Integer value) { + if (value == null) { + return null; + } + for (SupplyCategory val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/SupplyStatus.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/SupplyStatus.java new file mode 100644 index 00000000..ffa94e94 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/SupplyStatus.java @@ -0,0 +1,58 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 单据状态 + * + * @author zwh + * @date 2025-03-05 + */ +@Getter +@AllArgsConstructor +public enum SupplyStatus { + + /** + * 待审核 + */ + PENDING_APPROVAL(1, "待审核"), + + /** + * 审核中 + */ + APPROVAL(2, "审核中"), + + /** + * 同意 + */ + AGREE(3, "同意"), + + /** + * 驳回 + */ + REJECT(4, "驳回"), + + /** + * 已撤回 + */ + WITHDRAW(9, "已撤回"); + + private Integer value; + private String info; + + public static SupplyStatus getByValue(Integer value) { + if (value == null) { + return null; + } + for (SupplyStatus val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/SupplyType.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/SupplyType.java new file mode 100644 index 00000000..b9545a50 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/SupplyType.java @@ -0,0 +1,48 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 单据类型 + * + * @author zwh + * @date 2025-03-05 + */ +@Getter +@AllArgsConstructor +public enum SupplyType { + + /** + * 采购入库 + */ + PURCHASE_INVENTORY(1, "采购入库"), + + /** + * 商品调拨 + */ + PRODUCT_ALLOCATION(2, "商品调拨"), + + /** + * 汇总发药 + */ + DISPENSING_AGGREGATION(3, "汇总发药"); + + private Integer value; + private String info; + + public static SupplyType getByValue(Integer value) { + if (value == null) { + return null; + } + for (SupplyType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/Whether.java b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/Whether.java new file mode 100644 index 00000000..f25400d3 --- /dev/null +++ b/openhis-server/openhis-common/src/main/java/com/openhis/common/enums/Whether.java @@ -0,0 +1,43 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 是否标识 + * + * @author zwh + * @date 2025-03-05 + */ +@Getter +@AllArgsConstructor +public enum Whether { + + /** + * 否 + */ + NO(0, "否"), + + /** + * 是 + */ + YES(1, "是"); + + private Integer value; + private String info; + + public static Whether getByValue(Integer value) { + if (value == null) { + return null; + } + for (Whether val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/administration/domain/ChargeItem.java b/openhis-server/openhis-domain/src/main/java/com/openhis/administration/domain/ChargeItem.java index 09228322..388dcb77 100644 --- a/openhis-server/openhis-domain/src/main/java/com/openhis/administration/domain/ChargeItem.java +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/administration/domain/ChargeItem.java @@ -74,7 +74,7 @@ public class ChargeItem extends HisBaseEntity { /** 费用定价ID */ private Long definitionId; - /** applicability表主键 */ + /** 定价子表主键 */ private Long applicabilityId; /** 原价 */ @@ -98,12 +98,18 @@ public class ChargeItem extends HisBaseEntity { /** 开立时间 */ private Date enteredDate; - /** 医疗服务类型 */ + /** 医疗服务所在表 */ private String serviceTable; /** 医疗服务ID */ private Long serviceId; + /** 产品所在表 */ + private String productTable; + + /** 产品ID */ + private Long productId; + /** 索赔结果 */ private Integer claimStateEnum; diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/administration/domain/ChargeItemDefApp.java b/openhis-server/openhis-domain/src/main/java/com/openhis/administration/domain/ChargeItemDefApp.java index e5fbdeb0..dfe811dc 100644 --- a/openhis-server/openhis-domain/src/main/java/com/openhis/administration/domain/ChargeItemDefApp.java +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/administration/domain/ChargeItemDefApp.java @@ -1,13 +1,13 @@ package com.openhis.administration.domain; import java.math.BigDecimal; -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.ActPriority; + import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -55,5 +55,8 @@ public class ChargeItemDefApp extends HisBaseEntity { /** 价格 */ private BigDecimal amount; - + public ChargeItemDefApp() { + // 默认优先级:常规 + this.priority = ActPriority.ROUTINE.getValue(); + } } \ No newline at end of file diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/administration/service/IChargeItemService.java b/openhis-server/openhis-domain/src/main/java/com/openhis/administration/service/IChargeItemService.java index 0625b832..44dfed36 100644 --- a/openhis-server/openhis-domain/src/main/java/com/openhis/administration/service/IChargeItemService.java +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/administration/service/IChargeItemService.java @@ -1,7 +1,11 @@ package com.openhis.administration.service; +import java.util.Date; +import java.util.List; + import com.baomidou.mybatisplus.extension.service.IService; import com.openhis.administration.domain.ChargeItem; +import com.openhis.workflow.domain.SupplyRequest; /** * 费用项管理Service接口 @@ -12,17 +16,9 @@ import com.openhis.administration.domain.ChargeItem; public interface IChargeItemService extends IService { /** - * 保存chargeItem相关信息 + * 创建已计费的采购账单 * - * @return 保存结果 + * @param chargeItemList 采购账单 */ - boolean saveChargeItem(ChargeItem chargeItem); - - /** - * 更新收费项目 - * - * @param chargeItem 更新内容 - * @return 更新结果 - */ - boolean updateChargeItem(ChargeItem chargeItem); + void createBilledPurchaseCharge(List chargeItemList); } \ No newline at end of file diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemDefAppServiceImpl.java b/openhis-server/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemDefAppServiceImpl.java index 6b906ffb..14eedc1e 100644 --- a/openhis-server/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemDefAppServiceImpl.java +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemDefAppServiceImpl.java @@ -46,7 +46,7 @@ public class ChargeItemDefAppServiceImpl extends ServiceImpl - implements IChargeItemDefinitionService { + implements IChargeItemDefinitionService { /** * 获取分页列表 * * @param chargeItemDefinition 查询条件 - * @param pageNo 页码 - * @param pageSize 页面大小 + * @param pageNo 页码 + * @param pageSize 页面大小 * @return 分页列表 */ @Override public Page getPage(ChargeItemDefinition chargeItemDefinition, Integer pageNo, - Integer pageSize) { + Integer pageSize) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ChargeItemDefinition::getDeleteFlag, DelFlag.NO.getValue()); - //拼接查询条件 + // 拼接查询条件 if (chargeItemDefinition.getStatusEnum() != null) { queryWrapper.eq(ChargeItemDefinition::getStatusEnum, chargeItemDefinition.getStatusEnum()); } @@ -54,7 +53,7 @@ public class ChargeItemDefinitionServiceImpl extends ServiceImpl 0; - } - - /** - * 更新收费项目 + * 创建已计费的采购账单 * - * @param chargeItem 更新内容 - * @return 更新结果 + * @param chargeItemList 采购账单 */ @Override - public boolean updateChargeItem(ChargeItem chargeItem) { - // 更新样例 一切以实际为主 - if (chargeItem.getId() != null) { - // 获取更新前收费项目,避免更新导致数据库崩溃 - if (chargeItemMapper.selectById(chargeItem.getId()) == null) { - return false; - } else { - return chargeItemMapper.updateById(chargeItem) > 0; - } - } else { - return false; - } + public void createBilledPurchaseCharge(List chargeItemList) { + } } \ No newline at end of file diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/domain/InventoryItem.java b/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/domain/InventoryItem.java index ad596fe7..951ad749 100644 --- a/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/domain/InventoryItem.java +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/domain/InventoryItem.java @@ -31,8 +31,11 @@ public class InventoryItem extends HisBaseEntity { /** 物品类别 */ private Integer categoryEnum; - /** 编码 */ - private String busNo; + /** 项目 */ + private String itemTable; + + /** 物品编码 */ + private Long itemId; /** 名称 */ private String name; diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/domain/SupplyDelivery.java b/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/domain/SupplyDelivery.java index 1869ac98..a18ac851 100644 --- a/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/domain/SupplyDelivery.java +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/domain/SupplyDelivery.java @@ -6,8 +6,10 @@ 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.EventStatus; +import com.openhis.common.enums.SupplyType; + import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -73,10 +75,10 @@ public class SupplyDelivery extends HisBaseEntity { /** 发放时间 */ private Date occurrenceTime; - /** 发放开始时间 */ + /** 开始时间 */ private Date occurrenceStartTime; - /** 发放结束时间 */ + /** 结束时间 */ private Date occurrenceEndTime; /** 发放周期时间 */ @@ -86,7 +88,12 @@ public class SupplyDelivery extends HisBaseEntity { private Long receiverId; /** 接收时间 */ - private Date receiveDateTime; - + private Date receiveTime; + public SupplyDelivery() { + // 默认发放状态:进行中 + this.statusEnum = EventStatus.IN_PROGRESS.getValue(); + // 默认发放类型: + this.typeEnum = SupplyType.PRODUCT_ALLOCATION.getValue(); + } } \ No newline at end of file diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/domain/SupplyRequest.java b/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/domain/SupplyRequest.java index eb4eaa0f..6e0b0ba8 100644 --- a/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/domain/SupplyRequest.java +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/domain/SupplyRequest.java @@ -1,11 +1,16 @@ package com.openhis.workflow.domain; +import java.math.BigDecimal; 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.ActPriority; +import com.openhis.common.enums.SupplyCategory; +import com.openhis.common.enums.SupplyStatus; +import com.openhis.common.enums.SupplyType; import lombok.Data; import lombok.EqualsAndHashCode; @@ -54,26 +59,17 @@ public class SupplyRequest extends HisBaseEntity { /** 患者id */ private Long patientId; - /** 发放实体表名 */ - private String dispenseTable; - - /** 发放id */ - private Long dispenseId; - /** 项目 */ private String itemTable; /** 数量 */ - private Integer itemQuantity; + private BigDecimal itemQuantity; /** 物品编码 */ private Long itemId; /** 物品计量单位 */ - private String unitIdCode; - - /** 物品数量 */ - private Integer unitQuantity; + private String unitCode; /** 请求细节 */ private String detailJson; @@ -120,4 +116,35 @@ public class SupplyRequest extends HisBaseEntity { /** 申请时间 */ private Date applyTime; + /** 产品批号 */ + private String lotNumber; + + /** 追溯码 */ + private String traceNo; + + /** 发票号 */ + private String invoiceNo; + + /** 开始时间 */ + private Date startTime; + + /** 结束时间 */ + private Date endTime; + + /** 单价 */ + private BigDecimal price; + + /** 总价 */ + private BigDecimal totalPrice; + + public SupplyRequest() { + // 默认单据类型:商品调拨 + this.typeEnum = SupplyType.PRODUCT_ALLOCATION.getValue(); + // 默认单据状态:待审核 + this.statusEnum = SupplyStatus.PENDING_APPROVAL.getValue(); + // 默认单据分类:库存供应 + this.categoryEnum = SupplyCategory.STOCK_SUPPLY.getValue(); + // 默认优先级:常规 + this.priorityEnum = ActPriority.ROUTINE.getValue(); + } } \ No newline at end of file diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/IInventoryItemService.java b/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/IInventoryItemService.java index 42b9b5fd..017247a0 100644 --- a/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/IInventoryItemService.java +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/IInventoryItemService.java @@ -2,6 +2,9 @@ package com.openhis.workflow.service; import com.baomidou.mybatisplus.extension.service.IService; import com.openhis.workflow.domain.InventoryItem; +import com.openhis.workflow.domain.SupplyRequest; + +import java.util.List; /** * 库存项目管理Service接口 @@ -11,4 +14,10 @@ import com.openhis.workflow.domain.InventoryItem; */ public interface IInventoryItemService extends IService { + /** + * 入库 + * + * @param InventoryItemList 入库项目 + */ + void stockIn(List InventoryItemList); } \ No newline at end of file diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/ISupplyDeliveryService.java b/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/ISupplyDeliveryService.java index 9e42ce88..32e30448 100644 --- a/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/ISupplyDeliveryService.java +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/ISupplyDeliveryService.java @@ -1,7 +1,12 @@ package com.openhis.workflow.service; +import java.util.Date; +import java.util.List; + import com.baomidou.mybatisplus.extension.service.IService; +import com.core.common.core.domain.R; import com.openhis.workflow.domain.SupplyDelivery; +import com.openhis.workflow.domain.SupplyRequest; /** * 供应发放管理Service接口 @@ -11,4 +16,11 @@ import com.openhis.workflow.domain.SupplyDelivery; */ public interface ISupplyDeliveryService extends IService { + /** + * 根据单据,发放物品 + * + * @param supplyRequestList 单据信息 + * @param supplyRequestList 单据信息 + */ + List createCompletedSupplyDelivery(List supplyRequestList, Date now); } \ No newline at end of file diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/ISupplyRequestService.java b/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/ISupplyRequestService.java index c85c16f9..76857ffc 100644 --- a/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/ISupplyRequestService.java +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/ISupplyRequestService.java @@ -1,7 +1,10 @@ package com.openhis.workflow.service; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import java.util.Date; +import java.util.List; + import com.baomidou.mybatisplus.extension.service.IService; +import com.core.common.core.domain.model.LoginUser; import com.openhis.workflow.domain.SupplyRequest; /** @@ -13,12 +16,61 @@ import com.openhis.workflow.domain.SupplyRequest; public interface ISupplyRequestService extends IService { /** - * 查询供应申请分页列表 + * 通过单据号查询单据信息 * - * @param supplyRequest 查询条件 - * @return 供应申请列表 + * @param busNo 单据号 + * @return 单据信息 */ - Page getPage(SupplyRequest supplyRequest, Integer pageNo, Integer pageSize); + List getSupplyByBusNo(String busNo); + /** + * 同意申请 + * + * @param busNo 单据号 + * @param loginUser 登录用户信息 + * @param now 当前时间 + * @return 单据详情 + */ + List agreeRequest(String busNo, LoginUser loginUser, Date now); + /** + * 提交审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + boolean submitApproval(String busNo); + + /** + * 撤回 + * + * @param busNo 单据号 + * @return 操作结果 + */ + boolean withdrawApproval(String busNo); + + /** + * 驳回申请 + * + * @param busNo 单据号 + * @param loginUser 登录用户信息 + * @param now 当前时间 + */ + boolean rejectRequest(String busNo, LoginUser loginUser, Date now); + + /** + * 获取供应项目所在表 + * + * @param agreedList 供应单据信息 + * @return 供应项目所在表 + */ + String getItemTable(List agreedList); + + /** + * 获取供应的物品 + * + * @param agreedList 供应单据 + * @return 物品id + */ + List getItem(List agreedList); } \ No newline at end of file diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/impl/InventoryItemServiceImpl.java b/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/impl/InventoryItemServiceImpl.java index e040d15d..b991dc86 100644 --- a/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/impl/InventoryItemServiceImpl.java +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/impl/InventoryItemServiceImpl.java @@ -1,5 +1,6 @@ package com.openhis.workflow.service.impl; +import com.openhis.workflow.domain.SupplyRequest; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -7,6 +8,8 @@ import com.openhis.workflow.domain.InventoryItem; import com.openhis.workflow.mapper.InventoryItemMapper; import com.openhis.workflow.service.IInventoryItemService; +import java.util.List; + /** * 库存项目管理Service业务层处理 * @@ -16,4 +19,13 @@ import com.openhis.workflow.service.IInventoryItemService; @Service public class InventoryItemServiceImpl extends ServiceImpl implements IInventoryItemService { + /** + * 入库 + * + * @param inventoryItemList 入库项目 + */ + @Override + public void stockIn(List inventoryItemList) { + + } } \ No newline at end of file diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/impl/SupplyDeliveryServiceImpl.java b/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/impl/SupplyDeliveryServiceImpl.java index 674d1769..cebbbf4f 100644 --- a/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/impl/SupplyDeliveryServiceImpl.java +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/impl/SupplyDeliveryServiceImpl.java @@ -1,9 +1,16 @@ package com.openhis.workflow.service.impl; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.openhis.common.enums.EventStatus; +import com.openhis.common.enums.SupplyType; import com.openhis.workflow.domain.SupplyDelivery; +import com.openhis.workflow.domain.SupplyRequest; import com.openhis.workflow.mapper.SupplyDeliveryMapper; import com.openhis.workflow.service.ISupplyDeliveryService; @@ -14,6 +21,60 @@ import com.openhis.workflow.service.ISupplyDeliveryService; * @date 2025-02-20 */ @Service -public class SupplyDeliveryServiceImpl extends ServiceImpl implements ISupplyDeliveryService { +public class SupplyDeliveryServiceImpl extends ServiceImpl + implements ISupplyDeliveryService { + /** + * 根据单据,发放物品 + * + * @param supplyRequestList 单据信息 + * @param now 当前时间 + * @return 发放详情 + */ + @Override + public List createCompletedSupplyDelivery(List supplyRequestList, Date now) { + + List deliveryList = new ArrayList<>(); + // 根据申请单据生成发放单据 + for (SupplyRequest supplyRequest : supplyRequestList) { + SupplyDelivery supplyDelivery = new SupplyDelivery(); + supplyDelivery + // 请求id + .setRequestId(supplyRequest.getId()) + // 发放状态:已完成 + .setStatusEnum(EventStatus.COMPLETED.getValue()) + // 单据类型:采购入库 + .setTypeEnum(SupplyType.PURCHASE_INVENTORY.getValue()) + // 发放项目所在表 + .setItemTable(supplyRequest.getItemTable()) + // 发放物品id + .setItemId(supplyRequest.getItemId()) + // 物品单位 + .setUnitIdCode(supplyRequest.getUnitCode()) + // 发放数量 + .setQuantity(supplyRequest.getItemQuantity()) + // 批次号 + .setLotNumber(supplyRequest.getLotNumber()) + // 追溯码 + .setTraceNo(supplyRequest.getTraceNo()) + // 供应商id + .setSupplierId(supplyRequest.getSupplierId()) + // 审批人 + .setPractitionerId(supplyRequest.getApplicantId()) + // 发放时间 + .setOccurrenceTime(now) + // 接收位置 + .setReceiverId(supplyRequest.getPurposeLocationId()) + // 接收时间 + .setReceiveTime(now) + // 生产日期 + .setOccurrenceStartTime(supplyRequest.getStartTime()) + // 失效日期 + .setOccurrenceEndTime(supplyRequest.getEndTime()); + deliveryList.add(supplyDelivery); + // 新增发放单据 + baseMapper.insert(supplyDelivery); + } + return deliveryList; + } } \ No newline at end of file diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/impl/SupplyRequestServiceImpl.java b/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/impl/SupplyRequestServiceImpl.java index 96753e78..0eaec557 100644 --- a/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/impl/SupplyRequestServiceImpl.java +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/workflow/service/impl/SupplyRequestServiceImpl.java @@ -1,11 +1,16 @@ package com.openhis.workflow.service.impl; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + 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.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.openhis.common.enums.DelFlag; +import com.core.common.core.domain.model.LoginUser; +import com.openhis.common.enums.SupplyStatus; import com.openhis.workflow.domain.SupplyRequest; import com.openhis.workflow.mapper.SupplyRequestMapper; import com.openhis.workflow.service.ISupplyRequestService; @@ -28,24 +33,98 @@ public class SupplyRequestServiceImpl extends ServiceImpl getPage(SupplyRequest supplyRequest, Integer pageNo, Integer pageSize) { + public List getSupplyByBusNo(String busNo) { + return supplyRequestMapper + .selectList(new LambdaQueryWrapper().eq(SupplyRequest::getBusNo, busNo)); + } - Page supplyRequestList; - // 判断入库数量 - if (supplyRequest.getItemQuantity() != 0) { - // 查询供应申请信息列表 - supplyRequestList = supplyRequestMapper.selectPage(new Page<>(pageNo, pageSize), - new LambdaQueryWrapper().eq(SupplyRequest::getDeleteFlag, DelFlag.NO.getValue())); - } else { - return null; - } - // 返回入库信息列表 - return supplyRequestList; + /** + * 同意申请 + * + * @param busNo 单据号 + * @param loginUser 登录用户信息 + * @param now 当前时间 + * @return 单据详情 + */ + @Override + public List agreeRequest(String busNo, LoginUser loginUser, Date now) { + // 更新单据状态 + baseMapper.update(null, + new LambdaUpdateWrapper().eq(SupplyRequest::getBusNo, busNo) + .set(SupplyRequest::getApprovalTime, now).set(SupplyRequest::getApproverId, loginUser.getUserId()) + .set(SupplyRequest::getStatusEnum, SupplyStatus.AGREE.getValue())); + // 返回单据详情 + return this.getSupplyByBusNo(busNo); + } + + /** + * 提交审批 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @Override + public boolean submitApproval(String busNo) { + int updateCount = baseMapper.update(null, new LambdaUpdateWrapper() + .eq(SupplyRequest::getBusNo, busNo).set(SupplyRequest::getStatusEnum, SupplyStatus.APPROVAL.getValue())); + return updateCount > 0; + } + + /** + * 撤回 + * + * @param busNo 单据号 + * @return 操作结果 + */ + @Override + public boolean withdrawApproval(String busNo) { + int updateCount = baseMapper.update(null, new LambdaUpdateWrapper() + .eq(SupplyRequest::getBusNo, busNo).set(SupplyRequest::getStatusEnum, SupplyStatus.WITHDRAW.getValue())); + return updateCount > 0; + } + + /** + * 驳回申请 + * + * @param busNo 单据号 + * @param loginUser 登录用户信息 + * @param now 当前时间 + */ + @Override + public boolean rejectRequest(String busNo, LoginUser loginUser, Date now) { + // 更新单据状态 + int updateCount = baseMapper.update(null, + new LambdaUpdateWrapper().eq(SupplyRequest::getBusNo, busNo) + .set(SupplyRequest::getApprovalTime, now).set(SupplyRequest::getApproverId, loginUser.getUserId()) + .set(SupplyRequest::getStatusEnum, SupplyStatus.REJECT.getValue())); + return updateCount > 0; + } + + /** + * 获取供应项目所在表 + * + * @param agreedList 供应单据信息 + * @return 供应项目所在表 + */ + @Override + public String getItemTable(List agreedList) { + return agreedList.stream().map(SupplyRequest::getItemTable).findFirst().orElse(null); + } + + /** + * 获取供应的物品 + * + * @param agreedList 供应单据 + * @return 物品id + */ + @Override + public List getItem(List agreedList) { + return agreedList.stream().map(SupplyRequest::getItemId).collect(Collectors.toList()); } } \ No newline at end of file