From abcbb987670e48a63ffc9b194051504485e72f43 Mon Sep 17 00:00:00 2001 From: "logic.fang" <[logic.fang@estsh.com]> Date: Tue, 13 Aug 2024 15:41:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=A7=E7=BA=BF=E7=9C=8B=E6=9D=BF-=E5=B7=A5?= =?UTF-8?q?=E5=8D=95=E5=AE=8C=E6=88=90=E6=83=85=E5=86=B5-=E5=BD=93?= =?UTF-8?q?=E7=8F=AD=E4=B8=80=E6=AC=A1=E5=90=88=E6=A0=BC=E7=8E=87=E6=B1=87?= =?UTF-8?q?=E6=80=BB=E9=80=BB=E8=BE=91=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/apiservice/dao/board/IMesYfBoardDao.java | 4 +- .../daoimpl/board/MesYfBoardDaoImpl.java | 22 ++++++--- .../serviceimpl/board/IMesYfBoardServiceImpl.java | 56 ++++++++++++++-------- .../model/board/MesWorkCenterBoardResultModel.java | 4 +- 4 files changed, 59 insertions(+), 27 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/board/IMesYfBoardDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/board/IMesYfBoardDao.java index bb00b21..74623b2 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/board/IMesYfBoardDao.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/board/IMesYfBoardDao.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkCenterBoardResultModel; import cn.estsh.i3plus.pojo.mes.bean.MesShift; import java.util.List; +import java.util.Set; /** * @Description : 看板-数据方法实现 @@ -39,8 +40,9 @@ public interface IMesYfBoardDao { * @param organizeCode 组织代码 * @param startTime 查询起始时间 * @param endTime 查询结束时间 + * @param workOrderNoSet 工单号集合 * @return 加工完成条码及其质量状态 */ - List queryCompletedSnInfo(String workCenterCode, String organizeCode, String startTime, String endTime); + List queryCompletedSnInfo(String workCenterCode, String organizeCode, String startTime, String endTime, Set workOrderNoSet); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/board/MesYfBoardDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/board/MesYfBoardDaoImpl.java index 492ce05..c6dffdc 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/board/MesYfBoardDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/board/MesYfBoardDaoImpl.java @@ -12,6 +12,7 @@ import org.springframework.util.CollectionUtils; import javax.persistence.EntityManager; import javax.persistence.Query; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; /** @@ -71,12 +72,14 @@ public class MesYfBoardDaoImpl implements IMesYfBoardDao { } @Override - public List queryCompletedSnInfo(String workCenterCode, String organizeCode, String startTime, String endTime) { - //先查询生产加工表中指定时间区间、指定产线已加工完成的数据 + public List queryCompletedSnInfo(String workCenterCode, String organizeCode, String startTime, String endTime, Set workOrderNoSet) { + //先查询生产加工表中指定时间区间、指定产线(指定工单)已加工完成的数据(过程条码,创建时间、工单号,物料号) StringBuffer queryMesProductionRecordSql = new StringBuffer(); - queryMesProductionRecordSql.append("select distinct new " + MesWorkCenterBoardResultModel.class.getName() + + queryMesProductionRecordSql.append("select new " + MesWorkCenterBoardResultModel.class.getName() + "(serialNumber, " + - "createDatetime) " + + "createDatetime, " + + "workOrderNo, " + + "partNo) " + "from MesProductionRecord " + "where isValid = :isValid " + "and isDeleted = :isDeleted " + @@ -85,6 +88,9 @@ public class MesYfBoardDaoImpl implements IMesYfBoardDao { "and isComplete = :isComplete " + "and createDatetime >= :startTime " + "and createDatetime <= :endTime "); + if (!CollectionUtils.isEmpty(workOrderNoSet)) { + queryMesProductionRecordSql.append("and workOrderNo in (:workOrderNoSet) "); + } Query mesProductionRecordQuery = entityManager.createQuery(queryMesProductionRecordSql.toString(), MesWorkCenterBoardResultModel.class); mesProductionRecordQuery.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); mesProductionRecordQuery.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); @@ -93,13 +99,17 @@ public class MesYfBoardDaoImpl implements IMesYfBoardDao { mesProductionRecordQuery.setParameter("isComplete", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); mesProductionRecordQuery.setParameter("startTime", startTime); mesProductionRecordQuery.setParameter("endTime", endTime); + if (!CollectionUtils.isEmpty(workOrderNoSet)) { + mesProductionRecordQuery.setParameter("workOrderNoSet", workOrderNoSet); + } List productionRecordQueryResultList = mesProductionRecordQuery.getResultList(); if (!CollectionUtils.isEmpty(productionRecordQueryResultList)) { //取出所有过程条码 List serialNumberList = productionRecordQueryResultList. stream().map(MesWorkCenterBoardResultModel::getSerialNumber).collect(Collectors.toList()); + //查询合格的过程条码与对应的物料号 拼接后的结果 StringBuffer queryMesProduceSnSql = new StringBuffer(); - queryMesProduceSnSql.append("select distinct serialNumber " + + queryMesProduceSnSql.append("select CONCAT(serial_number,part_no) " + "from MesProduceSn " + "where isValid = :isValid " + "and isDeleted = :isDeleted " + @@ -114,7 +124,7 @@ public class MesYfBoardDaoImpl implements IMesYfBoardDao { mesProduceSnQuery.setParameter("serialNumberList", serialNumberList); List resultList = mesProduceSnQuery.getResultList(); for (MesWorkCenterBoardResultModel resultModel : productionRecordQueryResultList) { - if (resultList.contains(resultModel.getSerialNumber())) { + if (!CollectionUtils.isEmpty(resultList) && resultList.contains(resultModel.getSerialNumber() + resultModel.getPartNo())) { resultModel.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); }else { resultModel.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue()); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/board/IMesYfBoardServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/board/IMesYfBoardServiceImpl.java index c8809ed..d3bce3d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/board/IMesYfBoardServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/board/IMesYfBoardServiceImpl.java @@ -127,27 +127,44 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService { conditionModel.getTimeRangeIdentification(), conditionModel.getOrganizeCode()); //查询工单 List mesWorkOrderList = queryMesWorkOrder(timeZoneMap, conditionModel); - //封装汇总数据 - for (MesWorkOrder mesWorkOrder : mesWorkOrderList) { - MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel(); - resultModel.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); - resultModel.setPartNo(mesWorkOrder.getPartNo()); - resultModel.setPartDescription(mesWorkOrder.getPartName()); - resultModel.setWorkOrderCompletedQuantity(mesWorkOrder.getCompleteQty()); - resultModel.setWorkOrderPlannedQuantity(mesWorkOrder.getQty()); - double workOrderFirstPassRate; - if (resultModel.getWorkOrderCompletedQuantity() == 0 || resultModel.getWorkOrderPlannedQuantity() == 0) { - workOrderFirstPassRate = 0; - }else { - workOrderFirstPassRate = resultModel.getWorkOrderCompletedQuantity() * 100 / resultModel.getWorkOrderPlannedQuantity(); - if (workOrderFirstPassRate > 100) { + if (!CollectionUtils.isEmpty(mesWorkOrderList)) { + Set workOrderNoSet = mesWorkOrderList.stream().map(MesWorkOrder::getWorkOrderNo).collect(Collectors.toSet()); + //查询当前产线在指定时间段内加工完成的工单条码数据 + List mesProductOffLineQueryResultList = mesYfBoardDao.queryCompletedSnInfo( + conditionModel.getWorkCenterCodeList().get(0), + conditionModel.getOrganizeCode(), + timeZoneMap.get(conditionModel.getWorkCenterCodeList().get(0)).get(START_TIME), + timeZoneMap.get(conditionModel.getWorkCenterCodeList().get(0)).get(END_TIME), + workOrderNoSet); + //查询结果按照工单号分组 + Map> workOrderAndSnDataByOrderNoMap = + mesProductOffLineQueryResultList.stream().collect(Collectors.groupingBy(MesWorkCenterBoardResultModel::getWorkOrderNo)); + //封装汇总数据 + for (MesWorkOrder mesWorkOrder : mesWorkOrderList) { + MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel(); + resultModel.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + resultModel.setPartNo(mesWorkOrder.getPartNo()); + resultModel.setPartDescription(mesWorkOrder.getPartName()); + resultModel.setWorkOrderCompletedQuantity(mesWorkOrder.getCompleteQty()); + resultModel.setWorkOrderPlannedQuantity(mesWorkOrder.getQty()); + //计算当前工单的合格率 + double workOrderFirstPassRate; + List resultModels = workOrderAndSnDataByOrderNoMap.get(mesWorkOrder.getWorkOrderNo()); + if (CollectionUtils.isEmpty(resultModels)) { workOrderFirstPassRate = 100; + }else { + //合格数 + long count = resultModels.stream().filter(model -> model.getQcStatus() == MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()).count(); + workOrderFirstPassRate = count * 100 / resultModels.size(); + if (workOrderFirstPassRate > 100) { + workOrderFirstPassRate = 100; + } } + BigDecimal bd = new BigDecimal(workOrderFirstPassRate); + bd = bd.setScale(2, RoundingMode.HALF_UP); + resultModel.setWorkOrderFirstPassRate(bd); + resultModelList.add(resultModel); } - BigDecimal bd = new BigDecimal(workOrderFirstPassRate); - bd = bd.setScale(2, RoundingMode.HALF_UP); - resultModel.setWorkOrderFirstPassRate(bd); - resultModelList.add(resultModel); } return resultModelList; } @@ -208,7 +225,8 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService { conditionModel.getWorkCenterCodeList().get(0), conditionModel.getOrganizeCode(), timeZoneMap.get(START_TIME).get(START_TIME), - timeZoneMap.get(END_TIME).get(END_TIME)); + timeZoneMap.get(END_TIME).get(END_TIME), + null); //依次汇总每个时间段的数据 for (String timeZone : timeZoneMap.keySet()) { MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel(); diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/board/MesWorkCenterBoardResultModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/board/MesWorkCenterBoardResultModel.java index 937d43d..55c2d7b 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/board/MesWorkCenterBoardResultModel.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/board/MesWorkCenterBoardResultModel.java @@ -110,9 +110,11 @@ public class MesWorkCenterBoardResultModel { public MesWorkCenterBoardResultModel() { } - public MesWorkCenterBoardResultModel(String serialNumber, String createDateTime) { + public MesWorkCenterBoardResultModel(String serialNumber, String createDateTime, String workOrderNo, String partNo) { this.serialNumber = serialNumber; this.createDateTime = createDateTime; + this.workOrderNo = workOrderNo; + this.partNo = partNo; } }