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 3cf95754..5a53bd82 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 @@ -1,5 +1,8 @@ package com.hw.common.core.constant; +import java.util.HashMap; +import java.util.Map; + /** * @Description:生产部分常量定义 * @ProjectName:HwMes @@ -53,6 +56,19 @@ public class MesConstants { /** 工单状态;9-已删除 */ public static final String DELETE = "9"; + public static final Map ORDER_STATUS_PROMPT_MAP = new HashMap<>(); + static { + ORDER_STATUS_PROMPT_MAP.put(UN_PUBLISH, "待发布"); + ORDER_STATUS_PROMPT_MAP.put(PUBLISHED, "已发布"); + ORDER_STATUS_PROMPT_MAP.put(FINISHED, "已完成"); + ORDER_STATUS_PROMPT_MAP.put(BEGIN, "已开始"); + ORDER_STATUS_PROMPT_MAP.put(PAUSE, "已暂停"); + ORDER_STATUS_PROMPT_MAP.put(RECALL, "已撤回"); + ORDER_STATUS_PROMPT_MAP.put(DELETE, "已删除"); + // 初始化其他映射... + } + + /*生产计划明细状态*/ public static final String MES_PRODUCT_PLAN_DETAIL_STATUS_TO_START = "1";//未开始 @@ -111,4 +127,8 @@ public class MesConstants { /**物料条码打印标识*/ public static final String MES_BARCODE_PRINT_FLAG_YES = "1";//是 public static final String MES_BARCODE_PRINT_FLAG_NO = "0";//否 + + + + } 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 0057ec1c..9909d83a 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 @@ -235,4 +235,8 @@ public class WmsConstants { // public static final String WMS_INVENTORY_CHECK_DETAIL_STATUS_TO_INVENTORY = "0";//待盘点 public static final String WMS_INVENTORY_CHECK_DETAIL_STATUS_INVENTORYING = "1";//盘点中 public static final String WMS_INVENTORY_CHECK_DETAIL_STATUS_FINISH = "2";//盘点完成 + + + //车间生产区域类型 + public static final String MES_AREA_TYPE_FOUTHFLOOR_ASSEMBLE = "3";//四楼装配区域 } 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 f2b01f64..2d8c7b45 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 @@ -7,10 +7,7 @@ import com.hw.common.core.utils.StringUtils; import com.hw.common.core.utils.uuid.Seq; import com.hw.common.security.utils.SecurityUtils; import com.hw.mes.api.domain.MesBaseBarcodeInfo; -import com.hw.mes.domain.MesMaterialAssignInfo; -import com.hw.mes.domain.MesMaterialCheckResult; -import com.hw.mes.domain.MesProductPlan; -import com.hw.mes.domain.MesProductPlanDetail; +import com.hw.mes.domain.*; import com.hw.mes.domain.vo.MesProductPlanDetailVo; import com.hw.mes.mapper.*; import com.hw.mes.service.IMesProductPlanDetailService; @@ -47,6 +44,9 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer @Autowired private MesMaterialAssignInfoMapper mesMaterialAssignInfoMapper; + @Autowired + private MesProductOrderMapper mesProductOrderMapper; + /** * 查询生产计划明细 * @@ -186,11 +186,29 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer throw new ServiceException("此生产计划已结束"); } - //todo:在开始生产计划时,更新生产工单状态、开始时间 + MesProductOrder productOrder = mesProductOrderMapper.selectMesProductOrderByProductOrderId(dbProductPlan.getProductOrderId()); + if(productOrder==null){ + throw new ServiceException("无此生产工单"); + } + + String orderStatus = productOrder.getOrderStatus(); + if(!orderStatus.equals(MesConstants.BEGIN) && !orderStatus.equals(MesConstants.PUBLISHED)){ + String orderStatusPrompt = MesConstants.ORDER_STATUS_PROMPT_MAP.get(orderStatus); + throw new ServiceException(String.format("此生产工单已经%s,不能开始!", orderStatusPrompt)); + } Date currentDate = new Date(); String userName = SecurityUtils.getUsername(); Long userId = SecurityUtils.getUserId(); + + if(orderStatus.equals(MesConstants.PUBLISHED)){ + productOrder.setOrderStatus(MesConstants.BEGIN); + productOrder.setRealBeginTime(currentDate); + productOrder.setUpdateBy(userName); + productOrder.setUpdateTime(currentDate); + mesProductOrderMapper.updateMesProductOrder(productOrder); + } + if (planStatus.equals(MesConstants.MES_PRODUCT_PLAN_STATUS_DISPATCHED)) { dbProductPlan.setRealBeginTime(currentDate); dbProductPlan.setPlanStatus(MesConstants.MES_PRODUCT_PLAN_STATUS_STARTED); diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/config/WmsConfig.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/config/WmsConfig.java index c24fe437..d95d9143 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/config/WmsConfig.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/config/WmsConfig.java @@ -39,6 +39,11 @@ public class WmsConfig */ private Long fourthFloorPalteWarehouseId; + /** + * 四楼零配件仓库ID + */ + private Long fourthFloorPartsWarehouseId; + public String getFifthAssembleStationCode() { return fifthAssembleStationCode; @@ -79,4 +84,12 @@ public class WmsConfig public void setFourthFloorPalteWarehouseId(Long fourthFloorPalteWarehouseId) { this.fourthFloorPalteWarehouseId = fourthFloorPalteWarehouseId; } + + public Long getFourthFloorPartsWarehouseId() { + return fourthFloorPartsWarehouseId; + } + + public void setFourthFloorPartsWarehouseId(Long fourthFloorPartsWarehouseId) { + this.fourthFloorPartsWarehouseId = fourthFloorPartsWarehouseId; + } } diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsApiController.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsApiController.java index 05ca814e..92d4ac6f 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsApiController.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsApiController.java @@ -2,6 +2,7 @@ package com.hw.wms.controller; import com.alibaba.fastjson2.JSONObject; import com.hw.common.core.constant.WmsConstants; +import com.hw.common.core.utils.StringUtils; import com.hw.common.core.web.controller.BaseController; import com.hw.common.core.web.domain.AjaxResult; import com.hw.common.core.web.page.TableDataInfo; diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/WmsBaseWarehouse.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/WmsBaseWarehouse.java index 4e0a856a..a8b72fe0 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/WmsBaseWarehouse.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/WmsBaseWarehouse.java @@ -182,6 +182,8 @@ public class WmsBaseWarehouse extends BaseEntity { private String materialBarcode; + /**车间区域类型(1、1楼生产工位,2、四楼激光切割区域,3、四楼装配区域)*/ + private String mesAreaType; public void setWarehouseId(Long warehouseId) { this.warehouseId = warehouseId; @@ -415,6 +417,14 @@ public class WmsBaseWarehouse extends BaseEntity { this.materialBarcode = materialBarcode; } + public String getMesAreaType() { + return mesAreaType; + } + + public void setMesAreaType(String mesAreaType) { + this.mesAreaType = mesAreaType; + } + @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsBaseWarehouseServiceImpl.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsBaseWarehouseServiceImpl.java index c7f53e5c..1e6e6694 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsBaseWarehouseServiceImpl.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsBaseWarehouseServiceImpl.java @@ -1,7 +1,11 @@ package com.hw.wms.service.impl; import java.util.List; + +import com.hw.common.core.constant.WmsConstants; import com.hw.common.core.utils.DateUtils; +import com.hw.common.core.utils.StringUtils; +import com.hw.wms.config.WmsConfig; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.hw.wms.mapper.WmsBaseWarehouseMapper; @@ -20,6 +24,9 @@ public class WmsBaseWarehouseServiceImpl implements IWmsBaseWarehouseService @Autowired private WmsBaseWarehouseMapper wmsBaseWarehouseMapper; + @Autowired + private WmsConfig wmsConfig; + /** * 查询仓库 * @@ -41,6 +48,11 @@ public class WmsBaseWarehouseServiceImpl implements IWmsBaseWarehouseService @Override public List selectWmsBaseWarehouseList(WmsBaseWarehouse wmsBaseWarehouse) { + if(StringUtils.isNotEmpty(wmsBaseWarehouse.getMesAreaType())){ + if(wmsBaseWarehouse.getMesAreaType().equals(WmsConstants.MES_AREA_TYPE_FOUTHFLOOR_ASSEMBLE)){ + wmsBaseWarehouse.setWarehouseId(wmsConfig.getFourthFloorPartsWarehouseId()); + } + } return wmsBaseWarehouseMapper.selectWmsBaseWarehouseList(wmsBaseWarehouse); } 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 a2765091..aca94c86 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 @@ -344,7 +344,7 @@ public class WmsRawReturnServiceImpl implements IWmsRawReturnService { Date currentDate = new Date(); String userName = SecurityUtils.getUsername(); //更新退库记录执行状态 - wmsRawReturn.setExecuteStatus( WmsConstants.WMS_EXECUTE_STATUS_FINISH); + wmsRawReturn.setExecuteStatus(WmsConstants.WMS_EXECUTE_STATUS_FINISH); wmsRawReturn.setLocationCode(locationCode); wmsRawReturn.setReturnAmount(returnAmount); wmsRawReturn.setUpdateDate(currentDate); @@ -465,67 +465,77 @@ public class WmsRawReturnServiceImpl implements IWmsRawReturnService { @Transactional(rollbackFor = Exception.class) @Override public int applyRawReturn(List wmsRawReturns) { - //申请退库不指定库位,申请退库的多个物料生成多条退库记录 + //申请退库不指定库位,申请退库的多个物料生成多条退库记录,目前按每个条码物料申请退库 //根据仓库ID分组获取总申请数量 - Map> rawReturnsMap = wmsRawReturns.stream() - .collect(Collectors.groupingBy(WmsRawReturn::getWarehouseId)); +// Map> rawReturnsMap = wmsRawReturns.stream() +// .collect(Collectors.groupingBy(WmsRawReturn::getWarehouseId)); + WmsRawReturn firstWmsRawReturn = wmsRawReturns.get(0); + Long warehouseId = firstWmsRawReturn.getWarehouseId(); + WmsBaseWarehouse baseWarehouse = wmsBaseWarehouseMapper.selectWmsBaseWarehouseByWarehouseId(warehouseId); + String warehouseType = baseWarehouse.getWarehouseType(); + String returnRequirement = baseWarehouse.getReturnRequirement(); + String operationType = WmsConstants.OPERATION_TYPE_MAP.get(warehouseType); + String auditStatus = ""; + if (warehouseType.equals(WmsConstants.WMS_WAREHOUSE_TYPE_NORMAL)) {//如果是普通仓库,需要校验审核标识 + if (returnRequirement.equals(WmsConstants.WMS_WAREHOUSE_RETURN_REQUIREMENT_APPLY_AUDIT)) { + auditStatus = WmsConstants.WMS_AUDIT_STATUS_TOAUDIT; + } else { + auditStatus = WmsConstants.WMS_AUDIT_STATUS_PASS; + } + } else { + auditStatus = WmsConstants.WMS_AUDIT_STATUS_PASS; + } List toInsertedRawReturns = new ArrayList<>(); Date currentDate = new Date(); String userName = SecurityUtils.getUsername(); String taskCode = Seq.getId(Seq.rawReturnSeqType, Seq.rawReturnCode); - for (Long warehouseId : rawReturnsMap.keySet()) { - List rawReturnList = rawReturnsMap.get(warehouseId); - WmsBaseWarehouse baseWarehouse = wmsBaseWarehouseMapper.selectWmsBaseWarehouseByWarehouseId(warehouseId); - String warehouseType = baseWarehouse.getWarehouseType(); - String returnRequirement = baseWarehouse.getReturnRequirement(); - String operationType = WmsConstants.OPERATION_TYPE_MAP.get(warehouseType); - String auditStatus = ""; - if (warehouseType.equals(WmsConstants.WMS_WAREHOUSE_TYPE_NORMAL)) {//如果是普通仓库,需要校验审核标识 - if (returnRequirement.equals(WmsConstants.WMS_WAREHOUSE_RETURN_REQUIREMENT_APPLY_AUDIT)) { - auditStatus = WmsConstants.WMS_AUDIT_STATUS_TOAUDIT; - } else { - auditStatus = WmsConstants.WMS_AUDIT_STATUS_PASS; - } - } else { - auditStatus = WmsConstants.WMS_AUDIT_STATUS_PASS; + for (WmsRawReturn rawReturn : wmsRawReturns) { + BigDecimal planAmount = rawReturn.getPlanAmount(); + if (planAmount.compareTo(BigDecimal.ZERO) <= 0) { + throw new ServiceException("数量需大于0"); } - - for (WmsRawReturn rawReturn : rawReturnList) { - BigDecimal planAmount = rawReturn.getPlanAmount(); - if (planAmount.compareTo(BigDecimal.ZERO) <= 0) { - throw new ServiceException("数量需大于0"); - } - String materialBarcode = rawReturn.getMaterialBarcode(); - R baseBarcodeInfoR = remoteMesService.getBarcode(materialBarcode, SecurityConstants.INNER); - MesBaseBarcodeInfo baseBarcodeInfo = baseBarcodeInfoR.getData(); - if (baseBarcodeInfo == null) { - throw new ServiceException("物料编码有误"); - } - String batchFlag = baseBarcodeInfo.getBatchFlag(); - if (!batchFlag.equals(MesConstants.IS_BATCH)) { - if (planAmount.compareTo(BigDecimal.ONE) != 0) { - throw new ServiceException("非批次物料数量需等于1"); - } + String materialBarcode = rawReturn.getMaterialBarcode(); + R baseBarcodeInfoR = remoteMesService.getBarcode(materialBarcode, SecurityConstants.INNER); + if (baseBarcodeInfoR == null) { + throw new ServiceException("物料编码有误"); + } + MesBaseBarcodeInfo baseBarcodeInfo = baseBarcodeInfoR.getData(); + if (baseBarcodeInfo == null) { + throw new ServiceException("物料编码有误"); + } + String batchFlag = baseBarcodeInfo.getBatchFlag(); + if (!batchFlag.equals(MesConstants.IS_BATCH)) { + if (planAmount.compareTo(BigDecimal.ONE) != 0) { + throw new ServiceException("非批次物料数量需等于1"); } + } + + if (!baseBarcodeInfo.getBarcodeType().equals(MesConstants.MES_BARCODE_TYPE_RAW)) { + throw new ServiceException("物料编码有误,此物料编码非原材料编码"); + } - rawReturn.setTaskCode(taskCode); - rawReturn.setExecuteStatus(WmsConstants.WMS_EXECUTE_STATUS_TOEXECUTE); - rawReturn.setEndStationCode(baseWarehouse.getAgvPositionCode()); - rawReturn.setOperationType(operationType); - rawReturn.setAuditStatus(auditStatus); - rawReturn.setReturnAmount(BigDecimal.ZERO); - rawReturn.setMaterialId(baseBarcodeInfo.getMaterialId()); - rawReturn.setBatchCode(baseBarcodeInfo.getBatchCode()); - rawReturn.setApplyBy(userName); - rawReturn.setApplyDate(currentDate); - toInsertedRawReturns.add(rawReturn); + WmsRawStock existedRawStock = wmsRawStockMapper.selectRawStockByBarcode(materialBarcode); + if (existedRawStock != null && existedRawStock.getTotalAmount().compareTo(BigDecimal.ZERO) > 0) { + throw new ServiceException("此物料条码在仓库中存在"); } - wmsRawReturnMapper.batchWmsRawReturn(toInsertedRawReturns); + rawReturn.setTaskCode(taskCode); + rawReturn.setExecuteStatus(WmsConstants.WMS_EXECUTE_STATUS_TOEXECUTE); + rawReturn.setEndStationCode(baseWarehouse.getAgvPositionCode()); + rawReturn.setOperationType(operationType); + rawReturn.setAuditStatus(auditStatus); + rawReturn.setReturnAmount(BigDecimal.ZERO); + rawReturn.setMaterialId(baseBarcodeInfo.getMaterialId()); + rawReturn.setBatchCode(baseBarcodeInfo.getBatchCode()); + rawReturn.setApplyBy(userName); + rawReturn.setApplyDate(currentDate); + toInsertedRawReturns.add(rawReturn); } + wmsRawReturnMapper.batchWmsRawReturn(toInsertedRawReturns); + return 1; } diff --git a/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsBaseWarehouseMapper.xml b/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsBaseWarehouseMapper.xml index aedd86cf..0f68a574 100644 --- a/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsBaseWarehouseMapper.xml +++ b/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsBaseWarehouseMapper.xml @@ -82,6 +82,7 @@