jiapeng 6 years ago
parent
commit
a05ea91d19

+ 17 - 0
src/main/java/com/ekexiu/project/bridge/collect/CollectDao.java

@ -0,0 +1,17 @@
1
package com.ekexiu.project.bridge.collect;
2

3
import java.sql.Connection;
4
import java.sql.SQLException;
5
import java.util.List;
6

7
import org.jfw.apt.orm.annotation.dao.Batch;
8
import org.jfw.apt.orm.annotation.dao.DAO;
9
import org.jfw.apt.orm.annotation.dao.method.operator.Insert;
10

11
@DAO
12
public interface CollectDao {
13

14
	@Insert
15
	@Batch
16
	int[] insert(Connection con,List<WaveDataItem> items)throws SQLException;
17
}

+ 43 - 0
src/main/java/com/ekexiu/project/bridge/collect/CollectService.java

@ -0,0 +1,43 @@
1
package com.ekexiu.project.bridge.collect;
2

3
import java.util.List;
4
import java.util.Map;
5

6
import org.jfw.apt.annotation.Autowrie;
7
import org.jfw.apt.web.annotation.Path;
8
import org.jfw.apt.web.annotation.operate.Get;
9

10
@Path("/collect")
11
public class CollectService {
12

13
	private Map<String, List<WaveDataItem>> waveCache;
14

15
	@Autowrie
16
	private CollectDao collectDao;
17

18
	public CollectDao getCollectDao() {
19
		return collectDao;
20
	}
21

22
	public void setCollectDao(CollectDao collectDao) {
23
		this.collectDao = collectDao;
24
	}
25

26
	public Map<String, List<WaveDataItem>> getWaveCache() {
27
		return waveCache;
28
	}
29

30
	public void setWaveCache(Map<String, List<WaveDataItem>> waveCache) {
31
		this.waveCache = waveCache;
32
	}
33

34
	@Get
35
	@Path("/wave/curr")
36
	public List<WaveDataItem> wave(String seq) {
37
		List<WaveDataItem> ret = null;
38
		synchronized (this.waveCache) {
39
			ret = waveCache.get(seq);
40
		}
41
		return ret;
42
	}
43
}

+ 64 - 0
src/main/java/com/ekexiu/project/bridge/collect/WaveDataItem.java

@ -0,0 +1,64 @@
1
package com.ekexiu.project.bridge.collect;
2

3
public class WaveDataItem {
4
	private String ctime;
5
	private String seq;
6
	private int did;
7
	private int cid;
8
	private int hvalue;
9
	private int lvalue;
10
	private String htime;
11
	private String ltime;
12
	
13
	
14
	
15
	public String getSeq() {
16
		return seq;
17
	}
18
	public void setSeq(String seq) {
19
		this.seq = seq;
20
	}
21
	public String getCtime() {
22
		return ctime;
23
	}
24
	public void setCtime(String ctime) {
25
		this.ctime = ctime;
26
	}
27
	public int getDid() {
28
		return did;
29
	}
30
	public void setDid(int did) {
31
		this.did = did;
32
	}
33
	public int getCid() {
34
		return cid;
35
	}
36
	public void setCid(int cid) {
37
		this.cid = cid;
38
	}
39
	public int getHvalue() {
40
		return hvalue;
41
	}
42
	public void setHvalue(int hvalue) {
43
		this.hvalue = hvalue;
44
	}
45
	public int getLvalue() {
46
		return lvalue;
47
	}
48
	public void setLvalue(int lvalue) {
49
		this.lvalue = lvalue;
50
	}
51
	public String getHtime() {
52
		return htime;
53
	}
54
	public void setHtime(String htime) {
55
		this.htime = htime;
56
	}
57
	public String getLtime() {
58
		return ltime;
59
	}
60
	public void setLtime(String ltime) {
61
		this.ltime = ltime;
62
	}
63
	
64
}

+ 30 - 13
src/main/java/com/ekexiu/project/bridge/servlet/VerifyCodeServlet.java

@ -26,6 +26,7 @@ public class VerifyCodeServlet extends HttpServlet {
26 26
	private static final long serialVersionUID = -384069991394456296L;
27 27

28 28
	private static final String DEFAULT_VERIFY_FLAG = "PIC_COMM";
29
	private static final String QUERY_FLAG ="exists";
29 30
	private static final long DEFAULT_TIMEOUT = 1000 * 60;
30 31
	private static final int DEFAULT_VERIFY_LEN = 4;
31 32
	private static final int DEFAULT_IMG_WIDTH = 100;
@ -109,11 +110,35 @@ public class VerifyCodeServlet extends HttpServlet {
109 110
	}
110 111

111 112
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
112
		response.setHeader("Pragma", "No-cache");
113
		response.setHeader("Cache-Control", "no-cache");
114 113
		response.setDateHeader("Expires", 0);
114
		response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
115
		response.addHeader("Cache-Control", "post-check=0, pre-check=0");
116
		response.setHeader("Pragma", "no-cache");
117
		HttpSession session = request.getSession();
118
		String flag = request.getParameter("flag");
119
		if (flag == null || flag.length() == 0) {
120
			flag = DEFAULT_VERIFY_FLAG;
121
		}
122
		String val = request.getParameter(QUERY_FLAG);
123
		if(val!=null){
124
	        if(null == request.getCharacterEncoding()){
125
	            request.setCharacterEncoding("UTF-8");
126
	            request.setCharacterEncoding("UTF-8");
127
	        }
128
	        response.setContentType("application/json");
129
	        java.io.PrintWriter out = response.getWriter();
130
	        out.write("{\"success\":true,\"data\":");
131
			Long to = (Long)session.getAttribute("TIMEOUT_"+flag);
132
			if( val.equals(session.getAttribute(flag)) &&  (to!=null) && (to.longValue()>System.currentTimeMillis())){
133
			     	  out.write("true}");
134
	        }else{
135
	        	  out.write("false}");
136
	        	  session.removeAttribute("TIMEOUT_"+flag);
137
	        	  session.removeAttribute(flag);
138
	        }
139
	        return;
140
		}
115 141
		response.setContentType("image/jpeg");
116

117 142
		int width = 0, height = 0, len = 0;
118 143
		try {
119 144
			width = Integer.parseInt(request.getParameter("w"));
@ -133,18 +158,11 @@ public class VerifyCodeServlet extends HttpServlet {
133 158
			len = Integer.parseInt(request.getParameter("l"));
134 159
		} catch (Exception e) {
135 160
		}
136
		if (width < 4 || width > 10) {
137
			width = DEFAULT_VERIFY_LEN;
161
		if (len < 4 || len > 10) {
162
			len = DEFAULT_VERIFY_LEN;
138 163
		}
139
		String flag = request.getParameter("flag");
140
		if (flag == null || flag.length() == 0) {
141
			flag = DEFAULT_VERIFY_FLAG;
142
		}
143

144 164
		String vc = generateVerifyCode(len, VERIFY_CODES);
145 165
		outputImage(width, height, response.getOutputStream(), vc);
146

147
		HttpSession session = request.getSession();
148 166
		session.setAttribute(flag, vc);
149 167
		long timeout = 0;
150 168
		try {
@ -156,7 +174,6 @@ public class VerifyCodeServlet extends HttpServlet {
156 174
		}
157 175
		timeout += (5000 + System.currentTimeMillis());
158 176
		session.setAttribute("TIMEOUT_" + flag, timeout);
159

160 177
	}
161 178

162 179
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

+ 267 - 0
src/main/java/com/ekexiu/project/bridge/servlet/WaveDataServlet.java

@ -0,0 +1,267 @@
1
package com.ekexiu.project.bridge.servlet;
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.util.ConstData;
21
import org.jfw.util.DateUtil;
22
import org.jfw.util.context.JfwAppContext;
23
import org.jfw.util.io.IoUtil;
24
import org.jfw.util.json.JsonService;
25
import org.jfw.util.reflect.TypeReference;
26

27
import com.ekexiu.project.bridge.collect.CollectDao;
28
import com.ekexiu.project.bridge.collect.CollectService;
29
import com.ekexiu.project.bridge.collect.WaveDataItem;
30

31
public class WaveDataServlet extends HttpServlet {
32
	private static final long serialVersionUID = 5218822832173871831L;
33

34
	private static final Map<String, List<WaveDataItem>> DATA_CACHE = new HashMap<String, List<WaveDataItem>>();
35

36
	@SuppressWarnings("unused")
37
	private static final LinkedList<List<WaveDataItem>> EMPTY_LIST = new LinkedList<List<WaveDataItem>>();
38

39
	public static Type DATA_TYPE = new TypeReference<Map<String, Object>>() {
40
	}.getType();
41

42
	private DataSource dataSource;
43
	private CollectDao collectDao;
44

45
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
46
		response.sendError(400);
47
	}
48

49
	@SuppressWarnings("unchecked")
50
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
51
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
52
		InputStream in = request.getInputStream();
53
		final List<WaveDataItem> items = new LinkedList<WaveDataItem>();
54
		long currTime = System.currentTimeMillis();
55
		String ctime = DateUtil.formatDateTime(currTime);
56
		// String otime = DateUtil.formatDateTime(currTime -(5* 60*1000));
57
		String serverId = null;
58
		try {
59
			byte[] buf = new byte[8192];
60
			IoUtil.copy(in, baos, buf);
61
			Map<String, Object> map = JsonService.fromJson(new String(baos.toByteArray(), ConstData.UTF8), DATA_TYPE);
62
			Object tmpObj = map.get("node_id");
63
			if (null != tmpObj && (tmpObj instanceof String)) {
64
				serverId = (String) tmpObj;
65
				tmpObj = map.get("data");
66
				if (null != tmpObj && (tmpObj instanceof List)) {
67
					List<Object> ds = (List<Object>) tmpObj;
68
					for (Object wo : ds) {
69
						WaveDataItem item = new WaveDataItem();
70
						item.setCtime(ctime);
71
						item.setSeq(serverId);
72
						if (wo instanceof Map) {
73
							Map<Object, Object> im = (Map<Object, Object>) wo;
74
							tmpObj = im.get("box_id");
75
							if (tmpObj == null || (!(tmpObj instanceof Double))) {
76
								items.clear();
77
								break;
78
							}
79
							item.setDid(((Double) tmpObj).intValue());
80
							tmpObj = im.get("box_id");
81
							if (tmpObj == null || (!(tmpObj instanceof Double))) {
82
								items.clear();
83
								break;
84
							}
85
							item.setCid(((Double) tmpObj).intValue());
86
							tmpObj = im.get("value");
87
							if (null == tmpObj && (!(tmpObj instanceof List))) {
88
								items.clear();
89
								break;
90
							}
91
							List<Object> vs = (List<Object>) tmpObj;
92
							if (vs.size() != 2) {
93
								items.clear();
94
								break;
95
							}
96
							tmpObj = vs.get(0);
97
							if (tmpObj == null || (!(tmpObj instanceof List)) || (2 != ((List<?>) tmpObj).size())) {
98
								items.clear();
99
								break;
100
							}
101
							List<Object> vi = (List<Object>) tmpObj;
102
							tmpObj = vi.get(0);
103
							if (tmpObj == null || (!(tmpObj instanceof String))) {
104
								items.clear();
105
								break;
106
							}
107
							item.setLtime((String) tmpObj);
108
							tmpObj = vi.get(1);
109
							if (tmpObj == null || (!(tmpObj instanceof Double))) {
110
								items.clear();
111
								break;
112
							}
113
							item.setLvalue(((Double) tmpObj).intValue());
114
							tmpObj = vs.get(1);
115
							if (tmpObj == null || (!(tmpObj instanceof List)) || (2 != ((List<?>) tmpObj).size())) {
116
								items.clear();
117
								break;
118
							}
119
							vi = (List<Object>) tmpObj;
120
							tmpObj = vi.get(0);
121
							if (tmpObj == null || (!(tmpObj instanceof String))) {
122
								items.clear();
123
								break;
124
							}
125
							item.setHtime((String) tmpObj);
126
							tmpObj = vi.get(1);
127
							if (tmpObj == null || (!(tmpObj instanceof Double))) {
128
								items.clear();
129
								break;
130
							}
131
							item.setHvalue(((Double) tmpObj).intValue());
132
							items.add(item);
133
						} else {
134
							items.clear();
135
							break;
136
						}
137
					}
138
				}
139
			}
140
		} finally {
141
			in.close();
142
		}
143
		response.setDateHeader("Expires", 0);
144
		response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
145
		response.addHeader("Cache-Control", "post-check=0, pre-check=0");
146
		response.setHeader("Pragma", "no-cache");
147
		if (null == request.getCharacterEncoding()) {
148
			request.setCharacterEncoding("UTF-8");
149
			request.setCharacterEncoding("UTF-8");
150
		}
151
		response.setContentType("application/json");
152
		java.io.PrintWriter out = response.getWriter();
153
		if (items.isEmpty()) {
154
			out.write("{\"status\":0,}");
155
			return;
156
		}
157

158
		List<WaveDataItem> olist = null;
159
		synchronized (DATA_CACHE) {
160
			olist = DATA_CACHE.get(serverId);
161
		}
162
		if (olist == null || olist.get(0).getCtime().compareTo(ctime) < 0) {
163
			synchronized (DATA_CACHE) {
164
				DATA_CACHE.put(serverId, items);
165
			}
166
			JfwAppContext.getScheduledExecutorService().execute(new Runnable() {
167
				@Override
168
				public void run() {
169
					try {
170
						Connection con = dataSource.getConnection();
171
						try {
172
							collectDao.insert(con, items);
173
							con.commit();
174
						} catch (SQLException e) {
175
							con.rollback();
176
						} finally {
177
							con.close();
178
						}
179
					} catch (Throwable thr) {
180
					}
181

182
				}
183
			});
184
		}
185
		out.write("{\"status\":1,}");
186
		return;
187
	}
188

189
	@Override
190
	public void init() throws ServletException {
191
		this.dataSource = JfwAppContext.getDataSource();
192
		if (this.dataSource == null) {
193
			throw new ServletException("not found datasource");
194
		}
195
		this.collectDao = (CollectDao) JfwAppContext.getBeanFactory().getBean("com_ekexiu_project_bridge_collect_CollectDao");
196
		if (this.dataSource == null) {
197
			throw new ServletException("not found collectDao");
198
		}
199
		CollectService s = (CollectService) JfwAppContext.getBeanFactory().getBean("com_ekexiu_project_bridge_collect_CollectService");
200
		if (s == null) {
201
			throw new ServletException("not found CollectService");
202
		}
203
		s.setWaveCache(DATA_CACHE);
204
	}
205

206
	public static void main(String args[]) throws Exception {
207
		Map<Object, Object> map = JsonService.fromJson("{\r\n" + "\"node_id\": \"12345\",\r\n" + "    \"data\": [	\r\n" + "        {		\r\n"
208
				+ "            \"box_id\": 1, \r\n" + "            \"channel_id\": 1, 	\r\n" + "            \"value\": [	\r\n" + "                [\r\n"
209
				+ "                    \"20180101101010.000\",	\r\n" + "                    -12	\r\n" + "                ], \r\n" + "                [\r\n"
210
				+ "                    \"20180101101011.500\", \r\n" + "                    13			\r\n" + "                ]\r\n" + "            ]\r\n"
211
				+ "        }, \r\n" + "        {\r\n" + "            \"box_id\": 2, \r\n" + "            \"channel_id\": 9, \r\n"
212
				+ "            \"value\": [\r\n" + "                [\r\n" + "                    \"20180101101010.100\", \r\n" + "                    -2\r\n"
213
				+ "                ], \r\n" + "                [\r\n" + "                    \"20180101101011.200\", \r\n" + "                    34\r\n"
214
				+ "                ]\r\n" + "            ]\r\n" + "        }\r\n" + "    ]\r\n" + "}", DATA_TYPE);
215

216
		outMap(0, map);
217

218
	}
219

220
	@SuppressWarnings("unchecked")
221
	public static void outList(int left, List<Object> list) {
222
		for (Object obj : list) {
223
			for (int i = 0; i < left; ++i) {
224
				System.out.print(" ");
225
			}
226
			System.out.print(obj.getClass().getName() + "  ");
227
			if (obj instanceof List) {
228
				System.out.println("===>List");
229
				outList(left + 8, (List<Object>) obj);
230
			} else if (obj instanceof Map) {
231
				System.out.println("===>Map");
232
				outMap(left + 8, (Map<Object, Object>) obj);
233
			} else {
234
				System.out.println("===>" + ((obj instanceof Double) ? ((Double) obj).intValue() : obj.toString()));
235
			}
236

237
		}
238

239
	}
240

241
	@SuppressWarnings("unchecked")
242
	public static void outMap(int left, Map<Object, Object> map) {
243
		for (Map.Entry<Object, Object> entry : map.entrySet()) {
244
			for (int i = 0; i < left; ++i) {
245
				System.out.print(" ");
246
			}
247
			Object obj = entry.getKey();
248
			System.out.println("KEY:" + obj.getClass().getName() + "    " + obj.toString());
249
			for (int i = 0; i < left; ++i) {
250
				System.out.print(" ");
251
			}
252
			obj = entry.getValue();
253
			System.out.print("VALUE:");
254
			if (obj instanceof List) {
255
				System.out.println("===>List");
256
				outList(left + 8, (List<Object>) obj);
257
			} else if (obj instanceof Map) {
258
				System.out.println("===>Map");
259
				outMap(left + 8, (Map<Object, Object>) obj);
260
			} else {
261
				System.out.println("===>" + obj.getClass().getName() + "       " + obj.toString());
262
			}
263

264
		}
265
	}
266

267
}