From 0994b7ffaa17aa5763455ace5b1523f2412913de Mon Sep 17 00:00:00 2001 From: gsz Date: Sat, 27 Jul 2024 14:22:02 +0800 Subject: [PATCH] =?UTF-8?q?MES=E5=8F=AF=E7=96=91=E5=93=81=E6=B1=87?= =?UTF-8?q?=E6=80=BBjob=E4=BF=AE=E6=94=B9=E6=B1=87=E6=80=BB=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/busi/MesWhiteListController.java | 37 +++-- .../schedulejob/MesQmsSuspiciousJob.java | 15 +- .../base/MesPartProdGroupWindowTimeService.java | 7 + .../serviceimpl/base/MesQmsSuspiciousService.java | 156 ++++++++++++--------- 4 files changed, 133 insertions(+), 82 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java index 91f8564..6e672f4 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java @@ -28,10 +28,9 @@ import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import java.text.SimpleDateFormat; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; import java.util.stream.Collectors; @@ -203,14 +202,34 @@ public class MesWhiteListController extends MesBaseController { @ApiOperation(value = "qmsSuspicious", notes = " ") public ResultBean doQmsSuspiciousTest(String organizeCode) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); -// DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), "systemSyncStatus", packBean); - DdlPreparedPack.timeBuilder( - new SimpleDateFormat("yyyy-MM-dd").format(TimeTool.getDateBefore(new Date(), 1)) + " 00:00:00", - TimeTool.getToday() + " 00:00:00", "createDatetime", packBean, true); + LocalDateTime now = LocalDateTime.now(); + LocalDateTime oneHourAgo = now.minusHours(1); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + String formattedNow = now.format(formatter); + String formattedOneHourAgo = oneHourAgo.format(formatter); + DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), "qmsSync", packBean); + DdlPreparedPack.timeBuilder(formattedOneHourAgo, formattedNow, "createDatetime", packBean, true); List mesPartInspectionList = partInspectionRepository.findByHqlWhere(packBean); if (!CollectionUtils.isEmpty(mesPartInspectionList)) { - qmsSuspiciousService.doQmsSuspiciousByPartInspection(mesPartInspectionList,organizeCode); + //过滤掉已经汇总的 + List partInspectionList = new ArrayList<>(); + //排序取未同步的一条最早的 + Map> partMap = mesPartInspectionList.stream().collect(Collectors.groupingBy(p -> p.getSn() + "-" + p.getPartNo())); + for (Map.Entry> stringListEntry : partMap.entrySet()) { + List value = stringListEntry.getValue(); + MesPartInspection next = value.stream().sorted(Comparator.comparing(MesPartInspection::getCreateDatetime).reversed()).iterator().next(); + + partInspectionList.add(next); + } + + qmsSuspiciousService.doQmsSuspiciousByPartInspection(partInspectionList, organizeCode); + + for (MesPartInspection mesPartInspection : mesPartInspectionList) { + mesPartInspection.setQmsSync(1); + mesPartInspection.setSystemSyncDatetime(TimeTool.getNowTime(true)); + } + partInspectionRepository.saveAll(mesPartInspectionList); } return ResultBean.success().setSuccess(true); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesQmsSuspiciousJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesQmsSuspiciousJob.java index 9737af7..6efbba4 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesQmsSuspiciousJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesQmsSuspiciousJob.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.api.base.IMesQmsSuspiciousService; import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; import cn.estsh.i3plus.pojo.mes.repository.MesPartInspectionRepository; @@ -81,7 +82,7 @@ public class MesQmsSuspiciousJob extends BaseMesScheduleJob { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String formattedNow = now.format(formatter); String formattedOneHourAgo = oneHourAgo.format(formatter); - + DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), "qmsSync", packBean); DdlPreparedPack.timeBuilder(formattedOneHourAgo, formattedNow, "createDatetime", packBean, true); List mesPartInspectionList = partInspectionRepository.findByHqlWhere(packBean); @@ -92,15 +93,9 @@ public class MesQmsSuspiciousJob extends BaseMesScheduleJob { Map> partMap = mesPartInspectionList.stream().collect(Collectors.groupingBy(p -> p.getSn() + "-" + p.getPartNo())); for (Map.Entry> stringListEntry : partMap.entrySet()) { List value = stringListEntry.getValue(); - MesPartInspection next = value.stream().sorted(Comparator.comparing(MesPartInspection::getCreateDatetime)).iterator().next(); - DdlPackBean packBeanNew = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(next.getPartNo(), "partNo", packBeanNew); - DdlPreparedPack.getStringEqualPack(next.getSn(), "sn", packBeanNew); - DdlPreparedPack.getNumEqualPack(1, "qmsSync", packBeanNew); - boolean flg = partInspectionRepository.isExitByHql(packBeanNew); - if (!flg) { - partInspectionList.add(next); - } + MesPartInspection next = value.stream().sorted(Comparator.comparing(MesPartInspection::getCreateDatetime).reversed()).iterator().next(); + + partInspectionList.add(next); } qmsSuspiciousService.doQmsSuspiciousByPartInspection(partInspectionList, organizeCode); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupWindowTimeService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupWindowTimeService.java index 2537636..0ed3b23 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupWindowTimeService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartProdGroupWindowTimeService.java @@ -1,5 +1,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroupWindowTime; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -8,4 +10,9 @@ import org.springframework.stereotype.Service; @Slf4j public class MesPartProdGroupWindowTimeService extends BaseMesService { + @Override + protected void setPackQueryBean(MesPartProdGroupWindowTime bean, DdlPackBean packBean) { + DdlPreparedPack.getStringEqualPack(bean.getPartProdGroupCode(), "partProdGroupCode", packBean); + DdlPreparedPack.getStringEqualPack(bean.getPartProdGroupName(), "partProdGroupName", packBean); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsSuspiciousService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsSuspiciousService.java index 8578eee..e7b9fb5 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsSuspiciousService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsSuspiciousService.java @@ -10,10 +10,12 @@ import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspectionDetail; import cn.estsh.i3plus.pojo.mes.bean.rework.MesReworkTask; import cn.estsh.i3plus.pojo.mes.repository.MesPartInspectionDetailRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesPartInspectionRepository; import cn.estsh.i3plus.pojo.mes.repository.MesReworkTaskRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -40,6 +42,9 @@ public class MesQmsSuspiciousService extends BaseMesService im @Autowired private MesReworkTaskRepository mesReworkTaskRepository; + @Autowired + private MesPartInspectionRepository partInspectionRepository; + @Override protected void setPackQueryBean(MesQmsSuspicious bean, DdlPackBean packBean) { DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean); @@ -58,78 +63,103 @@ public class MesQmsSuspiciousService extends BaseMesService im //根据物料对可疑品分组 for (Map.Entry> stringListEntry : workOrderPartMap.entrySet()) { String key = stringListEntry.getKey(); - List mesPartInspections = stringListEntry.getValue(); - MesPartInspection next = mesPartInspections.iterator().next(); + List mesPartInspectionsList = stringListEntry.getValue(); + //修改时间的集合 + List mesPartInspectionsListTime = new ArrayList<>(); + for (MesPartInspection partInspection : mesPartInspectionsList) { + MesPartInspection partInspectionNew = new MesPartInspection(); + BeanUtils.copyProperties(partInspection, partInspectionNew); + //去创建日期换算整点2024-07-25 10:00:00 + DdlPackBean packBeanNew = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partInspection.getPartNo(), "partNo", packBeanNew); + DdlPreparedPack.getStringEqualPack(partInspection.getSn(), "sn", packBeanNew); + packBeanNew.setOrderByStr(" order by createDatetime "); + MesPartInspection partInspectionDao = partInspectionRepository.getByProperty(packBeanNew); + String qmsTime = partInspection.getCreateDatetime().substring(0, 13) + ":00:00"; + if (!StringUtil.isEmpty(partInspectionDao)) { + qmsTime = partInspectionDao.getCreateDatetime().substring(0, 13) + ":00:00"; + } + partInspectionNew.setInspectionDate(qmsTime); + mesPartInspectionsListTime.add(partInspectionNew); + } + //根据时间分组发送 + Map> mesPartInspectionsMap = mesPartInspectionsListTime.stream().collect(Collectors.groupingBy(MesPartInspection::getInspectionDate)); + for (Map.Entry> partInspection : mesPartInspectionsMap.entrySet()) { + List mesPartInspections = partInspection.getValue(); + MesPartInspection next = mesPartInspections.iterator().next(); - //新增一条数据到报废表中 - MesQmsSuspicious mesQmsSuspicious = new MesQmsSuspicious(); - mesQmsSuspicious.setOrganizeCode(organizeCode); - mesQmsSuspicious.setInspectionDate(next.getInspectionDate()); - //检验数量是全部数量汇总 - double sumQty = mesPartInspections.stream().mapToDouble(MesPartInspection::getQty).sum(); - mesQmsSuspicious.setInspectionQty((int) sumQty); - //一次合格数 nc_status=10 inspection_status=10 - double qualifiedQty = mesPartInspections.stream().filter(m -> m.getNcStatus() == 10 && m.getInspectionStatus() == 10).mapToDouble(MesPartInspection::getQty).sum(); - mesQmsSuspicious.setQualifiedQty((int) qualifiedQty); - //不合格数 nc_status=10 inspection_status=20 - double unqualifiedQty = mesPartInspections.stream().filter(m -> m.getNcStatus() == 10 && m.getInspectionStatus() == 20).mapToDouble(MesPartInspection::getQty).sum(); - mesQmsSuspicious.setUnqualifiedQty((int) unqualifiedQty); - //误判数量 nc_status=30 inspection_status=20 - double misjudgmentQty = mesPartInspections.stream().filter(m -> m.getNcStatus() == 30).mapToDouble(MesPartInspection::getQty).sum(); - mesQmsSuspicious.setMisjudgmentQty((int) misjudgmentQty); - //一次报废数 nc_status=40 inspection_status=20 - double scrappedQty = mesPartInspections.stream().filter(m -> m.getNcStatus() == 40 && m.getInspectionStatus() == 20).mapToDouble(MesPartInspection::getQty).sum(); - mesQmsSuspicious.setScrappedQty((int) scrappedQty); + //新增一条数据到报废表中 + MesQmsSuspicious mesQmsSuspicious = new MesQmsSuspicious(); + mesQmsSuspicious.setOrganizeCode(organizeCode); + mesQmsSuspicious.setInspectionDate(next.getInspectionDate()); - //返工合格数 nc_status=50 返工单 status=20 - Integer reworkQualified = 0; - //返工pending(创建返工单,未处理) - Integer reworkPending = 0; - //返工数 - Integer reworkQty = 0; - List mesPartInspectionDetails = new ArrayList<>(); - for (MesPartInspection mesPartInspection : mesPartInspections) { - if(!StringUtil.isEmpty(idDetailListMap.get(mesPartInspection.getId()))){ - mesPartInspectionDetails.addAll(idDetailListMap.get(mesPartInspection.getId())); - } - //计算返工数量 - if (mesPartInspection.getNcStatus() == MesExtEnumUtil.PART_INSPECTION_NC_STATUS.REWORK.getValue()) { - MesReworkTask reworkTask = mesReworkTaskRepository.getById(mesPartInspection.getReworkTaskId()); - if (!StringUtil.isEmpty(reworkTask)) { - //返工是否完成 - if (reworkTask.getStatus() == MesExtEnumUtil.REWORK_TASK_STATUS.FINISH.getValue()) { - reworkQualified += mesPartInspection.getQty(); + //检验数量是全部数量汇总 + double sumQty = mesPartInspections.stream().mapToDouble(MesPartInspection::getQty).sum(); + mesQmsSuspicious.setInspectionQty((int) sumQty); + //一次合格数 nc_status=10 inspection_status=10 + double qualifiedQty = mesPartInspections.stream().filter(m -> m.getNcStatus() == 10 && m.getInspectionStatus() == 10).mapToDouble(MesPartInspection::getQty).sum(); + mesQmsSuspicious.setQualifiedQty((int) qualifiedQty); + //不合格数 nc_status=10 inspection_status=20 + double unqualifiedQty = mesPartInspections.stream().filter(m -> m.getNcStatus() == 10 && m.getInspectionStatus() == 20).mapToDouble(MesPartInspection::getQty).sum(); + mesQmsSuspicious.setUnqualifiedQty((int) unqualifiedQty); + //误判数量 nc_status=30 inspection_status=20 + double misjudgmentQty = mesPartInspections.stream().filter(m -> m.getNcStatus() == 30).mapToDouble(MesPartInspection::getQty).sum(); + mesQmsSuspicious.setMisjudgmentQty((int) misjudgmentQty); + //一次报废数 nc_status=40 inspection_status=20 + double scrappedQty = mesPartInspections.stream().filter(m -> m.getNcStatus() == 40 && m.getInspectionStatus() == 20).mapToDouble(MesPartInspection::getQty).sum(); + mesQmsSuspicious.setScrappedQty((int) scrappedQty); + + //返工合格数 nc_status=50 返工单 status=20 + Integer reworkQualified = 0; + //返工pending(创建返工单,未处理) + Integer reworkPending = 0; + //返工数 + Integer reworkQty = 0; + List mesPartInspectionDetails = new ArrayList<>(); + for (MesPartInspection mesPartInspection : mesPartInspections) { + if (!StringUtil.isEmpty(idDetailListMap.get(mesPartInspection.getId()))) { + mesPartInspectionDetails.addAll(idDetailListMap.get(mesPartInspection.getId())); + } + //计算返工数量 + if (mesPartInspection.getNcStatus() == MesExtEnumUtil.PART_INSPECTION_NC_STATUS.REWORK.getValue()) { + MesReworkTask reworkTask = mesReworkTaskRepository.getById(mesPartInspection.getReworkTaskId()); + if (!StringUtil.isEmpty(reworkTask)) { + //返工是否完成 + if (reworkTask.getStatus() == MesExtEnumUtil.REWORK_TASK_STATUS.FINISH.getValue()) { + reworkQualified += mesPartInspection.getQty(); + } else { + reworkPending += mesPartInspection.getQty(); + } } else { reworkPending += mesPartInspection.getQty(); } - } else { - reworkPending += mesPartInspection.getQty(); + reworkQty += mesPartInspection.getQty(); } - reworkQty+= mesPartInspection.getQty(); } + mesQmsSuspicious.setReworkQty(reworkQty); + mesQmsSuspicious.setReworkQualified(reworkQualified); + mesQmsSuspicious.setReworkPending(reworkPending); + mesQmsSuspicious.setNcPending(0); + mesQmsSuspicious.setReworkScrapped(0); + mesQmsSuspicious.setPartNo(key); + mesQmsSuspicious.setPartName(next.getPartName()); + //缺陷分类,缺陷数量JOSN格式: + //[{"Defect_Name":"缺陷01","Defect_Qty":1},{"Defect_Name":"缺陷02","Defect_Qty":2}] + Map> listDefectMap = mesPartInspectionDetails.stream().collect(Collectors.groupingBy(MesPartInspectionDetail::getDefectTypeName)); + List> defectsList = new ArrayList<>(); + for (Map.Entry> listEntry : listDefectMap.entrySet()) { + Map defectMap = new HashMap<>(); + defectMap.put("Defect_Name", listEntry.getKey()); + defectMap.put("Defect_Qty", listEntry.getValue().size()); + defectsList.add(defectMap); + } + //缺陷分布json + mesQmsSuspicious.setDefects(JSON.toJSONString(defectsList)); + ConvertBean.serviceModelInitialize(mesQmsSuspicious, "MesSuspiciousJob"); + + baseRDao.insert(mesQmsSuspicious); } - mesQmsSuspicious.setReworkQty(reworkQty); - mesQmsSuspicious.setReworkQualified(reworkQualified); - mesQmsSuspicious.setReworkPending(reworkPending); - mesQmsSuspicious.setNcPending(0); - mesQmsSuspicious.setReworkScrapped(0); - mesQmsSuspicious.setPartNo(key); - mesQmsSuspicious.setPartName(next.getPartName()); - //缺陷分类,缺陷数量JOSN格式: - //[{"Defect_Name":"缺陷01","Defect_Qty":1},{"Defect_Name":"缺陷02","Defect_Qty":2}] - Map> listDefectMap = mesPartInspectionDetails.stream().collect(Collectors.groupingBy(MesPartInspectionDetail::getDefectTypeName)); - List> defectsList = new ArrayList<>(); - for (Map.Entry> listEntry : listDefectMap.entrySet()) { - Map defectMap = new HashMap<>(); - defectMap.put("Defect_Name",listEntry.getKey()); - defectMap.put("Defect_Qty",listEntry.getValue().size()); - defectsList.add(defectMap); - } - //缺陷分布json - mesQmsSuspicious.setDefects(JSON.toJSONString(defectsList)); - ConvertBean.serviceModelInitialize(mesQmsSuspicious, "MesSuspiciousJob"); - baseRDao.insert(mesQmsSuspicious); } } }