Commit 642c9016885d0950043762c9ff7536869bcf3eb3
1 parent
2159f48a
update...
Showing
21 changed files
with
572 additions
and
413 deletions
src/main/java/com/bsth/controller/berth/BerthController.java
| ... | ... | @@ -2,9 +2,9 @@ package com.bsth.controller.berth; |
| 2 | 2 | |
| 3 | 3 | import com.bsth.controller.BaseController; |
| 4 | 4 | import com.bsth.controller.berth.dto.Car2Berth; |
| 5 | -import com.bsth.data.in_out.RealInoutHandler; | |
| 6 | 5 | import com.bsth.data.in_out.buffer.BerthDataBuffer; |
| 7 | 6 | import com.bsth.data.in_out.buffer.ElectricDataBuffer; |
| 7 | +import com.bsth.data.in_out.carpark.RealBerthManager; | |
| 8 | 8 | import com.bsth.entity.berth.RegionBerth; |
| 9 | 9 | import com.bsth.service.berth.BerthService; |
| 10 | 10 | import org.springframework.beans.factory.annotation.Autowired; |
| ... | ... | @@ -35,7 +35,7 @@ public class BerthController extends BaseController<RegionBerth, Integer> { |
| 35 | 35 | BerthService berthService; |
| 36 | 36 | |
| 37 | 37 | @Autowired |
| 38 | - RealInoutHandler realInoutHandler; | |
| 38 | + RealBerthManager realBerthManager; | |
| 39 | 39 | |
| 40 | 40 | @Autowired |
| 41 | 41 | BerthDataBuffer berthDataBuffer; |
| ... | ... | @@ -52,17 +52,17 @@ public class BerthController extends BaseController<RegionBerth, Integer> { |
| 52 | 52 | |
| 53 | 53 | @RequestMapping("addCar") |
| 54 | 54 | public Map<String, Object> addCar(@RequestParam String berthName,@RequestParam String nbbm){ |
| 55 | - return realInoutHandler.addCar2Berth(nbbm, berthName); | |
| 55 | + return realBerthManager.addCar2Berth(nbbm, berthName); | |
| 56 | 56 | } |
| 57 | 57 | |
| 58 | 58 | @RequestMapping("removeCar") |
| 59 | 59 | public Map<String, Object> removeCar(@RequestParam String b){ |
| 60 | - return realInoutHandler.removeCar2Berth(b); | |
| 60 | + return realBerthManager.removeCar2Berth(b); | |
| 61 | 61 | } |
| 62 | 62 | |
| 63 | 63 | @RequestMapping("changeCar2Berth") |
| 64 | 64 | public Map<String, Object> changeCar2Berth(@RequestParam String s,@RequestParam String d){ |
| 65 | - return RealInoutHandler.changeCar2Berth(s, d); | |
| 65 | + return RealBerthManager.changeCar2Berth(s, d); | |
| 66 | 66 | } |
| 67 | 67 | |
| 68 | 68 | @RequestMapping("lockBerth") | ... | ... |
src/main/java/com/bsth/data/abnormal/MainAbnormalClient.java
| ... | ... | @@ -3,6 +3,7 @@ package com.bsth.data.abnormal; |
| 3 | 3 | import com.bsth.data.abnormal.entity.AbnormalEntity; |
| 4 | 4 | import com.bsth.data.abnormal.handler.AttendanceHandler; |
| 5 | 5 | import com.bsth.data.abnormal.handler.InOutHandler; |
| 6 | +import com.bsth.data.schedule.dto.ScheduleInOut; | |
| 6 | 7 | import com.bsth.websocket.handler.SendUtils; |
| 7 | 8 | import com.google.common.collect.ArrayListMultimap; |
| 8 | 9 | import org.slf4j.Logger; |
| ... | ... | @@ -87,4 +88,12 @@ public class MainAbnormalClient { |
| 87 | 88 | public AbnormalEntity cycc(Long id, String timeStr, String reason, String remarks) { |
| 88 | 89 | return inOutHandler.cycc(id, timeStr, reason, remarks); |
| 89 | 90 | } |
| 91 | + | |
| 92 | + /** | |
| 93 | + * rfid 出场 | |
| 94 | + * @param sio | |
| 95 | + */ | |
| 96 | + public AbnormalEntity rfidOut(ScheduleInOut sio) { | |
| 97 | + return inOutHandler.rfidOut(sio); | |
| 98 | + } | |
| 90 | 99 | } | ... | ... |
src/main/java/com/bsth/data/abnormal/handler/InOutHandler.java
| ... | ... | @@ -4,6 +4,8 @@ import com.bsth.data.abnormal.entity.AbnormalEntity; |
| 4 | 4 | import com.bsth.data.schedule.dto.ScheduleInOut; |
| 5 | 5 | import com.bsth.data.schedule.real.ScheduleDataBuffer; |
| 6 | 6 | import com.bsth.security.util.SecurityUtils; |
| 7 | +import org.joda.time.format.DateTimeFormat; | |
| 8 | +import org.joda.time.format.DateTimeFormatter; | |
| 7 | 9 | import org.springframework.stereotype.Component; |
| 8 | 10 | |
| 9 | 11 | import java.util.concurrent.ConcurrentHashMap; |
| ... | ... | @@ -18,6 +20,8 @@ public class InOutHandler { |
| 18 | 20 | |
| 19 | 21 | private static ConcurrentMap<Long, AbnormalEntity> schIdMap; |
| 20 | 22 | |
| 23 | + private static DateTimeFormatter fmtHHmm = DateTimeFormat.forPattern("HH:mm"); | |
| 24 | + | |
| 21 | 25 | static { |
| 22 | 26 | schIdMap = new ConcurrentHashMap<>(); |
| 23 | 27 | } |
| ... | ... | @@ -77,4 +81,19 @@ public class InOutHandler { |
| 77 | 81 | schIdMap.remove(ae.getSchId()); |
| 78 | 82 | return ae; |
| 79 | 83 | } |
| 84 | + | |
| 85 | + | |
| 86 | + public AbnormalEntity rfidOut(ScheduleInOut sio) { | |
| 87 | + AbnormalEntity ae = schIdMap.get(sio.getId()); | |
| 88 | + if(null == ae) | |
| 89 | + return null; | |
| 90 | + | |
| 91 | + ae.setHandlerTime(sio.getOutTimeRfid()); | |
| 92 | + ae.setHandlerUser("system"); | |
| 93 | + ae.setHandlerDes("RFID信号出场," + fmtHHmm.print(sio.getOutTimeRfid())); | |
| 94 | + | |
| 95 | + sio.reCalcAnStatus(); | |
| 96 | + schIdMap.remove(ae.getSchId()); | |
| 97 | + return ae; | |
| 98 | + } | |
| 80 | 99 | } | ... | ... |
src/main/java/com/bsth/data/in_out/DataRecoveryUtil.java
| 1 | 1 | package com.bsth.data.in_out; |
| 2 | 2 | |
| 3 | 3 | import com.bsth.data.in_out.buffer.BerthDataBuffer; |
| 4 | +import com.bsth.data.in_out.carpark.RealBerthManager; | |
| 4 | 5 | import com.bsth.entity.berth.RegionBerth; |
| 5 | 6 | import com.bsth.repository.berth.BerthRepository; |
| 6 | 7 | import com.google.common.collect.BiMap; |
| ... | ... | @@ -23,10 +24,10 @@ public class DataRecoveryUtil { |
| 23 | 24 | BerthRepository berthRepository; |
| 24 | 25 | |
| 25 | 26 | @Autowired |
| 26 | - RealInoutHandler realInoutHandler; | |
| 27 | + BerthDataBuffer berthDataBuffer; | |
| 27 | 28 | |
| 28 | 29 | @Autowired |
| 29 | - BerthDataBuffer berthDataBuffer; | |
| 30 | + RealBerthManager realBerthManager; | |
| 30 | 31 | |
| 31 | 32 | public void recovery(){ |
| 32 | 33 | List<RegionBerth> list = (List<RegionBerth>) berthRepository.findAll(); |
| ... | ... | @@ -44,7 +45,7 @@ public class DataRecoveryUtil { |
| 44 | 45 | car2berth.put(b.getCar(), b.getName()); |
| 45 | 46 | } |
| 46 | 47 | |
| 47 | - realInoutHandler.init(car2berth); | |
| 48 | + realBerthManager.init(car2berth); | |
| 48 | 49 | berthDataBuffer.putLocks(locks); |
| 49 | 50 | } |
| 50 | 51 | } | ... | ... |
src/main/java/com/bsth/data/in_out/RealInoutHandler.java
| 1 | 1 | package com.bsth.data.in_out; |
| 2 | 2 | |
| 3 | -import com.bsth.common.ResponseCode; | |
| 4 | -import com.bsth.data.basic.bus.BusDataBuffer; | |
| 5 | -import com.bsth.data.in_out.buffer.BerthDataBuffer; | |
| 6 | -import com.bsth.data.led_http.LedHttpPushHandler; | |
| 3 | +import com.bsth.data.abnormal.MainAbnormalClient; | |
| 4 | +import com.bsth.data.abnormal.entity.AbnormalEntity; | |
| 5 | +import com.bsth.data.in_out.carpark.RealBerthManager; | |
| 7 | 6 | import com.bsth.data.schedule.dto.ScheduleInOut; |
| 8 | 7 | import com.bsth.data.schedule.real.ScheduleDataBuffer; |
| 9 | -import com.bsth.entity.Bus; | |
| 10 | 8 | import com.bsth.entity.ac.CarInOutEntity; |
| 11 | -import com.bsth.entity.berth.RegionBerth; | |
| 12 | 9 | import com.bsth.websocket.handler.SendUtils; |
| 13 | -import com.google.common.collect.BiMap; | |
| 14 | -import com.google.common.collect.HashBiMap; | |
| 10 | +import com.google.common.collect.ArrayListMultimap; | |
| 15 | 11 | import org.apache.commons.lang3.StringUtils; |
| 16 | 12 | import org.slf4j.Logger; |
| 17 | 13 | import org.slf4j.LoggerFactory; |
| 18 | 14 | import org.springframework.beans.factory.annotation.Autowired; |
| 19 | 15 | import org.springframework.stereotype.Component; |
| 20 | 16 | |
| 21 | -import java.util.HashMap; | |
| 22 | 17 | import java.util.LinkedList; |
| 23 | -import java.util.List; | |
| 24 | -import java.util.Map; | |
| 25 | 18 | |
| 26 | 19 | /** |
| 27 | 20 | * 实时进出场数据处理程序 |
| ... | ... | @@ -32,24 +25,26 @@ public class RealInoutHandler { |
| 32 | 25 | |
| 33 | 26 | static Logger logger = LoggerFactory.getLogger(RealInoutHandler.class); |
| 34 | 27 | |
| 28 | + @Autowired | |
| 29 | + SendUtils sendUtils; | |
| 30 | + | |
| 31 | + @Autowired | |
| 32 | + RealBerthManager realBerthManager; | |
| 33 | + | |
| 34 | + @Autowired | |
| 35 | + MainAbnormalClient mainAbnormalClient; | |
| 36 | + | |
| 35 | 37 | /** |
| 36 | - * 车辆自编号和停放泊位号对照 | |
| 38 | + * K:车辆自编号 V:实际RFID进出场数据 | |
| 37 | 39 | */ |
| 38 | - private static BiMap<String, String> car2berthMap; | |
| 40 | + private static ArrayListMultimap<String, CarInOutEntity> rfidSignalMaps; | |
| 39 | 41 | |
| 40 | 42 | //待入库数据 |
| 41 | 43 | public static LinkedList<CarInOutEntity> psts; |
| 42 | 44 | |
| 43 | - @Autowired | |
| 44 | - SendUtils sendUtils; | |
| 45 | - | |
| 46 | 45 | static { |
| 47 | - car2berthMap = HashBiMap.create(); | |
| 48 | 46 | psts = new LinkedList(); |
| 49 | - } | |
| 50 | - | |
| 51 | - public void init(BiMap<String, String> map){ | |
| 52 | - car2berthMap = map; | |
| 47 | + rfidSignalMaps = ArrayListMultimap.create(); | |
| 53 | 48 | } |
| 54 | 49 | |
| 55 | 50 | /** |
| ... | ... | @@ -57,8 +52,9 @@ public class RealInoutHandler { |
| 57 | 52 | * @param cio |
| 58 | 53 | */ |
| 59 | 54 | public void inOut(CarInOutEntity cio) { |
| 60 | - //公交车 | |
| 61 | - if(0 == cio.getCarType()){ | |
| 55 | + rfidSignalMaps.put(cio.getNbbm(), cio); | |
| 56 | + | |
| 57 | + if(0 == cio.getCarType()){//公交车 | |
| 62 | 58 | //获取对应的计划排班 |
| 63 | 59 | ScheduleInOut sch = ScheduleDataBuffer.get(cio); |
| 64 | 60 | |
| ... | ... | @@ -71,79 +67,54 @@ public class RealInoutHandler { |
| 71 | 67 | psts.add(cio); |
| 72 | 68 | |
| 73 | 69 | if (cio.getType() == 2 || cio.getType() == 1)//待进 和 实进 |
| 74 | - busIn(cio); //公交车进场 | |
| 70 | + realBerthManager.busIn(cio); //公交车进场 | |
| 75 | 71 | else if (cio.getType() == 4) |
| 76 | - busOut(cio); //公交车出场 | |
| 72 | + realBerthManager.busOut(cio); //公交车出场 | |
| 73 | + | |
| 74 | + //处理异常监管的班次信息 | |
| 75 | + attachRfidTime(sch, cio); | |
| 77 | 76 | } |
| 78 | 77 | } |
| 79 | 78 | |
| 80 | - private void busOut(CarInOutEntity cio) { | |
| 81 | - car2berthMap.remove(cio.getNbbm()); | |
| 82 | - | |
| 83 | - //led | |
| 84 | - LedHttpPushHandler.busOut(cio); | |
| 85 | - //通知客户端 | |
| 86 | - sendUtils.sendCarOut(cio.getNbbm(), cio.getT()); | |
| 79 | + /** | |
| 80 | + * 处理异常监管的班次信息 | |
| 81 | + * @param sio | |
| 82 | + * @param cio | |
| 83 | + */ | |
| 84 | + public void attachRfidTime(ScheduleInOut sio, CarInOutEntity cio){ | |
| 85 | + if(sio.getBcType().equals("out")){//出场班次 | |
| 86 | + if(sio.getOutTimeRfid() == null || | |
| 87 | + (null != sio.getOutTimeRfid() && outSignalMatch(sio, cio))){ | |
| 88 | + | |
| 89 | + //是否是一个更合适的信号 | |
| 90 | + sio.setOutTimeRfid(cio.getT()); | |
| 91 | + //处理相关异常 | |
| 92 | + AbnormalEntity ae = mainAbnormalClient.rfidOut(sio); | |
| 93 | + | |
| 94 | + //通知页面 | |
| 95 | + sendUtils.scheduleOut(sio, ae); | |
| 96 | + } | |
| 97 | + } | |
| 87 | 98 | } |
| 88 | 99 | |
| 89 | - private void busIn(CarInOutEntity cio) { | |
| 90 | - String nbbm = cio.getNbbm(); | |
| 91 | - if (StringUtils.isEmpty(nbbm)) | |
| 92 | - return; | |
| 93 | - | |
| 94 | - | |
| 95 | - //车辆已经在泊位上,先移除(可能没有出场信号) | |
| 96 | - if(car2berthMap.containsKey(nbbm)){ | |
| 97 | - if(cio.getType()==1)//待进 | |
| 98 | - return; | |
| 99 | - car2berthMap.remove(nbbm); | |
| 100 | - } | |
| 101 | - Bus bus = BusDataBuffer.findOne(nbbm); | |
| 102 | - //非电车,停柴油泊位区 | |
| 103 | - if(!bus.isSfdc()){ | |
| 104 | - LedHttpPushHandler.busIn(bus.getCarPlate(), "柴油泊位区"); | |
| 105 | - return; | |
| 106 | - } | |
| 100 | + /** | |
| 101 | + * 信号匹配, | |
| 102 | + * @param sio | |
| 103 | + * @param cio | |
| 104 | + * @return true : 是更合适的信号 | |
| 105 | + */ | |
| 106 | + public boolean outSignalMatch(ScheduleInOut sio, CarInOutEntity cio){ | |
| 107 | + long diff1 = sio.getOutTimeRfid() - sio.getDfsjT(); | |
| 108 | + long diff2 = cio.getT() - sio.getDfsjT(); | |
| 107 | 109 | |
| 108 | - //是否有固定泊位 | |
| 109 | - String lockBName = BerthDataBuffer.getLockBerthName(nbbm); | |
| 110 | - if(StringUtils.isNotEmpty(lockBName)){ | |
| 111 | - if(cio.getType()==2) | |
| 112 | - car2berthMap.put(nbbm, lockBName); | |
| 113 | - else { | |
| 114 | - //泊位引导 | |
| 115 | - LedHttpPushHandler.busIn(bus.getCarPlate(), lockBName); | |
| 116 | - } | |
| 117 | - } | |
| 118 | - else{ | |
| 119 | - //停空闲泊位 | |
| 120 | - List<RegionBerth> berthList = BerthDataBuffer.allNoLock(); | |
| 121 | - RegionBerth free = null; | |
| 122 | - for(RegionBerth b : berthList){ | |
| 123 | - //被占用的泊位 | |
| 124 | - if(car2berthMap.inverse().containsKey(b.getName())) | |
| 125 | - continue; | |
| 126 | - //被禁用的泊位 | |
| 127 | - if(BerthDataBuffer.isLock(b.getName())) | |
| 128 | - continue; | |
| 129 | - free = b; | |
| 130 | - break; | |
| 131 | - } | |
| 132 | - if(null != free){ | |
| 133 | - if(cio.getType()==2) | |
| 134 | - car2berthMap.put(nbbm, free.getName()); | |
| 135 | - else{ | |
| 136 | - //泊位引导 | |
| 137 | - LedHttpPushHandler.busIn(nbbm, free.getName()); | |
| 138 | - } | |
| 139 | - } | |
| 140 | - else | |
| 141 | - logger.info("没有空余泊位了"); | |
| 110 | + if(diff1 <= 0 && diff2 <= 0){//都在计划时间之前,用最靠近的信号 | |
| 111 | + return diff1<diff2; | |
| 142 | 112 | } |
| 143 | 113 | |
| 144 | - //通知客户端 | |
| 145 | - if(cio.getType() == 2) | |
| 146 | - sendUtils.sendCarIn(nbbm, car2berthMap.get(nbbm), cio.getT()); | |
| 114 | + if(Math.abs(diff1) > 1000 * 60 * 30 | |
| 115 | + && Math.abs(diff2) < 1000 * 60 * 5) | |
| 116 | + return true; | |
| 117 | + return false; | |
| 147 | 118 | } |
| 148 | 119 | |
| 149 | 120 | private void addPlanFiled(CarInOutEntity cio, ScheduleInOut sch) { |
| ... | ... | @@ -170,95 +141,12 @@ public class RealInoutHandler { |
| 170 | 141 | } |
| 171 | 142 | } |
| 172 | 143 | |
| 173 | - public static Map<String, String> getCar2berthMap(){ | |
| 174 | - return car2berthMap; | |
| 175 | - } | |
| 176 | - | |
| 177 | 144 | /** |
| 178 | - * 添加车辆和泊位对照 | |
| 145 | + * 重新匹配2辆车的计划和实际信号 | |
| 146 | + * @param oldName | |
| 179 | 147 | * @param nbbm |
| 180 | - * @param berthName | |
| 181 | - * @return | |
| 182 | - */ | |
| 183 | - public Map<String, Object> addCar2Berth(String nbbm, String berthName) { | |
| 184 | - Map<String, Object> rs = new HashMap<>(); | |
| 185 | - | |
| 186 | - try{ | |
| 187 | - if(car2berthMap.containsKey(nbbm)) | |
| 188 | - car2berthMap.remove(nbbm); | |
| 189 | - | |
| 190 | - if(car2berthMap.inverse().containsKey(berthName)) | |
| 191 | - car2berthMap.inverse().remove(berthName); | |
| 192 | - | |
| 193 | - car2berthMap.put(nbbm, berthName); | |
| 194 | - rs.put("status", ResponseCode.SUCCESS); | |
| 195 | - }catch (Exception e){ | |
| 196 | - logger.error("", e); | |
| 197 | - rs.put("status", ResponseCode.ERROR); | |
| 198 | - } | |
| 199 | - return rs; | |
| 200 | - } | |
| 201 | - | |
| 202 | - /** | |
| 203 | - * 删除指定泊位上的车辆 | |
| 204 | - * @param berthName | |
| 205 | - * @return | |
| 206 | - */ | |
| 207 | - public Map<String, Object> removeCar2Berth(String berthName) { | |
| 208 | - Map<String, Object> rs = new HashMap<>(); | |
| 209 | - | |
| 210 | - try{ | |
| 211 | - | |
| 212 | - if(car2berthMap.inverse().containsKey(berthName)) | |
| 213 | - car2berthMap.inverse().remove(berthName); | |
| 214 | - | |
| 215 | - rs.put("status", ResponseCode.SUCCESS); | |
| 216 | - }catch (Exception e){ | |
| 217 | - logger.error("", e); | |
| 218 | - rs.put("status", ResponseCode.ERROR); | |
| 219 | - } | |
| 220 | - return rs; | |
| 221 | - } | |
| 222 | - | |
| 223 | - /** | |
| 224 | - * 对换指定2个泊位上的车辆 | |
| 225 | - * @param s | |
| 226 | - * @param d | |
| 227 | - * @return | |
| 228 | 148 | */ |
| 229 | - public static Map<String, Object> changeCar2Berth(String s, String d) { | |
| 230 | - Map<String, Object> rs = new HashMap<>(); | |
| 231 | - | |
| 232 | - try{ | |
| 233 | - | |
| 234 | - Map<String, String> inverseMap = car2berthMap.inverse(); | |
| 235 | - | |
| 236 | - String sv = inverseMap.get(s); | |
| 237 | - String dv = inverseMap.get(d); | |
| 238 | - | |
| 239 | - if(sv != null){ | |
| 240 | - inverseMap.remove(s); | |
| 241 | - inverseMap.put(d, sv); | |
| 242 | - } | |
| 243 | - else | |
| 244 | - inverseMap.remove(d); | |
| 245 | - | |
| 246 | - if(dv != null) | |
| 247 | - inverseMap.put(s, dv); | |
| 248 | - | |
| 249 | - rs.put("status", ResponseCode.SUCCESS); | |
| 250 | - }catch (Exception e){ | |
| 251 | - logger.error("", e); | |
| 252 | - rs.put("status", ResponseCode.ERROR); | |
| 253 | - } | |
| 254 | - return rs; | |
| 255 | - } | |
| 256 | - | |
| 257 | - public boolean containsBerth(String berthName) { | |
| 258 | - return car2berthMap.inverse().containsKey(berthName); | |
| 259 | - } | |
| 149 | + public static void reCalcOutSignal(String oldName, String nbbm) { | |
| 260 | 150 | |
| 261 | - public int size() { | |
| 262 | - return car2berthMap.size(); | |
| 263 | 151 | } |
| 264 | 152 | } | ... | ... |
src/main/java/com/bsth/data/in_out/buffer/BerthDataBuffer.java
| 1 | 1 | package com.bsth.data.in_out.buffer; |
| 2 | 2 | |
| 3 | 3 | import com.bsth.common.ResponseCode; |
| 4 | -import com.bsth.data.in_out.RealInoutHandler; | |
| 4 | +import com.bsth.data.in_out.carpark.RealBerthManager; | |
| 5 | 5 | import com.bsth.entity.berth.RegionBerth; |
| 6 | 6 | import com.bsth.repository.berth.BerthRepository; |
| 7 | 7 | import com.google.common.collect.BiMap; |
| ... | ... | @@ -42,7 +42,7 @@ public class BerthDataBuffer { |
| 42 | 42 | private static BiMap<String, String> lockBerthMap; |
| 43 | 43 | |
| 44 | 44 | @Autowired |
| 45 | - RealInoutHandler realInoutHandler; | |
| 45 | + RealBerthManager realBerthManager; | |
| 46 | 46 | |
| 47 | 47 | @Autowired |
| 48 | 48 | private BerthComp comp; |
| ... | ... | @@ -124,14 +124,14 @@ public class BerthDataBuffer { |
| 124 | 124 | car2berth.put(berth.getCar(), berth.getName()); |
| 125 | 125 | } |
| 126 | 126 | nameMap = nameMapCopy; |
| 127 | - realInoutHandler.init(car2berth); | |
| 127 | + realBerthManager.init(car2berth); | |
| 128 | 128 | putLocks(locks); |
| 129 | 129 | } |
| 130 | 130 | |
| 131 | 131 | public Map<String, Object> lockBerth(String berthName) { |
| 132 | 132 | Map<String, Object> rs = new HashMap<>(); |
| 133 | 133 | try{ |
| 134 | - if(realInoutHandler.containsBerth(berthName)){ | |
| 134 | + if(realBerthManager.containsBerth(berthName)){ | |
| 135 | 135 | rs.put("status", ResponseCode.ERROR); |
| 136 | 136 | rs.put("msg", "请先清除泊位上的车辆,再尝试禁用泊位"); |
| 137 | 137 | } | ... | ... |
src/main/java/com/bsth/data/in_out/carpark/RealBerthManager.java
0 → 100644
| 1 | +package com.bsth.data.in_out.carpark; | |
| 2 | + | |
| 3 | +import com.bsth.common.ResponseCode; | |
| 4 | +import com.bsth.data.basic.bus.BusDataBuffer; | |
| 5 | +import com.bsth.data.in_out.buffer.BerthDataBuffer; | |
| 6 | +import com.bsth.data.led_http.LedHttpPushHandler; | |
| 7 | +import com.bsth.entity.Bus; | |
| 8 | +import com.bsth.entity.ac.CarInOutEntity; | |
| 9 | +import com.bsth.entity.berth.RegionBerth; | |
| 10 | +import com.bsth.websocket.handler.SendUtils; | |
| 11 | +import com.google.common.collect.BiMap; | |
| 12 | +import com.google.common.collect.HashBiMap; | |
| 13 | +import org.apache.commons.lang3.StringUtils; | |
| 14 | +import org.slf4j.Logger; | |
| 15 | +import org.slf4j.LoggerFactory; | |
| 16 | +import org.springframework.beans.factory.annotation.Autowired; | |
| 17 | +import org.springframework.stereotype.Component; | |
| 18 | + | |
| 19 | +import java.util.HashMap; | |
| 20 | +import java.util.List; | |
| 21 | +import java.util.Map; | |
| 22 | + | |
| 23 | +/** | |
| 24 | + * 实时泊位停放管理 | |
| 25 | + * Created by panzhao on 2018/3/26. | |
| 26 | + */ | |
| 27 | +@Component | |
| 28 | +public class RealBerthManager { | |
| 29 | + | |
| 30 | + static Logger logger = LoggerFactory.getLogger(RealBerthManager.class); | |
| 31 | + | |
| 32 | + @Autowired | |
| 33 | + SendUtils sendUtils; | |
| 34 | + | |
| 35 | + /** | |
| 36 | + * 车辆自编号和停放泊位号对照 | |
| 37 | + */ | |
| 38 | + private static BiMap<String, String> car2berthMap; | |
| 39 | + | |
| 40 | + static { | |
| 41 | + car2berthMap = HashBiMap.create(); | |
| 42 | + } | |
| 43 | + | |
| 44 | + public void init(BiMap<String, String> map){ | |
| 45 | + car2berthMap = map; | |
| 46 | + } | |
| 47 | + | |
| 48 | + public void busIn(CarInOutEntity cio){ | |
| 49 | + | |
| 50 | + String nbbm = cio.getNbbm(); | |
| 51 | + if (StringUtils.isEmpty(nbbm)) | |
| 52 | + return; | |
| 53 | + | |
| 54 | + | |
| 55 | + //车辆已经在泊位上,先移除(可能没有出场信号) | |
| 56 | + if(car2berthMap.containsKey(nbbm)){ | |
| 57 | + if(cio.getType()==1)//待进 | |
| 58 | + return; | |
| 59 | + car2berthMap.remove(nbbm); | |
| 60 | + } | |
| 61 | + Bus bus = BusDataBuffer.findOne(nbbm); | |
| 62 | + //非电车,停柴油泊位区 | |
| 63 | + if(!bus.isSfdc()){ | |
| 64 | + LedHttpPushHandler.busIn(bus.getCarPlate(), "柴油泊位区"); | |
| 65 | + return; | |
| 66 | + } | |
| 67 | + | |
| 68 | + //是否有固定泊位 | |
| 69 | + String lockBName = BerthDataBuffer.getLockBerthName(nbbm); | |
| 70 | + if(StringUtils.isNotEmpty(lockBName)){ | |
| 71 | + if(cio.getType()==2) | |
| 72 | + car2berthMap.put(nbbm, lockBName); | |
| 73 | + else { | |
| 74 | + //泊位引导 | |
| 75 | + LedHttpPushHandler.busIn(bus.getCarPlate(), lockBName); | |
| 76 | + } | |
| 77 | + } | |
| 78 | + else{ | |
| 79 | + //停空闲泊位 | |
| 80 | + List<RegionBerth> berthList = BerthDataBuffer.allNoLock(); | |
| 81 | + RegionBerth free = null; | |
| 82 | + for(RegionBerth b : berthList){ | |
| 83 | + //被占用的泊位 | |
| 84 | + if(car2berthMap.inverse().containsKey(b.getName())) | |
| 85 | + continue; | |
| 86 | + //被禁用的泊位 | |
| 87 | + if(BerthDataBuffer.isLock(b.getName())) | |
| 88 | + continue; | |
| 89 | + free = b; | |
| 90 | + break; | |
| 91 | + } | |
| 92 | + if(null != free){ | |
| 93 | + if(cio.getType()==2) | |
| 94 | + car2berthMap.put(nbbm, free.getName()); | |
| 95 | + else{ | |
| 96 | + //泊位引导 | |
| 97 | + LedHttpPushHandler.busIn(nbbm, free.getName()); | |
| 98 | + } | |
| 99 | + } | |
| 100 | + else | |
| 101 | + logger.info("没有空余泊位了"); | |
| 102 | + } | |
| 103 | + | |
| 104 | + //通知客户端 | |
| 105 | + if(cio.getType() == 2) | |
| 106 | + sendUtils.sendCarIn(nbbm, car2berthMap.get(nbbm), cio.getT()); | |
| 107 | + } | |
| 108 | + | |
| 109 | + public void busOut(CarInOutEntity cio) { | |
| 110 | + car2berthMap.remove(cio.getNbbm()); | |
| 111 | + | |
| 112 | + //led | |
| 113 | + LedHttpPushHandler.busOut(cio); | |
| 114 | + //通知客户端 | |
| 115 | + sendUtils.sendCarOut(cio.getNbbm(), cio.getT()); | |
| 116 | + } | |
| 117 | + | |
| 118 | + public static Map<String, String> getCar2berthMap(){ | |
| 119 | + return car2berthMap; | |
| 120 | + } | |
| 121 | + | |
| 122 | + /** | |
| 123 | + * 添加车辆和泊位对照 | |
| 124 | + * @param nbbm | |
| 125 | + * @param berthName | |
| 126 | + * @return | |
| 127 | + */ | |
| 128 | + public Map<String, Object> addCar2Berth(String nbbm, String berthName) { | |
| 129 | + Map<String, Object> rs = new HashMap<>(); | |
| 130 | + | |
| 131 | + try{ | |
| 132 | + if(car2berthMap.containsKey(nbbm)) | |
| 133 | + car2berthMap.remove(nbbm); | |
| 134 | + | |
| 135 | + if(car2berthMap.inverse().containsKey(berthName)) | |
| 136 | + car2berthMap.inverse().remove(berthName); | |
| 137 | + | |
| 138 | + car2berthMap.put(nbbm, berthName); | |
| 139 | + rs.put("status", ResponseCode.SUCCESS); | |
| 140 | + }catch (Exception e){ | |
| 141 | + logger.error("", e); | |
| 142 | + rs.put("status", ResponseCode.ERROR); | |
| 143 | + } | |
| 144 | + return rs; | |
| 145 | + } | |
| 146 | + | |
| 147 | + /** | |
| 148 | + * 删除指定泊位上的车辆 | |
| 149 | + * @param berthName | |
| 150 | + * @return | |
| 151 | + */ | |
| 152 | + public Map<String, Object> removeCar2Berth(String berthName) { | |
| 153 | + Map<String, Object> rs = new HashMap<>(); | |
| 154 | + | |
| 155 | + try{ | |
| 156 | + | |
| 157 | + if(car2berthMap.inverse().containsKey(berthName)) | |
| 158 | + car2berthMap.inverse().remove(berthName); | |
| 159 | + | |
| 160 | + rs.put("status", ResponseCode.SUCCESS); | |
| 161 | + }catch (Exception e){ | |
| 162 | + logger.error("", e); | |
| 163 | + rs.put("status", ResponseCode.ERROR); | |
| 164 | + } | |
| 165 | + return rs; | |
| 166 | + } | |
| 167 | + | |
| 168 | + /** | |
| 169 | + * 对换指定2个泊位上的车辆 | |
| 170 | + * @param s | |
| 171 | + * @param d | |
| 172 | + * @return | |
| 173 | + */ | |
| 174 | + public static Map<String, Object> changeCar2Berth(String s, String d) { | |
| 175 | + Map<String, Object> rs = new HashMap<>(); | |
| 176 | + | |
| 177 | + try{ | |
| 178 | + | |
| 179 | + Map<String, String> inverseMap = car2berthMap.inverse(); | |
| 180 | + | |
| 181 | + String sv = inverseMap.get(s); | |
| 182 | + String dv = inverseMap.get(d); | |
| 183 | + | |
| 184 | + if(sv != null){ | |
| 185 | + inverseMap.remove(s); | |
| 186 | + inverseMap.put(d, sv); | |
| 187 | + } | |
| 188 | + else | |
| 189 | + inverseMap.remove(d); | |
| 190 | + | |
| 191 | + if(dv != null) | |
| 192 | + inverseMap.put(s, dv); | |
| 193 | + | |
| 194 | + rs.put("status", ResponseCode.SUCCESS); | |
| 195 | + }catch (Exception e){ | |
| 196 | + logger.error("", e); | |
| 197 | + rs.put("status", ResponseCode.ERROR); | |
| 198 | + } | |
| 199 | + return rs; | |
| 200 | + } | |
| 201 | + | |
| 202 | + public boolean containsBerth(String berthName) { | |
| 203 | + return car2berthMap.inverse().containsKey(berthName); | |
| 204 | + } | |
| 205 | + | |
| 206 | + public int size() { | |
| 207 | + return car2berthMap.size(); | |
| 208 | + } | |
| 209 | +} | ... | ... |
src/main/java/com/bsth/data/in_out/thread/Car2BerthDataPstThread.java
| 1 | 1 | package com.bsth.data.in_out.thread; |
| 2 | 2 | |
| 3 | -import com.bsth.data.in_out.RealInoutHandler; | |
| 3 | +import com.bsth.data.in_out.carpark.RealBerthManager; | |
| 4 | 4 | import org.slf4j.Logger; |
| 5 | 5 | import org.slf4j.LoggerFactory; |
| 6 | 6 | import org.springframework.beans.factory.annotation.Autowired; |
| ... | ... | @@ -33,7 +33,7 @@ public class Car2BerthDataPstThread extends Thread { |
| 33 | 33 | @Override |
| 34 | 34 | public void run() { |
| 35 | 35 | try { |
| 36 | - final Map<String, String> map = RealInoutHandler.getCar2berthMap(); | |
| 36 | + final Map<String, String> map = RealBerthManager.getCar2berthMap(); | |
| 37 | 37 | final List<String> ks = new ArrayList<>(map.keySet()); |
| 38 | 38 | |
| 39 | 39 | //编程式事务 | ... | ... |
src/main/java/com/bsth/data/led_http/LedHttpPushHandler.java
| 1 | 1 | package com.bsth.data.led_http; |
| 2 | 2 | |
| 3 | -import com.bsth.data.in_out.RealInoutHandler; | |
| 4 | 3 | import com.bsth.data.in_out.buffer.BerthDataBuffer; |
| 5 | 4 | import com.bsth.data.in_out.buffer.ElectricDataBuffer; |
| 5 | +import com.bsth.data.in_out.carpark.RealBerthManager; | |
| 6 | 6 | import com.bsth.data.utils.HttpClientUtils_tms; |
| 7 | 7 | import com.bsth.entity.ac.CarInOutEntity; |
| 8 | 8 | import com.bsth.entity.berth.RegionBerth; |
| ... | ... | @@ -30,8 +30,9 @@ public class LedHttpPushHandler { |
| 30 | 30 | private static String baseUrl; |
| 31 | 31 | //private static String outUrl; |
| 32 | 32 | |
| 33 | + | |
| 33 | 34 | @Autowired |
| 34 | - RealInoutHandler realInoutHandler; | |
| 35 | + RealBerthManager realBerthManager; | |
| 35 | 36 | |
| 36 | 37 | //上次发送停放信息时间戳 |
| 37 | 38 | private static long send_tfxx_time=System.currentTimeMillis(); |
| ... | ... | @@ -87,9 +88,9 @@ public class LedHttpPushHandler { |
| 87 | 88 | List<RegionBerth> list = BerthDataBuffer.all(); |
| 88 | 89 | can = list.size(); |
| 89 | 90 | |
| 90 | - yet = realInoutHandler.size(); | |
| 91 | + yet = realBerthManager.size(); | |
| 91 | 92 | |
| 92 | - Map<String, String> map = realInoutHandler.getCar2berthMap(); | |
| 93 | + Map<String, String> map = realBerthManager.getCar2berthMap(); | |
| 93 | 94 | Set<String> ks = map.keySet(); |
| 94 | 95 | |
| 95 | 96 | Double soc; | ... | ... |
src/main/java/com/bsth/data/schedule/real/ScheduleDataBuffer.java
| ... | ... | @@ -3,6 +3,7 @@ package com.bsth.data.schedule.real; |
| 3 | 3 | import com.alibaba.fastjson.JSON; |
| 4 | 4 | import com.bsth.Application; |
| 5 | 5 | import com.bsth.data.basic.line.LineDataBuffer; |
| 6 | +import com.bsth.data.in_out.RealInoutHandler; | |
| 6 | 7 | import com.bsth.data.schedule.dto.ScheduleInOut; |
| 7 | 8 | import com.bsth.data.utils.HttpClientUtils; |
| 8 | 9 | import com.bsth.data.utils.RsRequestUtils; |
| ... | ... | @@ -223,7 +224,10 @@ public class ScheduleDataBuffer implements CommandLineRunner { |
| 223 | 224 | } |
| 224 | 225 | |
| 225 | 226 | if (isCCar) { |
| 227 | + String oldName = old.getNbbm(); | |
| 228 | + old.setNbbm(now.getNbbm()); | |
| 226 | 229 | //重新匹配车辆计划和实际出场 |
| 230 | + RealInoutHandler.reCalcOutSignal(oldName, now.getNbbm()); | |
| 227 | 231 | } |
| 228 | 232 | } |
| 229 | 233 | ... | ... |
src/main/java/com/bsth/service/berth/impl/BerthServiceImpl.java
| ... | ... | @@ -2,7 +2,7 @@ package com.bsth.service.berth.impl; |
| 2 | 2 | |
| 3 | 3 | import com.bsth.controller.berth.dto.Car2Berth; |
| 4 | 4 | import com.bsth.data.basic.bus.BusDataBuffer; |
| 5 | -import com.bsth.data.in_out.RealInoutHandler; | |
| 5 | +import com.bsth.data.in_out.carpark.RealBerthManager; | |
| 6 | 6 | import com.bsth.entity.berth.RegionBerth; |
| 7 | 7 | import com.bsth.service.berth.BerthService; |
| 8 | 8 | import com.bsth.service.impl.BaseServiceImpl; |
| ... | ... | @@ -23,7 +23,7 @@ public class BerthServiceImpl extends BaseServiceImpl<RegionBerth, Integer> impl |
| 23 | 23 | public List<Car2Berth> car2Berths() { |
| 24 | 24 | List<Car2Berth> list = new ArrayList<>(); |
| 25 | 25 | //车辆自编号和停放泊位名称对照 |
| 26 | - Map<String, String> map = RealInoutHandler.getCar2berthMap(); | |
| 26 | + Map<String, String> map = RealBerthManager.getCar2berthMap(); | |
| 27 | 27 | Car2Berth c2b; |
| 28 | 28 | Set<String> ks = map.keySet(); |
| 29 | 29 | for(String nbbm : ks){ | ... | ... |
src/main/java/com/bsth/websocket/handler/SendUtils.java
| 1 | 1 | package com.bsth.websocket.handler; |
| 2 | 2 | |
| 3 | 3 | import com.bsth.data.abnormal.entity.AbnormalEntity; |
| 4 | +import com.bsth.data.schedule.dto.ScheduleInOut; | |
| 4 | 5 | import com.fasterxml.jackson.databind.ObjectMapper; |
| 5 | 6 | import org.slf4j.Logger; |
| 6 | 7 | import org.slf4j.LoggerFactory; |
| ... | ... | @@ -69,4 +70,24 @@ public class SendUtils{ |
| 69 | 70 | logger.error("", e); |
| 70 | 71 | } |
| 71 | 72 | } |
| 73 | + | |
| 74 | + /** | |
| 75 | + * 班次出场 | |
| 76 | + * @param sio | |
| 77 | + */ | |
| 78 | + public void scheduleOut(ScheduleInOut sio, AbnormalEntity ae) { | |
| 79 | + Map<String, Object> map = new HashMap<>(); | |
| 80 | + map.put("fn", "abnormal_out"); | |
| 81 | + map.put("sio", sio); | |
| 82 | + if(null != ae) | |
| 83 | + map.put("ae", ae); | |
| 84 | + | |
| 85 | + ObjectMapper mapper = new ObjectMapper(); | |
| 86 | + | |
| 87 | + try { | |
| 88 | + socketHandler.sendMessage(mapper.writeValueAsString(map)); | |
| 89 | + } catch (Exception e) { | |
| 90 | + logger.error("", e); | |
| 91 | + } | |
| 92 | + } | |
| 72 | 93 | } | ... | ... |
src/main/resources/static/assets/js/ct_pagination.js deleted
100644 → 0
src/main/resources/static/index.html
| ... | ... | @@ -52,7 +52,6 @@ |
| 52 | 52 | <script src="/assets/uikit-3.0.0/js/uikit.min.js"></script> |
| 53 | 53 | <script src="/assets/uikit-3.0.0/js/uikit-icons.min.js"></script> |
| 54 | 54 | <script src="/assets/plugins/jquery.serializejson.js"></script> |
| 55 | -<script src="/assets/js/common.js"></script> | |
| 56 | 55 | <script src="/assets/plugins/template.js"></script> |
| 57 | 56 | <script src="/assets/selectize/js/standalone/selectize.min.js"></script> |
| 58 | 57 | <script src="/assets/plugins/simplePagination/jquery.simplePagination.js"></script> |
| ... | ... | @@ -72,223 +71,20 @@ |
| 72 | 71 | <script src="/assets/plugins/contextmenu/jquery.contextMenu.min.js" ></script> |
| 73 | 72 | <script src="/assets/plugins/contextmenu/jquery.ui.position.min.js" ></script> |
| 74 | 73 | <script src="/assets/plugins/toastr/toastr.min.js"></script> |
| 75 | -<script src="/assets/js/tts.js"></script> | |
| 74 | +<script src="/js/tts.js"></script> | |
| 76 | 75 | |
| 77 | -<script src="/assets/js/ct_autocompleter.js"></script> | |
| 76 | + | |
| 77 | +<script src="/js/common.js"></script> | |
| 78 | +<!-- 主JS 文件 --> | |
| 79 | +<script src="/js/main.js"></script> | |
| 80 | +<script src="/js/ct_autocompleter.js"></script> | |
| 78 | 81 | <!-- websocket --> |
| 79 | 82 | <script src="/assets/plugins/sockjs-client/sockjs.min.js"></script> |
| 80 | -<script> | |
| 81 | - | |
| 82 | - var gb_inout_websocket = (function () { | |
| 83 | - | |
| 84 | - var schSock = null; | |
| 85 | - var recInterval = null; | |
| 86 | - var reConnSpace = 1500;//重连间隔 | |
| 87 | - var reConnCount; //重连次数 | |
| 88 | - var maxReConn = 6; //最多重连次数 | |
| 89 | - | |
| 90 | - var new_conn = function () { | |
| 91 | - schSock = new SockJS('/sockjs/inout'); | |
| 92 | - schSock.onopen = function (e) { | |
| 93 | - if(reConnCount && reConnCount > 1) | |
| 94 | - console.log('重新连接websocket'); | |
| 95 | - reConnCount = 1; | |
| 96 | - clearInterval(recInterval); | |
| 97 | - console.log('webSocket[realcontrol] onopen'); | |
| 98 | - $('.top_tools').removeClass('scok-colse'); | |
| 99 | - }; | |
| 100 | - | |
| 101 | - //接收消息 | |
| 102 | - schSock.onmessage = function (e) { | |
| 103 | - try { | |
| 104 | - var jsonMsg = $.parseJSON(e.data); | |
| 105 | - console.log('websocket...', jsonMsg); | |
| 106 | - msgHandle[jsonMsg.fn](jsonMsg); | |
| 107 | - } catch (e) { | |
| 108 | - console.log(e, e.data); | |
| 109 | - } | |
| 110 | - }; | |
| 111 | - | |
| 112 | - //断开 | |
| 113 | - schSock.onclose = function (e) { | |
| 114 | - console.log('和服务器连接断开....', e); | |
| 115 | - $('.top_tools').addClass('scok-colse'); | |
| 116 | - //1.5秒后重新连接 | |
| 117 | - recInterval = setTimeout(function () { | |
| 118 | - reConnCount++; | |
| 119 | - if(reConnCount > maxReConn){ | |
| 120 | - clearInterval(recInterval); | |
| 121 | - return; | |
| 122 | - } | |
| 123 | - new_conn(); | |
| 124 | - }, reConnSpace * reConnCount); | |
| 125 | - }; | |
| 126 | - }; | |
| 127 | - | |
| 128 | - //初始化websocket连接 | |
| 129 | - new_conn(); | |
| 130 | - | |
| 131 | - var msgHandle = { | |
| 132 | - carIn: carInFun, | |
| 133 | - carOut: carOutFun | |
| 134 | - }; | |
| 135 | - | |
| 136 | - //子片段的进出场回调 | |
| 137 | - var inoutEventCallbacks = []; | |
| 138 | - | |
| 139 | - function carInFun(msg) { | |
| 140 | - var text = msg['dataStr'] + " " +msg.nbbm + "进场" + (msg.berthName?(" 停泊位" + msg.berthName):""); | |
| 141 | - toastr.info(text); | |
| 142 | - gb_tts.speak(text); | |
| 143 | - | |
| 144 | - //CCCallFuncN | |
| 145 | - $.each(inoutEventCallbacks, function (i, cb) { | |
| 146 | - cb(msg); | |
| 147 | - }); | |
| 148 | - } | |
| 149 | - | |
| 150 | - function carOutFun(msg) { | |
| 151 | - var text = msg['dataStr'] + " " + msg.nbbm + " 出场"; | |
| 152 | - toastr.info(text); | |
| 153 | - gb_tts.speak(text); | |
| 154 | - | |
| 155 | - //CCCallFuncN | |
| 156 | - $.each(inoutEventCallbacks, function (i, cb) { | |
| 157 | - cb(msg); | |
| 158 | - }); | |
| 159 | - } | |
| 160 | - | |
| 161 | - | |
| 162 | - var registerCallback = function (cb) { | |
| 163 | - if (cb) | |
| 164 | - inoutEventCallbacks.push(cb); | |
| 165 | - }; | |
| 166 | - | |
| 167 | - var cancelCallback = function (cb) { | |
| 168 | - if(cb){ | |
| 169 | - removeByValue(inoutEventCallbacks, cb); | |
| 170 | - } | |
| 171 | - }; | |
| 172 | - | |
| 173 | - return { | |
| 174 | - registerCallback: registerCallback, | |
| 175 | - cancelCallback: cancelCallback | |
| 176 | - } | |
| 177 | - })(); | |
| 178 | -</script> | |
| 179 | - | |
| 180 | -<script> | |
| 181 | - var company_json, company_code_name={}; | |
| 182 | - var cont = $('.ct-container'); | |
| 183 | - var top_btn_list = $('.ct-btn-list', cont); | |
| 184 | - var current_tcc_name, current_tcc_code; | |
| 185 | - | |
| 186 | - //按公司_分公司分组的线路数据 | |
| 187 | - var groupLineArrays; | |
| 188 | - | |
| 189 | - $('.ct-btn-link', top_btn_list).on('click', function () { | |
| 190 | - var page = $(this).data('page'); | |
| 191 | - if(!page) | |
| 192 | - return; | |
| 193 | - var that = this; | |
| 194 | - $('.ct-cont-body', cont).trigger('exit').empty().load(page, function () { | |
| 195 | - $('.ct-btn-link.active', top_btn_list).removeClass('active'); | |
| 196 | - $(that).addClass('active'); | |
| 197 | - }); | |
| 198 | - }); | |
| 199 | - | |
| 200 | - //停车场信息 | |
| 201 | - $.get('/company_json/curr_tcc_info', function (rs) { | |
| 202 | - current_tcc_name = rs.name; | |
| 203 | - current_tcc_code = rs.code; | |
| 204 | - }); | |
| 205 | - | |
| 206 | - //loading end... | |
| 207 | - var ep = EventProxy.create('load_company', 'load_lines', function (companyData, linesData) { | |
| 208 | - groupLineArrays = {}; | |
| 209 | - var key; | |
| 210 | - $.each(linesData, function () { | |
| 211 | - key = this['company']+'_'+this['brancheCompany']; | |
| 212 | - if(!groupLineArrays[key]) | |
| 213 | - groupLineArrays[key] = []; | |
| 214 | - | |
| 215 | - groupLineArrays[key].push(this); | |
| 216 | - }); | |
| 217 | - //默认显示 | |
| 218 | - $('.ct-btn-link[data-name=b_p_manager]').trigger('click'); | |
| 219 | - }); | |
| 220 | - | |
| 221 | - //加载公司编码对照数据 | |
| 222 | - $.get('/company_json', function (rs) { | |
| 223 | - company_json = JSON.parse(rs); | |
| 224 | - for(var c in company_json){ | |
| 225 | - company_code_name[c] = company_json[c].name; | |
| 226 | - for(var f in company_json[c]['fgs']) | |
| 227 | - company_code_name[c+'_'+f]=company_json[c]['fgs'][f]; | |
| 228 | - } | |
| 229 | - ep.emit('load_company', company_json); | |
| 230 | - }); | |
| 231 | - | |
| 232 | - //加载线路数据 | |
| 233 | - $.get('/line/all', function (rs) { | |
| 234 | - ep.emit('load_lines', rs.list); | |
| 235 | - }); | |
| 236 | - | |
| 237 | - $(document).on('submit', 'form', function () { | |
| 238 | - return false; | |
| 239 | - }); | |
| 240 | - | |
| 241 | - | |
| 242 | - //modal hidden | |
| 243 | - $(document).on('hidden', '.uk-modal', function () { | |
| 244 | - $(this).remove(); | |
| 245 | - }); | |
| 246 | - | |
| 247 | - //switcher hidden stopPropagation | |
| 248 | - $(document).on('hidden', '.uk-switcher', function (e) { | |
| 249 | - e.stopPropagation(); | |
| 250 | - }); | |
| 251 | - | |
| 252 | - var gb_form_validation_opts = { | |
| 253 | - framework: 'uikit', | |
| 254 | - locale: 'zh_CN', | |
| 255 | - icon: { | |
| 256 | - valid: 'uk-icon-check', | |
| 257 | - invalid: 'uk-icon-times', | |
| 258 | - validating: 'uk-icon-refresh' | |
| 259 | - } | |
| 260 | - }; | |
| 261 | - | |
| 262 | - var flatpickrDateTimeConfig = { | |
| 263 | - enableTime: true, | |
| 264 | - time_24hr: true, | |
| 265 | - "locale": "zh", | |
| 266 | - onOpen: function () { | |
| 267 | - $(this.calendarContainer).addClass('showTimeInput'); | |
| 268 | - } | |
| 269 | - }; | |
| 270 | - | |
| 271 | - toastr.options = { | |
| 272 | - "timeOut": "10000" | |
| 273 | - }; | |
| 274 | - | |
| 275 | - function removeByValue(arr, val) { | |
| 276 | - for(var i=0; i<arr.length; i++) { | |
| 277 | - if(arr[i] == val) { | |
| 278 | - arr.splice(i, 1); | |
| 279 | - break; | |
| 280 | - } | |
| 281 | - } | |
| 282 | - } | |
| 283 | - | |
| 284 | - var isArray = function (obj) { | |
| 285 | - return Object.prototype.toString.call(obj) === '[object Array]'; | |
| 286 | - }; | |
| 287 | -</script> | |
| 288 | - | |
| 83 | +<script src="/js/_websocket.js"></script> | |
| 289 | 84 | <!-- 异常监管 JS --> |
| 290 | 85 | <script src="/pages/abnormal/js/o_s_card.js"></script> |
| 291 | 86 | <script src="/pages/abnormal/js/o_s_abnormal.js"></script> |
| 292 | 87 | <script src="/pages/abnormal/js/o_s_basic_data.js"></script> |
| 88 | +<script src="/pages/abnormal/js/o_s_websocket.js"></script> | |
| 293 | 89 | </body> |
| 294 | 90 | </html> |
| 295 | 91 | \ No newline at end of file | ... | ... |
src/main/resources/static/js/_websocket.js
0 → 100644
| 1 | + | |
| 2 | +var gb_websocket = (function () { | |
| 3 | + | |
| 4 | + var schSock = null; | |
| 5 | + var recInterval = null; | |
| 6 | + var reConnSpace = 1500;//重连间隔 | |
| 7 | + var reConnCount; //重连次数 | |
| 8 | + var maxReConn = 6; //最多重连次数 | |
| 9 | + | |
| 10 | + var new_conn = function () { | |
| 11 | + schSock = new SockJS('/sockjs/inout'); | |
| 12 | + schSock.onopen = function (e) { | |
| 13 | + if(reConnCount && reConnCount > 1) | |
| 14 | + console.log('重新连接websocket'); | |
| 15 | + reConnCount = 1; | |
| 16 | + clearInterval(recInterval); | |
| 17 | + console.log('webSocket[realcontrol] onopen'); | |
| 18 | + $('.top_tools').removeClass('scok-colse'); | |
| 19 | + }; | |
| 20 | + | |
| 21 | + //接收消息 | |
| 22 | + schSock.onmessage = function (e) { | |
| 23 | + try { | |
| 24 | + var jsonMsg = $.parseJSON(e.data); | |
| 25 | + console.log('websocket...', jsonMsg); | |
| 26 | + msgHandle[jsonMsg.fn](jsonMsg); | |
| 27 | + } catch (e) { | |
| 28 | + console.log(e, e.data); | |
| 29 | + } | |
| 30 | + }; | |
| 31 | + | |
| 32 | + //断开 | |
| 33 | + schSock.onclose = function (e) { | |
| 34 | + console.log('和服务器连接断开....', e); | |
| 35 | + $('.top_tools').addClass('scok-colse'); | |
| 36 | + //1.5秒后重新连接 | |
| 37 | + recInterval = setTimeout(function () { | |
| 38 | + reConnCount++; | |
| 39 | + if(reConnCount > maxReConn){ | |
| 40 | + clearInterval(recInterval); | |
| 41 | + return; | |
| 42 | + } | |
| 43 | + new_conn(); | |
| 44 | + }, reConnSpace * reConnCount); | |
| 45 | + }; | |
| 46 | + }; | |
| 47 | + | |
| 48 | + //初始化websocket连接 | |
| 49 | + new_conn(); | |
| 50 | + | |
| 51 | + var msgHandle = { | |
| 52 | + carIn: carInFun, | |
| 53 | + carOut: carOutFun, | |
| 54 | + abnormal_out: gb_o_s_ws_handler.out | |
| 55 | + }; | |
| 56 | + | |
| 57 | + //websocket回调 | |
| 58 | + var eventCallbacks = []; | |
| 59 | + | |
| 60 | + function carInFun(msg) { | |
| 61 | + var text = msg['dataStr'] + " " +msg.nbbm + "进场" + (msg.berthName?(" 停泊位" + msg.berthName):""); | |
| 62 | + toastr.info(text); | |
| 63 | + gb_tts.speak(text); | |
| 64 | + | |
| 65 | + //CCCallFuncN | |
| 66 | + $.each(eventCallbacks, function (i, cb) { | |
| 67 | + cb(msg); | |
| 68 | + }); | |
| 69 | + } | |
| 70 | + | |
| 71 | + function carOutFun(msg) { | |
| 72 | + var text = msg['dataStr'] + " " + msg.nbbm + " 出场"; | |
| 73 | + toastr.info(text); | |
| 74 | + gb_tts.speak(text); | |
| 75 | + | |
| 76 | + //CCCallFuncN | |
| 77 | + $.each(eventCallbacks, function (i, cb) { | |
| 78 | + cb(msg); | |
| 79 | + }); | |
| 80 | + } | |
| 81 | + | |
| 82 | + var registerCallback = function (cb) { | |
| 83 | + if (cb) | |
| 84 | + eventCallbacks.push(cb); | |
| 85 | + }; | |
| 86 | + | |
| 87 | + var cancelCallback = function (cb) { | |
| 88 | + if(cb){ | |
| 89 | + removeByValue(eventCallbacks, cb); | |
| 90 | + } | |
| 91 | + }; | |
| 92 | + | |
| 93 | + return { | |
| 94 | + registerCallback: registerCallback, | |
| 95 | + cancelCallback: cancelCallback | |
| 96 | + } | |
| 97 | +})(); | |
| 0 | 98 | \ No newline at end of file | ... | ... |
src/main/resources/static/assets/js/common.js renamed to src/main/resources/static/js/common.js
src/main/resources/static/assets/js/ct_autocompleter.js renamed to src/main/resources/static/js/ct_autocompleter.js
src/main/resources/static/js/main.js
0 → 100644
| 1 | +var company_json, company_code_name = {}; | |
| 2 | +var cont = $('.ct-container'); | |
| 3 | +var top_btn_list = $('.ct-btn-list', cont); | |
| 4 | +var current_tcc_name, current_tcc_code; | |
| 5 | + | |
| 6 | +//按公司_分公司分组的线路数据 | |
| 7 | +var groupLineArrays; | |
| 8 | + | |
| 9 | +//loading end... | |
| 10 | +var ep = EventProxy.create('load_company', 'load_lines', function (companyData, linesData) { | |
| 11 | + groupLineArrays = {}; | |
| 12 | + var key; | |
| 13 | + $.each(linesData, function () { | |
| 14 | + key = this['company'] + '_' + this['brancheCompany']; | |
| 15 | + if (!groupLineArrays[key]) | |
| 16 | + groupLineArrays[key] = []; | |
| 17 | + | |
| 18 | + groupLineArrays[key].push(this); | |
| 19 | + }); | |
| 20 | + //默认显示 | |
| 21 | + $('.ct-btn-link[data-name=b_p_manager]').trigger('click'); | |
| 22 | +}); | |
| 23 | + | |
| 24 | +$('.ct-btn-link', top_btn_list).on('click', function () { | |
| 25 | + var page = $(this).data('page'); | |
| 26 | + if (!page) | |
| 27 | + return; | |
| 28 | + var that = this; | |
| 29 | + $('.ct-cont-body', cont).trigger('exit').empty().load(page, function () { | |
| 30 | + $('.ct-btn-link.active', top_btn_list).removeClass('active'); | |
| 31 | + $(that).addClass('active'); | |
| 32 | + }); | |
| 33 | +}); | |
| 34 | + | |
| 35 | +//停车场信息 | |
| 36 | +$.get('/company_json/curr_tcc_info', function (rs) { | |
| 37 | + current_tcc_name = rs.name; | |
| 38 | + current_tcc_code = rs.code; | |
| 39 | +}); | |
| 40 | + | |
| 41 | +//加载公司编码对照数据 | |
| 42 | +$.get('/company_json', function (rs) { | |
| 43 | + company_json = JSON.parse(rs); | |
| 44 | + for (var c in company_json) { | |
| 45 | + company_code_name[c] = company_json[c].name; | |
| 46 | + for (var f in company_json[c]['fgs']) | |
| 47 | + company_code_name[c + '_' + f] = company_json[c]['fgs'][f]; | |
| 48 | + } | |
| 49 | + ep.emit('load_company', company_json); | |
| 50 | +}); | |
| 51 | + | |
| 52 | +//加载线路数据 | |
| 53 | +$.get('/line/all', function (rs) { | |
| 54 | + ep.emit('load_lines', rs.list); | |
| 55 | +}); | |
| 56 | + | |
| 57 | +$(document).on('submit', 'form', function () { | |
| 58 | + return false; | |
| 59 | +}); | |
| 60 | + | |
| 61 | + | |
| 62 | +//modal hidden | |
| 63 | +$(document).on('hidden', '.uk-modal', function () { | |
| 64 | + $(this).remove(); | |
| 65 | +}); | |
| 66 | + | |
| 67 | +//switcher hidden stopPropagation | |
| 68 | +$(document).on('hidden', '.uk-switcher', function (e) { | |
| 69 | + e.stopPropagation(); | |
| 70 | +}); | |
| 71 | + | |
| 72 | +var gb_form_validation_opts = { | |
| 73 | + framework: 'uikit', | |
| 74 | + locale: 'zh_CN', | |
| 75 | + icon: { | |
| 76 | + valid: 'uk-icon-check', | |
| 77 | + invalid: 'uk-icon-times', | |
| 78 | + validating: 'uk-icon-refresh' | |
| 79 | + } | |
| 80 | +}; | |
| 81 | + | |
| 82 | +var flatpickrDateTimeConfig = { | |
| 83 | + enableTime: true, | |
| 84 | + time_24hr: true, | |
| 85 | + "locale": "zh", | |
| 86 | + onOpen: function () { | |
| 87 | + $(this.calendarContainer).addClass('showTimeInput'); | |
| 88 | + } | |
| 89 | +}; | |
| 90 | + | |
| 91 | +toastr.options = { | |
| 92 | + "timeOut": "10000" | |
| 93 | +}; | |
| 94 | + | |
| 95 | +function removeByValue(arr, val) { | |
| 96 | + for (var i = 0; i < arr.length; i++) { | |
| 97 | + if (arr[i] == val) { | |
| 98 | + arr.splice(i, 1); | |
| 99 | + break; | |
| 100 | + } | |
| 101 | + } | |
| 102 | +} | |
| 103 | + | |
| 104 | +var isArray = function (obj) { | |
| 105 | + return Object.prototype.toString.call(obj) === '[object Array]'; | |
| 106 | +}; | |
| 0 | 107 | \ No newline at end of file | ... | ... |
src/main/resources/static/assets/js/tts.js renamed to src/main/resources/static/js/tts.js
src/main/resources/static/pages/abnormal/js/o_s_websocket.js
0 → 100644
src/main/resources/static/pages/b_p_manager/b_p_main.html
| ... | ... | @@ -77,7 +77,7 @@ |
| 77 | 77 | //init drag events |
| 78 | 78 | initDragEvents(); |
| 79 | 79 | //注册websocket回调 |
| 80 | - gb_inout_websocket.registerCallback(socketInoutHandler); | |
| 80 | + gb_websocket.registerCallback(socketInoutHandler); | |
| 81 | 81 | //加载泊位信息 |
| 82 | 82 | queryRealInfos(); |
| 83 | 83 | $('.berth_card_list', wrap).perfectScrollbar('update'); | ... | ... |