From c7145fa51b148872e6ab87dbf8f4911635fa91f8 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Mon, 21 Oct 2024 18:01:21 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BA=BF=E6=9C=AB=E5=A4=A7=E5=B1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/busi/IMesEarlyWarningService.java | 2 +- .../busi/MesEarlyWarningKanBanController.java | 2 +- .../busi/MesEarlyWarningServiceImpl.java | 82 +++++++++++++++------- 3 files changed, 60 insertions(+), 26 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesEarlyWarningService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesEarlyWarningService.java index 05c27c8..abd53fc 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesEarlyWarningService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesEarlyWarningService.java @@ -45,7 +45,7 @@ public interface IMesEarlyWarningService { * 获取看板数据 * @param id */ - MesKanBanShowModel getData(Long id, String organizeCode) throws ParseException; + MesKanBanShowModel doGetData(Long id, String organizeCode) throws ParseException; /** * 保存截图 diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesEarlyWarningKanBanController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesEarlyWarningKanBanController.java index 37e802c..19bec4d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesEarlyWarningKanBanController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesEarlyWarningKanBanController.java @@ -102,7 +102,7 @@ public class MesEarlyWarningKanBanController { public ResultBean getData(@PathVariable Long id, @PathVariable String organizeCode) { MesKanBanShowModel data = null; try { - data = mesEarlyWarningService.getData(id, organizeCode); + data = mesEarlyWarningService.doGetData(id, organizeCode); } catch (Exception e) { ResultBean.fail(e.getMessage()); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java index 2647711..537b9ae 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java @@ -100,7 +100,7 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { } @Override - public MesKanBanShowModel getData(Long id, String organizeCode) throws ParseException { + public MesKanBanShowModel doGetData(Long id, String organizeCode) throws ParseException { DdlPackBean earlyWarningKanBanPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getNumEqualPack(id, "id", earlyWarningKanBanPackBean); List list = earlyWarningKanBanRao.findByHqlTopWhere(earlyWarningKanBanPackBean, 1); @@ -132,7 +132,6 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { lastWorkOrder = lastOfflineOrder; } //6.查询报警产量 & 获取开班起始时间 - String dStart; Date now = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -205,12 +204,13 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { //工单 productSeq = work_order表中最大的排序信息 【work_order 的id in (装配件清单表中 工位等于@workCellCode 且 status = 1 已经装配) 产线=,order_type = 排序单,sort_flag 不为 x ,E;status not in 入参1,入参2,cust_order_code不为空】 // workOrderAssembly - DdlPackBean assemblyPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",assemblyPackBean); - DdlPreparedPack.getStringEqualPack(workCellCode,"workCellCode",assemblyPackBean); - DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue(),"assemblyStatus",assemblyPackBean); - List mesWorkOrderAssemblyList = workOrderAssemblyRao.findByHqlWhere(assemblyPackBean); - List workOrderNoList = mesWorkOrderAssemblyList.stream().map(MesWorkOrderAssembly::getWorkOrderNo).distinct().collect(Collectors.toList()); +// DdlPackBean assemblyPackBean = DdlPackBean.getDdlPackBean(organizeCode); +// DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",assemblyPackBean); +// DdlPreparedPack.getStringEqualPack(workCellCode,"workCellCode",assemblyPackBean); +// DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue(),"assemblyStatus",assemblyPackBean); +// List mesWorkOrderAssemblyList = workOrderAssemblyRao.findByHqlWhere(assemblyPackBean); +// //todo 有内存溢出风险 调试一下,写hql按照分组查询出workOrderNoList +// List workOrderNoList = mesWorkOrderAssemblyList.stream().map(MesWorkOrderAssembly::getWorkOrderNo).distinct().collect(Collectors.toList()); List orderStatusList = new ArrayList<>(); orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()); orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.DISMANTLE.getValue()); @@ -219,14 +219,15 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { orderFlagList.add(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue()); orderFlagList.add(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.X.getValue()); DdlPackBean queueOrderPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(workOrderNoList,"workOrderNo",queueOrderPackBean); +// DdlPreparedPack.getInPackList(workOrderNoList,"workOrderNo",queueOrderPackBean); DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",queueOrderPackBean); DdlPreparedPack.getStringEqualPack(workCellCode,"workCellCode",queueOrderPackBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.QUEUE_ORDER_STATUS.FINISH.getValue(),"status",queueOrderPackBean); DdlPreparedPack.getNotInPack(orderFlagList,"orderFlag",queueOrderPackBean); DdlPreparedPack.getStringNotBlanklPack("custOrderNo",queueOrderPackBean); DdlPreparedPack.getOrderBy("productSeq",CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), queueOrderPackBean); //先查对列表,找到对应产线工位的工单 - List queueOrderList = queueOrderRao.findByHqlWhere(queueOrderPackBean); + List queueOrderList = queueOrderRao.findByHqlTopWhere(queueOrderPackBean,20); //过滤掉关闭和拆解的工单 List workOrderNoQueueList = queueOrderList.stream().map(MesQueueOrder::getWorkOrderNo).distinct().collect(Collectors.toList()); DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(organizeCode); @@ -264,7 +265,7 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",workOrderPackBean); DdlPreparedPack.getInPackList(orderStatusList,"workOrderStatus",workOrderPackBean); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_TYPE.SORT.getValue(),"workOrderType",workOrderPackBean); - DdlPreparedPack.getStringBiggerPack(realEndTime,"endTime",workOrderPackBean); + DdlPreparedPack.getStringBiggerPack(realEndTime,"offlineTime",workOrderPackBean); DdlPreparedPack.getStringNoEqualPack(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.X.getValue(),"orderFlag",workOrderPackBean); return workOrderRao.findByHqlWhereCount(workOrderPackBean); @@ -273,8 +274,10 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { //报警产量 private List getCLWarning(String date, int qty,String organizeCode) { List orderStatusList = new ArrayList<>(); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.DISMANTLE.getValue()); - orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue()); StringBuilder hql = new StringBuilder(); hql.append(" select carModelCode from MesWorkOrder"); @@ -312,18 +315,23 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { if (infoV107List.isEmpty()){ return mesKanBanShowModel; } + StringBuilder errorMsg = new StringBuilder(); for (int i = 0; i < infoV107List.size()-1; i++) { int preCsnNo = Integer.parseInt(infoV107List.get(i+1).getCsnNo().substring(3,10)); int curCsnNo = Integer.parseInt(infoV107List.get(i).getCsnNo().substring(3,10)); if (curCsnNo != preCsnNo+1){ //需要保留截图 //需要发声音 - mesKanBanShowModel.setVoice("跳号的声音"); //需要发送记录信息 当前csnNo进行了跳号 - mesKanBanShowModel.setErrorMsg(String.format("当前CsnNo:%d进行了跳号",curCsnNo)); - break; + errorMsg.append(String.format("当前CsnNo:%d进行了跳号;\n",curCsnNo)); } } + if (errorMsg.length()>0){ + shortCut = true; + mesKanBanShowModel.setVoice("跳号的声音"); + } + mesKanBanShowModel.setErrorMsg(errorMsg.toString()); + // if (infoDD == null){ // return mesKanBanShowModel; // } @@ -337,22 +345,28 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { // return mesKanBanShowModel; // } //最新v107信息 - String v107Msg = infoDD.getCsnNo() + " @ " + infoDD.getDate() + " " + infoDD.getTime(); + String v107Msg = infoDD.getCsnNo() + "@" + infoDD.getDate() + " " + infoDD.getTime(); mesKanBanShowModel.setV107Msg(v107Msg); //最新客户上线信息 - String infoKHCsnNo = infoKH.getCsnNo() + " @ " + infoKH.getDate() + " " + infoKH.getTime(); + String infoKHCsnNo = infoKH.getCsnNo() + "@" + infoKH.getDate() + " " + infoKH.getTime(); mesKanBanShowModel.setInfoKHCsnNo(infoKHCsnNo); //生产线 - String workOrderCenter = kanBan.getWorkCenterName() +" " + kanBan.getWorkCenterDescription(); + String workOrderCenter = kanBan.getWorkCenterName() +" " + kanBan.getWorkCenterDescription(); mesKanBanShowModel.setWorkOrderCenter(workOrderCenter); //供货缓冲 >= Long supplyRedBuffer = kanBan.getSupplyRedBuffer(); + Long supplyYellowBuffer = kanBan.getSupplyYellowBuffer(); mesKanBanShowModel.setSupplyRedBuffer(supplyRedBuffer); //供货缓冲实际 - Long realSupplyBuffer = Long.parseLong(infoDD.getCsnNo().substring(3,10)) - Long.parseLong(infoKH.getCsnNo().substring(3,10)) - kanBan.getOnlineAdjustNum(); + Long realSupplyBuffer = Long.parseLong(infoDD.getCsnNo().substring(3,10)) - Long.parseLong(infoKH.getCsnNo().substring(3,10)) - kanBan.getOnlineAdjustNum(); mesKanBanShowModel.setRealSupplyBuffer(realSupplyBuffer); - //成品缓冲文字颜色 - //private String realSupplyBufferColor; + if (realSupplyBuffer < supplyRedBuffer){ + mesKanBanShowModel.setRealSupplyBufferColor("RED"); + mesKanBanShowModel.setSupplyRedBuffer(supplyRedBuffer); + }else if (realSupplyBuffer < supplyYellowBuffer){ + mesKanBanShowModel.setRealSupplyBufferColor("YELLOW"); + mesKanBanShowModel.setSupplyRedBuffer(supplyYellowBuffer); + } //线头积单 Long summaryWorkOrderRedCount = kanBan.getSummaryWorkOrderRedCount(); mesKanBanShowModel.setSummaryWorkOrderRedCount(summaryWorkOrderRedCount); @@ -365,6 +379,13 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { summaryRealSupplyRealCount = Long.parseLong(infoDD.getCsnNo().substring(infoDD.getCsnNo().length() - 5))- Long.parseLong(workOrder.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 7)) - kanBan.getOnlineAdjustNum(); } mesKanBanShowModel.setSummaryRealSupplyRealCount(summaryRealSupplyRealCount); + Long summaryWorkOrderYellowCount = kanBan.getSummaryWorkOrderYellowCount(); + if (summaryRealSupplyRealCount > summaryWorkOrderRedCount){ + mesKanBanShowModel.setSummaryWorkOrderColor("RED"); + }else if (summaryRealSupplyRealCount > summaryWorkOrderYellowCount){ + mesKanBanShowModel.setSummaryWorkOrderColor("YELLOW"); + } + //成品缓冲 Long productionRedBuffer =kanBan.getProductionRedBuffer(); mesKanBanShowModel.setProductionRedBuffer(productionRedBuffer); @@ -377,8 +398,12 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { } mesKanBanShowModel.setRealProductionBuffer(realProductionBuffer); - //成品缓冲文字颜色 - //private String realProductionBufferColor; + Long productionYellowBuffer = kanBan.getProductionYellowBuffer(); + if (realProductionBuffer < productionRedBuffer){ + mesKanBanShowModel.setRealProductionBufferColor("RED"); + }else if (realProductionBuffer < productionYellowBuffer){ + mesKanBanShowModel.setRealProductionBufferColor("YELLOW"); + } //声音信息 //private String voice; //错误信息 @@ -390,14 +415,23 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { if (kanBan.getRecord().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue())){ MesEarlyWarningRecord record = new MesEarlyWarningRecord(); + //供货缓冲实际值 + record.setRealSupplyBuffer(realSupplyBuffer); + //实际积累 + record.setSummaryRealSupplyRealCount(summaryRealSupplyRealCount); + //成品缓冲 + record.setRealProductionBuffer(realProductionBuffer); + // 告警数量 + record.setWorkOrderCount((long)workCount); record.setWorkCenterCode(workOrderCenter); record.setGaNo(infoDD.getCsnNo()); record.setLastGaNo(infoKH.getCsnNo()); + record.setRemark(kanBan.getId().toString()); ConvertBean.saveOrUpdate(record,"kanban"); earlyWarningRecordRao.insert(record); mesKanBanShowModel.setRecordId(record.getId()); } - + mesKanBanShowModel.setTotalCount((long)workCount); return mesKanBanShowModel; } }