From 4975422c12c21a11780b2be7ee133df24e8c6e7b Mon Sep 17 00:00:00 2001 From: yewj Date: Thu, 12 Dec 2024 14:18:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=B8=A6=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=EF=BC=8C=E5=BA=93=E5=AD=98=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/inout/IoOrderController.java | 19 ++- .../basic/BasicBussinessTypeEntity.java | 2 +- .../res/basic/BasicBussinessTypeResponse.java | 2 +- .../service/inout/IoCheckInoutService.java | 149 ++++++++++++------ .../api/service/inout/IoGenInvService.java | 7 +- .../com/glxp/api/util/udi/FilterUdiUtils.java | 12 +- .../mybatis/mapper/inv/invProductDao.xml | 123 +++++++-------- 7 files changed, 192 insertions(+), 122 deletions(-) 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 0df1eee14..4233c4b76 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoOrderController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoOrderController.java @@ -401,6 +401,7 @@ public class IoOrderController extends BaseController { BaseResponse tempResponse = checkSubmitEnable(orderEntity); if (tempResponse != null) return tempResponse; + BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction(orderEntity.getAction()); //校验单据是否已完成 List orderDetailBizEntities = orderDetailBizService.findByOrderId(addOrderRequest.getBillNo()); @@ -412,7 +413,6 @@ public class IoOrderController extends BaseController { } //单据提交后再次校验库存是否足够 - BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction(orderEntity.getAction()); BaseResponse baseResponse = ioAddInoutService.checkInv(bussinessTypeEntity, orderDetailBizEntities, orderEntity, codeTempEntities); if (baseResponse != null) return baseResponse; @@ -465,9 +465,16 @@ public class IoOrderController extends BaseController { orderService.update(orderEntity); checkInoutService.check(addOrderRequest.getBillNo()); } else { - String errMsg = checkInoutService.bizNoPiCheck(orderDetailBizEntities, orderEntity); - if (StrUtil.isNotEmpty(errMsg)) { - return ResultVOUtils.error(500, errMsg); + if (IntUtil.value(bussinessTypeEntity.getCheckWebNewType()) == 3) { + String errMsg = checkInoutService.bizOrderCheckPass(orderDetailBizEntities, orderDetailCodeEntities); + if (StrUtil.isNotEmpty(errMsg)) { + return ResultVOUtils.error(500, errMsg); + } + } else { + String errMsg = checkInoutService.bizNoPiCheck(orderDetailBizEntities, orderEntity); + if (StrUtil.isNotEmpty(errMsg)) { + return ResultVOUtils.error(500, errMsg); + } } orderDetailBizService.deleteByOrderId(addOrderRequest.getBillNo()); for (IoOrderDetailCodeEntity orderDetailCodeEntity : orderDetailCodeEntities) { @@ -787,8 +794,8 @@ public class IoOrderController extends BaseController { @Log(title = "单据管理", businessType = BusinessType.DELETE) public BaseResponse deletById(@RequestBody DeleteRequest deleteRequest) { IoOrderEntity orderEntity = orderService.findByBillNo(deleteRequest.getBillNo()); - if (orderEntity == null){ - return ResultVOUtils.error(500,"单据不存在,刷新重新上货"); + if (orderEntity == null) { + return ResultVOUtils.error(500, "单据不存在,刷新重新上货"); } if (orderEntity.getStatus() != 1 && orderEntity.getStatus() != 3 && orderEntity.getStatus() != 4 && orderEntity.getStatus() != 6 && orderEntity.getStatus() != 10) { return ResultVOUtils.error(500, "单据已提交无法删除!"); diff --git a/src/main/java/com/glxp/api/entity/basic/BasicBussinessTypeEntity.java b/src/main/java/com/glxp/api/entity/basic/BasicBussinessTypeEntity.java index c5bb48c3c..033320e6e 100644 --- a/src/main/java/com/glxp/api/entity/basic/BasicBussinessTypeEntity.java +++ b/src/main/java/com/glxp/api/entity/basic/BasicBussinessTypeEntity.java @@ -449,7 +449,7 @@ public class BasicBussinessTypeEntity { private int spaceOut; /** - * 有三期业务单校验 0:按扫码结果提交,1:按比对结果提交 + * 有三期业务单校验 0:按扫码结果提交,1:按比对结果提交;3,按业务单提交 */ @TableField(value = "checkWebNewType") private int checkWebNewType; diff --git a/src/main/java/com/glxp/api/res/basic/BasicBussinessTypeResponse.java b/src/main/java/com/glxp/api/res/basic/BasicBussinessTypeResponse.java index e70318f0c..97de58e3c 100644 --- a/src/main/java/com/glxp/api/res/basic/BasicBussinessTypeResponse.java +++ b/src/main/java/com/glxp/api/res/basic/BasicBussinessTypeResponse.java @@ -177,7 +177,7 @@ public class BasicBussinessTypeResponse { private boolean thrCheckReview; /** - * 有三期业务单校验 0:按扫码结果提交,1:按比对结果提交 + * 有三期业务单校验 0:按扫码结果提交,1:按比对结果提交;3,按业务单提交 */ private int checkWebNewType; 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 a47f3ed15..cda8dae2d 100644 --- a/src/main/java/com/glxp/api/service/inout/IoCheckInoutService.java +++ b/src/main/java/com/glxp/api/service/inout/IoCheckInoutService.java @@ -628,66 +628,70 @@ public class IoCheckInoutService { return; } + String errMsg = ""; - //正向校验 - for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) { - String msg = ""; - for (IoOrderDetailCodeEntity codeEntity : orderDetailCodeEntities) { - if (!bizEntity.isCheckSuccess() && !codeEntity.isCheckSuccess() && checkId(bizEntity, codeEntity) == null - && checkBatchNo(bizEntity, codeEntity) == null - && checkProductDate(bizEntity, codeEntity) == null - && checkExpireDate(bizEntity, codeEntity) == null - ) { - if (checkCount(bizEntity, codeEntity) == null) { - bizEntity.setCheckSuccess(true); - bizEntity.setScanCount(codeEntity.getReCount()); - codeEntity.setCheckSuccess(true); - codeEntity.setPrice(bizEntity.getPrice()); - } else { - bizEntity.setScanCount(codeEntity.getReCount()); - bizEntity.setCheckSuccess(false); - msg = "数量不匹配"; + BasicBussinessTypeEntity businessTypeEntity = basicBussinessTypeService.findByAction(orderEntity.getAction()); + if (IntUtil.value(businessTypeEntity.getCheckWebNew()) != 3 || IntUtil.value(businessTypeEntity.getCheckWebNewType()) != 3) { + //正向校验 + for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) { + String msg = ""; + for (IoOrderDetailCodeEntity codeEntity : orderDetailCodeEntities) { + if (!bizEntity.isCheckSuccess() && !codeEntity.isCheckSuccess() && checkId(bizEntity, codeEntity) == null + && checkBatchNo(bizEntity, codeEntity) == null + && checkProductDate(bizEntity, codeEntity) == null + && checkExpireDate(bizEntity, codeEntity) == null + ) { + + if (checkCount(bizEntity, codeEntity) == null) { + bizEntity.setCheckSuccess(true); + bizEntity.setScanCount(codeEntity.getReCount()); + codeEntity.setCheckSuccess(true); + codeEntity.setPrice(bizEntity.getPrice()); + } else { + bizEntity.setScanCount(codeEntity.getReCount()); + bizEntity.setCheckSuccess(false); + msg = "数量不匹配"; + } + break; } - break; } + if (StrUtil.isEmpty(msg) && !bizEntity.isCheckSuccess()) { + msg = "三期不匹配"; + } + bizEntity.setErrMsg(msg); } - if (StrUtil.isEmpty(msg) && !bizEntity.isCheckSuccess()) { - msg = "三期不匹配"; - } - bizEntity.setErrMsg(msg); - } - - for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) { - if (!bizEntity.isCheckSuccess()) { - errMsg = errMsg + bizEntity.getCoName() + bizEntity.getErrMsg() + ";"; - } - } - //反向校验 - for (IoOrderDetailCodeEntity codeEntity : orderDetailCodeEntities) { for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) { - if (!bizEntity.isCheckSuccess() && !codeEntity.isCheckSuccess() && checkId(bizEntity, codeEntity) == null - && checkBatchNo(bizEntity, codeEntity) == null - && checkProductDate(bizEntity, codeEntity) == null - && checkExpireDate(bizEntity, codeEntity) == null - ) { + if (!bizEntity.isCheckSuccess()) { + errMsg = errMsg + bizEntity.getCoName() + bizEntity.getErrMsg() + ";"; + } + } - if (checkCount(bizEntity, codeEntity) == null) { - bizEntity.setCheckSuccess(true); - codeEntity.setCheckSuccess(true); + //反向校验 + for (IoOrderDetailCodeEntity codeEntity : orderDetailCodeEntities) { + for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) { + if (!bizEntity.isCheckSuccess() && !codeEntity.isCheckSuccess() && checkId(bizEntity, codeEntity) == null + && checkBatchNo(bizEntity, codeEntity) == null + && checkProductDate(bizEntity, codeEntity) == null + && checkExpireDate(bizEntity, codeEntity) == null + ) { + if (checkCount(bizEntity, codeEntity) == null) { + bizEntity.setCheckSuccess(true); + codeEntity.setCheckSuccess(true); + } + break; } - break; } } - } - - for (IoOrderDetailCodeEntity codeEntity : orderDetailCodeEntities) { - if (!codeEntity.isCheckSuccess()) { - errMsg = errMsg + codeEntity.getCoName() + ";"; + for (IoOrderDetailCodeEntity codeEntity : orderDetailCodeEntities) { + if (!codeEntity.isCheckSuccess()) { + errMsg = errMsg + codeEntity.getCoName() + ";"; + } } } + if (StrUtil.isNotEmpty(errMsg)) { orderEntity.setErrMsg(errMsg + "校验失败"); orderEntity.setStatus(ConstantStatus.ORDER_STATUS_CHECK_FAIL); @@ -735,6 +739,49 @@ public class IoCheckInoutService { } } + public String bizOrderCheckPass(List orderDetailBizEntities, List orderDetailCodeEntities) { + String errMsg = ""; + //初始化默认值 + for (IoOrderDetailCodeEntity codeEntity : orderDetailCodeEntities) { + codeEntity.setCheckSuccess(false); + } + for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) { + bizEntity.setCheckSuccess(false); + } + for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) { + String msg = ""; + for (IoOrderDetailCodeEntity codeEntity : orderDetailCodeEntities) { + if (!bizEntity.isCheckSuccess() && !codeEntity.isCheckSuccess() && checkId(bizEntity, codeEntity) == null + && checkBatchNo(bizEntity, codeEntity) == null + && checkProductDate(bizEntity, codeEntity) == null + && checkExpireDate(bizEntity, codeEntity) == null + + ) { + + if (checkBizCount(bizEntity, codeEntity) == null) { + bizEntity.setCheckSuccess(true); + codeEntity.setCheckSuccess(true); + bizEntity.setScanCount(codeEntity.getReCount()); + } else { + msg = "扫码数量超出"; + bizEntity.setCheckSuccess(false); + } + break; + } + } + if (StrUtil.isEmpty(msg) && !bizEntity.isCheckSuccess()) { + msg = "三期不匹配"; + } + bizEntity.setErrMsg(msg); + } + for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) { + if (!bizEntity.isCheckSuccess()) { + errMsg = errMsg + bizEntity.getCoName() + bizEntity.getErrMsg() + ";"; + } + } + return errMsg; + } + //业务单正向校验 public String bizNoPiCheck(List orderDetailBizEntities, IoOrderEntity orderEntity) { @@ -862,7 +909,7 @@ public class IoCheckInoutService { ioOrderCheckResultResponse.setBBatchNo(bizEntity.getBatchNo()); ioOrderCheckResultResponse.setBProductDate(bizEntity.getProductDate()); ioOrderCheckResultResponse.setBExpireDate(bizEntity.getExpireDate()); - if (product.getProductsType() == 2){ + if (product.getProductsType() == 2) { ioOrderCheckResultResponse.setBzgg(product.getBzgg()); ioOrderCheckResultResponse.setPrepnSpec(product.getPrepnSpec()); ioOrderCheckResultResponse.setPrepnUnit(product.getPrepnUnit()); @@ -1409,4 +1456,12 @@ public class IoCheckInoutService { } } + public String checkBizCount(IoOrderDetailBizEntity bizEntity, IoOrderDetailCodeEntity codeEntity) { + if (bizEntity.getCount() > codeEntity.getReCount()) { + return null; + } + return bizEntity.getCoName() + "数量不匹配!"; + } + + } diff --git a/src/main/java/com/glxp/api/service/inout/IoGenInvService.java b/src/main/java/com/glxp/api/service/inout/IoGenInvService.java index cef5f3b07..5d2eb0433 100644 --- a/src/main/java/com/glxp/api/service/inout/IoGenInvService.java +++ b/src/main/java/com/glxp/api/service/inout/IoGenInvService.java @@ -58,7 +58,7 @@ public class IoGenInvService { public void genNorInv(String orderId) { IoOrderEntity orderEntity = orderService.findByBillNo(orderId); List orderDetailResultEntities = orderDetailResultService.findByOrderId(orderId); - List codeEnttities = codeService.findByOrderId(orderId); + //补齐单据信息 BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction(orderEntity.getAction()); @@ -91,9 +91,9 @@ public class IoGenInvService { } if (orderEntity.getMainAction().equals(ConstantType.TYPE_OUT)) { - invProductEntity.setOutCount(invProductEntity.getOutCount() + orderDetailResultEntity.getReCount()); + invProductEntity.setOutCount(invProductEntity.getOutCount() + orderDetailResultEntity.getCount()); } else if (orderEntity.getMainAction().equals(ConstantType.TYPE_PUT)) { - invProductEntity.setInCount(invProductEntity.getInCount() + orderDetailResultEntity.getReCount()); + invProductEntity.setInCount(invProductEntity.getInCount() + orderDetailResultEntity.getCount()); } invProductEntity.setReCount(invProductEntity.getInCount() - invProductEntity.getOutCount()); invProductEntity.setUpdateTime(new Date()); @@ -110,6 +110,7 @@ public class IoGenInvService { && bussinessTypeEntity.getMainAction().equals(ConstantType.TYPE_PUT) //入库 && bussinessTypeEntity.getDevInType().equals(1) ) { + List codeEnttities = codeService.findByOrderId(orderId); deviceChangeOrderService.generateDeviceInfo(orderEntity, codeEnttities); } 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 fd5dd1310..b4040020e 100644 --- a/src/main/java/com/glxp/api/util/udi/FilterUdiUtils.java +++ b/src/main/java/com/glxp/api/util/udi/FilterUdiUtils.java @@ -172,8 +172,16 @@ 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); + String prefix; + String serialNo; + if (data.startsWith("89")) { + prefix = data.substring(0, 8); + serialNo = data.substring(8, 16); + } else { + prefix = data.substring(0, 7); + serialNo = data.substring(7, 16); + } + udiEntity.setBatchNo(null); udiEntity.setExpireDate(null); udiEntity.setProduceDate(null); diff --git a/src/main/resources/mybatis/mapper/inv/invProductDao.xml b/src/main/resources/mybatis/mapper/inv/invProductDao.xml index 3dac816b1..d008f4586 100644 --- a/src/main/resources/mybatis/mapper/inv/invProductDao.xml +++ b/src/main/resources/mybatis/mapper/inv/invProductDao.xml @@ -9,25 +9,25 @@ ip.nameCode, bp.cpmctymc, bp.measname, - bp.bzgg, + COALESCE(bp.ggxh, bp.bzgg) as ggxh, ip.relIdFk, bp.ggxh, ip.batchNo, ip.productionDate, ip.expireDate, - bp.ylqxzcrbarmc, + COALESCE(bp.ylqxzcrbarmc, bp.manufactory) as ylqxzcrbarmc, bp.zczbhhzbapzbh, ip.inCount, ip.outCount, ip.reCount, ip.customerId, - basic_corp.name supName, + basic_corp.name supName, ip.supId, - auth_dept.name deptName, - auth_warehouse.name invName, + auth_dept.name deptName, + auth_warehouse.name invName, ip.deptCode, ip.invCode, - as.name spaceName, + as.name spaceName, bp.productsType, bp.levelUnit, bp.prepnUnit, @@ -54,12 +54,11 @@ bp.packUnit, ip.price from inv_product ip - inner join basic_udirel on ip.relIdFk = basic_udirel.id - inner join basic_products bp on basic_udirel.uuid = bp.uuid - left join basic_corp on ip.supId = basic_corp.erpId - left join auth_dept on auth_dept.code = ip.deptCode - left join auth_warehouse on auth_warehouse.code = ip.invCode - left join auth_space `as` on ip.invSpaceCode = `as`.code + INNER JOIN basic_products bp ON ip.relIdFk = (SELECT id FROM basic_udirel WHERE uuid = bp.uuid) + LEFT JOIN basic_corp ON ip.supId = basic_corp.erpId + LEFT JOIN auth_dept ON auth_dept.CODE = ip.deptCode + LEFT JOIN auth_warehouse ON auth_warehouse.CODE = ip.invCode + LEFT JOIN auth_space s ON ip.invSpaceCode = s.CODE AND bp.productsType = #{productsType} @@ -87,9 +86,9 @@ AND ( - bp.ylqxzcrbarmc like concat('%', #{ylqxzcrbarmc}, '%') - or bp.manufactory like concat('%', #{ylqxzcrbarmc}, '%') - ) + bp.ylqxzcrbarmc like concat('%', #{ylqxzcrbarmc}, '%') + or bp.manufactory like concat('%', #{ylqxzcrbarmc}, '%') + ) AND bp.zczbhhzbapzbh like concat('%', #{zczbhhzbapzbh}, '%') @@ -142,15 +141,15 @@ AND ( - bp.cpmctymc like concat('%', #{keyWords}, '%') - or ip.nameCode like concat('%', #{keyWords}, '%') - or bp.ggxh like concat('%', #{keyWords}, '%') - or bp.bzgg like concat('%', #{keyWords}, '%') - or bp.prepnSpec LIKE concat('%', #{keyWords}, '%') - or ip.batchNo like concat('%', #{keyWords}, '%') - or bp.zczbhhzbapzbh LIKE concat('%', #{keyWords}, '%') - or bp.manufactory LIKE concat('%', #{keyWords}, '%') - or bp.ylqxzcrbarywmc LIKE concat('%', #{keyWords}, '%')) + bp.cpmctymc like concat('%', #{keyWords}, '%') + or ip.nameCode like concat('%', #{keyWords}, '%') + or bp.ggxh like concat('%', #{keyWords}, '%') + or bp.bzgg like concat('%', #{keyWords}, '%') + or bp.prepnSpec LIKE concat('%', #{keyWords}, '%') + or ip.batchNo like concat('%', #{keyWords}, '%') + or bp.zczbhhzbapzbh LIKE concat('%', #{keyWords}, '%') + or bp.manufactory LIKE concat('%', #{keyWords}, '%') + or bp.ylqxzcrbarywmc LIKE concat('%', #{keyWords}, '%')) GROUP BY ip.relIdFk, ip.batchNo, ip.supId, ip.price @@ -175,10 +174,10 @@ sum(ip.outCount) outCount, sum(ip.reCount) reCount from inv_product ip - inner join basic_udirel bu on ip.relIdFk = bu.id - inner join basic_products bp on bu.uuid = bp.uuid - left join basic_corp bc on ip.supId = bc.erpId - left join auth_warehouse aw on aw.code = ip.invCode + inner join basic_udirel bu on ip.relIdFk = bu.id + inner join basic_products bp on bu.uuid = bp.uuid + left join basic_corp bc on ip.supId = bc.erpId + left join auth_warehouse aw on aw.code = ip.invCode bp.diType = 1 @@ -229,9 +228,9 @@ bp.manufactory, bp.zczbhhzbapzbh FROM inv_product_detail ip - LEFT JOIN basic_udirel bu ON bu.id = ip.relId - LEFT JOIN basic_products bp ON bu.uuid = bp.uuid - LEFT JOIN basic_corp ON ip.supId = basic_corp.erpId + LEFT JOIN basic_udirel bu ON bu.id = ip.relId + LEFT JOIN basic_products bp ON bu.uuid = bp.uuid + LEFT JOIN basic_corp ON ip.supId = basic_corp.erpId AND bp.nameCode like concat('%', #{nameCode}, '%') @@ -268,10 +267,10 @@ select ip.relIdFk, bp.cpmctymc, bp.ggxh, bp.ylqxzcrbarmc, bp.zczbhhzbapzbh from inv_product ip - left join inv_product_detail ipd on ip.relIdFk = ipd.relId and ip.invCode = ipd.invCode and - ifnull(ip.batchNo, 'empty') = ifnull(ipd.batchNo, 'empty') - left join basic_udirel bu on bu.id = ip.relIdFk - left join basic_products bp on bp.uuid = bu.uuid + left join inv_product_detail ipd on ip.relIdFk = ipd.relId and ip.invCode = ipd.invCode and + ifnull(ip.batchNo, 'empty') = ifnull(ipd.batchNo, 'empty') + left join basic_udirel bu on bu.id = ip.relIdFk + left join basic_products bp on bp.uuid = bu.uuid AND bp.cpmctymc like concat('%', #{cpmctymc}, '%') @@ -408,13 +407,13 @@ ip.deptCode, ip.invCode from inv_product ip - inner join basic_udirel on ip.relIdFk = basic_udirel.id - inner join basic_products bp on basic_udirel.uuid = bp.uuid - left join basic_corp on ip.supId = basic_corp.erpId - left join auth_dept on auth_dept.code = ip.deptCode - left join auth_warehouse on auth_warehouse.code = ip.invCode - left join inv_product_detail ipd on ip.invCode = ipd.invCode and ip.relIdFk = ipd.relId and - ifnull(ip.batchNo, 'empty') = ifnull(ipd.batchNo, 'empty') + inner join basic_udirel on ip.relIdFk = basic_udirel.id + inner join basic_products bp on basic_udirel.uuid = bp.uuid + left join basic_corp on ip.supId = basic_corp.erpId + left join auth_dept on auth_dept.code = ip.deptCode + left join auth_warehouse on auth_warehouse.code = ip.invCode + left join inv_product_detail ipd on ip.invCode = ipd.invCode and ip.relIdFk = ipd.relId and + ifnull(ip.batchNo, 'empty') = ifnull(ipd.batchNo, 'empty') bp.diType = 1 @@ -498,15 +497,15 @@ ip.price, ip.invCode from inv_product ip - inner join basic_udirel on ip.relIdFk = basic_udirel.id - inner join basic_products bp on basic_udirel.uuid = bp.uuid - left join basic_corp on ip.supId = basic_corp.erpId - left join auth_dept on auth_dept.code = ip.deptCode - left join auth_warehouse on auth_warehouse.code = ip.invCode - left join basic_product_category_rel on basic_product_category_rel.relId = basic_udirel.id - left join basic_product_category on basic_product_category_rel.code = basic_product_category.code - left join inv_product_detail ipd on ip.invCode = ipd.invCode and ip.relIdFk = ipd.relId and - ifnull(ip.batchNo, 'empty') = ifnull(ipd.batchNo, 'empty') + inner join basic_udirel on ip.relIdFk = basic_udirel.id + inner join basic_products bp on basic_udirel.uuid = bp.uuid + left join basic_corp on ip.supId = basic_corp.erpId + left join auth_dept on auth_dept.code = ip.deptCode + left join auth_warehouse on auth_warehouse.code = ip.invCode + left join basic_product_category_rel on basic_product_category_rel.relId = basic_udirel.id + left join basic_product_category on basic_product_category_rel.code = basic_product_category.code + left join inv_product_detail ipd on ip.invCode = ipd.invCode and ip.relIdFk = ipd.relId and + ifnull(ip.batchNo, 'empty') = ifnull(ipd.batchNo, 'empty') bp.diType = 1