Commit f888dc97d860221a1e92f6b978c93ff2d13dba07
Merge branch 'pudong' of 192.168.168.201:panzhaov5/bsth_control into pudong
Showing
24 changed files
with
310 additions
and
109 deletions
src/main/java/com/bsth/controller/realcontrol/AdminUtilsController.java
| ... | ... | @@ -2,9 +2,11 @@ package com.bsth.controller.realcontrol; |
| 2 | 2 | |
| 3 | 3 | import com.bsth.data.directive.DayOfDirectives; |
| 4 | 4 | import com.bsth.data.gpsdata_v2.cache.GeoCacheData; |
| 5 | +import com.bsth.data.gpsdata_v2.handlers.overspeed.OverspeedProcess; | |
| 5 | 6 | import com.bsth.data.gpsdata_v2.thread.GpsDataLoaderThread; |
| 6 | 7 | import com.bsth.data.msg_queue.DirectivePushQueue; |
| 7 | 8 | import com.bsth.data.msg_queue.WebSocketPushQueue; |
| 9 | +import com.bsth.data.pilot80.PilotReport; | |
| 8 | 10 | import com.bsth.data.schedule.DayOfSchedule; |
| 9 | 11 | import com.bsth.entity.realcontrol.ScheduleRealInfo; |
| 10 | 12 | import com.bsth.websocket.handler.SendUtils; |
| ... | ... | @@ -41,29 +43,32 @@ public class AdminUtilsController { |
| 41 | 43 | @Autowired |
| 42 | 44 | SendUtils sendUtils; |
| 43 | 45 | |
| 46 | + @Autowired | |
| 47 | + PilotReport pilotReport; | |
| 48 | + | |
| 44 | 49 | /** |
| 45 | 50 | * 出现重复班次的车辆 |
| 46 | 51 | * @param |
| 47 | 52 | |
| 48 | - @RequestMapping(value = "/schRepeat", method = RequestMethod.POST) | |
| 49 | - public void schRepeat(@RequestParam String nbbm){ | |
| 50 | - logger.info("前端通知,车辆 " + nbbm + "出现重复班次,开始检测..."); | |
| 51 | - List<ScheduleRealInfo> list = dayOfSchedule.findByNbbm(nbbm); | |
| 52 | - logger.info("检测前,车辆班次数量:" + list.size()); | |
| 53 | - | |
| 54 | - Map<Long, ScheduleRealInfo> map = new HashMap<>(); | |
| 55 | - for(ScheduleRealInfo sch : list){ | |
| 56 | - if(map.containsKey(sch.getId())){ | |
| 57 | - logger.info("检测到重复ID: " + sch.getId()); | |
| 58 | - } | |
| 59 | - map.put(sch.getId(), sch); | |
| 60 | - } | |
| 61 | - | |
| 62 | - logger.info("检测后,车辆班次数量:" + list.size()); | |
| 63 | - if(map.values().size() > 0){ | |
| 64 | - dayOfSchedule.replaceByNbbm(nbbm, map.values()); | |
| 65 | - } | |
| 66 | - }*/ | |
| 53 | + @RequestMapping(value = "/schRepeat", method = RequestMethod.POST) | |
| 54 | + public void schRepeat(@RequestParam String nbbm){ | |
| 55 | + logger.info("前端通知,车辆 " + nbbm + "出现重复班次,开始检测..."); | |
| 56 | + List<ScheduleRealInfo> list = dayOfSchedule.findByNbbm(nbbm); | |
| 57 | + logger.info("检测前,车辆班次数量:" + list.size()); | |
| 58 | + | |
| 59 | + Map<Long, ScheduleRealInfo> map = new HashMap<>(); | |
| 60 | + for(ScheduleRealInfo sch : list){ | |
| 61 | + if(map.containsKey(sch.getId())){ | |
| 62 | + logger.info("检测到重复ID: " + sch.getId()); | |
| 63 | + } | |
| 64 | + map.put(sch.getId(), sch); | |
| 65 | + } | |
| 66 | + | |
| 67 | + logger.info("检测后,车辆班次数量:" + list.size()); | |
| 68 | + if(map.values().size() > 0){ | |
| 69 | + dayOfSchedule.replaceByNbbm(nbbm, map.values()); | |
| 70 | + } | |
| 71 | + }*/ | |
| 67 | 72 | |
| 68 | 73 | /* @RequestMapping(value = "/directivePushQueue") |
| 69 | 74 | public void directivePushQueue(){ |
| ... | ... | @@ -132,10 +137,12 @@ public class AdminUtilsController { |
| 132 | 137 | public Map<String, Integer> containerSize(){ |
| 133 | 138 | Map<String, Integer> rs = new HashMap<>(); |
| 134 | 139 | rs.put("60_size", dayOfDirectives.all60().size()); |
| 140 | + rs.put("80_size", pilotReport.findAll().size()); | |
| 135 | 141 | rs.put("nbbm_sch_size", dayOfSchedule.findAll().size()); |
| 136 | 142 | rs.put("lp_sch_size", dayOfSchedule.findAllByLpContainer().size()); |
| 137 | 143 | rs.put("id_sch_size", dayOfSchedule.findAllByIdContainer().size()); |
| 138 | 144 | rs.put("pst_sch_size", dayOfSchedule.getPstSize()); |
| 145 | + rs.put("speeds_size", OverspeedProcess.size()); | |
| 139 | 146 | return rs; |
| 140 | 147 | } |
| 141 | 148 | ... | ... |
src/main/java/com/bsth/data/directive/DayOfDirectives.java
| ... | ... | @@ -16,6 +16,7 @@ import org.springframework.stereotype.Component; |
| 16 | 16 | |
| 17 | 17 | import java.util.*; |
| 18 | 18 | import java.util.concurrent.ConcurrentHashMap; |
| 19 | +import java.util.concurrent.ConcurrentMap; | |
| 19 | 20 | |
| 20 | 21 | /** |
| 21 | 22 | * |
| ... | ... | @@ -29,13 +30,10 @@ import java.util.concurrent.ConcurrentHashMap; |
| 29 | 30 | public class DayOfDirectives { |
| 30 | 31 | |
| 31 | 32 | // 当日60指令缓存 |
| 32 | - private static Map<Integer, D60> d60Map; | |
| 33 | + private static ConcurrentMap<Integer, D60> d60Map; | |
| 33 | 34 | |
| 34 | 35 | // 线路切换指令 64 |
| 35 | - public static Map<String, D64> d64Map; | |
| 36 | - | |
| 37 | - //等待C0_A4回复的用户 | |
| 38 | - //public static Map<K, V> | |
| 36 | + public static ConcurrentMap<String, D64> d64Map; | |
| 39 | 37 | |
| 40 | 38 | //等待入库的指令 |
| 41 | 39 | public static LinkedList<Directive> pstDirectives; |
| ... | ... | @@ -149,9 +147,53 @@ public class DayOfDirectives { |
| 149 | 147 | return; |
| 150 | 148 | |
| 151 | 149 | directiveService.save(d60); |
| 150 | + } | |
| 151 | + | |
| 152 | + public void clear(String lineCode){ | |
| 153 | + int c60 = 0, c64 = 0; | |
| 154 | + | |
| 155 | + Collection<D60> d60s = d60Map.values(); | |
| 156 | + List<D60> rem60List = new ArrayList<>(); | |
| 157 | + for(D60 d60 : d60s){ | |
| 158 | + if(d60.getLineCode().equals(lineCode)) | |
| 159 | + rem60List.add(d60); | |
| 160 | + } | |
| 161 | + | |
| 162 | + //清除60数据 | |
| 163 | + for(D60 d60 : rem60List){ | |
| 164 | + if(d60.getReply47() == null) | |
| 165 | + directiveService.save(d60); | |
| 166 | + if(null != d60Map.remove(d60.getMsgId())) | |
| 167 | + c60 ++; | |
| 168 | + } | |
| 169 | + | |
| 170 | + rem60List.clear(); | |
| 171 | + if(c60 > 0) | |
| 172 | + logger.info("清除60数据 ," + c60); | |
| 173 | + | |
| 174 | + //找到该设备的64数据 | |
| 175 | + Collection<D64> d64s = d64Map.values(); | |
| 176 | + List<D64> rem64List = new ArrayList<>(); | |
| 177 | + for(D64 d64 : d64s){ | |
| 178 | + if(d64.get) | |
| 179 | + rem64List.add(d64); | |
| 180 | + } | |
| 181 | + | |
| 182 | + //清除64数据 | |
| 183 | + for(D64 d64 : rem64List){ | |
| 184 | + if(d64.getRespAck() == null) | |
| 185 | + directiveService.save64(d64); | |
| 186 | + | |
| 187 | + if(null != d64Map.remove(d64.getKey())) | |
| 188 | + c64 ++; | |
| 189 | + } | |
| 190 | + | |
| 191 | + rem64List.clear(); | |
| 192 | + if(c64 > 0) | |
| 193 | + logger.info("清除64数据 ," + c64); | |
| 152 | 194 | }*/ |
| 153 | - | |
| 154 | - public void clear(String device){ | |
| 195 | + | |
| 196 | +/* public void clear(String device){ | |
| 155 | 197 | int c60 = 0, c64 = 0; |
| 156 | 198 | |
| 157 | 199 | Collection<D60> d60s = d60Map.values(); |
| ... | ... | @@ -193,6 +235,12 @@ public class DayOfDirectives { |
| 193 | 235 | rem64List.clear(); |
| 194 | 236 | if(c64 > 0) |
| 195 | 237 | logger.info("清除64数据 ," + c64); |
| 238 | + }*/ | |
| 239 | + | |
| 240 | + public void clearAll(){ | |
| 241 | + d60Map = new ConcurrentHashMap<>(); | |
| 242 | + d64Map = new ConcurrentHashMap<>(); | |
| 243 | + logger.info("清除指令数据 ,,,"); | |
| 196 | 244 | } |
| 197 | 245 | |
| 198 | 246 | public Collection<D60> all60(){ | ... | ... |
src/main/java/com/bsth/data/directive/DirectiveCreator.java
| ... | ... | @@ -81,7 +81,7 @@ public class DirectiveCreator { |
| 81 | 81 | } |
| 82 | 82 | |
| 83 | 83 | |
| 84 | - public D60 createD60_01(String nbbm, String text, int upDown, int state, Date alarmTime){ | |
| 84 | + public D60 createD60_02(String nbbm, String text, int upDown, int state, Date alarmTime){ | |
| 85 | 85 | SimpleDateFormat sdfMMddHHmm = new SimpleDateFormat("MMddHHmm"); |
| 86 | 86 | |
| 87 | 87 | Long timestamp = System.currentTimeMillis(); |
| ... | ... | @@ -102,7 +102,7 @@ public class DirectiveCreator { |
| 102 | 102 | directive.setMsgId(msgId); |
| 103 | 103 | // 构造数据 |
| 104 | 104 | data.setDeviceId(deviceId); |
| 105 | - data.setDispatchInstruct((short) 0x01); | |
| 105 | + data.setDispatchInstruct((short) 0x02); | |
| 106 | 106 | data.setTimestamp(timestamp); |
| 107 | 107 | data.setCompanyCode(company); |
| 108 | 108 | data.setMsgId(msgId); | ... | ... |
src/main/java/com/bsth/data/directive/GatewayHttpUtils.java
| ... | ... | @@ -48,9 +48,7 @@ public class GatewayHttpUtils { |
| 48 | 48 | |
| 49 | 49 | int statusCode = response.getStatusLine().getStatusCode(); |
| 50 | 50 | if(statusCode != 200){ |
| 51 | - //post.abort(); | |
| 52 | 51 | logger.error("http client status code: " + statusCode); |
| 53 | - //return code; | |
| 54 | 52 | } |
| 55 | 53 | |
| 56 | 54 | JSONObject json = JSONObject.parseObject(EntityUtils.toString(response.getEntity())); | ... | ... |
src/main/java/com/bsth/data/gpsdata_v2/entity/GpsEntity.java
| ... | ... | @@ -13,6 +13,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; |
| 13 | 13 | public class GpsEntity implements Cloneable{ |
| 14 | 14 | |
| 15 | 15 | /** 公司代码 */ |
| 16 | + @JsonIgnore | |
| 16 | 17 | private Short companyCode; |
| 17 | 18 | |
| 18 | 19 | /** 线路编码 */ |
| ... | ... | @@ -31,6 +32,7 @@ public class GpsEntity implements Cloneable{ |
| 31 | 32 | private String stationName; |
| 32 | 33 | |
| 33 | 34 | /** 到站时间 */ |
| 35 | + @JsonIgnore | |
| 34 | 36 | private long arrTime; |
| 35 | 37 | |
| 36 | 38 | /** 经度 */ |
| ... | ... | @@ -56,6 +58,12 @@ public class GpsEntity implements Cloneable{ |
| 56 | 58 | |
| 57 | 59 | /** 上下行(0 上行 , 1 下行 , -1 无效) */ |
| 58 | 60 | private Byte upDown; |
| 61 | + | |
| 62 | + /** | |
| 63 | + * 设备原始走向_营运状态 | |
| 64 | + * 当设备状态和系统不一致时,该字段有值 | |
| 65 | + */ | |
| 66 | + private String origStateStr; | |
| 59 | 67 | |
| 60 | 68 | /** 车辆内部编码 */ |
| 61 | 69 | private String nbbm; |
| ... | ... | @@ -379,4 +387,12 @@ public class GpsEntity implements Cloneable{ |
| 379 | 387 | public void setPlanCode(String planCode) { |
| 380 | 388 | this.planCode = planCode; |
| 381 | 389 | } |
| 390 | + | |
| 391 | + public String getOrigStateStr() { | |
| 392 | + return origStateStr; | |
| 393 | + } | |
| 394 | + | |
| 395 | + public void setOrigStateStr(String origStateStr) { | |
| 396 | + this.origStateStr = origStateStr; | |
| 397 | + } | |
| 382 | 398 | } | ... | ... |
src/main/java/com/bsth/data/gpsdata_v2/handlers/GpsStateProcess.java
| ... | ... | @@ -7,6 +7,9 @@ import com.bsth.entity.realcontrol.ScheduleRealInfo; |
| 7 | 7 | import org.springframework.beans.factory.annotation.Autowired; |
| 8 | 8 | import org.springframework.stereotype.Component; |
| 9 | 9 | |
| 10 | +import java.util.concurrent.ConcurrentHashMap; | |
| 11 | +import java.util.concurrent.ConcurrentMap; | |
| 12 | + | |
| 10 | 13 | /** |
| 11 | 14 | * GPS 状态处理 |
| 12 | 15 | * Created by panzhao on 2017/11/15. |
| ... | ... | @@ -20,6 +23,13 @@ public class GpsStateProcess { |
| 20 | 23 | @Autowired |
| 21 | 24 | GpsStatusManager gpsStatusManager; |
| 22 | 25 | |
| 26 | + /** | |
| 27 | + * 设置状态差异连续次数 | |
| 28 | + */ | |
| 29 | + private static ConcurrentMap<String, Integer> stateDiffMap = new ConcurrentHashMap<>(); | |
| 30 | + | |
| 31 | + private final static int CHANGE_THRESHOLD = 2; | |
| 32 | + | |
| 23 | 33 | public void process(GpsEntity gps) { |
| 24 | 34 | //在执行的任务 |
| 25 | 35 | ScheduleRealInfo sch = dayOfSchedule.executeCurr(gps.getNbbm()); |
| ... | ... | @@ -27,16 +37,40 @@ public class GpsStateProcess { |
| 27 | 37 | if (null == sch) |
| 28 | 38 | return; |
| 29 | 39 | |
| 30 | - byte upDown = Byte.parseByte(sch.getXlDir()); | |
| 40 | + int upDown = Integer.parseInt(sch.getXlDir()); | |
| 31 | 41 | int schState = dayOfSchedule.emptyService(sch)?1:0; |
| 32 | - | |
| 42 | + String device = gps.getDeviceId(); | |
| 43 | + /** | |
| 44 | + * 网关在进终点的时候,会直接将当前点位状态改变 | |
| 45 | + * 为避免出现单个点的状态跳动,设置一下切换阈值 | |
| 46 | + */ | |
| 33 | 47 | if(gps.getState() != schState || gps.getUpDown() != upDown){ |
| 34 | - //下发指令纠正车载的 营运状态 和 走向 | |
| 35 | - gpsStatusManager.changeServiceState(gps.getNbbm(), upDown, schState, "同步@系统"); | |
| 48 | + Integer count = 0; | |
| 49 | + if(stateDiffMap.containsKey(device)) | |
| 50 | + count = stateDiffMap.get(device); | |
| 51 | + | |
| 52 | + count ++; | |
| 53 | + | |
| 54 | + if(count >= CHANGE_THRESHOLD){ | |
| 55 | + //下发指令纠正车载的 营运状态 和 走向 | |
| 56 | + gpsStatusManager.changeServiceState(gps.getNbbm(), upDown, schState, "同步@系统"); | |
| 57 | + count = 0; | |
| 58 | + } | |
| 59 | + | |
| 60 | + stateDiffMap.put(device, count); | |
| 61 | + | |
| 62 | + //记录原始设备状态 | |
| 63 | + gps.setOrigStateStr(gps.getUpDown() + "_" + gps.getState()); | |
| 36 | 64 | } |
| 65 | + else | |
| 66 | + stateDiffMap.put(device, 0); | |
| 37 | 67 | |
| 38 | 68 | if (gps.getUpDown() != upDown) { |
| 39 | - gps.setUpDown(upDown);//修正走向 | |
| 69 | + gps.setUpDown((byte) upDown);//修正走向 | |
| 70 | + } | |
| 71 | + | |
| 72 | + if(gps.getState() != schState){ | |
| 73 | + gps.setState(schState);//修正营运状态 | |
| 40 | 74 | } |
| 41 | 75 | |
| 42 | 76 | if (!sch.getXlBm().equals(gps.getLineId())) { | ... | ... |
src/main/java/com/bsth/data/gpsdata_v2/handlers/InStationProcess.java
| ... | ... | @@ -144,6 +144,8 @@ public class InStationProcess { |
| 144 | 144 | dayOfSchedule.addExecPlan(next); |
| 145 | 145 | inStationAndInPark(sch, next);//进站既进场 |
| 146 | 146 | } |
| 147 | + else | |
| 148 | + dayOfSchedule.removeExecPlan(nbbm); | |
| 147 | 149 | |
| 148 | 150 | //路牌的下一个班次,页面显示起点实际到达时间 |
| 149 | 151 | ScheduleRealInfo lpNext = dayOfSchedule.nextByLp(sch); |
| ... | ... | @@ -176,9 +178,14 @@ public class InStationProcess { |
| 176 | 178 | if(null == next && gps.isService()){ |
| 177 | 179 | nonService(sch, "结束@系统");//营运结束 |
| 178 | 180 | } |
| 179 | - //下发运营指令 | |
| 180 | - DirectivePushQueue.put6003(next, "到站@系统"); | |
| 181 | 181 | |
| 182 | + /** | |
| 183 | + * 下一班不是全程班次的时候,下发运营指令 | |
| 184 | + * 全程班次时,由网关根据进出起终点,自动切换走向 | |
| 185 | + | |
| 186 | + if(null != next && !next.getBcType().equals("normal")) | |
| 187 | + DirectivePushQueue.put6003(next, "到站@系统"); | |
| 188 | + */ | |
| 182 | 189 | //下发调度指令 |
| 183 | 190 | DirectivePushQueue.put6002(next, doneSum, "到站@系统", ""); |
| 184 | 191 | } | ... | ... |
src/main/java/com/bsth/data/gpsdata_v2/handlers/overspeed/OverspeedProcess.java
| ... | ... | @@ -43,7 +43,7 @@ public class OverspeedProcess { |
| 43 | 43 | */ |
| 44 | 44 | private static Map<String, Integer> contSpeedMap; |
| 45 | 45 | |
| 46 | - Logger logger = LoggerFactory.getLogger(this.getClass()); | |
| 46 | + static Logger logger = LoggerFactory.getLogger(OverspeedProcess.class); | |
| 47 | 47 | |
| 48 | 48 | static{ |
| 49 | 49 | multimap = ArrayListMultimap.create(); |
| ... | ... | @@ -51,6 +51,10 @@ public class OverspeedProcess { |
| 51 | 51 | realOverspeedMap = new HashMap(); |
| 52 | 52 | } |
| 53 | 53 | |
| 54 | + public static int size(){ | |
| 55 | + return multimap.size(); | |
| 56 | + } | |
| 57 | + | |
| 54 | 58 | public static void clear(){ |
| 55 | 59 | multimap = null; |
| 56 | 60 | multimap = ArrayListMultimap.create(); |
| ... | ... | @@ -60,6 +64,8 @@ public class OverspeedProcess { |
| 60 | 64 | |
| 61 | 65 | realOverspeedMap = null; |
| 62 | 66 | realOverspeedMap = new HashMap(); |
| 67 | + | |
| 68 | + logger.info("清理超速缓存数据,,,"); | |
| 63 | 69 | } |
| 64 | 70 | |
| 65 | 71 | public boolean process(GpsEntity gps){ | ... | ... |
src/main/java/com/bsth/data/gpsdata_v2/utils/GpsDataUtils.java
| ... | ... | @@ -15,6 +15,8 @@ public class GpsDataUtils { |
| 15 | 15 | |
| 16 | 16 | static Logger logger = LoggerFactory.getLogger(GpsDataUtils.class); |
| 17 | 17 | |
| 18 | + private final static long MAX_DIFF = 1000 * 60 * 60 * 24; | |
| 19 | + | |
| 18 | 20 | /** |
| 19 | 21 | * 过滤无效的gps点位 |
| 20 | 22 | * |
| ... | ... | @@ -24,9 +26,16 @@ public class GpsDataUtils { |
| 24 | 26 | public static List<GpsEntity> clearInvalid(List<GpsEntity> list) { |
| 25 | 27 | List<GpsEntity> rs = new ArrayList<>(); |
| 26 | 28 | |
| 29 | + long t = System.currentTimeMillis(); | |
| 27 | 30 | try { |
| 28 | 31 | GpsEntity prev; |
| 29 | 32 | for (GpsEntity gps : list) { |
| 33 | + if(Math.abs(gps.getTimestamp() - t) > MAX_DIFF){ | |
| 34 | + //尝试校准GPS时间 | |
| 35 | + gps.setTimestamp(t + 1); | |
| 36 | + gps.setAbnormalStatus("timeError"); | |
| 37 | + } | |
| 38 | + | |
| 30 | 39 | prev = GpsRealData.get(gps.getDeviceId()); |
| 31 | 40 | |
| 32 | 41 | //不接收过期数据 |
| ... | ... | @@ -48,7 +57,7 @@ public class GpsDataUtils { |
| 48 | 57 | if (rs.size() < list.size()) |
| 49 | 58 | logger.info("过滤无效的点位 : " + (list.size() - rs.size())); |
| 50 | 59 | } catch (Exception e) { |
| 51 | - logger.error("", e); | |
| 60 | + logger.error("过滤GPS出现异常", e); | |
| 52 | 61 | rs = list; |
| 53 | 62 | } |
| 54 | 63 | return rs; | ... | ... |
src/main/java/com/bsth/data/msg_queue/DirectivePushQueue.java
| ... | ... | @@ -24,7 +24,7 @@ public class DirectivePushQueue implements ApplicationContextAware { |
| 24 | 24 | static ConcurrentLinkedQueue<QueueData_Directive> linkedList; |
| 25 | 25 | static DataPushThread thread; |
| 26 | 26 | static DirectiveService directiveService; |
| 27 | - static long t; | |
| 27 | + static long threadT; | |
| 28 | 28 | |
| 29 | 29 | /** |
| 30 | 30 | * 下发运营指令6003的最小间隔时间 |
| ... | ... | @@ -34,11 +34,11 @@ public class DirectivePushQueue implements ApplicationContextAware { |
| 34 | 34 | /** |
| 35 | 35 | * 车辆 ——> 上次下发6003的时间 |
| 36 | 36 | */ |
| 37 | - static ConcurrentMap<String, Long> lastSend6003Map; | |
| 37 | + static ConcurrentMap<String, Long> lastSend60TimeMap; | |
| 38 | 38 | |
| 39 | 39 | static { |
| 40 | 40 | linkedList = new ConcurrentLinkedQueue<>(); |
| 41 | - lastSend6003Map = new ConcurrentHashMap<>(); | |
| 41 | + lastSend60TimeMap = new ConcurrentHashMap<>(); | |
| 42 | 42 | } |
| 43 | 43 | |
| 44 | 44 | public static void put6002(ScheduleRealInfo sch, int finish, String sender, String txtPrefix){ |
| ... | ... | @@ -52,12 +52,13 @@ public class DirectivePushQueue implements ApplicationContextAware { |
| 52 | 52 | qd6002.setTxtPrefix(txtPrefix); |
| 53 | 53 | |
| 54 | 54 | linkedList.add(qd6002); |
| 55 | + lastSend60TimeMap.put(sch.getClZbh(), System.currentTimeMillis()); | |
| 55 | 56 | } |
| 56 | 57 | |
| 57 | 58 | public static void put6003(String nbbm, int state, int upDown, String sender){ |
| 58 | 59 | long t = System.currentTimeMillis(); |
| 59 | - if(lastSend6003Map.containsKey(nbbm) | |
| 60 | - && t - lastSend6003Map.get(nbbm) < MIN_SEND6003_SPACE) | |
| 60 | + if(lastSend60TimeMap.containsKey(nbbm) | |
| 61 | + && t - lastSend60TimeMap.get(nbbm) < MIN_SEND6003_SPACE) | |
| 61 | 62 | return; //最短下发间隔 |
| 62 | 63 | |
| 63 | 64 | QueueData_Directive qd6003 = new QueueData_Directive(); |
| ... | ... | @@ -68,7 +69,7 @@ public class DirectivePushQueue implements ApplicationContextAware { |
| 68 | 69 | qd6003.setCode("60_03"); |
| 69 | 70 | |
| 70 | 71 | linkedList.add(qd6003); |
| 71 | - lastSend6003Map.put(nbbm, t); | |
| 72 | + lastSend60TimeMap.put(nbbm, t); | |
| 72 | 73 | } |
| 73 | 74 | |
| 74 | 75 | public static void put6003(ScheduleRealInfo sch, String sender){ |
| ... | ... | @@ -146,7 +147,7 @@ public class DirectivePushQueue implements ApplicationContextAware { |
| 146 | 147 | sleepFlag = true; |
| 147 | 148 | } |
| 148 | 149 | } |
| 149 | - t = System.currentTimeMillis(); | |
| 150 | + threadT = System.currentTimeMillis(); | |
| 150 | 151 | } |
| 151 | 152 | catch(InterruptedException e){ |
| 152 | 153 | log.error("", e); | ... | ... |
src/main/java/com/bsth/data/safe_driv/SafeDrivCenter.java
| ... | ... | @@ -3,6 +3,8 @@ package com.bsth.data.safe_driv; |
| 3 | 3 | import com.bsth.websocket.handler.SendUtils; |
| 4 | 4 | import org.joda.time.format.DateTimeFormat; |
| 5 | 5 | import org.joda.time.format.DateTimeFormatter; |
| 6 | +import org.slf4j.Logger; | |
| 7 | +import org.slf4j.LoggerFactory; | |
| 6 | 8 | import org.springframework.beans.BeansException; |
| 7 | 9 | import org.springframework.beans.factory.annotation.Autowired; |
| 8 | 10 | import org.springframework.context.ApplicationContext; |
| ... | ... | @@ -33,6 +35,8 @@ public class SafeDrivCenter implements ApplicationContextAware { |
| 33 | 35 | */ |
| 34 | 36 | private static Map<String, SafeDriv> safeMap; |
| 35 | 37 | |
| 38 | + static Logger logger = LoggerFactory.getLogger(SafeDrivCenter.class); | |
| 39 | + | |
| 36 | 40 | static { |
| 37 | 41 | data = new HashSet<>(); |
| 38 | 42 | safeMap = new HashMap<>(); |
| ... | ... | @@ -61,6 +65,7 @@ public class SafeDrivCenter implements ApplicationContextAware { |
| 61 | 65 | public static void clear(){ |
| 62 | 66 | data = new HashSet<>(); |
| 63 | 67 | safeMap = new HashMap<>(); |
| 68 | + logger.info("清除安全驾驶数据,,,"); | |
| 64 | 69 | } |
| 65 | 70 | |
| 66 | 71 | @Override | ... | ... |
src/main/java/com/bsth/data/schedule/thread/CalcOilThread.java
| 1 | 1 | package com.bsth.data.schedule.thread; |
| 2 | 2 | |
| 3 | +import com.bsth.data.directive.DayOfDirectives; | |
| 3 | 4 | import com.bsth.data.gpsdata_v2.handlers.overspeed.OverspeedProcess; |
| 4 | 5 | import com.bsth.service.oil.DlbService; |
| 5 | 6 | import com.bsth.data.safe_driv.SafeDrivCenter; |
| ... | ... | @@ -27,6 +28,9 @@ public class CalcOilThread extends Thread{ |
| 27 | 28 | SheetService sheetService; |
| 28 | 29 | Logger logger = LoggerFactory.getLogger(this.getClass()); |
| 29 | 30 | |
| 31 | + @Autowired | |
| 32 | + DayOfDirectives dayOfDirectives; | |
| 33 | + | |
| 30 | 34 | @Override |
| 31 | 35 | public void run() { |
| 32 | 36 | try{ |
| ... | ... | @@ -37,12 +41,15 @@ public class CalcOilThread extends Thread{ |
| 37 | 41 | logger.info("开始计算班次准点率...."); |
| 38 | 42 | sheetService.saveSheetList(""); |
| 39 | 43 | logger.info("计算班次准点率结束!"); |
| 40 | - //清除安全驾驶数据 先临时蹭这个线程 | |
| 41 | - SafeDrivCenter.clear(); | |
| 42 | - //清除超速缓存数据 | |
| 43 | - OverspeedProcess.clear(); | |
| 44 | 44 | } catch(Exception e){ |
| 45 | 45 | logger.error("计算路单里程加注量失败",e); |
| 46 | 46 | } |
| 47 | + | |
| 48 | + //清除指令数据 | |
| 49 | + dayOfDirectives.clearAll(); | |
| 50 | + //清除安全驾驶数据 | |
| 51 | + SafeDrivCenter.clear(); | |
| 52 | + //清除超速缓存数据 | |
| 53 | + OverspeedProcess.clear(); | |
| 47 | 54 | } |
| 48 | 55 | } | ... | ... |
src/main/java/com/bsth/data/schedule/thread/ScheduleRefreshThread.java
| 1 | 1 | package com.bsth.data.schedule.thread; |
| 2 | 2 | |
| 3 | -import com.bsth.data.BasicData; | |
| 4 | 3 | import com.bsth.data.LineConfigData; |
| 5 | 4 | import com.bsth.data.directive.DayOfDirectives; |
| 6 | 5 | import com.bsth.data.gpsdata_v2.cache.GpsCacheData; |
| ... | ... | @@ -56,17 +55,15 @@ public class ScheduleRefreshThread extends Thread{ |
| 56 | 55 | |
| 57 | 56 | if(oldSchDate == null || !oldSchDate.equals(currSchDate)){ |
| 58 | 57 | |
| 59 | - //logger.info(lineCode + "开始翻班, " + currSchDate); | |
| 60 | - | |
| 61 | 58 | try{ |
| 62 | - //清除指令数据 | |
| 63 | 59 | Set<String> cars = dayOfSchedule.findCarByLineCode(lineCode); |
| 64 | 60 | for(String car : cars){ |
| 65 | - dayOfDirectives.clear(BasicData.deviceId2NbbmMap.inverse().get(car)); | |
| 66 | 61 | GpsCacheData.remove(car); |
| 67 | 62 | } |
| 68 | 63 | //清除驾驶员上报数据 |
| 69 | 64 | pilotReport.clear(lineCode); |
| 65 | + //清除指令数据 指令数据,直接定时全部清空 | |
| 66 | + //dayOfDirectives.clear(lineCode); | |
| 70 | 67 | }catch (Exception e){ |
| 71 | 68 | logger.error("清理 60 和 80出现问题", e); |
| 72 | 69 | } | ... | ... |
src/main/java/com/bsth/service/directive/DirectiveServiceImpl.java
| ... | ... | @@ -128,7 +128,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl<D60, Integer> implemen |
| 128 | 128 | text += " (放站到"+sch.getMajorStationName()+"带客)"; |
| 129 | 129 | } |
| 130 | 130 | |
| 131 | - //下发0x01指令 调度指令(闹钟有效) | |
| 131 | + //下发0x02指令 调度指令(闹钟有效) | |
| 132 | 132 | long t = System.currentTimeMillis() + 1000 * 30, |
| 133 | 133 | alarmTime = sch.getDfsjT() < t?t:sch.getDfsjT(); |
| 134 | 134 | |
| ... | ... | @@ -139,7 +139,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl<D60, Integer> implemen |
| 139 | 139 | int state = 0;//营运状态 |
| 140 | 140 | if(dayOfSchedule.emptyService(sch)) |
| 141 | 141 | state = 1; |
| 142 | - d60 = new DirectiveCreator().createD60_01(sch.getClZbh(), text, Integer.parseInt(sch.getXlDir()) | |
| 142 | + d60 = new DirectiveCreator().createD60_02(sch.getClZbh(), text, Integer.parseInt(sch.getXlDir()) | |
| 143 | 143 | , state, new Date(alarmTime)); |
| 144 | 144 | |
| 145 | 145 | d60.setLineCode(sch.getXlBm()); | ... | ... |
src/main/java/com/bsth/service/gps/GpsServiceImpl.java
| ... | ... | @@ -5,6 +5,7 @@ import com.bsth.data.BasicData; |
| 5 | 5 | import com.bsth.data.forecast.entity.ArrivalEntity; |
| 6 | 6 | import com.bsth.data.gpsdata_v2.GpsRealData; |
| 7 | 7 | import com.bsth.data.gpsdata_v2.cache.GeoCacheData; |
| 8 | +import com.bsth.data.gpsdata_v2.cache.GpsCacheData; | |
| 8 | 9 | import com.bsth.data.gpsdata_v2.entity.GpsEntity; |
| 9 | 10 | import com.bsth.data.gpsdata_v2.utils.GeoUtils; |
| 10 | 11 | import com.bsth.data.pilot80.PilotReport; |
| ... | ... | @@ -492,6 +493,7 @@ public class GpsServiceImpl implements GpsService { |
| 492 | 493 | try { |
| 493 | 494 | |
| 494 | 495 | gpsRealData.remove(device); |
| 496 | + GpsCacheData.remove(BasicData.deviceId2NbbmMap.get(device)); | |
| 495 | 497 | rs.put("status", ResponseCode.SUCCESS); |
| 496 | 498 | } catch (Exception e) { |
| 497 | 499 | rs.put("status", ResponseCode.ERROR); | ... | ... |
src/main/java/com/bsth/service/impl/BusIntervalServiceImpl.java
| ... | ... | @@ -2762,13 +2762,25 @@ public class BusIntervalServiceImpl implements BusIntervalService { |
| 2762 | 2762 | !zdsj.equals(zdsjActual) && |
| 2763 | 2763 | !zdsj.equals("")&& |
| 2764 | 2764 | !zdsjActual.equals("")) { |
| 2765 | - if (zdsj.compareTo(zdsjActual) > 0) { | |
| 2766 | - maps.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual)); | |
| 2767 | - maps.put("slow", ""); | |
| 2768 | - } else { | |
| 2769 | - maps.put("fast", ""); | |
| 2770 | - maps.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual)); | |
| 2771 | - } | |
| 2765 | + int zdsjT = Integer.valueOf(zdsj.split(":")[0])*60 + Integer.valueOf(zdsj.split(":")[1]); | |
| 2766 | + int zdsjAT = Integer.valueOf(zdsjActual.split(":")[0])*60 + Integer.valueOf(zdsjActual.split(":")[1]); | |
| 2767 | + if (zdsj.compareTo(zdsjActual) > 0) { | |
| 2768 | + if(zdsjT - zdsjAT > 1000){ | |
| 2769 | + maps.put("fast", ""); | |
| 2770 | + maps.put("slow", zdsjAT - zdsjT + 1440); | |
| 2771 | + } else { | |
| 2772 | + maps.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual)); | |
| 2773 | + maps.put("slow", ""); | |
| 2774 | + } | |
| 2775 | + } else { | |
| 2776 | + if(zdsjAT - zdsjT > 1000){ | |
| 2777 | + maps.put("fast", zdsjT - zdsjAT + 1440); | |
| 2778 | + maps.put("slow", ""); | |
| 2779 | + } else { | |
| 2780 | + maps.put("fast", ""); | |
| 2781 | + maps.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual)); | |
| 2782 | + } | |
| 2783 | + } | |
| 2772 | 2784 | } else { |
| 2773 | 2785 | maps.put("fast", ""); |
| 2774 | 2786 | maps.put("slow", ""); | ... | ... |
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
| ... | ... | @@ -698,13 +698,6 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 698 | 698 | //数据库删除 |
| 699 | 699 | rs = super.delete(id); |
| 700 | 700 | if(rs.get("status").equals(ResponseCode.SUCCESS)){ |
| 701 | - /*ScheduleRealInfo temp = super.findById(id); | |
| 702 | - if(temp != null){ | |
| 703 | - rs.put("status", ResponseCode.ERROR); | |
| 704 | - rs.put("msg", "删除失败,请重试!"); | |
| 705 | - return rs; | |
| 706 | - }*/ | |
| 707 | - | |
| 708 | 701 | dayOfSchedule.delete(sch); |
| 709 | 702 | //更新起点应到时间 |
| 710 | 703 | List<ScheduleRealInfo> ts = dayOfSchedule.updateQdzTimePlan(sch); |
| ... | ... | @@ -1027,12 +1020,24 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 1027 | 1020 | !zdsj.equals(zdsjActual) && |
| 1028 | 1021 | !zdsj.equals("")&& |
| 1029 | 1022 | !zdsjActual.equals("")) { |
| 1023 | + int zdsjT = Integer.valueOf(zdsj.split(":")[0])*60 + Integer.valueOf(zdsj.split(":")[1]); | |
| 1024 | + int zdsjAT = Integer.valueOf(zdsjActual.split(":")[0])*60 + Integer.valueOf(zdsjActual.split(":")[1]); | |
| 1030 | 1025 | if (zdsj.compareTo(zdsjActual) > 0) { |
| 1031 | - maps.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual)); | |
| 1032 | - maps.put("slow", ""); | |
| 1026 | + if(zdsjT - zdsjAT > 1000){ | |
| 1027 | + maps.put("fast", ""); | |
| 1028 | + maps.put("slow", zdsjAT - zdsjT + 1440); | |
| 1029 | + } else { | |
| 1030 | + maps.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual)); | |
| 1031 | + maps.put("slow", ""); | |
| 1032 | + } | |
| 1033 | 1033 | } else { |
| 1034 | - maps.put("fast", ""); | |
| 1035 | - maps.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual)); | |
| 1034 | + if(zdsjAT - zdsjT > 1000){ | |
| 1035 | + maps.put("fast", zdsjT - zdsjAT + 1440); | |
| 1036 | + maps.put("slow", ""); | |
| 1037 | + } else { | |
| 1038 | + maps.put("fast", ""); | |
| 1039 | + maps.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual)); | |
| 1040 | + } | |
| 1036 | 1041 | } |
| 1037 | 1042 | } else { |
| 1038 | 1043 | maps.put("fast", ""); |
| ... | ... | @@ -3707,12 +3712,24 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 3707 | 3712 | String zdsjActual = scheduleRealInfo.getZdsjActual(); |
| 3708 | 3713 | if (zdsj != null && zdsjActual != null && |
| 3709 | 3714 | !zdsj.equals(zdsjActual)) { |
| 3715 | + int zdsjT = Integer.valueOf(zdsj.split(":")[0])*60 + Integer.valueOf(zdsj.split(":")[1]); | |
| 3716 | + int zdsjAT = Integer.valueOf(zdsjActual.split(":")[0])*60 + Integer.valueOf(zdsjActual.split(":")[1]); | |
| 3710 | 3717 | if (zdsj.compareTo(zdsjActual) > 0) { |
| 3711 | - map.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual)); | |
| 3712 | - map.put("slow", ""); | |
| 3718 | + if(zdsjT - zdsjAT > 1000){ | |
| 3719 | + map.put("fast", ""); | |
| 3720 | + map.put("slow", zdsjAT - zdsjT + 1440); | |
| 3721 | + } else { | |
| 3722 | + map.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual)); | |
| 3723 | + map.put("slow", ""); | |
| 3724 | + } | |
| 3713 | 3725 | } else { |
| 3714 | - map.put("fast", ""); | |
| 3715 | - map.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual)); | |
| 3726 | + if(zdsjAT - zdsjT > 1000){ | |
| 3727 | + map.put("fast", zdsjT - zdsjAT + 1440); | |
| 3728 | + map.put("slow", ""); | |
| 3729 | + } else { | |
| 3730 | + map.put("fast", ""); | |
| 3731 | + map.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual)); | |
| 3732 | + } | |
| 3716 | 3733 | } |
| 3717 | 3734 | } else { |
| 3718 | 3735 | map.put("fast", ""); |
| ... | ... | @@ -4703,12 +4720,24 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 4703 | 4720 | !zdsj.equals(zdsjActual) && |
| 4704 | 4721 | !zdsj.equals("")&& |
| 4705 | 4722 | !zdsjActual.equals("")) { |
| 4723 | + int zdsjT = Integer.valueOf(zdsj.split(":")[0])*60 + Integer.valueOf(zdsj.split(":")[1]); | |
| 4724 | + int zdsjAT = Integer.valueOf(zdsjActual.split(":")[0])*60 + Integer.valueOf(zdsjActual.split(":")[1]); | |
| 4706 | 4725 | if (zdsj.compareTo(zdsjActual) > 0) { |
| 4707 | - maps.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual)); | |
| 4708 | - maps.put("slow", ""); | |
| 4726 | + if(zdsjT - zdsjAT > 1000){ | |
| 4727 | + maps.put("fast", ""); | |
| 4728 | + maps.put("slow", zdsjAT - zdsjT + 1440); | |
| 4729 | + } else { | |
| 4730 | + maps.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual)); | |
| 4731 | + maps.put("slow", ""); | |
| 4732 | + } | |
| 4709 | 4733 | } else { |
| 4710 | - maps.put("fast", ""); | |
| 4711 | - maps.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual)); | |
| 4734 | + if(zdsjAT - zdsjT > 1000){ | |
| 4735 | + maps.put("fast", zdsjT - zdsjAT + 1440); | |
| 4736 | + maps.put("slow", ""); | |
| 4737 | + } else { | |
| 4738 | + maps.put("fast", ""); | |
| 4739 | + maps.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual)); | |
| 4740 | + } | |
| 4712 | 4741 | } |
| 4713 | 4742 | } else { |
| 4714 | 4743 | maps.put("fast", ""); | ... | ... |
src/main/java/com/bsth/service/report/impl/ReportServiceImpl.java
| ... | ... | @@ -93,8 +93,10 @@ public class ReportServiceImpl implements ReportService{ |
| 93 | 93 | String sbbb=BasicData.deviceId2NbbmMap.inverse().get(clzbh); |
| 94 | 94 | SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| 95 | 95 | SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); |
| 96 | - Long date1=simpleDateFormat.parse(date+" "+sjfc+":00").getTime(); | |
| 97 | - Long date2=simpleDateFormat.parse(date+" "+sjdd+":00").getTime(); | |
| 96 | +// Long date1=simpleDateFormat.parse(date+" "+sjfc+":00").getTime(); | |
| 97 | +// Long date2=simpleDateFormat.parse(date+" "+sjdd+":00").getTime(); | |
| 98 | + Long date1=simpleDateFormat.parse(sjfc+":00").getTime(); | |
| 99 | + Long date2=simpleDateFormat.parse(sjdd+":00").getTime(); | |
| 98 | 100 | Date dates=simpleDateFormat.parse(date+" 00:00:00"); |
| 99 | 101 | List<ArrivalInfo> lists=load(line,sbbb,date1,date2,dates,date); |
| 100 | 102 | |
| ... | ... | @@ -129,20 +131,22 @@ public class ReportServiceImpl implements ReportService{ |
| 129 | 131 | cal.setTime(dates); |
| 130 | 132 | //周数,表分区字段 |
| 131 | 133 | int weeks_year = cal.get(Calendar.WEEK_OF_YEAR); |
| 132 | - | |
| 134 | + int weeks_year_next=weeks_year +1; | |
| 133 | 135 | Connection conn = null; |
| 134 | 136 | PreparedStatement ps = null; |
| 135 | 137 | ResultSet rs = null; |
| 136 | 138 | String year=date.substring(0,4); |
| 137 | - String sql = "select * from bsth_c_arrival_info_"+year+" where device_id=? AND line_id=? AND weeks_year=? AND ts > ? AND ts <=? order by ts"; | |
| 139 | + String sql = "select * from bsth_c_arrival_info_"+year+" where device_id=? AND line_id=? " | |
| 140 | + + " AND weeks_year>=? AND weeks_year<=? AND ts >= ? AND ts <=? order by ts"; | |
| 138 | 141 | try{ |
| 139 | 142 | conn = DBUtils_MS.getConnection(); |
| 140 | 143 | ps = conn.prepareStatement(sql); |
| 141 | 144 | ps.setString(1, sbbb); |
| 142 | 145 | ps.setString(2,line); |
| 143 | 146 | ps.setInt(3, weeks_year); |
| 144 | - ps.setLong(4, date1); | |
| 145 | - ps.setLong(5, date2); | |
| 147 | + ps.setInt(4, weeks_year_next); | |
| 148 | + ps.setLong(5, date1); | |
| 149 | + ps.setLong(6, date2); | |
| 146 | 150 | rs = ps.executeQuery(); |
| 147 | 151 | |
| 148 | 152 | list = resultSet2Set(rs); | ... | ... |
src/main/resources/static/pages/electricity/list/list.html
| ... | ... | @@ -588,12 +588,13 @@ onkeyup="this.value=this.value.replace(/[^(\d||/.)]/g,'').replace('.','$#$').rep |
| 588 | 588 | |
| 589 | 589 | function jsyUpdate(){ |
| 590 | 590 | var params=getParamsList(); |
| 591 | + var id = $(this).data('id'); | |
| 591 | 592 | $get('/ylb/checkDate',params,function(status){ |
| 592 | 593 | if(status=='2'){ |
| 593 | 594 | layer.msg('只能操作三天内数据.'); |
| 594 | 595 | }else{ |
| 595 | - var id = $(this).data('id'); | |
| 596 | 596 | var jsy=$('.in_carpark_jsy[data-id='+id+']', '#dl_oil_list').val(); |
| 597 | + console.log(id+"修改驾驶员:"+jsy); | |
| 597 | 598 | $get('/dlb/updateJsy',{id:id,jsy:jsy}, function(result){ |
| 598 | 599 | layer.msg('修改成功.'); |
| 599 | 600 | page = 0; | ... | ... |
src/main/resources/static/pages/forms/statement/waybill.html
| ... | ... | @@ -375,10 +375,18 @@ |
| 375 | 375 | var zdsjActual = (obj.zdsjActual).split(":"); |
| 376 | 376 | var zdsj = (obj.zdsj).split(":"); |
| 377 | 377 | if(zdsjActual[0]*60+Number(zdsjActual[1]) > zdsj[0]*60+Number(zdsj[1])){ |
| 378 | - obj["slow"] = (zdsjActual[0]*60+Number(zdsjActual[1])) - (zdsj[0]*60+Number(zdsj[1])); | |
| 378 | + if(zdsjActual[0]*60+Number(zdsjActual[1]) - zdsj[0]*60+Number(zdsj[1]) > 1000){ | |
| 379 | + obj["fast"] = (zdsj[0]*60+Number(zdsj[1])) - (zdsjActual[0]*60+Number(zdsjActual[1])) + 1440; | |
| 380 | + } else { | |
| 381 | + obj["slow"] = (zdsjActual[0]*60+Number(zdsjActual[1])) - (zdsj[0]*60+Number(zdsj[1])); | |
| 382 | + } | |
| 379 | 383 | } |
| 380 | 384 | else if(zdsjActual[0]*60+Number(zdsjActual[1]) < zdsj[0]*60+Number(zdsj[1])){ |
| 381 | - obj["fast"] = (zdsj[0]*60+Number(zdsj[1])) - (zdsjActual[0]*60+Number(zdsjActual[1])); | |
| 385 | + if((zdsj[0]*60+Number(zdsj[1])) - (zdsjActual[0]*60+Number(zdsjActual[1])) > 1000){ | |
| 386 | + obj["slow"] = (zdsjActual[0]*60+Number(zdsjActual[1])) - (zdsj[0]*60+Number(zdsj[1])) + 1440; | |
| 387 | + } else { | |
| 388 | + obj["fast"] = (zdsj[0]*60+Number(zdsj[1])) - (zdsjActual[0]*60+Number(zdsjActual[1])); | |
| 389 | + } | |
| 382 | 390 | } |
| 383 | 391 | } |
| 384 | 392 | }); | ... | ... |
src/main/resources/static/pages/oil/list_ph.html
| ... | ... | @@ -764,10 +764,10 @@ onkeyup="this.value=this.value.replace(/[^(\d||/.)]/g,'').replace('.','$#$').rep |
| 764 | 764 | function jsyUpdate(){ |
| 765 | 765 | var params=getParamsList(); |
| 766 | 766 | $get('/ylb/checkDate',params,function(status){ |
| 767 | + var id = $(this).data('id'); | |
| 767 | 768 | if(status=='2'){ |
| 768 | 769 | layer.msg('只能操作三天内数据.'); |
| 769 | 770 | }else{ |
| 770 | - var id = $(this).data('id'); | |
| 771 | 771 | var jsy=$('.in_carpark_jsy[data-id='+id+']', '#ll_oil_list').val(); |
| 772 | 772 | $get('/ylb/updateJsy',{id:id,jsy:jsy}, function(result){ |
| 773 | 773 | layer.msg('修改成功.'); | ... | ... |
src/main/resources/static/pages/report/inoutstation.html
| ... | ... | @@ -389,6 +389,14 @@ |
| 389 | 389 | var id=params[0].split("\\")[0]; |
| 390 | 390 | var fcsj = $('.in_carpark_fcsj[data-id='+id+']', '#forms').html(); |
| 391 | 391 | var ddsj= $('.in_carpark_zdsj[data-id='+id+']', '#forms').html(); |
| 392 | + var d1 = new Date(fcsj+":00"); | |
| 393 | + var d2 = new Date(ddsj+":00"); | |
| 394 | + console.log(parseInt(d1 - d2) / 1000 / 60);//两个时间相差的分钟数 | |
| 395 | + if(parseInt(d1 - d2)>0){ | |
| 396 | + d2.setDate(d2.getDate()+1);//设置天数 -1 天 | |
| 397 | + ddsj = d2.getFullYear() + '-' + (d2.getMonth() + 1) + '-' + d2.getDate() + ' ' + d2.getHours() + ':' + d2.getMinutes(); | |
| 398 | + } | |
| 399 | + | |
| 392 | 400 | if(!(typeof(fcsj)=='undefined'|| typeof(ddsj)=='undefined')){ |
| 393 | 401 | $get('/report/queryListZdxx',{clzbh:nbbm,date:rq,line:line,fcsj:fcsj,ddsj:ddsj},function(result){ |
| 394 | 402 | var xlmc="线路: "+$("#select2-line-container").html(); |
| ... | ... | @@ -396,8 +404,8 @@ |
| 396 | 404 | var rqmc="日期: "+rq; |
| 397 | 405 | var bcmc="班次: "+fcsj+"-"+ddsj; |
| 398 | 406 | $("#dlzmx").html("到离站详细 "+xlmc+" "+clmc+" "+rqmc+" "+bcmc); |
| 399 | - $("#fcsj_xx").val(fcsj); | |
| 400 | - $("#ddsj_xx").val(ddsj); | |
| 407 | + $("#fcsj_xx").val(fcsj); | |
| 408 | + $("#ddsj_xx").val(ddsj); | |
| 401 | 409 | var ludan_ll_1 = template('ludan_ll_1',{list:result}); |
| 402 | 410 | // 把渲染好的模版html文本追加到表格中 |
| 403 | 411 | $('#forms1 .ludan_ll_1').html(ludan_ll_1); |
| ... | ... | @@ -419,7 +427,7 @@ |
| 419 | 427 | layer.msg("请选择时间"); |
| 420 | 428 | }else if(zdlx=="" || zdlx==null){ |
| 421 | 429 | layer.msg("请选择方向"); |
| 422 | - }else if(zd=="" || zd==null){ | |
| 430 | + }else if(zd=="" || zd==null||zd==" "){ | |
| 423 | 431 | layer.msg("请选择站点"); |
| 424 | 432 | }else{ |
| 425 | 433 | var xlmc="线路: "+$("#select2-line-container").html(); |
| ... | ... | @@ -557,8 +565,8 @@ |
| 557 | 565 | 整点 |
| 558 | 566 | {{/if}} |
| 559 | 567 | ) |
| 560 | - <span class="in_carpark_fcsj" data-id="{{i+1}}" style="display:none">{{obj.fcsjActual}}</span> | |
| 561 | - <span class="in_carpark_zdsj" data-id="{{i+1}}" style="display:none">{{obj.zdsjActual}}</span> | |
| 568 | + <span class="in_carpark_fcsj" data-id="{{i+1}}" style="display:none">{{obj.realExecDate}} {{obj.fcsjActual}}</span> | |
| 569 | + <span class="in_carpark_zdsj" data-id="{{i+1}}" style="display:none">{{obj.realExecDate}} {{obj.zdsjActual}}</span> | |
| 562 | 570 | </a> |
| 563 | 571 | {{/if}} |
| 564 | 572 | </td> | ... | ... |
src/main/resources/static/real_control_v2/alone_page/map/alone_wrap.html
| ... | ... | @@ -110,6 +110,7 @@ |
| 110 | 110 | <!-- jquery.serializejson JSON序列化插件 --> |
| 111 | 111 | <script src="/assets/plugins/jquery.serializejson.js" merge="uikit_js"></script> |
| 112 | 112 | |
| 113 | +<script src="/assets/plugins/pinyin.js" merge="plugins"></script> | |
| 113 | 114 | </body> |
| 114 | 115 | <script> |
| 115 | 116 | gb_data_gps.fixedTimeRefresh(); | ... | ... |
src/main/resources/static/real_control_v2/fragments/north/nav/all_devices.html
| ... | ... | @@ -36,6 +36,7 @@ |
| 36 | 36 | <div class="uk-autocomplete uk-form " > |
| 37 | 37 | <select name="abnormalStatus"> |
| 38 | 38 | <option value="">全部</option> |
| 39 | + <option value="timeError">时间戳异常</option> | |
| 39 | 40 | <option value="outBounds">越界</option> |
| 40 | 41 | <option value="overspeed">超速</option> |
| 41 | 42 | <option value="offline">离线</option> |
| ... | ... | @@ -58,11 +59,11 @@ |
| 58 | 59 | <th style="width: 14%;">站点</th> |
| 59 | 60 | <th style="width: 11%;">车辆</th> |
| 60 | 61 | <th style="width: 11%;">设备号</th> |
| 61 | - <th style="width: 9%;">走向/营运</th> | |
| 62 | + <th style="width: 12%;">走向/营运</th> | |
| 62 | 63 | <th style="width: 9%;">程序版本</th> |
| 63 | 64 | <th>最后GPS时间</th> |
| 64 | - <th style="width: 9%;">状态</th> | |
| 65 | - <th style="width: 8%;">来源</th> | |
| 65 | + <th style="width: 8%;">状态</th> | |
| 66 | + <th style="width: 6%;">源</th> | |
| 66 | 67 | </tr> |
| 67 | 68 | </thead> |
| 68 | 69 | <tbody> |
| ... | ... | @@ -81,7 +82,11 @@ |
| 81 | 82 | <td>{{gps.stationName}}</td> |
| 82 | 83 | <td>{{gps.nbbm}}</td> |
| 83 | 84 | <td>{{gps.deviceId}}</td> |
| 84 | - <td>{{gps.upDown}}/{{gps.state}}</td> | |
| 85 | + <td>{{gps.upDown}}/{{gps.state}} | |
| 86 | + {{if gps.origStateStr!=null}} | |
| 87 | + (<span style="color: #fe6262;">{{gps.origStateStr}}</span>) | |
| 88 | + {{/if}} | |
| 89 | + </td> | |
| 85 | 90 | <td>{{gps.version}}</td> |
| 86 | 91 | <td>{{gps.timeStr}}</td> |
| 87 | 92 | <td> |
| ... | ... | @@ -95,18 +100,14 @@ |
| 95 | 100 | <span class="sm-red">GPS (0,0)</span> |
| 96 | 101 | {{else if gps.abnormalStatus=='offline'}} |
| 97 | 102 | <span>离线</span> |
| 103 | + {{else if gps.abnormalStatus=='timeError'}} | |
| 104 | + <span class="sm-red" title="设备时间戳异常,尝试以服务器时间修正">time_ex</span> | |
| 98 | 105 | {{else}} |
| 99 | 106 | ... |
| 100 | 107 | {{/if}} |
| 101 | 108 | </td> |
| 102 | 109 | <td> |
| 103 | - {{if gps.source==1}} | |
| 104 | - <span style="color: #1e1ef5;" title="已切换至新网关">网关</span> | |
| 105 | - {{else if gps.source==0}} | |
| 106 | - <span style="color: #8e8e8e;" title="转接的数据,无法下发指令">转发</span> | |
| 107 | - {{else}} | |
| 108 | - <span class="sm-grey">未知</span> | |
| 109 | - {{/if}} | |
| 110 | + <span class="sm-grey">{{gps.source}}</span> | |
| 110 | 111 | </td> |
| 111 | 112 | </tr> |
| 112 | 113 | {{/each}} | ... | ... |