XMTT 6 gadi atpakaļ
vecāks
revīzija
3ba97bd186

+ 31 - 33
src/main/java/com/ekexiu/project/bridge/servlet/AlarmDataServlet.java

@ -1,30 +1,5 @@
1 1
package com.ekexiu.project.bridge.servlet;
2 2

3
import java.io.ByteArrayOutputStream;
4
import java.io.IOException;
5
import java.io.InputStream;
6
import java.lang.reflect.Type;
7
import java.sql.Connection;
8
import java.sql.SQLException;
9
import java.util.HashMap;
10
import java.util.LinkedList;
11
import java.util.List;
12
import java.util.Map;
13

14
import javax.servlet.ServletException;
15
import javax.servlet.http.HttpServlet;
16
import javax.servlet.http.HttpServletRequest;
17
import javax.servlet.http.HttpServletResponse;
18
import javax.sql.DataSource;
19

20
import org.jfw.apt.util.Base64;
21
import org.jfw.util.ConstData;
22
import org.jfw.util.context.JfwAppContext;
23
import org.jfw.util.io.IoUtil;
24
import org.jfw.util.jdbc.JdbcUtil;
25
import org.jfw.util.json.JsonService;
26
import org.jfw.util.reflect.TypeReference;
27

28 3
import com.ekexiu.project.bridge.alarm.AlarmDao;
29 4
import com.ekexiu.project.bridge.alarm.AlarmDataError;
30 5
import com.ekexiu.project.bridge.alarm.AlarmDataItem;
@ -39,6 +14,29 @@ import com.ekexiu.project.bridge.resource.po.BridgeServer;
39 14
import com.ekexiu.project.bridge.resource.po.CollectDevice;
40 15
import com.ekexiu.project.bridge.system.dao.UserDao;
41 16
import com.ekexiu.project.bridge.system.po.User;
17
import org.jfw.apt.util.Base64;
18
import org.jfw.util.ConstData;
19
import org.jfw.util.context.JfwAppContext;
20
import org.jfw.util.io.IoUtil;
21
import org.jfw.util.jdbc.JdbcUtil;
22
import org.jfw.util.json.JsonService;
23
import org.jfw.util.reflect.TypeReference;
24

25
import javax.servlet.ServletException;
26
import javax.servlet.http.HttpServlet;
27
import javax.servlet.http.HttpServletRequest;
28
import javax.servlet.http.HttpServletResponse;
29
import javax.sql.DataSource;
30
import java.io.ByteArrayOutputStream;
31
import java.io.IOException;
32
import java.io.InputStream;
33
import java.lang.reflect.Type;
34
import java.sql.Connection;
35
import java.sql.SQLException;
36
import java.util.HashMap;
37
import java.util.LinkedList;
38
import java.util.List;
39
import java.util.Map;
42 40

43 41
public class AlarmDataServlet extends HttpServlet {
44 42
	private static final long serialVersionUID = 4989044137656168797L;
@ -218,14 +216,14 @@ public class AlarmDataServlet extends HttpServlet {
218 216
						public void run() {
219 217
							for (Map.Entry<User, String> entry : notices.entrySet()) {
220 218
								User u = entry.getKey();
221
								String to = u.getEmail();
222
								try {
223
									if (to != null && to.length() > 0) {
224
										mailService.sendSimpleMail(to,  u.getName() + "您好:" + entry.getValue(), null, "桥梁临控报警");
225
									}
226
								} catch (Throwable thr) {
227
								}
228
								to = u.getPhone();
219
								//String to = u.getEmail();
220
								//try {
221
								//	if (to != null && to.length() > 0) {
222
								//		mailService.sendSimpleMail(to,  u.getName() + "您好:" + entry.getValue(), null, "桥梁临控报警");
223
								//	}
224
								//} catch (Throwable thr) {
225
								//}
226
								String to = u.getPhone();
229 227
								try {
230 228
									if (to != null && to.length() > 0) {
231 229
										phoneService.sendMessage(to, "【声脉】__USERNAME__您好:" + entry.getValue(), "__USERNAME__", u.getName());

+ 312 - 0
src/main/java/com/ekexiu/project/bridge/servlet/EnvDataServlet.java

@ -0,0 +1,312 @@
1
package com.ekexiu.project.bridge.servlet;
2
3
import org.jfw.util.context.JfwAppContext;
4
import org.jfw.util.jdbc.JdbcUtil;
5
import org.jfw.util.jdbc.PreparedStatementConfig;
6
import org.jfw.util.json.JsonService;
7
8
import static java.lang.Thread.sleep;
9
10
import javax.servlet.ServletConfig;
11
import javax.servlet.ServletException;
12
import javax.servlet.http.HttpServlet;
13
import javax.servlet.http.HttpServletRequest;
14
import javax.servlet.http.HttpServletResponse;
15
import javax.sql.DataSource;
16
import java.io.IOException;
17
import java.io.InputStream;
18
import java.io.PrintWriter;
19
import java.net.ServerSocket;
20
import java.net.Socket;
21
import java.sql.Connection;
22
import java.sql.PreparedStatement;
23
import java.sql.SQLException;
24
import java.util.ArrayList;
25
import java.util.List;
26
import java.util.Map;
27
import java.util.concurrent.CopyOnWriteArrayList;
28
import java.util.concurrent.atomic.AtomicBoolean;
29
30
/**
31
 * Created by TT on 2019/3/6.
32
 */
33
public class EnvDataServlet extends HttpServlet {
34
    private static final long serialVersionUID = 749116393196185727L;
35
    private DataSource dataSource;
36
    private List<EnvThread> envThreadList = new CopyOnWriteArrayList<EnvThread>();
37
    private ListenThread listenThread;
38
39
    private AtomicBoolean running = new AtomicBoolean(false);
40
41
    @Override
42
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
43
        res.setDateHeader("Expires", 0);
44
        res.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
45
        res.addHeader("Cache-Control", "post-check=0, pre-check=0");
46
        res.setHeader("Pragma", "no-cache");
47
        List<Map<String, Object>> result = null;
48
        if (null == req.getCharacterEncoding()) {
49
            req.setCharacterEncoding("UTF-8");
50
            res.setCharacterEncoding("UTF-8");
51
        }
52
        res.setContentType("application/json");
53
        PrintWriter out = res.getWriter();
54
        try {
55
            String param = req.getParameter("bt");
56
            String bt = "00000000000000";
57
            if (null != param && param.length() != 0) {
58
                bt = param;
59
            }
60
            param = req.getParameter("et");
61
            String et = "99999999999999";
62
            if (null != param && param.length() != 0) {
63
                et = param;
64
            }
65
            Connection con = this.dataSource.getConnection();
66
            try {
67
                result = query(con, bt, et);
68
            } finally {
69
                try {
70
                    con.close();
71
                } catch (Throwable _m_1) {
72
                }
73
            }
74
        } catch (Exception e) {
75
            JsonService.write(e, out);
76
            return;
77
        }
78
        out.write("{\"success\":true,\"data\":");
79
        JsonService.toJson(result, out);
80
        out.write("}");
81
    }
82
83
    public List<Map<String, Object>> query(Connection con, final String bt, final String et) throws SQLException {
84
        return JdbcUtil.queryMaps(con, "SELECT e.item_id,COALESCE(d.caption, '没有对应值') as caption,COALESCE(d.unit, '没有对应值') as unit,e.item_value,e.item_time FROM env_data e LEFT JOIN env_id_dict d on e.item_id = d.item_id where e.item_time>= ? and e.item_time<=?", new PreparedStatementConfig() {
85
            @Override
86
            public void config(PreparedStatement preparedStatement) throws SQLException {
87
                preparedStatement.setString(1, bt);
88
                preparedStatement.setString(2, et);
89
            }
90
        });
91
    }
92
93
    @Override
94
    public void init(ServletConfig config) throws ServletException {
95
        dataSource = JfwAppContext.getDataSource();
96
        running.set(true);
97
        try {
98
            ServerSocket serverSocket = new ServerSocket(4000);
99
            listenThread = new ListenThread(serverSocket);
100
            listenThread.start();
101
        } catch (IOException e) {
102
            e.printStackTrace();
103
        }
104
105
106
    }
107
108
    @Override
109
    public void destroy() {
110
        this.running.set(false);
111
        if (listenThread != null) {
112
            listenThread.interrupt();
113
114
            for (; ; ) {
115
                if (this.envThreadList.size() > 0) {
116
                    for (Thread thread : this.envThreadList) {
117
                        thread.interrupt();
118
                    }
119
                    try {
120
                        sleep(500);
121
                    } catch (InterruptedException e) {
122
                        e.printStackTrace();
123
                    }
124
                } else {
125
                    break;
126
                }
127
            }
128
129
        }
130
    }
131
132
    class ListenThread extends Thread {
133
        private ServerSocket serverSocket;
134
135
136
        public ListenThread(ServerSocket serverSocket) {
137
            this.serverSocket = serverSocket;
138
        }
139
140
        @Override
141
        public void run() {
142
            while (running.get()) {
143
                try {
144
                    Socket socket = serverSocket.accept();
145
                    EnvThread envThread = new EnvThread(socket);
146
                    envThreadList.add(envThread);
147
                    envThread.start();
148
                } catch (Exception e) {
149
                }
150
            }
151
        }
152
    }
153
154
    class EnvThread extends Thread {
155
        private Socket socket;
156
        private char timeArray[] = new char[14];
157
158
        public EnvThread(Socket socket) {
159
            this.socket = socket;
160
        }
161
162
        @Override
163
        public void run() {
164
            int idx, len, ret, offset;
165
            while (running.get()) {
166
                try {
167
                    InputStream inputStream = socket.getInputStream();
168
                    byte[] head = new byte[52];
169
                    idx = 0;
170
                    len = 52;
171
                    while (len > 0) {
172
                        ret = inputStream.read(head, idx, len);
173
                        if (ret >= 0) {
174
                            idx += ret;
175
                            len -= ret;
176
                        } else {
177
                            throw new IOException("a");
178
                        }
179
                    }
180
                    len = head[51] & 0xFF;
181
                    len <<= 8;
182
                    len += head[50] & 0xFF;
183
                    len <<= 8;
184
                    len += head[49] & 0xFF;
185
                    len <<= 8;
186
                    len += head[48] & 0xFF;
187
188
189
                    byte[] body = new byte[len];
190
                    idx = 0;
191
                    while (len > 0) {
192
                        ret = inputStream.read(body, idx, len);
193
                        if (ret >= 0) {
194
                            idx += ret;
195
                            len -= ret;
196
                        } else {
197
                            throw new IOException("a");
198
                        }
199
                    }
200
                    len = body.length;
201
                    offset = 0;
202
                    List<EnvData> list = new ArrayList<EnvData>();
203
                    while (len >= offset) {
204
                        int id = body[offset + 3] & 0xFF;
205
                        id <<= 8;
206
                        id += body[offset + 2] & 0xFF;
207
                        id <<= 8;
208
                        id += body[offset + 1] & 0xFF;
209
                        id <<= 8;
210
                        id += body[offset] & 0xFF;
211
212
                        double value = bytes2Double(body, offset + 4);
213
214
                        timeArray[0] = (char) body[offset + 13];
215
                        timeArray[1] = (char) body[offset + 14];
216
                        timeArray[2] = (char) body[offset + 15];
217
                        timeArray[3] = (char) body[offset + 16];
218
                        timeArray[4] = (char) body[offset + 18];
219
                        timeArray[5] = (char) body[offset + 19];
220
                        timeArray[6] = (char) body[offset + 21];
221
                        timeArray[7] = (char) body[offset + 22];
222
                        timeArray[8] = (char) body[offset + 24];
223
                        timeArray[9] = (char) body[offset + 25];
224
                        timeArray[10] = (char) body[offset + 27];
225
                        timeArray[11] = (char) body[offset + 28];
226
                        timeArray[12] = (char) body[offset + 30];
227
                        timeArray[13] = (char) body[offset + 31];
228
                        offset += 32;
229
                        len -= 32;
230
                        EnvData envData = new EnvData();
231
                        envData.setItemId(id);
232
                        envData.setItemValue(value);
233
                        envData.setItemTime(new String(timeArray));
234
                        list.add(envData);
235
                    }
236
237
                    try {
238
                        Connection con = dataSource.getConnection();
239
                        try {
240
                            for (EnvData envData : list) {
241
                                PreparedStatement ps = con.prepareStatement("INSERT INTO ENV_DATA (ITEM_ID,ITEM_VALUE,ITEM_TIME) VALUES (?,?,?)");
242
                                ps.setInt(1, envData.getItemId());
243
                                ps.setDouble(2, envData.getItemValue());
244
                                ps.setString(3, envData.getItemTime());
245
                                ps.executeUpdate();
246
                            }
247
                            con.commit();
248
                        } catch (SQLException e) {
249
                            con.rollback();
250
                        } finally {
251
                            con.close();
252
                        }
253
                    } catch (Throwable thr) {
254
255
                    }
256
257
258
                } catch (Exception e) {
259
                    break;
260
                }
261
            }
262
            try {
263
                socket.close();
264
            } catch (IOException e1) {
265
                e1.printStackTrace();
266
            }
267
            envThreadList.remove(this);
268
        }
269
270
    }
271
272
    public static double bytes2Double(byte[] arr, int index) {
273
        long value = 0;
274
        for (int i = 0; i < 8; i++) {
275
            value |= ((long) (arr[index + i] & 0xff)) << (8 * i);
276
        }
277
        return Double.longBitsToDouble(value);
278
    }
279
280
    public static class EnvData {
281
        private int itemId;
282
        private double itemValue;
283
        private String itemTime;
284
285
        public int getItemId() {
286
            return itemId;
287
        }
288
289
        public void setItemId(int itemId) {
290
            this.itemId = itemId;
291
        }
292
293
        public double getItemValue() {
294
            return itemValue;
295
        }
296
297
        public void setItemValue(double itemValue) {
298
            this.itemValue = itemValue;
299
        }
300
301
        public String getItemTime() {
302
            return itemTime;
303
        }
304
305
        public void setItemTime(String itemTime) {
306
            this.itemTime = itemTime;
307
        }
308
    }
309
310
311
}
312

+ 14 - 1
src/main/resources/database.sql

@ -3729,4 +3729,17 @@ INSERT INTO SYS_DICT (CODE, BCODE,DICT_CODE,CAPTION,FULL_CAPTION,SHORT_CUT,READO
3729 3729

3730 3730
ALTER TABLE public.bridge ALTER COLUMN service_day DROP NOT NULL;
3731 3731

3732
ALTER TABLE public.bridge ALTER COLUMN email DROP NOT NULL;
3732
ALTER TABLE public.bridge ALTER COLUMN email DROP NOT NULL;
3733

3734
CREATE TABLE "public"."env_data" (
3735
        "item_id" int4 NOT NULL,
3736
        "item_value" float8 NOT NULL,
3737
        "item_time" text COLLATE "default" NOT NULL
3738
);
3739

3740
CREATE TABLE "public"."env_id_dict" (
3741
        "item_id" int4 NOT NULL,
3742
        "caption" text COLLATE "default" NOT NULL,
3743
        "unit" text COLLATE "default" NOT NULL,
3744
        CONSTRAINT "env_id_dict_pk" UNIQUE ("item_id")
3745
)

+ 10 - 0
src/main/webapp/WEB-INF/web.xml

@ -39,6 +39,11 @@
39 39
		<servlet-class>com.ekexiu.project.bridge.servlet.AlarmDataServlet</servlet-class>
40 40
		<load-on-startup>4</load-on-startup>
41 41
	</servlet>
42
	<servlet>
43
		<servlet-name>env</servlet-name>
44
		<servlet-class>com.ekexiu.project.bridge.servlet.EnvDataServlet</servlet-class>
45
		<load-on-startup>5</load-on-startup>
46
	</servlet>
42 47
	<servlet-mapping>
43 48
		<servlet-name>ajax</servlet-name>
44 49
		<url-pattern>/ajax/*</url-pattern>
@ -55,4 +60,9 @@
55 60
		<servlet-name>alarm</servlet-name>
56 61
		<url-pattern>/alarmData</url-pattern>
57 62
	</servlet-mapping>
63
	<servlet-mapping>
64
		<servlet-name>env</servlet-name>
65
		<url-pattern>/envData</url-pattern>
66
	</servlet-mapping>
67

58 68
</web-app>