zhuguifei
2026-03-10 58402bd5e762361363a0f7d7907153c77dbb819f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
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<Object> 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);
       }
 
   }
 
 
}