改价判断修改,入库换算新增

This commit is contained in:
Zhang.WH
2025-03-11 11:17:15 +08:00
parent 6ea26d6236
commit d67dfea964
9 changed files with 80 additions and 27 deletions

View File

@@ -7,6 +7,9 @@ import java.util.HashSet;
import javax.servlet.http.HttpServletRequest;
import com.core.common.utils.AgeCalculatorUtil;
import com.openhis.common.enums.*;
import com.openhis.common.utils.EnumUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -18,8 +21,6 @@ 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.HisQueryUtils;
import com.openhis.web.inventorymanage.appservice.IPurchaseInventoryAppService;
import com.openhis.web.inventorymanage.dto.InventoryReceiptDto;
@@ -39,9 +40,6 @@ import com.openhis.workflow.service.ISupplyRequestService;
@Service
public class PurchaseInventoryAppServiceImpl implements IPurchaseInventoryAppService {
@Autowired
private SupplyRequestMapper supplyRequestMapper;
@Autowired
private PurchaseInventoryMapper purchaseInventoryMapper;
@@ -72,6 +70,11 @@ public class PurchaseInventoryAppServiceImpl implements IPurchaseInventoryAppSer
// 查询入库单据分页列表
Page<InventoryReceiptPageDto> inventoryReceiptPage = purchaseInventoryMapper.selectInventoryReceiptPage(
new Page<>(pageNo, pageSize), queryWrapper, SupplyType.PURCHASE_INVENTORY.getValue());
inventoryReceiptPage.getRecords().forEach(e -> {
// 单据状态
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum()));
});
return R.ok(inventoryReceiptPage);
}

View File

@@ -222,20 +222,37 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService
// 生成请求的命中值
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()));
// 将字符串按逗号分割
String[] parts = detail.getConditionValue().split(",", 2);
// 判断是否有至少两部分,且单位部分与入库单位相等
if (parts.length > 1 && parts[1].trim().equals(supplyRequest.getUnitCode())) {
// 判断请求中的命中值是否命中了定价的条件
boolean isConditionMatched = lotUnitCondition.equals(detail.getConditionValue());
// 如果未命中或命中价格不同,则新增数据
if (!isConditionMatched || supplyRequest.getPrice().compareTo(detail.getUnitPrice()) != 0) {
// 判断入库单位是大单位还是小单位
if (supplyRequest.getUnitCode().equals(detail.getUnitCode())) {
resultList.add(this.addChargeItemDefApp(
String.format(CommonConstants.Common.COMMA, supplyRequest.getLotNumber(),
detail.getMinUnitCode()),
supplyRequest.getMinSellPrice(), detail.getDefinitionId()));
resultList.add(this.addChargeItemDefApp(lotUnitCondition, supplyRequest.getSellPrice(),
detail.getDefinitionId()));
} else {
resultList
.add(this.addChargeItemDefApp(
String.format(CommonConstants.Common.COMMA, supplyRequest.getLotNumber(),
detail.getUnitCode()),
supplyRequest.getMinSellPrice(), detail.getDefinitionId()));
resultList.add(this.addChargeItemDefApp(lotUnitCondition, supplyRequest.getMinSellPrice(),
detail.getDefinitionId()));
}
}
}
}
}

View File

@@ -3,6 +3,7 @@
*/
package com.openhis.web.inventorymanage.assembler;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -112,6 +113,22 @@ public class InventoryManageAssembler {
// 最小单位
.setMinUnitCode(supplyItemDetailDto.getMinUnitCode());
if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getUnitCode())) {
inventoryItem
// 包装数量
.setBaseQuantity(supplyItemDetailDto.getItemQuantity())
// 拆零数量(拆零比×包装数量)
.setMinQuantity(
supplyItemDetailDto.getPartPercent().multiply(supplyItemDetailDto.getItemQuantity()));
} else if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getMinUnitCode())) {
inventoryItem
// 拆零数量
.setMinQuantity(supplyItemDetailDto.getItemQuantity())
// 包装数量(拆零数量÷拆零比)
.setBaseQuantity(supplyItemDetailDto.getItemQuantity().divide(supplyItemDetailDto.getPartPercent(),
RoundingMode.HALF_UP));
}
chargeItemList.add(chargeItem);
inventoryItemList.add(inventoryItem);
}

View File

@@ -10,6 +10,7 @@ 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 com.openhis.common.annotation.Dict;
import lombok.Data;
import lombok.experimental.Accessors;
@@ -36,20 +37,24 @@ public class InventoryReceiptPageDto implements Serializable {
/** 状态 */
private Integer statusEnum;
private String statusEnum_enumText;
/** 供应商 */
private Long supplierId;
/** 目的仓库 */
@Dict(dictCode = "id", dictText = "name", dictTable = "adm_location")
private Long purposeLocationId;
/** 审批人 */
@Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner")
private Long approverId;
/** 审批时间 */
private Date approvalTime;
/** 申请人 */
@Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner")
private Long applicantId;
/** 申请时间 */

View File

@@ -41,4 +41,10 @@ public class ItemChargeDetailDto implements Serializable {
/** 基础价格 */
private BigDecimal sellPrice;
/** 药品单位 */
private String unitCode;
/** 最小单位 */
private String minUnitCode;
}

View File

@@ -10,7 +10,6 @@ import java.util.Date;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import liquibase.pro.packaged.S;
import lombok.Data;
import lombok.experimental.Accessors;
@@ -93,6 +92,9 @@ public class SupplyItemDetailDto implements Serializable {
/** 最小单位 */
private String minUnitCode;
/** 拆零比 */
private BigDecimal partPercent;
/** 费用定价ID */
private Long definitionId;

View File

@@ -70,6 +70,7 @@
T2.wb_str,
T2.unit_code,
T2.min_unit_code,
T2.part_percent,
T3.id AS definition_id,
T4.amount AS base_amount,
T4.id AS applicability_id
@@ -94,10 +95,14 @@
T1.price AS sell_price,
T2.condition_lotnumber,
T2.condition_unit_code,
T2.amount AS unit_price
T2.amount AS unit_price,
T3.unit_code,
T3.min_unit_code
FROM adm_charge_item_definition AS T1
LEFT JOIN adm_charge_item_def_app AS T2
ON T1.id = T2.definition_id
LEFT JOIN med_medication_definition AS T3
ON T1.instance_id = T3.id
WHERE T1.instance_id IN
<foreach collection="itemIdList" item="itemId" separator="," open="(" close=")">
#{itemId}

View File

@@ -14,34 +14,35 @@ import lombok.Getter;
*/
@Getter
@AllArgsConstructor
public enum SupplyStatus {
public enum SupplyStatus implements HisEnumInterface {
/**
* 待审核
*/
PENDING_APPROVAL(1, "待审核"),
PENDING_APPROVAL(1, "1", "待审核"),
/**
* 审核中
*/
APPROVAL(2, "审核中"),
APPROVAL(2, "2", "审核中"),
/**
* 同意
*/
AGREE(3, "同意"),
AGREE(3, "3", "同意"),
/**
* 驳回
*/
REJECT(4, "驳回"),
REJECT(4, "4", "驳回"),
/**
* 已撤回
*/
WITHDRAW(9, "已撤回");
WITHDRAW(9, "5", "已撤回");
private Integer value;
private String code;
private String info;
public static SupplyStatus getByValue(Integer value) {

View File

@@ -71,9 +71,6 @@ public class SupplyRequest extends HisBaseEntity {
/** 物品计量单位 */
private String unitCode;
/** 拆零单位 */
private String minUnitCode;
/** 请求细节 */
private String detailJson;