From 15b093a2dfcb5acc34a423c130c7e905468d136c Mon Sep 17 00:00:00 2001 From: anthonywj Date: Thu, 8 Aug 2024 16:44:30 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8D=AF=E5=93=81=E6=89=AB=E7=A0=81=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../inout/IoCodeTempController.java | 363 ++++++++++++++++-- .../controller/inout/IoOrderController.java | 21 +- .../api/entity/inout/IoCodeTempEntity.java | 7 + .../entity/inout/IoOrderDetailBizEntity.java | 6 + .../entity/inout/IoOrderDetailCodeEntity.java | 8 + .../inout/IoOrderDetailResultEntity.java | 6 + .../basic/CompanyProductRelevanceRequest.java | 2 +- .../api/service/inout/IoAddInoutService.java | 1 + .../service/inout/IoCheckInoutService.java | 33 +- .../inout/impl/IoOrderServiceImpl.java | 8 +- .../com/glxp/api/util/udi/FilterUdiUtils.java | 18 +- src/main/resources/schemas/schema_v2.4.sql | 15 + 12 files changed, 432 insertions(+), 56 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 c023e9de..c34e5837 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java @@ -341,7 +341,7 @@ public class IoCodeTempController extends BaseController { @AuthRuleAnnotation("") @PostMapping("warehouse/inout/addOrderWeb") @CusRedissonAnnotation(cacheName = RedissonCacheKey.WEB_ADD_CODE, key = {"#addOrderRequest.corpOrderId", "#addOrderRequest.code"}, timeOutMsg = "系统正在处理,请勿重复扫码") - @Log(title = "单据管理", businessType = BusinessType.INSERT) + @Log(title = "单据器械扫码", businessType = BusinessType.INSERT) public BaseResponse addOrderWeb(@RequestBody AddOrderRequest addOrderRequest, BindingResult bindingResult) { if (bindingResult.hasErrors()) { @@ -895,6 +895,330 @@ public class IoCodeTempController extends BaseController { return ResultVOUtils.success(addCodeResult); } + + //前端扫码提交(药品) + @AuthRuleAnnotation("") + @PostMapping("warehouse/inout/drug/addOrderWeb") + @CusRedissonAnnotation(cacheName = RedissonCacheKey.WEB_ADD_CODE, key = {"#addOrderRequest.corpOrderId", "#addOrderRequest.code"}, timeOutMsg = "系统正在处理,请勿重复扫码") + @Log(title = "单据药品扫码", businessType = BusinessType.INSERT) + public BaseResponse addDrugOrderWeb(@RequestBody AddOrderRequest addOrderRequest, BindingResult bindingResult) { + + if (bindingResult.hasErrors()) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage()); + } + AddCodeResult addCodeResult = new AddCodeResult(); + BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction(addOrderRequest.getAction()); + InvWarehouseEntity invWarehouseEntity = invWarehouseService.findByInvSubByCode(addOrderRequest.getInvCode()); + String code = addOrderRequest.getCode(); + if (StringUtils.isBlank(code)) + return ResultVOUtils.error(ResultEnum.DATA_ERROR); + if (code.endsWith("\u001D")) { + code = code.replace("\u001D", ""); + } + UdiEntity udiEntity = FilterUdiUtils.getUdi(code); + if (udiEntity == null) + return ResultVOUtils.error(500, "无效条码!"); + + if (StrUtil.isNotEmpty(addOrderRequest.getBatchNo())) { + udiEntity.setBatchNo(addOrderRequest.getBatchNo()); + } + if (StrUtil.isNotEmpty(addOrderRequest.getProduceDate())) { + udiEntity.setProduceDate(addOrderRequest.getProduceDate()); + } + if (StrUtil.isNotEmpty(addOrderRequest.getExpireDate())) { + udiEntity.setExpireDate(addOrderRequest.getExpireDate()); + } + if (StrUtil.isNotEmpty(addOrderRequest.getSerialNo())) { + udiEntity.setSerialNo(addOrderRequest.getSerialNo()); + } + + //批次号校验 + //判断此产品是否开启允许无批次号 + UdiProductEntity udiInfoEntity = udiProductService.findByNameCode(udiEntity.getUdi()); + if (udiInfoEntity == null) { + return ResultVOUtils.error(500, "耗材字典不存在此产品!"); + } + + + String orderId = addOrderRequest.getBillNo(); + + + //过期提醒: + if (IntUtil.value(bussinessTypeEntity.getCheckExpire()) == 1 && !addOrderRequest.isIgnoreExpire()) { + if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) { + String expireDate = "20" + udiEntity.getExpireDate(); + long expireTime = DateUtil.parseDateExpire(expireDate); + if (expireTime - System.currentTimeMillis() < 0) { + return ResultVOUtils.error(504, "当前产品已过期,是否确定继续添加?"); + } + } + } + + if (IntUtil.value(bussinessTypeEntity.getCheckExpire()) == 2) { + if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) { + String expireDate = "20" + udiEntity.getExpireDate(); + long expireTime = DateUtil.parseDateExpire(expireDate); + if (expireTime - System.currentTimeMillis() < 0) { + return ResultVOUtils.error(604, "当前产品已过期,无法添加?"); + } + } + } + + + UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByNameCode(udiEntity.getUdi()); + long recent = 0; + if (udiRelevanceResponse.getRecentDateTime() != null) + recent = udiRelevanceResponse.getRecentDateTime().longValue(); + if (IntUtil.value(bussinessTypeEntity.getCheckVailDate()) == 1 && recent > 0 && !addOrderRequest.isIgnoreRecentExpire()) { + if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) { + String expireDate = "20" + udiEntity.getExpireDate(); + long expireTime = DateUtil.parseDateExpire(expireDate); + long recentTieme = Math.abs(recent * 24 * 60 * 60 * 1000); + long resultTime = expireTime - System.currentTimeMillis(); + + if (resultTime > 0) { + long time = resultTime / (24 * 60 * 60 * 1000); + if (resultTime < recentTieme) { + return ResultVOUtils.error(505, "当前产品临近过期,距过期还剩" + time + "天,是否确定继续添加?"); + } + } + } + } + + if (IntUtil.value(bussinessTypeEntity.getCheckVailDate()) == 2 && recent > 0) { + if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) { + String expireDate = "20" + udiEntity.getExpireDate(); + long expireTime = DateUtil.parseDateExpire(expireDate); + long recentTieme = Math.abs(recent * 24 * 60 * 60 * 1000); + long resultTime = expireTime - System.currentTimeMillis(); + + if (resultTime > 0) { + long time = resultTime / (24 * 60 * 60 * 1000); + if (resultTime < recentTieme) { + return ResultVOUtils.error(605, "当前产品临近过期,距过期还剩" + time + "天,无法添加!"); + } + } + } + } + + //先生成扫码单据 + IoOrderEntity orderEntity = orderService.findByBillNo(orderId); + String inBatch = ""; + if (StringUtils.isBlank(orderId) || orderEntity == null) { + String orderNo = gennerOrderUtils.createScOrderNo(new OrderNoTypeBean(Constant.SCAN_ORDER + StrUtil.trimToEmpty(bussinessTypeEntity.getPrefix()), "yyyyMMdd")); + orderId = orderNo; + } + + inBatch = orderId.substring((Constant.SCAN_ORDER + StrUtil.trimToEmpty(bussinessTypeEntity.getPrefix())).length()); + + List codeEnttitys = codeTempService.findByOrderId(orderId); + IoCodeTempEntity exitLocalEntity = null; + IoCodeTempEntity genDetaiEntity = new IoCodeTempEntity(); + List udiRelevanceResponses = null; + if (codeEnttitys.size() > 0) { + exitLocalEntity = isExitLocal(code, codeEnttitys); + if (exitLocalEntity != null) { + if (StrUtil.isEmpty(exitLocalEntity.getSupId()) || exitLocalEntity.getRelId() == null) { + return ResultVOUtils.error(500, "当前追溯码已存在,且存在异常未处理!"); + } + udiRelevanceResponses = udiRelevanceService.selectGroupByNameCode(exitLocalEntity.getNameCode(), null); + + BeanUtils.copyProperties(exitLocalEntity, genDetaiEntity); + genDetaiEntity.setCount(1); + genDetaiEntity.setReCount(udiCalCountUtil.getActCount(udiRelevanceResponses.get(0))); + + exitLocalEntity.setCount(exitLocalEntity.getMyCount() + 1); + exitLocalEntity.setReCount(exitLocalEntity.getMyCount() * udiCalCountUtil.getActCount(udiRelevanceResponses.get(0))); + + + if (StringUtils.isNotBlank(exitLocalEntity.getSerialNo())) { + return ResultVOUtils.error(500, "重复扫码!"); + } + + BaseResponse invRes = checkInv(bussinessTypeEntity, exitLocalEntity); + if (invRes != null) { + return invRes; + } + + if (addOrderRequest.getOrderType() == ConstantStatus.ORDER_TYPE_NORMAL && bussinessTypeEntity.isCheckEnable()) { + String errMsg = ioCheckInoutService.checkCode(genDetaiEntity); + if (errMsg != null) { + return ResultVOUtils.error(500, errMsg); + } else + codeTempService.updateById(exitLocalEntity); + } else if (addOrderRequest.getOrderType() == ConstantStatus.ORDER_TYPE_WAIT && bussinessTypeEntity.isCheckEnable()) { + String errMsg = ioCheckInoutService.checkNoPiCode(genDetaiEntity); + if (errMsg != null) { + return ResultVOUtils.error(500, errMsg); + } else + codeTempService.updateById(exitLocalEntity); + } else { + codeTempService.updateById(exitLocalEntity); + } + } + } + + if (exitLocalEntity == null) { + IoCodeTempEntity codeEnttity = new IoCodeTempEntity(); + codeEnttity.setCode(code); + codeEnttity.setOrderId(orderId); + codeEnttity.setCorpOrderId(addOrderRequest.getCorpOrderId()); + codeEnttity.setCreateTime(new Date()); + codeEnttity.setUpdateTime(new Date()); + codeEnttity.setMainAction(bussinessTypeEntity.getMainAction()); + codeEnttity.setAction(bussinessTypeEntity.getAction()); + codeEnttity.setNameCode(udiEntity.getUdi()); + codeEnttity.setBatchNo(udiEntity.getBatchNo()); + codeEnttity.setProduceDate(udiEntity.getProduceDate()); + codeEnttity.setExpireDate(udiEntity.getExpireDate()); + codeEnttity.setSerialNo(udiEntity.getSerialNo()); + codeEnttity.setDeptCode(invWarehouseEntity.getParentId()); + codeEnttity.setInvCode(addOrderRequest.getInvCode()); + codeEnttity.setCount(1); + codeEnttity.setProductType(2); + String unitFk = null; + if (bussinessTypeEntity.getCorpType() == ConstantStatus.CORP_TYPE_OUT) { + unitFk = addOrderRequest.getFromCorp(); + } + //产品是否可以以使用单元入库 + udiRelevanceResponses = udiRelevanceService.selectGroupByNameCode(codeEnttity.getNameCode(), false); + if (udiRelevanceResponses.size() >= 1) { +// UdiRelevanceResponse udiRelevanceResponse = udiRelevanceResponses.get(0); + if (udiRelevanceResponse == null) { + return ResultVOUtils.error(500, "该产品信息未维护!"); + } else if (!udiRelevanceResponse.getUseDy() && udiRelevanceResponse.getDiType() == ConstantStatus.DITYPE_SYDY) { + return ResultVOUtils.error(500, "该产品不允许以使用单元入库!"); + } + + if (bussinessTypeEntity.isVailDispatch() && !udiRelevanceResponse.isDispatch()) { + return ResultVOUtils.error(500, "该产品不可配送,请联系院方!"); + } + + if (bussinessTypeEntity.getVailGroupBuy() == 1 && !IntUtil.value(udiRelevanceResponse.getGroupBuy())) { //只采集集采产品 + return ResultVOUtils.error(500, bussinessTypeEntity.getName() + "只允许录入集采产品!"); + } + + if (bussinessTypeEntity.getVailGroupBuy() == 2 && IntUtil.value(udiRelevanceResponse.getGroupBuy())) { //只采集非集采产品 + return ResultVOUtils.error(500, bussinessTypeEntity.getName() + "只允许录入非集采产品!"); + } + + //计算实际数量 + codeEnttity.setReCount(codeEnttity.getMyCount() * udiCalCountUtil.getActCount(udiRelevanceResponse)); + } else if (udiRelevanceResponses.size() == 0) { + if (unitFk == null) + return ResultVOUtils.error(500, "药品字典不存在此产品!"); + else + return ResultVOUtils.error(500, "当前供应商不存在此配送产品!"); + } + + //校验供应商是否配送此产品 + BaseResponse corpResponse = checkCorp(codeEnttity, bussinessTypeEntity, unitFk); + if (corpResponse != null) { + return corpResponse; + } + + IoOrderEntity isExit = orderService.findByBillNo(orderId); + if (isExit == null) { + orderEntity = new IoOrderEntity(); + orderEntity.setBillNo(orderId); + orderEntity.setCorpOrderId(addOrderRequest.getCorpOrderId()); + orderEntity.setMainAction(bussinessTypeEntity.getMainAction()); + orderEntity.setAction(bussinessTypeEntity.getAction()); + orderEntity.setFromCorp(addOrderRequest.getFromCorp()); + if (StrUtil.isNotEmpty(addOrderRequest.getFromInvCode())) { + InvWarehouseEntity invWarehouseEntity1 = invWarehouseService.findByInvSubByCode(addOrderRequest.getFromInvCode()); + orderEntity.setFromDeptCode(invWarehouseEntity1.getParentId()); + } + orderEntity.setFromInvCode(addOrderRequest.getFromInvCode()); + orderEntity.setFromType(ConstantStatus.FROM_WEBNEW); + orderEntity.setStatus(ConstantStatus.ORDER_STATUS_TEMP_SAVE); + orderEntity.setDealStatus(ConstantStatus.ORDER_DEAL_DRAFT); + AuthAdmin authAdmin = getUser(); + orderEntity.setCreateUser(authAdmin.getId() + ""); + orderEntity.setCreateTime(new Date()); + orderEntity.setUpdateUser(authAdmin.getId() + ""); + orderEntity.setUpdateTime(new Date()); + orderEntity.setCustomerId(authAdmin.getCustomerId() + ""); + orderEntity.setDeptCode(invWarehouseEntity.getParentId()); + orderEntity.setCheckPreInOrders(addOrderRequest.getCheckPreInOrders()); + orderEntity.setInvCode(addOrderRequest.getInvCode()); + orderEntity.setOrderType(addOrderRequest.getOrderType()); + orderEntity.setBusType(bussinessTypeEntity.getBusType()); + orderEntity.setProductType(2); + orderService.insertOrder(orderEntity); + } + if (addOrderRequest.getOrderType() == ConstantStatus.ORDER_TYPE_NORMAL && bussinessTypeEntity.isCheckEnable() && bussinessTypeEntity.getCheckWebNew() != 0) { + boolean isBillExit = orderDetailBizService.isExit(orderEntity.getBillNo()); + if (!isBillExit) { + orderService.deleteByBillNo(orderEntity.getBillNo()); + return ResultVOUtils.error(500, "请先录入业务详情"); + } + } + BaseResponse baseResponse = checkRelId(codeEnttity, unitFk); + BaseResponse invRes = checkInv(bussinessTypeEntity, codeEnttity); + if (invRes != null) { + return invRes; + } + genDetaiEntity = codeEnttity; + if (baseResponse == null) { + baseResponse = checkSupId(bussinessTypeEntity, codeEnttity, unitFk); + if (baseResponse != null) + return baseResponse; + } else { + if (baseResponse.getCode() == 501) { + return baseResponse; + } else if (baseResponse.getCode() == 502) { + return baseResponse; + } + checkSupId(bussinessTypeEntity, codeEnttity, unitFk); + return baseResponse; + } + + if (IntUtil.value(bussinessTypeEntity.getCheckCertExpire()) == 2 && udiRelevanceResponse.isNeedCert()) { + SupProductEntity supProductEntity = supProductService.findExitByManufactury(udiRelevanceResponse.getCpmctymc(), udiRelevanceResponse.getManufactory(), unitFk); + if (supProductEntity != null && (supProductEntity.getAuditStatus() == ConstantStatus.AUDIT_PASS || supProductEntity.getAuditStatus() == ConstantStatus.AUDIT_CHANGE_PASS)) { + List supCertEntities = supCertService.findByProductId(supProductEntity.getProductId()); + if (CollUtil.isNotEmpty(supCertEntities)) { + Date curDate = new Date(); + for (SupCertEntity supCertEntity : supCertEntities) { + if (supCertEntity.getExpireDate() != null && supCertEntity.getExpireDate().compareTo(curDate) < 0) { + return ResultVOUtils.error(500, "产品资质证书已过期!"); + } + } + } + } else { + if (supProductEntity == null) { + return ResultVOUtils.error(500, "产品资质证书未维护!"); + } else { + return ResultVOUtils.error(500, "产品资质证书未通过审核!"); + } + } + } + codeEnttity.setPrice(udiRelevanceResponse.getPrice()); + codeEnttity.setInBatchNo(inBatch); + //是否边扫边校验 + if (addOrderRequest.getOrderType() == ConstantStatus.ORDER_TYPE_NORMAL && bussinessTypeEntity.isCheckEnable()) { + String errMsg = ioCheckInoutService.checkCode(codeEnttity); + if (errMsg != null) { + return ResultVOUtils.error(500, errMsg); + } else + codeTempService.insert(codeEnttity); + } else if (addOrderRequest.getOrderType() == ConstantStatus.ORDER_TYPE_WAIT && bussinessTypeEntity.isCheckEnable()) { + String errMsg = ioCheckInoutService.checkDrugNoPiCode(codeEnttity); + if (errMsg != null) { + return ResultVOUtils.error(500, errMsg); + } else + codeTempService.insert(codeEnttity); + } else { + codeTempService.insert(codeEnttity); + } + } + addCodeResult.setOrderId(orderId); + transInoutService.genOrderDetailCode(orderEntity, genDetaiEntity); + return ResultVOUtils.success(addCodeResult); + } + + //校验条码完整性 public BaseResponse checkOriginCode(UdiEntity udiEntity) { //校验条码的完整性 @@ -923,37 +1247,6 @@ public class IoCodeTempController extends BaseController { return null; } - //校验条码完整性 - public BaseResponse checkCodeIntegrity(UdiRelevanceResponse checkUdi, UdiEntity udiEntity) { - String lostMsg = ""; - //校验条码完整性 - if ("是".equals(checkUdi.getScbssfbhph()) && StrUtil.isEmpty(udiEntity.getBatchNo())) { - lostMsg = lostMsg + ",批次号"; - } - if ("是".equals(checkUdi.getScbssfbhscrq()) && StrUtil.isEmpty(udiEntity.getProduceDate())) { - lostMsg = lostMsg + ",生产日期"; - } - - if ("是".equals(checkUdi.getScbssfbhsxrq()) && StrUtil.isEmpty(udiEntity.getExpireDate())) { - lostMsg = lostMsg + ",失效日期"; - } - if (("是".equals(checkUdi.getScbssfbhxlh()) && StrUtil.isEmpty(udiEntity.getSerialNo())) - ) { - lostMsg = lostMsg + ",序列号"; - } - if (StrUtil.isNotEmpty(udiEntity.getSerialNo()) && udiEntity.getSerialNo().length() > 20) { - return ResultVOUtils.error(504, "序列号超出20位!"); - } - if (StrUtil.isNotEmpty(udiEntity.getBatchNo()) && udiEntity.getBatchNo().length() > 20) { - return ResultVOUtils.error(504, "批次号超出20位!"); - } - if (StrUtil.isEmpty(udiEntity.getSerialNo()) && StrUtil.isEmpty(udiEntity.getBatchNo())) { - lostMsg = "批次号与序列号不能同时为空!"; - } - if (StrUtil.isNotEmpty(lostMsg)) - return ResultVOUtils.error(500, lostMsg); - else return null; - } //校验供应商是否配送此产品 public BaseResponse checkCorp(IoCodeTempEntity codeEnttity, BasicBussinessTypeEntity bussinessTypeEntity, String unitFk) { @@ -1003,10 +1296,6 @@ public class IoCodeTempController extends BaseController { //校验供应商唯一性 public BaseResponse checkSupId(BasicBussinessTypeEntity bussinessTypeEntity, IoCodeTempEntity codeEnttity, String unitFk) { String originSupId = unitFk; -// if (bussinessTypeEntity.getCorpType() == ConstantStatus.CORP_TYPE_OUT) { -// if (unitFk != null) -// originSupId = unitFk; -// } if (originSupId != null) { codeEnttity.setSupId(originSupId); } else { @@ -1140,8 +1429,6 @@ public class IoCodeTempController extends BaseController { return baseResponse; codeTempEntity.setRelId(codeSaveRequest.getRelId()); - int reCount = udiCalCountUtil.getActCount(codeTempEntity); -// codeTempEntity.setReCount(reCount); } IoOrderEntity orderEntity = orderService.findByBillNo(codeTempEntity.getOrderId()); BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction(orderEntity.getAction()); diff --git a/src/main/java/com/glxp/api/controller/inout/IoOrderController.java b/src/main/java/com/glxp/api/controller/inout/IoOrderController.java index 814eb099..70724c14 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoOrderController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoOrderController.java @@ -273,9 +273,9 @@ public class IoOrderController extends BaseController { orderEntity.setDeptCode(addOrderRequest.getDeptCode()); orderEntity.setBillNo(addOrderRequest.getBillNo()); orderEntity.setInvCode(addOrderRequest.getInvCode()); - if (addOrderRequest.getProductType() == null){ + if (addOrderRequest.getProductType() == null) { orderEntity.setProductType(1); - }else { + } else { orderEntity.setProductType(addOrderRequest.getProductType()); } orderService.updateByBillNo(orderEntity); @@ -351,7 +351,7 @@ public class IoOrderController extends BaseController { || orderEntity.getStatus() == ConstantStatus.ORDER_STATUS_PROCESSING) { return ResultVOUtils.error(500, "提交失败,单据正在处理,请稍后刷新查看!"); } - if (orderEntity.getStatus() != 1 && orderEntity.getStatus() != 3 && orderEntity.getStatus() != 4 && orderEntity.getStatus() != 6) { + if (orderEntity.getStatus() != 1 && orderEntity.getStatus() != 3 && orderEntity.getStatus() != 4 && orderEntity.getStatus() != 6 && orderEntity.getStatus() != 11) { return ResultVOUtils.error(500, "提交失败,单据已提交,请稍后刷新查看!"); } return null; @@ -623,14 +623,14 @@ public class IoOrderController extends BaseController { * @return */ @GetMapping("udiwms/inout/order/filterOrderTrace") - public BaseResponse filterOrderTrace(String billNo,Integer productType) { + public BaseResponse filterOrderTrace(String billNo, Integer productType) { if (StrUtil.isBlank(billNo)) { return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); } - if (productType == null){ + if (productType == null) { productType = 1; } - List list = orderService.filterOrderTrace(billNo,productType); + List list = orderService.filterOrderTrace(billNo, productType); List responses = orderService.findResponse(list); return ResultVOUtils.success(responses); } @@ -707,19 +707,18 @@ public class IoOrderController extends BaseController { * 2、新增io_order 生产新的billNo * 3、复制新的io_order_detail_biz 、 io_order_detail_code 绑定新billNo * 4、复制io_code 到新billNo的io_code_temp - * */ @AuthRuleAnnotation("") @PostMapping("/udiwms/inout/order/copyOrder") @Log(title = "单据管理", businessType = BusinessType.INSERT) public BaseResponse copyOrder(@RequestBody IoOrderEntity ioOrderEntity) { - if ( null == ioOrderEntity || StrUtil.isEmpty(ioOrderEntity.getBillNo()) ) { + if (null == ioOrderEntity || StrUtil.isEmpty(ioOrderEntity.getBillNo())) { return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); } String oldBillNo = ioOrderEntity.getBillNo(); IoOrderEntity oldIoOrderEntity = orderService.findByBillNo(oldBillNo); - if (Objects.isNull(oldIoOrderEntity)){ + if (Objects.isNull(oldIoOrderEntity)) { return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); } @@ -729,7 +728,7 @@ public class IoOrderController extends BaseController { AuthAdmin authAdmin = getUser(); //处理io_order IoOrderEntity newIoOrderEntity = new IoOrderEntity(); - orderService.copyOrder(authAdmin,newBillNo,newIoOrderEntity,oldIoOrderEntity); + orderService.copyOrder(authAdmin, newBillNo, newIoOrderEntity, oldIoOrderEntity); orderService.insertOrder(newIoOrderEntity); //处理io_order_detail_biz boolean orderDetailBizFlag = orderDetailBizService.copyOrderDetailBiz(newBillNo, oldBillNo); @@ -738,7 +737,7 @@ public class IoOrderController extends BaseController { //处理io_code boolean codeTempFlag = codeTempService.copyCodeTemp(newBillNo, oldBillNo); - if (orderDetailBizFlag && orderDetailCodeFlag && codeTempFlag){ + if (orderDetailBizFlag && orderDetailCodeFlag && codeTempFlag) { return ResultVOUtils.success(newIoOrderEntity); } 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 2770128b..f5d51916 100644 --- a/src/main/java/com/glxp/api/entity/inout/IoCodeTempEntity.java +++ b/src/main/java/com/glxp/api/entity/inout/IoCodeTempEntity.java @@ -152,6 +152,13 @@ public class IoCodeTempEntity { @TableField(exist = false) private String mySupId; //更新供应商 + + /** + * 单据产品类型 1:器械;2:药品 + */ + @TableField(value = "productType") + private Integer productType; + public int getMyCount() { if (count == null) return 0; 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 3b650820..fdf2e772 100644 --- a/src/main/java/com/glxp/api/entity/inout/IoOrderDetailBizEntity.java +++ b/src/main/java/com/glxp/api/entity/inout/IoOrderDetailBizEntity.java @@ -208,6 +208,12 @@ public class IoOrderDetailBizEntity { @TableField(value = "checkColdFileName") private String checkColdFileName; + /** + * 单据产品类型 1:器械;2:药品 + */ + @TableField(value = "productType") + private Integer productType; + @TableField(exist = false) private boolean checkSuccess; 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 00f9d1af..a4de2d51 100644 --- a/src/main/java/com/glxp/api/entity/inout/IoOrderDetailCodeEntity.java +++ b/src/main/java/com/glxp/api/entity/inout/IoOrderDetailCodeEntity.java @@ -203,6 +203,14 @@ public class IoOrderDetailCodeEntity implements Serializable { @TableField(value = "sterDate") private String sterDate; + + /** + * 单据产品类型 1:器械;2:药品 + */ + @TableField(value = "productType") + private Integer productType; + + @TableField(exist = false) private boolean checkSuccess; 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 05472ec7..096719de 100644 --- a/src/main/java/com/glxp/api/entity/inout/IoOrderDetailResultEntity.java +++ b/src/main/java/com/glxp/api/entity/inout/IoOrderDetailResultEntity.java @@ -195,4 +195,10 @@ public class IoOrderDetailResultEntity { private String sterDate; + /** + * 单据产品类型 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 c9151253..cca532c1 100644 --- a/src/main/java/com/glxp/api/req/basic/CompanyProductRelevanceRequest.java +++ b/src/main/java/com/glxp/api/req/basic/CompanyProductRelevanceRequest.java @@ -96,5 +96,5 @@ public class CompanyProductRelevanceRequest extends ListPageRequest { */ private Integer codeCheck; - private Integer productType = 1; + private Integer productType; } diff --git a/src/main/java/com/glxp/api/service/inout/IoAddInoutService.java b/src/main/java/com/glxp/api/service/inout/IoAddInoutService.java index 4e1199c0..06e880fb 100644 --- a/src/main/java/com/glxp/api/service/inout/IoAddInoutService.java +++ b/src/main/java/com/glxp/api/service/inout/IoAddInoutService.java @@ -752,6 +752,7 @@ public class IoAddInoutService { ioOrderDetailCodeEntity.setMeasname(udiRelevanceResponse.getMeasname()); ioOrderDetailCodeEntity.setSpec(udiRelevanceResponse.getGgxh()); ioOrderDetailCodeEntity.setSupId(codeTempEntity.getSupId()); + ioOrderDetailCodeEntity.setProductType(codeTempEntity.getProductType()); if (codeTempEntity.getPrice() == null) { ioOrderDetailCodeEntity.setPrice(udiRelevanceResponse.getPrice()); 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 51e92809..21fbe6c4 100644 --- a/src/main/java/com/glxp/api/service/inout/IoCheckInoutService.java +++ b/src/main/java/com/glxp/api/service/inout/IoCheckInoutService.java @@ -375,6 +375,37 @@ public class IoCheckInoutService { } + 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()); + 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; + } + + //一次校验(无需校验)完成 public void unCheckFirstFinish(IoOrderEntity orderEntity, List codeTempEntities) { @@ -574,7 +605,7 @@ public class IoCheckInoutService { } for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) { String msg = ""; - int count = orderDetailCodeService.findByRelIdCount(orderEntity.getBillNo(), bizEntity.getBindRlFk()); + int count = IntUtil.value(orderDetailCodeService.findByRelIdCount(orderEntity.getBillNo(), bizEntity.getBindRlFk())); if (bizEntity.getCount() == count) { bizEntity.setCheckSuccess(true); bizEntity.setScanCount(count); diff --git a/src/main/java/com/glxp/api/service/inout/impl/IoOrderServiceImpl.java b/src/main/java/com/glxp/api/service/inout/impl/IoOrderServiceImpl.java index 811f7ac7..4677c60c 100644 --- a/src/main/java/com/glxp/api/service/inout/impl/IoOrderServiceImpl.java +++ b/src/main/java/com/glxp/api/service/inout/impl/IoOrderServiceImpl.java @@ -694,7 +694,7 @@ public class IoOrderServiceImpl implements IoOrderService { case Constant.ORDER_STATUS_UN_ALLOCATE: filterOrderRequest.setStatuses(Arrays.asList(ConstantStatus.ORDER_STATUS_ALLOCATE)); filterOrderRequest.setDealStatuses(Arrays.asList(2)); - + break; case Constant.ORDER_STATUS_RETURN: filterOrderRequest.setStatuses(Arrays.asList(10, 7)); filterOrderRequest.setDealStatuses(Arrays.asList(3, 4)); @@ -742,8 +742,8 @@ public class IoOrderServiceImpl implements IoOrderService { } @Override - public List filterOrderTrace(String billNo,Integer productType) { - IoOrderEntity order = orderDao.selectOne(new QueryWrapper().eq("billNo", billNo).eq("productType",productType)); + public List filterOrderTrace(String billNo, Integer productType) { + IoOrderEntity order = orderDao.selectOne(new QueryWrapper().eq("billNo", billNo).eq("productType", productType)); if (null == order) { return Collections.emptyList(); } @@ -891,7 +891,7 @@ public class IoOrderServiceImpl implements IoOrderService { } @Override - public boolean copyOrder(AuthAdmin authAdmin,String newBillNo, IoOrderEntity newIoOrderEntity, IoOrderEntity oldIoOrderEntity) { + public boolean copyOrder(AuthAdmin authAdmin, String newBillNo, IoOrderEntity newIoOrderEntity, IoOrderEntity oldIoOrderEntity) { newIoOrderEntity.setBillNo(newBillNo); newIoOrderEntity.setMainAction(ConstantType.TYPE_OUT); newIoOrderEntity.setFromCorp(oldIoOrderEntity.getFromCorp()); 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 05f50f7b..f9efa636 100644 --- a/src/main/java/com/glxp/api/util/udi/FilterUdiUtils.java +++ b/src/main/java/com/glxp/api/util/udi/FilterUdiUtils.java @@ -27,6 +27,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; @@ -109,7 +114,7 @@ public class FilterUdiUtils { String expireDate = ""; String serialNo = null; String udi = ""; - String[] spilts = data.split("#",data.length()); + String[] spilts = data.split("#", data.length()); if (spilts != null && spilts.length >= 5) { udi = spilts[1]; produceDate = spilts[2]; @@ -156,6 +161,17 @@ public class FilterUdiUtils { return prefix; } + 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()); diff --git a/src/main/resources/schemas/schema_v2.4.sql b/src/main/resources/schemas/schema_v2.4.sql index 337e330b..847efb7a 100644 --- a/src/main/resources/schemas/schema_v2.4.sql +++ b/src/main/resources/schemas/schema_v2.4.sql @@ -929,6 +929,21 @@ CALL Pro_Temp_ColumnWork('basic_udirel', 'payFeeCode', 'varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT ''收费项目编码''', 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('pur_receive', 'productType',