From eee50bfcdf364c0b7a2976576fb2a4e7fdff7924 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Thu, 9 Jan 2025 09:38:44 +0800 Subject: [PATCH 1/2] =?UTF-8?q?44791=20=E8=BF=81=E7=A7=BB=E7=BA=BF?= =?UTF-8?q?=E6=9C=AB=E5=A4=A7=E5=B1=8F=E7=9C=8B=E6=9D=BF=E5=88=B0=20pcn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/api/busi/IMesEarlyWarningService.java | 10 +- .../busi/MesEarlyWarningKanBanController.java | 22 +- .../busi/MesEarlyWarningServiceImpl.java | 430 ++++++++++++++++++++- 3 files changed, 443 insertions(+), 19 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEarlyWarningService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEarlyWarningService.java index 58ff47e..98baf07 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEarlyWarningService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEarlyWarningService.java @@ -1,8 +1,11 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; import cn.estsh.i3plus.pojo.mes.bean.MesEarlyWarningKanBan; +import cn.estsh.i3plus.pojo.mes.model.KanBanPictureModel; import cn.estsh.i3plus.pojo.mes.model.MesEarlyWarningKanBanModel; +import cn.estsh.i3plus.pojo.mes.model.MesKanBanShowModel; +import java.text.ParseException; import java.util.List; public interface IMesEarlyWarningService { @@ -42,7 +45,12 @@ public interface IMesEarlyWarningService { * 获取看板数据 * @param id */ - void getData(Long id,String organizeCode); + MesKanBanShowModel doGetData(Long id, String organizeCode) throws ParseException; + /** + * 保存截图 + * @param model + */ + void savePicture(KanBanPictureModel model); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesEarlyWarningKanBanController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesEarlyWarningKanBanController.java index 31214b0..994c2b3 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesEarlyWarningKanBanController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesEarlyWarningKanBanController.java @@ -3,7 +3,9 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.MesEarlyWarningServiceImpl; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.pojo.mes.bean.MesEarlyWarningKanBan; +import cn.estsh.i3plus.pojo.mes.model.KanBanPictureModel; import cn.estsh.i3plus.pojo.mes.model.MesEarlyWarningKanBanModel; +import cn.estsh.i3plus.pojo.mes.model.MesKanBanShowModel; import cn.estsh.impp.framework.boot.util.ResultBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -91,8 +93,24 @@ public class MesEarlyWarningKanBanController { @GetMapping(path = "/getData/{id}/{organizeCode}") - public ResultBean getData(@PathVariable Long id,@PathVariable String organizeCode){ - return null; + public ResultBean getData(@PathVariable Long id, @PathVariable String organizeCode) { + MesKanBanShowModel data = null; + try { + data = mesEarlyWarningService.doGetData(id, organizeCode); + } catch (Exception e) { + ResultBean.fail(e.getMessage()); + } + return ResultBean.success("查询成功").setResultObject(data); + } + + @PostMapping(path = "/save/picture") + public ResultBean savePicture(@RequestBody KanBanPictureModel kanBanPicture){ + try { + mesEarlyWarningService.savePicture(kanBanPicture); + } catch (Exception e) { + throw new RuntimeException(e); + } + return ResultBean.success("保存成功"); } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java index d9d94e7..0da7ecf 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java @@ -4,17 +4,36 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEarlyWarningService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.platform.common.convert.ConvertBean; 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.MesEarlyWarningKanBan; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.bean.edi.wh.order.MesCimGmGepics; +import cn.estsh.i3plus.pojo.mes.model.KanBanPictureModel; import cn.estsh.i3plus.pojo.mes.model.MesEarlyWarningKanBanModel; -import cn.estsh.i3plus.pojo.mes.repository.MesEarlyWarningKanBanRepository; +import cn.estsh.i3plus.pojo.mes.model.MesKanBanShowModel; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.i3plus.pojo.mes.repository.wh.MesCimGmGepicsRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.auth.AuthUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.persistence.EntityManager; +import javax.persistence.Query; import java.lang.reflect.InvocationTargetException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.Duration; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; +import java.util.stream.Collectors; @Slf4j @Service @@ -22,7 +41,27 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { @Autowired private MesEarlyWarningKanBanRepository earlyWarningKanBanRao; - + + @Autowired + private MesCimGmGepicsRepository cimGmGepicsRao; + + @Autowired + private MesWorkOrderAssemblyRepository workOrderAssemblyRao; + + @Autowired + private MesWorkOrderRepository workOrderRao; + + @Autowired + private EntityManager entityManager; + + @Autowired + private MesEarlyWarningRecordRepository earlyWarningRecordRao; + + @Autowired + private MesQueueOrderRepository queueOrderRao; + + @Autowired + private MesEarlyWarningScreenRepository screenRao; @Override public List getEarlyWarningList(String organizeCode) { @@ -66,30 +105,389 @@ public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService { } @Override - public void getData(Long id, String organizeCode) { + public MesKanBanShowModel doGetData(Long id, String organizeCode) throws ParseException { DdlPackBean earlyWarningKanBanPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getNumEqualPack(id,"id",earlyWarningKanBanPackBean); + DdlPreparedPack.getNumEqualPack(id, "id", earlyWarningKanBanPackBean); List list = earlyWarningKanBanRao.findByHqlTopWhere(earlyWarningKanBanPackBean, 1); - if (list.isEmpty()){ - //todo return; + if (list.isEmpty()) { + return new MesKanBanShowModel(); } MesEarlyWarningKanBan kanBan = list.get(0); + String jacInfoPoint = kanBan.getJacInfoPoint(); + int custOnlineInfo = kanBan.getCustOnlineInfo(); + String workCenterCode = kanBan.getWorkCenterCode(); + String workCellCode = kanBan.getWorkCellCode(); //1.获取最近的20条v107信息 - DdlPackBean v107PackBean = DdlPackBean.getDdlPackBean(organizeCode); -// DdlPreparedPack. - //2.获取最新的一条报文信息 + List gmGepicsList = getlastDataList(1, jacInfoPoint, organizeCode, 20); + //2.获取最新的一条报文信息,取gmGepicsList的第一条 + MesCimGmGepics lastCimGmGepics = gmGepicsList.get(0); + //3.获取最新客户上线的报文 + List gmGepicsListOne = getlastDataList(custOnlineInfo, jacInfoPoint, organizeCode, 1); + MesCimGmGepics lastOne = !gmGepicsListOne.isEmpty() ?gmGepicsListOne.get(0) : null; + if (lastOne==null){ + MesKanBanShowModel mesKanBanShowModel = new MesKanBanShowModel(); + mesKanBanShowModel.setWorkOrderCenter(kanBan.getWorkCenterCode()); + return mesKanBanShowModel; + } + //4.获取最新工位单号 获取工单的产线和工位的最新的工单 + MesWorkOrder lastWorkOrder = getLastWorkOrder(workCenterCode, workCellCode, organizeCode); + //5.获取最新下线工单 + MesWorkOrder lastOfflineOrder = getLastOfflineOrder(workCenterCode, organizeCode); + if (lastWorkOrder == null && lastOfflineOrder != null){ + lastWorkOrder = lastOfflineOrder; + } + //6.查询报警产量 & 获取开班起始时间 + Date now = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String date = sdf.format(now); + String tempStartDatetime = date + " " + kanBan.getShiftStartTime() + ":00"; + Date shiftStartTime = sdf1.parse(tempStartDatetime); + //如果小于当前时间,显示前一天的统计 + Calendar calendar = Calendar.getInstance(); + if (now.before(shiftStartTime)) { + calendar.setTime(now); + calendar.add(Calendar.DATE, -1); + } else { + calendar.setTime(shiftStartTime); + } + String realEndTime = sdf1.format(calendar.getTime()); + //7.根据条件获取工单的数量 + Integer workCounts = getWorkCounts(realEndTime, organizeCode, workCenterCode); - //3.获取最新的一条报文信息 + //8.查询报警产量 + Calendar calendar1 = Calendar.getInstance(); + calendar1.setTime(now); - //4.获取最新工位单号 + int productCount = kanBan.getProductCount(); + int productDay = kanBan.getProductDay(); + calendar1.add(Calendar.DATE,-productDay); +// List vehicleNoList = getCLWarning(sdf1.format(calendar1.getTime()), productCount,organizeCode); + List vehicleNoList = new ArrayList<>(); + //9.汇总数据 + return doGetSGMData(kanBan, gmGepicsList, lastCimGmGepics, lastOne, lastWorkOrder, lastOfflineOrder, workCounts, vehicleNoList); + } - //5.获取最新下线工单 + @Override + public void savePicture(KanBanPictureModel model) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), ddlPackBean); + List screenList = screenRao.findByHqlWhere(ddlPackBean); + if (!screenList.isEmpty()) { + //5分钟内只记录一次,防止前端不断刷数据 + MesEarlyWarningScreen mesEarlyWarningScreen = screenList.get(0); + try { + Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(mesEarlyWarningScreen.getCreateDatetime()); + Calendar dateC = Calendar.getInstance(); + dateC.setTime(date); + dateC.add(Calendar.MINUTE,5); + Calendar now = Calendar.getInstance(); + now.setTime(new Date()); + if (dateC.before(now)){ + return; + } + } catch (ParseException e) { + } + + } + MesEarlyWarningScreen mesEarlyWarningScreen = new MesEarlyWarningScreen(); + mesEarlyWarningScreen.setPicture(model.getPicture()); + if (model.getId() != null){ + mesEarlyWarningScreen.setRecordId(model.getId().toString()); + } + mesEarlyWarningScreen.setOrganizeCode(model.getOrganizeCode()); + ConvertBean.saveOrUpdate(mesEarlyWarningScreen, AuthUtil.getSessionUser().getUserName()); + screenRao.insert(mesEarlyWarningScreen); + } - //6.查询报警产量 + /** + * 获取最新20条数据 + * @param type + * @param gaRule 信息点 + * @return + */ + private List getlastDataList(int type, String gaRule,String organizeCode,Integer count){ + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(type,"type",ddlPackBean); + if (!StringUtils.isEmpty(gaRule)){ + DdlPreparedPack.getStringEqualPack(gaRule,"gaRule",ddlPackBean); + } + DdlPreparedPack.getStringEqualPack(organizeCode,"organizeCode",ddlPackBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue(),CommonEnumUtil.ASC_OR_DESC.DESC.getValue()},new String[]{"createDatetime","rowNo"},ddlPackBean); + return cimGmGepicsRao.findByHqlTopWhere(ddlPackBean,count); + } + + /** + * 根据产线工位 查询最新的工单 + * 工单status 不是 40已关闭,90已拆解 状态 + * sort_flag 不是 E X 单 + * @param workCenterCode + * @param workCellCode + * @param organizeCode + * @return + */ + private MesWorkOrder getLastWorkOrder(String workCenterCode,String workCellCode,String organizeCode){ + //工单status 不是 40已关闭,90已拆解 状态 + //工单sort_flag 不是 E X单 + //工单order_type 类型为 排序单类型 + //工单 cust_order_code 不为空 + //工单 的id in装配件清单表中 工位等于@workCellCode 且 status = 1 + //工单 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); +// //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()); + + List orderFlagList = new ArrayList<>(); + 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.getStringEqualPack(workCenterCode,"workCenterCode",queueOrderPackBean); + DdlPreparedPack.getStringEqualPack(workCellCode,"workCellCode",queueOrderPackBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue(),"status",queueOrderPackBean); + DdlPreparedPack.getNotInPack(orderFlagList,"orderFlag",queueOrderPackBean); + DdlPreparedPack.getStringNotBlanklPack("custOrderNo",queueOrderPackBean); + DdlPreparedPack.getOrderBy("productSeq",CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), queueOrderPackBean); + //先查对列表,找到对应产线工位的工单 + List queueOrderList = queueOrderRao.findByHqlTopWhere(queueOrderPackBean,1); + //过滤掉关闭和拆解的工单 + List workOrderList = new ArrayList<>(); + if (!queueOrderList.isEmpty()){ + List orderStatusList1 = new ArrayList<>(); + orderStatusList1.add(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); + orderStatusList1.add(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); + List workOrderNoQueueList = queueOrderList.stream().map(MesQueueOrder::getWorkOrderNo).distinct().collect(Collectors.toList()); + DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(workOrderNoQueueList,"workOrderNo",orderPackBean); + DdlPreparedPack.getInPackList(orderStatusList1,"workOrderStatus",orderPackBean); + DdlPreparedPack.getOrderBy("productSeq",CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), orderPackBean); + workOrderList = workOrderRao.findByHqlTopWhere(orderPackBean, 1); + } + return !workOrderList.isEmpty() ? workOrderList.get(0) : null; + } - //7.获取开班起始时间 + private MesWorkOrder getLastOfflineOrder(String workCenterCode,String organizeCode){ - //8.根据条件获取工单的数量 + List sortFlagList = new ArrayList<>(); + sortFlagList.add(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue()); + sortFlagList.add(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.X.getValue()); + + List orderStatusList = new ArrayList<>(); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue()); + DdlPackBean workOrderPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",workOrderPackBean); + DdlPreparedPack.getInPackList(orderStatusList,"workOrderStatus",workOrderPackBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_TYPE.SORT.getValue(),"workOrderType",workOrderPackBean); + DdlPreparedPack.getNotInPack(sortFlagList,"orderFlag",workOrderPackBean); + DdlPreparedPack.getStringNotBlanklPack("custOrderNo",workOrderPackBean); + DdlPreparedPack.getOrderBy("productSeq",CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), workOrderPackBean); + List mesWorkOrders = workOrderRao.findByHqlTopWhere(workOrderPackBean, 1); + return !mesWorkOrders.isEmpty() ? mesWorkOrders.get(0): null; + } + + private Integer getWorkCounts(String realEndTime,String organizeCode,String workCenterCode){ + DdlPackBean workOrderPackBean = DdlPackBean.getDdlPackBean(organizeCode); + List orderStatusList = new ArrayList<>(); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue()); + DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",workOrderPackBean); + DdlPreparedPack.getInPackList(orderStatusList,"workOrderStatus",workOrderPackBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_TYPE.SORT.getValue(),"workOrderType",workOrderPackBean); + DdlPreparedPack.getStringBiggerPack(realEndTime,"offlineTime",workOrderPackBean); + DdlPreparedPack.getStringNoEqualPack(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.X.getValue(),"orderFlag",workOrderPackBean); + + return workOrderRao.findByHqlWhereCount(workOrderPackBean); + } + + //报警产量 + 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()); + + StringBuilder hql = new StringBuilder(); + hql.append(" select carModelCode from MesWorkOrder"); + hql.append(" where organizeCode = :organizeCode"); + hql.append(" and createDatetime <= :createDatetime"); + hql.append(" and workOrderStatus in (:workOrderStatus)"); + hql.append(" and orderFlag != :sortFlag"); + hql.append(" group by carModelCode "); + hql.append(" having count(carModelCode) <= :qty"); + Query query = entityManager.createQuery(hql.toString()); + query.setParameter("workOrderStatus",orderStatusList); + query.setParameter("organizeCode",organizeCode); + query.setParameter("createDatetime", date); + query.setParameter("qty", (long)qty); + query.setParameter("sortFlag", MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.X.getValue()); + return (List)query.getResultList(); + } + + //汇总数据 + + /** + * + * @param infoV107List 报文信息 + * @param infoDD 最新报文信息 + * @param infoKH 最新客户上线信息 + * @param workOrder 最新工单 + * @param workOrderLast 最新下线工单 + * @param workCount 工单数量 + * @param vehicleNoList 报警 + */ + private MesKanBanShowModel doGetSGMData(MesEarlyWarningKanBan kanBan,List infoV107List,MesCimGmGepics infoDD, MesCimGmGepics infoKH, MesWorkOrder workOrder,MesWorkOrder workOrderLast,int workCount,List vehicleNoList) throws ParseException { + MesKanBanShowModel mesKanBanShowModel = new MesKanBanShowModel(); + //是否截图 + boolean shortCut = false; + 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){ + //需要保留截图 + //需要发声音 + //需要发送记录信息 当前csnNo进行了跳号 + 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; + } + if (infoKH == null){ + return mesKanBanShowModel; + } + if (workOrder == null){ + return mesKanBanShowModel; + } + if (workOrderLast == null){ + return mesKanBanShowModel; + } + //据上次获取v107信息的时间 + String matchTime = infoDD.getCreateDatetime(); + + LocalDateTime now = LocalDateTime.now(); + LocalDateTime match = LocalDateTime.parse(matchTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + long minutes = Duration.between(match,now).toMinutes(); + mesKanBanShowModel.setMinutes(minutes); + + //最新v107信息 + String v107Msg = infoDD.getCsnNo() + "@" + infoDD.getDate() + " " + infoDD.getTime(); + mesKanBanShowModel.setV107Msg(v107Msg); + //最新客户上线信息 + String infoKHCsnNo = infoKH.getCsnNo() + "@" + infoKH.getDate() + " " + infoKH.getTime(); + mesKanBanShowModel.setInfoKHCsnNo(infoKHCsnNo); + //生产线 + 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(); + if (realSupplyBuffer < 0){ + realSupplyBuffer = 0L; + } + mesKanBanShowModel.setRealSupplyBuffer(realSupplyBuffer); + if (realSupplyBuffer < supplyRedBuffer){ + mesKanBanShowModel.setRealSupplyBufferColor("red"); + mesKanBanShowModel.setSupplyRedBuffer(supplyRedBuffer); + }else if (realSupplyBuffer < supplyYellowBuffer){ + mesKanBanShowModel.setRealSupplyBufferColor("orange"); + mesKanBanShowModel.setSupplyRedBuffer(supplyYellowBuffer); + } + + //线头积单 + Long summaryWorkOrderRedCount = kanBan.getSummaryWorkOrderRedCount(); + mesKanBanShowModel.setSummaryWorkOrderRedCount(summaryWorkOrderRedCount); + //线头实际积单 + long summaryRealSupplyRealCount; + String custOrderNo = workOrder.getCustOrderNo(); + if(custOrderNo.length() >= 10){ + summaryRealSupplyRealCount = Long.parseLong(infoDD.getCsnNo().substring(3, 10)) - Long.parseLong(workOrder.getCustOrderNo().substring(workOrder.getCustOrderNo().length() - 7)); + }else { + summaryRealSupplyRealCount = Long.parseLong(infoDD.getCsnNo().substring(infoDD.getCsnNo().length() - 5))- Long.parseLong(workOrder.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 7)); + } + if(summaryRealSupplyRealCount < 0){ + summaryRealSupplyRealCount = 0; + } + mesKanBanShowModel.setSummaryRealSupplyRealCount(summaryRealSupplyRealCount); + Long summaryWorkOrderYellowCount = kanBan.getSummaryWorkOrderYellowCount(); + if (summaryRealSupplyRealCount > summaryWorkOrderYellowCount && summaryRealSupplyRealCount < summaryWorkOrderRedCount){ + mesKanBanShowModel.setSummaryWorkOrderColor("orange"); + }else if (summaryRealSupplyRealCount >= summaryWorkOrderRedCount){ + mesKanBanShowModel.setSummaryWorkOrderColor("red"); + } + //成品缓冲 + Long productionRedBuffer =kanBan.getProductionRedBuffer(); + mesKanBanShowModel.setProductionRedBuffer(productionRedBuffer); + //成品实际缓冲 + Long realProductionBuffer; + if (workOrderLast.getCustOrderNo().length() >= 10){ + realProductionBuffer = Long.parseLong(workOrderLast.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 7)) - Long.parseLong(infoKH.getCsnNo().substring(3, 10)) - kanBan.getOnlineToShippingAdjustNum() ; + }else { + realProductionBuffer = Long.parseLong(workOrderLast.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 5)) - Long.parseLong(infoKH.getCsnNo().substring(infoKH.getCsnNo().length()-5)) - kanBan.getOnlineToShippingAdjustNum() ; + + } + if(realProductionBuffer <0){ + realProductionBuffer = 0L; + } + mesKanBanShowModel.setRealProductionBuffer(realProductionBuffer); + Long productionYellowBuffer = kanBan.getProductionYellowBuffer(); + if (realProductionBuffer < productionRedBuffer){ + mesKanBanShowModel.setRealProductionBufferColor("red"); + }else if (realProductionBuffer < productionYellowBuffer){ + mesKanBanShowModel.setRealProductionBufferColor("orange"); + } + //声音信息 + //private String voice; + //错误信息 + //private String errorMsg; + //截图地址 + String saveUrl = kanBan.getPictureUrl(); + mesKanBanShowModel.setShortCut(shortCut); + mesKanBanShowModel.setSaveUrl(saveUrl); + + 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; } } From 8d8d54eafbbcb7c811cde10381504ebc2214fd37 Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Thu, 9 Jan 2025 17:39:24 +0800 Subject: [PATCH 2/2] =?UTF-8?q?44791=20=E8=BF=81=E7=A7=BB=E7=BA=BF?= =?UTF-8?q?=E6=9C=AB=E5=A4=A7=E5=B1=8F=E7=9C=8B=E6=9D=BF=E5=88=B0=20pcn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/controller/busi/MesEarlyWarningKanBanController.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesEarlyWarningKanBanController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesEarlyWarningKanBanController.java index 994c2b3..ef2923a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesEarlyWarningKanBanController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesEarlyWarningKanBanController.java @@ -83,12 +83,13 @@ public class MesEarlyWarningKanBanController { */ @GetMapping(path = "/get/{id}/{organizeCode}") public ResultBean getKanbanData(@PathVariable Long id,@PathVariable String organizeCode){ + MesEarlyWarningKanBan kanbanData; try { - mesEarlyWarningService.getKanbanData(id,organizeCode); + kanbanData = mesEarlyWarningService.getKanbanData(id, organizeCode); } catch (Exception e) { return ResultBean.fail(e.getMessage()); } - return ResultBean.success("删除成功"); + return ResultBean.success("查询成功").setResultObject(kanbanData); }