From f79c6de7372d3e09f5e5b202722b6dfb218890f9 Mon Sep 17 00:00:00 2001 From: yewj Date: Thu, 22 Aug 2024 11:13:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E8=AE=A1=E9=87=8F=E5=8D=95=E5=85=83=E6=95=B0?= =?UTF-8?q?=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/entity/basic/UdiProductEntity.java | 12 ++ .../api/entity/basic/UdiRelevanceEntity.java | 14 ++ .../glxp/api/req/basic/AddProductRequest.java | 3 +- .../api/service/basic/UdiProductService.java | 132 +++++++++++++++--- .../glxp/api/util/udi/UdiCalCountUtil.java | 20 ++- src/main/resources/schemas/schema_v2.4.sql | 14 ++ 6 files changed, 171 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/glxp/api/entity/basic/UdiProductEntity.java b/src/main/java/com/glxp/api/entity/basic/UdiProductEntity.java index 9901c36b4..fd43697a7 100644 --- a/src/main/java/com/glxp/api/entity/basic/UdiProductEntity.java +++ b/src/main/java/com/glxp/api/entity/basic/UdiProductEntity.java @@ -314,4 +314,16 @@ public class UdiProductEntity { @TableField(value = "majorStatus") private Integer majorStatus; + /** + * 当前层级包含流通层级使用数量 + */ + @TableField(value = "bhltcjsl") + private Integer bhltcjsl; + + /** + * 当前层级包含使用层级数量 + */ + @TableField(value = "bhsycjsl") + private Integer bhsycjsl; + } diff --git a/src/main/java/com/glxp/api/entity/basic/UdiRelevanceEntity.java b/src/main/java/com/glxp/api/entity/basic/UdiRelevanceEntity.java index 2f4935381..c348550c6 100644 --- a/src/main/java/com/glxp/api/entity/basic/UdiRelevanceEntity.java +++ b/src/main/java/com/glxp/api/entity/basic/UdiRelevanceEntity.java @@ -225,6 +225,13 @@ public class UdiRelevanceEntity { @TableField(value = "distributeLevelCount") private Integer distributeLevelCount; + /** + * 流通层级 + */ + @TableField(value = "distributeLevel") + private Integer distributeLevel; + + /** * 使用计量层级标识 */ @@ -244,6 +251,13 @@ public class UdiRelevanceEntity { private Integer useLeverCount; + /** + * 使用层级 + */ + @TableField(value = "useLevel") + private Integer useLevel; + + /** * 是否拆零 */ diff --git a/src/main/java/com/glxp/api/req/basic/AddProductRequest.java b/src/main/java/com/glxp/api/req/basic/AddProductRequest.java index 6d8f3ff23..c9c31aba1 100644 --- a/src/main/java/com/glxp/api/req/basic/AddProductRequest.java +++ b/src/main/java/com/glxp/api/req/basic/AddProductRequest.java @@ -278,6 +278,7 @@ public class AddProductRequest { */ private String payFeeCode; private String packUnit; - + private Integer useLevel; + private Integer distributeLevel; } diff --git a/src/main/java/com/glxp/api/service/basic/UdiProductService.java b/src/main/java/com/glxp/api/service/basic/UdiProductService.java index 63ec8498d..cced2b7ff 100644 --- a/src/main/java/com/glxp/api/service/basic/UdiProductService.java +++ b/src/main/java/com/glxp/api/service/basic/UdiProductService.java @@ -267,19 +267,21 @@ public class UdiProductService { udiProductEntity.setDiType(1); } udiProductDao.updateUdiInfo(udiProductEntity); - - //修改关联表 - udiRelevanceEntity.setUseLeverCount(addProductRequest.getUseLeverCount()); - udiRelevanceEntity.setSplitEnable(addProductRequest.getSplitEnable()); - udiRelevanceEntity.setUseLevelDi(addProductRequest.getUseLevelDi()); - udiRelevanceEntity.setUseLevelUnit(addProductRequest.getUseLevelUnit()); - udiRelevanceEntity.setDistributeLevelDi(addProductRequest.getDistributeLevelDi()); - udiRelevanceEntity.setDistributeLevelUnit(addProductRequest.getDistributeLevelUnit()); - udiRelevanceEntity.setDistributeLevelCount(addProductRequest.getDistributeLevelCount()); - udiRelevanceEntity.setPayFeeCode(addProductRequest.getPayFeeCode()); - udiRelevanceDao.updateById(udiRelevanceEntity); - } + + //修改关联表 + udiRelevanceEntity.setUseLeverCount(addProductRequest.getUseLeverCount()); + udiRelevanceEntity.setSplitEnable(addProductRequest.getSplitEnable()); + udiRelevanceEntity.setUseLevelDi(addProductRequest.getUseLevelDi()); + udiRelevanceEntity.setUseLevelUnit(addProductRequest.getUseLevelUnit()); + udiRelevanceEntity.setUseLevel(addProductRequest.getUseLevel()); + udiRelevanceEntity.setDistributeLevelDi(addProductRequest.getDistributeLevelDi()); + udiRelevanceEntity.setDistributeLevelUnit(addProductRequest.getDistributeLevelUnit()); + udiRelevanceEntity.setDistributeLevelCount(addProductRequest.getDistributeLevelCount()); + udiRelevanceEntity.setDistributeLevel(addProductRequest.getDistributeLevel()); + udiRelevanceEntity.setPayFeeCode(addProductRequest.getPayFeeCode()); + udiRelevanceDao.updateById(udiRelevanceEntity); + updateLevelCount(udiRelevanceEntity); } else { udiRelevanceEntity = new UdiRelevanceEntity(); udiRelevanceEntity.setId(IdUtil.getSnowflakeNextId()); @@ -293,25 +295,31 @@ public class UdiProductService { udiRelevanceEntity.setAttributeType(addProductRequest.getAttributeType()); udiRelevanceEntity.setHcType(addProductRequest.getHcType()); udiRelevanceEntity.setPayFeeCode(addProductRequest.getPayFeeCode()); - if (addProductRequest.getDistributeLevelDi() != null){ + if (addProductRequest.getDistributeLevelDi() != null) { udiRelevanceEntity.setDistributeLevelDi(addProductRequest.getDistributeLevelDi()); } - if (addProductRequest.getDistributeLevelCount() != null){ + if (addProductRequest.getDistributeLevelCount() != null) { udiRelevanceEntity.setDistributeLevelCount(addProductRequest.getDistributeLevelCount()); } - if (addProductRequest.getDistributeLevelUnit() != null){ + if (addProductRequest.getDistributeLevelUnit() != null) { udiRelevanceEntity.setDistributeLevelUnit(addProductRequest.getDistributeLevelUnit()); } - if (addProductRequest.getUseLevelDi() != null){ + if (addProductRequest.getUseLevelDi() != null) { udiRelevanceEntity.setUseLevelDi(addProductRequest.getUseLevelDi()); } - if (addProductRequest.getUseLevelUnit() != null){ + if (addProductRequest.getUseLevelUnit() != null) { udiRelevanceEntity.setUseLevelUnit(addProductRequest.getUseLevelUnit()); } - if (addProductRequest.getUseLeverCount() != null){ + if (addProductRequest.getUseLeverCount() != null) { udiRelevanceEntity.setUseLeverCount(addProductRequest.getUseLeverCount()); } + if (addProductRequest.getDistributeLevel() != null) { + udiRelevanceEntity.setDistributeLevel(addProductRequest.getDistributeLevel()); + } + if (addProductRequest.getUseLevel() != null) { + udiRelevanceEntity.setUseLevel(addProductRequest.getUseLevel()); + } if (CollUtil.isNotEmpty(addProductRequest.getDrugLevelLists())) { for (UpdateLevelDrugRequest updateLevelDrugRequest : addProductRequest.getDrugLevelLists()) { @@ -349,10 +357,94 @@ public class UdiProductService { } udiRelevanceDao.insertUdiRelevance(udiRelevanceEntity); + updateLevelCount(udiRelevanceEntity); } return addProductRequest; } + /** + * 更新各个层级数量换算 + * + * @param udiRelevanceEntity + */ + public void updateLevelCount(UdiRelevanceEntity udiRelevanceEntity) { + List udiProductEntities = udiProductDao.findByUuids(udiRelevanceEntity.getUuid()); + Integer curLevel = udiRelevanceEntity.getDistributeLevelCount(); + //更新各个层级流通时包含计量单元数量 + if (CollUtil.isNotEmpty(udiProductEntities)) { + for (UdiProductEntity udiProductEntity : udiProductEntities) { + if (IntUtil.value(udiProductEntity.getPackLevel()) > IntUtil.value(curLevel)) { + UdiProductEntity nextLevelProduct1 = getNextLevelProduct(udiProductEntity, udiProductEntities); + if (nextLevelProduct1 != null && IntUtil.value(nextLevelProduct1.getPackLevel()) > IntUtil.value(curLevel)) { + UdiProductEntity nextLevelProduct2 = getNextLevelProduct(nextLevelProduct1, udiProductEntities); + if (nextLevelProduct2 != null && IntUtil.value(nextLevelProduct2.getPackLevel()) > IntUtil.value(curLevel)) { + UdiProductEntity nextLevelProduct3 = getNextLevelProduct(nextLevelProduct2, udiProductEntities); + if (nextLevelProduct3 != null && IntUtil.value(nextLevelProduct3.getPackLevel()) == IntUtil.value(curLevel)) { + udiProductEntity.setBhltcjsl(IntUtil.value(udiProductEntity.getBhxjsl()) * IntUtil.value(nextLevelProduct1.getBhxjsl()) * IntUtil.value(nextLevelProduct2.getBhxjsl()) * IntUtil.value(udiRelevanceEntity.getDistributeLevelCount())); + } else { + udiProductEntity.setBhltcjsl(IntUtil.value(udiProductEntity.getBhxjsl()) * IntUtil.value(nextLevelProduct1.getBhxjsl()) * IntUtil.value(nextLevelProduct2.getBhxjsl()) * IntUtil.value(udiRelevanceEntity.getDistributeLevelCount())); + } + } else { + udiProductEntity.setBhltcjsl(IntUtil.value(udiProductEntity.getBhxjsl()) * IntUtil.value(nextLevelProduct1.getBhxjsl()) * IntUtil.value(udiRelevanceEntity.getDistributeLevelCount())); + } + } else { + if (nextLevelProduct1 != null && IntUtil.value(nextLevelProduct1.getPackLevel()) == IntUtil.value(curLevel)) { + udiProductEntity.setBhltcjsl(IntUtil.value(udiProductEntity.getBhxjsl()) * IntUtil.value(udiRelevanceEntity.getDistributeLevelCount())); + } + } + } else { + if (udiProductEntity != null && IntUtil.value(udiProductEntity.getPackLevel()) == IntUtil.value(curLevel)) { + udiProductEntity.setBhltcjsl(IntUtil.value(udiRelevanceEntity.getDistributeLevelCount())); + } + } + } + } + + + //更新各个层级使用时包含计量单元数量 + if (CollUtil.isNotEmpty(udiProductEntities)) { + for (UdiProductEntity udiProductEntity : udiProductEntities) { + if (IntUtil.value(udiProductEntity.getPackLevel()) > IntUtil.value(curLevel)) { + UdiProductEntity nextLevelProduct1 = getNextLevelProduct(udiProductEntity, udiProductEntities); + if (nextLevelProduct1 != null && IntUtil.value(nextLevelProduct1.getPackLevel()) > IntUtil.value(curLevel)) { + UdiProductEntity nextLevelProduct2 = getNextLevelProduct(nextLevelProduct1, udiProductEntities); + if (nextLevelProduct2 != null && IntUtil.value(nextLevelProduct2.getPackLevel()) > IntUtil.value(curLevel)) { + UdiProductEntity nextLevelProduct3 = getNextLevelProduct(nextLevelProduct2, udiProductEntities); + if (nextLevelProduct3 != null && IntUtil.value(nextLevelProduct3.getPackLevel()) == IntUtil.value(curLevel)) { + udiProductEntity.setBhsycjsl(IntUtil.value(udiProductEntity.getBhxjsl()) * IntUtil.value(nextLevelProduct1.getBhxjsl()) * IntUtil.value(nextLevelProduct2.getBhxjsl()) * IntUtil.value(udiRelevanceEntity.getUseLeverCount())); + } else { + udiProductEntity.setBhsycjsl(IntUtil.value(udiProductEntity.getBhxjsl()) * IntUtil.value(nextLevelProduct1.getBhxjsl()) * IntUtil.value(nextLevelProduct2.getBhxjsl()) * IntUtil.value(udiRelevanceEntity.getUseLeverCount())); + } + } else { + udiProductEntity.setBhsycjsl(IntUtil.value(udiProductEntity.getBhxjsl()) * IntUtil.value(nextLevelProduct1.getBhxjsl()) * IntUtil.value(udiRelevanceEntity.getUseLeverCount())); + } + } else { + if (nextLevelProduct1 != null && IntUtil.value(nextLevelProduct1.getPackLevel()) == IntUtil.value(curLevel)) { + udiProductEntity.setBhsycjsl(IntUtil.value(udiProductEntity.getBhxjsl()) * IntUtil.value(udiRelevanceEntity.getUseLeverCount())); + } + } + } else { + if (udiProductEntity != null && IntUtil.value(udiProductEntity.getPackLevel()) == IntUtil.value(curLevel)) { + udiProductEntity.setBhsycjsl(IntUtil.value(udiRelevanceEntity.getUseLeverCount())); + } + } + } + } + + udiProductDao.updateBatchById(udiProductEntities); + } + + public UdiProductEntity getNextLevelProduct(UdiProductEntity curProductEntity, List udiProductEntities) { + + for (UdiProductEntity udiProductEntity : udiProductEntities) { + if (StrUtil.emptyIfNull(curProductEntity.getBhxjcpbm()).equals(udiProductEntity.getNameCode())) { + return udiProductEntity; + } + } + return null; + + } + /** * 添加或更新层级药品信息 */ @@ -419,7 +511,7 @@ public class UdiProductService { public UdiProductEntity findUltimateEntity(UdiProductEntity udiProductEntity, List udiProductEntities, CountWrapper xjCountWrapper) { if (StrUtil.isEmpty(udiProductEntity.getBhxjcpbm())) { - xjCountWrapper.addCount(udiProductEntity.getBhxjsl()); + xjCountWrapper.addCount(IntUtil.value(udiProductEntity.getBhxjsl())); return udiProductEntity; } @@ -427,7 +519,7 @@ public class UdiProductService { .filter(item -> item.getNameCode().equals(udiProductEntity.getBhxjcpbm())) .findFirst(); - nextEntityOptional.ifPresent(entity -> xjCountWrapper.addCount(udiProductEntity.getBhxjsl())); + nextEntityOptional.ifPresent(entity -> xjCountWrapper.addCount(IntUtil.value(udiProductEntity.getBhxjsl()))); return nextEntityOptional .map(entity -> findUltimateEntity(entity, udiProductEntities, xjCountWrapper)) diff --git a/src/main/java/com/glxp/api/util/udi/UdiCalCountUtil.java b/src/main/java/com/glxp/api/util/udi/UdiCalCountUtil.java index 95e83e3b1..92aa35434 100644 --- a/src/main/java/com/glxp/api/util/udi/UdiCalCountUtil.java +++ b/src/main/java/com/glxp/api/util/udi/UdiCalCountUtil.java @@ -103,9 +103,23 @@ public class UdiCalCountUtil { return getSplitActCount(udiRelevanceService.selectGroupById(relId)); } -// public int getSplitLtCount(){ -// -// } + /** + * 获取流通实际数量 + * + * @return + */ + public int getCirActCount() { + return 0; + } + + /** + * 获取使用实际数量 + * + * @return + */ + public int getUseActCount() { + return 0; + } public int getActCount(IoCodeTempEntity codeTempEntity) { diff --git a/src/main/resources/schemas/schema_v2.4.sql b/src/main/resources/schemas/schema_v2.4.sql index a828af0c1..303d9eb70 100644 --- a/src/main/resources/schemas/schema_v2.4.sql +++ b/src/main/resources/schemas/schema_v2.4.sql @@ -4216,3 +4216,17 @@ CALL Pro_Temp_ColumnWork('basic_collect_bustype', 'sortNumber', CALL Pro_Temp_ColumnWork('sys_workplace', 'invRemindNumber', 'int NULL DEFAULT b''0'' COMMENT ''存量提醒数''', 1); + +CALL Pro_Temp_ColumnWork('basic_udirel', 'useLevel', + 'int NULL DEFAULT NULL COMMENT ''使用层级''', + 1); +CALL Pro_Temp_ColumnWork('basic_udirel', 'distributeLevel', + 'int NULL DEFAULT NULL COMMENT ''流通层级''', + 1); + +CALL Pro_Temp_ColumnWork('basic_products', 'bhltcjsl', + 'int NULL DEFAULT NULL COMMENT ''当前层级包含流通层级数量''', + 1); +CALL Pro_Temp_ColumnWork('basic_products', 'bhsycjsl', + 'int NULL DEFAULT NULL COMMENT ''当前层级包含使用层级数量''', + 1); \ No newline at end of file