Commit 283ad9e5aa021f38885cff4075f00231af5a907c
1 parent
bd8321da
update...
Showing
8 changed files
with
157 additions
and
50 deletions
src/main/java/com/bsth/data/gpsdata_v2/cache/GeoCacheData.java
| @@ -278,7 +278,7 @@ public class GeoCacheData { | @@ -278,7 +278,7 @@ public class GeoCacheData { | ||
| 278 | int len = coords.length; | 278 | int len = coords.length; |
| 279 | for (int i = 0; i < len; i++) { | 279 | for (int i = 0; i < len; i++) { |
| 280 | temps = coords[i].split(" "); | 280 | temps = coords[i].split(" "); |
| 281 | - cds.add(new Point(Float.parseFloat(temps[1]), Float.parseFloat(temps[0]))); | 281 | + cds.add(new Point(Float.parseFloat(temps[0]), Float.parseFloat(temps[1]))); |
| 282 | } | 282 | } |
| 283 | return new Polygon(cds); | 283 | return new Polygon(cds); |
| 284 | } | 284 | } |
src/main/java/com/bsth/data/gpsdata_v2/handlers/InStationProcess.java
| @@ -42,40 +42,56 @@ public class InStationProcess { | @@ -42,40 +42,56 @@ public class InStationProcess { | ||
| 42 | 42 | ||
| 43 | Logger logger = LoggerFactory.getLogger(this.getClass()); | 43 | Logger logger = LoggerFactory.getLogger(this.getClass()); |
| 44 | 44 | ||
| 45 | - public void process(GpsEntity gps){ | 45 | + public void process(GpsEntity gps) { |
| 46 | GpsEntity prev = GpsCacheData.getPrev(gps); | 46 | GpsEntity prev = GpsCacheData.getPrev(gps); |
| 47 | 47 | ||
| 48 | - if(isInsideStation(gps) && | ||
| 49 | - (prev == null || !isInsideStation(prev) || !prev.getStopNo().equals(gps.getStopNo()))){ | ||
| 50 | - inStation(gps, prev); //进站 | 48 | + if(null == prev) |
| 49 | + return; | ||
| 50 | + | ||
| 51 | + //从站外到站内 | ||
| 52 | + if(prev.getInstation() == 0 && gps.getInstation() > 0){ | ||
| 53 | + inStation(gps, prev); | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + //从站内到另一个站内 | ||
| 57 | + if(prev.getInstation() == 1 && gps.getInstation() == 1 | ||
| 58 | + && !prev.getStopNo().equals(gps.getStopNo()) | ||
| 59 | + && !prev.getStation().getName().equals(gps.getStation().getName())) | ||
| 60 | + inStation(gps, prev); | ||
| 61 | + | ||
| 62 | + //从场内到站内 | ||
| 63 | + if(prev.getInstation() == 2 && gps.getInstation() == 1){ | ||
| 64 | + inStation(gps, prev); | ||
| 51 | } | 65 | } |
| 52 | - } | ||
| 53 | 66 | ||
| 54 | - private boolean isInsideStation(GpsEntity gps){ | ||
| 55 | - return gps.getInstation() >= 1; | 67 | + //被起点站覆盖的情况下进场 |
| 68 | + if(isInPark(gps, prev)) | ||
| 69 | + inStation(gps, prev); | ||
| 56 | } | 70 | } |
| 57 | 71 | ||
| 58 | /** | 72 | /** |
| 59 | * 进站 | 73 | * 进站 |
| 74 | + * | ||
| 60 | * @param gps | 75 | * @param gps |
| 61 | * @param prev | 76 | * @param prev |
| 62 | */ | 77 | */ |
| 63 | - private void inStation(GpsEntity gps, GpsEntity prev){ | ||
| 64 | - boolean flow=true; | 78 | + private void inStation(GpsEntity gps, GpsEntity prev) { |
| 79 | + boolean flow = true; | ||
| 65 | //要经过一个中途站才能进 | 80 | //要经过一个中途站才能进 |
| 66 | StationRoute s = GpsCacheData.prevStation(gps); | 81 | StationRoute s = GpsCacheData.prevStation(gps); |
| 67 | List<StationRoute> routes = GeoCacheData.getStationRoute(gps.getLineId(), gps.getUpDown()); | 82 | List<StationRoute> routes = GeoCacheData.getStationRoute(gps.getLineId(), gps.getUpDown()); |
| 68 | - if(routes.size() > 3 && null != s && s.getName().equals(gps.getStation().getName())){ | 83 | + if (gps.getInstation() == 1 && routes.size() > 3 |
| 84 | + && null != s && s.getName().equals(gps.getStation().getName())) { | ||
| 69 | logger.info("没有进中途站,拒绝进站... -" + gps.getNbbm() + " -time:" + gps.getTimestamp()); | 85 | logger.info("没有进中途站,拒绝进站... -" + gps.getNbbm() + " -time:" + gps.getTimestamp()); |
| 70 | flow = false; | 86 | flow = false; |
| 71 | } | 87 | } |
| 72 | 88 | ||
| 73 | 89 | ||
| 74 | ScheduleRealInfo sch = dayOfSchedule.executeCurr(gps.getNbbm()); | 90 | ScheduleRealInfo sch = dayOfSchedule.executeCurr(gps.getNbbm()); |
| 75 | - boolean isEnd=false; | 91 | + boolean isEnd = false; |
| 76 | 92 | ||
| 77 | //进终点 | 93 | //进终点 |
| 78 | - if(flow && null != sch && sch.getZdzCode().equals(gps.getStopNo())){ | 94 | + if (flow && null != sch && sch.getZdzCode().equals(gps.getStopNo())) { |
| 79 | inEndStation(sch, gps); | 95 | inEndStation(sch, gps); |
| 80 | isEnd = true; | 96 | isEnd = true; |
| 81 | } | 97 | } |
| @@ -85,16 +101,17 @@ public class InStationProcess { | @@ -85,16 +101,17 @@ public class InStationProcess { | ||
| 85 | 101 | ||
| 86 | /** | 102 | /** |
| 87 | * 进班次终点 | 103 | * 进班次终点 |
| 104 | + * | ||
| 88 | * @param gps | 105 | * @param gps |
| 89 | */ | 106 | */ |
| 90 | private void inEndStation(ScheduleRealInfo sch, GpsEntity gps) { | 107 | private void inEndStation(ScheduleRealInfo sch, GpsEntity gps) { |
| 91 | String nbbm = sch.getClZbh(); | 108 | String nbbm = sch.getClZbh(); |
| 92 | //校验进站前置约束 | 109 | //校验进站前置约束 |
| 93 | - if(!validInPremise(gps)) | 110 | + if (!validInPremise(gps)) |
| 94 | return; | 111 | return; |
| 95 | 112 | ||
| 96 | //实达时间不覆盖 | 113 | //实达时间不覆盖 |
| 97 | - if(StringUtils.isNotEmpty(sch.getZdsjActual())) | 114 | + if (StringUtils.isNotEmpty(sch.getZdsjActual())) |
| 98 | return; | 115 | return; |
| 99 | 116 | ||
| 100 | //应用到离站缓冲区设置参数 | 117 | //应用到离站缓冲区设置参数 |
| @@ -110,14 +127,14 @@ public class InStationProcess { | @@ -110,14 +127,14 @@ public class InStationProcess { | ||
| 110 | 127 | ||
| 111 | //车辆的下一个班次 | 128 | //车辆的下一个班次 |
| 112 | ScheduleRealInfo next = dayOfSchedule.next(sch); | 129 | ScheduleRealInfo next = dayOfSchedule.next(sch); |
| 113 | - if(next != null){ | 130 | + if (next != null) { |
| 114 | dayOfSchedule.addExecPlan(next); | 131 | dayOfSchedule.addExecPlan(next); |
| 115 | inStationAndInPark(sch, next);//进站既进场 | 132 | inStationAndInPark(sch, next);//进站既进场 |
| 116 | } | 133 | } |
| 117 | 134 | ||
| 118 | //路牌的下一个班次,页面显示起点实际到达时间 | 135 | //路牌的下一个班次,页面显示起点实际到达时间 |
| 119 | ScheduleRealInfo lpNext = dayOfSchedule.nextByLp(sch); | 136 | ScheduleRealInfo lpNext = dayOfSchedule.nextByLp(sch); |
| 120 | - if(lpNext != null){ | 137 | + if (lpNext != null) { |
| 121 | lpNext.setQdzArrDatesj(sch.getZdsjActual()); | 138 | lpNext.setQdzArrDatesj(sch.getZdsjActual()); |
| 122 | } | 139 | } |
| 123 | 140 | ||
| @@ -138,33 +155,33 @@ public class InStationProcess { | @@ -138,33 +155,33 @@ public class InStationProcess { | ||
| 138 | DirectivePushQueue.put6002(next, doneSum, "到站@系统"); | 155 | DirectivePushQueue.put6002(next, doneSum, "到站@系统"); |
| 139 | 156 | ||
| 140 | //套跑 -下发线路切换指令 | 157 | //套跑 -下发线路切换指令 |
| 141 | - if(null != next && !next.getXlBm().equals(sch.getXlBm())){ | 158 | + if (null != next && !next.getXlBm().equals(sch.getXlBm())) { |
| 142 | gpsStatusManager.changeLine(next.getClZbh(), next.getXlBm(), "套跑@系统"); | 159 | gpsStatusManager.changeLine(next.getClZbh(), next.getXlBm(), "套跑@系统"); |
| 143 | } | 160 | } |
| 144 | 161 | ||
| 145 | - if(null == next && gps.isService()) | 162 | + if (null == next && gps.isService()) |
| 146 | nonService(sch, "结束@系统");//班次结束 | 163 | nonService(sch, "结束@系统");//班次结束 |
| 147 | - else if(dayOfSchedule.emptyService(next)) | 164 | + else if (dayOfSchedule.emptyService(next)) |
| 148 | nonService(sch, "空驶@系统");//下一班非营运 | 165 | nonService(sch, "空驶@系统");//下一班非营运 |
| 149 | } | 166 | } |
| 150 | 167 | ||
| 151 | /** | 168 | /** |
| 152 | * 校验进站前置约束 | 169 | * 校验进站前置约束 |
| 170 | + * | ||
| 153 | * @param gps | 171 | * @param gps |
| 154 | * @return | 172 | * @return |
| 155 | */ | 173 | */ |
| 156 | private boolean validInPremise(GpsEntity gps) { | 174 | private boolean validInPremise(GpsEntity gps) { |
| 157 | StationRoute sr = gps.getStation(); | 175 | StationRoute sr = gps.getStation(); |
| 158 | - if(null == sr || !sr.isPremise()) | 176 | + if (null == sr || !sr.isPremise()) |
| 159 | return true; | 177 | return true; |
| 160 | 178 | ||
| 161 | String premiseCode = gps.getPremiseCode(); | 179 | String premiseCode = gps.getPremiseCode(); |
| 162 | 180 | ||
| 163 | - if(StringUtils.isNotEmpty(premiseCode) && premiseCode.equals(gps.getStopNo())){ | 181 | + if (StringUtils.isNotEmpty(premiseCode) && premiseCode.equals(gps.getStopNo())) { |
| 164 | logger.info("满足前置进站约束 " + premiseCode); | 182 | logger.info("满足前置进站约束 " + premiseCode); |
| 165 | return true; | 183 | return true; |
| 166 | - } | ||
| 167 | - else{ | 184 | + } else { |
| 168 | logger.info(gps.getNbbm() + " not premiseCode 不满足前置进站约束 " + premiseCode); | 185 | logger.info(gps.getNbbm() + " not premiseCode 不满足前置进站约束 " + premiseCode); |
| 169 | } | 186 | } |
| 170 | return false; | 187 | return false; |
| @@ -172,9 +189,10 @@ public class InStationProcess { | @@ -172,9 +189,10 @@ public class InStationProcess { | ||
| 172 | 189 | ||
| 173 | /** | 190 | /** |
| 174 | * 进站既进场 | 191 | * 进站既进场 |
| 192 | + * | ||
| 175 | * @param sch | 193 | * @param sch |
| 176 | */ | 194 | */ |
| 177 | - private void inStationAndInPark(ScheduleRealInfo sch, ScheduleRealInfo next){ | 195 | + private void inStationAndInPark(ScheduleRealInfo sch, ScheduleRealInfo next) { |
| 178 | LineConfig config = lineConfigData.get(sch.getXlBm()); | 196 | LineConfig config = lineConfigData.get(sch.getXlBm()); |
| 179 | //限定出站既出场的停车场 | 197 | //限定出站既出场的停车场 |
| 180 | String park = config.getTwinsPark(); | 198 | String park = config.getTwinsPark(); |
| @@ -191,7 +209,7 @@ public class InStationProcess { | @@ -191,7 +209,7 @@ public class InStationProcess { | ||
| 191 | 209 | ||
| 192 | //分班的时候,需要再跳过1个班次 | 210 | //分班的时候,需要再跳过1个班次 |
| 193 | next = dayOfSchedule.next(next); | 211 | next = dayOfSchedule.next(next); |
| 194 | - if(next != null) | 212 | + if (next != null) |
| 195 | dayOfSchedule.addExecPlan(next); | 213 | dayOfSchedule.addExecPlan(next); |
| 196 | 214 | ||
| 197 | //进场,切换成非营运状态 | 215 | //进场,切换成非营运状态 |
| @@ -200,27 +218,28 @@ public class InStationProcess { | @@ -200,27 +218,28 @@ public class InStationProcess { | ||
| 200 | } | 218 | } |
| 201 | 219 | ||
| 202 | 220 | ||
| 203 | - private boolean isEmptyMileage(ScheduleRealInfo sch){ | ||
| 204 | - return sch.getBcsj()==0 || sch.getJhlcOrig().intValue()==0; | 221 | + private boolean isEmptyMileage(ScheduleRealInfo sch) { |
| 222 | + return sch.getBcsj() == 0 || sch.getJhlcOrig().intValue() == 0; | ||
| 205 | } | 223 | } |
| 206 | 224 | ||
| 207 | 225 | ||
| 208 | /** | 226 | /** |
| 209 | * 切换为非营运状态 | 227 | * 切换为非营运状态 |
| 228 | + * | ||
| 210 | * @param sch | 229 | * @param sch |
| 211 | * @param sender | 230 | * @param sender |
| 212 | */ | 231 | */ |
| 213 | - private void nonService(ScheduleRealInfo sch, String sender){ | 232 | + private void nonService(ScheduleRealInfo sch, String sender) { |
| 214 | gpsStatusManager.changeServiceState(sch.getClZbh(), sch.getXlDir(), 1, sender); | 233 | gpsStatusManager.changeServiceState(sch.getClZbh(), sch.getXlDir(), 1, sender); |
| 215 | } | 234 | } |
| 216 | 235 | ||
| 217 | - private void endSch(ScheduleRealInfo sch, Long t){ | 236 | + private void endSch(ScheduleRealInfo sch, Long t) { |
| 218 | sch.setFcsjActualAll(t); | 237 | sch.setFcsjActualAll(t); |
| 219 | sch.setZdsjActualAll(t); | 238 | sch.setZdsjActualAll(t); |
| 220 | } | 239 | } |
| 221 | 240 | ||
| 222 | private void transformUpDown(GpsEntity gps, ScheduleRealInfo sch) { | 241 | private void transformUpDown(GpsEntity gps, ScheduleRealInfo sch) { |
| 223 | - if(null == sch) | 242 | + if (null == sch) |
| 224 | return; | 243 | return; |
| 225 | byte upDown = Byte.parseByte(sch.getXlDir()); | 244 | byte upDown = Byte.parseByte(sch.getXlDir()); |
| 226 | //gps 切换走向 | 245 | //gps 切换走向 |
| @@ -233,4 +252,10 @@ public class InStationProcess { | @@ -233,4 +252,10 @@ public class InStationProcess { | ||
| 233 | gps.setStopNo(station.getCode()); | 252 | gps.setStopNo(station.getCode()); |
| 234 | } | 253 | } |
| 235 | } | 254 | } |
| 255 | + | ||
| 256 | + private boolean isInPark(GpsEntity gps, GpsEntity prve){ | ||
| 257 | + if(StringUtils.isNotEmpty(gps.getCarparkNo()) && StringUtils.isEmpty(prve.getCarparkNo())) | ||
| 258 | + return true; | ||
| 259 | + return false; | ||
| 260 | + } | ||
| 236 | } | 261 | } |
src/main/java/com/bsth/data/gpsdata_v2/handlers/OutStationProcess.java
| @@ -39,33 +39,49 @@ public class OutStationProcess { | @@ -39,33 +39,49 @@ public class OutStationProcess { | ||
| 39 | 39 | ||
| 40 | @Autowired | 40 | @Autowired |
| 41 | GpsStatusManager gpsStatusManager; | 41 | GpsStatusManager gpsStatusManager; |
| 42 | + private final static int MAX_BEFORE_TIME = 1000 * 60 * 120; | ||
| 42 | 43 | ||
| 43 | public void process(GpsEntity gps){ | 44 | public void process(GpsEntity gps){ |
| 44 | GpsEntity prev = GpsCacheData.getPrev(gps); | 45 | GpsEntity prev = GpsCacheData.getPrev(gps); |
| 45 | - if(gps.getInstation()==0 && prev!=null && isInsideStation(prev)){ | ||
| 46 | - outStation(gps); //出站 | ||
| 47 | - } | ||
| 48 | - } | ||
| 49 | 46 | ||
| 50 | - private boolean isInsideStation(GpsEntity gps){ | ||
| 51 | - return gps.getInstation() >= 1; | 47 | + if(null == prev) |
| 48 | + return; | ||
| 49 | + | ||
| 50 | + //从站内到站外 | ||
| 51 | + if(prev.getInstation() > 0 && gps.getInstation() == 0) | ||
| 52 | + outStation(gps, prev); | ||
| 53 | + | ||
| 54 | + //从站内到另一个站内 | ||
| 55 | + if(prev.getInstation() > 0 && gps.getInstation() > 0 | ||
| 56 | + && !prev.getStopNo().equals(gps.getStopNo())) | ||
| 57 | + outStation(gps, prev); | ||
| 58 | + | ||
| 59 | + //在被起点站覆盖的情况下出场 | ||
| 60 | + if(isOutPark(gps, prev)) | ||
| 61 | + outStation(gps, prev); | ||
| 52 | } | 62 | } |
| 53 | 63 | ||
| 54 | /** | 64 | /** |
| 55 | * 出站 | 65 | * 出站 |
| 56 | * @param gps | 66 | * @param gps |
| 57 | */ | 67 | */ |
| 58 | - private void outStation(GpsEntity gps) { | 68 | + private void outStation(GpsEntity gps, GpsEntity prev) { |
| 59 | ScheduleRealInfo sch = dayOfSchedule.executeCurr(gps.getNbbm()); | 69 | ScheduleRealInfo sch = dayOfSchedule.executeCurr(gps.getNbbm()); |
| 60 | 70 | ||
| 61 | //起点发车 | 71 | //起点发车 |
| 62 | - if (null != sch && sch.getQdzCode().equals(gps.getStopNo())){ | 72 | + if (null != sch && |
| 73 | + (sch.getQdzCode().equals(prev.getStopNo()) || sch.getQdzCode().equals(prev.getCarparkNo()))){ | ||
| 63 | //发车班次匹配 | 74 | //发车班次匹配 |
| 64 | if(!signalSchPlanMatcher.outMatch(gps, sch)){ | 75 | if(!signalSchPlanMatcher.outMatch(gps, sch)){ |
| 65 | - outStation(gps); | 76 | + //outStation(gps); |
| 66 | return; | 77 | return; |
| 67 | } | 78 | } |
| 68 | 79 | ||
| 80 | + /*int diff = (int) (sch.getDfsjT() - gps.getTimestamp()); | ||
| 81 | + //首班出场最多提前2小时 | ||
| 82 | + if((dayOfSchedule.isFirstOut(sch) && diff > MAX_BEFORE_TIME) || diff > MAX_BEFORE_TIME / 2) | ||
| 83 | + return;*/ | ||
| 84 | + | ||
| 69 | gps.setPremiseCode(null);//清除前置围栏标记 | 85 | gps.setPremiseCode(null);//清除前置围栏标记 |
| 70 | 86 | ||
| 71 | if(StringUtils.isNotEmpty(sch.getFcsjActual()) | 87 | if(StringUtils.isNotEmpty(sch.getFcsjActual()) |
| @@ -123,6 +139,10 @@ public class OutStationProcess { | @@ -123,6 +139,10 @@ public class OutStationProcess { | ||
| 123 | if(Math.abs(t2 - c) < threshold && c - t1 > threshold){ | 139 | if(Math.abs(t2 - c) < threshold && c - t1 > threshold){ |
| 124 | return true; | 140 | return true; |
| 125 | } | 141 | } |
| 142 | + | ||
| 143 | + if(c - t1 > 1000 * 60 * 60 * 2 && Math.abs(t2 - c) < c - t1){ | ||
| 144 | + return true; | ||
| 145 | + } | ||
| 126 | return false; | 146 | return false; |
| 127 | } | 147 | } |
| 128 | 148 | ||
| @@ -165,4 +185,10 @@ public class OutStationProcess { | @@ -165,4 +185,10 @@ public class OutStationProcess { | ||
| 165 | sch.setFcsjActualAll(t); | 185 | sch.setFcsjActualAll(t); |
| 166 | sch.setZdsjActualAll(t); | 186 | sch.setZdsjActualAll(t); |
| 167 | } | 187 | } |
| 188 | + | ||
| 189 | + private boolean isOutPark(GpsEntity gps, GpsEntity prve){ | ||
| 190 | + if(StringUtils.isNotEmpty(prve.getCarparkNo()) && StringUtils.isEmpty(gps.getCarparkNo())) | ||
| 191 | + return true; | ||
| 192 | + return false; | ||
| 193 | + } | ||
| 168 | } | 194 | } |
src/main/java/com/bsth/data/gpsdata_v2/rfid/UploadRfidDataService.java
| 1 | package com.bsth.data.gpsdata_v2.rfid; | 1 | package com.bsth.data.gpsdata_v2.rfid; |
| 2 | 2 | ||
| 3 | +import com.alibaba.fastjson.JSON; | ||
| 3 | import com.bsth.data.gpsdata_v2.rfid.entity.RfidInoutStation; | 4 | import com.bsth.data.gpsdata_v2.rfid.entity.RfidInoutStation; |
| 4 | import com.bsth.data.gpsdata_v2.rfid.handle.RfidSignalHandle; | 5 | import com.bsth.data.gpsdata_v2.rfid.handle.RfidSignalHandle; |
| 6 | +import org.slf4j.Logger; | ||
| 7 | +import org.slf4j.LoggerFactory; | ||
| 5 | import org.springframework.beans.factory.annotation.Autowired; | 8 | import org.springframework.beans.factory.annotation.Autowired; |
| 6 | import org.springframework.web.bind.annotation.RequestBody; | 9 | import org.springframework.web.bind.annotation.RequestBody; |
| 7 | import org.springframework.web.bind.annotation.RequestMapping; | 10 | import org.springframework.web.bind.annotation.RequestMapping; |
| @@ -20,8 +23,11 @@ public class UploadRfidDataService { | @@ -20,8 +23,11 @@ public class UploadRfidDataService { | ||
| 20 | @Autowired | 23 | @Autowired |
| 21 | RfidSignalHandle rfidSignalHandle; | 24 | RfidSignalHandle rfidSignalHandle; |
| 22 | 25 | ||
| 26 | + Logger logger = LoggerFactory.getLogger(this.getClass()); | ||
| 27 | + | ||
| 23 | @RequestMapping("inside") | 28 | @RequestMapping("inside") |
| 24 | public void inside(@RequestBody List<RfidInoutStation> list) { | 29 | public void inside(@RequestBody List<RfidInoutStation> list) { |
| 30 | + logger.info("up rfid: " + JSON.toJSONString(list)); | ||
| 25 | rfidSignalHandle.handle(list); | 31 | rfidSignalHandle.handle(list); |
| 26 | } | 32 | } |
| 27 | } | 33 | } |
src/main/java/com/bsth/data/gpsdata_v2/utils/GpsDataRecovery.java
| @@ -59,7 +59,7 @@ public class GpsDataRecovery implements ApplicationContextAware { | @@ -59,7 +59,7 @@ public class GpsDataRecovery implements ApplicationContextAware { | ||
| 59 | for (String nbbm : keys) { | 59 | for (String nbbm : keys) { |
| 60 | Collections.sort(listMap.get(nbbm), comp); | 60 | Collections.sort(listMap.get(nbbm), comp); |
| 61 | threadPool.submit(new RecoveryThread(listMap.get(nbbm), count)); | 61 | threadPool.submit(new RecoveryThread(listMap.get(nbbm), count)); |
| 62 | - /*if(nbbm.equals("W2H-015")) | 62 | + /*if(nbbm.equals("S0L-065")) |
| 63 | new RecoveryThread(listMap.get(nbbm), count).run();*/ | 63 | new RecoveryThread(listMap.get(nbbm), count).run();*/ |
| 64 | /*if(lineId.equals("60028")) | 64 | /*if(lineId.equals("60028")) |
| 65 | new RecoveryThread(listMap.get(lineId), count).run();*/ | 65 | new RecoveryThread(listMap.get(lineId), count).run();*/ |
| @@ -151,6 +151,9 @@ public class GpsDataRecovery implements ApplicationContextAware { | @@ -151,6 +151,9 @@ public class GpsDataRecovery implements ApplicationContextAware { | ||
| 151 | for (GpsEntity gps : list) { | 151 | for (GpsEntity gps : list) { |
| 152 | try { | 152 | try { |
| 153 | 153 | ||
| 154 | + /*if(gps.getTimestamp() >= 1511386080000L) | ||
| 155 | + System.out.println("aaa");*/ | ||
| 156 | + | ||
| 154 | gpsStateProcess.process(gps);//状态处理 | 157 | gpsStateProcess.process(gps);//状态处理 |
| 155 | stationInsideProcess.process(gps);//场站内外判定 | 158 | stationInsideProcess.process(gps);//场站内外判定 |
| 156 | 159 |
src/main/java/com/bsth/data/gpsdata_v2/utils/SignalSchPlanMatcher.java
| @@ -2,12 +2,17 @@ package com.bsth.data.gpsdata_v2.utils; | @@ -2,12 +2,17 @@ package com.bsth.data.gpsdata_v2.utils; | ||
| 2 | 2 | ||
| 3 | import com.bsth.data.gpsdata_v2.entity.GpsEntity; | 3 | import com.bsth.data.gpsdata_v2.entity.GpsEntity; |
| 4 | import com.bsth.data.schedule.DayOfSchedule; | 4 | import com.bsth.data.schedule.DayOfSchedule; |
| 5 | +import com.bsth.data.schedule.ScheduleComparator; | ||
| 5 | import com.bsth.entity.realcontrol.ScheduleRealInfo; | 6 | import com.bsth.entity.realcontrol.ScheduleRealInfo; |
| 7 | +import org.apache.commons.lang3.StringUtils; | ||
| 6 | import org.slf4j.Logger; | 8 | import org.slf4j.Logger; |
| 7 | import org.slf4j.LoggerFactory; | 9 | import org.slf4j.LoggerFactory; |
| 8 | import org.springframework.beans.factory.annotation.Autowired; | 10 | import org.springframework.beans.factory.annotation.Autowired; |
| 9 | import org.springframework.stereotype.Component; | 11 | import org.springframework.stereotype.Component; |
| 10 | 12 | ||
| 13 | +import java.util.Collections; | ||
| 14 | +import java.util.List; | ||
| 15 | + | ||
| 11 | /** | 16 | /** |
| 12 | * 班次匹配器 | 17 | * 班次匹配器 |
| 13 | * Created by panzhao on 2016/12/31. | 18 | * Created by panzhao on 2016/12/31. |
| @@ -18,6 +23,8 @@ public class SignalSchPlanMatcher { | @@ -18,6 +23,8 @@ public class SignalSchPlanMatcher { | ||
| 18 | @Autowired | 23 | @Autowired |
| 19 | DayOfSchedule dayOfSchedule; | 24 | DayOfSchedule dayOfSchedule; |
| 20 | 25 | ||
| 26 | + static ScheduleComparator.DFSJ schComp = new ScheduleComparator.DFSJ(); | ||
| 27 | + | ||
| 21 | Logger log = LoggerFactory.getLogger(this.getClass()); | 28 | Logger log = LoggerFactory.getLogger(this.getClass()); |
| 22 | 29 | ||
| 23 | /** | 30 | /** |
| @@ -26,12 +33,27 @@ public class SignalSchPlanMatcher { | @@ -26,12 +33,27 @@ public class SignalSchPlanMatcher { | ||
| 26 | * @param sch | 33 | * @param sch |
| 27 | * @return | 34 | * @return |
| 28 | */ | 35 | */ |
| 29 | - public void outMatch(GpsEntity gps, ScheduleRealInfo sch){ | 36 | + public boolean outMatch(GpsEntity gps, ScheduleRealInfo sch){ |
| 30 | long t = gps.getTimestamp(); | 37 | long t = gps.getTimestamp(); |
| 31 | if(t < sch.getDfsjT()) | 38 | if(t < sch.getDfsjT()) |
| 32 | - return; | 39 | + return true; |
| 33 | 40 | ||
| 34 | try{ | 41 | try{ |
| 42 | + //晚于待发时间 半小时 ,匹配一下最佳的班次 | ||
| 43 | + if(t - sch.getDfsjT() > 1000 * 60 * 30){ | ||
| 44 | + ScheduleRealInfo near = searchNearOut(gps); | ||
| 45 | + | ||
| 46 | + if(null != near && !near.getId().equals(sch.getId())){ | ||
| 47 | + dayOfSchedule.addExecPlan(near); | ||
| 48 | + return false; | ||
| 49 | + } | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | + }catch (Exception e){ | ||
| 53 | + log.error("", e); | ||
| 54 | + } | ||
| 55 | + return true; | ||
| 56 | + /*try{ | ||
| 35 | //会不会是分班没有完成 | 57 | //会不会是分班没有完成 |
| 36 | if(sch.getBcType().equals("in") && t - sch.getDfsjT() > 1000 * 60 * 20){ | 58 | if(sch.getBcType().equals("in") && t - sch.getDfsjT() > 1000 * 60 * 20){ |
| 37 | ScheduleRealInfo fbFirst = dayOfSchedule.nextByBcType(sch, "normal"); | 59 | ScheduleRealInfo fbFirst = dayOfSchedule.nextByBcType(sch, "normal"); |
| @@ -71,10 +93,35 @@ public class SignalSchPlanMatcher { | @@ -71,10 +93,35 @@ public class SignalSchPlanMatcher { | ||
| 71 | if(r / s > 0.7){ | 93 | if(r / s > 0.7){ |
| 72 | if(dayOfSchedule.addExecPlan(next)) | 94 | if(dayOfSchedule.addExecPlan(next)) |
| 73 | outMatch(gps, next); | 95 | outMatch(gps, next); |
| 74 | - } | 96 | + }*/ |
| 75 | } | 97 | } |
| 76 | 98 | ||
| 77 | - public static int fcSpace(ScheduleRealInfo sch, GpsEntity gps){ | ||
| 78 | - return (int) Math.abs((sch.getDfsjT() - gps.getTimestamp())); | 99 | + /** |
| 100 | + * 搜索一个离发车信号最近的班次 | ||
| 101 | + * @param gps | ||
| 102 | + * @return | ||
| 103 | + */ | ||
| 104 | + private ScheduleRealInfo searchNearOut(GpsEntity gps) { | ||
| 105 | + List<ScheduleRealInfo> list = dayOfSchedule.findByNbbm(gps.getNbbm()); | ||
| 106 | + //排序 | ||
| 107 | + Collections.sort(list, schComp); | ||
| 108 | + | ||
| 109 | + ScheduleRealInfo near = null; | ||
| 110 | + int diff, minDiff=-1; | ||
| 111 | + for(ScheduleRealInfo sch : list){ | ||
| 112 | + | ||
| 113 | + if(StringUtils.isNotEmpty(sch.getFcsjActual())) | ||
| 114 | + continue; | ||
| 115 | + | ||
| 116 | + if(StringUtils.isNotEmpty(sch.getZdsjActual())) | ||
| 117 | + continue; | ||
| 118 | + | ||
| 119 | + diff = (int) Math.abs(gps.getTimestamp() - sch.getDfsjT()); | ||
| 120 | + if(null == near || diff < minDiff){ | ||
| 121 | + near = sch; | ||
| 122 | + minDiff = diff; | ||
| 123 | + } | ||
| 124 | + } | ||
| 125 | + return near; | ||
| 79 | } | 126 | } |
| 80 | } | 127 | } |
src/main/java/com/bsth/data/msg_queue/DirectivePushQueue.java
| @@ -108,15 +108,15 @@ public class DirectivePushQueue implements ApplicationContextAware { | @@ -108,15 +108,15 @@ public class DirectivePushQueue implements ApplicationContextAware { | ||
| 108 | code = qd.getCode(); | 108 | code = qd.getCode(); |
| 109 | 109 | ||
| 110 | if(code.equals("60_02")){ | 110 | if(code.equals("60_02")){ |
| 111 | - directiveService.send60Dispatch(qd.getSch(), qd.getFinish(), qd.getSender()); | 111 | + //directiveService.send60Dispatch(qd.getSch(), qd.getFinish(), qd.getSender()); |
| 112 | log.info("directive 60_02 sch id: " + qd.getSch().getId()); | 112 | log.info("directive 60_02 sch id: " + qd.getSch().getId()); |
| 113 | } | 113 | } |
| 114 | else if(code.equals("60_03")){ | 114 | else if(code.equals("60_03")){ |
| 115 | - directiveService.send60Operation(qd.getNbbm(), qd.getState(), qd.getUpDown(), qd.getSender()); | 115 | + //directiveService.send60Operation(qd.getNbbm(), qd.getState(), qd.getUpDown(), qd.getSender()); |
| 116 | log.info("directive 60_03 nbbm: " + qd.getNbbm()); | 116 | log.info("directive 60_03 nbbm: " + qd.getNbbm()); |
| 117 | } | 117 | } |
| 118 | else if(code.equals("64")){ | 118 | else if(code.equals("64")){ |
| 119 | - directiveService.lineChange(qd.getNbbm(), qd.getLineCode(), qd.getSender()); | 119 | + //directiveService.lineChange(qd.getNbbm(), qd.getLineCode(), qd.getSender()); |
| 120 | log.info("directive 64 nbbm: " + qd.getNbbm() + " lineCode: " + qd.getLineCode()); | 120 | log.info("directive 64 nbbm: " + qd.getNbbm() + " lineCode: " + qd.getLineCode()); |
| 121 | } | 121 | } |
| 122 | 122 |
src/main/java/com/bsth/data/schedule/SchAttrCalculator.java
| @@ -219,7 +219,7 @@ public class SchAttrCalculator { | @@ -219,7 +219,7 @@ public class SchAttrCalculator { | ||
| 219 | boolean limitPark = StringUtils.isNotEmpty(park); | 219 | boolean limitPark = StringUtils.isNotEmpty(park); |
| 220 | 220 | ||
| 221 | ScheduleRealInfo sch, prev = null; | 221 | ScheduleRealInfo sch, prev = null; |
| 222 | - for(int i = list.size() - 1; i > 0; i --){ | 222 | + for(int i = list.size() - 1; i >= 0; i --){ |
| 223 | sch = list.get(i); | 223 | sch = list.get(i); |
| 224 | 224 | ||
| 225 | //如果是出站既出场,忽略出场班次 | 225 | //如果是出站既出场,忽略出场班次 |