From 1b71d890d825ba24daaff0028af2b698369be456 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=AE=E7=AC=91=E7=9D=80=E9=9D=A2=E5=AF=B9=E6=98=8E?= =?UTF-8?q?=E5=A4=A9?= <752558143@qq.com> Date: Wed, 26 Jun 2024 18:20:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B1=95=E7=A4=BA=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/pcn/api/base/IMesShiftService.java | 5 + .../ext/mes/pcn/api/busi/IMesWorkOrderService.java | 14 +- .../apiservice/schedulejob/MesReportNoSortJob.java | 50 +++- .../serviceimpl/base/MesShiftServiceImpl.java | 6 + .../serviceimpl/busi/MesWorkOrderService.java | 304 ++++++++++++++++++++- .../step/MesSaveProcessResultStepService.java | 2 +- .../MesProductionCustomContextStepService.java | 4 +- pom.xml | 4 +- 8 files changed, 356 insertions(+), 33 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesShiftService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesShiftService.java index 66ba5b4..b92c748 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesShiftService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesShiftService.java @@ -6,6 +6,8 @@ import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.MesShift; import io.swagger.annotations.ApiOperation; +import java.util.List; + /** * @Description: 产线与班次的对应关系 * @Author: gsz @@ -18,4 +20,7 @@ public interface IMesShiftService { @ApiOperation(value = "查询产线与班次的对应关系") public ListPager queryMesShiftByPager(MesShift mesShift, Pager pager); + + @ApiOperation(value = "查询产线与班次的对应关系") + public List queryMesShift(String organizeCode, String workCenterCode); } diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderService.java index 6ba259c..c2fc29f 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderService.java @@ -37,7 +37,7 @@ public interface IMesWorkOrderService { * @param organizeCode * @return */ - List getUnReportMesProduceSn(String organizeCode); + public List getUnReportMesProduceSn(String organizeCode); List getPreDayReportMesProductionRecord(String organizeCode , List mesShiftList, String workCenterCode); @@ -46,4 +46,16 @@ public interface IMesWorkOrderService { public List insertMesWorkOrder(List mesProduceSns,List mesShiftList,String organizeCode, String userName ); void doPcnJobProductReport(List mesProduceSns,List mesShiftList,String organizeCode, String userName, MesWorkOrder mesWorkOrder); + + + void doProductReportByRecord(MesProductionRecord productionRecord, String organizeCode, String userName); + + void doProductHasOrderReportByRecord(MesProductionRecord productionRecord, String organizeCode, String userName); + + /** + * 获取未报工 + * @param organizeCode + * @return + */ + List getUnReportHasOrderMesProduceSn(String organizeCode); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesReportNoSortJob.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesReportNoSortJob.java index f048c98..a1f029b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesReportNoSortJob.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesReportNoSortJob.java @@ -23,7 +23,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @author castle,暂时没有客供品移库 @@ -61,31 +63,49 @@ public class MesReportNoSortJob extends BaseMesScheduleJob { if (null == userName){ userName = "JOB"; } - List unReportMesProduceSn = workOrderService.getUnReportMesProduceSn(organizeCode); - for (MesProduceSn mesProduceSn : unReportMesProduceSn) { - try { - workOrderService.doProductReport(Arrays.asList(mesProduceSn), organizeCode, userName); - //1.获取生产加工记录production_record表中,report_status为待汇报状态的工单 - updateProductionRecord(organizeCode, userName, mesProduceSn); - } catch (ImppBusiException e) { - LOGGER.error("条码:{}报工失败", mesProduceSn.getProductSn(), e.getErrorDetail()); - updateProductionRecord(organizeCode, userName, mesProduceSn, e.getErrorDetail()); - continue; - } + // 处理无工单 + handlerNoOrder(organizeCode, userName); + // 处理有工单 + handlerHasOrder(organizeCode, userName); + // } + } + + private void handlerNoOrder(String organizeCode, String userName) { + List unReportMesProduceSn = workOrderService.getUnReportMesProduceSn(organizeCode); + try { + Map map = new HashMap<>(); + workOrderService.doProductReportByRecord(unReportMesProduceSn.get(0), organizeCode, userName); + + } catch (ImppBusiException e) { + LOGGER.error("条码:{}报工失败", unReportMesProduceSn.get(0).getProductSn(), e.getErrorDetail()); + updateProductionRecord(organizeCode, userName, unReportMesProduceSn.get(0).getProductSn(), e.getErrorDetail()); + } + } + + private void handlerHasOrder(String organizeCode, String userName) { + List unReportMesProduceSn = workOrderService.getUnReportHasOrderMesProduceSn(organizeCode); + try { + Map map = new HashMap<>(); + workOrderService.doProductHasOrderReportByRecord(unReportMesProduceSn.get(0), organizeCode, userName); + + } catch (ImppBusiException e) { + LOGGER.error("条码:{}报工失败", unReportMesProduceSn.get(0).getProductSn(), e.getErrorDetail()); + updateProductionRecord(organizeCode, userName, unReportMesProduceSn.get(0).getProductSn(), e.getErrorDetail()); } } - private void updateProductionRecord(String organizeCode, String userName, MesProduceSn mesProduceSn) { + + private void updateProductionRecord(String organizeCode, String userName, String sn) { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(mesProduceSn.getProductSn(), "productSn", ddlPackBean); + DdlPreparedPack.getStringEqualPack(sn, "productSn", ddlPackBean); productionRecordRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime","reportStatus"}, new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue() },ddlPackBean); } - private void updateProductionRecord(String organizeCode, String userName, MesProduceSn mesProduceSn, String errorMsg) { + private void updateProductionRecord(String organizeCode, String userName, String sn, String errorMsg) { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(mesProduceSn.getProductSn(), "productSn", ddlPackBean); + DdlPreparedPack.getStringEqualPack(sn, "productSn", ddlPackBean); productionRecordRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime","reportStatus", "remark"}, new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue(), errorMsg },ddlPackBean); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesShiftServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesShiftServiceImpl.java index b8ea6e8..e557d1e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesShiftServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesShiftServiceImpl.java @@ -43,4 +43,10 @@ public class MesShiftServiceImpl implements IMesShiftService { return new ListPager<>(resultList, pager); } + @Override + public List queryMesShift(String organizeCode, String workCenterCode) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", packBean); + return mesShiftRepository.findByHqlWhere(packBean); + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java index 429ddcd..6f0f994 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java @@ -1,5 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesShiftService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; @@ -20,6 +22,9 @@ import cn.estsh.i3plus.pojo.mes.repository.*; import cn.estsh.i3plus.pojo.mes.repository.shipping.MesWorkOrderToWmsRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.date.format.DateParser; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.slf4j.Logger; @@ -29,6 +34,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -78,6 +84,14 @@ public class MesWorkOrderService implements IMesWorkOrderService { private MesShiftRepository mesShiftRepository; @Autowired private IMesConfigService configService; + + @Autowired + private IMesPartService iMesPartService; + + @Autowired + private IMesShiftService mesShiftService; + + @Override public MesWorkOrder queryMesWorkOrder(MesWorkOrder workOrder) { @@ -430,9 +444,276 @@ public class MesWorkOrderService implements IMesWorkOrderService { } return mesProductVersion; } + + private void updateProductionRecord(String organizeCode, String userName, String sn) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + + DdlPreparedPack.getStringEqualPack(sn, "productSn", ddlPackBean); + productionRecordRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime","reportStatus"}, + new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_50.getValue()},ddlPackBean); + } + @Override + public void doProductReportByRecord(MesProductionRecord productionRecord, String organizeCode, String userName) { + //新增初始化 todo + // 根据 + //根据物料获取已发布的工单 + MesWorkOrder oldMesWorkOrder = getMesWorkOrder(productionRecord, organizeCode); + if (oldMesWorkOrder == null) { + updateProductionRecord(organizeCode, userName, productionRecord.getProductSn()); + } + + report(productionRecord, organizeCode, userName, oldMesWorkOrder); + + } + @Override + public void doProductHasOrderReportByRecord(MesProductionRecord productionRecord, String organizeCode, String userName) { + //新增初始化 todo + // 根据 + //根据物料获取已发布的工单 + List oldMesWorkOrders = getMesWorkOrders(productionRecord, organizeCode, null); + if (CollectionUtils.isEmpty(oldMesWorkOrders)) { + updateProductionRecord(organizeCode, userName, productionRecord.getProductSn()); + } + report(productionRecord, organizeCode, userName, oldMesWorkOrders.get(0)); + + } + private void report(MesProductionRecord productionRecord, String organizeCode, String userName, MesWorkOrder oldMesWorkOrder) { + DdlPackBean ddlPackBean; + //查询工作中心 + ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(oldMesWorkOrder.getWorkCenterCode(), "workCenterCode", ddlPackBean); + MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(ddlPackBean); + if (Objects.isNull(mesWorkCenter)) { + throw new ImppBusiException(String.format("产线【%s】不存在", oldMesWorkOrder.getWorkCenterCode())); + } + //获取生产版本 + ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(productionRecord.getPartNo(), "partNo", ddlPackBean); + DdlPreparedPack.getStringEqualPack(mesWorkCenter.getErpWorkCenter(), "workCenterCode", ddlPackBean); + DdlPreparedPack.getStringEqualPack(oldMesWorkOrder.getProductVersion(), "productVersion", ddlPackBean); + MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); + if (null == mesProductVersion) { + throw new ImppBusiException(String.format("物料【%s】生产版本信息不存在", productionRecord.getPartNo())); + } + //物料+生产版本获取bom信息 + ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(productionRecord.getPartNo(), "partNo", ddlPackBean); + DdlPreparedPack.getStringEqualPack(mesProductVersion.getAlternativePartList(), "bomVersion", ddlPackBean); + List mesBoms = mesBomRDao.findByHqlWhere(ddlPackBean); + if (CollectionUtils.isEmpty(mesBoms)) { + throw new ImppBusiException(String.format("物料【%s】生产版本【%s】对应bom信息不存在", + productionRecord.getPartNo(), mesProductVersion.getProductVersion())); + } + oldMesWorkOrder.setNum(oldMesWorkOrder.getNum() == null ? 1 : oldMesWorkOrder.getNum() + 1); + oldMesWorkOrder.setReportedQty(MathOperation.add(oldMesWorkOrder.getNum(), oldMesWorkOrder.getReportedQty())); + //更新SAP计划完成数量 + saveMesProductPlan(oldMesWorkOrder, false, true); + + //更新工单状态 + double unCompleteQty = MathOperation.sub(oldMesWorkOrder.getQty(), oldMesWorkOrder.getReportedQty()); + oldMesWorkOrder.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0); + if (oldMesWorkOrder.getReportedQty() > oldMesWorkOrder.getQty()) { + throw new ImppBusiException(String.format("工单报工数量【%s】大于工单数量【%s】,不允许报工", + oldMesWorkOrder.getReportedQty(), oldMesWorkOrder.getQty())); + } else if (Objects.equals(oldMesWorkOrder.getReportedQty(), oldMesWorkOrder.getQty())) { + oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); + } else { + oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); + } + ConvertBean.serviceModelUpdate(oldMesWorkOrder, userName); + workOrderRepository.saveAndFlush(oldMesWorkOrder); + //保存数据 + List mesProductOffLineList = new ArrayList<>(); + MesProductOffLine newMesProductOffLine; + + for (MesBom mesBom : mesBoms) { + newMesProductOffLine = new MesProductOffLine(); + newMesProductOffLine.setReportPartNo(oldMesWorkOrder.getPartNo()); + newMesProductOffLine.setReportPartNameRdd(oldMesWorkOrder.getPartName()); + newMesProductOffLine.setItemPartNo(mesBom.getItemPartNo()); + newMesProductOffLine.setItemPartName(mesBom.getItemPartName()); + newMesProductOffLine.setItemQty(mesBom.getItemQty()); + newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint()); + newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint()); + newMesProductOffLine.setQty(1d); + newMesProductOffLine.setReportSn(productionRecord.getProductSn()); + newMesProductOffLine.setBomVersion(oldMesWorkOrder.getProductVersion()); + newMesProductOffLine.setSerialNumber(productionRecord.getProductSn()); + newMesProductOffLine.setUnit(mesBom.getUnit()); + newMesProductOffLine.setItemUnit(mesBom.getItemUnit()); + newMesProductOffLine.setWorkOrderNo(oldMesWorkOrder.getWorkOrderNo()); + newMesProductOffLine.setWorkCenterCode(oldMesWorkOrder.getWorkCenterCode()); + newMesProductOffLine.setWorkCellCode(oldMesWorkOrder.getWorkCellCode()); + newMesProductOffLine.setReportType(oldMesWorkOrder.getReportType()); + newMesProductOffLine.setSapWorkCenter(oldMesWorkOrder.getErpWorkCenter()); + newMesProductOffLine.setOrganizeCode(oldMesWorkOrder.getOrganizeCode()); + + ConvertBean.serviceModelInitialize(newMesProductOffLine, userName); + mesProductOffLineList.add(newMesProductOffLine); + } + + mesProductOffLineRDao.saveAll(mesProductOffLineList); + // 同步工单信息给加工记录、条码信息 + DdlPackBean snDdlPackBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getStringEqualPack(productionRecord.getProductSn(), "productSn", snDdlPackBean); + DdlPreparedPack.getStringEqualPack(organizeCode, "organizeCode", snDdlPackBean); + + mesProduceSnRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime","workOrderNo"}, + new Object[]{userName, TimeTool.getNowTime(true), oldMesWorkOrder.getWorkOrderNo()},snDdlPackBean); + + productionRecordRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime","workOrderNo", "reportStatus"}, + new Object[]{userName, TimeTool.getNowTime(true), oldMesWorkOrder.getWorkOrderNo(), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue()},snDdlPackBean); + } + + /** + * 获取对应的工单 + * @param productionRecord + * @param organizeCode + * @return + */ + private MesWorkOrder getMesWorkOrder(MesProductionRecord productionRecord, String organizeCode) { + MesWorkOrder mesWorkOrder = new MesWorkOrder(); + /** + * 根据产线物料获取所有工单 + */ + List oldMesWorkOrders = getMesWorkOrders(productionRecord, organizeCode, null); + // 获取当前班次 + String shiftCode = productionRecord.getShiftCode(); + String workCenterCode = productionRecord.getWorkCenterCode(); + + List shiftList = mesShiftService.queryMesShift(organizeCode, workCenterCode); + // 如果当前班次是早班 + if (CollectionUtils.isEmpty(shiftList)) { + MesPcnException.throwFlowException(String.format("班次信息未维护,产线=%s"), workCenterCode); + } + List shifts = shiftList.stream().filter(mesShift -> Objects.equals(mesShift.getWorkCenterCode(), workCenterCode)).collect(Collectors.toList()); + + MesShift currentShift = shifts.stream().filter(mesShift -> Objects.equals(mesShift.getShiftCode(), shiftCode)).findFirst().orElse(null); + + String beginTime =productionRecord.getLotNo() + " " + currentShift.getStartTime(); + Date beginDate = transfer(beginTime); + + /*MesWorkOrder found = null; + for (MesWorkOrder oldMesWorkOrder : oldMesWorkOrders) { + if (beginDate.getTime() >= transfer(oldMesWorkOrder.getPlanStartTime()).getTime() && beginDate.getTime() < transfer(oldMesWorkOrder.getPlanEndTime()).getTime()) { + found = oldMesWorkOrder; + break; + } + }*/ + + mesWorkOrder = oldMesWorkOrders.stream().filter(workOrder -> beginDate.getTime() >= transfer(workOrder.getPlanStartTime()).getTime() && beginDate.getTime() <= transfer(workOrder.getPlanEndTime()).getTime()).findFirst().orElse(null); + + String date = productionRecord.getLotNo(); + // 如果找不到需要找 当天的其它班次 + if (mesWorkOrder == null) { + // 如果开始时间大于结束时间,说明跨天了,跨天说明是晚班,需要找, 如果是晚班, 则找早中班的工单 + if (currentShift.getStartTime().compareTo(currentShift.getEndTime()) > 0) { + // 如果比0点大,需要找日期前一天的班次的工单号,如果是0点前,date =lotNO 如果是0点后,则找lot的前一天 + int hours = transfer(productionRecord.getCompleteDateTime()).getHours(); + if (hours < 12) { + date = getDate(productionRecord.getLotNo(), 1); + } else { + date = getDate(productionRecord.getLotNo(), 0); + } + String endTime = date + " " +currentShift.getStartTime(); + String startTime = date + " " +currentShift.getEndTime(); + + mesWorkOrder = oldMesWorkOrders.stream().filter(workOrder -> transfer(startTime).getTime() > transfer(workOrder.getPlanStartTime()).getTime() && transfer(endTime).getTime() < transfer(workOrder.getPlanEndTime()).getTime()).findFirst().orElse(null); + + } else { + // 早班或者中班 则找当天非当前班次的最早单号 + String startTime = date + " " +currentShift.getEndTime(); + String endTime = getDate(date, 2) + " " +currentShift.getStartTime(); + for (MesWorkOrder workOrder : oldMesWorkOrders) { + if (transfer(startTime).getTime() >= transfer(workOrder.getPlanStartTime()).getTime() && transfer(endTime).getTime() <= transfer(workOrder.getPlanEndTime()).getTime()) { + break; + } + } + mesWorkOrder = oldMesWorkOrders.stream().filter(workOrder -> transfer(startTime).getTime() >= transfer(workOrder.getPlanStartTime()).getTime() && transfer(endTime).getTime() <= transfer(workOrder.getPlanEndTime()).getTime()).findFirst().orElse(null); + } + if (mesWorkOrder == null) { + // todo 需要记录并且第二天要用job跑 + return null; + } + } + return mesWorkOrder; + } + + private List getMesWorkOrders(MesProductionRecord productionRecord, String organizeCode, String workOrderNo) { + List list = Stream.of(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(), MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()).collect(Collectors.toList()); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(productionRecord.getPartNo(), "partNo", ddlPackBean); + DdlPreparedPack.getStringEqualPack(productionRecord.getWorkCenterCode(), "workCenterCode", ddlPackBean); + if (!StringUtils.isEmpty(workOrderNo)) { + DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", ddlPackBean); + } + DdlPreparedPack.getInPackList(list, "workOrderStatus", ddlPackBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"createDatetime"}, ddlPackBean); + // 新增班次逻辑 + //DdlPreparedPack. + List oldMesWorkOrders = workOrderRepository.findByHqlWhere(ddlPackBean); + if(CollectionUtils.isEmpty(oldMesWorkOrders)){ + throw new ImppBusiException(String.format("物料【%s】状态已发布的工单信息不存在", productionRecord.getPartNo())); + } + return oldMesWorkOrders; + } + + /** + * flag = 1 减少 1天, = 2 加一天 + * @param lotNo + * @param flag + * @return + */ + public String getDate(String lotNo, int flag) { + SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); + Date d = null; + try { + d = df.parse(lotNo); + } catch (ParseException e) { + e.printStackTrace(); + } + Calendar cal=Calendar.getInstance(); + cal.setTime(d); + if (flag == 1) { + cal.add(Calendar.DATE, -1); //减1天 + } else if (flag == 2) { + cal.add(Calendar.DATE, 1); //加1天 + } + return df.format(cal.getTime()).substring(0, 10); + } + + private MesProductVersion getMesProductVersion(MesWorkOrder item, MesWorkCenter mesWorkCenter) { + DdlPackBean ddlPackBean; + ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", ddlPackBean); + DdlPreparedPack.getStringEqualPack(mesWorkCenter.getErpWorkCenter(), "workCenterCode", ddlPackBean); + ddlPackBean.setOrderByStr(" order by createDatetime desc "); + MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); + if (Objects.isNull(mesProductVersion)) { + MesPcnException.throwMesBusiException("物料【%s】工作中心【%s】对应的生产版本信息不存在", item.getPartNo(), + mesWorkCenter.getErpWorkCenter()); + } + return mesProductVersion; + } + @Override + public List getUnReportMesProduceSn(String organizeCode) { + //1.获取生产加工记录production_record表中,report_status为待汇报状态的工单 + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + List statusList = Stream.of(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue()).collect(Collectors.toList()); + DdlPreparedPack.getInPackList( statusList,"reportStatus",ddlPackBean); + DdlPreparedPack.getIsNull("workOrderNo",ddlPackBean); + //DdlPreparedPack.getStringEqualPack("B19CK01A", "workCenterCode",ddlPackBean); + + + + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"createDatetime"}, ddlPackBean); + List mesProductionRecordList = productionRecordRao.findByHqlTopWhere(ddlPackBean, 1); + + return mesProductionRecordList; + } + @Override - public List getUnReportMesProduceSn(String organizeCode) { - List mesProduceSnList = new ArrayList<>(); + public List getUnReportHasOrderMesProduceSn(String organizeCode) { //1.获取生产加工记录production_record表中,report_status为待汇报状态的工单 DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); List statusList = Stream.of(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue()).collect(Collectors.toList()); @@ -440,17 +721,12 @@ public class MesWorkOrderService implements IMesWorkOrderService { DdlPreparedPack.getIsNotNull("workOrderNo",ddlPackBean); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"createDatetime"}, ddlPackBean); - List mesProductionRecordList = productionRecordRao.findByHqlTopWhere(ddlPackBean, 5); - if (mesProductionRecordList.isEmpty()){ - return mesProduceSnList; - } - //2.根据工单查询工单下的mesProduceSn - List workOrderNoList = mesProductionRecordList.stream().map(MesProductionRecord::getWorkOrderNo).collect(Collectors.toList()); - //工单号 - DdlPackBean snPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(workOrderNoList,"workOrderNo",snPackBean); - return mesProduceSnRao.findByHqlWhere(snPackBean); + List mesProductionRecordList = productionRecordRao.findByHqlTopWhere(ddlPackBean, 1); + + return mesProductionRecordList; } + + @Override public List getPreDayReportMesProductionRecord(String organizeCode,List mesShiftList, String workCenterCode ) { @@ -663,4 +939,8 @@ public class MesWorkOrderService implements IMesWorkOrderService { } return mesProductVersion; } + + private Date transfer(String dateStr){ + return DateUtil.parse(dateStr, (DateParser) DatePattern.NORM_DATETIME_FORMAT); + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSaveProcessResultStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSaveProcessResultStepService.java index ec76025..27fbbff 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSaveProcessResultStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesSaveProcessResultStepService.java @@ -77,7 +77,7 @@ public class MesSaveProcessResultStepService extends BaseStepService { /** * 加工异常处理工步 */ - // mesProductResultErrorHandleStepService.execute(reqBean); + mesProductResultErrorHandleStepService.execute(reqBean); /** * 报工 */ diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java index 921b448..821c690 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java @@ -150,8 +150,8 @@ public class MesProductionCustomContextStepService extends BaseStepService imple StationKvBean shiftGroupKvBean = stationKvBeans.stream().filter(stationKvBean -> Objects.equal(stationKvBean.getKey(), "shiftGroup")).findFirst().orElse(null); StationKvBean shiftCodeKvBean = stationKvBeans.stream().filter(stationKvBean -> Objects.equal(stationKvBean.getKey(), "shiftCode")).findFirst().orElse(null); - mesProdShiftContext.setShiftCode(shiftGroupKvBean == null ? null : shiftGroupKvBean.getValue()); - mesProdShiftContext.setShiftGroup(shiftCodeKvBean == null ? null : shiftCodeKvBean.getValue()); + mesProdShiftContext.setShiftCode(shiftGroupKvBean == null ? null : shiftCodeKvBean.getValue()); + mesProdShiftContext.setShiftGroup(shiftCodeKvBean == null ? null : shiftGroupKvBean.getValue()); return mesProdShiftContext; } diff --git a/pom.xml b/pom.xml index ed126c0..4a5588f 100644 --- a/pom.xml +++ b/pom.xml @@ -29,9 +29,9 @@ INFO true UTF-8 - + 1.0.0.4-patch - 1.0.1-YZ + 1.0.0-yfai 1.0.0.1-patch 1.0.0-yfai