package com.shlanbao.tzsc.data.runtime.handler; import com.shlanbao.tzsc.base.dao.BaseDaoI; import com.shlanbao.tzsc.base.interceptor.PMSXmlDataInterceptor; import com.shlanbao.tzsc.data.webservice.client.SendMessageClient; import com.shlanbao.tzsc.utils.tools.DateUtil; import com.shlanbao.tzsc.utils.tools.RedisUtil; import org.apache.commons.lang.StringUtils; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * @ClassName WsjInfoToMES * @Description 定时处理喂丝机设备连接关系,当联接关系变化时封装xml发送给MES * @Author bsw * @Date 2020/8/30 23:55 * @Version 1.0 **/ public class WsjInfoToMES { Logger logger = LoggerFactory.getLogger(this.getClass()); // 存放上次变化的数据 private static Map oldMap = null; @Autowired private BaseDaoI baseDao; public void sendInfoToMes() { Map shiftMap = RedisUtil.getMap("shift"); if(shiftMap == null) return ; String shift = (String) shiftMap.get("ID"); if(shift==null) return ; // 获取新的设备关系数据 key例: 1603 Map info = RedisUtil.getMap(shift+"603"); if (info==null) return; // 去除实时变化的更新时间字段 info.remove("DacUpTime"); if (oldMap==null) { oldMap = RedisUtil.getMap("oldMap"); } // 判断数据是否变化 if (!info.equals(oldMap)){ // 存放1#喂丝机对应卷接机组 下同 List fs1 = new ArrayList(); List fs2 = new ArrayList(); List fs3 = new ArrayList(); List fs4 = new ArrayList(); // 存放喂丝机对应储丝柜 List cgl = new ArrayList(); // 循环获取12个卷接机组对应的喂丝机 for (int i = 1; i <=12 ; i++) { String is = i<10?"0"+i:i+""; Object roller = info.get("pipe"+is); if (roller == null || roller.equals("0") || roller.toString().length()<2) continue; // 例: 【12】 1 喂丝机 2 管道号 --第一个字符是1 则连接至1#喂丝机,将当前机组存入1#喂丝机所对应卷接机组的集合 if ( roller.toString().substring(0,1).equals("1")){ fs1.add(is); } else if ( roller.toString().substring(0,1).equals("2")){ fs2.add(is); }else if ( roller.toString().substring(0,1).equals("3")){ fs3.add(is); }else if ( roller.toString().substring(0,1).equals("4")){ fs4.add(is); } } Document document; document= DocumentHelper.createDocument(); Element dataset = document.addElement("dataset"); // 循环封装4台喂丝机对应的卷接机组和储丝柜关系 for (int i = 1; i <= 4 ; i++) { Element data = dataset.addElement("data"); Element name = data.addElement("WsCode"); name.setText("FS"+i); Element equipments = data.addElement("JbCode"); // 1#喂丝机 对应 fs1 集合中的卷接组机 if (i==1){ equipments.setText(StringUtils.join(fs1.toArray(),",")); } else if (i==2){ equipments.setText(StringUtils.join(fs2.toArray(),",")); } else if (i==3){ equipments.setText(StringUtils.join(fs3.toArray(),",")); } else if (i==4){ equipments.setText(StringUtils.join(fs4.toArray(),",")); } Element cg = data.addElement("CsCode"); cgl.clear(); // 每个喂丝机分别可以同时连接两个储丝柜,获取对应的第一个储丝柜; if (info.get("fs" + i + "1") != null && !"0".equals(info.get("fs" + i + "1")) && !"".equals(info.get("fs" + i + "1").toString().trim())) { cgl.add(info.get("fs" + i + "1").toString().substring(2)); } // 获取对应的第二个储丝柜 if (info.get("fs" + i + "2") != null && !"0".equals(info.get("fs" + i + "2")) && !"".equals(info.get("fs" + i + "2").toString().trim())) { cgl.add(info.get("fs" + i + "2").toString().substring(2)); } cg.setText(StringUtils.join(cgl.toArray(),",")); Element ConnTime = data.addElement("ConnTime"); ConnTime.setText(DateUtil.getNowDateTime("yyyy-MM-dd HH:mm:ss")); String insertSql = "INSERT INTO SCH_ROLLER_PIPE (ID, WS, JB, CS, DAT) select SYS_GUID(), '"+name.getText()+"', '"+equipments.getText()+"', '"+cg.getText()+"', sysDate from dual"; baseDao.updateBySql(insertSql,null); } String xml = document.asXML(); // logger.info(xml); SendMessageClient.SendEqpConnToMES(xml); PMSXmlDataInterceptor.getInstance().addLog(true,"发送设备联接关系", 1, xml); oldMap = info; RedisUtil.setMap("oldMap",oldMap); } } }