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 new file mode 100644 index 0000000..05c27c8 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesEarlyWarningService.java @@ -0,0 +1,55 @@ +package cn.estsh.i3plus.ext.mes.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 { + + /** + * 查询出需要轮询组的id 和 轮询的时间(切换组时查询一下) + * 如果idList 数量为1,时间则是定时刷新时间 + * + * 添加新的组时需要查询一下 + */ + List getEarlyWarningList(String organizeCode); + + /** + * 保存配置 + * @param model + */ + void saveEarlyWarning(MesEarlyWarningKanBanModel model); + + /** + * 更新配置 + * @param earlyWarning + */ + void updateEarlyWarning(MesEarlyWarningKanBan earlyWarning); + + /** + * 软删配置 + */ + void deleteEarlyWarning(Long id, String organizeCode,String userName); + + /** + * 获取看板数据 + * @param id + */ + MesEarlyWarningKanBan getKanbanData(Long id,String organizeCode); + + /** + * 获取看板数据 + * @param id + */ + MesKanBanShowModel getData(Long id, String organizeCode) throws ParseException; + + /** + * 保存截图 + * @param model + */ + void savePicture(KanBanPictureModel model); +} 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 new file mode 100644 index 0000000..37e802c --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesEarlyWarningKanBanController.java @@ -0,0 +1,121 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.busi; + +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi.MesEarlyWarningServiceImpl; +import cn.estsh.i3plus.ext.mes.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.*; + +import java.text.ParseException; +import java.util.List; + +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/earlyWarningKanBan") +public class MesEarlyWarningKanBanController { + + @Autowired + private MesEarlyWarningServiceImpl mesEarlyWarningService; + + /** + * 获取所有的线末大屏配置 + * + * @param organizeCode + * @return + */ + @GetMapping(path = "/list/{organizeCode}") + public ResultBean getEarlyWarningList(@PathVariable String organizeCode) { + List list; + try { + list = mesEarlyWarningService.getEarlyWarningList(organizeCode); + } catch (Exception e) { + return ResultBean.fail(e.getMessage()); + } + return ResultBean.success("查询成功").setResultList(list); + } + + /** + * 保存配置 + * + * @param model + * @return + */ + @PostMapping(path = "/save") + public ResultBean saveEarlyWarningList(@RequestBody MesEarlyWarningKanBanModel model) { + try { + mesEarlyWarningService.saveEarlyWarning(model); + } catch (Exception e) { + return ResultBean.fail(e.getMessage()); + } + return ResultBean.success("查询成功"); + } + + /** + * 更新配置 + * + * @param earlyWarning + */ + @PostMapping(path = "/update") + public ResultBean updateEarlyWarning(@RequestBody MesEarlyWarningKanBan earlyWarning) { + try { + mesEarlyWarningService.updateEarlyWarning(earlyWarning); + } catch (Exception e) { + return ResultBean.fail(e.getMessage()); + } + return ResultBean.success("更新成功"); + } + + /** + * 软删配置 + */ + @GetMapping(path = "/delete/{id}/{organizeCode}/{userName}") + public ResultBean deleteEarlyWarning(@PathVariable Long id, @PathVariable String organizeCode, @PathVariable String userName) { + try { + mesEarlyWarningService.deleteEarlyWarning(id, organizeCode, userName); + } catch (Exception e) { + return ResultBean.fail(e.getMessage()); + } + return ResultBean.success("删除成功"); + } + + + /** + * 获取看板配置 + */ + @GetMapping(path = "/get/{id}/{organizeCode}") + public ResultBean getKanbanData(@PathVariable Long id, @PathVariable String organizeCode) { + MesEarlyWarningKanBan kanbanData = null; + try { + kanbanData = mesEarlyWarningService.getKanbanData(id, organizeCode); + } catch (Exception e) { + return ResultBean.fail(e.getMessage()); + } + + return ResultBean.success("查询成功").setResultObject(kanbanData); + } + + + @GetMapping(path = "/getData/{id}/{organizeCode}") + public ResultBean getData(@PathVariable Long id, @PathVariable String organizeCode) { + MesKanBanShowModel data = null; + try { + data = mesEarlyWarningService.getData(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("保存成功"); + } +} \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java index efa4d40..82830d5 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesPackageRoundnessService.java @@ -531,6 +531,7 @@ public class MesPackageRoundnessService implements IRoundnessStrategy { mesQueueOrder.setCustOrderNo(mesWorkOrder.getCustOrderNo()); mesQueueOrder.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); mesQueueOrder.setAreaCode(mesWorkOrder.getAreaCode()); + mesQueueOrder.setOrderFlag(mesWorkOrder.getOrderFlag()); ConvertBean.saveOrUpdate(mesQueueOrder, "MES-JOB"); queueOrderRao.insert(mesQueueOrder); } 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 new file mode 100644 index 0000000..2647711 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesEarlyWarningServiceImpl.java @@ -0,0 +1,403 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi; + + +import cn.estsh.i3plus.ext.mes.api.busi.IMesEarlyWarningService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; +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.*; +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.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 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.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +@Slf4j +@Service +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; + + @Override + public List getEarlyWarningList(String organizeCode) { + + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + return earlyWarningKanBanRao.findByHqlWhere(ddlPackBean); + } + + @Override + public void saveEarlyWarning(MesEarlyWarningKanBanModel model) { + MesEarlyWarningKanBan kanBan = new MesEarlyWarningKanBan(); + try { + BeanUtils.copyProperties(kanBan,model); + } catch (IllegalAccessException | InvocationTargetException e) { + log.error(e.getMessage()); + MesException.throwMesBusiException("类型转换出错!"+e.getMessage()); + } + ConvertBean.saveOrUpdate(kanBan,model.getCreateUser()); + earlyWarningKanBanRao.insert(kanBan); + + } + + @Override + public void updateEarlyWarning(MesEarlyWarningKanBan earlyWarning) { + ConvertBean.saveOrUpdate(earlyWarning,earlyWarning.getCreateUser()); + earlyWarningKanBanRao.insert(earlyWarning); + + } + + @Override + public void deleteEarlyWarning(Long id, String organizeCode,String userName) { + earlyWarningKanBanRao.deleteWeaklyByProperties(new String[]{"id","organizeCode"},new Object[]{id,organizeCode},userName); + } + + @Override + public MesEarlyWarningKanBan getKanbanData(Long id,String organizeCode) { + List list = earlyWarningKanBanRao.findByProperty(new String[]{"id", "organizeCode"}, new Object[]{id, organizeCode}); + if (!list.isEmpty()){ + return list.get(0); + } + return new MesEarlyWarningKanBan(); + } + + @Override + public MesKanBanShowModel getData(Long id, String organizeCode) throws ParseException { + DdlPackBean earlyWarningKanBanPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(id, "id", earlyWarningKanBanPackBean); + List list = earlyWarningKanBanRao.findByHqlTopWhere(earlyWarningKanBanPackBean, 1); + 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信息 + 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.get(0); + if (lastOne==null){ + return new MesKanBanShowModel(); + } + //4.获取最新工位单号 获取工单的产线和工位的最新的工单 + MesWorkOrder lastWorkOrder = getLastWorkOrder(workCenterCode, workCellCode, organizeCode); + //5.获取最新下线工单 + MesWorkOrder lastOfflineOrder = getLastOfflineOrder(workCenterCode, organizeCode); + if (lastWorkOrder == null){ + //todo 暂时 + 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"); + String date = sdf.format(now); + String tempStartDatetime = date + " " + kanBan.getShiftStartTime() + ":00"; + Date shiftStartTime = sdf1.parse(tempStartDatetime); + //如果小于当前时间,显示前一天的统计 + Calendar calendar = Calendar.getInstance(); + if (shiftStartTime.before(now)) { + 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); + + //8.查询报警产量 + Calendar calendar1 = Calendar.getInstance(); + calendar1.setTime(now); + + int productCount = kanBan.getProductCount(); + int productDay = kanBan.getProductDay(); + calendar1.add(Calendar.DATE,-productDay); + List vehicleNoList = getCLWarning(sdf1.format(calendar1.getTime()), productCount,organizeCode); + //9.汇总数据 + return doGetSGMData(kanBan, gmGepicsList, lastCimGmGepics, lastOne, lastWorkOrder, lastOfflineOrder, workCounts, vehicleNoList); + } + + @Override + public void savePicture(KanBanPictureModel model) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(model.getId(),"id", ddlPackBean); + earlyWarningRecordRao.updateByProperties(new String[]{"picture"},new Object[]{model.getPicture()},ddlPackBean); + } + + /** + * 获取最新20条数据 + * @param type 固定 1 + * @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); + 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.getNotInPack(orderFlagList,"orderFlag",queueOrderPackBean); + DdlPreparedPack.getStringNotBlanklPack("custOrderNo",queueOrderPackBean); + DdlPreparedPack.getOrderBy("productSeq",CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), queueOrderPackBean); + //先查对列表,找到对应产线工位的工单 + List queueOrderList = queueOrderRao.findByHqlWhere(queueOrderPackBean); + //过滤掉关闭和拆解的工单 + List workOrderNoQueueList = queueOrderList.stream().map(MesQueueOrder::getWorkOrderNo).distinct().collect(Collectors.toList()); + DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(workOrderNoQueueList,"workOrderNo",orderPackBean); + DdlPreparedPack.getInPackList(orderStatusList,"workOrderStatus",orderPackBean); + DdlPreparedPack.getOrderBy("productSeq",CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), orderPackBean); + List workOrderList = workOrderRao.findByHqlTopWhere(orderPackBean, 1); + return !workOrderList.isEmpty() ? workOrderList.get(0) : null; + } + + private MesWorkOrder getLastOfflineOrder(String workCenterCode,String organizeCode){ + + 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); + List mesWorkOrders = workOrderRao.findByHqlTopWhere(workOrderPackBean, 1); + return mesWorkOrders.get(0); + } + + 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,"endTime",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.DISMANTLE.getValue()); + orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.SHIPPING.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) { + MesKanBanShowModel mesKanBanShowModel = new MesKanBanShowModel(); + //是否截图 + boolean shortCut = false; + if (infoV107List.isEmpty()){ + return mesKanBanShowModel; + } + 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; + } + } +// if (infoDD == null){ +// return mesKanBanShowModel; +// } +// if (infoKH == null){ +// return mesKanBanShowModel; +// } +// if (workOrder == null){ +// return mesKanBanShowModel; +// } +// if (workOrderLast == null){ +// return mesKanBanShowModel; +// } + //最新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(); + mesKanBanShowModel.setSupplyRedBuffer(supplyRedBuffer); + //供货缓冲实际 + Long realSupplyBuffer = Long.parseLong(infoDD.getCsnNo().substring(3,10)) - Long.parseLong(infoKH.getCsnNo().substring(3,10)) - kanBan.getOnlineAdjustNum(); + mesKanBanShowModel.setRealSupplyBuffer(realSupplyBuffer); + //成品缓冲文字颜色 + //private String realSupplyBufferColor; + //线头积单 + 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(workOrderLast.getCustOrderNo().length() - 7)) - kanBan.getOnlineAdjustNum(); + }else { + 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 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(); + + } + mesKanBanShowModel.setRealProductionBuffer(realProductionBuffer); + //成品缓冲文字颜色 + //private String realProductionBufferColor; + //声音信息 + //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.setWorkCenterCode(workOrderCenter); + record.setGaNo(infoDD.getCsnNo()); + record.setLastGaNo(infoKH.getCsnNo()); + ConvertBean.saveOrUpdate(record,"kanban"); + earlyWarningRecordRao.insert(record); + mesKanBanShowModel.setRecordId(record.getId()); + } + + return mesKanBanShowModel; + } +}