From 882c84ea1bdd724b00f1281e906900756942ed15 Mon Sep 17 00:00:00 2001 From: xs Date: Wed, 23 Oct 2024 14:04:40 +0800 Subject: [PATCH 1/9] =?UTF-8?q?3.3.2=20WMS:=202&3=E6=A5=BC=E7=94=9F?= =?UTF-8?q?=E4=BA=A7=E6=B4=BE=E5=B7=A5=E6=8A=95=E6=96=99=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E6=8C=89=E7=85=A7bom=E6=8A=95=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wms/controller/WmsRawOutstockController.java | 4 ++-- .../service/impl/WmsStockTotalServiceImpl.java | 2 +- .../resources/mapper/wms/WmsStockTotalMapper.xml | 2 +- .../src/views/mes/productplan/editProductPlan.vue | 15 ++++++++++++++- hw-ui/src/views/wms/common/applyRawOutstock.vue | 12 ++++++++---- 5 files changed, 26 insertions(+), 9 deletions(-) diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsRawOutstockController.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsRawOutstockController.java index 7ad583fc..83987342 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsRawOutstockController.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsRawOutstockController.java @@ -160,7 +160,7 @@ public class WmsRawOutstockController extends BaseController /** * 根据工位查询查询仓库列表 */ - @RequiresPermissions("wms:rawoutstock:apply") +// @RequiresPermissions("wms:rawoutstock:apply") @GetMapping("/getWarehouses4Apply") public AjaxResult getWarehouses4Apply(WmsBaseWarehouse queryBaseWarehouse) { queryBaseWarehouse.setWarehouseInstockType(WmsConstants.WMS_WAREHOUSE_INSTOCK_TYPE_RAW); @@ -172,7 +172,7 @@ public class WmsRawOutstockController extends BaseController /** * 获取物料库存信息 */ - @RequiresPermissions("wms:rawoutstock:apply") +// @RequiresPermissions("wms:rawoutstock:apply") @GetMapping("/getStockTotal") public TableDataInfo getStockTotal(WmsStockTotal queryStockTotal) { startPage(); diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsStockTotalServiceImpl.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsStockTotalServiceImpl.java index 9dde3765..de012962 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsStockTotalServiceImpl.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsStockTotalServiceImpl.java @@ -159,7 +159,7 @@ public class WmsStockTotalServiceImpl implements IWmsStockTotalService { wmsStockTotal.setMaterialId(wmsStockTotal.getProductId()); wmsStockTotal.setAccessoriesFlag(null); } else { - if (wmsStockTotal.getAccessoriesFlag().equals(MesConstants.MES_MATERIAL_ACCESSORIES_FLAG_NO)) { + if (StringUtils.isEmpty(wmsStockTotal.getAccessoriesFlag()) || wmsStockTotal.getAccessoriesFlag().equals(MesConstants.MES_MATERIAL_ACCESSORIES_FLAG_NO)) { wmsStockTotal.setAncestors("0," + wmsStockTotal.getMaterialBomId()); wmsStockTotal.setAccessoriesFlag(null); } diff --git a/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsStockTotalMapper.xml b/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsStockTotalMapper.xml index e6fd72d6..4de6b75e 100644 --- a/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsStockTotalMapper.xml +++ b/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsStockTotalMapper.xml @@ -172,7 +172,7 @@ wst.total_amount, wst.frozen_amount, wst.occupy_amount,wst.safe_flag,wst.sale_order_id, mbmi.material_code,mbmi.material_name,mbmi.material_spec, (select sum(wro.outstock_amount) from wms_raw_outstock wro where wro.stock_total_id=wst.stock_total_id and - wro.plan_code=#{planCode} and wro.plan_detail_code=#{planDetailCode} and wro.audit_status!='2') outstock_amount + wro.plan_code=#{planCode} and wro.plan_detail_code=#{planDetailCode} and wro.audit_status!='2' and wro.execute_status!='2') outstock_amount from wms_stock_total wst left join mes_base_material_info mbmi on wst.material_id = mbmi.material_id diff --git a/hw-ui/src/views/mes/productplan/editProductPlan.vue b/hw-ui/src/views/mes/productplan/editProductPlan.vue index fdccd76c..f2b3e16a 100644 --- a/hw-ui/src/views/mes/productplan/editProductPlan.vue +++ b/hw-ui/src/views/mes/productplan/editProductPlan.vue @@ -425,6 +425,11 @@ export default { components: { 'apply-raw-outstock': applyRawOutstock, }, + provide() { + return { + closeRawOutstockDialog: this.closeRawOutstockDialog, + } + }, props: { value: [String, Object, Array, Number], // sop文件数量限制 @@ -1408,10 +1413,18 @@ export default { this.productPlanData.planId = row.planId; this.productPlanData.dispatchAmount = row.dispatchAmount; this.productPlanData.saleOrderId = this.form.saleOrderId; + this.productPlanData.materialBomId = this.form.materialBomId; } - } + }, + + closeRawOutstockDialog() { + this.applyRawOutstockOpen = false; + }, + }, + + mounted() { } } diff --git a/hw-ui/src/views/wms/common/applyRawOutstock.vue b/hw-ui/src/views/wms/common/applyRawOutstock.vue index b76edd99..4c23929e 100644 --- a/hw-ui/src/views/wms/common/applyRawOutstock.vue +++ b/hw-ui/src/views/wms/common/applyRawOutstock.vue @@ -98,6 +98,7 @@
申请投料 + 关闭
@@ -115,6 +116,7 @@ export default { } }, dicts: ['mes_safe_flag'], + inject: ['closeRawOutstockDialog'], data() { return { // 遮罩层 @@ -177,7 +179,8 @@ export default { planId: this.defineData.planId, planCode: this.defineData.planCode, dispatchAmount : this.defineData.dispatchAmount, - saleOrderId:this.defineData.saleOrderId + saleOrderId:this.defineData.saleOrderId, + materialBomId:this.defineData.materialBomId } } }, @@ -201,6 +204,7 @@ export default { this.queryParams.warehouseId = this.form.warehouseId; this.queryParams.saleOrderId = this.form.saleOrderId; this.queryParams.planCode = this.form.planCode; + this.queryParams.materialBomId = this.form.materialBomId; this.queryParams.planDetailCode = "0"; getStockTotal(this.queryParams).then(e => { this.total = e.total; @@ -276,13 +280,13 @@ export default { this.form.taskType = "1";//生产领料 this.form.planDetailCode = "0"; applyRawOutstock(this.form).then(e => { - this.dialogVisible = false this.$modal.msgSuccess("申请投料成功"); + this.closeParentDialog() }) }, - closeDialog(){ - + closeParentDialog() { + this.closeRawOutstockDialog() } } From e0078842491d8e34d13720611f1233eca4ef5917 Mon Sep 17 00:00:00 2001 From: xs Date: Thu, 24 Oct 2024 13:42:02 +0800 Subject: [PATCH 2/9] =?UTF-8?q?3.3.3=20JOB=20=E5=A2=9E=E5=8A=A0=E5=8D=95?= =?UTF-8?q?=E4=BD=8D=E4=BF=A1=E6=81=AF=E7=9A=84=E5=90=8C=E6=AD=A5=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=20=E9=87=91=E8=9D=B6=EF=BC=9A=20=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E9=94=80=E5=94=AE=E8=AE=A2=E5=8D=95=E3=80=81=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=92=8C=E9=A1=B9=E7=9B=AE=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=A0=B9=E6=8D=AE=E7=8A=B6=E6=80=81=E7=9A=84?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=20=E5=8E=9F=E6=9D=90=E6=96=99=E6=9D=A1?= =?UTF-8?q?=E7=A0=81=EF=BC=9A=20=E6=89=93=E5=8D=B0=E6=97=B6=E5=88=87?= =?UTF-8?q?=E6=8D=A2=E6=88=90=E6=9C=AC=E5=9C=B0=E6=9C=8D=E5=8A=A1=E6=89=93?= =?UTF-8?q?=E5=8D=B0=20=E6=88=90=E5=93=81=E6=9D=A1=E7=A0=81=EF=BC=9A=20?= =?UTF-8?q?=E6=89=93=E5=8D=B0=E6=97=B6=E6=88=90=E5=93=81=E6=9D=A1=E7=A0=81?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E6=9C=AC=E5=9C=B0=E6=9C=8D=E5=8A=A1=EF=BC=8C?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=A1=A5=E6=89=93=E5=8D=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hw/jindie/api/RemoteJindieService.java | 5 + .../factory/RemoteJindieFallbackFactory.java | 5 + .../printer/api/domain/vo/PrintContentVo.java | 7 + .../src/main/java/com/hw/job/task/RyTask.java | 8 + .../hw/mes/controller/MesApiController.java | 11 + .../MesBaseBarcodeInfoController.java | 2 +- .../impl/MesBaseBarcodeInfoServiceImpl.java | 439 ++++++++++++------ .../impl/MesPurchaseApplyServiceImpl.java | 12 +- .../mapper/mes/MesPurchaseApplyMapper.xml | 1 + hw-ui/src/api/board/barcode.js | 9 + .../views/board/barcode/workshopBarcode.vue | 31 +- hw-ui/src/views/mes/barcode/index.vue | 9 +- hw-ui/src/views/mes/purchaseApply/index.vue | 5 +- 13 files changed, 382 insertions(+), 162 deletions(-) diff --git a/hw-api/hw-api-jindie/src/main/java/com/hw/jindie/api/RemoteJindieService.java b/hw-api/hw-api-jindie/src/main/java/com/hw/jindie/api/RemoteJindieService.java index fb09b7f9..d6353dc1 100644 --- a/hw-api/hw-api-jindie/src/main/java/com/hw/jindie/api/RemoteJindieService.java +++ b/hw-api/hw-api-jindie/src/main/java/com/hw/jindie/api/RemoteJindieService.java @@ -20,6 +20,11 @@ import org.springframework.web.bind.annotation.RequestHeader; @FeignClient(contextId = "remoteJindieService", value = ServiceNameConstants.JINDIE_SERVICE, fallbackFactory = RemoteJindieFallbackFactory.class) public interface RemoteJindieService { + /** 同步单位信息*/ + @PostMapping("/jindie/syncUnitInfoFromErp") + R syncUnitInfoFromErp(@RequestBody ErpSyncInfoVo erpSyncInfoVo,@RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** 同步供应商*/ @PostMapping("/jindie/syncSupplierInfoFromErp") R syncSupplierInfoFromErp(@RequestBody ErpSyncInfoVo erpSyncInfoVo,@RequestHeader(SecurityConstants.FROM_SOURCE) String source); diff --git a/hw-api/hw-api-jindie/src/main/java/com/hw/jindie/api/factory/RemoteJindieFallbackFactory.java b/hw-api/hw-api-jindie/src/main/java/com/hw/jindie/api/factory/RemoteJindieFallbackFactory.java index 247317b9..527ac548 100644 --- a/hw-api/hw-api-jindie/src/main/java/com/hw/jindie/api/factory/RemoteJindieFallbackFactory.java +++ b/hw-api/hw-api-jindie/src/main/java/com/hw/jindie/api/factory/RemoteJindieFallbackFactory.java @@ -16,6 +16,11 @@ import org.springframework.web.bind.annotation.RequestBody; public class RemoteJindieFallbackFactory implements FallbackFactory { public RemoteJindieService create(Throwable throwable) { return new RemoteJindieService() { + @Override + public R syncUnitInfoFromErp(ErpSyncInfoVo erpSyncInfoVo, String source) { + return R.fail("同步单位信息失败:" + throwable.getMessage()); + } + @Override public R syncSupplierInfoFromErp(ErpSyncInfoVo erpSyncInfoVo,String source) { return R.fail("同步供应商信息失败:" + throwable.getMessage()); diff --git a/hw-api/hw-api-printer/src/main/java/com/hw/printer/api/domain/vo/PrintContentVo.java b/hw-api/hw-api-printer/src/main/java/com/hw/printer/api/domain/vo/PrintContentVo.java index 73fef06a..60cac22f 100644 --- a/hw-api/hw-api-printer/src/main/java/com/hw/printer/api/domain/vo/PrintContentVo.java +++ b/hw-api/hw-api-printer/src/main/java/com/hw/printer/api/domain/vo/PrintContentVo.java @@ -21,9 +21,16 @@ public class PrintContentVo { public static final String RAW_MATERIAL_LABEL_KEY_QC_RESULT_YES = "qcResultYes"; public static final String RAW_MATERIAL_LABEL_KEY_QC_RESULT_NO = "qcResultNo"; public static final String RAW_MATERIAL_LABEL_KEY_QRCODE = "qrcode"; + public static final String RAW_MATERIAL_LABEL_KEY_BARCODE = "barcode"; public static final String PRODUCT_PLAN_CODE = "productPlanCode"; + + public static final String PRINT_TEMPLATE_RAW = "raw"; + public static final String PRINT_TEMPLATE_PRODUCT = "product"; + public static final String PRINT_TEMPLATE_BIND = "bind"; + + private String key; private String value; diff --git a/hw-modules/hw-job/src/main/java/com/hw/job/task/RyTask.java b/hw-modules/hw-job/src/main/java/com/hw/job/task/RyTask.java index 4555f123..d8ed0131 100644 --- a/hw-modules/hw-job/src/main/java/com/hw/job/task/RyTask.java +++ b/hw-modules/hw-job/src/main/java/com/hw/job/task/RyTask.java @@ -79,6 +79,14 @@ public class RyTask System.out.println("++创建保养工单++getDmsMaintInstance"); remoteDmsService.getDmsBillsMaintInstance(SecurityConstants.INNER,planMaintCode); } + + public void syncUnitInfoFromErp(String maxErpModifyDate){ + ErpSyncInfoVo erpSyncInfoVo = new ErpSyncInfoVo(); + erpSyncInfoVo.setMaxErpModifyDate(maxErpModifyDate); + System.out.println("++同步ERP中物料供应商++ErpSupplierInfo"); + remoteJindieService.syncUnitInfoFromErp(erpSyncInfoVo,SecurityConstants.INNER); + } + public void syncSupplierInfoFromErp(String maxErpModifyDate){ ErpSyncInfoVo erpSyncInfoVo = new ErpSyncInfoVo(); erpSyncInfoVo.setMaxErpModifyDate(maxErpModifyDate); diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesApiController.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesApiController.java index 544422d5..515655b8 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesApiController.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesApiController.java @@ -314,6 +314,17 @@ public class MesApiController extends BaseController { } + /** + * 补打印原材料条码 + * @param barcodeIds + * @return + */ + @GetMapping(value = "/reprintBarcodes/{barcodeIds}") + public AjaxResult reprintBarcodes(@PathVariable Long[] barcodeIds) + { + return success(mesBaseBarcodeInfoService.printBarcodes(barcodeIds,MesConstants.MES_BARCODE_TYPE_PRODUCT,true,1)); + } + /** * 校验四楼成品出库 * diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesBaseBarcodeInfoController.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesBaseBarcodeInfoController.java index ec9f768c..1e43a364 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesBaseBarcodeInfoController.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesBaseBarcodeInfoController.java @@ -212,7 +212,7 @@ public class MesBaseBarcodeInfoController extends BaseController /** - * 打印成品条码 + * 打印成品条码(暂时不用了) * @param barcodeIds * @return */ diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesBaseBarcodeInfoServiceImpl.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesBaseBarcodeInfoServiceImpl.java index 854603a2..f8c5a12c 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesBaseBarcodeInfoServiceImpl.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesBaseBarcodeInfoServiceImpl.java @@ -1,5 +1,7 @@ package com.hw.mes.service.impl; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.hw.common.core.constant.*; import com.hw.common.core.domain.R; import com.hw.common.core.exception.ServiceException; @@ -24,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import org.springframework.data.redis.core.StringRedisTemplate; import javax.annotation.Resource; import java.math.BigDecimal; @@ -42,8 +45,8 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService @Autowired private MesBaseBarcodeInfoMapper mesBaseBarcodeInfoMapper; - @Resource - private RemotePrinterService remotePrinterService; + @Autowired + private StringRedisTemplate redisTemplate; @Autowired private MesOrderBindMapper mesOrderBindMapper; @@ -623,184 +626,130 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService * @return */ @Override - @Transactional + @Transactional(rollbackFor = Exception.class) public int printBarcodes(Long[] barcodeIds, String printType, boolean reprintFlag, Integer printNumber) { - //获取条码List -// List> printContents = new ArrayList<>(); -// List toUpdatedBaseBarcodeInfos = new ArrayList<>(); + JSONArray pintBarcodeJsonArr = new JSONArray(); + JSONObject printContentJson = new JSONObject(); + String barcodeType = ""; for (Long barcodeId : barcodeIds) { + MesBaseBarcodeInfo mesBaseBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeId(barcodeId); + if (StringUtils.isEmpty(barcodeType)) { + barcodeType = mesBaseBarcodeInfo.getBarcodeType(); + } + this.updateBaseBarcodePrintFlag(mesBaseBarcodeInfo, reprintFlag); if (printNumber != null && printNumber > 1) { for (int i = 0; i < printNumber; i++) { - printBarcodesByBarcodeId(barcodeId, printType, reprintFlag); + JSONObject printBarcodeJson = getBarcodeJsonByBarcode(mesBaseBarcodeInfo, printType); + pintBarcodeJsonArr.add(printBarcodeJson); } } else { - printBarcodesByBarcodeId(barcodeId, printType, reprintFlag); + JSONObject printBarcodeJson = getBarcodeJsonByBarcode(mesBaseBarcodeInfo, printType); + pintBarcodeJsonArr.add(printBarcodeJson); } - } -// for (MesBaseBarcodeInfo toUpdateMesBaseBarcodeInfo : toUpdatedBaseBarcodeInfos) { -// toUpdateMesBaseBarcodeInfo.setPrintTime(DateUtils.getNowDate()); -// toUpdateMesBaseBarcodeInfo.setPrintPerson(SecurityUtils.getUsername()); -// toUpdateMesBaseBarcodeInfo.setPrintFlag(MesConstants.MES_BARCODE_PRINT_FLAG_YES); -// toUpdateMesBaseBarcodeInfo.setPrintNumber(1L); -// toUpdateMesBaseBarcodeInfo.setAcceptedDate(DateUtils.getNowDate()); -// this.updateMesBaseBarcodeInfo(toUpdateMesBaseBarcodeInfo); -// } -// -// PrinterVo printerVo = new PrinterVo(); -// printerVo.setPrintType(printType); -// printerVo.setPrintContents(printContents); -// -// //调用的打印接口 -// R printResultR = remotePrinterService.printBarcodes(printerVo, SecurityConstants.INNER); -// if (printResultR.getCode() != Constants.SUCCESS) {//抛出异常,回滚事务 -// throw new RuntimeException(printResultR.getMsg()); -// } + String printTemplate = ""; + if (barcodeType.equals(MesConstants.MES_BARCODE_TYPE_RAW)) { + printTemplate = PrintContentVo.PRINT_TEMPLATE_RAW; + } else if (barcodeType.equals(MesConstants.MES_BARCODE_TYPE_PRODUCT)) { + printTemplate = PrintContentVo.PRINT_TEMPLATE_PRODUCT; + } else if (barcodeType.equals(MesConstants.MES_BARCODE_TYPE_BIND)) { + printTemplate = PrintContentVo.PRINT_TEMPLATE_BIND; + } + printContentJson.put("template", printTemplate); + printContentJson.put("printContent", pintBarcodeJsonArr.toString()); + System.out.println(printContentJson.toString()); + + + try { + redisTemplate.opsForList().rightPush("print_10.10.3.119", printContentJson.toString()); +// redisTemplate.convertAndSend("print_10.10.3.119", printContentJson.toString()); + } catch (Exception e) { + throw new ServiceException("打印失败:" + e.getMessage()); + } return 1; } - @Transactional(propagation = Propagation.REQUIRES_NEW) - public void printBarcodesByBarcodeId(Long barcodeId, String printType, boolean reprintFlag) { - MesBaseBarcodeInfo mesBaseBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoJoinByBarcodeId(barcodeId); - if (!reprintFlag) { + public void updateBaseBarcodePrintFlag(MesBaseBarcodeInfo mesBaseBarcodeInfo, boolean reprintFlag) { + String barcodeType = mesBaseBarcodeInfo.getBarcodeType(); + if (!reprintFlag && !barcodeType.equals(MesConstants.MES_BARCODE_TYPE_BIND)) { String printFlag = mesBaseBarcodeInfo.getPrintFlag(); if (printFlag.equals(MesConstants.MES_BARCODE_PRINT_FLAG_YES)) { throw new ServiceException("此物料条码[" + mesBaseBarcodeInfo.getBarcodeInfo() + "]已经打印过,不能重复打印"); } } - String materialName = mesBaseBarcodeInfo.getMaterialName(); - List printContentVos = new ArrayList<>(); - - PrintContentVo printMaterialCode = new PrintContentVo(); - printMaterialCode.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_MATERIAL_CODE); - printMaterialCode.setValue(mesBaseBarcodeInfo.getMaterialCode()); - printMaterialCode.setType(PrintContentVo.TYPE_TEXT); - - PrintContentVo printPreMaterial = new PrintContentVo(); -// if (mesBaseBarcodeInfo.getBindFlag() == null) { -// -// } - - PrintContentVo printSaleOrderCode = new PrintContentVo(); - printSaleOrderCode.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_SALE_ORDER_CODE); - printSaleOrderCode.setValue(mesBaseBarcodeInfo.getSaleorderCode()); - printSaleOrderCode.setType(PrintContentVo.TYPE_TEXT); - - - PrintContentVo printBarCode = new PrintContentVo(); - printBarCode.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_QRCODE); - printBarCode.setValue(mesBaseBarcodeInfo.getBarcodeInfo()); - printBarCode.setType(PrintContentVo.TYPE_QRCODE); - - if (printType.equals(PrinterVo.PRINT_TYPE_RAW_LABEL)) { - PrintContentVo printMaterialName = new PrintContentVo(); - printMaterialName.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_MATERIAL_NAME); - materialName = materialName.length() <= 10 ? "\n" + materialName : materialName; - printMaterialName.setValue(materialName.replaceAll("[\\x00-\\x1F\\x7F-\\x9F]", "")); - printMaterialName.setType(PrintContentVo.TYPE_TEXT); - - PrintContentVo printBatchCode = new PrintContentVo(); - printBatchCode.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_BATCH_CODE); - printBatchCode.setValue(mesBaseBarcodeInfo.getBatchCode()); - printBatchCode.setType(PrintContentVo.TYPE_TEXT); - - PrintContentVo printPoNo = new PrintContentVo(); - printPoNo.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_PO_NO); - printPoNo.setValue(mesBaseBarcodeInfo.getPoNo()); - printPoNo.setType(PrintContentVo.TYPE_TEXT); - - //常备物料为安全库存 - String printPreMaterialKey = mesBaseBarcodeInfo.getAlwaysFlag() != null && mesBaseBarcodeInfo.getAlwaysFlag().equals(MesConstants.MES_MATERIAL_ALWAYS_FLAG_YES) - ? PrintContentVo.RAW_MATERIAL_LABEL_KEY_PRE_MATERIAL_YES : PrintContentVo.RAW_MATERIAL_LABEL_KEY_PRE_MATERIAL_NO; - printPreMaterial.setKey(printPreMaterialKey); - printPreMaterial.setType(PrintContentVo.TYPE_CHECKBOX); - - PrintContentVo printMaterialSpec = new PrintContentVo(); - printMaterialSpec.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_MATERIAL_SPEC); - if (StringUtils.isNotEmpty(mesBaseBarcodeInfo.getBarcodeSpec())) { - printMaterialSpec.setValue(mesBaseBarcodeInfo.getBarcodeSpec().replaceAll("[\\x00-\\x1F\\x7F-\\x9F]", "")); - } - printMaterialSpec.setType(PrintContentVo.TYPE_TEXT); - - PrintContentVo printQty = new PrintContentVo(); - printQty.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_QTY); - DecimalFormat df = new DecimalFormat("#.##"); - String formattedNumber = df.format(mesBaseBarcodeInfo.getAmount() == null ? BigDecimal.ZERO : mesBaseBarcodeInfo.getAmount()); - printQty.setValue(formattedNumber); - printQty.setType(PrintContentVo.TYPE_TEXT); - - printContentVos.add(printMaterialName); - printContentVos.add(printBatchCode); - printContentVos.add(printPoNo); - printContentVos.add(printMaterialSpec); - printContentVos.add(printQty); - - } else if (printType.equals(PrinterVo.PRINT_TYPE_PRODUCT_LABEL)) { - PrintContentVo printMaterialName = new PrintContentVo(); - materialName = materialName.length() <= 8 ? "\n" + materialName : materialName; - printMaterialName.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_MATERIAL_NAME); - printMaterialName.setValue(materialName); - printMaterialName.setType(PrintContentVo.TYPE_TEXT); - - PrintContentVo printQty = new PrintContentVo(); - printQty.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_QTY); - printQty.setValue("1"); - printQty.setType(PrintContentVo.TYPE_TEXT); - - PrintContentVo printPlanCode = new PrintContentVo(); - printPlanCode.setKey(PrintContentVo.PRODUCT_PLAN_CODE); - printPlanCode.setValue(mesBaseBarcodeInfo.getPlanCode()); - printPlanCode.setType(PrintContentVo.TYPE_TEXT); - printContentVos.add(printMaterialName); - printContentVos.add(printQty); - printContentVos.add(printPlanCode); - } - - printContentVos.add(printMaterialCode); - printContentVos.add(printPreMaterial); - printContentVos.add(printSaleOrderCode); - printContentVos.add(printBarCode); - - String checkStatus = mesBaseBarcodeInfo.getCheckStatus() == null ? "" : mesBaseBarcodeInfo.getCheckStatus(); - if (checkStatus.equals(QmsConstants.QMS_CHECK_RESULT_CHECK_STATUS_PASS)) { - PrintContentVo printQcResult = new PrintContentVo(); - printQcResult.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_QC_RESULT_YES); - printQcResult.setType(PrintContentVo.TYPE_CHECKBOX); - printContentVos.add(printQcResult); - } else if (checkStatus.equals(QmsConstants.QMS_CHECK_RESULT_CHECK_STATUS_FAIL)) { - PrintContentVo printQcResult = new PrintContentVo(); - printQcResult.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_QC_RESULT_NO); - printQcResult.setType(PrintContentVo.TYPE_CHECKBOX); - printContentVos.add(printQcResult); - } - -// printContents.add(printContentVos); -// toUpdatedBaseBarcodeInfos.add(mesBaseBarcodeInfo); + Date currentDate = new Date(); + mesBaseBarcodeInfo.setUpdateTime(currentDate); + mesBaseBarcodeInfo.setUpdateBy(SecurityUtils.getUsername()); mesBaseBarcodeInfo.setPrintTime(DateUtils.getNowDate()); mesBaseBarcodeInfo.setPrintPerson(SecurityUtils.getUsername()); mesBaseBarcodeInfo.setPrintFlag(MesConstants.MES_BARCODE_PRINT_FLAG_YES); mesBaseBarcodeInfo.setPrintNumber(mesBaseBarcodeInfo.getPrintNumber() == null ? 1L : mesBaseBarcodeInfo.getPrintNumber() + 1); - mesBaseBarcodeInfo.setAcceptedDate(DateUtils.getNowDate()); - this.updateMesBaseBarcodeInfo(mesBaseBarcodeInfo); + mesBaseBarcodeInfo.setAcceptedDate(currentDate); + mesBaseBarcodeInfoMapper.updateMesBaseBarcodeInfo(mesBaseBarcodeInfo); + + } - PrinterVo printerVo = new PrinterVo(); - printerVo.setPrintType(printType); - printerVo.setPrintContentVos(printContentVos); + // @Transactional(propagation = Propagation.REQUIRES_NEW) + public JSONObject getBarcodeJsonByBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo, String printType) { + String materialName = mesBaseBarcodeInfo.getMaterialName(); + JSONObject printInfoObject = new JSONObject(); + + printInfoObject.put(PrintContentVo.RAW_MATERIAL_LABEL_KEY_MATERIAL_CODE, mesBaseBarcodeInfo.getMaterialCode()); + printInfoObject.put(PrintContentVo.RAW_MATERIAL_LABEL_KEY_SALE_ORDER_CODE, mesBaseBarcodeInfo.getSaleorderCode()); + printInfoObject.put(PrintContentVo.RAW_MATERIAL_LABEL_KEY_QRCODE, mesBaseBarcodeInfo.getBarcodeInfo()); + + + if (printType.equals(PrinterVo.PRINT_TYPE_RAW_LABEL)) { +// materialName = materialName.length() <= 10 ? "\n" + materialName : materialName; +// printMaterialName.setValue(materialName.replaceAll("[\\x00-\\x1F\\x7F-\\x9F]", "")); +// printMaterialName.setType(PrintContentVo.TYPE_TEXT); + + printInfoObject.put(PrintContentVo.RAW_MATERIAL_LABEL_KEY_MATERIAL_NAME, materialName); + + printInfoObject.put(PrintContentVo.RAW_MATERIAL_LABEL_KEY_BARCODE, mesBaseBarcodeInfo.getBarcodeInfo()); + printInfoObject.put(PrintContentVo.RAW_MATERIAL_LABEL_KEY_BATCH_CODE, mesBaseBarcodeInfo.getBatchCode()); + printInfoObject.put(PrintContentVo.RAW_MATERIAL_LABEL_KEY_PO_NO, mesBaseBarcodeInfo.getPoNo()); + + + //常备物料为安全库存 +// String printPreMaterialKey = mesBaseBarcodeInfo.getAlwaysFlag() != null && mesBaseBarcodeInfo.getAlwaysFlag().equals(MesConstants.MES_MATERIAL_ALWAYS_FLAG_YES) +// ? PrintContentVo.RAW_MATERIAL_LABEL_KEY_PRE_MATERIAL_YES : PrintContentVo.RAW_MATERIAL_LABEL_KEY_PRE_MATERIAL_NO; +// printPreMaterial.setKey(printPreMaterialKey); +// printPreMaterial.setType(PrintContentVo.TYPE_CHECKBOX); + + + printInfoObject.put(PrintContentVo.RAW_MATERIAL_LABEL_KEY_MATERIAL_SPEC, mesBaseBarcodeInfo.getBarcodeSpec() == null ? "" + : mesBaseBarcodeInfo.getBarcodeSpec().replaceAll("[\\x00-\\x1F\\x7F-\\x9F]", "")); + +// PrintContentVo printQty = new PrintContentVo(); +// printQty.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_QTY); +// DecimalFormat df = new DecimalFormat("#.##"); +// String formattedNumber = df.format(mesBaseBarcodeInfo.getAmount() == null ? BigDecimal.ZERO : mesBaseBarcodeInfo.getAmount()); +// printQty.setValue(formattedNumber); +// printQty.setType(PrintContentVo.TYPE_TEXT); + + + } else if (printType.equals(PrinterVo.PRINT_TYPE_PRODUCT_LABEL)) { + printInfoObject.put(PrintContentVo.RAW_MATERIAL_LABEL_KEY_MATERIAL_NAME, materialName); + printInfoObject.put(PrintContentVo.RAW_MATERIAL_LABEL_KEY_MATERIAL_SPEC, mesBaseBarcodeInfo.getBarcodeSpec() == null ? "" + : mesBaseBarcodeInfo.getBarcodeSpec().replaceAll("[\\x00-\\x1F\\x7F-\\x9F]", "")); + printInfoObject.put(PrintContentVo.RAW_MATERIAL_LABEL_KEY_BARCODE, mesBaseBarcodeInfo.getBarcodeInfo()); + printInfoObject.put(PrintContentVo.PRODUCT_PLAN_CODE, mesBaseBarcodeInfo.getPlanCode()); + printInfoObject.put(PrintContentVo.RAW_MATERIAL_LABEL_KEY_QTY, "1"); - //调用的打印接口 - R printResultR = remotePrinterService.printBarcodes(printerVo, SecurityConstants.INNER); - if (printResultR.getCode() != Constants.SUCCESS) { - throw new RuntimeException(printResultR.getMsg()); } + + return printInfoObject; + } @@ -1667,7 +1616,7 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService userName, currentDate); //新增的绑定信息 - StringBuilder errorMsgBuilder = this.handleInsertSaleOrderRelates(mesSaleOrderRelateList,mesBaseBarcodeInfo, virtualMaterialBom, userName, currentDate); + StringBuilder errorMsgBuilder = this.handleInsertSaleOrderRelates(mesSaleOrderRelateList, mesBaseBarcodeInfo, virtualMaterialBom, userName, currentDate); if (errorMsgBuilder.length() > 0) { @@ -1727,7 +1676,7 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService } - public StringBuilder handleInsertSaleOrderRelates(List toInsertedSaleOrderRelateList,MesBaseBarcodeInfo baseBarcodeInfo, + public StringBuilder handleInsertSaleOrderRelates(List toInsertedSaleOrderRelateList, MesBaseBarcodeInfo baseBarcodeInfo, MesMaterialBom virtualMaterialBom, String userName, Date currentDate) { StringBuilder errorMsgBuilder = new StringBuilder(); List toUpdatedMaterialBoms = new ArrayList<>(); @@ -2066,4 +2015,194 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService // return 1; // } + +// /** +// * 打印物料条码 +// * +// * @param barcodeIds +// * @param printType 打印类型(1原材料 3成品) +// * @param reprintFlag 重新打印标识(1重新打印) +// * @param printNumber 打印数量 +// * @return +// */ +// @Override +// @Transactional +// public int printBarcodes(Long[] barcodeIds, String printType, boolean reprintFlag, Integer printNumber) { +// //获取条码List +//// List> printContents = new ArrayList<>(); +//// List toUpdatedBaseBarcodeInfos = new ArrayList<>(); +// +// for (Long barcodeId : barcodeIds) { +// if (printNumber != null && printNumber > 1) { +// for (int i = 0; i < printNumber; i++) { +// printBarcodesByBarcodeId(barcodeId, printType, reprintFlag); +// } +// } else { +// printBarcodesByBarcodeId(barcodeId, printType, reprintFlag); +// } +// +// } +// +//// for (MesBaseBarcodeInfo toUpdateMesBaseBarcodeInfo : toUpdatedBaseBarcodeInfos) { +//// toUpdateMesBaseBarcodeInfo.setPrintTime(DateUtils.getNowDate()); +//// toUpdateMesBaseBarcodeInfo.setPrintPerson(SecurityUtils.getUsername()); +//// toUpdateMesBaseBarcodeInfo.setPrintFlag(MesConstants.MES_BARCODE_PRINT_FLAG_YES); +//// toUpdateMesBaseBarcodeInfo.setPrintNumber(1L); +//// toUpdateMesBaseBarcodeInfo.setAcceptedDate(DateUtils.getNowDate()); +//// this.updateMesBaseBarcodeInfo(toUpdateMesBaseBarcodeInfo); +//// } +//// +//// PrinterVo printerVo = new PrinterVo(); +//// printerVo.setPrintType(printType); +//// printerVo.setPrintContents(printContents); +//// +//// //调用的打印接口 +//// R printResultR = remotePrinterService.printBarcodes(printerVo, SecurityConstants.INNER); +//// if (printResultR.getCode() != Constants.SUCCESS) {//抛出异常,回滚事务 +//// throw new RuntimeException(printResultR.getMsg()); +//// } +// +// return 1; +// +// } + + +// @Transactional(propagation = Propagation.REQUIRES_NEW) +// public void printBarcodesByBarcodeId(Long barcodeId, String printType, boolean reprintFlag) { +// MesBaseBarcodeInfo mesBaseBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoJoinByBarcodeId(barcodeId); +// if (!reprintFlag) { +// String printFlag = mesBaseBarcodeInfo.getPrintFlag(); +// if (printFlag.equals(MesConstants.MES_BARCODE_PRINT_FLAG_YES)) { +// throw new ServiceException("此物料条码[" + mesBaseBarcodeInfo.getBarcodeInfo() + "]已经打印过,不能重复打印"); +// } +// } +// +// String materialName = mesBaseBarcodeInfo.getMaterialName(); +// List printContentVos = new ArrayList<>(); +// +// PrintContentVo printMaterialCode = new PrintContentVo(); +// printMaterialCode.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_MATERIAL_CODE); +// printMaterialCode.setValue(mesBaseBarcodeInfo.getMaterialCode()); +// printMaterialCode.setType(PrintContentVo.TYPE_TEXT); +// +// PrintContentVo printPreMaterial = new PrintContentVo(); +//// if (mesBaseBarcodeInfo.getBindFlag() == null) { +//// +//// } +// +// PrintContentVo printSaleOrderCode = new PrintContentVo(); +// printSaleOrderCode.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_SALE_ORDER_CODE); +// printSaleOrderCode.setValue(mesBaseBarcodeInfo.getSaleorderCode()); +// printSaleOrderCode.setType(PrintContentVo.TYPE_TEXT); +// +// +// PrintContentVo printBarCode = new PrintContentVo(); +// printBarCode.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_QRCODE); +// printBarCode.setValue(mesBaseBarcodeInfo.getBarcodeInfo()); +// printBarCode.setType(PrintContentVo.TYPE_QRCODE); +// +// if (printType.equals(PrinterVo.PRINT_TYPE_RAW_LABEL)) { +// PrintContentVo printMaterialName = new PrintContentVo(); +// printMaterialName.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_MATERIAL_NAME); +// materialName = materialName.length() <= 10 ? "\n" + materialName : materialName; +// printMaterialName.setValue(materialName.replaceAll("[\\x00-\\x1F\\x7F-\\x9F]", "")); +// printMaterialName.setType(PrintContentVo.TYPE_TEXT); +// +// PrintContentVo printBatchCode = new PrintContentVo(); +// printBatchCode.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_BATCH_CODE); +// printBatchCode.setValue(mesBaseBarcodeInfo.getBatchCode()); +// printBatchCode.setType(PrintContentVo.TYPE_TEXT); +// +// PrintContentVo printPoNo = new PrintContentVo(); +// printPoNo.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_PO_NO); +// printPoNo.setValue(mesBaseBarcodeInfo.getPoNo()); +// printPoNo.setType(PrintContentVo.TYPE_TEXT); +// +// //常备物料为安全库存 +// String printPreMaterialKey = mesBaseBarcodeInfo.getAlwaysFlag() != null && mesBaseBarcodeInfo.getAlwaysFlag().equals(MesConstants.MES_MATERIAL_ALWAYS_FLAG_YES) +// ? PrintContentVo.RAW_MATERIAL_LABEL_KEY_PRE_MATERIAL_YES : PrintContentVo.RAW_MATERIAL_LABEL_KEY_PRE_MATERIAL_NO; +// printPreMaterial.setKey(printPreMaterialKey); +// printPreMaterial.setType(PrintContentVo.TYPE_CHECKBOX); +// +// PrintContentVo printMaterialSpec = new PrintContentVo(); +// printMaterialSpec.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_MATERIAL_SPEC); +// if (StringUtils.isNotEmpty(mesBaseBarcodeInfo.getBarcodeSpec())) { +// printMaterialSpec.setValue(mesBaseBarcodeInfo.getBarcodeSpec().replaceAll("[\\x00-\\x1F\\x7F-\\x9F]", "")); +// } +// printMaterialSpec.setType(PrintContentVo.TYPE_TEXT); +// +// PrintContentVo printQty = new PrintContentVo(); +// printQty.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_QTY); +// DecimalFormat df = new DecimalFormat("#.##"); +// String formattedNumber = df.format(mesBaseBarcodeInfo.getAmount() == null ? BigDecimal.ZERO : mesBaseBarcodeInfo.getAmount()); +// printQty.setValue(formattedNumber); +// printQty.setType(PrintContentVo.TYPE_TEXT); +// +// printContentVos.add(printMaterialName); +// printContentVos.add(printBatchCode); +// printContentVos.add(printPoNo); +// printContentVos.add(printMaterialSpec); +// printContentVos.add(printQty); +// +// } else if (printType.equals(PrinterVo.PRINT_TYPE_PRODUCT_LABEL)) { +// PrintContentVo printMaterialName = new PrintContentVo(); +// materialName = materialName.length() <= 8 ? "\n" + materialName : materialName; +// printMaterialName.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_MATERIAL_NAME); +// printMaterialName.setValue(materialName); +// printMaterialName.setType(PrintContentVo.TYPE_TEXT); +// +// PrintContentVo printQty = new PrintContentVo(); +// printQty.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_QTY); +// printQty.setValue("1"); +// printQty.setType(PrintContentVo.TYPE_TEXT); +// +// PrintContentVo printPlanCode = new PrintContentVo(); +// printPlanCode.setKey(PrintContentVo.PRODUCT_PLAN_CODE); +// printPlanCode.setValue(mesBaseBarcodeInfo.getPlanCode()); +// printPlanCode.setType(PrintContentVo.TYPE_TEXT); +// printContentVos.add(printMaterialName); +// printContentVos.add(printQty); +// printContentVos.add(printPlanCode); +// } +// +// printContentVos.add(printMaterialCode); +// printContentVos.add(printPreMaterial); +// printContentVos.add(printSaleOrderCode); +// printContentVos.add(printBarCode); +// +// String checkStatus = mesBaseBarcodeInfo.getCheckStatus() == null ? "" : mesBaseBarcodeInfo.getCheckStatus(); +// if (checkStatus.equals(QmsConstants.QMS_CHECK_RESULT_CHECK_STATUS_PASS)) { +// PrintContentVo printQcResult = new PrintContentVo(); +// printQcResult.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_QC_RESULT_YES); +// printQcResult.setType(PrintContentVo.TYPE_CHECKBOX); +// printContentVos.add(printQcResult); +// } else if (checkStatus.equals(QmsConstants.QMS_CHECK_RESULT_CHECK_STATUS_FAIL)) { +// PrintContentVo printQcResult = new PrintContentVo(); +// printQcResult.setKey(PrintContentVo.RAW_MATERIAL_LABEL_KEY_QC_RESULT_NO); +// printQcResult.setType(PrintContentVo.TYPE_CHECKBOX); +// printContentVos.add(printQcResult); +// } +// +//// printContents.add(printContentVos); +//// toUpdatedBaseBarcodeInfos.add(mesBaseBarcodeInfo); +// +// mesBaseBarcodeInfo.setPrintTime(DateUtils.getNowDate()); +// mesBaseBarcodeInfo.setPrintPerson(SecurityUtils.getUsername()); +// mesBaseBarcodeInfo.setPrintFlag(MesConstants.MES_BARCODE_PRINT_FLAG_YES); +// mesBaseBarcodeInfo.setPrintNumber(mesBaseBarcodeInfo.getPrintNumber() == null ? 1L : mesBaseBarcodeInfo.getPrintNumber() + 1); +// mesBaseBarcodeInfo.setAcceptedDate(DateUtils.getNowDate()); +// this.updateMesBaseBarcodeInfo(mesBaseBarcodeInfo); +// +// +// PrinterVo printerVo = new PrinterVo(); +// printerVo.setPrintType(printType); +// printerVo.setPrintContentVos(printContentVos); +// +// //调用的打印接口 +// R printResultR = remotePrinterService.printBarcodes(printerVo, SecurityConstants.INNER); +// if (printResultR.getCode() != Constants.SUCCESS) { +// throw new RuntimeException(printResultR.getMsg()); +// } +// +// } } diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesPurchaseApplyServiceImpl.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesPurchaseApplyServiceImpl.java index f8a24b17..3e1f90ea 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesPurchaseApplyServiceImpl.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesPurchaseApplyServiceImpl.java @@ -190,7 +190,7 @@ public class MesPurchaseApplyServiceImpl implements IMesPurchaseApplyService { String materialName = purchaseRequisitionTemplate.getMaterialName(); String productModel = purchaseRequisitionTemplate.getProductModel(); //产品规格型号把excel中的除.的符号都去掉(包括空格换行) - productModel = productModel.replaceAll("[^\\w.]", ""); + productModel = productModel.replaceAll("[^\\u4e00-\\u9fa5a-zA-Z0-9\\.]", ""); MesBaseMaterialInfo materialInfo = new MesBaseMaterialInfo(); materialInfo.setMaterialName(materialName); List materialInfoList = mesBaseMaterialInfoMapper.selectMesBaseMaterialInfoList(materialInfo); @@ -199,7 +199,7 @@ public class MesPurchaseApplyServiceImpl implements IMesPurchaseApplyService { MesBaseMaterialInfo findMaterialInfo = new MesBaseMaterialInfo(); for (MesBaseMaterialInfo baseMaterialInfo : materialInfoList) { String materialSpec = baseMaterialInfo.getMaterialSpec(); - materialSpec = materialSpec.replaceAll("[^\\w.]", ""); + materialSpec = materialSpec.replaceAll("[^\\u4e00-\\u9fa5a-zA-Z0-9\\.]", ""); if (materialSpec.equals(productModel)) { successFlag++; findMaterialInfo = baseMaterialInfo; @@ -208,7 +208,10 @@ public class MesPurchaseApplyServiceImpl implements IMesPurchaseApplyService { if (successFlag == 1) { MesBaseUnitInfo baseUnitInfo = mesBaseUnitInfoMapper.selectMesBaseUnitInfoByErpId(findMaterialInfo.getMaterialUnitId()); MesBaseUnitInfo priceUnitIdUnitInfo = mesBaseUnitInfoMapper.selectMesBaseUnitInfoByErpId(findMaterialInfo.getPurchasePriceUnitId()); - + if (baseUnitInfo == null || priceUnitIdUnitInfo == null) { + failureNum++; + failureMsg.append("
").append(failureNum).append(" 未找到单位信息 导入失败"); + } MesPurchaseApplyDetail mesPurchaseApplyDetail = new MesPurchaseApplyDetail(); mesPurchaseApplyDetail.setTondBase(purchaseRequisitionTemplate.getTondBase()); @@ -237,6 +240,7 @@ public class MesPurchaseApplyServiceImpl implements IMesPurchaseApplyService { failureMsg.append("
").append(failureNum).append(" 未找到物料记录 导入失败"); } } catch (Exception e) { + e.printStackTrace(); failureNum++; String msg = "
" + failureNum + " 导入失败:"; failureMsg.append(msg).append(e.getMessage()); @@ -267,7 +271,7 @@ public class MesPurchaseApplyServiceImpl implements IMesPurchaseApplyService { public int syncMesPurchaseApply(MesPurchaseApply mesPurchaseApply) { Date currentDate = new Date(); MesPurchaseApply dbMesPurchaseApply = mesPurchaseApplyMapper.selectOnlyMesPurchaseApplyByPurchaseApplyId(mesPurchaseApply.getPurchaseApplyId()); - if(dbMesPurchaseApply.getSyncStatus().equals(MesConstants.MES_PURCHASE_APPALY_SYNC_YES)){ + if (dbMesPurchaseApply.getSyncStatus().equals(MesConstants.MES_PURCHASE_APPALY_SYNC_YES)) { throw new ServiceException("此采购申请单已经同步"); } diff --git a/hw-modules/hw-mes/src/main/resources/mapper/mes/MesPurchaseApplyMapper.xml b/hw-modules/hw-mes/src/main/resources/mapper/mes/MesPurchaseApplyMapper.xml index 55552b67..f58a0ca8 100644 --- a/hw-modules/hw-mes/src/main/resources/mapper/mes/MesPurchaseApplyMapper.xml +++ b/hw-modules/hw-mes/src/main/resources/mapper/mes/MesPurchaseApplyMapper.xml @@ -52,6 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and sync_status = #{syncStatus} and sync_time = #{syncTime}
+ order by purchase_apply_id desc diff --git a/hw-ui/src/views/mes/barcode/index.vue b/hw-ui/src/views/mes/barcode/index.vue index 1944cb6a..bb04adb4 100644 --- a/hw-ui/src/views/mes/barcode/index.vue +++ b/hw-ui/src/views/mes/barcode/index.vue @@ -1127,7 +1127,7 @@ export default { if (filterSaleOrderIdMaterialRelateList != null && filterSaleOrderIdMaterialRelateList.length > 0) { let errorMsg = "选择的信息跟已经选择的销售订单号明细相同."; for (let ssoid of filterSaleOrderIdMaterialRelateList) { - errorMsg += "销售订单号:" + ssoid.saleOrderCode + ",成品编码:" + ssoid.productCode + ",成品名称:" + ssoid.productName + ",成品规格:" + ssoid.productSpec + ";"; + errorMsg += "销售订单号:" + ssoid.relateSaleOrderCode + ",成品编码:" + ssoid.productCode + ",成品名称:" + ssoid.productName + ",成品规格:" + ssoid.productSpec + ";"; } this.$modal.msgError(errorMsg); @@ -1790,6 +1790,7 @@ export default { this.submitLoading = true; if (this.materialRelateForm.mesSaleOrderRelateList.length <= 1) { this.$modal.msgError("请选择至少2条采购信息"); + this.submitLoading = false; return; } if (this.materialRelateForm.barcodeId && this.materialRelateForm.barcodeId != '') { diff --git a/hw-ui/src/views/mes/saleOrder/bindingPurchase.vue b/hw-ui/src/views/mes/saleOrder/bindingPurchase.vue index afb9f899..7fca3789 100644 --- a/hw-ui/src/views/mes/saleOrder/bindingPurchase.vue +++ b/hw-ui/src/views/mes/saleOrder/bindingPurchase.vue @@ -104,8 +104,8 @@ label-width="68px"> 菜单 按钮 PDA + WCS From b2e791a777636c5aac348dfb3d2ac687bbfe9fcf Mon Sep 17 00:00:00 2001 From: xs Date: Tue, 29 Oct 2024 14:18:04 +0800 Subject: [PATCH 4/9] =?UTF-8?q?3.3.5=20MES=20=E5=8E=9F=E6=9D=90=E6=96=99?= =?UTF-8?q?=E5=BA=93=E5=AD=98=E8=BD=AC=E5=BA=93=E5=AD=98=E5=92=8C=E6=88=90?= =?UTF-8?q?=E5=93=81=E5=BA=93=E5=AD=98=E8=BD=AC=E5=BA=93=E5=AD=98bug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/hw/mes/api/RemoteMesService.java | 4 +- .../vo/MesBaseBarcodeInfoTransferVo.java | 35 +++++ .../api/domain/vo/MesSaleOrderTransferVo.java | 6 +- .../api/factory/RemoteMesFallbackFactory.java | 2 +- .../controller/MesSaleOrderController.java | 38 +++-- .../hw/mes/service/IMesSaleOrderService.java | 1 + .../service/impl/MesSaleOrderServiceImpl.java | 11 +- .../impl/WmsStockTotalServiceImpl.java | 38 +++-- hw-ui/src/api/board/barcode.js | 2 +- hw-ui/src/views/mes/productOrder/index.vue | 20 ++- hw-ui/src/views/wms/info/stocktotal/index.vue | 131 ++++++++++++------ 11 files changed, 195 insertions(+), 93 deletions(-) create mode 100644 hw-api/hw-api-mes/src/main/java/com/hw/mes/api/domain/vo/MesBaseBarcodeInfoTransferVo.java diff --git a/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/RemoteMesService.java b/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/RemoteMesService.java index 6fda6467..b1aa5c46 100644 --- a/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/RemoteMesService.java +++ b/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/RemoteMesService.java @@ -103,7 +103,7 @@ public interface RemoteMesService { public R start5thFloorInstall(@RequestBody MesPdaProductPlanVo mesPdaProductPlanVo, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); /** - * 开始5楼组装工序 + * 完成5楼组装工序 * * @param mesPdaProductPlanVo * @param source 请求来源 @@ -132,7 +132,7 @@ public interface RemoteMesService { * @return 结果 */ @PostMapping("/saleOrder/transferSaleOrders") - public R transferSaleOrders(@RequestBody MesSaleOrderTransferVo mesSaleOrderTransferVo, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + public R transferSaleOrders(@RequestBody MesSaleOrderTransferVo mesSaleOrderTransferVo,@RequestHeader(SecurityConstants.FROM_SOURCE) String source); /** diff --git a/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/domain/vo/MesBaseBarcodeInfoTransferVo.java b/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/domain/vo/MesBaseBarcodeInfoTransferVo.java new file mode 100644 index 00000000..4a939b30 --- /dev/null +++ b/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/domain/vo/MesBaseBarcodeInfoTransferVo.java @@ -0,0 +1,35 @@ +package com.hw.mes.api.domain.vo; + +import com.hw.mes.api.domain.MesBaseBarcodeInfo; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +/** + * @Description: 销售订单转库存VO对象 + * @ClassName: MesSaleOrderTransferVo + * @Author : xins + * @Date :2024-09-04 14:21 + * @Version :1.0 + */ +@Data +public class MesBaseBarcodeInfoTransferVo { + + //新的销售订单ID + @NotNull(message = "销售订单Id必须输入") + private Long saleOrderId; + + //新的销售订单号 + @NotEmpty(message = "销售订单号必须输入") + private String saleOrderCode; + + //安全库存标识 + @NotEmpty(message = "安全库存标识必须输入") + private String safeFlag; + + //条码内容 + @NotEmpty(message = "条码内容必须输入") + private String barcodeInfo; +} diff --git a/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/domain/vo/MesSaleOrderTransferVo.java b/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/domain/vo/MesSaleOrderTransferVo.java index 945b9a62..f9edaddd 100644 --- a/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/domain/vo/MesSaleOrderTransferVo.java +++ b/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/domain/vo/MesSaleOrderTransferVo.java @@ -17,12 +17,12 @@ import java.util.List; @Data public class MesSaleOrderTransferVo { - //转换的条码信息 +// 转换的条码信息 @NotNull(message = "条码信息不能为空") - private List mesBaseBarcodeInfos; + private List mesBaseBarcodeInfoTransferVos; //转换数量 - @NotNull(message = "转换不能为空") + @NotNull(message = "转换数量不能为空") private BigDecimal transferAmount; //老的销售订单ID diff --git a/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/factory/RemoteMesFallbackFactory.java b/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/factory/RemoteMesFallbackFactory.java index 3ee1be2f..eaf4659e 100644 --- a/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/factory/RemoteMesFallbackFactory.java +++ b/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/factory/RemoteMesFallbackFactory.java @@ -77,7 +77,7 @@ public class RemoteMesFallbackFactory implements FallbackFactory transferSaleOrders(MesSaleOrderTransferVo mesSaleOrderTransferVo, String source) { + public R transferSaleOrders(MesSaleOrderTransferVo mesSaleOrderTransferVo,String source) { return R.fail("销售订单信息转换失败:" + throwable.getMessage()); } diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesSaleOrderController.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesSaleOrderController.java index 39e4d3df..af7321cf 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesSaleOrderController.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesSaleOrderController.java @@ -5,6 +5,7 @@ import javax.servlet.http.HttpServletResponse; import com.hw.common.core.domain.R; import com.hw.common.security.annotation.InnerAuth; +import com.hw.mes.api.domain.MesBaseBarcodeInfo; import com.hw.mes.api.domain.vo.MesSaleOrderTransferVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -27,14 +28,13 @@ import com.hw.common.core.web.page.TableDataInfo; /** * 销售订单信息Controller - * + * * @author Yinq * @date 2024-02-19 */ @RestController @RequestMapping("/saleOrder") -public class MesSaleOrderController extends BaseController -{ +public class MesSaleOrderController extends BaseController { @Autowired private IMesSaleOrderService mesSaleOrderService; @@ -44,8 +44,7 @@ public class MesSaleOrderController extends BaseController */ @RequiresPermissions("mes:saleOrder:list") @GetMapping("/list") - public TableDataInfo list(MesSaleOrder mesSaleOrder) - { + public TableDataInfo list(MesSaleOrder mesSaleOrder) { startPage(); List list = mesSaleOrderService.selectMesSaleOrderJoinMaterialList(mesSaleOrder); return getDataTable(list); @@ -57,8 +56,7 @@ public class MesSaleOrderController extends BaseController @RequiresPermissions("mes:saleOrder:export") @Log(title = "销售订单信息", businessType = BusinessType.EXPORT) @PostMapping("/export") - public void export(HttpServletResponse response, MesSaleOrder mesSaleOrder) - { + public void export(HttpServletResponse response, MesSaleOrder mesSaleOrder) { List list = mesSaleOrderService.selectMesSaleOrderList(mesSaleOrder); ExcelUtil util = new ExcelUtil(MesSaleOrder.class); util.exportExcel(response, list, "销售订单信息数据"); @@ -69,8 +67,7 @@ public class MesSaleOrderController extends BaseController */ @RequiresPermissions("mes:saleOrder:query") @GetMapping(value = "/{saleOrderId}") - public AjaxResult getInfo(@PathVariable("saleOrderId") Long saleOrderId) - { + public AjaxResult getInfo(@PathVariable("saleOrderId") Long saleOrderId) { return success(mesSaleOrderService.selectMesSaleOrderBySaleOrderId(saleOrderId)); } @@ -80,8 +77,7 @@ public class MesSaleOrderController extends BaseController @RequiresPermissions("mes:saleOrder:add") @Log(title = "销售订单信息", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@RequestBody MesSaleOrder mesSaleOrder) - { + public AjaxResult add(@RequestBody MesSaleOrder mesSaleOrder) { return toAjax(mesSaleOrderService.insertMesSaleOrder(mesSaleOrder)); } @@ -91,8 +87,7 @@ public class MesSaleOrderController extends BaseController @RequiresPermissions("mes:saleOrder:edit") @Log(title = "销售订单信息", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@RequestBody MesSaleOrder mesSaleOrder) - { + public AjaxResult edit(@RequestBody MesSaleOrder mesSaleOrder) { return toAjax(mesSaleOrderService.updateMesSaleOrder(mesSaleOrder)); } @@ -101,23 +96,24 @@ public class MesSaleOrderController extends BaseController */ @RequiresPermissions("mes:saleOrder:remove") @Log(title = "销售订单信息", businessType = BusinessType.DELETE) - @DeleteMapping("/{saleOrderIds}") - public AjaxResult remove(@PathVariable Long[] saleOrderIds) - { + @DeleteMapping("/{saleOrderIds}") + public AjaxResult remove(@PathVariable Long[] saleOrderIds) { return toAjax(mesSaleOrderService.deleteMesSaleOrderBySaleOrderIds(saleOrderIds)); } - /** * 库存转销售订单 */ @InnerAuth @Log(title = "销售订单信息", businessType = BusinessType.TRANSFER) - @PostMapping(value="/transferSaleOrders") - public R transferSaleOrders(@RequestBody MesSaleOrderTransferVo mesSaleOrderTransferVo) - { - return R.ok(mesSaleOrderService.transferSaleOrders(mesSaleOrderTransferVo)); + @PostMapping(value = "/transferSaleOrders") + public R transferSaleOrders(@RequestBody MesSaleOrderTransferVo mesSaleOrderTransferVo) { + try { + return R.ok(mesSaleOrderService.transferSaleOrders(mesSaleOrderTransferVo)); + } catch (Exception e) { + return R.fail(e.getMessage()); + } } } diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/IMesSaleOrderService.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/IMesSaleOrderService.java index 57287866..c7763999 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/IMesSaleOrderService.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/IMesSaleOrderService.java @@ -2,6 +2,7 @@ package com.hw.mes.service; import java.util.List; +import com.hw.mes.api.domain.MesBaseBarcodeInfo; import com.hw.mes.api.domain.vo.MesSaleOrderTransferVo; import com.hw.mes.domain.MesSaleOrder; diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesSaleOrderServiceImpl.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesSaleOrderServiceImpl.java index c2e08f79..e9351163 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesSaleOrderServiceImpl.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesSaleOrderServiceImpl.java @@ -8,6 +8,7 @@ import com.hw.common.core.utils.DateUtils; import com.hw.common.core.utils.StringUtils; import com.hw.common.security.utils.SecurityUtils; import com.hw.mes.api.domain.MesBaseBarcodeInfo; +import com.hw.mes.api.domain.vo.MesBaseBarcodeInfoTransferVo; import com.hw.mes.api.domain.vo.MesSaleOrderTransferVo; import com.hw.mes.mapper.MesBaseBarcodeInfoMapper; import org.springframework.beans.factory.annotation.Autowired; @@ -144,14 +145,18 @@ public class MesSaleOrderServiceImpl implements IMesSaleOrderService { mesSaleOrderMapper.updateMesSaleOrder(newSaleOrder); } - List mesBaseBarcodeInfos = mesSaleOrderTransferVo.getMesBaseBarcodeInfos(); + List mesBaseBarcodeInfoTransferVos = mesSaleOrderTransferVo.getMesBaseBarcodeInfoTransferVos(); int updateSize = 0; - for (MesBaseBarcodeInfo mesBaseBarcodeInfo : mesBaseBarcodeInfos) { - MesBaseBarcodeInfo dbMesBaseBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeInfo(mesBaseBarcodeInfo.getBarcodeInfo()); + for (MesBaseBarcodeInfoTransferVo mesBaseBarcodeInfoTransferVo : mesBaseBarcodeInfoTransferVos) { + MesBaseBarcodeInfo dbMesBaseBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeInfo(mesBaseBarcodeInfoTransferVo.getBarcodeInfo()); if (dbMesBaseBarcodeInfo == null) { return false; } + MesBaseBarcodeInfo mesBaseBarcodeInfo = new MesBaseBarcodeInfo(); mesBaseBarcodeInfo.setBarcodeId(dbMesBaseBarcodeInfo.getBarcodeId()); + mesBaseBarcodeInfo.setSaleOrderId(mesBaseBarcodeInfoTransferVo.getSaleOrderId()); + mesBaseBarcodeInfo.setSaleorderCode(mesBaseBarcodeInfoTransferVo.getSaleOrderCode()); + mesBaseBarcodeInfo.setSafeFlag(mesBaseBarcodeInfoTransferVo.getSafeFlag()); mesBaseBarcodeInfo.setUpdateBy(SecurityUtils.getUsername()); mesBaseBarcodeInfo.setUpdateTime(DateUtils.getNowDate()); updateSize += mesBaseBarcodeInfoMapper.updateMesBaseBarcodeInfo(mesBaseBarcodeInfo); diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsStockTotalServiceImpl.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsStockTotalServiceImpl.java index de012962..25b541ff 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsStockTotalServiceImpl.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsStockTotalServiceImpl.java @@ -5,6 +5,7 @@ import java.util.*; import java.util.stream.Collectors; import com.alibaba.fastjson2.JSONObject; +import com.hw.common.core.constant.Constants; import com.hw.common.core.constant.MesConstants; import com.hw.common.core.constant.SecurityConstants; import com.hw.common.core.constant.WmsConstants; @@ -16,6 +17,7 @@ import com.hw.mes.api.RemoteMesService; import com.hw.mes.api.domain.MesBaseBarcodeInfo; import com.hw.mes.api.domain.MesBaseMaterialInfo; import com.hw.mes.api.domain.MesBaseStationInfo; +import com.hw.mes.api.domain.vo.MesBaseBarcodeInfoTransferVo; import com.hw.mes.api.domain.vo.MesSaleOrderTransferVo; import com.hw.wms.config.WmsConfig; import com.hw.wms.domain.WmsBaseLocation; @@ -222,8 +224,8 @@ public class WmsStockTotalServiceImpl implements IWmsStockTotalService { throw new ServiceException("没有销售订单成品库存信息"); } - for(WmsStockTotal stockTotal:stockTotalList){ - if(stockTotal.getProductId().equals(0L)){ + for (WmsStockTotal stockTotal : stockTotalList) { + if (stockTotal.getProductId().equals(0L)) { stockTotal.setMaterialCode("1111|222"); } } @@ -439,21 +441,21 @@ public class WmsStockTotalServiceImpl implements IWmsStockTotalService { throw new ServiceException("没有可转库存明细"); } if (wmsProductStocks.size() < transferAmount.intValue()) { - throw new ServiceException("可转库存明细数量为%s", wmsProductStocks.size()); + throw new ServiceException("可转库存明细数量为" + wmsProductStocks.size()); } - List mesBaseBarcodeInfos = new ArrayList<>(); + List mesBaseBarcodeInfoTransferVos = new ArrayList<>(); for (WmsProductStock wmsProductStock : wmsProductStocks) { - MesBaseBarcodeInfo mesBaseBarcodeInfo = new MesBaseBarcodeInfo(); - mesBaseBarcodeInfo.setSaleOrderId(saleOrderId); - mesBaseBarcodeInfo.setSaleorderCode(saleorderCode); - mesBaseBarcodeInfo.setSafeFlag(safeFlag); - mesBaseBarcodeInfo.setBarcodeInfo(wmsProductStock.getProductBatch()); - mesBaseBarcodeInfos.add(mesBaseBarcodeInfo); + MesBaseBarcodeInfoTransferVo mesBaseBarcodeInfoTransferVo = new MesBaseBarcodeInfoTransferVo(); + mesBaseBarcodeInfoTransferVo.setSaleOrderId(saleOrderId); + mesBaseBarcodeInfoTransferVo.setSaleOrderCode(saleorderCode); + mesBaseBarcodeInfoTransferVo.setSafeFlag(safeFlag); + mesBaseBarcodeInfoTransferVo.setBarcodeInfo(wmsProductStock.getProductBatch()); + mesBaseBarcodeInfoTransferVos.add(mesBaseBarcodeInfoTransferVo); wmsProductStock.setSafeFlag(safeFlag); wmsProductStock.setSaleOrderId(saleOrderId); - wmsProductStock.setSaleorderCode(saleorderCode); + wmsProductStock.setSaleorderCode(saleorderCode == null ? "" : saleorderCode); wmsProductStock.setUpdateDate(new Date()); wmsProductStock.setUpdateBy(SecurityUtils.getUsername()); wmsProductStockMapper.updateWmsProductStock(wmsProductStock); @@ -464,13 +466,19 @@ public class WmsStockTotalServiceImpl implements IWmsStockTotalService { mesSaleOrderTransferVo.setOldSaleOrderId(wmsStockTotal.getSaleOrderId()); mesSaleOrderTransferVo.setNewSaleOrderId(saleOrderId); mesSaleOrderTransferVo.setMaterialId(materialId); - mesSaleOrderTransferVo.setMesBaseBarcodeInfos(mesBaseBarcodeInfos); + mesSaleOrderTransferVo.setMesBaseBarcodeInfoTransferVos(mesBaseBarcodeInfoTransferVos); - R transferBaseBarcodeInfosResult = remoteMesService.transferSaleOrders(mesSaleOrderTransferVo, SecurityConstants.INNER); - if (!transferBaseBarcodeInfosResult.getData()) { - throw new RuntimeException("销售订单信息转换失败"); + System.out.println(mesSaleOrderTransferVo.toString()); + + R transferBaseBarcodeInfosResult = remoteMesService.transferSaleOrders(mesSaleOrderTransferVo, SecurityConstants.INNER); + if (transferBaseBarcodeInfosResult.getCode() != Constants.SUCCESS) {//抛出异常,回滚事务 + throw new RuntimeException(transferBaseBarcodeInfosResult.getMsg()); } +// if (!transferBaseBarcodeInfosResult.getData()) { +// throw new RuntimeException("销售订单信息转换失败"); +// } + return 1; } diff --git a/hw-ui/src/api/board/barcode.js b/hw-ui/src/api/board/barcode.js index e2d81d0a..352bf96e 100644 --- a/hw-ui/src/api/board/barcode.js +++ b/hw-ui/src/api/board/barcode.js @@ -65,8 +65,8 @@ export function addInternalBarcode(data) { }) } -//根据原材料条码判断是否有半成品出库 export function checkSemiOutstock(query) { +//根据原材料条码判断是否有半成品出库 return request({ url: '/wms/api/checkSemiOutstock', method: 'get', diff --git a/hw-ui/src/views/mes/productOrder/index.vue b/hw-ui/src/views/mes/productOrder/index.vue index 99c150ae..9493f185 100644 --- a/hw-ui/src/views/mes/productOrder/index.vue +++ b/hw-ui/src/views/mes/productOrder/index.vue @@ -1235,9 +1235,21 @@ export default { handleMaterialUsage(row) { this.materialUsageOpen = true; this.materialUsageList = []; + this.loading = true; + //先根据bom找到需要的物料信息 + let warehouseFloor = 0; + if(row.dispatchId === 2){ + warehouseFloor = 3; + }else if(row.dispatchId === 3){ + warehouseFloor = 4; + }else if(row.dispatchId === 4){ + warehouseFloor = 5; + } + getMaterialUsages(row).then(response => { let materialUsageList = response.data; - getStockTotalWithRawOutstocks({saleOrderId: row.saleOrderId}).then(response => { + //根据销售订单ID或者安全库存找到总库存信息 + getStockTotalWithRawOutstocks({saleOrderId: row.saleOrderId,warehouseFloor:warehouseFloor}).then(response => { let stockMapJson = response.data; let totalAmountMap = stockMapJson.totalAmountMap; let occupyAmountMap = stockMapJson.occupyAmountMap; @@ -1248,10 +1260,16 @@ export default { objA.totalAmount = totalAmountMap[objA.materialId]; objA.outstockAmount = outstockAmountMap[objA.materialId]; objA.occupyAmount = occupyAmountMap[objA.materialId]; + + objA.totalAmount = objA.totalAmount ? objA.totalAmount : 0; + objA.outstockAmount = objA.outstockAmount ? objA.outstockAmount : 0; + objA.occupyAmount = objA.occupyAmount ? objA.occupyAmount : 0; + objA.availableAmount = objA.totalAmount -objA.occupyAmount; // return returnObj; // 如果没有找到匹配项,则直接返回原对象 }); + this.loading = false; this.materialUsageList = materialUsageList; // console.log(this.materialUsageList) }) diff --git a/hw-ui/src/views/wms/info/stocktotal/index.vue b/hw-ui/src/views/wms/info/stocktotal/index.vue index 6e9e4c3e..04d8593d 100644 --- a/hw-ui/src/views/wms/info/stocktotal/index.vue +++ b/hw-ui/src/views/wms/info/stocktotal/index.vue @@ -181,21 +181,6 @@ 库位库存明细信息 - - - 转库存 - - - - @@ -235,6 +220,23 @@ + + + + + + - + @@ -283,7 +285,7 @@ @@ -298,14 +300,13 @@ - - + - - - + + + @@ -436,15 +437,15 @@ export default { VIRTUAL: "2" }, - RAW_BARCODE_VIRTUAL:{ - EXTERNAL_VIRTUAL:"VR",//外部采购合并的虚拟物料条码标识 - INTERNAL_VIRTUAL:"RN",//内部生产合并的虚拟物料条码标识 + RAW_BARCODE_VIRTUAL: { + EXTERNAL_VIRTUAL: "VR",//外部采购合并的虚拟物料条码标识 + INTERNAL_VIRTUAL: "RN",//内部生产合并的虚拟物料条码标识 }, selectSaleOrderVisible: false, - - materialListOpen : false, - materialList:[] + submitLoading:false, + materialListOpen: false, + materialList: [] }; }, watch: { @@ -637,10 +638,9 @@ export default { // 库位库存明细信息多选框选中数据 handleRawStockSelectionChange(selection) { - return; let index = 0; selection.forEach(row => { - index = this.rawstockList.indexOf(row); + index = this.rawstockList.indexOf(row); }); this.instockBatches = selection.map((item, index1) => index + "-" + item.instockBatch); this.rawStockIds = selection.map((item, index1) => index + "-" + item.rawStockId); @@ -649,13 +649,25 @@ export default { this.multiple = !selection.length }, - handleTransfer() { + handleTransfer(row) { this.reset(); this.transferType = "2"; - this.rawStockInfosStr = this.rawStockInfos.join("
"); + let index = this.rawstockList.indexOf(row) + this.form.instockBatch = row.instockBatch + this.form.rawStockId = row.rawStockId + this.form.indexStockIds =[index + "-" + row.rawStockId]; + this.form.index = index; + this.rawStockInfosStr = "序号:" + (index + 1) + ",物料编码:" + row.materialCode + " 物料名称:" + row.materialName + " 物料规格:" + row.materialSpec + " 数量:" + row.totalAmount + " 销售订单:" + (row.saleorderCode ? row.saleorderCode : "无"); this.open = true; }, + // handleTransfer() { + // this.reset(); + // this.transferType = "2"; + // this.rawStockInfosStr = this.rawStockInfos.join("
"); + // this.open = true; + // }, + handleSaleOrderSelect() { this.selectSaleOrderVisible = true; }, @@ -663,7 +675,8 @@ export default { /** 提交选择销售订单按钮 */ submitSelectSaleOrderForm() { let selectedRow = this.$refs.selectSaleOrderRef.selectedRow; - if(selectedRow.materialId!==this.form.materialId){ + //成品库存需要校验物料信息是否相同 + if (this.type === this.STOCK_TYPE.PRODUCT && selectedRow.materialId !== this.form.materialId) { this.$modal.msgWarning("请选择相同物料的销售订单"); return; } @@ -675,36 +688,60 @@ export default { submitForm() { this.$refs["form"].validate(valid => { if (valid) { + this.submitLoading = true; if (this.form.safeFlag === this.SAFE_FLAG.YES) { this.form.saleOrderId = 0; this.form.saleorderCode = null; } - if (this.type === this.STOCK_TYPE.PRODUCT) { + if (this.type === this.STOCK_TYPE.PRODUCT) { //转成品库存 + if(this.form.transferAmount < 1){ + this.$modal.msgWarning('请输入整数'); + this.submitLoading = false; + return; + }else if (!Number.isInteger(this.form.transferAmount)) { + this.$modal.msgWarning('请输入整数'); + // this.value = Math.floor(value); // 重置为最接近的整数 + this.submitLoading = false; + return; + } + + + transferProductStockTotal(this.form).then(response => { this.$modal.msgSuccess("转库存成功"); this.open = false; this.getList(); this.getTwoList(); + }).finally(e=>{ + this.submitLoading = false; }); } else if (this.type === this.STOCK_TYPE.RAW) { - if (this.transferType === '1') { + if (this.transferType === '1') {//转总库存的原材料库存 + if(this.form.transferAmount < 1){ + this.$modal.msgWarning('待转数量请输入整数'); + this.submitLoading = false; + return; + }else if (!Number.isInteger(this.form.transferAmount)) { + this.$modal.msgWarning('待转数量请输入整数'); + // this.value = Math.floor(value); // 重置为最接近的整数 + this.submitLoading = false; + return; + } + transferRawStockTotal(this.form).then(response => { this.$modal.msgSuccess("转库存成功"); this.open = false; this.getList(); this.getTwoList(); + }).finally(e=>{ + this.submitLoading = false; }); } else if (this.transferType === '2') { - this.form.indexStockIds = this.rawStockIds; - for(const instockBatchStr of this.instockBatches){ - let instockBatchStrArr = instockBatchStr.split("-"); - let instockBatchIndex = parseInt(instockBatchStrArr[0]); - let instockBatch = instockBatchStrArr[1]; - if(instockBatch.indexOf(this.RAW_BARCODE_VIRTUAL.EXTERNAL_VIRTUAL) >=0 || instockBatch.indexOf(this.RAW_BARCODE_VIRTUAL.INTERNAL_VIRTUAL) >=0){ - this.$modal.msgSuccess("序号:"+(instockBatchIndex+1)+",是虚拟合并的物料,不能转库存"); - return; - } + if (this.form.instockBatch.indexOf(this.RAW_BARCODE_VIRTUAL.EXTERNAL_VIRTUAL) >= 0 || this.form.instockBatch.indexOf(this.RAW_BARCODE_VIRTUAL.INTERNAL_VIRTUAL) >= 0) { + this.$modal.msgWarning("序号:" + (parseInt(this.form.index) + 1) + ",是虚拟合并的物料,不能转库存"); + this.submitLoading = false; + return; } transferRaw(this.form).then(response => { @@ -712,6 +749,8 @@ export default { this.open = false; this.getList(); this.getTwoList(); + }).finally(e=>{ + this.submitLoading = false; }); } } @@ -733,9 +772,9 @@ export default { }, - handleViewMaterialInfos(row){ + handleViewMaterialInfos(row) { this.materialListOpen = true; - selectMaterialInfosByVirtualMaterialId({materialId:row.materialId}).then(response => { + selectMaterialInfosByVirtualMaterialId({materialId: row.materialId}).then(response => { this.materialList = response.rows; }); } From 76da01f1ee99d31869cd0bbd7ceea16c97826068 Mon Sep 17 00:00:00 2001 From: xs Date: Tue, 29 Oct 2024 15:32:41 +0800 Subject: [PATCH 5/9] =?UTF-8?q?3.3.6=20MES=20=E7=89=A9=E6=96=99=E4=BF=A1?= =?UTF-8?q?=E6=81=AFbug=E4=BF=AE=E5=A4=8D=20=E9=87=87=E8=B4=AD=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E7=BB=91=E5=AE=9A=E9=94=80=E5=94=AE=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=8E=BB=E6=8E=89=E5=B8=B8=E5=A4=87=E7=89=A9=E6=96=99=E7=9A=84?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MesBaseMaterialInfoController.java | 16 ++++++++++ .../impl/MesBaseBarcodeInfoServiceImpl.java | 32 +++++++++---------- .../impl/MesPurchaseOrderServiceImpl.java | 16 +++++----- .../mapper/mes/MesBaseMaterialInfoMapper.xml | 1 + hw-ui/src/api/mes/materialinfo.js | 10 ++++++ hw-ui/src/views/mes/materialinfo/index.vue | 26 ++++++++++----- hw-ui/src/views/mes/purchaseOrder/index.vue | 2 +- 7 files changed, 70 insertions(+), 33 deletions(-) diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesBaseMaterialInfoController.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesBaseMaterialInfoController.java index d61b2263..3c3d09fb 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesBaseMaterialInfoController.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesBaseMaterialInfoController.java @@ -6,6 +6,8 @@ import javax.servlet.http.HttpServletResponse; import com.hw.common.security.annotation.InnerAuth; import com.hw.mes.api.domain.vo.MesBaseMaterialInfoVo; +import com.hw.mes.domain.MesBaseMaterialType; +import com.hw.mes.service.IMesBaseMaterialTypeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -37,6 +39,9 @@ public class MesBaseMaterialInfoController extends BaseController { @Autowired private IMesBaseMaterialInfoService mesBaseMaterialInfoService; + @Autowired + private IMesBaseMaterialTypeService mesBaseMaterialTypeService; + /** * 查询物料信息列表 @@ -157,4 +162,15 @@ public class MesBaseMaterialInfoController extends BaseController return getDataTable(list); } + /** + * 查询物料信息列表 + */ + @RequiresPermissions("mes:materialinfo:list") + @GetMapping("/getMaterialTypes") + public AjaxResult getMaterialTypes(MesBaseMaterialType mesBaseMaterialType) + { + List list = mesBaseMaterialTypeService.selectMesBaseMaterialTypeList(mesBaseMaterialType); + return success(list); + } + } diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesBaseBarcodeInfoServiceImpl.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesBaseBarcodeInfoServiceImpl.java index 56e65ab5..cc1a3656 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesBaseBarcodeInfoServiceImpl.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesBaseBarcodeInfoServiceImpl.java @@ -170,10 +170,10 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService if (mesBaseMaterialInfo == null) { throw new ServiceException("物料信息不存在"); } - if (mesBaseMaterialInfo.getAlwaysFlag() == null) { - throw new ServiceException("请先设置此物料信息[物料编码:" + mesBaseBarcodeInfo.getMaterialCode() - + ",物料名称:" + mesBaseBarcodeInfo.getMaterialName() + "]的常备物料标识"); - } +// if (mesBaseMaterialInfo.getAlwaysFlag() == null) { +// throw new ServiceException("请先设置此物料信息[物料编码:" + mesBaseBarcodeInfo.getMaterialCode() +// + ",物料名称:" + mesBaseBarcodeInfo.getMaterialName() + "]的常备物料标识"); +// } //判断选择的采购订单信息,是否已经合并过 MesSaleOrderRelate querySaleOrderRelate = new MesSaleOrderRelate(); @@ -184,11 +184,11 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService } - //如果物料信息为非常备物料,则判断是否有绑定的信息 + //不管物料是否常备物料,都判断是否有绑定的信息 BigDecimal barcodeAmount = mesBaseBarcodeInfo.getBarcodeAmount();//要生成的条码数量 String poNo = StringUtils.isEmpty(mesBaseBarcodeInfo.getPoNo()) ? "0" : mesBaseBarcodeInfo.getPoNo(); String batchCode = this.getRawBatchCode(poNo); - if (!mesBaseMaterialInfo.getAlwaysFlag().equals(MesConstants.MES_MATERIAL_ALWAYS_FLAG_YES)) { +// if (!mesBaseMaterialInfo.getAlwaysFlag().equals(MesConstants.MES_MATERIAL_ALWAYS_FLAG_YES)) { Long orderBindId = mesBaseBarcodeInfo.getOrderBindId(); if (orderBindId == null) { throw new ServiceException("请选择绑定销售订单信息的采购订单"); @@ -221,16 +221,16 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService mesOrderBindMapper.updateMesOrderBind(mesOrderBind); - } else { - MesBaseBarcodeInfo toInsertedBarcodeInfo; - for (long i = 0; i < barcodeAmount.intValue(); i++) { - // 生成条码数量的不同条码内容 - toInsertedBarcodeInfo = getInsertedBarcodeInfo(mesBaseBarcodeInfo, Seq.getId(Seq.mesBarcodeSeqType, Seq.mesBarcodeCode), batchCode, userName, currentDate); - toInsertedBarcodeInfo.setSaleOrderId(0L); - toInsertedBarcodeInfo.setSafeFlag(MesConstants.MES_ORDER_BIND_SAFE_FLAG_YES); - mesBaseBarcodeInfoMapper.insertMesBaseBarcodeInfo(toInsertedBarcodeInfo); - } - } +// } else { +// MesBaseBarcodeInfo toInsertedBarcodeInfo; +// for (long i = 0; i < barcodeAmount.intValue(); i++) { +// // 生成条码数量的不同条码内容 +// toInsertedBarcodeInfo = getInsertedBarcodeInfo(mesBaseBarcodeInfo, Seq.getId(Seq.mesBarcodeSeqType, Seq.mesBarcodeCode), batchCode, userName, currentDate); +// toInsertedBarcodeInfo.setSaleOrderId(0L); +// toInsertedBarcodeInfo.setSafeFlag(MesConstants.MES_ORDER_BIND_SAFE_FLAG_YES); +// mesBaseBarcodeInfoMapper.insertMesBaseBarcodeInfo(toInsertedBarcodeInfo); +// } +// } } diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesPurchaseOrderServiceImpl.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesPurchaseOrderServiceImpl.java index cd484a88..be0fc272 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesPurchaseOrderServiceImpl.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesPurchaseOrderServiceImpl.java @@ -153,14 +153,14 @@ public class MesPurchaseOrderServiceImpl implements IMesPurchaseOrderService { if (mesBaseMaterialInfo == null) { throw new ServiceException("物料信息不存在"); } - String alwaysFlag = mesBaseMaterialInfo.getAlwaysFlag(); - if (alwaysFlag == null) { - throw new ServiceException("请先设置物料信息是否为常备物料"); - } - - if (alwaysFlag.equals(MesConstants.MES_MATERIAL_ALWAYS_FLAG_YES)) { - throw new ServiceException("此物料为常备物料,不需要绑定"); - } +// String alwaysFlag = mesBaseMaterialInfo.getAlwaysFlag(); +// if (alwaysFlag == null) { +// throw new ServiceException("请先设置物料信息是否为常备物料"); +// } +// +// if (alwaysFlag.equals(MesConstants.MES_MATERIAL_ALWAYS_FLAG_YES)) { +// throw new ServiceException("此物料为常备物料,不需要绑定"); +// } Long purchaseOrderId = mesPurchaseOrder.getPurchaseOrderId(); diff --git a/hw-modules/hw-mes/src/main/resources/mapper/mes/MesBaseMaterialInfoMapper.xml b/hw-modules/hw-mes/src/main/resources/mapper/mes/MesBaseMaterialInfoMapper.xml index 2e897d1f..8b5bded7 100644 --- a/hw-modules/hw-mes/src/main/resources/mapper/mes/MesBaseMaterialInfoMapper.xml +++ b/hw-modules/hw-mes/src/main/resources/mapper/mes/MesBaseMaterialInfoMapper.xml @@ -130,6 +130,7 @@ and bmi.auto_outstock_flag = #{autoOutstockFlag} and bmi.accessories_flag = #{accessoriesFlag} and bmi.low_value_consumable_flag = #{lowValueConsumableFlag} + and bmi.always_flag = #{alwaysFlag} and exists (select 1 from wms_warehouse_material wwm where wwm.storage_type='1' and wwm.warehouse_id=511 and wwm.storage_id=bmi.material_id) diff --git a/hw-ui/src/api/mes/materialinfo.js b/hw-ui/src/api/mes/materialinfo.js index 9750d550..bf0b3337 100644 --- a/hw-ui/src/api/mes/materialinfo.js +++ b/hw-ui/src/api/mes/materialinfo.js @@ -42,3 +42,13 @@ export function delMaterialinfo(materialId) { method: 'delete' }) } + + +// 查询物料类型列表 +export function getMaterialTypes(query) { + return request({ + url: '/mes/materialinfo/getMaterialTypes', + method: 'get', + params: query + }) +} diff --git a/hw-ui/src/views/mes/materialinfo/index.vue b/hw-ui/src/views/mes/materialinfo/index.vue index 35a17b67..6305c712 100644 --- a/hw-ui/src/views/mes/materialinfo/index.vue +++ b/hw-ui/src/views/mes/materialinfo/index.vue @@ -47,14 +47,18 @@ /> - - + + + + + + 修改 @@ -410,7 +415,8 @@ import { getMaterialinfo, delMaterialinfo, addMaterialinfo, - updateMaterialinfo + updateMaterialinfo, + getMaterialTypes } from "@/api/mes/materialinfo"; import {listBaseMaterialType} from "@//api/mes/baseMaterialType"; import Treeselect from "@riophae/vue-treeselect"; @@ -493,6 +499,10 @@ export default { // ], }, currentStatus: '', + MATERIAL_CLASSFICATION:{ + ERP:'1', + VIRTUAL:'2' + } }; }, created() { diff --git a/hw-ui/src/views/mes/purchaseOrder/index.vue b/hw-ui/src/views/mes/purchaseOrder/index.vue index 300bbbb1..8484da7b 100644 --- a/hw-ui/src/views/mes/purchaseOrder/index.vue +++ b/hw-ui/src/views/mes/purchaseOrder/index.vue @@ -134,7 +134,7 @@ icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['mes:purchaseOrder:bind']" - v-if="scope.row.alwaysFlag === ALWAYS_FLAG.NO && (scope.row.orderStatus === ORDER_STATUS.TO_PURCHASE || scope.row.orderStatus === ORDER_STATUS.PURCHASEING)" + v-if="scope.row.orderStatus === ORDER_STATUS.TO_PURCHASE || scope.row.orderStatus === ORDER_STATUS.PURCHASEING" >绑定 From fb8b55a4c6092352a8eecfe79469c74385cfb15a Mon Sep 17 00:00:00 2001 From: xs Date: Tue, 29 Oct 2024 18:57:54 +0800 Subject: [PATCH 6/9] =?UTF-8?q?3.3.7=20MES:=20RFID=E6=89=8B=E6=8C=81?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=E5=8E=9F=E6=9D=90=E6=96=99=E6=9D=A1=E7=A0=81?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BB=93=E5=BA=93=E9=85=8D=E7=BD=AE=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E7=9A=84=E6=A0=A1=E9=AA=8C=20WMS=EF=BC=9A=20=E5=8E=9F?= =?UTF-8?q?=E6=9D=90=E6=96=99=E5=85=A5=E5=BA=93=E8=AE=B0=E5=BD=95=E5=92=8C?= =?UTF-8?q?=E5=8E=9F=E6=9D=90=E6=96=99=E5=87=BA=E5=BA=93=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E5=AE=8C=E5=96=84=20PDA=E6=8E=A5=E5=8F=A3=EF=BC=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/hw/wms/api/RemoteWmsService.java | 6 +- .../vo/WmsWarehouseMaterialExistVo.java | 11 +++ .../api/factory/RemoteWmsFallbackFactory.java | 6 ++ .../hw/common/core/constant/WmsConstants.java | 1 + .../mes/controller/MesMobileController.java | 14 +++ .../impl/MesBasePalletInfoServiceImpl.java | 13 ++- .../WmsBaseWarehouseController.java | 11 ++- .../wms/controller/WmsMobileController.java | 63 ++++++++++-- .../java/com/hw/wms/domain/WmsRawInstock.java | 2 +- .../com/hw/wms/domain/WmsRawOutstock.java | 2 +- .../domain/vo/WmsLocationLockUnLockVo.java | 21 ++++ .../hw/wms/domain/vo/WmsReturnOutstockVo.java | 28 ++++++ .../wms/service/IWmsBaseLocationService.java | 23 +++++ .../wms/service/IWmsRawOutstockService.java | 7 ++ .../impl/WmsBaseLocationServiceImpl.java | 63 +++++++++++- .../impl/WmsRawOutstockServiceImpl.java | 96 ++++++++++++++++++- .../mapper/wms/WmsRawInstockMapper.xml | 1 + .../mapper/wms/WmsRawOutstockMapper.xml | 1 + 18 files changed, 347 insertions(+), 22 deletions(-) create mode 100644 hw-api/hw-api-wms/src/main/java/com/hw/wms/api/domain/vo/WmsWarehouseMaterialExistVo.java create mode 100644 hw-modules/hw-wms/src/main/java/com/hw/wms/domain/vo/WmsLocationLockUnLockVo.java create mode 100644 hw-modules/hw-wms/src/main/java/com/hw/wms/domain/vo/WmsReturnOutstockVo.java diff --git a/hw-api/hw-api-wms/src/main/java/com/hw/wms/api/RemoteWmsService.java b/hw-api/hw-api-wms/src/main/java/com/hw/wms/api/RemoteWmsService.java index b5658d69..9f89ccfc 100644 --- a/hw-api/hw-api-wms/src/main/java/com/hw/wms/api/RemoteWmsService.java +++ b/hw-api/hw-api-wms/src/main/java/com/hw/wms/api/RemoteWmsService.java @@ -8,6 +8,7 @@ import com.hw.wms.api.domain.WmsWarehouseMaterial; import com.hw.wms.api.domain.vo.WmsAutoOutstockVo; import com.hw.wms.api.domain.vo.WmsProductStockVo; import com.hw.wms.api.domain.vo.WmsRawStockVo; +import com.hw.wms.api.domain.vo.WmsWarehouseMaterialExistVo; import com.hw.wms.api.factory.RemoteWmsFallbackFactory; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.validation.annotation.Validated; @@ -15,7 +16,6 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestHeader; -import org.springframework.web.bind.annotation.RequestParam; @FeignClient(contextId = "remoteWmsService", value = ServiceNameConstants.WMS_SERVICE, fallbackFactory = RemoteWmsFallbackFactory.class) @@ -75,4 +75,8 @@ public interface RemoteWmsService { @PostMapping("/rawstock/autoOutstock") public R autoOutstock(@Validated @RequestBody WmsAutoOutstockVo wmsAutoOutstockVo, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + @PostMapping("/wmswarehouse/isExistWarehouseMaterial") + public R isExistWarehouseMaterial(@Validated @RequestBody WmsWarehouseMaterial wmsWarehouseMaterial, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + } diff --git a/hw-api/hw-api-wms/src/main/java/com/hw/wms/api/domain/vo/WmsWarehouseMaterialExistVo.java b/hw-api/hw-api-wms/src/main/java/com/hw/wms/api/domain/vo/WmsWarehouseMaterialExistVo.java new file mode 100644 index 00000000..a28337dc --- /dev/null +++ b/hw-api/hw-api-wms/src/main/java/com/hw/wms/api/domain/vo/WmsWarehouseMaterialExistVo.java @@ -0,0 +1,11 @@ +package com.hw.wms.api.domain.vo; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; + +@Data +public class WmsWarehouseMaterialExistVo { + @NotEmpty(message="物料ID不能为空") + private Long materialId; +} diff --git a/hw-api/hw-api-wms/src/main/java/com/hw/wms/api/factory/RemoteWmsFallbackFactory.java b/hw-api/hw-api-wms/src/main/java/com/hw/wms/api/factory/RemoteWmsFallbackFactory.java index 2fb467ee..0befa0af 100644 --- a/hw-api/hw-api-wms/src/main/java/com/hw/wms/api/factory/RemoteWmsFallbackFactory.java +++ b/hw-api/hw-api-wms/src/main/java/com/hw/wms/api/factory/RemoteWmsFallbackFactory.java @@ -7,6 +7,7 @@ import com.hw.wms.api.domain.WmsWarehouseMaterial; import com.hw.wms.api.domain.vo.WmsAutoOutstockVo; import com.hw.wms.api.domain.vo.WmsProductStockVo; import com.hw.wms.api.domain.vo.WmsRawStockVo; +import com.hw.wms.api.domain.vo.WmsWarehouseMaterialExistVo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; @@ -71,6 +72,11 @@ public class RemoteWmsFallbackFactory implements FallbackFactory isExistWarehouseMaterial(WmsWarehouseMaterial wmsWarehouseMaterial, String source) { + return R.fail("获取是否绑定仓库信息失败:" + throwable.getMessage()); + } + }; } } diff --git a/hw-common/hw-common-core/src/main/java/com/hw/common/core/constant/WmsConstants.java b/hw-common/hw-common-core/src/main/java/com/hw/common/core/constant/WmsConstants.java index 45eb2fdc..693df5ed 100644 --- a/hw-common/hw-common-core/src/main/java/com/hw/common/core/constant/WmsConstants.java +++ b/hw-common/hw-common-core/src/main/java/com/hw/common/core/constant/WmsConstants.java @@ -193,6 +193,7 @@ public class WmsConstants { public static final String WMS_RAW_OUTSTOCK_TASK_TYPE_PRODUCTION_INSTALL = "3";//组装出库 public static final String WMS_RAW_OUTSTOCK_TASK_TYPE_AUTO_OUTSTOCK = "4";//自动出库 + public static final String WMS_RAW_OUTSTOCK_TASK_TYPE_RETURN_OUTSTOCK = "5";//退货出库 public static final String WMS_RAW_OUTSTOCK_TASK_TYPE_OTHER = "9";//其他 diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesMobileController.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesMobileController.java index 4a538667..f6d58d0d 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesMobileController.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesMobileController.java @@ -2,14 +2,19 @@ package com.hw.mes.controller; import com.hw.common.core.web.controller.BaseController; import com.hw.common.core.web.domain.AjaxResult; +import com.hw.common.core.web.page.TableDataInfo; import com.hw.common.log.annotation.Log; import com.hw.common.log.enums.BusinessType; +import com.hw.common.security.annotation.RequiresPermissions; +import com.hw.mes.domain.MesBasePalletInfo; import com.hw.mes.domain.vo.*; import com.hw.mes.service.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * MES手持端接口Controller * @@ -33,4 +38,13 @@ public class MesMobileController extends BaseController { } + /** + * 查询库位关联条码信息列表 + */ + @GetMapping("/getMesPalletInfos") + public TableDataInfo getMesPalletInfos(MesBasePalletInfo mesBasePalletInfo) { + startPage(); + List list = mesBasePalletInfoService.selectMesBasePalletInfoList(mesBasePalletInfo); + return getDataTable(list); + } } diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesBasePalletInfoServiceImpl.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesBasePalletInfoServiceImpl.java index 7076502c..d5d59e2a 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesBasePalletInfoServiceImpl.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesBasePalletInfoServiceImpl.java @@ -10,16 +10,16 @@ import com.hw.common.core.domain.R; import com.hw.common.core.exception.ServiceException; import com.hw.common.core.utils.DateUtils; import com.hw.common.core.utils.StringUtils; -import com.hw.common.core.utils.poi.ExcelUtil; import com.hw.common.security.utils.SecurityUtils; import com.hw.mes.api.domain.MesBaseBarcodeInfo; import com.hw.mes.domain.vo.MesPalletInfoBindVo; import com.hw.mes.mapper.MesBaseBarcodeInfoMapper; import com.hw.printer.api.RemotePrinterService; -import com.hw.printer.api.domain.vo.PrintContentVo; import com.hw.wms.api.RemoteWmsService; +import com.hw.wms.api.domain.WmsWarehouseMaterial; import com.hw.wms.api.domain.vo.WmsProductStockVo; import com.hw.wms.api.domain.vo.WmsRawStockVo; +import com.hw.wms.api.domain.vo.WmsWarehouseMaterialExistVo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -172,6 +172,15 @@ public class MesBasePalletInfoServiceImpl implements IMesBasePalletInfoService { throw new ServiceException("此物料条码存在原材料库存,不能绑定"); } + if(mesBaseBarcodeInfo.getBarcodeType().equals(MesConstants.MES_BARCODE_TYPE_RAW)){ + WmsWarehouseMaterial wmsWarehouseMaterial = new WmsWarehouseMaterial(); + wmsWarehouseMaterial.setStorageId(mesBaseBarcodeInfo.getMaterialId()); + R isExistWarehouseMaterial = remoteWmsService.isExistWarehouseMaterial(wmsWarehouseMaterial, SecurityConstants.INNER); + if (!isExistWarehouseMaterial.getData()) { + throw new ServiceException("此物料还没有配置仓库信息"); + } + } + String userName = SecurityUtils.getUsername(); Date currentDate = new Date(); diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsBaseWarehouseController.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsBaseWarehouseController.java index b9426a08..e47d3b07 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsBaseWarehouseController.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsBaseWarehouseController.java @@ -165,16 +165,23 @@ public class WmsBaseWarehouseController extends BaseController { } - @Log(title = "仓库管理", businessType = BusinessType.ALLOCATE) @PostMapping("/allocateVirtualMaterial") @InnerAuth - public R allocateVirtualMaterial(@RequestBody WmsWarehouseMaterial wmsWarehouseMaterial) { + public R allocateVirtualMaterial(@RequestBody WmsWarehouseMaterial wmsWarehouseMaterial) { boolean isSuccess = wmsWarehouseMaterialService.insertWmsWarehouseMaterial(wmsWarehouseMaterial) > 0; return R.ok(isSuccess); } + @PostMapping("/isExistWarehouseMaterial") + @InnerAuth + public R isExistWarehouseMaterial(@RequestBody WmsWarehouseMaterial wmsWarehouseMaterial) { + List wmsWarehouseMaterials = wmsWarehouseMaterialService.selectWmsWarehouseMaterialList(wmsWarehouseMaterial); + boolean isSuccess = wmsWarehouseMaterials != null && !wmsWarehouseMaterials.isEmpty(); + return R.ok(isSuccess); + } + // /** // * 根据仓库分配可入库物料信息 diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsMobileController.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsMobileController.java index 480ca29d..2f6e9cf9 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsMobileController.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsMobileController.java @@ -412,7 +412,7 @@ public class WmsMobileController extends BaseController { @Log(title = "组装返库", businessType = BusinessType.INSERT) @PostMapping(("/assembleBack")) public AjaxResult assembleBack(@Validated @RequestBody WmsAssembleOutstockVo wmsAssembleOutstockVo) { - if(!wmsAssembleOutstockVo.getMaterialBarcode().equals("")) { + if (!wmsAssembleOutstockVo.getMaterialBarcode().equals("")) { throw new ServiceException("组装返库"); } return toAjax(1); @@ -432,12 +432,6 @@ public class WmsMobileController extends BaseController { //todo:入库时校验warehousematerial,入库出库需要校验库位状态,是否是移库合库锁定等 - - - - - - /** * 人工申请移库 */ @@ -455,7 +449,7 @@ public class WmsMobileController extends BaseController { public TableDataInfo getMoveList(WmsMove wmsMove) { startPage(); wmsMove.setMoveWay(WmsConstants.WMS_MOVEMERGE_WAY_MANUAL); - wmsMove.setExecuteStatusStr(WmsConstants.WMS_EXECUTE_STATUS_TOEXECUTE + "," + WmsConstants.WMS_MOVE_EXECUTE_STATUS_EXECUTING+ "," + WmsConstants.WMS_MOVE_EXECUTE_STATUS_OUTSTOCK_FINISH); + wmsMove.setExecuteStatusStr(WmsConstants.WMS_EXECUTE_STATUS_TOEXECUTE + "," + WmsConstants.WMS_MOVE_EXECUTE_STATUS_EXECUTING + "," + WmsConstants.WMS_MOVE_EXECUTE_STATUS_OUTSTOCK_FINISH); List wmsMoves = wmsMoveService.selectWmsMoveJoinList(wmsMove); return getDataTable(wmsMoves); } @@ -491,7 +485,6 @@ public class WmsMobileController extends BaseController { } - /** * 获取盘点任务列表 */ @@ -550,6 +543,7 @@ public class WmsMobileController extends BaseController { //TODO 盘点中的不能进行移库合库? + /** * 确认盘点 */ @@ -560,7 +554,6 @@ public class WmsMobileController extends BaseController { } - /** * 盘点完成 */ @@ -569,4 +562,54 @@ public class WmsMobileController extends BaseController { public AjaxResult completeInventoryCheck(@RequestBody WmsInventoryCheck wmsInventoryCheck) { return success(wmsInventoryCheckService.completeInventoryCheck(wmsInventoryCheck)); } + + + /** + * 退货出库 + */ + @Log(title = "退货出库", businessType = BusinessType.INSERT) + @PostMapping(("/returnOutstock")) + public AjaxResult returnOutstock(@RequestBody WmsReturnOutstockVo wmsReturnOutstockVo) { + return success(wmsRawOutstockService.returnOutstock(wmsReturnOutstockVo)); + } + + + /** + * 获取退货出库信息 + */ + @GetMapping(value = "/getReturnRawOutstocks") + public TableDataInfo getReturnRawOutstocks(WmsRawOutstock wmsRawOutstock) { + startPage(); + wmsRawOutstock.setTaskType(WmsConstants.WMS_RAW_OUTSTOCK_TASK_TYPE_RETURN_OUTSTOCK); + return getDataTable(wmsRawOutstockService.selectWmsRawOutstockList(wmsRawOutstock)); + } + + + /** + * 锁定库位 + */ + @Log(title = "库位", businessType = BusinessType.LOCK) + @PostMapping(("/lockLocation")) + public AjaxResult lockLocation(@RequestBody WmsLocationLockUnLockVo wmsLocationLockUnLockVo) { + return success(wmsBaseLocationService.lockWmsBaseLocationByLocationCode(wmsLocationLockUnLockVo.getLocationCode())); + } + + + /** + * 解锁库位 + */ + @Log(title = "库位", businessType = BusinessType.UNLOCK) + @PostMapping(("/unlockLocation")) + public AjaxResult unlockLocation(@RequestBody WmsLocationLockUnLockVo wmsLocationLockUnLockVo) { + return success(wmsBaseLocationService.unlockWmsBaseLocationByLocationCode(wmsLocationLockUnLockVo.getLocationCode())); + } + + + @GetMapping(value = "/getLockLocations") + public AjaxResult getLockLocations(WmsBaseLocation wmsBaseLocation) { + Map> locationMap = wmsBaseLocationService.getLocationCodesGroupByWarehouse(wmsBaseLocation); + System.out.println(locationMap); + return success(locationMap); + } + } diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/WmsRawInstock.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/WmsRawInstock.java index 0e7249ed..7830b0cf 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/WmsRawInstock.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/WmsRawInstock.java @@ -93,7 +93,7 @@ public class WmsRawInstock extends BaseEntity private String applyBy; /** 入库时间 */ - @JsonFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "入库时间", width = 30, dateFormat = "yyyy-MM-dd") private Date applyDate; diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/WmsRawOutstock.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/WmsRawOutstock.java index e6ea146e..0ecb16d9 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/WmsRawOutstock.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/WmsRawOutstock.java @@ -153,7 +153,7 @@ public class WmsRawOutstock extends BaseEntity { /** * 申请时间 */ - @JsonFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "申请时间", width = 30, dateFormat = "yyyy-MM-dd") private Date applyDate; diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/vo/WmsLocationLockUnLockVo.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/vo/WmsLocationLockUnLockVo.java new file mode 100644 index 00000000..fa8d18b0 --- /dev/null +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/vo/WmsLocationLockUnLockVo.java @@ -0,0 +1,21 @@ +package com.hw.wms.domain.vo; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @Description: 库位锁库解锁VO + * @ClassName: WmsLocationLockUnLockVo + * @Author : xins + * @Date :2024-10-29 + * @Version :1.0 + */ +@Data +public class WmsLocationLockUnLockVo { + //库位码 + @NotBlank(message="库位码必须输入") + private String locationCode; + + +} diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/vo/WmsReturnOutstockVo.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/vo/WmsReturnOutstockVo.java new file mode 100644 index 00000000..55688de7 --- /dev/null +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/vo/WmsReturnOutstockVo.java @@ -0,0 +1,28 @@ +package com.hw.wms.domain.vo; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +/** + * @Description: 退库出库记录VO + * @ClassName: WmsReturnOutstockVo + * @Author : xins + * @Date :2024-10-29 + * @Version :1.0 + */ +@Data +public class WmsReturnOutstockVo { + //库位码 + @NotBlank(message="库位码必须输入") + private String locationCode; + + //库位码 + private String materialBarcode; + + private BigDecimal returnAmount; + + +} diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsBaseLocationService.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsBaseLocationService.java index 5e2f32a8..1908d38d 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsBaseLocationService.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsBaseLocationService.java @@ -1,6 +1,7 @@ package com.hw.wms.service; import java.util.List; +import java.util.Map; import com.hw.common.core.utils.DateUtils; import com.hw.wms.domain.WmsBaseLocation; @@ -77,6 +78,14 @@ public interface IWmsBaseLocationService */ public int lockWmsBaseLocation(Long locationId); + /** + * 锁定库位 + * + * @param locationCode 库位编码 + * @return 结果 + */ + public int lockWmsBaseLocationByLocationCode(String locationCode); + /** * 解锁库位 * @@ -85,6 +94,14 @@ public interface IWmsBaseLocationService */ public int unlockWmsBaseLocation(Long locationId); + /** + * 解锁库位 + * + * @param locationCode 库位编码 + * @return 结果 + */ + public int unlockWmsBaseLocationByLocationCode(String locationCode); + /** * 打印库位或料箱条码 * @@ -110,4 +127,10 @@ public interface IWmsBaseLocationService */ public int deleteWmsLocationBarcodeByLocationBarcodeIds(Long[] locationBarcodeIds); + /** + * 根据仓库group 查询已锁库位的库位信息 + * @param wmsBaseLocation + * @return + */ + public Map> getLocationCodesGroupByWarehouse(WmsBaseLocation wmsBaseLocation); } diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsRawOutstockService.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsRawOutstockService.java index 17137c9f..f68fcddd 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsRawOutstockService.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsRawOutstockService.java @@ -155,5 +155,12 @@ public interface IWmsRawOutstockService * @return */ public WmsRawOutstock getNewestOutstockCabinet(WmsRawOutstock wmsRawOutstock); + + /** + * 退货出库 + * @param wmsReturnOutstockVo + * @return + */ + public int returnOutstock(WmsReturnOutstockVo wmsReturnOutstockVo); } diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsBaseLocationServiceImpl.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsBaseLocationServiceImpl.java index 0adc3207..be4fbc6d 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsBaseLocationServiceImpl.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsBaseLocationServiceImpl.java @@ -1,6 +1,7 @@ package com.hw.wms.service.impl; import com.hw.common.core.constant.SecurityConstants; +import com.hw.common.core.constant.WmsConstants; import com.hw.common.core.enums.WmsLocationStatus; import com.hw.common.core.exception.ServiceException; import com.hw.common.core.utils.DateUtils; @@ -19,10 +20,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * 库位Service业务层处理 @@ -128,6 +127,8 @@ public class WmsBaseLocationServiceImpl implements IWmsBaseLocationService { } + + /** * 锁定库位 * @@ -139,6 +140,24 @@ public class WmsBaseLocationServiceImpl implements IWmsBaseLocationService { // wmsBaseLocation.setCreateTime(DateUtils.getNowDate()); // return wmsBaseLocationMapper.insertWmsBaseLocation(wmsBaseLocation); WmsBaseLocation baseLocation = wmsBaseLocationMapper.selectWmsBaseLocationByLocationId(locationId); + return this.lockLocation(baseLocation); + } + + /** + * 锁定库位 + * + * @param locationCode 库位编码 + * @return 结果 + */ + @Override + public int lockWmsBaseLocationByLocationCode(String locationCode) { +// wmsBaseLocation.setCreateTime(DateUtils.getNowDate()); +// return wmsBaseLocationMapper.insertWmsBaseLocation(wmsBaseLocation); + WmsBaseLocation baseLocation = wmsBaseLocationMapper.selectWmsBaseLocationByLocationCode(locationCode); + return this.lockLocation(baseLocation); + } + + public int lockLocation(WmsBaseLocation baseLocation){ String locationStatus = baseLocation.getLocationStatus(); if (locationStatus.equals(WmsLocationStatus.MANUALLOCK.getCode())) { return 1; @@ -151,6 +170,7 @@ public class WmsBaseLocationServiceImpl implements IWmsBaseLocationService { return wmsBaseLocationMapper.updateWmsBaseLocation(baseLocation); } + /** * 解锁库位 * @@ -160,6 +180,22 @@ public class WmsBaseLocationServiceImpl implements IWmsBaseLocationService { @Override public int unlockWmsBaseLocation(Long locationId) { WmsBaseLocation baseLocation = wmsBaseLocationMapper.selectWmsBaseLocationByLocationId(locationId); + return this.unlockLocation(baseLocation); + } + + /** + * 解锁库位 + * + * @param locationCode 库位编码 + * @return 结果 + */ + @Override + public int unlockWmsBaseLocationByLocationCode(String locationCode) { + WmsBaseLocation baseLocation = wmsBaseLocationMapper.selectWmsBaseLocationByLocationCode(locationCode); + return this.unlockLocation(baseLocation); + } + + public int unlockLocation(WmsBaseLocation baseLocation) { String locationStatus = baseLocation.getLocationStatus(); if (locationStatus.equals(WmsLocationStatus.NORMAL.getCode())) { return 1; @@ -247,4 +283,23 @@ public class WmsBaseLocationServiceImpl implements IWmsBaseLocationService { public int deleteWmsLocationBarcodeByLocationBarcodeIds(Long[] locationBarcodeIds) { return wmsLocationBarcodeMapper.deleteWmsLocationBarcodeByLocationBarcodeIds(locationBarcodeIds); } + + + /** + * 根据仓库group 查询已锁库位的库位信息 + * @param wmsBaseLocation + * @return + */ + @Override + public Map> getLocationCodesGroupByWarehouse(WmsBaseLocation wmsBaseLocation){ + wmsBaseLocation.setLocationStatus(WmsConstants.WMS_BASE_LOCATION_STATUS_MANUAL_LOCK); + List wmsBaseLocations = wmsBaseLocationMapper.selectWmsBaseLocationJoinList(wmsBaseLocation); + Map> locationCodesByWarehouse = wmsBaseLocations.stream() + .collect(Collectors.groupingBy( + WmsBaseLocation::getWarehouseName, + Collectors.mapping(WmsBaseLocation::getLocationCode, Collectors.toList()) + )); + + return locationCodesByWarehouse; + } } diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsRawOutstockServiceImpl.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsRawOutstockServiceImpl.java index c93d27d1..b4186c88 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsRawOutstockServiceImpl.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsRawOutstockServiceImpl.java @@ -1243,7 +1243,7 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService { public BigDecimal directOutstockUpdateRawStock(String locationCode, String materialBarcode, BigDecimal outstockAmount, - String userName, Date currentDate) { + String userName, Date currentDate) { WmsRawStock wmsRawStock = wmsRawStockMapper.selectRawStockByBarcode(materialBarcode); if (wmsRawStock == null) { throw new ServiceException("没找到库存信息"); @@ -1313,4 +1313,98 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService { wmsRawOutstock.setTaskType(WmsConstants.WMS_RAW_OUTSTOCK_TASK_TYPE_PRODUCTION_SPLIT); return wmsRawOutstockMapper.selectNewestWmsRawOutstock(wmsRawOutstock); } + + + /** + * 退货出库 + * @param wmsReturnOutstockVo + * @return + */ + @Transactional(rollbackFor = Exception.class) + @Override + public int returnOutstock(WmsReturnOutstockVo wmsReturnOutstockVo) { + String locationCode = wmsReturnOutstockVo.getLocationCode(); + WmsBaseLocation baseLocation = wmsBaseLocationMapper.selectWmsBaseLocationByLocationCode(locationCode); + if (baseLocation == null) { + throw new ServiceException("库位编码错误"); + } + + Date currentDate = new Date(); + String userName = SecurityUtils.getUsername(); + WmsBaseWarehouse baseWarehouse = wmsBaseWarehouseMapper.selectWmsBaseWarehouseByWarehouseId(baseLocation.getWarehouseId()); + String warehouseType = baseWarehouse.getWarehouseType(); + String executeStatus = ""; + BigDecimal outstockAmount = BigDecimal.ZERO; + BigDecimal realOutstockAmount = BigDecimal.ZERO; + WmsRawStock wmsRawStock; + if (warehouseType.equals(WmsConstants.WMS_WAREHOUSE_TYPE_AGV)) {//AGV仓库 + executeStatus = WmsConstants.WMS_EXECUTE_STATUS_TOEXECUTE; + outstockAmount = BigDecimal.ONE; + WmsRawStock queryRawStock = new WmsRawStock(); + queryRawStock.setLocationCode(locationCode); + List wmsRawStocks = wmsRawStockMapper.selectWmsRawStockInList(queryRawStock); + if (wmsRawStocks == null || wmsRawStocks.isEmpty()) { + throw new ServiceException("此库位无库存信息"); + } + + wmsRawStock = wmsRawStocks.get(0); + + } else if (warehouseType.equals(WmsConstants.WMS_WAREHOUSE_TYPE_NORMAL)) { + executeStatus = WmsConstants.WMS_EXECUTE_STATUS_FINISH; + String materialBarcode = wmsReturnOutstockVo.getMaterialBarcode(); + BigDecimal returnAmount = wmsReturnOutstockVo.getReturnAmount(); + outstockAmount = returnAmount; + realOutstockAmount = returnAmount; + if (StringUtils.isEmpty(materialBarcode)) { + throw new ServiceException("请输入或扫描物料条码"); + } + if (returnAmount == null) { + throw new ServiceException("请输入退货数量"); + } + + wmsRawStock = wmsRawStockMapper.selectRawStockByBarcode(materialBarcode); + if (wmsRawStock == null) { + throw new ServiceException("无库存信息"); + } + BigDecimal totalAmount = wmsRawStock.getTotalAmount(); + BigDecimal occupyAmount = wmsRawStock.getOccupyAmount() == null ? BigDecimal.ZERO : wmsRawStock.getOccupyAmount(); + BigDecimal availableAmount = totalAmount.subtract(occupyAmount); + if (returnAmount.compareTo(availableAmount) > 0) { + throw new ServiceException("可用库存只有:" + availableAmount); + } + + if (returnAmount.compareTo(totalAmount) == 0) { + wmsRawStockMapper.deleteWmsRawStockByRawStockId(wmsRawStock.getRawStockId()); + } else { + wmsRawStock.setTotalAmount(totalAmount.subtract(returnAmount)); + wmsRawStock.setUpdateBy(userName); + wmsRawStock.setUpdateDate(currentDate); + wmsRawStockMapper.updateWmsRawStock(wmsRawStock); + } + + + } else { + throw new ServiceException("仓库类型有误"); + } + String operationType = WmsConstants.OPERATION_TYPE_MAP.get(warehouseType); + + WmsRawOutstock wmsRawOutstock = new WmsRawOutstock(); + wmsRawOutstock.setTaskCode(Seq.getId(Seq.rawOutstockSeqType, Seq.rawOutstockSeqCode)); + wmsRawOutstock.setWarehouseId(baseWarehouse.getWarehouseId()); + wmsRawOutstock.setLocationCode(locationCode); + wmsRawOutstock.setSaleOrderId(wmsRawStock.getSaleOrderId()); + wmsRawOutstock.setMaterialId(wmsRawStock.getMaterialId()); + wmsRawOutstock.setMaterialBatch(wmsRawStock.getInstockBatch()); + wmsRawOutstock.setOutstockAmount(outstockAmount); + wmsRawOutstock.setRealOutstockAmount(realOutstockAmount); + wmsRawOutstock.setOperationType(operationType); + wmsRawOutstock.setAuditStatus(WmsConstants.WMS_AUDIT_STATUS_PASS); + wmsRawOutstock.setExecuteStatus(executeStatus); + wmsRawOutstock.setTaskType(WmsConstants.WMS_RAW_OUTSTOCK_TASK_TYPE_RETURN_OUTSTOCK); + wmsRawOutstock.setApplyBy(userName); + wmsRawOutstock.setApplyDate(currentDate); + + return wmsRawOutstockMapper.insertWmsRawOutstock(wmsRawOutstock); + + } } diff --git a/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsRawInstockMapper.xml b/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsRawInstockMapper.xml index f22d62d3..1d86a15b 100644 --- a/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsRawInstockMapper.xml +++ b/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsRawInstockMapper.xml @@ -203,6 +203,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + order by wri.apply_date desc + + + + \ No newline at end of file diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsMobileController.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsMobileController.java index 2f6e9cf9..9b417b3c 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsMobileController.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsMobileController.java @@ -205,6 +205,7 @@ public class WmsMobileController extends BaseController { WmsRawReturn wmsRawReturn = new WmsRawReturn(); wmsRawReturn.setAuditStatus(WmsConstants.WMS_AUDIT_STATUS_PASS); wmsRawReturn.setExecuteStatus(WmsConstants.WMS_EXECUTE_STATUS_NOT_FINISH); + wmsRawReturn.setOperationType(WmsConstants.WMS_OPERATION_TYPE_MANUAL); List list = wmsRawReturnService.selectWmsRawReturnJoinList(wmsRawReturn); return getDataTable(list); } @@ -429,8 +430,6 @@ public class WmsMobileController extends BaseController { } - //todo:入库时校验warehousematerial,入库出库需要校验库位状态,是否是移库合库锁定等 - /** * 人工申请移库 @@ -492,6 +491,7 @@ public class WmsMobileController extends BaseController { @GetMapping(value = "/getInventoryChecks") public TableDataInfo getInventoryChecks(WmsInventoryCheck queryInventoryCheck) { startPage(); + queryInventoryCheck.setCheckType(WmsConstants.WMS_INVENTORY_CHECK_TYPE_MANUAL); List inventoryChecks = wmsInventoryCheckService.selectWmsInventoryCheckJoinList(queryInventoryCheck); return getDataTable(inventoryChecks); } diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/WmsInventoryCheck.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/WmsInventoryCheck.java index 82f8fafe..8e39f6c3 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/WmsInventoryCheck.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/WmsInventoryCheck.java @@ -33,6 +33,9 @@ public class WmsInventoryCheck extends BaseEntity @Excel(name = "盘点状态(0待盘点", readConverterExp = "暂=无此状态") private String checkStatus; + /**盘点类型(1人工,2调度,3,CTU)*/ + private String checkType; + /** 盘点开始时间 */ @JsonFormat(pattern = "yyyy-MM-dd") @Excel(name = "盘点开始时间", width = 30, dateFormat = "yyyy-MM-dd") @@ -106,6 +109,15 @@ public class WmsInventoryCheck extends BaseEntity { return checkStatus; } + + public String getCheckType() { + return checkType; + } + + public void setCheckType(String checkType) { + this.checkType = checkType; + } + public void setBeginTime(Date beginTime) { this.beginTime = beginTime; diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsInventoryCheckServiceImpl.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsInventoryCheckServiceImpl.java index be0e3320..6986f546 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsInventoryCheckServiceImpl.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsInventoryCheckServiceImpl.java @@ -78,7 +78,7 @@ public class WmsInventoryCheckServiceImpl implements IWmsInventoryCheckService { * @param wmsInventoryCheckVo 进行盘点VO对象 * @return 结果 */ - @Transactional + @Transactional(rollbackFor = Exception.class) @Override public Long insertWmsInventoryCheck(WmsInventoryCheckVo wmsInventoryCheckVo) { Long inventoryCheckId = wmsInventoryCheckVo.getInventoryCheckId(); @@ -89,6 +89,18 @@ public class WmsInventoryCheckServiceImpl implements IWmsInventoryCheckService { String userName = SecurityUtils.getUsername(); Date currentDate = new Date(); + WmsBaseWarehouse baseWarehouse = wmsBaseWarehouseMapper.selectWmsBaseWarehouseByWarehouseId(warehouseId); + String warehouseInstockType = baseWarehouse.getWarehouseInstockType(); + String warehouseType = baseWarehouse.getWarehouseType(); + String inventoryCheckType = ""; + if(warehouseType.equals(WmsConstants.WMS_WAREHOUSE_TYPE_NORMAL)){ + inventoryCheckType = WmsConstants.WMS_INVENTORY_CHECK_TYPE_MANUAL; + }else if(warehouseType.equals(WmsConstants.WMS_WAREHOUSE_TYPE_AGV)){ + inventoryCheckType = WmsConstants.WMS_INVENTORY_CHECK_TYPE_WCS; + }else{ + throw new ServiceException("请选择人工仓库或agv仓库盘库"); + } + if (inventoryCheckId == null || inventoryCheckId.equals(0L) || inventoryCheckId.equals(-1L)) { WmsInventoryCheck queryInventoryCheck = new WmsInventoryCheck(); queryInventoryCheck.setWarehouseId(warehouseId); @@ -105,6 +117,7 @@ public class WmsInventoryCheckServiceImpl implements IWmsInventoryCheckService { WmsInventoryCheck wmsInventoryCheck = new WmsInventoryCheck(); wmsInventoryCheck.setInventoryCheckCode(Seq.getId(Seq.wmsInventoryCheckSeqType, Seq.wmsInventoryCheckSeqCode)); wmsInventoryCheck.setWarehouseId(warehouseId); + wmsInventoryCheck.setCheckType(inventoryCheckType); wmsInventoryCheck.setLocationAmount((long) locationAmount); wmsInventoryCheck.setInventoryingAmount((long) locationCodes.size()); wmsInventoryCheck.setBeginTime(currentDate); @@ -122,8 +135,7 @@ public class WmsInventoryCheckServiceImpl implements IWmsInventoryCheckService { wmsInventoryCheckMapper.updateWmsInventoryCheck(toUpdatedInventoryCheck); } - WmsBaseWarehouse baseWarehouse = wmsBaseWarehouseMapper.selectWmsBaseWarehouseByWarehouseId(warehouseId); - String warehouseInstockType = baseWarehouse.getWarehouseInstockType(); + List wmsInventoryCheckDetails = new ArrayList<>(); for (String locationCode : locationCodes) { diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsMoveServiceImpl.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsMoveServiceImpl.java index 14ff7ec0..4f4fba85 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsMoveServiceImpl.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsMoveServiceImpl.java @@ -184,15 +184,41 @@ public class WmsMoveServiceImpl implements IWmsMoveService { WmsBaseWarehouse baseWareHouse = wmsBaseWarehouseMapper. selectWmsBaseWarehouseByWarehouseId(oriLocation.getWarehouseId()); - if (!baseWareHouse.getWarehouseType().equals(WmsConstants.WMS_WAREHOUSE_TYPE_NORMAL)) { - throw new ServiceException("请选择人工仓库的库位进行移库"); - } - - //todo:判断有没有还没有完成从此原库位到目标库位的移库任务(预防还没修改库位状态生成此数据,连续点击问题,或者已经移库出库完成的情况不能将原库位再设置移库记录) - String warehouseInstockType = baseWareHouse.getWarehouseInstockType(); - + String warehouseType = baseWareHouse.getWarehouseType(); Date currentDate = new Date(); String userName = SecurityUtils.getUsername(); + String warehouseInstockType = baseWareHouse.getWarehouseInstockType(); + String moveWay = "", operationType = ""; + if (warehouseType.equals(WmsConstants.WMS_WAREHOUSE_TYPE_WORKBIN_AGV)) { + throw new ServiceException("立库库位移库请在调度页面进行移库"); + } else if (warehouseType.equals(WmsConstants.WMS_WAREHOUSE_TYPE_AGV)) { + moveWay = WmsConstants.WMS_MOVEMERGE_WAY_AGV; + operationType = WmsConstants.MWS_OPERATION_TYPE_DISPATCHD; + + WmsMove queryMove = new WmsMove(); + queryMove.setWarehouseId(oriLocation.getWarehouseId()); + queryMove.setExecuteStatusStr(WmsConstants.WMS_EXECUTE_STATUS_TOEXECUTE + "," + WmsConstants.WMS_MOVE_EXECUTE_STATUS_EXECUTING + "," + WmsConstants.WMS_MOVE_EXECUTE_STATUS_OUTSTOCK_FINISH); + + List wmsMoveList = wmsMoveMapper.selectWmsMoveList(queryMove); + if (wmsMoveList != null && !wmsMoveList.isEmpty()) { + throw new ServiceException("有正在执行的移库任务"); + } + + } else { + moveWay = WmsConstants.WMS_MOVEMERGE_WAY_MANUAL; + operationType = WmsConstants.WMS_OPERATION_TYPE_MANUAL; + + oriLocation.setLocationStatus(WmsConstants.WMS_BASE_LOCATION_STATUS_MOVE_LOCK); + oriLocation.setUpdateTime(currentDate); + oriLocation.setUpdateBy(userName); + wmsBaseLocationMapper.updateWmsBaseLocation(oriLocation); + + targetLocation.setLocationStatus(WmsConstants.WMS_BASE_LOCATION_STATUS_MOVE_LOCK); + targetLocation.setUpdateTime(currentDate); + targetLocation.setUpdateBy(userName); + wmsBaseLocationMapper.updateWmsBaseLocation(targetLocation); + } + WmsMove wmsMove = new WmsMove(); String taskCode = Seq.getId(Seq.wmsMoveSeqType, Seq.wmsMoveSeqCode); @@ -201,8 +227,8 @@ public class WmsMoveServiceImpl implements IWmsMoveService { wmsMove.setOriLocationCode(wmsMoveApplyVo.getOriLocationCode()); wmsMove.setTargetLocationCode(wmsMoveApplyVo.getTargetLocationCode()); wmsMove.setExecuteStatus(WmsConstants.WMS_MOVE_EXECUTE_STATUS_TOEXECUTE); - wmsMove.setOperationType(WmsConstants.WMS_OPERATION_TYPE_MANUAL); - wmsMove.setMoveWay(WmsConstants.WMS_MOVEMERGE_WAY_MANUAL); + wmsMove.setOperationType(operationType); + wmsMove.setMoveWay(moveWay); wmsMove.setMoveType(wmsMoveApplyVo.getMoveType()); wmsMove.setAuditStatus(WmsConstants.WMS_AUDIT_STATUS_PASS); wmsMove.setExecuteStatus(WmsConstants.WMS_EXECUTE_STATUS_TOEXECUTE); @@ -213,6 +239,8 @@ public class WmsMoveServiceImpl implements IWmsMoveService { List toInsertedMoveDetails = new ArrayList<>(); + //判断库位状态,如果原库位和目标库位是深库位,需要判断浅库位状态,需要判断对应的浅库位有没有库存 + if (warehouseInstockType.equals(WmsConstants.WMS_WAREHOUSE_INSTOCK_TYPE_RAW)) {//如果是原材料 WmsRawStock queryRawStock = new WmsRawStock(); queryRawStock.setLocationCode(oriLocationCode); @@ -268,21 +296,70 @@ public class WmsMoveServiceImpl implements IWmsMoveService { toInsertedMoveDetails = getMoveDetailsByProductStocks(productStocks, wmsMove, userName, currentDate); } - oriLocation.setLocationStatus(WmsConstants.WMS_BASE_LOCATION_STATUS_MOVE_LOCK); - oriLocation.setUpdateTime(currentDate); - oriLocation.setUpdateBy(userName); - wmsBaseLocationMapper.updateWmsBaseLocation(oriLocation); + if (warehouseType.equals(WmsConstants.WMS_WAREHOUSE_TYPE_NORMAL)) { + wmsMoveMapper.batchWmsMoveDetail(toInsertedMoveDetails); + } else if (warehouseType.equals(WmsConstants.WMS_WAREHOUSE_TYPE_AGV)) { + this.checkFrontLocationStock(oriLocation, warehouseInstockType, "1"); + this.checkFrontLocationStock(targetLocation, warehouseInstockType, "2"); + } - targetLocation.setLocationStatus(WmsConstants.WMS_BASE_LOCATION_STATUS_MOVE_LOCK); - targetLocation.setUpdateTime(currentDate); - targetLocation.setUpdateBy(userName); - wmsBaseLocationMapper.updateWmsBaseLocation(targetLocation); - int rows = wmsMoveMapper.batchWmsMoveDetail(toInsertedMoveDetails); - - return rows; + return 1; } + private void checkFrontLocationStock(WmsBaseLocation baseLocation, String warehouseInstockType, String moveType) { + if (baseLocation.getLocDeep() != null && baseLocation.getLocDeep().equals(WmsConstants.WMS_BASE_LOCATION_LOC_DEEP_BACK)) { + WmsBaseLocation queryBaseLocation = new WmsBaseLocation(); + Long locRow = baseLocation.getLocRow(); + Long frontRow; + if (locRow % 2 == 0) { + frontRow = locRow - 1; + } else { + frontRow = locRow + 1; + } + + queryBaseLocation.setWarehouseId(baseLocation.getWarehouseId()); + queryBaseLocation.setLocColumn(baseLocation.getLocColumn()); + queryBaseLocation.setLayerNum(baseLocation.getLayerNum()); + queryBaseLocation.setLocRow(frontRow); + queryBaseLocation.setLocDeep(WmsConstants.WMS_BASE_LOCATION_LOC_DEEP_FRONT); + List baseLocationList = wmsBaseLocationMapper.selectWmsBaseLocationList(queryBaseLocation); + String locationName = ""; + if (moveType.equals("1")) { + locationName = "原库位"; + } else { + locationName = "目标库位"; + } + if (baseLocationList == null || baseLocationList.isEmpty()) { + throw new ServiceException(locationName + "的浅库位未找到"); + } + WmsBaseLocation frontLocation = baseLocationList.get(0); + + if (!frontLocation.getLocationStatus().equals(WmsConstants.WMS_BASE_LOCATION_STATUS_NORMAL)) { + throw new ServiceException(locationName + "的浅库位状态为" + WmsConstants.LOCATION_STATUS_PROMPT_MAP.get(frontLocation.getLocationStatus())); + } + + if (warehouseInstockType.equals(WmsConstants.WMS_WAREHOUSE_INSTOCK_TYPE_RAW)) {//如果是原材料 + WmsRawStock queryRawStock = new WmsRawStock(); + queryRawStock.setLocationCode(frontLocation.getLocationCode()); + List wmsRawStocks = wmsRawStockMapper.selectWmsRawStockInList(queryRawStock); + if (wmsRawStocks != null && !wmsRawStocks.isEmpty()) { + throw new ServiceException(locationName + "的浅库位有库存,无法申请移库"); + + } + } else { + WmsProductStock queryProductStock = new WmsProductStock(); + queryProductStock.setLocationCode(frontLocation.getLocationCode()); + List productStocks = wmsProductStockMapper.selectWmsProductStockInList(queryProductStock); + if (productStocks != null && !productStocks.isEmpty()) { + throw new ServiceException(locationName + "的浅库位有库存,无法申请移库"); + } + } + + } + } + + private List getMoveDetailsByRawStocks(List wmsRawStocks, WmsMove wmsMove, String userName, Date currentDate) { List wmsMoveDetailList = new ArrayList<>(); @@ -718,12 +795,31 @@ public class WmsMoveServiceImpl implements IWmsMoveService { throw new ServiceException("没有此移库信息"); } + //根据物料ID找移库明细(主要原因是移库入库的库位的物料条码跟之前的条码不一定一样,物料条码都是贴在料框上的) WmsMoveDetail existedMoveDetail = wmsMoveDetailList.stream().filter(moveDetail -> - moveDetail.getMaterialBarcode().equals(materialBarcode)).findFirst().get(); + moveDetail.getMaterialId().equals(baseBarcodeInfo.getMaterialId())).findFirst().get(); if (existedMoveDetail == null) { throw new ServiceException("没有此移库信息"); } + + String oriBarcodeInfoStr = existedMoveDetail.getMaterialBarcode(); + R oriBarcodeInfoR = remoteMesService.getBarcode(oriBarcodeInfoStr, SecurityConstants.INNER); + MesBaseBarcodeInfo oriBarcodeInfo = oriBarcodeInfoR.getData(); + if (oriBarcodeInfo == null) { + throw new ServiceException("原物料条码有误"); + } + + Long targetPurchaseOrderId = baseBarcodeInfo.getPurchaseOrderId() == null ? 0L : baseBarcodeInfo.getPurchaseOrderId(); + Long oriPurchaseOrderId = oriBarcodeInfo.getPurchaseOrderId() == null ? 0L : oriBarcodeInfo.getPurchaseOrderId(); + + if (!targetPurchaseOrderId.equals(oriPurchaseOrderId)) { + String targetPoNo = baseBarcodeInfo.getPoNo() == null ? "" : baseBarcodeInfo.getPoNo(); + String oriPoNo = oriBarcodeInfo.getPoNo() == null ? "" : oriBarcodeInfo.getPoNo(); + throw new ServiceException("原物料条码(" + oriPoNo + ")和此条码采购订单(" + targetPoNo + ")不一致"); + } + + String detailExecuteStatus = existedMoveDetail.getExecuteStatus(); if (detailExecuteStatus.equals(WmsConstants.WMS_MOVE_EXECUTE_STATUS_INSTOCK_FINISH)) { @@ -856,7 +952,6 @@ public class WmsMoveServiceImpl implements IWmsMoveService { } - /** * 查询移库合库记录,Join material * diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsRawInstockServiceImpl.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsRawInstockServiceImpl.java index bebdff60..490abcd0 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsRawInstockServiceImpl.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsRawInstockServiceImpl.java @@ -163,6 +163,10 @@ public class WmsRawInstockServiceImpl implements IWmsRawInstockService { throw new ServiceException("库位编码有误"); } + if(!baseLocation.getLocationStatus().equals(WmsConstants.WMS_BASE_LOCATION_STATUS_NORMAL)){ + throw new ServiceException("不能入库,库位状态为:"+WmsConstants.LOCATION_STATUS_PROMPT_MAP.get(baseLocation.getLocationStatus())); + } + BigDecimal instockAmount = wmsRawInstockVo.getInstockAmount(); if (baseBarcodeInfo.getBatchFlag().equals(MesConstants.IS_BATCH)) { if (instockAmount.compareTo(BigDecimal.ONE) < 0) { diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsRawOutstockServiceImpl.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsRawOutstockServiceImpl.java index b4186c88..9c6e3a9c 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsRawOutstockServiceImpl.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsRawOutstockServiceImpl.java @@ -328,10 +328,25 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService { throw new ServiceException("库位码有误"); } + if (!baseLocation.getLocationStatus().equals(WmsConstants.WMS_BASE_LOCATION_STATUS_NORMAL)) { + throw new ServiceException("不能出库,库位状态为:" + WmsConstants.LOCATION_STATUS_PROMPT_MAP.get(baseLocation.getLocationStatus())); + } + //判断是否有此出库任务,人工出库的同一个出库记录,同一个库位、同一个物料对应一个明细(agv的有可能是多个) WmsRawOutstock wmsRawOutstock; if (rawOutstockId != null) { wmsRawOutstock = wmsRawOutstockMapper.selectWmsRawOutstockByRawOutstockId(rawOutstockId); + if (!wmsRawOutstock.getWarehouseId().equals(baseLocation.getWarehouseId())) { + throw new ServiceException("扫描库位所在仓库与选择出库单不符合"); + } + if (!wmsRawOutstock.getMaterialId().equals(baseBarcodeInfo.getMaterialId())) { + throw new ServiceException("扫描物料与选择出库单不符合"); + } + + if (wmsRawOutstock.getExecuteStatus().equals(WmsConstants.WMS_EXECUTE_STATUS_FINISH)) { + throw new ServiceException("此出库单已出库完成,不需要再出"); + } + } else { wmsRawOutstock = this.getWmsRawOutstock(baseLocation, baseBarcodeInfo); } @@ -346,7 +361,6 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService { throw new ServiceException("此物料已经出库,不能重复出库"); } - //todo 判断质检状态 // if (wmsRawOutstockDetail.getQualityStatus() != null // && !wmsRawOutstockDetail.getQualityStatus().equals(WmsConstants.WMS_QUALITY_STATUS_PASS)) { // throw new ServiceException("质检通过才能出库"); @@ -466,6 +480,8 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService { @Override public List selectAuditPassRawOutstocks(WmsRawOutstock wmsRawOutstock) { wmsRawOutstock.setAuditStatus(WmsConstants.WMS_AUDIT_STATUS_PASS); + wmsRawOutstock.setExecuteStatusStr(WmsConstants.WMS_EXECUTE_STATUS_TOEXECUTE + "," + WmsConstants.WMS_EXECUTE_STATUS_EXECUTING); + wmsRawOutstock.setOperationType(WmsConstants.WMS_OPERATION_TYPE_MANUAL); List wmsRawOutstocks = wmsRawOutstockMapper.selectWmsRawOutstockJoinMaterialList(wmsRawOutstock); return wmsRawOutstocks; } @@ -1317,6 +1333,7 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService { /** * 退货出库 + * * @param wmsReturnOutstockVo * @return */ @@ -1329,9 +1346,14 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService { throw new ServiceException("库位编码错误"); } + Date currentDate = new Date(); String userName = SecurityUtils.getUsername(); WmsBaseWarehouse baseWarehouse = wmsBaseWarehouseMapper.selectWmsBaseWarehouseByWarehouseId(baseLocation.getWarehouseId()); + if (!baseWarehouse.getWarehouseInstockType().equals(WmsConstants.WMS_WAREHOUSE_INSTOCK_TYPE_RAW)) { + throw new ServiceException("原材料仓库才能退货出库"); + } + String warehouseType = baseWarehouse.getWarehouseType(); String executeStatus = ""; BigDecimal outstockAmount = BigDecimal.ZERO; @@ -1347,6 +1369,15 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService { throw new ServiceException("此库位无库存信息"); } + if (baseLocation.getLocationStatus().equals(WmsConstants.WMS_BASE_LOCATION_STATUS_RETURN_LOCK)) { + throw new ServiceException("此库位已经申请退货出库"); + } + + baseLocation.setLocationStatus(WmsConstants.WMS_BASE_LOCATION_STATUS_RETURN_LOCK); + baseLocation.setUpdateBy(userName); + baseLocation.setUpdateTime(currentDate); + wmsBaseLocationMapper.updateWmsBaseLocation(baseLocation); + wmsRawStock = wmsRawStocks.get(0); } else if (warehouseType.equals(WmsConstants.WMS_WAREHOUSE_TYPE_NORMAL)) { diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsRawReturnServiceImpl.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsRawReturnServiceImpl.java index c2cf5e1f..404d0537 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsRawReturnServiceImpl.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsRawReturnServiceImpl.java @@ -276,7 +276,6 @@ public class WmsRawReturnServiceImpl implements IWmsRawReturnService { BigDecimal returnAmount = wmsRawReturnConfirmVo.getReturnAmount(); String locationCode = wmsRawReturnConfirmVo.getLocationCode(); - //todo: 判断质检状态,超出库位数量限制,超期判断 // if (wmsRawReturnDetail.getQualityStatus() != null // && !wmsRawReturnDetail.getQualityStatus().equals(WmsConstants.RAW_RETURN_DETAIL_QUALITY_STATUS_PASS)) { // throw new ServiceException("质检通过才能出库"); @@ -288,11 +287,11 @@ public class WmsRawReturnServiceImpl implements IWmsRawReturnService { R mesBaseBarcodeInfoR = remoteMesService.getBarcode(materialBarcode, SecurityConstants.INNER); if (mesBaseBarcodeInfoR == null) { - throw new ServiceException("物料编码错误"); + throw new ServiceException("物料条码错误"); } MesBaseBarcodeInfo mesBaseBarcodeInfo = mesBaseBarcodeInfoR.getData(); if (mesBaseBarcodeInfo == null) { - throw new ServiceException("物料编码错误"); + throw new ServiceException("物料条码错误"); } WmsRawReturn wmsRawReturn = wmsRawReturnMapper.selectOnlyWmsRawReturnByRawReturnId(rawReturnId); if (!wmsRawReturn.getAuditStatus().equals(WmsConstants.WMS_AUDIT_STATUS_PASS)) { @@ -311,13 +310,10 @@ public class WmsRawReturnServiceImpl implements IWmsRawReturnService { // } // } - if (!wmsRawReturn.getMaterialBarcode().equals(materialBarcode)) { - throw new ServiceException("物料编码错误"); - } WmsBaseLocation baseLocation = wmsBaseLocationMapper.selectWmsBaseLocationByLocationCode(locationCode); if (baseLocation == null) { - throw new ServiceException("库位编码有误"); + throw new ServiceException("库位编码有误!"); } if (!baseLocation.getWarehouseId().equals(wmsRawReturn.getWarehouseId())) { @@ -397,7 +393,6 @@ public class WmsRawReturnServiceImpl implements IWmsRawReturnService { wmsRawStock.setLastOutstockTime(mesBaseBarcodeInfo.getLastOutstockDate()); wmsRawStock.setSaleOrderId(mesBaseBarcodeInfo.getSaleOrderId()); wmsRawStock.setSafeFlag(mesBaseBarcodeInfo.getSafeFlag()); -// wmsRawStock.setQualityStatus();//TODO:质检状态 wmsRawStock.setCompleteFlag(WmsConstants.WMS_RAW_STOCK_COMPLETE_FLAG_YES); wmsRawStock.setTotalAmount(wmsRawReturnConfirmVo.getReturnAmount()); wmsRawStock.setCreateBy(userName); diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsStockTotalServiceImpl.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsStockTotalServiceImpl.java index 25b541ff..8c9e7ce7 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsStockTotalServiceImpl.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsStockTotalServiceImpl.java @@ -17,6 +17,7 @@ import com.hw.mes.api.RemoteMesService; import com.hw.mes.api.domain.MesBaseBarcodeInfo; import com.hw.mes.api.domain.MesBaseMaterialInfo; import com.hw.mes.api.domain.MesBaseStationInfo; +import com.hw.mes.api.domain.MesSaleOrderRelate; import com.hw.mes.api.domain.vo.MesBaseBarcodeInfoTransferVo; import com.hw.mes.api.domain.vo.MesSaleOrderTransferVo; import com.hw.wms.config.WmsConfig; @@ -225,9 +226,32 @@ public class WmsStockTotalServiceImpl implements IWmsStockTotalService { } for (WmsStockTotal stockTotal : stockTotalList) { - if (stockTotal.getProductId().equals(0L)) { - stockTotal.setMaterialCode("1111|222"); + if (stockTotal.getMaterialClassfication() != null && + stockTotal.getMaterialClassfication().equals(MesConstants.MES_MATERIAL_CLASSFICATION_VIRTUAL)) { + R> saleOrderRelatesData = remoteMesService.getRelateProductsBySaleOrderId(stockTotal.getSaleOrderId(), SecurityConstants.INNER); + if (saleOrderRelatesData != null) { + StringBuilder productCodes = new StringBuilder(); + StringBuilder productNames = new StringBuilder(); + StringBuilder productSpecs = new StringBuilder(); + List saleOrderRelates = saleOrderRelatesData.getData(); + if (saleOrderRelates != null) { + for (MesSaleOrderRelate mesSaleOrderRelate : saleOrderRelates) { + productCodes.append("|").append(mesSaleOrderRelate.getProductCode()); + productNames.append("|").append(mesSaleOrderRelate.getProductName()); + productSpecs.append("|").append(mesSaleOrderRelate.getProductSpec()); + } + + productCodes.replace(0,1,""); + productNames.replace(0, 1, ""); + productSpecs.replace(0, 1, ""); + + stockTotal.setMaterialCode(productCodes.toString()); + stockTotal.setMaterialName(productNames.toString()); + stockTotal.setMaterialSpec(productSpecs.toString()); + } + } } + } return stockTotalList; diff --git a/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsBaseLocationMapper.xml b/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsBaseLocationMapper.xml index 66399dac..b5d1f1fb 100644 --- a/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsBaseLocationMapper.xml +++ b/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsBaseLocationMapper.xml @@ -45,7 +45,7 @@ - select location_id, warehouse_id, location_code,container_code,agv_position_code, warehouse_floor,loc_row, layer_num, loc_column, active_flag, manual_flag, qty_limit, instock_flag, outstock_flag, location_status, batch_mix, create_by, create_time, update_by, update_time, remark, del_flag, shelf_order, check_order, pick_order, pick_flag, is_open_kn_flag, location_scrap_type, volume_limit, weight_limit, length, width, height from wms_base_location + select location_id, warehouse_id, location_code,container_code,agv_position_code, warehouse_floor,loc_row, layer_num, loc_column, active_flag, manual_flag, qty_limit, instock_flag, outstock_flag, location_status,loc_deep, batch_mix, create_by, create_time, update_by, update_time, remark, del_flag, shelf_order, check_order, pick_order, pick_flag, is_open_kn_flag, location_scrap_type, volume_limit, weight_limit, length, width, height from wms_base_location diff --git a/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsStockTotalMapper.xml b/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsStockTotalMapper.xml index 4de6b75e..b66a0ce6 100644 --- a/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsStockTotalMapper.xml +++ b/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsStockTotalMapper.xml @@ -55,6 +55,7 @@ + @@ -288,6 +289,7 @@ mbmi.material_code, mbmi.material_name, mbmi.material_spec, + mbmi.material_classfication, wst.total_amount, wst.frozen_amount, wst.occupy_amount, From b29811e7daaa30c85a4da03cfb351533e70834f7 Mon Sep 17 00:00:00 2001 From: xs Date: Thu, 31 Oct 2024 08:48:05 +0800 Subject: [PATCH 8/9] =?UTF-8?q?3.3.9=20PDA=E6=8E=A5=E5=8F=A3=EF=BC=9A=20?= =?UTF-8?q?=E5=8E=9F=E6=9D=90=E6=96=99=E8=B4=A8=E6=A3=80=EF=BC=9A=E6=A0=B9?= =?UTF-8?q?=E6=8D=AE=E6=9D=A1=E7=A0=81=E7=B1=BB=E5=9E=8B=EF=BC=8C=E5=A6=82?= =?UTF-8?q?=E6=9E=9C=E6=98=AF=E5=90=88=E5=B9=B6=E6=9D=A1=E7=A0=81=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E9=9C=80=E8=A6=81=E6=89=BE=E5=88=B0=E4=BB=BB=E6=84=8F?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E7=89=A9=E6=96=99=E7=9A=84=E8=B4=A8=E6=A3=80?= =?UTF-8?q?=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/hw/mes/api/RemoteMesService.java | 13 ++++++++++++- .../mes/api/factory/RemoteMesFallbackFactory.java | 5 +++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/RemoteMesService.java b/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/RemoteMesService.java index 526ea6c8..f41b2ce2 100644 --- a/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/RemoteMesService.java +++ b/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/RemoteMesService.java @@ -195,10 +195,21 @@ public interface RemoteMesService { /** * 通过条码查询条码信息 * - * @param dateStr 时间字符串(yyyy-MM-dd) + * @param saleOrderId 销售订单ID * @param source 请求来源 * @return 结果 */ @GetMapping("/saleOrder/getRelateProductsBySaleOrderId/{saleOrderId}") public R> getRelateProductsBySaleOrderId(@PathVariable("saleOrderId") Long saleOrderId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** + * 通过条码查询条码信息 + * + * @param saleOrderId 销售订单ID + * @param source 请求来源 + * @return 结果 + */ + @GetMapping("/saleOrder/getRelateMaterialsBySaleOrderId/{saleOrderId}") + public R> getRelateMaterialsBySaleOrderId(@PathVariable("saleOrderId") Long saleOrderId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + } diff --git a/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/factory/RemoteMesFallbackFactory.java b/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/factory/RemoteMesFallbackFactory.java index b560bcbf..05372602 100644 --- a/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/factory/RemoteMesFallbackFactory.java +++ b/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/factory/RemoteMesFallbackFactory.java @@ -111,6 +111,11 @@ public class RemoteMesFallbackFactory implements FallbackFactory> getRelateMaterialsBySaleOrderId(Long saleOrderId, String source) { + return R.fail("根据销售订单ID获取关联原材料信息失败:" + throwable.getMessage()); + } }; } } From 02a6be177d9556a5d6b6da680f1f5f948de997d5 Mon Sep 17 00:00:00 2001 From: xs Date: Thu, 31 Oct 2024 08:49:50 +0800 Subject: [PATCH 9/9] =?UTF-8?q?3.4.0=20PDA=E6=8E=A5=E5=8F=A3=EF=BC=9A=20?= =?UTF-8?q?=E5=8E=9F=E6=9D=90=E6=96=99=E8=B4=A8=E6=A3=80=EF=BC=9A=E6=A0=B9?= =?UTF-8?q?=E6=8D=AE=E6=9D=A1=E7=A0=81=E7=B1=BB=E5=9E=8B=EF=BC=8C=E5=A6=82?= =?UTF-8?q?=E6=9E=9C=E6=98=AF=E5=90=88=E5=B9=B6=E6=9D=A1=E7=A0=81=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E9=9C=80=E8=A6=81=E6=89=BE=E5=88=B0=E4=BB=BB=E6=84=8F?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E7=89=A9=E6=96=99=E7=9A=84=E8=B4=A8=E6=A3=80?= =?UTF-8?q?=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hw-modules/hw-qms/pom.xml | 4 + .../qms/controller/QmsMobileController.java | 21 ++--- .../com/hw/qms/domain/MesBaseBarcodeInfo.java | 17 +++- .../hw/qms/service/IQmsCheckRuleService.java | 11 +++ .../impl/QmsCheckResultServiceImpl.java | 2 +- .../service/impl/QmsCheckRuleServiceImpl.java | 83 +++++++++++++++++-- .../impl/QmsQualityInstanceServiceImpl.java | 2 +- .../mapper/qms/MesBaseBarcodeInfoMapper.xml | 5 +- 8 files changed, 115 insertions(+), 30 deletions(-) diff --git a/hw-modules/hw-qms/pom.xml b/hw-modules/hw-qms/pom.xml index cd137cd9..4f5e9721 100644 --- a/hw-modules/hw-qms/pom.xml +++ b/hw-modules/hw-qms/pom.xml @@ -77,6 +77,10 @@ com.hw hw-common-swagger + + com.hw + hw-api-mes + diff --git a/hw-modules/hw-qms/src/main/java/com/hw/qms/controller/QmsMobileController.java b/hw-modules/hw-qms/src/main/java/com/hw/qms/controller/QmsMobileController.java index 796fb8d1..70da62b2 100644 --- a/hw-modules/hw-qms/src/main/java/com/hw/qms/controller/QmsMobileController.java +++ b/hw-modules/hw-qms/src/main/java/com/hw/qms/controller/QmsMobileController.java @@ -72,25 +72,16 @@ public class QmsMobileController extends BaseController { //扫描物料条码进入获取 String materialBarcode = qmsMaterialCheckVo.getMaterialBarcode(); + MesBaseBarcodeInfo baseBarcodeInfo = mesBaseBarcodeInfoService.selectMesBaseBarcodeInfoByBarcodeInfo(materialBarcode); + if (baseBarcodeInfo == null) { + throw new ServiceException("物料条码有误"); + } + QmsCheckResultDetail qmsCheckResultDetail = qmsCheckResultDetailService.getCheckResultDetail(materialBarcode); if (qmsCheckResultDetail != null) {//如果有质检结果,则返回已经保存的质检结果,否则返回需要质检的项目 return success(qmsCheckResultDetail); } else { - MesBaseBarcodeInfo baseBarcodeInfo = mesBaseBarcodeInfoService.selectMesBaseBarcodeInfoByBarcodeInfo(materialBarcode); - if (baseBarcodeInfo == null) { - throw new ServiceException("物料条码有误"); - } - Long materialId = baseBarcodeInfo.getMaterialId(); - QmsCheckRuleDetail queryCheckRuleDetail = new QmsCheckRuleDetail(); - queryCheckRuleDetail.setTargetId(materialId); - queryCheckRuleDetail.setTargetType(QmsConstants.QMS_CHECK_RULE_DETAIL_TARGET_TYPE_MATERIAL); - QmsCheckRule qmsCheckRule = qmsCheckRuleService.selectQmsCheckRuleByTarget(queryCheckRuleDetail); - if (qmsCheckRule == null) { - throw new ServiceException("无此物料的质检规则"); - } - qmsCheckRule.setMaterialId(materialId); - qmsCheckRule.setMaterialCode(baseBarcodeInfo.getMaterialCode()); - qmsCheckRule.setMaterialName(baseBarcodeInfo.getMaterialName()); + QmsCheckRule qmsCheckRule = qmsCheckRuleService.selectQmsCheckRuleByBarcode(baseBarcodeInfo); Long checkResultId = qmsCheckResultService.insertCheckResult(baseBarcodeInfo, qmsCheckRule); qmsCheckRule.setCheckResultId(checkResultId); return success(qmsCheckRule); diff --git a/hw-modules/hw-qms/src/main/java/com/hw/qms/domain/MesBaseBarcodeInfo.java b/hw-modules/hw-qms/src/main/java/com/hw/qms/domain/MesBaseBarcodeInfo.java index a2b3bd86..77f486ab 100644 --- a/hw-modules/hw-qms/src/main/java/com/hw/qms/domain/MesBaseBarcodeInfo.java +++ b/hw-modules/hw-qms/src/main/java/com/hw/qms/domain/MesBaseBarcodeInfo.java @@ -95,7 +95,7 @@ public class MesBaseBarcodeInfo extends BaseEntity private String planDetailCode; /** 销售订单ID;适合生产出入库等 */ - private String saleOrderId; + private Long saleOrderId; /** 销售订单编号;适合生产出入库等 */ @Excel(name = "销售订单编号;适合生产出入库等") @@ -126,6 +126,9 @@ public class MesBaseBarcodeInfo extends BaseEntity private String materialName; + private String singleFlag; + + public void setBarcodeId(Long barcodeId) { this.barcodeId = barcodeId; @@ -289,11 +292,11 @@ public class MesBaseBarcodeInfo extends BaseEntity return planDetailCode; } - public String getSaleOrderId() { + public Long getSaleOrderId() { return saleOrderId; } - public void setSaleOrderId(String saleOrderId) { + public void setSaleOrderId(Long saleOrderId) { this.saleOrderId = saleOrderId; } @@ -368,6 +371,14 @@ public class MesBaseBarcodeInfo extends BaseEntity this.materialName = materialName; } + public String getSingleFlag() { + return singleFlag; + } + + public void setSingleFlag(String singleFlag) { + this.singleFlag = singleFlag; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/hw-modules/hw-qms/src/main/java/com/hw/qms/service/IQmsCheckRuleService.java b/hw-modules/hw-qms/src/main/java/com/hw/qms/service/IQmsCheckRuleService.java index 7135a611..4894ac28 100644 --- a/hw-modules/hw-qms/src/main/java/com/hw/qms/service/IQmsCheckRuleService.java +++ b/hw-modules/hw-qms/src/main/java/com/hw/qms/service/IQmsCheckRuleService.java @@ -1,6 +1,8 @@ package com.hw.qms.service; import java.util.List; + +import com.hw.qms.domain.MesBaseBarcodeInfo; import com.hw.qms.domain.QmsCheckRule; import com.hw.qms.domain.QmsCheckRuleDetail; import com.hw.qms.domain.QmsCheckRuleProject; @@ -81,4 +83,13 @@ public interface IQmsCheckRuleService * @return 检验规则维护 */ public QmsCheckRule selectQmsCheckRuleByTarget(QmsCheckRuleDetail qmsCheckRuleDetail); + + + /** + * 查询检验规则维护,连接check_rule_project + * + * @param baseBarcodeInfo 物料条码 + * @return 检验规则维护 + */ + public QmsCheckRule selectQmsCheckRuleByBarcode(MesBaseBarcodeInfo baseBarcodeInfo); } diff --git a/hw-modules/hw-qms/src/main/java/com/hw/qms/service/impl/QmsCheckResultServiceImpl.java b/hw-modules/hw-qms/src/main/java/com/hw/qms/service/impl/QmsCheckResultServiceImpl.java index 764c6a88..7013925e 100644 --- a/hw-modules/hw-qms/src/main/java/com/hw/qms/service/impl/QmsCheckResultServiceImpl.java +++ b/hw-modules/hw-qms/src/main/java/com/hw/qms/service/impl/QmsCheckResultServiceImpl.java @@ -156,7 +156,7 @@ public class QmsCheckResultServiceImpl implements IQmsCheckResultService { qmsCheckResult.setCheckSample(qmsCheckRule.getCheckSample()); qmsCheckResult.setPlanCode(mesBaseBarcodeInfo.getPlanCode()); qmsCheckResult.setPlanDetailCode(mesBaseBarcodeInfo.getPlanDetailCode()); - qmsCheckResult.setSaleOrderId(mesBaseBarcodeInfo.getSaleOrderId()); + qmsCheckResult.setSaleOrderId(mesBaseBarcodeInfo.getSaleOrderId() == null ? "" : String.valueOf(mesBaseBarcodeInfo.getSaleOrderId())); qmsCheckResult.setSaleorderCode(mesBaseBarcodeInfo.getSaleorderCode()); qmsCheckResult.setPoNo(mesBaseBarcodeInfo.getPoNo()); qmsCheckResult.setCheckStatus(QmsConstants.QMS_CHECK_RESULT_CHECK_STATUS_CHECKED); diff --git a/hw-modules/hw-qms/src/main/java/com/hw/qms/service/impl/QmsCheckRuleServiceImpl.java b/hw-modules/hw-qms/src/main/java/com/hw/qms/service/impl/QmsCheckRuleServiceImpl.java index 6e7e0e27..9e6681b2 100644 --- a/hw-modules/hw-qms/src/main/java/com/hw/qms/service/impl/QmsCheckRuleServiceImpl.java +++ b/hw-modules/hw-qms/src/main/java/com/hw/qms/service/impl/QmsCheckRuleServiceImpl.java @@ -3,10 +3,16 @@ package com.hw.qms.service.impl; import java.util.Date; import java.util.List; +import com.hw.common.core.constant.MesConstants; import com.hw.common.core.constant.QmsConstants; +import com.hw.common.core.constant.SecurityConstants; import com.hw.common.core.constant.WmsConstants; +import com.hw.common.core.domain.R; +import com.hw.common.core.exception.ServiceException; import com.hw.common.core.utils.DateUtils; import com.hw.common.security.utils.SecurityUtils; +import com.hw.mes.api.RemoteMesService; +import com.hw.mes.api.domain.MesSaleOrderRelate; import com.hw.qms.domain.*; import com.hw.qms.domain.vo.QmsMaterialCheckVo; import com.hw.qms.mapper.*; @@ -19,6 +25,8 @@ import com.hw.common.core.utils.StringUtils; import org.springframework.transaction.annotation.Transactional; import com.hw.qms.service.IQmsCheckRuleService; +import javax.annotation.Resource; + /** * 检验规则维护Service业务层处理 * @@ -33,6 +41,12 @@ public class QmsCheckRuleServiceImpl implements IQmsCheckRuleService { @Autowired private QmsCheckResultDetailMapper qmsCheckResultDetailMapper; + @Autowired + private MesBaseBarcodeInfoMapper mesBaseBarcodeInfoMapper; + + @Resource + private RemoteMesService remoteMesService; + /** * 查询检验规则维护 @@ -127,20 +141,16 @@ public class QmsCheckRuleServiceImpl implements IQmsCheckRuleService { * * @param qmsCheckRule 检验规则维护对象 */ - public void insertQmsCheckRuleProject(QmsCheckRule qmsCheckRule) - { + public void insertQmsCheckRuleProject(QmsCheckRule qmsCheckRule) { List qmsCheckRuleProjectList = qmsCheckRule.getQmsCheckRuleProjectList(); Long checkRuleId = qmsCheckRule.getCheckRuleId(); - if (StringUtils.isNotNull(qmsCheckRuleProjectList)) - { + if (StringUtils.isNotNull(qmsCheckRuleProjectList)) { List list = new ArrayList(); - for (QmsCheckRuleProject qmsCheckRuleProject : qmsCheckRuleProjectList) - { + for (QmsCheckRuleProject qmsCheckRuleProject : qmsCheckRuleProjectList) { qmsCheckRuleProject.setCheckRuleId(checkRuleId); list.add(qmsCheckRuleProject); } - if (list.size() > 0) - { + if (list.size() > 0) { qmsCheckRuleMapper.batchQmsCheckRuleProject(list); } } @@ -149,6 +159,7 @@ public class QmsCheckRuleServiceImpl implements IQmsCheckRuleService { /** * 批量插入检验规则明细 + * * @param checkRuleDetailList */ @Override @@ -159,6 +170,7 @@ public class QmsCheckRuleServiceImpl implements IQmsCheckRuleService { /** * 批量插入检验规则项目 + * * @param checkRuleProjectList */ @Override @@ -179,4 +191,59 @@ public class QmsCheckRuleServiceImpl implements IQmsCheckRuleService { } + /** + * 查询检验规则维护,连接check_rule_project + * + * @param baseBarcodeInfo 物料条码 + * @return 检验规则维护 + */ + @Override + public QmsCheckRule selectQmsCheckRuleByBarcode(MesBaseBarcodeInfo baseBarcodeInfo) { + Long materialId = 0L; + if (baseBarcodeInfo.getSingleFlag().equals(MesConstants.MES_BARCODE_SINGLE_FLAG_MERGE)) {//如果是合并的物料 + if (baseBarcodeInfo.getBarcodeType().equals(MesConstants.MES_BARCODE_TYPE_RAW)) { + R> materialSaleOrderRelateListData = remoteMesService.getRelateMaterialsBySaleOrderId(baseBarcodeInfo.getSaleOrderId(), SecurityConstants.INNER); + if (materialSaleOrderRelateListData == null) { + throw new ServiceException("未找到拆分物料信息"); + } + List materialSaleOrderRelateList = materialSaleOrderRelateListData.getData(); + if (materialSaleOrderRelateList == null || materialSaleOrderRelateList.isEmpty()) { + throw new ServiceException("未找到拆分物料信息!"); + } + MesSaleOrderRelate materialSaleOrderRelate = materialSaleOrderRelateList.get(0); + materialId = materialSaleOrderRelate.getMaterialId(); + } else if (baseBarcodeInfo.getBarcodeType().equals(MesConstants.MES_BARCODE_TYPE_PRODUCT)) { + R> productSaleOrderRelateListData = remoteMesService.getRelateProductsBySaleOrderId(baseBarcodeInfo.getSaleOrderId(), SecurityConstants.INNER); + if (productSaleOrderRelateListData == null) { + throw new ServiceException("未找到拆分成品信息"); + } + List productSaleOrderRelateList = productSaleOrderRelateListData.getData(); + if (productSaleOrderRelateList == null || productSaleOrderRelateList.isEmpty()) { + throw new ServiceException("未找到拆分成品信息"); + } + + MesSaleOrderRelate productSaleOrderRelate = productSaleOrderRelateList.get(0); + materialId = productSaleOrderRelate.getProductId(); + } + + } else { + materialId = baseBarcodeInfo.getMaterialId(); + } + + QmsCheckRuleDetail queryCheckRuleDetail = new QmsCheckRuleDetail(); + queryCheckRuleDetail.setTargetId(materialId); + queryCheckRuleDetail.setTargetType(QmsConstants.QMS_CHECK_RULE_DETAIL_TARGET_TYPE_MATERIAL); + QmsCheckRule qmsCheckRule = qmsCheckRuleMapper.selectQmsCheckRuleByTarget(queryCheckRuleDetail); + if (qmsCheckRule == null) { + throw new ServiceException("无此物料的质检规则"); + } + qmsCheckRule.setMaterialId(materialId); + qmsCheckRule.setMaterialCode(baseBarcodeInfo.getMaterialCode()); + qmsCheckRule.setMaterialName(baseBarcodeInfo.getMaterialName()); + + return qmsCheckRule; + + } + + } diff --git a/hw-modules/hw-qms/src/main/java/com/hw/qms/service/impl/QmsQualityInstanceServiceImpl.java b/hw-modules/hw-qms/src/main/java/com/hw/qms/service/impl/QmsQualityInstanceServiceImpl.java index a9e5cf02..804ab638 100644 --- a/hw-modules/hw-qms/src/main/java/com/hw/qms/service/impl/QmsQualityInstanceServiceImpl.java +++ b/hw-modules/hw-qms/src/main/java/com/hw/qms/service/impl/QmsQualityInstanceServiceImpl.java @@ -75,7 +75,7 @@ public class QmsQualityInstanceServiceImpl implements IQmsQualityInstanceService * @param qmsQualityInstance 质检工单 * @return 结果 */ - @Transactional + @Transactional(rollbackFor = Exception.class) @Override public int insertQmsQualityInstance(QmsQualityInstance qmsQualityInstance) { qmsQualityInstance.setCreateTime(DateUtils.getNowDate()); diff --git a/hw-modules/hw-qms/src/main/resources/mapper/qms/MesBaseBarcodeInfoMapper.xml b/hw-modules/hw-qms/src/main/resources/mapper/qms/MesBaseBarcodeInfoMapper.xml index 7115fcfb..c63eb2b4 100644 --- a/hw-modules/hw-qms/src/main/resources/mapper/qms/MesBaseBarcodeInfoMapper.xml +++ b/hw-modules/hw-qms/src/main/resources/mapper/qms/MesBaseBarcodeInfoMapper.xml @@ -35,10 +35,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + - select barcode_id, print_time, print_person, batch_flag, barcode_type, barcode_info, batch_code, pallet_info_code, material_id, manufacturer_id, amount, machine_name, po_no, production_date, accepted_date, last_outstock_date, plan_code, plan_detail_code, sale_order_id, saleorder_code, project_no, serial_number, remark, bind_status, bind_by, bind_time, update_by, update_time from mes_base_barcode_info + select barcode_id, print_time, print_person, batch_flag, barcode_type, barcode_info, batch_code, pallet_info_code, material_id, manufacturer_id, amount, machine_name, po_no, production_date, accepted_date, last_outstock_date, plan_code, plan_detail_code, sale_order_id, saleorder_code, project_no, serial_number, remark, bind_status, bind_by, bind_time, update_by, update_time,single_flag from mes_base_barcode_info - select mbbi.barcode_id, mbbi.batch_flag, mbbi.barcode_type, mbbi.barcode_info, mbbi.batch_code, + select mbbi.barcode_id, mbbi.batch_flag, mbbi.barcode_type, mbbi.barcode_info, mbbi.batch_code,mbbi.single_flag, mbbi.material_id, mbbi.amount, mbbi.po_no,mbbi.plan_code, mbbi.plan_detail_code, mbbi.sale_order_id, mbbi.saleorder_code, mbmi.material_code,mbmi.material_name from mes_base_barcode_info mbbi left join mes_base_material_info mbmi on mbbi.material_id = mbmi.material_id