Commit 1817a5036158970d5d9c38a11c461bbf2e7b02fc

Authored by 王通
1 parent f72cc8a7

1.指令补发时线调页面指令发送状态未持久化问题修复

src/main/java/com/bsth/data/directive/DayOfDirectives.java
1 -package com.bsth.data.directive;  
2 -  
3 -import com.alibaba.fastjson.JSONObject;  
4 -import com.bsth.data.LineConfigData;  
5 -import com.bsth.entity.directive.D60;  
6 -import com.bsth.entity.directive.D64;  
7 -import com.bsth.entity.directive.Directive;  
8 -import com.bsth.entity.directive.DirectiveReponse;  
9 -import com.bsth.entity.realcontrol.ScheduleRealInfo;  
10 -import com.bsth.service.directive.DirectiveService;  
11 -import com.bsth.websocket.handler.SendUtils;  
12 -import org.slf4j.Logger;  
13 -import org.slf4j.LoggerFactory;  
14 -import org.springframework.beans.factory.annotation.Autowired;  
15 -import org.springframework.stereotype.Component;  
16 -  
17 -import java.util.*;  
18 -import java.util.concurrent.ConcurrentHashMap;  
19 -import java.util.concurrent.ConcurrentLinkedQueue;  
20 -import java.util.concurrent.ConcurrentMap;  
21 -  
22 -/**  
23 - *  
24 - * @ClassName: CurrDayDirectives  
25 - * @Description: TODO(当天指令数据)  
26 - * @author PanZhao  
27 - * @date 2016年8月14日 下午5:23:59  
28 - *  
29 - */  
30 -@Component  
31 -public class DayOfDirectives {  
32 -  
33 - // 当日60指令缓存  
34 - private static ConcurrentMap<Integer, D60> d60Map;  
35 -  
36 - // 线路切换指令 64  
37 - public static ConcurrentMap<String, D64> d64Map;  
38 -  
39 - //等待插入的指令  
40 - public static ConcurrentLinkedQueue<Directive> pstDirectives;  
41 - //等待更新的指令  
42 - public static ConcurrentLinkedQueue<D60> pstD60s;  
43 -  
44 - @Autowired  
45 - DirectiveService directiveService;  
46 -  
47 - @Autowired  
48 - SendUtils sendUtils;  
49 -  
50 - @Autowired  
51 - LineConfigData lineConfigData;  
52 -  
53 - static Logger logger = LoggerFactory.getLogger(DayOfDirectives.class);  
54 -  
55 -  
56 - static{  
57 - d60Map = new ConcurrentHashMap<>();  
58 - d64Map = new ConcurrentHashMap<>();  
59 - pstDirectives = new ConcurrentLinkedQueue<>();  
60 - pstD60s = new ConcurrentLinkedQueue<>();  
61 - }  
62 -  
63 - public void put60(D60 d60) {  
64 - d60Map.put(d60.getMsgId(), d60);  
65 - //等待持久化  
66 - pstDirectives.add(d60);  
67 - }  
68 -  
69 - public void put64(D64 d64) {  
70 - d64Map.put(d64.getKey(), d64);  
71 - //等待持久化  
72 - pstDirectives.add(d64);  
73 - }  
74 -  
75 - /**  
76 - *  
77 - * @Title: reply @Description: TODO(指令 46,47 响应) @throws  
78 - */  
79 - public void reply(DirectiveReponse res) {  
80 - Integer msgId = res.getMsgId();  
81 - if (msgId == null) {  
82 - logger.error("reply error , msgId is null.");  
83 - return;  
84 - }  
85 -  
86 - D60 d60 = d60Map.get(msgId);  
87 -  
88 - if (null == d60) {  
89 - logger.error("找不到msgId: " + msgId + " 对应的指令数据");  
90 - return;  
91 - }  
92 -  
93 - switch (res.getStatus()) {  
94 - case 0:  
95 - d60.setReply46((short) -1);// 失败  
96 - break;  
97 - case 1:  
98 - d60.setReply46((short) 0);// 发送成功  
99 - d60.setReply46Time(System.currentTimeMillis());  
100 - break;  
101 - case 2:  
102 - d60.setReply47((short) 0);// 驾驶员阅读  
103 - d60.setReply47Time(System.currentTimeMillis());  
104 - break;  
105 - }  
106 -  
107 - //更新60数据  
108 - pstD60s.add(d60);  
109 -  
110 - ScheduleRealInfo sch = d60.getSch();  
111 - if (null == sch)  
112 - return;  
113 -  
114 - if (d60.isDispatch()) {  
115 - // 更新班次状态  
116 - sch.setDirectiveState(res.getStatus() * 100);  
117 - // 通知页面  
118 - sendUtils.sendDirectiveToPage(sch);  
119 - }  
120 - }  
121 -  
122 - /**  
123 - *  
124 - * @Title: reply64 @Description: TODO(64 协议响应) @throws  
125 - */  
126 - public void reply64(JSONObject json) {  
127 - String key = json.getString("deviceId") + "_" + json.getString("timestamp");  
128 -  
129 - D64 d64 = d64Map.get(key);  
130 -  
131 - if (null == d64)  
132 - logger.warn("64响应 -找不到请求源,json: " + json);  
133 - else {  
134 - JSONObject data = json.getJSONObject("data");  
135 -  
136 - if (null == data)  
137 - logger.warn("64响应 data is null ,json: " + json);  
138 - else {  
139 - logger.info(d64.getDeviceId() + "_" + d64.getData().getLineId() + "响应:" + data.getShort("requestAck"));  
140 - /*d64.setRespAck(data.getShort("requestAck"));  
141 - // 持久化*/  
142 - //64 响应不入库了...  
143 - }  
144 - }  
145 - }  
146 -  
147 - @Autowired  
148 - DirectivesPstThread directivesPstThread;  
149 - public void clearAll(){  
150 - d60Map = new ConcurrentHashMap<>();  
151 - d64Map = new ConcurrentHashMap<>();  
152 - logger.info("清除指令数据 ,,,");  
153 - }  
154 -  
155 - public Collection<D60> all60(){  
156 - return d60Map.values();  
157 - }  
158 -  
159 - public Collection<D64> all64(){  
160 - return d64Map.values();  
161 - }  
162 -  
163 - public D60 get(Integer msgId){  
164 - return d60Map.get(msgId);  
165 - }  
166 -  
167 - public Collection<Directive> all(){  
168 - List<Directive> all = new ArrayList<>();  
169 - all.addAll(d60Map.values());  
170 - all.addAll(d64Map.values());  
171 -  
172 - return all;  
173 - }  
174 -  
175 - public static class DComparator implements Comparator<Directive>{  
176 -  
177 - @Override  
178 - public int compare(Directive d1, Directive d2) {  
179 - return (int) (d2.getTimestamp() - d1.getTimestamp());  
180 - }  
181 - }  
182 - } 1 +package com.bsth.data.directive;
  2 +
  3 +import com.alibaba.fastjson.JSONObject;
  4 +import com.bsth.data.LineConfigData;
  5 +import com.bsth.data.schedule.DayOfSchedule;
  6 +import com.bsth.entity.directive.D60;
  7 +import com.bsth.entity.directive.D64;
  8 +import com.bsth.entity.directive.Directive;
  9 +import com.bsth.entity.directive.DirectiveReponse;
  10 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  11 +import com.bsth.service.directive.DirectiveService;
  12 +import com.bsth.websocket.handler.SendUtils;
  13 +import org.slf4j.Logger;
  14 +import org.slf4j.LoggerFactory;
  15 +import org.springframework.beans.factory.annotation.Autowired;
  16 +import org.springframework.stereotype.Component;
  17 +
  18 +import java.util.*;
  19 +import java.util.concurrent.ConcurrentHashMap;
  20 +import java.util.concurrent.ConcurrentLinkedQueue;
  21 +import java.util.concurrent.ConcurrentMap;
  22 +
  23 +/**
  24 + *
  25 + * @ClassName: CurrDayDirectives
  26 + * @Description: TODO(当天指令数据)
  27 + * @author PanZhao
  28 + * @date 2016年8月14日 下午5:23:59
  29 + *
  30 + */
  31 +@Component
  32 +public class DayOfDirectives {
  33 +
  34 + // 当日60指令缓存
  35 + private static ConcurrentMap<Integer, D60> d60Map;
  36 +
  37 + // 线路切换指令 64
  38 + public static ConcurrentMap<String, D64> d64Map;
  39 +
  40 + //等待插入的指令
  41 + public static ConcurrentLinkedQueue<Directive> pstDirectives;
  42 + //等待更新的指令
  43 + public static ConcurrentLinkedQueue<D60> pstD60s;
  44 +
  45 + @Autowired
  46 + DirectiveService directiveService;
  47 +
  48 + @Autowired
  49 + SendUtils sendUtils;
  50 +
  51 + @Autowired
  52 + LineConfigData lineConfigData;
  53 +
  54 + @Autowired
  55 + private DayOfSchedule dayOfSchedule;
  56 +
  57 + static Logger logger = LoggerFactory.getLogger(DayOfDirectives.class);
  58 +
  59 +
  60 + static{
  61 + d60Map = new ConcurrentHashMap<>();
  62 + d64Map = new ConcurrentHashMap<>();
  63 + pstDirectives = new ConcurrentLinkedQueue<>();
  64 + pstD60s = new ConcurrentLinkedQueue<>();
  65 + }
  66 +
  67 + public void put60(D60 d60) {
  68 + d60Map.put(d60.getMsgId(), d60);
  69 + //等待持久化
  70 + pstDirectives.add(d60);
  71 + }
  72 +
  73 + public void put64(D64 d64) {
  74 + d64Map.put(d64.getKey(), d64);
  75 + //等待持久化
  76 + pstDirectives.add(d64);
  77 + }
  78 +
  79 + /**
  80 + *
  81 + * @Title: reply @Description: TODO(指令 46,47 响应) @throws
  82 + */
  83 + public void reply(DirectiveReponse res) {
  84 + Integer msgId = res.getMsgId();
  85 + if (msgId == null) {
  86 + logger.error("reply error , msgId is null.");
  87 + return;
  88 + }
  89 +
  90 + D60 d60 = d60Map.get(msgId);
  91 +
  92 + if (null == d60) {
  93 + logger.error("找不到msgId: " + msgId + " 对应的指令数据");
  94 + return;
  95 + }
  96 +
  97 + switch (res.getStatus()) {
  98 + case 0:
  99 + d60.setReply46((short) -1);// 失败
  100 + break;
  101 + case 1:
  102 + d60.setReply46((short) 0);// 发送成功
  103 + d60.setReply46Time(System.currentTimeMillis());
  104 + break;
  105 + case 2:
  106 + d60.setReply47((short) 0);// 驾驶员阅读
  107 + d60.setReply47Time(System.currentTimeMillis());
  108 + break;
  109 + }
  110 +
  111 + //更新60数据
  112 + pstD60s.add(d60);
  113 +
  114 + ScheduleRealInfo sch = d60.getSch();
  115 + if (null == sch)
  116 + return;
  117 +
  118 + if (d60.isDispatch()) {
  119 + // 更新班次状态
  120 + sch.setDirectiveState(res.getStatus() * 100);
  121 + dayOfSchedule.save(sch);
  122 + // 通知页面
  123 + sendUtils.sendDirectiveToPage(sch);
  124 + }
  125 + }
  126 +
  127 + /**
  128 + *
  129 + * @Title: reply64 @Description: TODO(64 协议响应) @throws
  130 + */
  131 + public void reply64(JSONObject json) {
  132 + String key = json.getString("deviceId") + "_" + json.getString("timestamp");
  133 +
  134 + D64 d64 = d64Map.get(key);
  135 +
  136 + if (null == d64)
  137 + logger.warn("64响应 -找不到请求源,json: " + json);
  138 + else {
  139 + JSONObject data = json.getJSONObject("data");
  140 +
  141 + if (null == data)
  142 + logger.warn("64响应 data is null ,json: " + json);
  143 + else {
  144 + logger.info(d64.getDeviceId() + "_" + d64.getData().getLineId() + "响应:" + data.getShort("requestAck"));
  145 + /*d64.setRespAck(data.getShort("requestAck"));
  146 + // 持久化*/
  147 + //64 响应不入库了...
  148 + }
  149 + }
  150 + }
  151 +
  152 + @Autowired
  153 + DirectivesPstThread directivesPstThread;
  154 + public void clearAll(){
  155 + d60Map = new ConcurrentHashMap<>();
  156 + d64Map = new ConcurrentHashMap<>();
  157 + logger.info("清除指令数据 ,,,");
  158 + }
  159 +
  160 + public Collection<D60> all60(){
  161 + return d60Map.values();
  162 + }
  163 +
  164 + public Collection<D64> all64(){
  165 + return d64Map.values();
  166 + }
  167 +
  168 + public D60 get(Integer msgId){
  169 + return d60Map.get(msgId);
  170 + }
  171 +
  172 + public Collection<Directive> all(){
  173 + List<Directive> all = new ArrayList<>();
  174 + all.addAll(d60Map.values());
  175 + all.addAll(d64Map.values());
  176 +
  177 + return all;
  178 + }
  179 +
  180 + public static class DComparator implements Comparator<Directive>{
  181 +
  182 + @Override
  183 + public int compare(Directive d1, Directive d2) {
  184 + return (int) (d2.getTimestamp() - d1.getTimestamp());
  185 + }
  186 + }
  187 + }