From 68bf18d502ff6b6c3028529c091538c53092ef27 Mon Sep 17 00:00:00 2001 From: xins Date: Thu, 26 Sep 2024 17:30:43 +0800 Subject: [PATCH] =?UTF-8?q?3.1.4:=20-=E8=BD=A6=E9=97=B44=E6=A5=BC=E8=A3=85?= =?UTF-8?q?=E9=85=8D=EF=BC=9A=E7=94=9F=E6=88=90=E6=88=90=E5=93=81=E7=A0=81?= =?UTF-8?q?=E5=92=8C=E9=85=8D=E5=AF=B9=E7=A0=81=E9=80=BB=E8=BE=91=E5=AE=8C?= =?UTF-8?q?=E5=96=84=20-=E8=BD=A6=E9=97=B45=E6=A5=BC=E6=8B=86=E5=88=86?= =?UTF-8?q?=EF=BC=9A=20=20=20=20=20=E5=8F=AF=E6=A0=B9=E6=8D=AE=E5=A4=9A?= =?UTF-8?q?=E4=B8=AA=E6=88=90=E5=93=81=E7=A0=81=E7=94=9F=E6=88=90=E5=8E=9F?= =?UTF-8?q?=E6=9D=90=E6=96=99=E6=9D=A1=E7=A0=81=EF=BC=88=E9=80=82=E7=94=A8?= =?UTF-8?q?=E4=BA=8E4=E6=A5=BC=E5=88=B05=E6=A5=BC=E7=94=9F=E4=BA=A7?= =?UTF-8?q?=E7=9A=84=E6=8B=86=E5=88=86=E5=90=8E=E7=9A=84=E6=9F=9C=E4=BD=93?= =?UTF-8?q?=EF=BC=89=EF=BC=9B=20=20=20=20=20=E5=A4=96=E9=83=A8=E9=87=87?= =?UTF-8?q?=E8=B4=AD=E7=9A=84=E6=A0=B9=E6=8D=AE=E5=90=88=E5=B9=B6=E7=9A=84?= =?UTF-8?q?=E8=99=9A=E6=8B=9F=E7=89=A9=E6=96=99=E8=BF=9B=E8=A1=8C=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E9=A2=86=E5=8F=96=E6=9F=9C=E4=BD=93=E3=80=82=20-PDA5?= =?UTF-8?q?=E6=A5=BC=E7=BB=84=E8=A3=85=E5=87=BA=E5=BA=93=EF=BC=9A=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=A4=9A=E4=B8=AA=E6=88=90=E5=93=81=E6=9D=A1=E7=A0=81?= =?UTF-8?q?=E5=90=88=E5=B9=B6=E4=B8=80=E4=B8=AA=E5=8E=9F=E6=9D=90=E6=96=99?= =?UTF-8?q?=E6=9D=A1=E7=A0=81=E7=9A=84=E7=BB=84=E8=A3=85=E5=87=BA=E5=BA=93?= =?UTF-8?q?=EF=BC=8C=E4=B8=8D=E8=83=BD=E9=87=8D=E5=A4=8D=E7=BB=84=E8=A3=85?= =?UTF-8?q?=E5=87=BA=E5=BA=93=EF=BC=8C=E4=BD=86=E6=AF=8F=E4=B8=AA=E5=9B=9B?= =?UTF-8?q?=E6=A5=BC=E7=9A=84=E6=88=90=E5=93=81=E9=83=BD=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E7=94=9F=E6=88=90=E4=B8=80=E6=9D=A1=E6=98=8E=E7=BB=86=20-?= =?UTF-8?q?=E8=BD=A6=E9=97=B45=E6=A5=BC=E8=A3=85=E9=85=8D=EF=BC=9A?= =?UTF-8?q?=E7=94=B3=E8=AF=B7=E9=A2=86=E6=96=99=EF=BC=8C=E5=A4=96=E9=83=A8?= =?UTF-8?q?=E9=87=87=E8=B4=AD=E6=9F=9C=E4=BD=93=E5=90=88=E5=B9=B6=E7=9A=84?= =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E8=99=9A=E6=8B=9Fbom=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E9=A2=86=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/hw/mes/api/RemoteMesService.java | 11 + .../api/domain/vo/MesPdaProductPlanVo.java | 6 +- .../api/factory/RemoteMesFallbackFactory.java | 5 + .../java/com/hw/wms/api/RemoteWmsService.java | 4 + .../api/factory/RemoteWmsFallbackFactory.java | 5 + .../hw/common/core/constant/MesConstants.java | 6 + .../java/com/hw/mes/config/MesConfig.java | 16 + .../hw/mes/controller/MesApiController.java | 13 +- .../MesBaseBarcodeInfoController.java | 18 +- .../controller/MesProductPlanController.java | 3 +- .../com/hw/mes/domain/MesBaseBindBarcode.java | 88 +++++ .../com/hw/mes/domain/MesProductOrder.java | 14 + .../com/hw/mes/domain/MesProductPlan.java | 20 + .../hw/mes/domain/MesProductPlanDetail.java | 10 + .../mes/mapper/MesBaseBarcodeInfoMapper.java | 8 + .../mes/mapper/MesBaseBindBarcodeMapper.java | 78 ++++ .../service/IMesBaseBarcodeInfoService.java | 27 +- .../impl/MesBaseBarcodeInfoServiceImpl.java | 361 ++++++++++++------ .../impl/MesProductPlanDetailServiceImpl.java | 53 ++- .../impl/MesProductPlanServiceImpl.java | 1 + .../mapper/mes/MesBaseBarcodeInfoMapper.xml | 5 + .../mapper/mes/MesBaseBindBarcodeMapper.xml | 89 +++++ .../mapper/mes/MesProductOrderMapper.xml | 6 + .../mapper/mes/MesProductPlanMapper.xml | 6 +- .../WmsProductOutstockController.java | 20 +- .../com/hw/wms/domain/vo/WmsRawBackVo.java | 4 + .../impl/WmsProductInstockServiceImpl.java | 2 +- .../impl/WmsProductOutstockServiceImpl.java | 1 + .../impl/WmsRawInstockServiceImpl.java | 42 +- .../impl/WmsRawOutstockServiceImpl.java | 89 +++-- .../impl/WmsStockTotalServiceImpl.java | 8 +- .../mapper/wms/WmsProductOutstockMapper.xml | 1 + hw-ui/src/api/board/barcode.js | 9 + .../views/board/barcode/workshopBarcode.vue | 176 ++++++--- hw-ui/src/views/board/fifthFloor/index.vue | 120 ++++-- .../src/views/board/fourthFloor/assemble.vue | 1 - hw-ui/src/views/mes/productOrder/index.vue | 24 +- 37 files changed, 1054 insertions(+), 296 deletions(-) create mode 100644 hw-modules/hw-mes/src/main/java/com/hw/mes/domain/MesBaseBindBarcode.java create mode 100644 hw-modules/hw-mes/src/main/java/com/hw/mes/mapper/MesBaseBindBarcodeMapper.java create mode 100644 hw-modules/hw-mes/src/main/resources/mapper/mes/MesBaseBindBarcodeMapper.xml 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 e40fb9ef..523ee95b 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 @@ -137,4 +137,15 @@ public interface RemoteMesService { @PostMapping("/saleOrder/transferSaleOrders") public R transferSaleOrders(@RequestBody MesSaleOrderTransferVo mesSaleOrderTransferVo, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** + * 通过绑定的成品条码信息获取原材料条码信息 + * + * @param productBarcode 成品条码信息 + * @param source 请求来源 + * @return 结果 + */ + @GetMapping("/barcode/getRawBarcodeByProductBarcode/{productBarcode}") + public R getRawBarcodeByProductBarcode(@PathVariable("productBarcode") String productBarcode, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + } diff --git a/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/domain/vo/MesPdaProductPlanVo.java b/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/domain/vo/MesPdaProductPlanVo.java index 001589da..d1ea7cef 100644 --- a/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/domain/vo/MesPdaProductPlanVo.java +++ b/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/domain/vo/MesPdaProductPlanVo.java @@ -17,7 +17,11 @@ import javax.validation.constraints.NotBlank; @Data public class MesPdaProductPlanVo { - //物料条码 + //保存生产明细的物料条码 @NotBlank(message="material barcode cannot be empty") private String materialBarcode; + + //组装出库配对码对应的原材料条码 + @NotBlank(message="raw material barcode cannot be empty") + private String rawMaterialBarcode; } 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 ee46a103..37fe4737 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 @@ -83,6 +83,11 @@ public class RemoteMesFallbackFactory implements FallbackFactory transferSaleOrders(MesSaleOrderTransferVo mesSaleOrderTransferVo, String source) { return R.fail("销售订单信息转换失败:" + throwable.getMessage()); } + + @Override + public R getRawBarcodeByProductBarcode(String productBarcode, String source) { + return R.fail("根据成品条码获取原材料条码信息失败:" + throwable.getMessage()); + } }; } } 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 758435b2..b3282953 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 @@ -43,6 +43,7 @@ public interface RemoteWmsService { @PostMapping("/productstock/isExistProductStock") public R isExistProductStock(@Validated @RequestBody WmsProductStockVo queryProductStockVo, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + /** * 定时同步成品入库信息给ERP * @param days @@ -65,4 +66,7 @@ public interface RemoteWmsService { @PostMapping("/wmswarehouse/allocateVirtualMaterial") public R allocateVirtualMaterial(@RequestBody WmsWarehouseMaterial wmsWarehouseMaterial, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + @PostMapping("/productoutstock/isProductOutstock") + public R isProductOutstock(@Validated @RequestBody WmsProductStockVo queryProductStockVo, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); } 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 d0a9905d..7c0f8464 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 @@ -60,6 +60,11 @@ public class RemoteWmsFallbackFactory implements FallbackFactory isProductOutstock(WmsProductStockVo queryProductStockVo, String source) { + return R.fail("获取成品出库记录失败:" + throwable.getMessage()); + } + }; } } diff --git a/hw-common/hw-common-core/src/main/java/com/hw/common/core/constant/MesConstants.java b/hw-common/hw-common-core/src/main/java/com/hw/common/core/constant/MesConstants.java index 434c350c..908b063f 100644 --- a/hw-common/hw-common-core/src/main/java/com/hw/common/core/constant/MesConstants.java +++ b/hw-common/hw-common-core/src/main/java/com/hw/common/core/constant/MesConstants.java @@ -274,4 +274,10 @@ public class MesConstants { */ public static final String MES_MATERIAL_ACCESSORIES_FLAG_YES = "1";//是 public static final String MES_MATERIAL_ACCESSORIES_FLAG_NO = "0";//否 + + /** + * 生产工单柜体渠道 + */ + public static final String MES_PRODUCT_ORDER_CABINET_CHANNEL_PURCHASE = "1";//外部采购 + public static final String MES_PRODUCT_ORDER_CABINET_CHANNEL_INTERNAL = "2";//内部生产 } diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/config/MesConfig.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/config/MesConfig.java index 25b416cd..53266790 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/config/MesConfig.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/config/MesConfig.java @@ -29,8 +29,16 @@ public class MesConfig */ private int socketServerReadTimeOut; + /** + * 四楼激光工序ID + */ private Long laserProcessId; + /** + * 五楼PDA组装工序ID + */ + private Long pdaAssembleProcessId; + /**五楼原料周转区仓库ID*/ private Long fifthCabinetWarehouseId; @@ -67,6 +75,14 @@ public class MesConfig this.laserProcessId = laserProcessId; } + public Long getPdaAssembleProcessId() { + return pdaAssembleProcessId; + } + + public void setPdaAssembleProcessId(Long pdaAssembleProcessId) { + this.pdaAssembleProcessId = pdaAssembleProcessId; + } + public Long getFifthCabinetWarehouseId() { return fifthCabinetWarehouseId; } 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 38a5d5ea..0e77e20b 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 @@ -309,7 +309,7 @@ public class MesApiController extends BaseController { */ @GetMapping(value = "/printProductBarcodes/{barcodeIds}") public AjaxResult printProductBarcodes(@PathVariable Long[] barcodeIds) { - return success(mesBaseBarcodeInfoService.printBarcodes(barcodeIds, MesConstants.MES_BARCODE_TYPE_PRODUCT,false)); + return success(mesBaseBarcodeInfoService.printBarcodes(barcodeIds, MesConstants.MES_BARCODE_TYPE_PRODUCT,false,1)); } @@ -333,4 +333,15 @@ public class MesApiController extends BaseController { } + /** + * 打印配对码,同一个配对码可以同时打印多张 + * + * @param barcodeIds + * @return + */ + @GetMapping(value = "/printBindBarcodes/{barcodeIds}/{printNumber}") + public AjaxResult printBindBarcodes(@PathVariable Long[] barcodeIds, @PathVariable Integer printNumber) { + return success(mesBaseBarcodeInfoService.printBarcodes(barcodeIds, MesConstants.MES_BARCODE_TYPE_PRODUCT,false,printNumber)); + } + } 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 6d96c4c7..93e190ac 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 @@ -128,7 +128,7 @@ public class MesBaseBarcodeInfoController extends BaseController @RequiresPermissions("mes:barcode:printBarcode") public AjaxResult printBarcodes(@PathVariable Long[] barcodeIds) { - return success(mesBaseBarcodeInfoService.printBarcodes(barcodeIds,MesConstants.MES_BARCODE_TYPE_RAW,false)); + return success(mesBaseBarcodeInfoService.printBarcodes(barcodeIds,MesConstants.MES_BARCODE_TYPE_RAW,false,1)); } /** @@ -140,7 +140,7 @@ public class MesBaseBarcodeInfoController extends BaseController @RequiresPermissions("mes:barcode:reprint") public AjaxResult reprintBarcodes(@PathVariable Long[] barcodeIds) { - return success(mesBaseBarcodeInfoService.printBarcodes(barcodeIds,MesConstants.MES_BARCODE_TYPE_RAW,true)); + return success(mesBaseBarcodeInfoService.printBarcodes(barcodeIds,MesConstants.MES_BARCODE_TYPE_RAW,true,1)); } /** @@ -220,7 +220,7 @@ public class MesBaseBarcodeInfoController extends BaseController @RequiresPermissions("mes:barcode:printProductBarcodes") public AjaxResult printProductBarcodes(@PathVariable Long[] barcodeIds) { - return success(mesBaseBarcodeInfoService.printBarcodes(barcodeIds, MesConstants.MES_BARCODE_TYPE_PRODUCT,false)); + return success(mesBaseBarcodeInfoService.printBarcodes(barcodeIds, MesConstants.MES_BARCODE_TYPE_PRODUCT,false,1)); } @@ -373,4 +373,16 @@ public class MesBaseBarcodeInfoController extends BaseController return toAjax(mesBaseBarcodeInfoService.generateMergeRawBarcode(mesBaseBarcodeInfo)); } + + + /** + * 根据绑定的成品条码信息获取原材料条码 + */ + @InnerAuth + @GetMapping(value = "/getRawBarcodeByProductBarcode/{productBarcode}") + public AjaxResult getRawBarcodeByProductBarcode(@PathVariable("productBarcode") String productBarcode) + { + return success(mesBaseBarcodeInfoService.selectRawBarcodeInfoByProductBarcode(productBarcode)); + } + } diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesProductPlanController.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesProductPlanController.java index 8a560b72..99f3d0c4 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesProductPlanController.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesProductPlanController.java @@ -269,6 +269,7 @@ public class MesProductPlanController extends BaseController { try { MesProductPlanDetail mesProductPlanDetail = new MesProductPlanDetail(); mesProductPlanDetail.setMaterialBarcode(mesPdaProductPlanVo.getMaterialBarcode()); + mesProductPlanDetail.setRawMaterialBarcode(mesPdaProductPlanVo.getRawMaterialBarcode()); mesProductPlanDetailService.startNextMesProductPlanDetail(mesProductPlanDetail, MesConstants.MES_START_TYPE_FIFTH_FLOOR_INSTALL); return R.ok("start successfully"); } catch (Exception e) { @@ -286,7 +287,7 @@ public class MesProductPlanController extends BaseController { public R complete5thFloorInstall(@RequestBody MesPdaProductPlanVo mesPdaProductPlanVo) { try { MesProductPlanDetail mesProductPlanDetail = new MesProductPlanDetail(); - mesProductPlanDetail.setMaterialBarcode(mesPdaProductPlanVo.getMaterialBarcode()); + mesProductPlanDetail.setRawMaterialBarcode(mesPdaProductPlanVo.getRawMaterialBarcode()); mesProductPlanDetailService.completeMesProductPlanDetail(mesProductPlanDetail); return R.ok("complete successfully"); } catch (Exception e) { diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/domain/MesBaseBindBarcode.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/domain/MesBaseBindBarcode.java new file mode 100644 index 00000000..936087b0 --- /dev/null +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/domain/MesBaseBindBarcode.java @@ -0,0 +1,88 @@ +package com.hw.mes.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.hw.common.core.annotation.Excel; +import com.hw.common.core.web.domain.BaseEntity; + +/** + * 绑定条码对象 mes_base_bind_barcode + * + * @author Open Platform + * @date 2024-09-25 + */ +public class MesBaseBindBarcode extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键 */ + private Long bindBarcodeId; + + /** 条码ID */ + @Excel(name = "条码ID") + private Long barcodeId; + + private String barcodeInfo; + + private Long saleOrderId; + + /** 绑定的条码内容 */ + @Excel(name = "绑定的条码内容") + private String bindBarcode; + + public void setBindBarcodeId(Long bindBarcodeId) + { + this.bindBarcodeId = bindBarcodeId; + } + + public Long getBindBarcodeId() + { + return bindBarcodeId; + } + public void setBarcodeId(Long barcodeId) + { + this.barcodeId = barcodeId; + } + + public Long getBarcodeId() + { + return barcodeId; + } + + public String getBarcodeInfo() { + return barcodeInfo; + } + + public void setBarcodeInfo(String barcodeInfo) { + this.barcodeInfo = barcodeInfo; + } + + public Long getSaleOrderId() { + return saleOrderId; + } + + public void setSaleOrderId(Long saleOrderId) { + this.saleOrderId = saleOrderId; + } + + public void setBindBarcode(String bindBarcode) + { + this.bindBarcode = bindBarcode; + } + + public String getBindBarcode() + { + return bindBarcode; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("bindBarcodeId", getBindBarcodeId()) + .append("barcodeId", getBarcodeId()) + .append("bindBarcode", getBindBarcode()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .toString(); + } +} diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/domain/MesProductOrder.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/domain/MesProductOrder.java index d1e19731..1c0672c8 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/domain/MesProductOrder.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/domain/MesProductOrder.java @@ -94,6 +94,12 @@ public class MesProductOrder extends BaseEntity { private Long dispatchId; + /** + * 柜体渠道 + */ + private String cabinetChannel; + + /** * 销售数量;销售订单的销售数量 */ @@ -424,6 +430,14 @@ public class MesProductOrder extends BaseEntity { return dispatchId; } + public String getCabinetChannel() { + return cabinetChannel; + } + + public void setCabinetChannel(String cabinetChannel) { + this.cabinetChannel = cabinetChannel; + } + public void setSaleAmount(BigDecimal saleAmount) { this.saleAmount = saleAmount; } diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/domain/MesProductPlan.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/domain/MesProductPlan.java index 3c126adc..3b3af179 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/domain/MesProductPlan.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/domain/MesProductPlan.java @@ -194,6 +194,10 @@ public class MesProductPlan extends BaseEntity private String nickName; + private String incompleteFlag; + + private String cabinetChannel; + public Long getSaleOrderId() { return saleOrderId; } @@ -567,6 +571,22 @@ public class MesProductPlan extends BaseEntity this.nickName = nickName; } + public String getIncompleteFlag() { + return incompleteFlag; + } + + public void setIncompleteFlag(String incompleteFlag) { + this.incompleteFlag = incompleteFlag; + } + + public String getCabinetChannel() { + return cabinetChannel; + } + + public void setCabinetChannel(String cabinetChannel) { + this.cabinetChannel = cabinetChannel; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/domain/MesProductPlanDetail.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/domain/MesProductPlanDetail.java index 2785a1b0..6afb9424 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/domain/MesProductPlanDetail.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/domain/MesProductPlanDetail.java @@ -69,6 +69,8 @@ public class MesProductPlanDetail extends BaseEntity private String processType;//工序类型,1五楼拆分工序 + private String rawMaterialBarcode; + public void setPlanDetailId(Long planDetailId) { this.planDetailId = planDetailId; @@ -201,6 +203,14 @@ public class MesProductPlanDetail extends BaseEntity this.processType = processType; } + public String getRawMaterialBarcode() { + return rawMaterialBarcode; + } + + public void setRawMaterialBarcode(String rawMaterialBarcode) { + this.rawMaterialBarcode = rawMaterialBarcode; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/mapper/MesBaseBarcodeInfoMapper.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/mapper/MesBaseBarcodeInfoMapper.java index 8049aa5f..85c36ae5 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/mapper/MesBaseBarcodeInfoMapper.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/mapper/MesBaseBarcodeInfoMapper.java @@ -89,6 +89,14 @@ public interface MesBaseBarcodeInfoMapper public MesBaseBarcodeInfo selectMesBaseBarcodeInfoByProductBarcode(String productBarcode); + /** + * 查询条码信息like,适用于绑定多个成品条码时,limit 1 + * + * @param productBarcode 在5楼成品入库时贴成品条码,此码作为之前的原材料码;在4楼的成品到5楼时需要生成原材料条码时,此字段作为之前的成品条码 + * @return 条码信息 + */ + public MesBaseBarcodeInfo selectMesBaseBarcodeInfoByLikeProductBarcode(String productBarcode); + /** * 获取物料条码信息数量 * @param mesBaseBarcodeInfo diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/mapper/MesBaseBindBarcodeMapper.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/mapper/MesBaseBindBarcodeMapper.java new file mode 100644 index 00000000..0c8aa651 --- /dev/null +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/mapper/MesBaseBindBarcodeMapper.java @@ -0,0 +1,78 @@ +package com.hw.mes.mapper; + +import java.util.List; +import com.hw.mes.domain.MesBaseBindBarcode; + +/** + * 绑定条码Mapper接口 + * + * @author xins + * @date 2024-09-25 + */ +public interface MesBaseBindBarcodeMapper +{ + /** + * 查询绑定条码 + * + * @param bindBarcodeId 绑定条码主键 + * @return 绑定条码 + */ + public MesBaseBindBarcode selectMesBaseBindBarcodeByBindBarcodeId(Long bindBarcodeId); + + /** + * 查询绑定条码列表 + * + * @param mesBaseBindBarcode 绑定条码 + * @return 绑定条码集合 + */ + public List selectMesBaseBindBarcodeList(MesBaseBindBarcode mesBaseBindBarcode); + + /** + * 新增绑定条码 + * + * @param mesBaseBindBarcode 绑定条码 + * @return 结果 + */ + public int insertMesBaseBindBarcode(MesBaseBindBarcode mesBaseBindBarcode); + + /** + * 修改绑定条码 + * + * @param mesBaseBindBarcode 绑定条码 + * @return 结果 + */ + public int updateMesBaseBindBarcode(MesBaseBindBarcode mesBaseBindBarcode); + + /** + * 删除绑定条码 + * + * @param bindBarcodeId 绑定条码主键 + * @return 结果 + */ + public int deleteMesBaseBindBarcodeByBindBarcodeId(Long bindBarcodeId); + + /** + * 批量删除绑定条码 + * + * @param bindBarcodeIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteMesBaseBindBarcodeByBindBarcodeIds(Long[] bindBarcodeIds); + + /** + * 批量新增绑定条码 + * + * @param mesBaseBindBarcodeList 绑定条码列表 + * @return 结果 + */ + public int batchMesBaseBindBarcode(List mesBaseBindBarcodeList); + + /** + * 查询绑定条码 + * + * @param bindBarcode 绑定条码信息 + * @return 绑定条码 + */ + public MesBaseBindBarcode selectMesBaseBindBarcodeByBindBarcode(String bindBarcode); + +} diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/IMesBaseBarcodeInfoService.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/IMesBaseBarcodeInfoService.java index b3e4ef2b..2e6a6817 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/IMesBaseBarcodeInfoService.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/IMesBaseBarcodeInfoService.java @@ -12,12 +12,11 @@ import java.util.List; * @author xs * @date 2023-12-20 */ -public interface IMesBaseBarcodeInfoService -{ +public interface IMesBaseBarcodeInfoService { /** * 查询条码信息 * - * @param barcodeInfo 条码信息UID + * @param barcodeInfo 条码信息UID * @return 条码信息 */ public MesBaseBarcodeInfo selectMesBaseBarcodeInfoByBarcodeInfo(String barcodeInfo); @@ -58,12 +57,14 @@ public interface IMesBaseBarcodeInfoService /** * 无采购订单生成条码信息 + * * @param mesBaseBarcodeInfo */ public int generateNoPurchaseRawBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo); /** * 生成固定条码信息 + * * @param mesBaseBarcodeInfo */ public int generateRegularRawBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo); @@ -105,11 +106,12 @@ public interface IMesBaseBarcodeInfoService * 打印物料条码 * * @param barcodeIds - * @param printType 打印类型(1原材料 3成品) + * @param printType 打印类型(1原材料 3成品) * @param reprintFlag 重新打印标识(1重新打印) + * @param printNumber 打印数量 * @return */ - public int printBarcodes(Long[] barcodeIds, String printType,boolean reprintFlag); + public int printBarcodes(Long[] barcodeIds, String printType, boolean reprintFlag, Integer printNumber); /** @@ -148,9 +150,9 @@ public interface IMesBaseBarcodeInfoService public MesBaseBarcodeInfo selectProductBarcodeInfoByBarcodeInfo(String barcodeInfo); - /** * 对内生产的成品生成原材料条码 + * * @param mesBaseBarcodeInfo * @return */ @@ -159,6 +161,7 @@ public interface IMesBaseBarcodeInfoService /** * 重新生成条码信息,之前的作废 + * * @param mesBaseBarcodeInfo * @return */ @@ -166,6 +169,7 @@ public interface IMesBaseBarcodeInfoService /** * 查询仓库关联条码信息列表 + * * @param mesBaseBarcodeInfo * @return */ @@ -173,6 +177,7 @@ public interface IMesBaseBarcodeInfoService /** * 查询仓库已关联条码信息列表 + * * @param mesBaseBarcodeInfo * @return */ @@ -181,6 +186,7 @@ public interface IMesBaseBarcodeInfoService /** * 校验条码是否是内部销售,可以直接出库 + * * @param materialBarcode * @return */ @@ -196,7 +202,16 @@ public interface IMesBaseBarcodeInfoService /** * 合并采购订单生成原材料条码 + * * @param mesBaseBarcodeInfo */ public int generateMergeRawBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo); + + /** + * 查询原材料条码信息 + * + * @param productBarcode 绑定的成品条码 + * @return 条码信息 + */ + public MesBaseBarcodeInfo selectRawBarcodeInfoByProductBarcode(String productBarcode); } 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 89e2142d..cdb6d77b 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 @@ -3,6 +3,7 @@ package com.hw.mes.service.impl; import java.math.BigDecimal; import java.util.*; +import com.alibaba.fastjson2.JSONObject; import com.hw.common.core.constant.*; import com.hw.common.core.domain.R; import com.hw.common.core.exception.ServiceException; @@ -72,7 +73,7 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService private MesProductPlanDetailMapper mesProductPlanDetailMapper; @Autowired - private MesPurchaseOrderMapper mesPurchaseOrderMapper; + private MesBaseBindBarcodeMapper mesBaseBindBarcodeMapper; @Autowired private MesSaleOrderMapper mesSaleOrderMapper; @@ -83,6 +84,7 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService @Autowired private MesSaleOrderRelateMapper mesSaleOrderRelateMapper; + @Autowired private MesConfig mesConfig; @@ -109,8 +111,8 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService */ @Override public MesBaseBarcodeInfo selectMesBaseBarcodeInfoByBarcodeId(Long barcodeId) { - MesBaseBarcodeInfo mesBaseBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeId(barcodeId); - if(mesBaseBarcodeInfo.getSingleFlag().equals(MesConstants.MES_BARCODE_SINGLE_FLAG_MERGE)){ + MesBaseBarcodeInfo mesBaseBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeId(barcodeId); + if (mesBaseBarcodeInfo.getSingleFlag().equals(MesConstants.MES_BARCODE_SINGLE_FLAG_MERGE)) { MesSaleOrderRelate querySaleOrderRelate = new MesSaleOrderRelate(); querySaleOrderRelate.setBarcodeInfo(mesBaseBarcodeInfo.getBarcodeInfo()); List mesSaleOrderRelates = mesSaleOrderRelateMapper.selectMesSaleOrderRelateJoinList(querySaleOrderRelate); @@ -316,16 +318,43 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService public void generateProductBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo) { - String planCode; - String planDetailCode; - Long saleOrderId; - String saleOrderCode; - Long materialId; +// String planCode; +// String planDetailCode; String barcode = Seq.getId(Seq.mesCompBarcodeSeqType, Seq.mesCompBarcodeCode); Date currentDate = new Date(); String userName = SecurityUtils.getUsername(); + String planCode = mesBaseBarcodeInfo.getPlanCode(); + String planDetailCode = mesBaseBarcodeInfo.getPlanDetailCode(); + MesBaseBarcodeInfo queryBarcodeInfo = new MesBaseBarcodeInfo(); + queryBarcodeInfo.setPlanDetailCode(planDetailCode); + List mesBaseBarcodeInfos = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoList(queryBarcodeInfo); + + if (mesBaseBarcodeInfos != null && !mesBaseBarcodeInfos.isEmpty()) { + throw new ServiceException("此生产明细已经生成条码,不能重复生成"); + } + + MesProductPlanDetail mesProductPlanDetail = mesProductPlanDetailMapper.selectMesProductPlanDetailByPlanDetailCode(planDetailCode); + if (mesProductPlanDetail == null) { + throw new ServiceException("此生产明细不存在"); + } + +// if (!mesProductPlanDetail.getPlanDetailStatus().equals(MesConstants.MES_PRODUCT_PLAN_DETAIL_STATUS_FINISH) && +// !mesProductPlanDetail.getPlanDetailStatus().equals(MesConstants.MES_PRODUCT_PLAN_DETAIL_STATUS_ABNORMAL_FINISH)) { +// throw new ServiceException("此生产明细还未完成,不能打印条码"); +// } + + MesProductPlan productPlan = mesProductPlanMapper.selectOnlyMesProductPlanByPlanCode(planCode); + if (productPlan == null) { + throw new ServiceException("此生产派工不存在"); + } + + Long saleOrderId = productPlan.getSaleOrderId(); + String saleOrderCode = productPlan.getSaleorderCode(); + Long materialId = productPlan.getMaterialId();//在生产计划的materialid是根据saletype保存,如果是外部销售则保存productorder中的materialid,如果是内部生产则保存prpductorder中的producematerialid + + //在五楼根据原材料条码单独生成成品条码 if (StringUtils.isNotEmpty(mesBaseBarcodeInfo.getSingleFlag()) && mesBaseBarcodeInfo.getSingleFlag().equals(MesConstants.MES_BARCODE_SINGLE_FLAG_YES)) { @@ -344,20 +373,20 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService throw new ServiceException("此原材料条码已经生成过成品条码,不能重复生成"); } - MesProductPlanDetail mesProductPlanDetail = mesProductPlanDetailMapper.selectMesProductPlanDetailByMaterialBarcode(rawMaterialBarcode); - if (mesProductPlanDetail == null) { - throw new ServiceException("此条码没有生产明细"); + MesProductPlanDetail rawBarcodeMesProductPlanDetail = mesProductPlanDetailMapper.selectMesProductPlanDetailByMaterialBarcode(rawMaterialBarcode); + if (rawBarcodeMesProductPlanDetail == null) { + throw new ServiceException("此原材料条码没有生产明细"); } - if (!mesProductPlanDetail.getPlanDetailStatus().equals(MesConstants.MES_PRODUCT_PLAN_DETAIL_STATUS_FINISH)) { - throw new ServiceException("生产明细还未结束"); - } +// if (!mesProductPlanDetail.getPlanDetailStatus().equals(MesConstants.MES_PRODUCT_PLAN_DETAIL_STATUS_FINISH)) { +// throw new ServiceException("生产明细还未结束"); +// } - planCode = mesProductPlanDetail.getPlanCode(); - planDetailCode = mesProductPlanDetail.getPlanDetailCode(); + String rawBarCodePlanCode = rawBarcodeMesProductPlanDetail.getPlanCode(); + String rawBarCodePlanDetailCode = rawBarcodeMesProductPlanDetail.getPlanDetailCode(); - if (StringUtils.isEmpty(planCode) || StringUtils.isEmpty(planDetailCode)) { + if (StringUtils.isEmpty(rawBarCodePlanCode) || StringUtils.isEmpty(rawBarCodePlanDetailCode)) { throw new ServiceException("绑定的配对码有误"); } @@ -365,16 +394,12 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService throw new ServiceException("此条码未绑定托盘信息"); } - MesProductPlan productPlan = mesProductPlanMapper.selectOnlyMesProductPlanByPlanCode(planCode); - if (productPlan == null) { - throw new ServiceException("此生产派工不存在"); + MesProductPlan rawBarcodeProductPlan = mesProductPlanMapper.selectOnlyMesProductPlanByPlanCode(rawBarCodePlanCode); + if (rawBarcodeProductPlan == null) { + throw new ServiceException("原材料条码的生产派工不存在"); } - saleOrderId = rawBarcode.getSaleOrderId(); - saleOrderCode = rawBarcode.getSaleorderCode(); - materialId = productPlan.getMaterialId(); - mesBaseBarcodeInfo.setPalletInfoCode(rawBarcode.getPalletInfoCode());//重新绑定托盘号 mesBaseBarcodeInfo.setBindStatus(MesConstants.MES_BARCODE_BIND_STATUS_BINDING); @@ -400,35 +425,6 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService mesProductPlanDetailMapper.updateMesProductPlanDetail(mesProductPlanDetail); } else { - planCode = mesBaseBarcodeInfo.getPlanCode(); - planDetailCode = mesBaseBarcodeInfo.getPlanDetailCode(); - - MesBaseBarcodeInfo queryBarcodeInfo = new MesBaseBarcodeInfo(); - queryBarcodeInfo.setPlanDetailCode(planDetailCode); - List mesBaseBarcodeInfos = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoList(queryBarcodeInfo); - - if (mesBaseBarcodeInfos != null && !mesBaseBarcodeInfos.isEmpty()) { - throw new ServiceException("此生产明细已经生成条码,不能重复生成"); - } - - MesProductPlanDetail mesProductPlanDetail = mesProductPlanDetailMapper.selectMesProductPlanDetailByPlanDetailCode(planDetailCode); - if (mesProductPlanDetail == null) { - throw new ServiceException("此生产明细不存在"); - } - - if (!mesProductPlanDetail.getPlanDetailStatus().equals(MesConstants.MES_PRODUCT_PLAN_DETAIL_STATUS_FINISH) && - !mesProductPlanDetail.getPlanDetailStatus().equals(MesConstants.MES_PRODUCT_PLAN_DETAIL_STATUS_ABNORMAL_FINISH)) { - throw new ServiceException("此生产明细还未完成,不能打印条码"); - } - - MesProductPlan productPlan = mesProductPlanMapper.selectOnlyMesProductPlanByPlanCode(planCode); - if (productPlan == null) { - throw new ServiceException("此生产派工不存在"); - } - - saleOrderId = productPlan.getSaleOrderId(); - saleOrderCode = productPlan.getSaleorderCode(); - materialId = productPlan.getMaterialId();//在生产计划的materialid是根据saletype保存,如果是外部销售则保存productorder中的materialid,如果是内部生产则保存prpductorder中的producematerialid MesProductOrder mesProductOrder = mesProductOrderMapper.selectMesProductOrderByProductOrderId(productPlan.getProductOrderId()); mesBaseBarcodeInfo.setCompleteFlag(mesProductOrder.getSaleType().equals(MesConstants.MES_PRODUCT_ORDER_SALE) @@ -444,8 +440,8 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService mesBaseBarcodeInfo.setPrintFlag(MesConstants.MES_BARCODE_PRINT_FLAG_NO); mesBaseBarcodeInfo.setSaleOrderId(saleOrderId); mesBaseBarcodeInfo.setSaleorderCode(saleOrderCode); - mesBaseBarcodeInfo.setPlanCode(planCode); - mesBaseBarcodeInfo.setPlanDetailCode(planDetailCode); + mesBaseBarcodeInfo.setPlanCode(mesBaseBarcodeInfo.getPlanCode()); + mesBaseBarcodeInfo.setPlanDetailCode(mesBaseBarcodeInfo.getPlanDetailCode()); mesBaseBarcodeInfo.setCreateTime(currentDate); mesBaseBarcodeInfo.setCreateBy(userName); @@ -611,17 +607,25 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService * @param barcodeIds * @param printType 打印类型(1原材料 3成品) * @param reprintFlag 重新打印标识(1重新打印) + * @param printNumber 打印数量 * @return */ @Override @Transactional - public int printBarcodes(Long[] barcodeIds, String printType, boolean reprintFlag) { + public int printBarcodes(Long[] barcodeIds, String printType, boolean reprintFlag, Integer printNumber) { //获取条码List // List> printContents = new ArrayList<>(); // List toUpdatedBaseBarcodeInfos = new ArrayList<>(); for (Long barcodeId : barcodeIds) { - printBarcodesByBarcodeId(barcodeId, printType, reprintFlag); + 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) { @@ -898,84 +902,204 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService @Transactional(rollbackFor = Exception.class) @Override public int insertInternalMesBaseBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo) { - String productBarcode = mesBaseBarcodeInfo.getProductBarcode(); + Long materialId = 0L; + String productBarcodes = mesBaseBarcodeInfo.getProductBarcode();//多个成品条码以,隔开 + String splitCharacterEnglish = ","; + String splitCharacterChinese = ","; + String[] productBarcodesArr = null; + if (productBarcodes.indexOf(splitCharacterEnglish) >= 0) { + productBarcodesArr = productBarcodes.split(splitCharacterEnglish); + + } else if (productBarcodes.indexOf(splitCharacterChinese) >= 0) { + productBarcodesArr = productBarcodes.split(splitCharacterChinese); + } + + List productBarcodeInfoList = new ArrayList<>(); + List basePalletInfoList = new ArrayList<>(); + StringBuilder allErrorMsgBuilder = new StringBuilder(); + StringBuilder palletBindErrorMsg = new StringBuilder(); + boolean palletInfoCodeRepeat = false; + String palletInfoCode = ""; + if (productBarcodesArr != null) { + for (String productBarcode : productBarcodesArr) { + //先根据之前的成品条码信息获取托盘信息 + MesBasePalletInfo basePalletInfo = mesBasePalletInfoMapper.selectMesBasePalletInfoByBarcode(productBarcode); + MesBaseBarcodeInfo productBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeInfo(productBarcode); + if (productBarcodeInfo == null) { + allErrorMsgBuilder.append("成品条码").append(productBarcode).append("不存在;"); + } else { + productBarcodeInfoList.add(productBarcodeInfo); + } + + //多个成品条码绑定的条码必须相同 + if (basePalletInfo != null) { + if (StringUtils.isEmpty(palletInfoCode)) { + palletInfoCode = basePalletInfo.getPalletInfoCode(); + palletBindErrorMsg.append(palletInfoCode); + } else { + if (!palletInfoCode.equals(basePalletInfo.getPalletInfoCode())) { + palletBindErrorMsg.append(",").append(basePalletInfo.getPalletInfoCode()); + palletInfoCodeRepeat = true; + } + } + + basePalletInfoList.add(basePalletInfo); + } + + allErrorMsgBuilder.append(this.checkInternalMesBaseBarcode(productBarcode, productBarcodeInfo, mesBaseBarcodeInfo)); + + } + } else { + MesBasePalletInfo basePalletInfo = mesBasePalletInfoMapper.selectMesBasePalletInfoByBarcode(productBarcodes); + if (basePalletInfo == null) { + allErrorMsgBuilder.append("此成品条码没有绑定托盘信息;"); + } else { + palletInfoCode = basePalletInfo.getPalletInfoCode(); + } + + MesBaseBarcodeInfo productBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeInfo(productBarcodes); + if (productBarcodeInfo == null) { + allErrorMsgBuilder.append("此成品条码不存在;"); + } + + allErrorMsgBuilder.append(this.checkInternalMesBaseBarcode(productBarcodes, productBarcodeInfo, mesBaseBarcodeInfo)); + + productBarcodeInfoList.add(productBarcodeInfo); + basePalletInfoList.add(basePalletInfo); + + materialId = productBarcodeInfo.getMaterialId(); + } + + + if (palletInfoCodeRepeat) { + allErrorMsgBuilder.append("托盘号不同,请重新绑定(").append(palletBindErrorMsg).append(");"); + } + + if (allErrorMsgBuilder.length() > 0) { + throw new ServiceException(allErrorMsgBuilder.toString()); + } + + String barcodeInfo = Seq.getId(Seq.mesBarcodeSeqType, Seq.mesBarcodeCode); + String userName = SecurityUtils.getUsername(); + Date currentDate = DateUtils.getNowDate(); + //修改托盘信息的绑定关系为当前原材料的 + if (basePalletInfoList == null || basePalletInfoList.isEmpty()) { + throw new ServiceException("没有绑定托盘信息;请先绑定"); + } + for (MesBasePalletInfo toUpdatePalletInfo : basePalletInfoList) { + toUpdatePalletInfo.setMaterialBarcode(barcodeInfo); + toUpdatePalletInfo.setUpdateBy(userName); + toUpdatePalletInfo.setUpdateTime(currentDate); + mesBasePalletInfoMapper.updateMesBasePalletInfo(toUpdatePalletInfo); + } + + + mesBaseBarcodeInfo.setBarcodeInfo(barcodeInfo); + mesBaseBarcodeInfo.setBatchCode(barcodeInfo); + mesBaseBarcodeInfo.setMaterialId(materialId); + mesBaseBarcodeInfo.setBatchFlag(MesConstants.NOT_IS_BATCH); + mesBaseBarcodeInfo.setAmount(BigDecimal.ONE); + mesBaseBarcodeInfo.setBarcodeType(MesConstants.MES_BARCODE_TYPE_RAW); + mesBaseBarcodeInfo.setPalletInfoCode(palletInfoCode); + mesBaseBarcodeInfo.setProductBarcode(null); + mesBaseBarcodeInfo.setSingleFlag(MesConstants.MES_BARCODE_SINGLE_FLAG_INTERNAL); + mesBaseBarcodeInfo.setCompleteFlag(MesConstants.MES_BASE_BARCODE_COMPLETE_FLAG_NO); +// if (productBarcodeInfo.getSaleOrderId() != null && !productBarcodeInfo.getSaleOrderId().equals(0L)) { +// mesBaseBarcodeInfo.setSaleOrderId(productBarcodeInfo.getSaleOrderId()); +// mesBaseBarcodeInfo.setSaleorderCode(productBarcodeInfo.getSaleorderCode()); +// mesBaseBarcodeInfo.setSafeFlag(MesConstants.MES_ORDER_BIND_SAFE_FLAG_NO); +// } else { +// mesBaseBarcodeInfo.setSaleOrderId(0L); +// mesBaseBarcodeInfo.setSafeFlag(MesConstants.MES_ORDER_BIND_SAFE_FLAG_YES); +// } + mesBaseBarcodeInfo.setCreateTime(currentDate); + mesBaseBarcodeInfo.setCreateBy(userName); + + mesBaseBarcodeInfoMapper.insertMesBaseBarcodeInfo(mesBaseBarcodeInfo); + + List toInsertedBaseBindBarcodeList = new ArrayList<>(); + + + for (MesBaseBarcodeInfo productBarcodeInfo : productBarcodeInfoList) { + if (StringUtils.isNotEmpty(productBarcodeInfo.getPalletInfoCode())) { + productBarcodeInfo.setPalletInfoCode(""); + productBarcodeInfo.setBindStatus(MesConstants.MES_BARCODE_BIND_STATUS_UNBINDING); + productBarcodeInfo.setUpdateTime(currentDate); + productBarcodeInfo.setUpdateBy(userName); + mesBaseBarcodeInfoMapper.updateMesBaseBarcodeInfo(productBarcodeInfo); + } + + MesBaseBindBarcode baseBindBarcode = new MesBaseBindBarcode(); + baseBindBarcode.setBindBarcode(productBarcodeInfo.getBarcodeInfo()); + baseBindBarcode.setBarcodeId(mesBaseBarcodeInfo.getBarcodeId()); + baseBindBarcode.setBarcodeInfo(barcodeInfo); + baseBindBarcode.setSaleOrderId(mesBaseBarcodeInfo.getSaleOrderId()); + baseBindBarcode.setCreateBy(userName); + baseBindBarcode.setCreateTime(new Date()); + toInsertedBaseBindBarcodeList.add(baseBindBarcode); + } + return mesBaseBindBarcodeMapper.batchMesBaseBindBarcode(toInsertedBaseBindBarcodeList); + } + + + public String checkInternalMesBaseBarcode(String productBarcode, MesBaseBarcodeInfo productBarcodeInfo, MesBaseBarcodeInfo mesBaseBarcodeInfo) { + StringBuilder errorMsg = new StringBuilder(); + //先获取此4楼的成品条码。判断此成品条码是否有绑定过原材料条码 - MesBaseBarcodeInfo bindProductBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByProductBarcode(productBarcode); + MesBaseBindBarcode bindProductBarcodeInfo = mesBaseBindBarcodeMapper.selectMesBaseBindBarcodeByBindBarcode(productBarcode); if (bindProductBarcodeInfo != null) { - throw new ServiceException("此成品条码已经打印过原材料条码,无需重复打印"); + errorMsg.append("成品条码[").append(productBarcode).append("]已经生成过原材料条码,无需重复生成;"); + } + + //多个成品条码的销售订单要相同,并且需要与当前生产明细的销售订单相同; + String produceSaleOrderCode = StringUtils.isEmpty(mesBaseBarcodeInfo.getSaleorderCode()) ? "无" + : mesBaseBarcodeInfo.getSaleorderCode(); + String productSaleOrderCode = StringUtils.isEmpty(productBarcodeInfo.getSaleorderCode()) ? "无" + : productBarcodeInfo.getSaleorderCode(); + + if (!produceSaleOrderCode.equals(productSaleOrderCode)) { + errorMsg.append("成品条码销售订单与当前生产明细不同(成品条码:").append(productBarcode) + .append(",销售订单:").append(productSaleOrderCode) + .append(",当前生产明细销售订单:").append(produceSaleOrderCode).append(");"); + } + + if (!productBarcodeInfo.getCompleteFlag().equals(MesConstants.MES_BASE_BARCODE_COMPLETE_FLAG_NO)) { + errorMsg.append("成品条码[").append(productBarcode).append("]是完整物料,未拆分;"); } WmsProductStockVo queryProductStockVo = new WmsProductStockVo(); queryProductStockVo.setProductBatch(productBarcode); - R isExistProductStock = remoteWmsService.isExistProductStock(queryProductStockVo, SecurityConstants.INNER); - if (isExistProductStock.getData()) { - throw new ServiceException("此物料条码还未出库,不能生成原材料条码"); + R isProductOutstock = remoteWmsService.isProductOutstock(queryProductStockVo, SecurityConstants.INNER); + if (!isProductOutstock.getData()) { + errorMsg.append("成品条码[").append(productBarcode).append("]还未出库,不能生成原材料条码;"); } - //先根据之前的成品条码信息获取托盘信息 MesBasePalletInfo queryPalletInfo = new MesBasePalletInfo(); queryPalletInfo.setMaterialBarcode(productBarcode); - List basePalletInfos = mesBasePalletInfoMapper.selectMesBasePalletInfoList(queryPalletInfo); - if (basePalletInfos == null || basePalletInfos.isEmpty()) { - throw new ServiceException("此成品未绑定托盘信息"); - } - String userName = SecurityUtils.getUsername(); - Date currentDate = DateUtils.getNowDate(); - String barcodeInfo = Seq.getId(Seq.mesBarcodeSeqType, Seq.mesBarcodeCode); - //修改托盘信息的绑定关系为当前原材料的 - MesBasePalletInfo basePalletInfo = basePalletInfos.get(0); - basePalletInfo.setMaterialBarcode(barcodeInfo); - basePalletInfo.setUpdateBy(userName); - basePalletInfo.setUpdateTime(currentDate); - mesBasePalletInfoMapper.updateMesBasePalletInfo(basePalletInfo); + //有可能一个托盘有多个成品,但是只绑定了一个,也有可能是从货梯运输上来的 +// if (basePalletInfos == null || basePalletInfos.isEmpty()) { +// errorMsg.append("此成品未绑定托盘信息"); +// } - MesBaseBarcodeInfo productBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeInfo(productBarcode); - if (productBarcodeInfo == null) { - throw new ServiceException("成品条码不存在"); - } - if (StringUtils.isEmpty(productBarcodeInfo.getPalletInfoCode())) { - throw new ServiceException("此成品还未绑定托盘信息"); - } - - productBarcodeInfo.setPalletInfoCode(""); - productBarcodeInfo.setBindStatus(MesConstants.MES_BARCODE_BIND_STATUS_UNBINDING); - productBarcodeInfo.setUpdateTime(currentDate); - productBarcodeInfo.setUpdateBy(userName); - mesBaseBarcodeInfoMapper.updateMesBaseBarcodeInfo(productBarcodeInfo); +// if (StringUtils.isEmpty(productBarcodeInfo.getPalletInfoCode())) { +// errorMsg.append("成品条码""还未绑定托盘信息"); +// } //更新此成品码之前的配对码的绑定码 MesBaseBarcodeInfo queryBarcodeInfo = new MesBaseBarcodeInfo(); queryBarcodeInfo.setBindBarcode(productBarcode); List bindBarcodes = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoList(queryBarcodeInfo); if (bindBarcodes == null || bindBarcodes.isEmpty()) { - throw new ServiceException("此成品码没有配对码信息"); + errorMsg.append("成品条码").append(productBarcode).append("没有配对码信息;"); } - mesBaseBarcodeInfo.setBarcodeInfo(barcodeInfo); - mesBaseBarcodeInfo.setBatchCode(barcodeInfo); - mesBaseBarcodeInfo.setBatchFlag(MesConstants.NOT_IS_BATCH); - mesBaseBarcodeInfo.setAmount(BigDecimal.ONE); - mesBaseBarcodeInfo.setBarcodeType(MesConstants.MES_BARCODE_TYPE_RAW); - mesBaseBarcodeInfo.setPalletInfoCode(basePalletInfo.getPalletInfoCode()); - mesBaseBarcodeInfo.setSingleFlag(MesConstants.MES_BARCODE_SINGLE_FLAG_INTERNAL); - mesBaseBarcodeInfo.setCompleteFlag(productBarcodeInfo.getCompleteFlag()); - if (productBarcodeInfo.getSaleOrderId() != null && !productBarcodeInfo.getSaleOrderId().equals(0L)) { - mesBaseBarcodeInfo.setSaleOrderId(productBarcodeInfo.getSaleOrderId()); - mesBaseBarcodeInfo.setSaleorderCode(productBarcodeInfo.getSaleorderCode()); - mesBaseBarcodeInfo.setSafeFlag(MesConstants.MES_ORDER_BIND_SAFE_FLAG_NO); - } else { - mesBaseBarcodeInfo.setSaleOrderId(0L); - mesBaseBarcodeInfo.setSafeFlag(MesConstants.MES_ORDER_BIND_SAFE_FLAG_YES); - } - mesBaseBarcodeInfo.setCreateTime(currentDate); - mesBaseBarcodeInfo.setCreateBy(userName); - return mesBaseBarcodeInfoMapper.insertMesBaseBarcodeInfo(mesBaseBarcodeInfo); + return errorMsg.toString(); + } - /** * 重新生成条码信息,之前的作废 * @@ -1371,6 +1495,21 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService return batchCodeBuilder.toString(); } + + /** + * 查询原材料条码信息 + * + * @param productBarcode 绑定的成品条码 + * @return 条码信息 + */ + @Override + public MesBaseBarcodeInfo selectRawBarcodeInfoByProductBarcode(String productBarcode) { + MesBaseBindBarcode mesBaseBindBarcode = mesBaseBindBarcodeMapper.selectMesBaseBindBarcodeByBindBarcode(productBarcode); + + return mesBaseBindBarcode == null ? null : mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeInfo(mesBaseBindBarcode.getBarcodeInfo()); + } + + // public MesPurchaseOrder insertVirtualPurchaseOrder(Long materialId, String barcodeInfo, BigDecimal sumOrderAmount, // List mesPurchaseOrderRelates,String userName, Date currentDate) { // MesPurchaseOrder virtualPurchaseOrder = new MesPurchaseOrder(); diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesProductPlanDetailServiceImpl.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesProductPlanDetailServiceImpl.java index 1352ee8d..6b58e96b 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesProductPlanDetailServiceImpl.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesProductPlanDetailServiceImpl.java @@ -39,7 +39,7 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer private MesProductPlanMapper mesProductPlanMapper; @Autowired - private MesMaterialCheckResultMapper mesMaterialCheckResultMapper; + private MesBaseBindBarcodeMapper mesBaseBindBarcodeMapper; @Autowired private MesBaseBarcodeInfoMapper mesBaseBarcodeInfoMapper; @@ -259,14 +259,10 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer - - //如果是五楼拆分,校验是否有配对条码 if (StringUtils.isNotEmpty(mesProductPlanDetail.getProcessType()) && mesProductPlanDetail.getProcessType().equals(MesConstants.MES_PROCESS_TYPE_FIFTH_SPLIT)) { - - // MesBaseBarcodeInfo queryBarcodeInfo = new MesBaseBarcodeInfo(); queryBarcodeInfo.setPlanDetailCode(dbProductPlanDetail.getPlanDetailCode()); @@ -277,10 +273,6 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer } - - - - MesBaseBarcodeInfo mesBaseBarcodeInfo = rawBarcodeInfos.get(0); String bindBarcode; @@ -459,7 +451,7 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer //在拆分区拿柜体拆分时,需要打印配对码,然后跟柜体码绑定 //在从4楼到5楼接驳位时,需要根据4楼的成品码重新打印原材料条码 MesBaseBarcodeInfo mesBaseBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeInfo( - mesProductPlanDetail.getMaterialBarcode()); + mesProductPlanDetail.getRawMaterialBarcode()); if (mesBaseBarcodeInfo == null) { throw new ServiceException("无派工任务"); } @@ -481,7 +473,7 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer } MesProductPlan queryProductPlan = new MesProductPlan(); queryProductPlan.setDispatchCode(barcodeProductPlan.getDispatchCode()); - queryProductPlan.setFinalProcessFlag(MesConstants.MES_FINAL_PROCESS_FLAG_YES); + queryProductPlan.setProcessId(mesConfig.getPdaAssembleProcessId()); List mesProductPlans = mesProductPlanMapper.selectOnlyMesProductPlans(queryProductPlan); if (mesProductPlans == null || mesProductPlans.isEmpty()) { throw new ServiceException("没有派工信息"); @@ -564,12 +556,6 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer throw new ServiceException("配对条码有误,未找到原材料条码信息"); } - if (StringUtils.isNotEmpty(bindBarcodeInfo.getSingleFlag()) && - bindBarcodeInfo.getSingleFlag().equals(MesConstants.MES_BARCODE_SINGLE_FLAG_INTERNAL)) {//对内生产 - if (StringUtils.isEmpty(bindBarcodeInfo.getProductBarcode())) { - throw new ServiceException("未按成品条码生成原材料条码"); - } - } if (StringUtils.isNotEmpty(bindBarcodeInfo.getTransferredPlanDetailCode())) { throw new ServiceException("此条码已经扫描使用过,不能再次使用"); @@ -578,23 +564,30 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer MesProductPlan barcodeProductPlan; if (bindBarcodeInfo.getBarcodeType().equals(MesConstants.MES_BARCODE_TYPE_PRODUCT)) {//如果是成品码,则是4楼绑定的,需要找到5楼生成的原材料条码 - //通过productbarcode找到原材料条码 - MesBaseBarcodeInfo rawBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByProductBarcode(mesBaseBarcodeInfo.getBindBarcode()); - if (rawBarcodeInfo == null) { - throw new ServiceException("未找到原材料条码"); - } - barcodeProductPlan = mesProductPlanMapper.selectOnlyMesProductPlanByPlanCode(rawBarcodeInfo.getPlanCode()); + //四楼到5楼的装配开始时有可能柜体还没运输上来,还未生成原材料条码,组装出库再判断 +// MesBaseBindBarcode mesBaseBindBarcode = mesBaseBindBarcodeMapper.selectMesBaseBindBarcodeByBindBarcode(mesBaseBarcodeInfo.getBindBarcode()); +// if (mesBaseBindBarcode ==null) { +// throw new ServiceException("未按成品条码生成原材料条码"); +// } +// +// //通过绑定的原材料条码内容找到原材料条码, +// MesBaseBarcodeInfo rawBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByProductBarcode(mesBaseBindBarcode.getBarcodeInfo()); +// if (rawBarcodeInfo == null) { +// throw new ServiceException("未找到原材料条码"); +// } +// barcodeProductPlan = mesProductPlanMapper.selectOnlyMesProductPlanByPlanCode(rawBarcodeInfo.getPlanCode()); } else { barcodeProductPlan = mesProductPlanMapper.selectOnlyMesProductPlanByPlanCode(mesBaseBarcodeInfo.getPlanCode()); + //校验此条码是否是同一派工单 + if (barcodeProductPlan == null) { + throw new ServiceException("条码有误,没有相关派工"); + } + if (!barcodeProductPlan.getDispatchCode().equals(dispatchCode)) { + throw new ServiceException("此条码的派工单号为:" + barcodeProductPlan.getDispatchCode() + ",与此派工单号不符"); + } } - //校验此条码是否是同一派工单 - if (barcodeProductPlan == null) { - throw new ServiceException("条码有误,没有相关派工"); - } - if (!barcodeProductPlan.getDispatchCode().equals(dispatchCode)) { - throw new ServiceException("此条码的派工单号为:" + barcodeProductPlan.getDispatchCode() + ",与此派工单号不符"); - } + bindBarcodeInfo.setTransferredPlanDetailCode(planDetailCode); bindBarcodeInfo.setUpdateTime(currentDate); diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesProductPlanServiceImpl.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesProductPlanServiceImpl.java index 61b9d4cd..ff592bd3 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesProductPlanServiceImpl.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesProductPlanServiceImpl.java @@ -491,6 +491,7 @@ public class MesProductPlanServiceImpl implements IMesProductPlanService { Long userId = SecurityUtils.getUserId(); mesProductPlan.setUserId(userId); mesProductPlan.setProcessId(processId); + mesProductPlan.setIncompleteFlag("1"); // String ipAddress = IpUtils.getIpAddr(); // MesBaseStationInfo mesBaseStationInfo = mesBase // queryBaseStation.set diff --git a/hw-modules/hw-mes/src/main/resources/mapper/mes/MesBaseBarcodeInfoMapper.xml b/hw-modules/hw-mes/src/main/resources/mapper/mes/MesBaseBarcodeInfoMapper.xml index c9017b70..fc61fd2c 100644 --- a/hw-modules/hw-mes/src/main/resources/mapper/mes/MesBaseBarcodeInfoMapper.xml +++ b/hw-modules/hw-mes/src/main/resources/mapper/mes/MesBaseBarcodeInfoMapper.xml @@ -311,6 +311,11 @@ + + + + + and barcode_id = #{barcodeId} + and bind_barcode = #{bindBarcode} + + + + + + + insert into mes_base_bind_barcode + + barcode_id, + barcode_info, + sale_order_id, + bind_barcode, + create_by, + create_time, + + + #{barcodeId}, + #{barcodeInfo}, + #{saleOrderId}, + #{bindBarcode}, + #{createBy}, + #{createTime}, + + + + + update mes_base_bind_barcode + + barcode_id = #{barcodeId}, + bind_barcode = #{bindBarcode}, + create_by = #{createBy}, + create_time = #{createTime}, + + where bind_barcode_id = #{bindBarcodeId} + + + + delete from mes_base_bind_barcode where bind_barcode_id = #{bindBarcodeId} + + + + delete from mes_base_bind_barcode where bind_barcode_id in + + #{bindBarcodeId} + + + + + + insert into mes_base_bind_barcode( bind_barcode_id, barcode_id, barcode_info, sale_order_id,bind_barcode, create_by, create_time) values + + ( #{item.bindBarcodeId}, #{item.barcodeId},#{item.barcodeInfo}, #{item.saleOrderId}, #{item.bindBarcode}, #{item.createBy}, #{item.createTime}) + + + + + + diff --git a/hw-modules/hw-mes/src/main/resources/mapper/mes/MesProductOrderMapper.xml b/hw-modules/hw-mes/src/main/resources/mapper/mes/MesProductOrderMapper.xml index 13442ba1..1148bd9f 100644 --- a/hw-modules/hw-mes/src/main/resources/mapper/mes/MesProductOrderMapper.xml +++ b/hw-modules/hw-mes/src/main/resources/mapper/mes/MesProductOrderMapper.xml @@ -17,6 +17,7 @@ + @@ -62,6 +63,7 @@ concat(mb.material_name, '-', mb.material_bom_desc) material_bom_desc, mpo.dispatch_type, mpo.dispatch_id, + mpo.cabinet_channel, mbr.route_name dispatchName, bmi.material_code, bmi.material_name, @@ -162,6 +164,7 @@ produce_material_id, dispatch_type, dispatch_id, + cabinet_channel, sale_amount, plan_amount, dispatch_amount, @@ -195,6 +198,7 @@ #{produceMaterialId}, #{dispatchType}, #{dispatchId}, + #{cabinetChannel}, #{saleAmount}, #{planAmount}, #{dispatchAmount}, @@ -232,6 +236,7 @@ produce_material_id = #{produceMaterialId}, dispatch_type = #{dispatchType}, dispatch_id = #{dispatchId}, + cabinet_channel = #{cabinetChannel}, sale_amount = #{saleAmount}, plan_amount = #{planAmount}, dispatch_amount = #{dispatchAmount}, @@ -309,6 +314,7 @@ concat(mb.material_name, '-', mb.material_bom_desc) material_bom_desc, mpo.dispatch_type, mpo.dispatch_id, + mpo.cabinet_channel, mbr.route_name dispatchName, bmi.material_code, bmi.material_name, diff --git a/hw-modules/hw-mes/src/main/resources/mapper/mes/MesProductPlanMapper.xml b/hw-modules/hw-mes/src/main/resources/mapper/mes/MesProductPlanMapper.xml index 0fd1cb92..7aa9fcf0 100644 --- a/hw-modules/hw-mes/src/main/resources/mapper/mes/MesProductPlanMapper.xml +++ b/hw-modules/hw-mes/src/main/resources/mapper/mes/MesProductPlanMapper.xml @@ -53,6 +53,8 @@ + + @@ -347,13 +349,15 @@ mpp.material_bom_id, mpp.process_id, mpp.process_order, mpp.last_process_id,mpp.final_process_flag,mpp.user_id, mpp.station_id, mpp.dispatch_amount, mpp.plan_amount, mpp.complete_amount, mpp.plan_begin_time, mpp.plan_end_time, mpp.real_begin_time, mpp.real_end_time, - mpp.attach_id, mpp.plan_status, mpo.plan_delivery_date,mpo.sale_type,mbmi.material_code,mbmi.material_name,mbmi.material_spec + mpp.attach_id, mpp.plan_status, mpo.plan_delivery_date,mpo.sale_type,mpo.cabinet_channel, + mbmi.material_code,mbmi.material_name,mbmi.material_spec from mes_product_plan mpp left join mes_product_order mpo on mpp.product_order_id = mpo.product_order_id left join mes_base_material_info mbmi on mpp.material_id=mbmi.material_id and mpp.process_id = #{processId} and mpp.user_id = #{userId} and mpp.plan_status = #{planStatus} + and mpp.plan_status in ('1','2') order by mpp.plan_status,mpp.plan_begin_time diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsProductOutstockController.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsProductOutstockController.java index 760e2db4..9fb4db25 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsProductOutstockController.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsProductOutstockController.java @@ -4,6 +4,8 @@ import java.util.List; import java.io.IOException; import javax.servlet.http.HttpServletResponse; +import com.hw.common.security.annotation.InnerAuth; +import com.hw.wms.api.domain.vo.WmsProductStockVo; import com.hw.wms.domain.vo.WmsProductOutstockAuditVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; @@ -27,7 +29,7 @@ import com.hw.common.core.web.page.TableDataInfo; /** * 成品出库记录Controller - * + * * @author xs * @date 2023-12-20 */ @@ -141,4 +143,20 @@ public class WmsProductOutstockController extends BaseController public AjaxResult auditProductOutstock(@Validated @RequestBody WmsProductOutstockAuditVo wmsProductOutstockAuditVo) { return success(wmsProductOutstockService.auditProductOutstock(wmsProductOutstockAuditVo)); } + + + /** + * 判断成品是否出库过 + */ + @InnerAuth + @PostMapping(value = "/isProductOutstock") + public AjaxResult isProductOutstock(@RequestBody WmsProductStockVo queryProductStockVo) { + WmsProductOutstock queryProductOutstock = new WmsProductOutstock(); + queryProductOutstock.setProductBatch(queryProductStockVo.getProductBatch()); + List wmsProductOutstocks = wmsProductOutstockService.selectWmsProductOutstockList(queryProductOutstock); + + boolean isProductOutstock = wmsProductOutstocks!= null && !wmsProductOutstocks.isEmpty(); + return success(isProductOutstock); + } + } diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/vo/WmsRawBackVo.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/vo/WmsRawBackVo.java index eb59ab5f..3343ee67 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/vo/WmsRawBackVo.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/vo/WmsRawBackVo.java @@ -24,4 +24,8 @@ public class WmsRawBackVo { //生产计划编号 @NotBlank(message="生产计划明细编号必须输入") private String planDetailCode; + + //柜体渠道 + @NotBlank(message="柜体渠道必须输入") + private String cabinetChannel; } diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsProductInstockServiceImpl.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsProductInstockServiceImpl.java index 0cb050ab..c4a98057 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsProductInstockServiceImpl.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsProductInstockServiceImpl.java @@ -310,7 +310,7 @@ public class WmsProductInstockServiceImpl implements IWmsProductInstockService { * 适用于5楼组装入库(PDA操作) */ MesPdaProductPlanVo mesPdaProductPlanVo = new MesPdaProductPlanVo(); - mesPdaProductPlanVo.setMaterialBarcode(wmsProduceInstockVo.getMaterialBarcode()); + mesPdaProductPlanVo.setRawMaterialBarcode(wmsProduceInstockVo.getMaterialBarcode()); R tdReturnMsg = remoteMesService.complete5thFloorInstall(mesPdaProductPlanVo, SecurityConstants.INNER); if (tdReturnMsg.getCode() != Constants.SUCCESS) {//抛出异常,回滚事务 throw new RuntimeException(tdReturnMsg.getMsg()); diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsProductOutstockServiceImpl.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsProductOutstockServiceImpl.java index f7219f1a..22f7ee03 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsProductOutstockServiceImpl.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsProductOutstockServiceImpl.java @@ -319,6 +319,7 @@ public class WmsProductOutstockServiceImpl implements IWmsProductOutstockService wmsProductOutstock.setOutstockType(WmsConstants.WMS_PRODUCT_OUTSTOCK_TYPE_SALE); wmsProductOutstock.setAuditStatus(WmsConstants.WMS_AUDIT_STATUS_PASS); wmsProductOutstock.setExecuteStatus(WmsConstants.WMS_EXECUTE_STATUS_FINISH); + wmsProductOutstock.setProductBatch(materialBarcode); wmsProductOutstock.setApplyBy(userName); wmsProductOutstock.setApplyDate(currentDate); wmsProductOutstock.setTaskCode(Seq.getId(Seq.productOutstockSeqType, Seq.productOutstockCode)); 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 dd048b4b..130ee5bf 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 @@ -287,16 +287,33 @@ public class WmsRawInstockServiceImpl implements IWmsRawInstockService { throw new ServiceException("物料条码有误"); } - //判断此柜体是否已跟配对码绑定,如果未绑定不允许返库 - R bindBarcodeInfoR = remoteMesService.getBarcodeByBindBarcode(materialBarcode, SecurityConstants.INNER); - if (bindBarcodeInfoR == null) { - throw new ServiceException("没找到绑定信息,不能返库"); - } - MesBaseBarcodeInfo bindBarcodeInfo = bindBarcodeInfoR.getData(); - if (bindBarcodeInfo == null) { - throw new ServiceException("没找到绑定信息,不能返库"); + String cabinetChannel = wmsRawBackVo.getCabinetChannel(); + + if(cabinetChannel.equals(MesConstants.MES_PRODUCT_ORDER_CABINET_CHANNEL_PURCHASE)){ + //判断此柜体是否已跟配对码绑定,如果未绑定不允许返库 + R bindBarcodeInfoR = remoteMesService.getBarcodeByBindBarcode(materialBarcode, SecurityConstants.INNER); + if (bindBarcodeInfoR == null) { + throw new ServiceException("没找到绑定信息,不能返库"); + } + MesBaseBarcodeInfo bindBarcodeInfo = bindBarcodeInfoR.getData(); + if (bindBarcodeInfo == null) { + throw new ServiceException("没找到绑定信息,不能返库"); + } + + //4楼上5楼的不需要申请领柜体,所以也不需要返库 + WmsRawOutstock queryRawOutsotck = new WmsRawOutstock(); + queryRawOutsotck.setPlanDetailCode(wmsRawBackVo.getPlanDetailCode()); + queryRawOutsotck.setSplitFlag(WmsConstants.WMS_RAW_OUTSTOCK_SPLIT_FLAG_YES); + List wmsRawOutstocks = wmsRawOutstockMapper.selectWmsRawOutstockList(queryRawOutsotck); + if (wmsRawOutstocks == null || wmsRawOutstocks.isEmpty()) { + throw new ServiceException("没有领取柜体,无需返库"); + } + + }else{ + } + WmsRawInstock queryReturnRawInstock = new WmsRawInstock(); queryReturnRawInstock.setReturnFlag("1"); List returnRawInstocks = wmsRawInstockMapper.selectWmsRawInstockList(queryReturnRawInstock); @@ -311,15 +328,6 @@ public class WmsRawInstockServiceImpl implements IWmsRawInstockService { throw new ServiceException("此生产明细已经申请过返库,无需重复申请"); } - //4楼上5楼的不需要申请领柜体,所以也不需要返库 - WmsRawOutstock queryRawOutsotck = new WmsRawOutstock(); - queryRawOutsotck.setPlanDetailCode(wmsRawBackVo.getPlanDetailCode()); - queryRawOutsotck.setSplitFlag(WmsConstants.WMS_RAW_OUTSTOCK_SPLIT_FLAG_YES); - List wmsRawOutstocks = wmsRawOutstockMapper.selectWmsRawOutstockList(queryRawOutsotck); - if (wmsRawOutstocks == null || wmsRawOutstocks.isEmpty()) { - throw new ServiceException("没有领取柜体,无需返库"); - } - if (!baseBarcodeInfo.getPlanDetailCode().equals(wmsRawBackVo.getPlanDetailCode())) { throw new ServiceException(String.format("此物料条码明细编号为%s:,与此明细编号不符", baseBarcodeInfo.getPlanDetailCode())); 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 2fba13d1..1459e13c 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 @@ -333,7 +333,7 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService { if (rawOutstockId != null) { wmsRawOutstock = wmsRawOutstockMapper.selectWmsRawOutstockByRawOutstockId(rawOutstockId); } else { - wmsRawOutstock = this.getWmsRawOutstock(baseLocation,baseBarcodeInfo); + wmsRawOutstock = this.getWmsRawOutstock(baseLocation, baseBarcodeInfo); } @@ -387,7 +387,7 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService { return 1; } - public WmsRawOutstock getWmsRawOutstock(WmsBaseLocation baseLocation,MesBaseBarcodeInfo baseBarcodeInfo){ + public WmsRawOutstock getWmsRawOutstock(WmsBaseLocation baseLocation, MesBaseBarcodeInfo baseBarcodeInfo) { WmsRawOutstock queryRawOutstock = new WmsRawOutstock(); queryRawOutstock.setWarehouseId(baseLocation.getWarehouseId()); queryRawOutstock.setMaterialId(baseBarcodeInfo.getMaterialId()); @@ -969,7 +969,7 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService { public int assembleOutstock(WmsAssembleOutstockVo wmsAssembleOutstockVo) { /**1、柜体出库,wcs轮询后执行完成要删除库存 * 2、拆分,生成条码绑定,贴码 - * 3、返库(返库的是之前的条码,库存也是之前条码库存信息,返库后记录完整标识),WCS轮询执行完成后要插入库存,完整标识为否 + * 3、返库(返库的是之前的条码,库存也是之前条码库存信息,返库后记录完整标识为非完整),WCS轮询执行完成后要插入库存,完整标识为否 * * */ String materialBarcode = wmsAssembleOutstockVo.getMaterialBarcode();//配对码 @@ -987,7 +987,7 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService { } /**在申请领柜体后,wms插入wms_raw_outstock,wcs插入wms_raw_outstock_detail,更新wms_raw_outstock*/ - String bindBarcode = baseBarcodeInfo.getBindBarcode();//原柜体条码 + String bindBarcode = baseBarcodeInfo.getBindBarcode();//配对码绑定的原柜体条码(四楼到五楼的是成品码,外部采购的是原材料条码) if (StringUtils.isEmpty(bindBarcode)) { throw new ServiceException("此柜体还未绑定"); } @@ -1002,26 +1002,26 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService { } - String assembleMaterialBarcode,planCode,planDetailCode,palletInfoCode; + String assembleMaterialBarcode, planCode, planDetailCode, palletInfoCode; Long materialId; if (!bindBarcodeInfo.getBarcodeType().equals(MesConstants.MES_BARCODE_TYPE_RAW)) { - //bindBarcode在这位成品码,通过productbarcode找到5楼拆分区新生成的原材料条码 - R productBarcodeInfoR = remoteMesService.getBarcodeByProductBarcode(bindBarcode, SecurityConstants.INNER); - if (productBarcodeInfoR == null) { + //bindBarcode在这为成品码,通过productbarcode找到5楼拆分区新生成的原材料条码 + R rawBarcodeInfoR = remoteMesService.getRawBarcodeByProductBarcode(bindBarcode, SecurityConstants.INNER); + if (rawBarcodeInfoR == null) { throw new ServiceException("没有绑定的原材料条码"); } - MesBaseBarcodeInfo productBarcodeInfo = productBarcodeInfoR.getData(); - if (productBarcodeInfo == null) { + MesBaseBarcodeInfo rawBarcodeInfo = rawBarcodeInfoR.getData(); + if (rawBarcodeInfo == null) { throw new ServiceException("没有绑定的原材料条码"); } - assembleMaterialBarcode = productBarcodeInfo.getBarcodeInfo(); - planCode = productBarcodeInfo.getPlanCode(); - planDetailCode = productBarcodeInfo.getPlanDetailCode(); - palletInfoCode = productBarcodeInfo.getPalletInfoCode(); - materialId = productBarcodeInfo.getMaterialId(); - }else{ - assembleMaterialBarcode = bindBarcode;//组装出库的物料条码 + assembleMaterialBarcode = rawBarcodeInfo.getBarcodeInfo(); + planCode = rawBarcodeInfo.getPlanCode(); + planDetailCode = rawBarcodeInfo.getPlanDetailCode(); + palletInfoCode = rawBarcodeInfo.getPalletInfoCode(); + materialId = rawBarcodeInfo.getMaterialId(); + } else { + assembleMaterialBarcode = bindBarcode;//组装出库的原材料条码 planCode = bindBarcodeInfo.getPlanCode(); planDetailCode = bindBarcodeInfo.getPlanDetailCode(); palletInfoCode = bindBarcodeInfo.getPalletInfoCode(); @@ -1032,19 +1032,50 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService { WmsRawOutstock queryRawOutstock = new WmsRawOutstock(); queryRawOutstock.setMaterialBatch(assembleMaterialBarcode); List wmsRawOutstocks = wmsRawOutstockMapper.selectWmsRawOutstockList(queryRawOutstock); - if (wmsRawOutstocks != null && !wmsRawOutstocks.isEmpty()) { - throw new ServiceException("已经有此物料出库记录"); - } WmsRawStock queryRawStock = new WmsRawStock(); queryRawStock.setInstockBatch(assembleMaterialBarcode); - queryRawStock.setCompleteFlag(WmsConstants.WMS_RAW_STOCK_COMPLETE_FLAG_NO); +// queryRawStock.setCompleteFlag(WmsConstants.WMS_RAW_STOCK_COMPLETE_FLAG_NO); List wmsRawStocks = wmsRawStockMapper.selectWmsRawStockInList(queryRawStock); + + + //如果是对内生产的柜体,则判断 + if (baseBarcodeInfo.getSingleFlag().equals(MesConstants.MES_BARCODE_SINGLE_FLAG_INTERNAL)) { + if (wmsRawOutstocks == null || wmsRawOutstocks.isEmpty()) { + this.assembleRawOutstock(wmsRawStocks, assembleMaterialBarcode, planCode, planDetailCode, + palletInfoCode, materialId, bindBarcodeInfo.getSaleOrderId()); + } + } else { + if (wmsRawOutstocks != null && !wmsRawOutstocks.isEmpty()) { + throw new ServiceException("已经有此物料出库记录"); + } + + this.assembleRawOutstock(wmsRawStocks, assembleMaterialBarcode, planCode, planDetailCode, + palletInfoCode, materialId, bindBarcodeInfo.getSaleOrderId()); + } + + + MesPdaProductPlanVo mesPdaProductPlanVo = new MesPdaProductPlanVo(); + mesPdaProductPlanVo.setRawMaterialBarcode(assembleMaterialBarcode);//采购的柜体原材料条码,或者4楼到5楼后生成的原材料条码 + mesPdaProductPlanVo.setMaterialBarcode(bindBarcode);// 采购的bindbarcode就是采购的原材料条码,而四楼到5楼的则是在4楼绑定的成品条码。原柜体的条码(之前的原材料条码或成品条码),start后在plandetail保存此码 + R tdReturnMsg = remoteMesService.start5thFloorInstall(mesPdaProductPlanVo, SecurityConstants.INNER); + if (tdReturnMsg.getCode() != Constants.SUCCESS) {//抛出异常,回滚事务 + throw new ServiceException(tdReturnMsg.getMsg()); + } + + return 1; + } + + + public void assembleRawOutstock(List wmsRawStocks, String assembleMaterialBarcode, String planCode, String planDetailCode, + String palletInfoCode, Long materialId, Long saleOrderId) { if (wmsRawStocks == null || wmsRawStocks.isEmpty()) { throw new ServiceException("没找到库存信息"); } - WmsRawStock wmsRawStock = wmsRawStocks.get(0); //待agv出库后,wcs更新库存信息(需要删除库存,由于是1个) + if (wmsRawStock.getCompleteFlag().equals(WmsConstants.WMS_RAW_STOCK_COMPLETE_FLAG_YES)) { + throw new ServiceException("绑定的柜体为完整库存,未拆分过"); + } WmsRawOutstock wmsRawOutstock = new WmsRawOutstock(); wmsRawOutstock.setTaskCode(Seq.getId(Seq.rawOutstockSeqType, Seq.rawOutstockSeqCode)); @@ -1055,9 +1086,7 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService { wmsRawOutstock.setPlanDetailCode(planDetailCode); wmsRawOutstock.setPalletInfoCode(palletInfoCode);//在绑定时需要在条码信息中记录托盘码 wmsRawOutstock.setMaterialId(materialId); - - wmsRawOutstock.setSaleOrderId(bindBarcodeInfo.getSaleOrderId());//销售订单ID都是一样的 - + wmsRawOutstock.setSaleOrderId(saleOrderId);//销售订单ID都是一样的 wmsRawOutstock.setOutstockAmount(BigDecimal.ONE); wmsRawOutstock.setEndStationCode(wmsConfig.getFifthAssembleStationCode());//目标位置,五楼组装区域 wmsRawOutstock.setOperationType(WmsConstants.WMS_OPERATION_TYPE_AUTO); @@ -1068,18 +1097,8 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService { wmsRawOutstock.setExecuteStatus(WmsConstants.WMS_EXECUTE_STATUS_TOEXECUTE); wmsRawOutstockMapper.insertWmsRawOutstock(wmsRawOutstock); - - MesPdaProductPlanVo mesPdaProductPlanVo = new MesPdaProductPlanVo(); - mesPdaProductPlanVo.setMaterialBarcode(assembleMaterialBarcode);//原柜体的条码(之前的原材料条码),start后在plandetail保存此码 - R tdReturnMsg = remoteMesService.start5thFloorInstall(mesPdaProductPlanVo, SecurityConstants.INNER); - if (tdReturnMsg.getCode() != Constants.SUCCESS) {//抛出异常,回滚事务 - throw new ServiceException(tdReturnMsg.getMsg()); - } - - return 1; } - /** * 在板材出库时先校验是否能出库 * 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 f5542642..830f23da 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.domain.MesBaseBarcodeInfo; import com.hw.mes.api.domain.MesBaseMaterialInfo; import com.hw.mes.api.domain.MesBaseStationInfo; import com.hw.mes.api.domain.vo.MesSaleOrderTransferVo; +import com.hw.wms.config.WmsConfig; import com.hw.wms.domain.WmsBaseLocation; import com.hw.wms.domain.WmsProductStock; import com.hw.wms.domain.WmsRawStock; @@ -55,6 +56,9 @@ public class WmsStockTotalServiceImpl implements IWmsStockTotalService { @Autowired private RemoteMesService remoteMesService; + @Autowired + private WmsConfig wmsConfig; + public static final int TRANSFER_TYPE_RAW_STOCK = 1; public static final int TRANSFER_TYPE_STOCK_TOTAL = 2; @@ -148,7 +152,9 @@ public class WmsStockTotalServiceImpl implements IWmsStockTotalService { @Override public List selectWmsStockTotalJoinListBySaleOrder(WmsStockTotal wmsStockTotal) { String materialClassfication = wmsStockTotal.getMaterialClassfication(); - if (materialClassfication.equals(MesConstants.MES_MATERIAL_CLASSFICATION_VIRTUAL)) { + Long warehouseId = wmsStockTotal.getWarehouseId(); + + if (warehouseId.equals(wmsConfig.getFifthCabinetWarehouseId()) && materialClassfication.equals(MesConstants.MES_MATERIAL_CLASSFICATION_VIRTUAL)) { wmsStockTotal.setMaterialId(wmsStockTotal.getProductId()); wmsStockTotal.setAccessoriesFlag(null); } else { diff --git a/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsProductOutstockMapper.xml b/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsProductOutstockMapper.xml index 4b646586..fc32a100 100644 --- a/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsProductOutstockMapper.xml +++ b/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsProductOutstockMapper.xml @@ -75,6 +75,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and task_code = #{taskCode} and warehouse_id = #{warehouseId} and location_code = #{locationCode} + and product_batch = #{productBatch} and product_type = #{productType} and operation_type = #{operationType} and outstock_type = #{outstockType} diff --git a/hw-ui/src/api/board/barcode.js b/hw-ui/src/api/board/barcode.js index 9bcf01f4..41ed3d7d 100644 --- a/hw-ui/src/api/board/barcode.js +++ b/hw-ui/src/api/board/barcode.js @@ -28,6 +28,15 @@ export function printProductBarcodes(barcodeIds) { } +// 打印配对条码 +export function printBindBarcodes(barcodeIds,printNumber) { + return request({ + url: '/mes/api/printBindBarcodes/' + barcodeIds+'/'+printNumber, + method: 'get' + }) +} + + // 重新生成成品条码信息,之前的条码作废 export function regenerateBarcode(data) { return request({ diff --git a/hw-ui/src/views/board/barcode/workshopBarcode.vue b/hw-ui/src/views/board/barcode/workshopBarcode.vue index 17e1f8f5..dc32dc50 100644 --- a/hw-ui/src/views/board/barcode/workshopBarcode.vue +++ b/hw-ui/src/views/board/barcode/workshopBarcode.vue @@ -27,7 +27,7 @@ - + - + @@ -142,13 +173,15 @@ - + v-if="this.form.barcodeType === this.BARCODE_TYPE.BIND_BARCODE && this.defineData.barcodeType && this.defineData.barcodeType !==this.BARCODE_TYPE_PARAM.SPLIT_BIND_BARCODE"> + - - + + @@ -184,25 +217,24 @@ - + - - - - - - - - - + + + + + + + + + - - - + + + - @@ -242,6 +273,7 @@ import { listProductBarcode, addProductBarcode, printProductBarcodes, + printBindBarcodes, selectProductBarcodeInfoByBarcodeInfo, addInternalBarcode, regenerateBarcode } from "@/api/board/barcode"; @@ -254,7 +286,7 @@ export default { // 遮罩层 loading: true, // 保存遮罩层 - submitLoading:false, + submitLoading: false, // 选中数组 ids: [], barcodeInfos: [], @@ -282,8 +314,8 @@ export default { internalForm: {}, // 表单校验 internalRules: { - materialCode: [ - {required: true, message: "物料编码不能为空", trigger: "blur"} + productBarcode: [ + {required: true, message: "成品条码不能为空", trigger: "blur"} ], }, @@ -324,6 +356,9 @@ export default { form: {}, // 表单校验 rules: { + productBarcode: [ + {required: true, message: "原材料条码不能为空", trigger: "blur"} + ], orderCode: [ {required: true, message: "工单编号不能为空", trigger: "blur"} ], @@ -342,6 +377,7 @@ export default { materialId: [ {required: true, message: "物料ID不能为空", trigger: "blur"} ], + }, columns: [ {key: 0, label: `主键标识`, visible: false}, @@ -391,14 +427,20 @@ export default { }, BARCODE_TYPE_PARAM: { - PRODUCT:'3',//成品 + PRODUCT: '3',//成品 PRODUCT_BARCODE: '4',//成品配对码 SPLIT_BIND_BARCODE: '5', //拆分配对码 }, SINGLE_FLAG: { YES: '1',//是 - INTERNAL: "2",//对内 - } + INTERNAL: "2",//对内生成原材料条码 + INTERNAL_PRODUCT: "3",//对内生成成品条码 + }, + SAFE_FLAG:{ + YES: '1',// + NO:"0" + }, + printNumber: null, }; }, mounted() { @@ -424,8 +466,15 @@ export default { // }, methods: { getData() { + //一楼成品码,barcodeType=3,ok + //四楼对外成品码,barcodeType=4,singleFlag=0,ok,目前跟四楼对内成品码没区分,都可以打印配对码 + //四楼对内成品码,barcodeType=4,singleFlag=2,ok + //五楼拆分工序配对码,barcodeType=5,ok + //五楼拆分工序对内原材料条码(四楼到五楼柜体),barcodeType=null,singleFlag=2 + //五楼自检工序成品码(外部采购柜体),barcodeType=3,singleFlag =1 + //五楼自检工序成品码(四楼到五楼柜体) if (this.defineData.barcodeType) { - let barcodeType = this.defineData.barcodeType ? this.defineData.barcodeType : this.BARCODE_TYPE.PRODUCT; + let barcodeType = this.defineData.barcodeType; let bindBarcode = this.defineData.bindBarcode ? this.defineData.bindBarcode : ''; this.barcodeTypeParam = barcodeType; @@ -436,32 +485,33 @@ export default { this.queryParams.bindOrFlag = "1"; // this.queryParams.barcodeTypeStr = this.BARCODE_TYPE.PRODUCT + "," + this.BARCODE_TYPE.BIND_BARCODE; } else if (barcodeType === this.BARCODE_TYPE_PARAM.SPLIT_BIND_BARCODE) {//拆分原材料配对码 - this.queryParams.barcodeType = this.BARCODE_TYPE.RAW ; + this.queryParams.barcodeType = this.BARCODE_TYPE.RAW; this.queryParams.bindOrFlag = "1"; // this.queryParams.barcodeTypeStr = this.BARCODE_TYPE.RAW + "," + this.BARCODE_TYPE.BIND_BARCODE; // this.queryParams.bindOrFlag = "1"; } - alert(JSON.stringify(this.queryParams)); + this.form = { planId: this.defineData.planId, planCode: this.defineData.planCode, planDetailCode: this.defineData.planDetailCode, - singleFlag:this.defineData.singleFlag, - saleOrderId:this.defineData.saleOrderId, + singleFlag: this.defineData.singleFlag, + saleOrderId: this.defineData.saleOrderId, batchFlag: '0', bindBarcode: bindBarcode, barcodeType: "", amount: 1, } - } else if (this.defineData.singleFlag && this.defineData.singleFlag === this.SINGLE_FLAG.INTERNAL) {//对内条码 + } else if (this.defineData.singleFlag && this.defineData.singleFlag === this.SINGLE_FLAG.INTERNAL) {//五楼拆分区对内条码 //4楼到5楼的原材料条码也要更换成新的plancode和plandetailcode this.internalForm = { planId: this.defineData.planId, planCode: this.defineData.planCode, planDetailCode: this.defineData.planDetailCode, - saleOrderId:this.defineData.saleOrderId, + saleOrderId: this.defineData.saleOrderId, + saleorderCode: this.defineData.saleorderCode, batchFlag: '0', amount: 1, } @@ -475,6 +525,7 @@ export default { /** 查询条码信息列表 */ getList() { this.loading = true; + // alert(JSON.stringify(this.queryParams)); listProductBarcode(this.queryParams).then(response => { this.barcodeList = response.rows; this.total = response.total; @@ -486,9 +537,9 @@ export default { } else { this.addInternalBtnVisible = false; this.addProductBarcodeBtnVisible = false; - if(this.barcodeTypeParam === this.BARCODE_TYPE_PARAM.PRODUCT){ + if (this.barcodeTypeParam === this.BARCODE_TYPE_PARAM.PRODUCT) { this.addBindBarcodeBtnVisible = false; - }else{ + } else { this.addBindBarcodeBtnVisible = true; } @@ -509,9 +560,7 @@ export default { this.addProductBarcodeOpen = true; this.handleAddProductBarcode(); } - } - this.loading = false; }); }, @@ -640,17 +689,38 @@ export default { }, + /** 打印配对条码按钮操作 */ + handlePrintBindBarcodes(row) { + const barcodeIds = row.barcodeId || this.ids; + + if (barcodeIds == null || barcodeIds == '') { + this.$modal.msgWarning("请选择要打印的物料条码"); + return; + } + + let printNumber = this.printNumber ? this.printNumber : 1; + printBindBarcodes(barcodeIds, printNumber).then(response => { + this.$modal.msgSuccess("打印条码成功"); + this.getList(); + }).catch(() => { + }); + }, + + /** 提交按钮 */ submitForm() { this.$refs["form"].validate(valid => { if (valid) { this.submitLoading = true; + if(this.defineData.barcodeType && this.defineData.barcodeType == this.BARCODE_TYPE_PARAM.SPLIT_BIND_BARCODE){ + this.form.barcodeAmount = 1; + } addProductBarcode(this.form).then(response => { this.$modal.msgSuccess("新增成功"); this.addProductBarcodeOpen = false; this.getList(); - }).finally(e =>{ - this.submitLoading = false; + }).finally(e => { + this.submitLoading = false; }); } }); @@ -719,7 +789,7 @@ export default { return; } - if(response.data.saleOrderId !== this.internalForm.saleOrderId){ + if (response.data.saleOrderId !== this.internalForm.saleOrderId) { this.resetInternal(); if (this.defineData?.planCode) { this.getData() @@ -754,10 +824,15 @@ export default { submitInternalForm() { this.$refs["internalForm"].validate(valid => { if (valid) { + this.submitLoading = true; + this.internalForm.safeFlag = this.internalForm.saleOrderId > 0 ? + this.SAFE_FLAG.NO : this.SAFE_FLAG.YES; addInternalBarcode(this.internalForm).then(response => { this.$modal.msgSuccess("新增成功"); this.internalOpen = false; this.getList(); + }).finally(e => { + this.submitLoading = false; }); } @@ -791,6 +866,13 @@ export default { }, + closePopover() { + document.body.click() + }, + + + + } }; diff --git a/hw-ui/src/views/board/fifthFloor/index.vue b/hw-ui/src/views/board/fifthFloor/index.vue index 84e74c3c..becfea25 100644 --- a/hw-ui/src/views/board/fifthFloor/index.vue +++ b/hw-ui/src/views/board/fifthFloor/index.vue @@ -48,22 +48,23 @@ 退料 - 完成退料 领柜体 条码 对内条码 @@ -77,7 +78,6 @@ - @@ -275,10 +275,10 @@
-
+
-
+
@@ -292,7 +292,9 @@
- 继续调度入库 + + 继续调度入库 + 退出
@@ -300,7 +302,8 @@ - + @@ -424,7 +427,8 @@ :visible.sync="continueRawInstockVisible" title="继续入库" width="500px"> - + @@ -493,7 +497,7 @@ import { bindBarcode, applyRawBack, assignTask, scanMaterial2Confirm, applyRawReturn, - getNewestOutstockCabinet,updateBarcodePlan, completeCollectMaterials, completeReturnMaterials,continueRawInstock + getNewestOutstockCabinet, updateBarcodePlan, completeCollectMaterials, completeReturnMaterials, continueRawInstock } from "@/api/board"; import applyRawOutstock from '@//views/board/common/applyRawOutstock.vue'; import WorkshopNotice from "@/components/workshopNotice/index.vue"; @@ -523,9 +527,9 @@ export default { ViewFile }, dicts: ['wms_raw_return_task_type', 'mes_safe_flag'], - provide(){ - return{ - closeDialog : this.closeDialog + provide() { + return { + closeDialog: this.closeDialog } }, mixins: [noticeData], @@ -550,7 +554,7 @@ export default { maxPlanAmount: 1, taskType: '', dialogVisible: false, - productPlanData:{}, + productPlanData: {}, form: {}, form1: {}, assignTaskForm: { @@ -589,7 +593,7 @@ export default { PROCESS_TYPE: { FIFTH_SPLIT: '1', FIFTH_ASSEMBLE: '2', - SELF_CHECK:'3', + SELF_CHECK: '3', }, stationData: [ { @@ -618,10 +622,10 @@ export default { }, ], warehouseList: [], - queryParams:{ + queryParams: { pageNum: 1, pageSize: 10, - materialCodeNameSpec:'' + materialCodeNameSpec: '' }, // 总条数 total: 0, @@ -662,7 +666,6 @@ export default { }, - continueRawInstockVisible: false, continueRawInstockForm: { materialBarcode: null @@ -682,7 +685,24 @@ export default { RAW: '1',//原材料 PRODUCT: '3',//成品 BIND_BARCODE: '4',//配对码 + SPLIT_BARCODE: '5',//拆分后配对码 }, + PROCESS: { + SPLIT: "1",//拆分 + ASSEMBLE: "2",//装配 + SELF_CHECK: "3",//自检 + }, + SINGLE_FLAG: { + YES: '1',//是 + INTERNAL: "2",//对内生成原材料条码 + INTERNAL_PRODUCT: "3",//对内生成成品条码 + }, + + CABINET_CHANNEL: { + PURCHASE: '1',//外部采购 + INTERNAL: "2",//对内生产 + }, + } }, async mounted() { @@ -702,7 +722,7 @@ export default { // this.loginStationInfo = e.data; //TODO - this.loginStationInfo = {stationId:"1",stationCode:"ZP_02"} + this.loginStationInfo = {stationId: "1", stationCode: "ZP_02"} this.getProductPlans(); this.getChartData(); }); @@ -931,7 +951,10 @@ export default { this.form.materialCode = val.materialCode this.form.materialName = val.materialName this.form.materialSpec = val.materialSpec; + this.form.saleOrderId = val.saleOrderId + this.form.saleorderCode = val.saleorderCode this.form.dispatchCode = val.dispatchCode; + this.form.cabinetChannel = val.cabinetChannel; this.form.planDetailStatus = setState(data.data.planDetailStatus) this.getInfo(val) }, @@ -970,7 +993,9 @@ export default { this.form.materialName = val.materialName this.form.materialSpec = val.materialSpec this.form.saleOrderId = val.saleOrderId + this.form.saleorderCode = val.saleorderCode this.form.dispatchCode = val.dispatchCode; + this.form.cabinetChannel = val.cabinetChannel; if (data) { this.form.planDetailStatus = setState(data.planDetailStatus) } @@ -1394,14 +1419,14 @@ export default { }, - closeDialog(){ + closeDialog() { this.dialogVisible = false; }, print() { getNewestOutstockCabinet({planDetailCode: this.form.planDetailCode}).then(response => { - if (!response.data || !response.data.materialBatch || response.data.materialBatch ==='') { + if (!response.data || !response.data.materialBatch || response.data.materialBatch === '') { this.$modal.msgWarning("请先领取柜体"); return; } @@ -1409,25 +1434,30 @@ export default { let materialBarcode = response.data.materialBatch; //获取最新领取的柜体,并更新派工单号 - updateBarcodePlan({barcodeInfo: response.data.materialBatch,planCode: this.form.planCode,planDetailCode: this.form.planDetailCode}).then(response => { + updateBarcodePlan({ + barcodeInfo: response.data.materialBatch, + planCode: this.form.planCode, + planDetailCode: this.form.planDetailCode + }).then(response => { this.PrintData = this.form this.PrintData.bindBarcode = materialBarcode; - this.PrintData.barcodeType = '5';//拆分后配对码 + this.PrintData.barcodeType = this.BARCODE_TYPE.SPLIT_BARCODE;//拆分后配对码 this.printModel = true }); }); }, - printInternalBarcode(){ + printInternalBarcode() { this.PrintData = this.form; this.PrintData.singleFlag = '2';//对内 this.printModel = true }, - printProductBarcode(){ + printProductBarcode() { this.PrintData = this.form; - this.PrintData.barcodeType = this.BARCODE_TYPE.PRODUCT + this.PrintData.barcodeType = this.BARCODE_TYPE.PRODUCT; + this.PrintData.singleFlag = this.SINGLE_FLAG.YES; this.printModel = true }, @@ -1491,14 +1521,22 @@ export default { }, + //执行返库 submitRawBack() { this.$refs["rawBackForm"].validate(valid => { if (valid) { - this.rawBackForm.planDetailCode = this.form.planDetailCode; - applyRawBack(this.rawBackForm).then(response => { - this.$modal.msgSuccess("申请成功"); + let rawBackForm = this.rawBackForm; + rawBackForm.planDetailCode = this.form.planDetailCode; + rawBackForm.cabinetChannel = this.form.cabinetChannel; + this.$modal.confirm('请确认要执行返库么(从拆分区到原料周转区)?').then(function () { + return applyRawBack(rawBackForm); + }).then(() => { + this.$modal.msgSuccess("执行成功"); this.cancelRawBack(); + }).catch(() => { + }).finally(e => { }); + } }); }, @@ -1596,24 +1634,30 @@ export default { this.resetForm("continueRawInstockForm"); }, - continueRawInstock(){ + continueRawInstock() { this.resetContinueRawInstock(); this.continueRawInstockVisible = true; }, - submitContinueRawInstock(){ - continueRawInstock(this.continueRawInstockForm).then(v => { - this.$modal.msgSuccess("操作成功"); - }) + submitContinueRawInstock() { + let continueRawInstockForm = this.continueRawInstockForm; + this.$modal.confirm('请确认要继续入库么(从提升机接驳位到原料周转区)?').then(function () { + return continueRawInstock(continueRawInstockForm); + }).then(() => { + this.$modal.msgSuccess("执行成功"); + this.continueRawInstockVisible = false; + }).catch(() => { + }).finally(e => { + }); }, - cancelContinueRawInstock(){ + cancelContinueRawInstock() { this.continueRawInstockVisible = false; this.resetContinueRawInstock(); }, /** SOP预览*/ - handleViewSOP(e){ + handleViewSOP(e) { this.fileListData = []; getDispatchSOPAttachList(e.dispatchCode, e.processId).then(res => { let attachList = res.data; @@ -1625,7 +1669,7 @@ export default { thisFileList.push(previewFile); }) console.log("thisFileList:", thisFileList) - if (thisFileList.length > 0){ + if (thisFileList.length > 0) { this.fileListData = thisFileList; this.showFileDialog = true; } else { diff --git a/hw-ui/src/views/board/fourthFloor/assemble.vue b/hw-ui/src/views/board/fourthFloor/assemble.vue index a2805d51..da65a1cf 100644 --- a/hw-ui/src/views/board/fourthFloor/assemble.vue +++ b/hw-ui/src/views/board/fourthFloor/assemble.vue @@ -194,7 +194,6 @@ size="small" type="text" @click="print(scope.row)" - v-if="scope.row.planDetailStatus === PLAN_DETAIL_STATUS.FINISHED || scope.row.planDetailStatus === PLAN_DETAIL_STATUS.ABNORMAL_FINISHED" > 条码 diff --git a/hw-ui/src/views/mes/productOrder/index.vue b/hw-ui/src/views/mes/productOrder/index.vue index 788a4599..47309a49 100644 --- a/hw-ui/src/views/mes/productOrder/index.vue +++ b/hw-ui/src/views/mes/productOrder/index.vue @@ -159,6 +159,11 @@ + + +