From 7e021afe6ec7c081d759c5368e8c8e2cc98d1518 Mon Sep 17 00:00:00 2001 From: anthonywj Date: Thu, 8 Aug 2024 14:33:19 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8D=AF=E5=93=81=E6=89=AB=E7=A0=81=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../inout/IoCodeTempController.java | 177 +----------------- .../api/entity/inout/IoCodeTempEntity.java | 5 + .../entity/inout/IoOrderDetailBizEntity.java | 8 + .../entity/inout/IoOrderDetailCodeEntity.java | 5 + .../inout/IoOrderDetailResultEntity.java | 8 + .../basic/CompanyProductRelevanceRequest.java | 2 +- .../service/inout/IoCheckInoutService.java | 31 +++ .../com/glxp/api/util/udi/FilterUdiUtils.java | 20 +- src/main/resources/schemas/schema_v2.4.sql | 26 ++- 9 files changed, 97 insertions(+), 185 deletions(-) diff --git a/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java b/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java index d71e032e5..06f064211 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java @@ -916,14 +916,6 @@ public class IoCodeTempController extends BaseController { udiEntity.setSerialNo(addOrderRequest.getSerialNo()); } - if (StrUtil.isNotEmpty(udiEntity.getSerialNo()) && udiEntity.getSerialNo().length() > 20) { - return ResultVOUtils.error(500, "无效条码!序列号超出最大范围"); - } - - if (StrUtil.isNotEmpty(udiEntity.getBatchNo()) && udiEntity.getBatchNo().length() > 20) { - return ResultVOUtils.error(500, "无效条码!批次号超出最大范围"); - } - //批次号校验 //判断此产品是否开启允许无批次号 @@ -931,126 +923,10 @@ public class IoCodeTempController extends BaseController { if (udiInfoEntity == null) { return ResultVOUtils.error(500, "耗材字典不存在此产品!"); } - if (!IntUtil.value(udiInfoEntity.getAllowNoBatch())) { - if (StrUtil.isEmpty(udiEntity.getSerialNo()) && StrUtil.isEmpty(udiEntity.getBatchNo())) { - return ResultVOUtils.error(500, "序列号与批次号不能同时为空!"); - } - } - - //是否校验产品采购类型 :1:校验;2.无需校验 - if (IntUtil.value(bussinessTypeEntity.getVailProductAttributes()) == 1) { - Integer purType = IntUtil.value(udiInfoEntity.getPurType()); //1:普通入账产品;2.预验收产品。3:寄售产品 - int actionType = IntUtil.value(bussinessTypeEntity.getActionType()); //1:带票(正常);2.预验收。3:寄售 - if (purType != actionType) { - //包装友好提示 - String msg = ""; - switch (actionType) { - case 1: - msg = "普通入账产品"; - break; - case 2: - msg = "预验收产品"; - break; - case 3: - msg = "寄售产品"; - break; - } - String msg2 = ""; - switch (purType) { - case 1: - msg2 = "普通入账产品"; - break; - case 2: - msg2 = "预验收产品"; - break; - case 3: - msg2 = "寄售产品"; - break; - } - return ResultVOUtils.error(500, "单据只允许录入" + msg + ",当前录入产品为" + msg2 + ",请检查后重试!"); - } - -// if (bussinessTypeEntity.getRequireScanCode() == 1) { -// if (udiInfoEntity.getRequireScanCode() != 1){ -// return ResultVOUtils.error(500, "单据只允许录入需要扫码耗材" + ",请检查后重试!"); -// } -// }else if (bussinessTypeEntity.getRequireScanCode() == 0){ -// if (udiInfoEntity.getRequireScanCode() != 0){ -// return ResultVOUtils.error(500, "单据只允许录入不需要扫码耗材" + ",请检查后重试!"); -// } -// } - if (bussinessTypeEntity != null && udiInfoEntity != null) { - //是否校验耗材材质 1:高值耗材;2.普通耗材 - if (IntUtil.value(bussinessTypeEntity.getVailHcType()) == 1) { - } - if (IntUtil.value(udiInfoEntity.getHcType()) != 1) { - return ResultVOUtils.error(500, "单据只允许录入高值耗材" + ",请检查后重试!"); - } - } else if (IntUtil.value(bussinessTypeEntity.getVailHcType()) == 2) { - if (IntUtil.value(udiInfoEntity.getHcType()) != 2) { - return ResultVOUtils.error(500, "单据只允许录入普通耗材" + ",请检查后重试!"); - } - } - - //是否开启校验扫码 :0:不校验;1:只允许录入扫码产品;2:只允许录入不扫码产品 - if (IntUtil.value(bussinessTypeEntity.getCodeCheck() == 1)) { - if (IntUtil.value(udiInfoEntity.getRequireScanCode()) != 1) { - return ResultVOUtils.error(500, "单据只允许录入需要扫码产品" + ",请检查后重试!"); - } - } else if (IntUtil.value(bussinessTypeEntity.getCodeCheck() == 2)) { - if (IntUtil.value(udiInfoEntity.getRequireScanCode()) != 0) { - return ResultVOUtils.error(500, "单据只允许录入不需要扫码产品" + ",请检查后重试!"); - } - } - } String orderId = addOrderRequest.getBillNo(); - //三期校验 - if (bussinessTypeEntity.isCodeFillCheck()) { - BaseResponse checkOriginCodeRes = checkOriginCode(udiEntity); - if (checkOriginCodeRes != null) { - IoCodeLostEntity codeLostEntity = codeLostService.findByCode(code); - if (codeLostEntity == null) { - if (StrUtil.isNotEmpty(orderId)) { - List ioCodeEnttities = codeTempService.findByOrderId(orderId); - IoCodeTempEntity ioCodeEnttity = isExitLocal(code, ioCodeEnttities); - if (ioCodeEnttity == null) { - return checkOriginCodeRes; - } - } else - return checkOriginCodeRes; - } else { - udiEntity.setBatchNo(codeLostEntity.getBatchNo()); - udiEntity.setExpireDate(codeLostEntity.getExpireDate()); - udiEntity.setProduceDate(codeLostEntity.getProduceDate()); - } - if (StrUtil.isNotEmpty(orderId)) { - List ioCodeEnttities = codeTempService.findByOrderId(orderId); - IoCodeTempEntity ioCodeEnttity = isExitLocal(code, ioCodeEnttities); - if (ioCodeEnttity == null) { - return checkOriginCodeRes; - } - } else - return checkOriginCodeRes; - } - } else { - BaseResponse checkOriginCodeRes = checkOriginCode(udiEntity); - if (checkOriginCodeRes != null) { - IoCodeLostEntity codeLostEntity = codeLostService.findByCode(code); - if (codeLostEntity != null) { - udiEntity.setBatchNo(codeLostEntity.getBatchNo()); - udiEntity.setExpireDate(codeLostEntity.getExpireDate()); - udiEntity.setProduceDate(codeLostEntity.getProduceDate()); - checkOriginCodeRes = checkOriginCode(udiEntity); - if (checkOriginCodeRes != null) - return checkOriginCodeRes; - } else - return checkOriginCodeRes; - } - } - //过期提醒: if (IntUtil.value(bussinessTypeEntity.getCheckExpire()) == 1 && !addOrderRequest.isIgnoreExpire()) { @@ -1086,7 +962,6 @@ public class IoCodeTempController extends BaseController { if (resultTime > 0) { long time = resultTime / (60 * 60 * 1000); -// long time = resultTime / (24 * 60 * 60 * 1000); if (resultTime < recentTieme) { return ResultVOUtils.error(505, "当前产品临近过期,距过期还剩" + time + "时,是否确定继续添加?"); } @@ -1111,53 +986,10 @@ public class IoCodeTempController extends BaseController { } - //校验预验收是否已存在 - if (bussinessTypeEntity.getActionType() == ConstantStatus.ACTION_TYPE_PREIN && bussinessTypeEntity.getMainAction().equals(ConstantType.TYPE_PUT)) { - if (StrUtil.isNotEmpty(udiEntity.getSerialNo())) { - int count = invPreinProductDetailService.findCountByCode(code); - if (count > 0) { - return ResultVOUtils.error(500, "预验收库存已存在此UDI码,请检查后重试!"); - } - } - } - - //校验预验收库存是否已存在 - if (bussinessTypeEntity.isScanPreIn() && checkDiAttribute(bussinessTypeEntity, udiRelevanceResponse, 2)) { - if (bussinessTypeEntity.getBackPreinType() == 1 && bussinessTypeEntity.isPreInBack()) {//按单出库&& bussinessTypeEntity.isPreInBack() - String orderIds = addOrderRequest.getCheckPreInOrders(); - if (StrUtil.isNotEmpty(orderIds)) { - String[] orderIdArray = orderIds.split(","); - List orderList = CollUtil.toList(orderIdArray); - int count = codeService.findByOrderIdsCount(orderList, code); - if (count <= 0) { - return ResultVOUtils.error(500, "非预验收单产品或预验收库存数量不足!"); - } - if (StrUtil.isNotEmpty(orderId)) {//非首次添加 - if (StrUtil.isEmpty(udiEntity.getSerialNo())) {//该单据已有该产品 - //无序列号,则可能存在多个预验收入库单 - IoCodeTempEntity codeTempEntity = codeTempService.findByUnique(orderId, code); - if (codeTempEntity != null) { - if (count < (codeTempEntity.getMyCount() + 1)) { - return ResultVOUtils.error(500, "超出预验收库存数量"); - } - } - } else { - if (count < 1) { - return ResultVOUtils.error(500, "预验收库存数量不足"); - } - } - } - } else { - return ResultVOUtils.error(500, "未选择预验收入库单,请先选择预验收入库单!"); - } - } - } - - if (addOrderRequest.getFromCorp() != null || StrUtil.isNotEmpty(addOrderRequest.getSickerAdNum())) { + if (addOrderRequest.getFromCorp() == null || StrUtil.isNotEmpty(addOrderRequest.getSickerAdNum())) { String fromCorp = ioAddInoutService.updateCorp(bussinessTypeEntity, addOrderRequest.getFromCorp(), addOrderRequest.getSickerAdNum()); addOrderRequest.setFromCorp(fromCorp); } - //先生成扫码单据 IoOrderEntity orderEntity = orderService.findByBillNo(orderId); String inBatch = ""; @@ -1175,7 +1007,7 @@ public class IoCodeTempController extends BaseController { exitLocalEntity = isExitLocal(code, codeEnttitys); if (exitLocalEntity != null) { if (StrUtil.isEmpty(exitLocalEntity.getSupId()) || exitLocalEntity.getRelId() == null) { - return ResultVOUtils.error(500, "当前UDI码已存在,且存在异常未处理!"); + return ResultVOUtils.error(500, "当前药品追溯码已存在,且存在异常未处理!"); } udiRelevanceResponses = udiRelevanceService.selectGroupByNameCode(exitLocalEntity.getNameCode(), null); @@ -1190,7 +1022,6 @@ public class IoCodeTempController extends BaseController { if (!StringUtils.isBlank(exitLocalEntity.getSerialNo())) { return ResultVOUtils.error(500, "重复扫码!"); } -// IoCodeTempEntity codeTempEntity = isExitToatal(code, codeEnttitys); //校验库存 BaseResponse invRes = null; if (IntUtil.value(bussinessTypeEntity.getUseDyCount()) == 2) { @@ -1278,6 +1109,7 @@ public class IoCodeTempController extends BaseController { codeEnttity.setPreSpaceCode(addOrderRequest.getPreCurSpaceCode()); codeEnttity.setPreInSpaceCode(addOrderRequest.getCheckPreInSpaceCode()); codeEnttity.setRelId(addOrderRequest.getRelId()); + codeEnttity.setProductType(2); codeEnttity.setCount(1); String unitFk = null; if (bussinessTypeEntity.getCorpType() == ConstantStatus.CORP_TYPE_OUT) { @@ -1350,6 +1182,7 @@ public class IoCodeTempController extends BaseController { orderEntity.setBusType(bussinessTypeEntity.getBusType()); orderEntity.setSickerAdNum(addOrderRequest.getSickerAdNum()); orderEntity.setWorkPlaceCode(addOrderRequest.getWorkPlaceCode()); + orderEntity.setProductType(2); orderService.insertOrder(orderEntity); } @@ -1436,7 +1269,7 @@ public class IoCodeTempController extends BaseController { } else codeTempService.insert(codeEnttity); } else if (bussinessTypeEntity.getCheckWebNew() == 2 && bussinessTypeEntity.isCheckEnable()) { - String errMsg = ioCheckInoutService.checkNoPiCode(codeEnttity); + String errMsg = ioCheckInoutService.checkDrugNoPiCode(codeEnttity); if (errMsg != null) { return ResultVOUtils.error(500, errMsg); } else diff --git a/src/main/java/com/glxp/api/entity/inout/IoCodeTempEntity.java b/src/main/java/com/glxp/api/entity/inout/IoCodeTempEntity.java index f7548f44c..393b6cf28 100644 --- a/src/main/java/com/glxp/api/entity/inout/IoCodeTempEntity.java +++ b/src/main/java/com/glxp/api/entity/inout/IoCodeTempEntity.java @@ -176,6 +176,11 @@ public class IoCodeTempEntity { private BigDecimal price; @TableField(exist = false) private boolean checkSuccess; //临时字段校验是否成功 + /** + * 单据产品类型 1:器械;2:药品 + */ + @TableField(value = "productType") + private Integer productType; public int getMyCount() { if (count == null) diff --git a/src/main/java/com/glxp/api/entity/inout/IoOrderDetailBizEntity.java b/src/main/java/com/glxp/api/entity/inout/IoOrderDetailBizEntity.java index 167a592fd..a257c3dd7 100644 --- a/src/main/java/com/glxp/api/entity/inout/IoOrderDetailBizEntity.java +++ b/src/main/java/com/glxp/api/entity/inout/IoOrderDetailBizEntity.java @@ -235,4 +235,12 @@ public class IoOrderDetailBizEntity { */ @TableField(value = "destinyId") private String destinyId; + + + /** + * 单据产品类型 1:器械;2:药品 + */ + @TableField(value = "productType") + private Integer productType; + } diff --git a/src/main/java/com/glxp/api/entity/inout/IoOrderDetailCodeEntity.java b/src/main/java/com/glxp/api/entity/inout/IoOrderDetailCodeEntity.java index 82c9a2588..5f9fd465f 100644 --- a/src/main/java/com/glxp/api/entity/inout/IoOrderDetailCodeEntity.java +++ b/src/main/java/com/glxp/api/entity/inout/IoOrderDetailCodeEntity.java @@ -215,6 +215,11 @@ public class IoOrderDetailCodeEntity { @TableField(value = "updateTime") private Date updateTime; + /** + * 单据产品类型 1:器械;2:药品 + */ + @TableField(value = "productType") + private Integer productType; } diff --git a/src/main/java/com/glxp/api/entity/inout/IoOrderDetailResultEntity.java b/src/main/java/com/glxp/api/entity/inout/IoOrderDetailResultEntity.java index d2ec9d402..4661c75db 100644 --- a/src/main/java/com/glxp/api/entity/inout/IoOrderDetailResultEntity.java +++ b/src/main/java/com/glxp/api/entity/inout/IoOrderDetailResultEntity.java @@ -206,4 +206,12 @@ public class IoOrderDetailResultEntity { private String deptCode; @TableField(exist = false) private String invCode; + + + /** + * 单据产品类型 1:器械;2:药品 + */ + @TableField(value = "productType") + private Integer productType; + } diff --git a/src/main/java/com/glxp/api/req/basic/CompanyProductRelevanceRequest.java b/src/main/java/com/glxp/api/req/basic/CompanyProductRelevanceRequest.java index d430608f0..658c5b160 100644 --- a/src/main/java/com/glxp/api/req/basic/CompanyProductRelevanceRequest.java +++ b/src/main/java/com/glxp/api/req/basic/CompanyProductRelevanceRequest.java @@ -88,5 +88,5 @@ public class CompanyProductRelevanceRequest extends ListPageRequest { @TableField(value = "codeCheck") private Integer codeCheck; - private Integer productsType = 1;//默认是耗材 + private Integer productsType;//默认是耗材 } diff --git a/src/main/java/com/glxp/api/service/inout/IoCheckInoutService.java b/src/main/java/com/glxp/api/service/inout/IoCheckInoutService.java index ba5bbd6c7..c57e5bb0d 100644 --- a/src/main/java/com/glxp/api/service/inout/IoCheckInoutService.java +++ b/src/main/java/com/glxp/api/service/inout/IoCheckInoutService.java @@ -476,6 +476,37 @@ public class IoCheckInoutService { return null; } + + public String checkDrugNoPiCode(IoCodeTempEntity codeTempEntity) { + boolean isBillExit = orderDetailBizService.isExit(codeTempEntity.getOrderId()); + if (!isBillExit) { + return "请先录入业务详情"; + } + IoOrderDetailBizEntity bizEntity = orderDetailBizService.findByRelId(codeTempEntity.getOrderId(), codeTempEntity.getRelId()); + if (bizEntity == null) { + return "非此单产品!"; + } + Integer detailCount = orderDetailCodeService.findByRelIdCount(codeTempEntity.getOrderId(), codeTempEntity.getRelId(), bizEntity.getBatchNo()); + int curCount = 0; + if (detailCount != null) { + curCount = detailCount + codeTempEntity.getMyReCount(); + } else { + curCount = codeTempEntity.getMyReCount(); + } + if (curCount > bizEntity.getCount()) { + return "当前产品数量超出!"; + } + if (bizEntity.getPrice() != null) { + codeTempEntity.setPrice(bizEntity.getPrice()); + } + if (StrUtil.isEmpty(codeTempEntity.getBatchNo())) { + codeTempEntity.setBatchNo(bizEntity.getBatchNo()); + codeTempEntity.setProduceDate(bizEntity.getProductDate()); + codeTempEntity.setExpireDate(bizEntity.getExpireDate()); + } + return null; + } + /** * 一次校验(无需校验)完成 * diff --git a/src/main/java/com/glxp/api/util/udi/FilterUdiUtils.java b/src/main/java/com/glxp/api/util/udi/FilterUdiUtils.java index 344221a45..cd89d6476 100644 --- a/src/main/java/com/glxp/api/util/udi/FilterUdiUtils.java +++ b/src/main/java/com/glxp/api/util/udi/FilterUdiUtils.java @@ -32,6 +32,11 @@ public class FilterUdiUtils { return getGS1Udi(data); } else if (data.substring(0, 1).equals("#")) { return getGLXPUdi(data); + } else if (data.length() == 18 || data.length() == 20) { + String prefix = data.substring(0, 1); + if (prefix.equals("8")) { + return getDrugInfo(data); + } } } return null; @@ -107,7 +112,6 @@ public class FilterUdiUtils { } - public static UdiEntity getGLXPUdi(String data) { String batchNo = ""; String produceDate = ""; @@ -166,6 +170,19 @@ public class FilterUdiUtils { } + public static UdiEntity getDrugInfo(String data) { + UdiEntity udiEntity = new UdiEntity(); + String prefix = data.substring(0, 7); + String serialNo = data.substring(7, 16); + udiEntity.setBatchNo(null); + udiEntity.setExpireDate(null); + udiEntity.setProduceDate(null); + udiEntity.setUdi(prefix); + udiEntity.setSerialNo(serialNo); + return udiEntity; + } + + public static UdiProductEntity transUdi(UdiProductEntity data) { UdiEntity udiEntity = getUdi(data.getCode()); if (udiEntity != null) { @@ -229,7 +246,6 @@ public class FilterUdiUtils { } } - return udiRelevanceResponses.get(0); } diff --git a/src/main/resources/schemas/schema_v2.4.sql b/src/main/resources/schemas/schema_v2.4.sql index 75a2ed095..a392533ae 100644 --- a/src/main/resources/schemas/schema_v2.4.sql +++ b/src/main/resources/schemas/schema_v2.4.sql @@ -4047,7 +4047,7 @@ CREATE TABLE IF NOT EXISTS `io_split_code_detail` `createUser` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '创建人', `updateTime` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注', - PRIMARY KEY (`id`) USING BTREE + PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '拆零出库明细表' @@ -4075,6 +4075,21 @@ CALL Pro_Temp_ColumnWork('pur_order', 'productType', CALL Pro_Temp_ColumnWork('io_order', 'productType', ' tinyint NULL DEFAULT NULL COMMENT ''产品类型(1.耗材,2.药品)''', 1); +CALL Pro_Temp_ColumnWork('io_code_temp', 'productType', + ' tinyint NULL DEFAULT NULL COMMENT ''产品类型(1.耗材,2.药品)''', + 1); +CALL Pro_Temp_ColumnWork('io_code', 'productType', + ' tinyint NULL DEFAULT NULL COMMENT ''产品类型(1.耗材,2.药品)''', + 1); +CALL Pro_Temp_ColumnWork('io_order_detail_result', 'productType', + ' tinyint NULL DEFAULT NULL COMMENT ''产品类型(1.耗材,2.药品)''', + 1); +CALL Pro_Temp_ColumnWork('io_order_detail_biz', 'productType', + ' tinyint NULL DEFAULT NULL COMMENT ''产品类型(1.耗材,2.药品)''', + 1); +CALL Pro_Temp_ColumnWork('io_order_detail_code', 'productType', + ' tinyint NULL DEFAULT NULL COMMENT ''产品类型(1.耗材,2.药品)''', + 1); CALL Pro_Temp_ColumnWork('basic_sk_prescribe', 'clinicNumber', @@ -4130,14 +4145,5 @@ CALL Pro_Temp_ColumnWork('basic_sk_prescribe', 'id', 1); -CALL Pro_Temp_ColumnWork('basic_sk_prescribe_item_detail', 'itemCode', - 'varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT ''绑定的收费项目编码''', - 1); - -CALL Pro_Temp_ColumnWork('basic_sk_prescribe_item_detail', 'itemName', - 'varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT ''绑定的收费项目名称''', - 1); - - CALL Pro_Temp_ColumnWork('basic_products', 'cphhhbh', 'varchar(255)', 1);