From 478aada794559cd12603abed9630e3184b373544 Mon Sep 17 00:00:00 2001 From: jun Date: Thu, 31 Oct 2024 17:48:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=92=E5=BA=8F=E5=B7=A5=E5=8D=95=E4=B8=8B?= =?UTF-8?q?=E5=8F=91=E9=80=BB=E8=BE=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesWorkOrderService.java | 611 ++++++++++++--------- 1 file changed, 347 insertions(+), 264 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index bb84556..0523adc 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -170,149 +170,45 @@ public class MesWorkOrderService extends BaseMesService implements @Override public MesWorkOrder insert(MesWorkOrder bean) { + // 数据校验 + ValidatorBean.checkNotNull(bean.getWorkOrderType(), "工单类型不能为空"); + ValidatorBean.checkNotNull(bean.getWorkCenterCode(), "产线不能为空"); + ValidatorBean.checkNotNull(bean.getPartNo(), "零件号不能为空"); + ValidatorBean.checkNotNull(bean.getShiftCode(), "班次不能为空"); //校验产线与工位的关系 boolean relationResult = checkWorkCenterPartRelation(bean.getWorkCenterCode(), bean.getPartNo()); if (!relationResult && (StringUtil.isEmpty(bean.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(bean.getOrderFlag()))){ MesException.throwMesBusiException(String.format("工单产线【%s】与工单零件【%s】没有维护产线零件关系",bean.getWorkCenterCode(),bean.getPartNo())); } - //获取相同类型 相同标识 生产序号最大值的 - DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(bean.getOrderFlag(), "orderFlag", orderPackBean); - DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"productSeq"}, orderPackBean); - MesWorkOrder result = baseRDao.getByProperty(orderPackBean); + //排序生成个数 默认1,数量为生成工单的个数 Double generateQty = bean.getQty(); - - //插入前构造数据 - onInsertBean(bean); - - //若工单类型为排序 则根据排序插入工单数量插入多行 工单数量为1 + MesWorkCenter mesWorkCenter = workCenterService.getWorkCenterDb(bean.getOrganizeCode(), bean.getWorkCenterCode()); + if (Objects.isNull(mesWorkCenter)) { + MesException.throwMesBusiException("产线【%s】不存在", bean.getWorkCenterCode()); + } + bean.setErpWorkCenter(mesWorkCenter.getErpWorkCenter()); + bean.setAreaCode(mesWorkCenter.getAreaCode()); + //客户物料信息 + if (StringUtil.isEmpty(bean.getCustPartNo())) { + getCustomerPart(bean); + } + //排序 if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) { - Long productSeq = 0L; - if (null != result && result.getProductSeq() != null) { - productSeq = (long) Math.toIntExact(result.getProductSeq().toString().endsWith("9") ? result.getProductSeq() + 1 : result.getProductSeq()); - } - MesWorkOrder copyMesWorkOrder = new MesWorkOrder(); - BeanUtils.copyProperties(bean, copyMesWorkOrder); - copyMesWorkOrder.setProductSeq((long) (productSeq + 1)); - copyMesWorkOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); - ConvertBean.serviceModelInitialize(copyMesWorkOrder, bean.getCreateUser()); - - baseRDao.insert(copyMesWorkOrder); - workOrderLogService.saveMesWorkOrderLog(copyMesWorkOrder,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,copyMesWorkOrder.getQty()); + insertSortWorkOrderNo(bean, mesWorkCenter); //生成数量大于1 if (generateQty > 1) { - insertBatchWorkOrder(copyMesWorkOrder, generateQty); - } - return bean; - } else if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.BTO.getValue()) { - Long productSeq = 0L; - if (null != result && result.getProductSeq() != null) { - productSeq = (long) Math.toIntExact(result.getProductSeq()); + insertBatchWorkOrder(bean, generateQty); } - bean.setProductSeq(productSeq + 1); - GenSerialNoModel orderSeqSerialNoModel = new GenSerialNoModel(MesCommonConstant.ORDER_NO_BTO_SEQ); - List resultList = syncFuncService.syncSerialNo(orderSeqSerialNoModel.organizeCode(bean.getOrganizeCode()), bean.getCreateUser(), bean.getOrganizeCode(), 1).getResultList(); - bean.setWorkOrderSeq(resultList.get(0)); + //非排序 + } else if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) { + insertUnSortWorkOrder(bean, mesWorkCenter); + //bto + } else { + insertBtoWorkOrder(bean, mesWorkCenter); } - bean.setQty(bean.getQty()); - bean.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); - ConvertBean.serviceModelInitialize(bean, bean.getCreateUser()); - - workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty()); - bean = baseRDao.insert(bean); return bean; } - private void insertBatchWorkOrder(MesWorkOrder workOrder, Double generateQty) { - //查询数据 - List orderAssemblyList = mesWorkOrderAssemblyService.findMesWorkOrderAssembly(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); - List orderPartList = mesWorkOrderPartService.findMesWorkOrderPart(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); - List toWmsList = mesWorkOrderToWmsService.findMesWorkOrderToWms(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); - List orderLogList = workOrderLogService.findMesWorkOrderLog(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); - MesProduceSn mesProduceSn = mesProduceSnService.getMesProduceSnByCustSn(workOrder.getOrganizeCode(),workOrder.getCustSn()); - //数据处理 - List newWrkOrderList = new ArrayList<>(); - List newOrderAssemblyList = new ArrayList<>(); - List newOrderPartList = new ArrayList<>(); - List newToWmsList = new ArrayList<>(); - List newOrderLogList = new ArrayList<>(); - List newProduceSnList = new ArrayList<>(); - MesWorkOrderAssembly newOrderAssembly = null; - MesWorkOrderPart newOrderPart = null; - MesWorkOrderToWms newOrderPartToWms = null; - MesWorkOrderLog orderLog = null; - MesProduceSn newProduceSn = null; - for (int i = 1; i < generateQty ; i++) { - //工单 - MesWorkOrder newWorkOrder = new MesWorkOrder(); - BeanUtils.copyProperties(workOrder,newWorkOrder,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); - newWorkOrder.setWorkOrderNo(getOrderNo(workOrder)); - newWorkOrder.setProductSeq(workOrder.getProductSeq()+i); - newWorkOrder.setCustSn(getCustSn(workOrder.getCustPartNo(), workOrder.getOrganizeCode(),workOrder.getCreateUser())); - newWrkOrderList.add(newWorkOrder); - //工单装配件 - if(!CollectionUtils.isEmpty(orderAssemblyList)){ - for (MesWorkOrderAssembly assembly : orderAssemblyList) { - newOrderAssembly = new MesWorkOrderAssembly(); - BeanUtils.copyProperties(assembly,newOrderAssembly,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); - newOrderAssembly.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); - newOrderAssemblyList.add(newOrderAssembly); - } - } - //工单零件 - if(!CollectionUtils.isEmpty(orderPartList)){ - for (MesWorkOrderPart part : orderPartList) { - newOrderPart = new MesWorkOrderPart(); - BeanUtils.copyProperties(part,newOrderPart,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); - newOrderPart.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); - newOrderPartList.add(newOrderPart); - } - } - //工单发送给WMS数据 - if(!CollectionUtils.isEmpty(toWmsList)){ - for (MesWorkOrderToWms toWms : toWmsList) { - newOrderPartToWms = new MesWorkOrderToWms(); - BeanUtils.copyProperties(toWms,newOrderPartToWms,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); - newOrderPartToWms.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); - newToWmsList.add(newOrderPartToWms); - } - } - //生产工单日志 - if(!CollectionUtils.isEmpty(orderLogList)){ - for (MesWorkOrderLog mesWorkOrderLog : orderLogList) { - orderLog = new MesWorkOrderLog(); - BeanUtils.copyProperties(mesWorkOrderLog,orderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); - orderLog.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); - newOrderLogList.add(orderLog); - } - } - //产品条码表 - if(!Objects.isNull(mesProduceSn)){ - newProduceSn = new MesProduceSn(); - BeanUtils.copyProperties(mesProduceSn,newProduceSn,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); - newProduceSn.setCustSn(newWorkOrder.getCustSn()); - newProduceSn.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); - newProduceSn.setSerialNumber(newWorkOrder.getWorkOrderNo()); - newProduceSn.setProductSn(newWorkOrder.getWorkOrderNo()); - newProduceSnList.add(newProduceSn); - } - } - //数据持久化 - baseRDao.saveAll(newWrkOrderList); - if(!CollectionUtils.isEmpty(newOrderAssemblyList)){ - mesWorkOrderAssemblyService.insertBatch(newOrderAssemblyList); - } - if(!CollectionUtils.isEmpty(newOrderPartList)){ - mesWorkOrderPartService.insertBatch(newOrderPartList); - } - if(!CollectionUtils.isEmpty(newOrderLogList)){ - workOrderLogService.insertBatch(newOrderLogList); - } - if(!CollectionUtils.isEmpty(newToWmsList)){ - mesWorkOrderToWmsService.insertBatch(newToWmsList); - } - } - @Override public MesWorkOrder update(MesWorkOrder bean) { MesWorkOrder result = getMesWorkOrder(bean.getWorkOrderNo(),bean.getOrganizeCode()); @@ -386,7 +282,7 @@ public class MesWorkOrderService extends BaseMesService implements DdlPreparedPack.getStringSmallerPack(bean.getStartTimeEnd(), "planStartTime", packBean); DdlPreparedPack.getStringBiggerPack(bean.getEndTimeStart(), "planEndTime", packBean); DdlPreparedPack.getStringSmallerPack(bean.getEndTimeEnd(), "planEndTime", packBean); - packBean.setOrderByStr(" order by createDatetime desc,workOrderSeq asc,workOrderNo asc "); + packBean.setOrderByStr(" order by createDatetime desc,workOrderSeq asc,productSeq asc,workOrderNo asc "); } @Override @@ -409,131 +305,6 @@ public class MesWorkOrderService extends BaseMesService implements } - @Override - protected void onInsertBean(MesWorkOrder item) { - - // 数据校验 - ValidatorBean.checkNotNull(item.getWorkOrderType(), "工单类型不能为空"); - ValidatorBean.checkNotNull(item.getWorkCenterCode(), "产线不能为空"); - ValidatorBean.checkNotNull(item.getPartNo(), "零件号不能为空"); - ValidatorBean.checkNotNull(item.getShiftCode(), "班次不能为空"); - - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(), "workCenterCode", ddlPackBean); - MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(ddlPackBean); - if (Objects.isNull(mesWorkCenter)) { - MesException.throwMesBusiException("产线【%s】不存在", item.getWorkCenterCode()); - } - item.setErpWorkCenter(mesWorkCenter.getErpWorkCenter()); - //客户物料信息 - if (StringUtil.isEmpty(item.getCustPartNo())) { - getCustomerPart(item); - } - //校验标识 - //若工单类型为排序 - List saveMesWorkOrderToWms = new ArrayList<>(); - if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) { - ValidatorBean.checkNotNull(item.getOrderFlag(), "标识不能为空"); - ValidatorBean.checkNotNull(item.getCustPartNo(), "客户物料号不能为空"); - - //校验产线类型和工单类型是否匹配 - if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.SORT.getValue())) { - MesException.throwMesBusiException("产线【%s】类型为【%s】,请选择排序产线", mesWorkCenter.getWorkCenterCode(), - MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(mesWorkCenter.getCenterType())); - } - //若工单类型为排序 标识为 N E P S - if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue().equals(item.getOrderFlag()) && - !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue().equals(item.getOrderFlag()) && - !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue().equals(item.getOrderFlag()) && - !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())) { - MesException.throwMesBusiException(String.format("工单标识为【%s】请选择 【%s】、【%s】、【%s】、【%s】 标识", - item.getOrderFlag(), MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue() - , MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue(), - MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue(), - MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue())); - } - //校验VIN号是否重复 - if (!StringUtil.isEmpty(item.getVinCode())) { - //校验vin号是否重复 - ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(item.getVinCode(), "vinCode", ddlPackBean); - if (baseRDao.isExitByHql(ddlPackBean)) { - MesException.throwMesBusiException("vin号【%s】重复", item.getVinCode()); - } - } - //排序工单数量为1 - item.setQty(1d); - //发送工单给WMS - List orderPartList = sendToWms(item, mesWorkCenter, saveMesWorkOrderToWms); - //生成工单号 - item.setWorkOrderNo(getOrderNo(item)); - //生成客户条码 - item.setCustSn(getCustSn(item.getCustPartNo(), item.getOrganizeCode(),item.getCreateUser())); - //生成工单零件 工单装配件 - insertMesWorkOrder(item, orderPartList); - - } else if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) { - ValidatorBean.checkNotNull(item.getOrderFlag(), "标识不能为空"); - if (Objects.isNull(item.getQty()) || item.getQty() <= 0d) { - MesException.throwMesBusiException("生产数量不能小于等于0"); - } - //校验产线类型和工单类型是否匹配 - if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue())) { - MesException.throwMesBusiException("产线【%s】类型为【%s】,请选择非排序产线", mesWorkCenter.getWorkCenterCode(), - MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(mesWorkCenter.getCenterType())); - } - if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue().equals(item.getOrderFlag()) && - !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue().equals(item.getOrderFlag()) && - !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())) { - MesException.throwMesBusiException(String.format("工单标识为【%s】请选择 【%s】、【%s】、【%s】 标识", - item.getOrderFlag(), MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue() - , MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue(), - MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue())); - } - item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); - //非试制单 - if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())) { - ValidatorBean.checkNotNull(item.getProductVersion(), "生产版本不能为空"); - //校验物料生产版本是否存在 - MesProductVersion mesProductVersion = checkMesProductVersion(item); - item.setErpWorkCenter(mesProductVersion.getWorkCenterCode()); - //获取bom信息 - List bomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); - //发送工单信息给WMS - saveMesWorkOrderToWms.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, bomList)); - } - } else { - ValidatorBean.checkNotNull(item.getPlanStartTime(), "计划开始时间不能为空"); - ValidatorBean.checkNotNull(item.getPlanEndTime(), "计划结束时间不能为空"); - if (Objects.isNull(item.getQty()) || item.getQty() <= 0d) { - MesException.throwMesBusiException("生产数量不能小于等于0"); - } - //发送工单给WMS - sendToWms(item, mesWorkCenter, saveMesWorkOrderToWms); - } - //生成工单号 - if(StringUtil.isEmpty(item.getWorkOrderNo())){ - item.setWorkOrderNo(getOrderNo(item)); - } - //物料名称不存在,从物料信息中获取 - MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(item.getPartNo(), item.getOrganizeCode()); - item.setPartName(mesPart.getPartName()); - item.setUnit(mesPart.getUnit()); - //生产时间新增取当天 - if (StringUtil.isEmpty(item.getProduceTime())) { - item.setProduceTime(TimeTool.getToday()); - item.setProductTime(item.getProduceTime()); - } - item.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); - item.setUnCompleteQty(item.getQty()); - item.setFid(UUID.randomUUID().toString()); - //保存发送WMS数据 - if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) { - saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(item.getWorkOrderNo())); - mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms); - } - } - private String getOrderNo(MesWorkOrder item) { String orderNo; if(item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()){ @@ -663,7 +434,7 @@ public class MesWorkOrderService extends BaseMesService implements Map> cellCodeMap = assemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkCellCode)); for (String cellCode : cellCodeList) { MesQueueOrder mesQueueOrder = new MesQueueOrder(); - BeanUtils.copyProperties(item,mesQueueOrder,"id"); + BeanUtils.copyProperties(item,mesQueueOrder,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); mesQueueOrder.setWorkCellCode(cellCode); mesQueueOrder.setProcessSeq(cellCodeMap.get(cellCode).get(0).getProcessSeq()); mesQueueOrder.setSerialNumber(item.getWorkOrderNo()); @@ -709,6 +480,7 @@ public class MesWorkOrderService extends BaseMesService implements item.setProductVersion(mesProductVersion.getProductVersion()); //获取bom信息 bomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); + item.setBomCode(bomList.iterator().next().getBomCode()); } //是否自动发布 return isAuto(item, saveMesWorkOrderToWms, bomList, mesProductVersion); @@ -718,8 +490,6 @@ public class MesWorkOrderService extends BaseMesService implements MesPartProdGroup mesPartProdGroup = null; if(StringUtil.isEmpty(item.getPartProdGroupCode())){ mesPartProdGroup = getMesPartProdGroup(item); - item.setPartProdGroupCode(mesPartProdGroup.getPartProdGroupCode()); - item.setPartProdGroupName(mesPartProdGroup.getPartProdGroupName()); }else{ DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(item.getPartProdGroupCode(), "partProdGroupCode", ddlPackBean); @@ -728,6 +498,9 @@ public class MesWorkOrderService extends BaseMesService implements MesException.throwMesBusiException("零件生产组【%s】信息不存在",item.getPartProdGroupCode()); } } + item.setPartProdGroupCode(mesPartProdGroup.getPartProdGroupCode()); + item.setPartProdGroupName(mesPartProdGroup.getPartProdGroupName()); + item.setCustCode(mesPartProdGroup.getCustCode()); //自动发布 if (CommonEnumUtil.VALID == mesPartProdGroup.getIsAutoRelease()) { @@ -894,7 +667,7 @@ public class MesWorkOrderService extends BaseMesService implements baseRDao.insert(copyMesWorkOrder); //保存记录 MesWorkOrderLog workOrderLog = new MesWorkOrderLog(); - BeanUtils.copyProperties(item, workOrderLog, "id"); + BeanUtils.copyProperties(item, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); mesWorkOrderLogList.add(workOrderLog); // 如果工单为发布状态则新增打印队列 @@ -916,7 +689,7 @@ public class MesWorkOrderService extends BaseMesService implements index++; //保存记录 MesWorkOrderLog workOrderLog = new MesWorkOrderLog(); - BeanUtils.copyProperties(item, workOrderLog, "id"); + BeanUtils.copyProperties(item, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); mesWorkOrderLogList.add(workOrderLog); } //保存发送WMS数据 @@ -1647,7 +1420,7 @@ public class MesWorkOrderService extends BaseMesService implements private List getMesWorkOrderList(Long[] ids, String organizeCode) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackArray(ids,"id",packBean); + DdlPreparedPack.getInPackArray(ids,MesExtConstWords.ID,packBean); List mesWorkOrderList = baseRDao.findByHqlWhere(packBean); if (CollectionUtils.isEmpty(mesWorkOrderList)) { MesException.throwMesBusiException("选择工单信息不存在"); @@ -1827,7 +1600,7 @@ public class MesWorkOrderService extends BaseMesService implements private MesProductOffLine getMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, String sn, MesBom mesBom,Double itemQty, boolean isItemReport,String nowTime) { MesProductOffLine newMesProductOffLine = new MesProductOffLine(); - BeanUtils.copyProperties(mesBom, newMesProductOffLine, "id","systemSyncStatus"); + BeanUtils.copyProperties(mesBom, newMesProductOffLine,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); newMesProductOffLine.setReportPartNo(mesBom.getPartNo()); newMesProductOffLine.setReportPartNameRdd(mesBom.getPartName()); newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint()); @@ -2051,13 +1824,171 @@ public class MesWorkOrderService extends BaseMesService implements return mesWorkOrderList; } + private void insertSortWorkOrderNo(MesWorkOrder bean, MesWorkCenter mesWorkCenter) { + ValidatorBean.checkNotNull(bean.getOrderFlag(), "标识不能为空"); + ValidatorBean.checkNotNull(bean.getCustPartNo(), "客户物料号不能为空"); + + //校验产线类型和工单类型是否匹配 + if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.SORT.getValue())) { + MesException.throwMesBusiException("产线【%s】类型为【%s】,请选择排序产线", mesWorkCenter.getWorkCenterCode(), + MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(mesWorkCenter.getCenterType())); + } + //若工单类型为排序 标识为 N E P S + if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue().equals(bean.getOrderFlag()) && + !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue().equals(bean.getOrderFlag()) && + !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue().equals(bean.getOrderFlag()) && + !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(bean.getOrderFlag())) { + MesException.throwMesBusiException(String.format("工单标识为【%s】请选择 【%s】、【%s】、【%s】、【%s】 标识", + bean.getOrderFlag(), MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue() + , MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue(), + MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.S.getValue(), + MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue())); + } + //校验VIN号是否重复 + if (!StringUtil.isEmpty(bean.getVinCode())) { + //校验vin号是否重复 + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(bean.getVinCode(), "vinCode", ddlPackBean); + if (baseRDao.isExitByHql(ddlPackBean)) { + MesException.throwMesBusiException("vin号【%s】重复", bean.getVinCode()); + } + } + + List saveMesWorkOrderToWms = new ArrayList<>(); + //排序工单数量为1 + bean.setQty(1d); + //生成工单号 + bean.setWorkOrderNo(getOrderNo(bean)); + //发送工单给WMS + List orderPartList = sendToWms(bean, mesWorkCenter, saveMesWorkOrderToWms); + //顺序号 + bean.setProductSeq(getMaxMesWorkOrderProductSeq(bean)); + //生成客户条码 + bean.setCustSn(getCustSn(bean.getCustPartNo(), bean.getOrganizeCode(), bean.getCreateUser())); + //生成工单零件 工单装配件 + insertMesWorkOrder(bean, orderPartList); + + //物料名称不存在,从物料信息中获取 + MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); + bean.setPartName(mesPart.getPartName()); + bean.setUnit(mesPart.getUnit()); + //生产时间新增取当天 + if (StringUtil.isEmpty(bean.getProduceTime())) { + bean.setProduceTime(TimeTool.getToday()); + bean.setProductTime(bean.getProduceTime()); + } + bean.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + bean.setUnCompleteQty(bean.getQty()); + bean.setFid(UUID.randomUUID().toString()); + //保存发送WMS数据 + if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) { + saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(bean.getWorkOrderNo())); + mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms); + } + + baseRDao.insert(bean); + workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty()); + } + + private void insertUnSortWorkOrder(MesWorkOrder bean, MesWorkCenter mesWorkCenter) { + ValidatorBean.checkNotNull(bean.getOrderFlag(), "标识不能为空"); + if (Objects.isNull(bean.getQty()) || bean.getQty() <= 0d) { + MesException.throwMesBusiException("生产数量不能小于等于0"); + } + //校验产线类型和工单类型是否匹配 + if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue())) { + MesException.throwMesBusiException("产线【%s】类型为【%s】,请选择非排序产线", mesWorkCenter.getWorkCenterCode(), + MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(mesWorkCenter.getCenterType())); + } + if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue().equals(bean.getOrderFlag()) && + !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue().equals(bean.getOrderFlag()) && + !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(bean.getOrderFlag())) { + MesException.throwMesBusiException(String.format("工单标识为【%s】请选择 【%s】、【%s】、【%s】 标识", + bean.getOrderFlag(), MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue() + , MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue(), + MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue())); + } + bean.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); + List saveMesWorkOrderToWms = new ArrayList<>(); + //非试制单 + if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(bean.getOrderFlag())) { + ValidatorBean.checkNotNull(bean.getProductVersion(), "生产版本不能为空"); + //校验物料生产版本是否存在 + MesProductVersion mesProductVersion = checkMesProductVersion(bean); + bean.setErpWorkCenter(mesProductVersion.getWorkCenterCode()); + //获取bom信息 + List bomList = mesBomService.findMesBomByPartNoAndBomVersion(bean.getPartNo(), bean.getOrganizeCode(), mesProductVersion.getAlternativePartList()); + //发送工单信息给WMS + saveMesWorkOrderToWms.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(bean, bomList)); + } + //物料名称不存在,从物料信息中获取 + MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); + bean.setPartName(mesPart.getPartName()); + bean.setUnit(mesPart.getUnit()); + //生产时间新增取当天 + if (StringUtil.isEmpty(bean.getProduceTime())) { + bean.setProduceTime(TimeTool.getToday()); + bean.setProductTime(bean.getProduceTime()); + } + bean.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + bean.setUnCompleteQty(bean.getQty()); + bean.setFid(UUID.randomUUID().toString()); + bean.setWorkOrderNo(getOrderNo(bean)); + //保存发送WMS数据 + if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) { + saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(bean.getWorkOrderNo())); + mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms); + } + + baseRDao.insert(bean); + workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty()); + } + + private void insertBtoWorkOrder(MesWorkOrder bean, MesWorkCenter mesWorkCenter) { + ValidatorBean.checkNotNull(bean.getPlanStartTime(), "计划开始时间不能为空"); + ValidatorBean.checkNotNull(bean.getPlanEndTime(), "计划结束时间不能为空"); + if (Objects.isNull(bean.getQty()) || bean.getQty() <= 0d) { + MesException.throwMesBusiException("生产数量不能小于等于0"); + } + List saveMesWorkOrderToWms = new ArrayList<>(); + //顺序号 + bean.setProductSeq(getMaxMesWorkOrderProductSeq(bean)); + //生成工单号 + bean.setWorkOrderNo(getOrderNo(bean)); + //发送工单给WMS + sendToWms(bean, mesWorkCenter, saveMesWorkOrderToWms); + //物料名称不存在,从物料信息中获取 + MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); + bean.setPartName(mesPart.getPartName()); + bean.setUnit(mesPart.getUnit()); + //生产时间新增取当天 + if (StringUtil.isEmpty(bean.getProduceTime())) { + bean.setProduceTime(TimeTool.getToday()); + bean.setProductTime(bean.getProduceTime()); + } + bean.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + bean.setUnCompleteQty(bean.getQty()); + bean.setFid(UUID.randomUUID().toString()); + //保存发送WMS数据 + if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) { + saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(bean.getWorkOrderNo())); + mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms); + } + //生成WorkOrderSeq + GenSerialNoModel orderSeqSerialNoModel = new GenSerialNoModel(MesCommonConstant.ORDER_NO_BTO_SEQ); + List resultList = syncFuncService.syncSerialNo(orderSeqSerialNoModel.organizeCode(bean.getOrganizeCode()), bean.getCreateUser(), bean.getOrganizeCode(), 1).getResultList(); + bean.setWorkOrderSeq(resultList.get(0)); + baseRDao.insert(bean); + workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty()); + } + public List saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List mesBomList) { List mesWorkOrderToWmsList = new ArrayList<>(); MesWorkOrderToWms mesWorkOrderToWms = null; for (MesBom mesBom : mesBomList) { mesWorkOrderToWms = new MesWorkOrderToWms(); - BeanUtils.copyProperties(mesWorkOrder, mesWorkOrderToWms, "id"); + BeanUtils.copyProperties(mesWorkOrder, mesWorkOrderToWms,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); mesWorkOrderToWms.setUnit(mesBom.getUnit()); mesWorkOrderToWms.setItemPartNo(mesBom.getItemPartNo()); mesWorkOrderToWms.setItemPartName(mesBom.getItemPartName()); @@ -2142,7 +2073,7 @@ public class MesWorkOrderService extends BaseMesService implements } public void saveMesWorkOrderLog(MesWorkOrder mesWorkOrder) { MesWorkOrderLog workOrderLog = new MesWorkOrderLog(); - BeanUtils.copyProperties(mesWorkOrder, workOrderLog, "id"); + BeanUtils.copyProperties(mesWorkOrder, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); mesWorkOrderLogRepository.insert(workOrderLog); } public List findBomList(String organizeCode, MesPart mesPart, String bomVersion) { @@ -2469,4 +2400,156 @@ public class MesWorkOrderService extends BaseMesService implements return workOrderAssemblyList; } + private void insertBatchWorkOrder(MesWorkOrder workOrder, Double generateQty) { + //查询数据 + List orderAssemblyList = mesWorkOrderAssemblyService.findMesWorkOrderAssembly(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); + List orderPartList = mesWorkOrderPartService.findMesWorkOrderPart(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); + List toWmsList = mesWorkOrderToWmsService.findMesWorkOrderToWms(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); + List orderLogList = workOrderLogService.findMesWorkOrderLog(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); + List queueOrderList = findMesQueueOrder(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); + MesProduceSn mesProduceSn = mesProduceSnService.getMesProduceSnByCustSn(workOrder.getOrganizeCode(), workOrder.getCustSn()); + MesPrintQueue printQueue = getMesPrintQuanOrder(workOrder.getOrganizeCode(), workOrder.getCustSn()); + //数据处理 + List newWrkOrderList = new ArrayList<>(); + List newOrderAssemblyList = new ArrayList<>(); + List newOrderPartList = new ArrayList<>(); + List newToWmsList = new ArrayList<>(); + List newOrderLogList = new ArrayList<>(); + List newProduceSnList = new ArrayList<>(); + List newQueueOrderList = new ArrayList<>(); + List newPrintQueueList = new ArrayList<>(); + MesWorkOrderAssembly newOrderAssembly = null; + MesWorkOrderPart newOrderPart = null; + MesWorkOrderToWms newOrderPartToWms = null; + MesWorkOrderLog orderLog = null; + MesProduceSn newProduceSn = null; + MesQueueOrder newQueueOrder = null; + MesPrintQueue newPrintQueue = null; + for (int i = 1; i < generateQty; i++) { + //工单 + MesWorkOrder newWorkOrder = new MesWorkOrder(); + BeanUtils.copyProperties(workOrder, newWorkOrder, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + newWorkOrder.setWorkOrderNo(getOrderNo(newWorkOrder)); + newWorkOrder.setProductSeq(newWorkOrder.getProductSeq() + i); + newWorkOrder.setCustSn(getCustSn(workOrder.getCustPartNo(), workOrder.getOrganizeCode(), workOrder.getCreateUser())); + newWorkOrder.setFid(UUID.randomUUID().toString()); + newWrkOrderList.add(newWorkOrder); + // + //工单装配件 + if (!CollectionUtils.isEmpty(orderAssemblyList)) { + for (MesWorkOrderAssembly assembly : orderAssemblyList) { + newOrderAssembly = new MesWorkOrderAssembly(); + BeanUtils.copyProperties(assembly, newOrderAssembly, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + newOrderAssembly.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + newOrderAssembly.setProductSn(newWorkOrder.getWorkOrderNo()); + newOrderAssemblyList.add(newOrderAssembly); + } + } + //工单零件 + if (!CollectionUtils.isEmpty(orderPartList)) { + for (MesWorkOrderPart part : orderPartList) { + newOrderPart = new MesWorkOrderPart(); + BeanUtils.copyProperties(part, newOrderPart, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + newOrderPart.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + newOrderPartList.add(newOrderPart); + } + } + //工单发送给WMS数据 + if (!CollectionUtils.isEmpty(toWmsList)) { + for (MesWorkOrderToWms toWms : toWmsList) { + newOrderPartToWms = new MesWorkOrderToWms(); + BeanUtils.copyProperties(toWms, newOrderPartToWms, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + newOrderPartToWms.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + newToWmsList.add(newOrderPartToWms); + } + } + //生产工单日志 + if (!CollectionUtils.isEmpty(orderLogList)) { + for (MesWorkOrderLog mesWorkOrderLog : orderLogList) { + orderLog = new MesWorkOrderLog(); + BeanUtils.copyProperties(mesWorkOrderLog, orderLog, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + orderLog.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + orderLog.setFid(UUID.randomUUID().toString()); + newOrderLogList.add(orderLog); + } + } + //生产队列主表 + if (!CollectionUtils.isEmpty(queueOrderList)) { + for (MesQueueOrder queueOrder : queueOrderList) { + newQueueOrder = new MesQueueOrder(); + BeanUtils.copyProperties(queueOrder, newQueueOrder, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + newQueueOrder.setCustSn(newWorkOrder.getCustSn()); + newQueueOrder.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + newQueueOrder.setSerialNumber(newWorkOrder.getWorkOrderNo()); + newQueueOrder.setProductSn(newWorkOrder.getWorkOrderNo()); + newQueueOrder.setProductSeq(newWorkOrder.getProductSeq()); + newQueueOrderList.add(newQueueOrder); + } + } + //产品条码表 + if (!Objects.isNull(mesProduceSn)) { + newProduceSn = new MesProduceSn(); + BeanUtils.copyProperties(mesProduceSn, newProduceSn, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + newProduceSn.setCustSn(newWorkOrder.getCustSn()); + newProduceSn.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + newProduceSn.setSerialNumber(newWorkOrder.getWorkOrderNo()); + newProduceSn.setProductSn(newWorkOrder.getWorkOrderNo()); + newProduceSn.setFid(UUID.randomUUID().toString()); + newProduceSnList.add(newProduceSn); + } + //装配目视单打印 + if (!Objects.isNull(printQueue)) { + newPrintQueue = new MesPrintQueue(); + BeanUtils.copyProperties(printQueue, newPrintQueue, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); + newPrintQueue.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); + newPrintQueueList.add(newPrintQueue); + } + } + //数据持久化 + baseRDao.saveAll(newWrkOrderList); + if (!CollectionUtils.isEmpty(newOrderAssemblyList)) { + mesWorkOrderAssemblyService.insertBatch(newOrderAssemblyList); + } + if (!CollectionUtils.isEmpty(newOrderPartList)) { + mesWorkOrderPartService.insertBatch(newOrderPartList); + } + if (!CollectionUtils.isEmpty(newOrderLogList)) { + workOrderLogService.insertBatch(newOrderLogList); + } + if (!CollectionUtils.isEmpty(newToWmsList)) { + mesWorkOrderToWmsService.insertBatch(newToWmsList); + } + if (!CollectionUtils.isEmpty(newQueueOrderList)) { + queueOrderRao.saveAll(newQueueOrderList); + } + if (!CollectionUtils.isEmpty(newProduceSnList)) { + mesProduceSnService.insertBatch(newProduceSnList); + } + if (!CollectionUtils.isEmpty(newPrintQueueList)) { + printQueueRepository.saveAll(newPrintQueueList); + } + } + + public List findMesQueueOrder(String workOrderNo, String organizeCode) { + if(StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", packBean); + return queueOrderRao.findByHqlWhere(packBean); + } + + public MesPrintQueue getMesPrintQuanOrder(String workOrderNo, String organizeCode) { + if(StringUtil.isEmpty(workOrderNo) || StringUtil.isEmpty(organizeCode)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", packBean); + return printQueueRepository.getByProperty(packBean); + } + + private Long getMaxMesWorkOrderProductSeq(MesWorkOrder bean) { + DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(bean.getWorkOrderType(), "workOrderType", orderPackBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"productSeq"}, orderPackBean); + MesWorkOrder workOrder = baseRDao.getByProperty(orderPackBean); + return (long) (Objects.isNull(workOrder) || StringUtils.isEmpty(workOrder.getProductSeq()) ? 0d : Math.toIntExact(workOrder.getProductSeq().toString().endsWith("9") ? workOrder.getProductSeq() + 2 : workOrder.getProductSeq()+1)); + } + }