Commit 70ae995a5ae8639d14da5f026c0d3116a1c3122b

Authored by 潘钊
2 parents d3a02a96 7a906155

Merge branch 'minhang' into qingpu

# Conflicts:
#	src/main/java/com/bsth/service/oil/impl/YlbServiceImpl.java
Showing 69 changed files with 2775 additions and 734 deletions

Too many changes to show.

To preserve performance only 69 of 310 files are displayed.

src/main/java/com/bsth/Application.java
... ... @@ -17,7 +17,7 @@ import java.util.concurrent.ScheduledExecutorService;
17 17 @SpringBootApplication
18 18 public class Application extends SpringBootServletInitializer {
19 19  
20   - public static ScheduledExecutorService mainServices = Executors.newScheduledThreadPool(15);
  20 + public static ScheduledExecutorService mainServices = Executors.newScheduledThreadPool(16);
21 21  
22 22 @Override
23 23 protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
... ...
src/main/java/com/bsth/XDApplication.java
... ... @@ -4,10 +4,14 @@ import com.bsth.data.BasicData;
4 4 import com.bsth.data.ThreadMonotor;
5 5 import com.bsth.data.car_out_info.UpdateDBThread;
6 6 import com.bsth.data.directive.DirectivesPstThread;
  7 +import com.bsth.data.forecast.SampleTimeDataLoader;
7 8 import com.bsth.data.gpsdata.thread.GpsDataLoaderThread;
8 9 import com.bsth.data.gpsdata.thread.OfflineMonitorThread;
  10 +import com.bsth.data.msg_queue.DirectivePushQueue;
  11 +import com.bsth.data.msg_queue.WebSocketPushQueue;
9 12 import com.bsth.data.schedule.edit_logs.SeiPstThread;
10 13 import com.bsth.data.schedule.late_adjust.ScheduleLateThread;
  14 +import com.bsth.data.schedule.signal.SchSiginUpdateDBThread;
11 15 import com.bsth.data.schedule.thread.CalcOilThread;
12 16 import com.bsth.data.schedule.thread.SchedulePstThread;
13 17 import com.bsth.data.schedule.thread.ScheduleRefreshThread;
... ... @@ -56,6 +60,10 @@ public class XDApplication implements CommandLineRunner {
56 60 ThreadMonotor threadMonotor;
57 61 @Autowired
58 62 SeiPstThread seiPstThread;
  63 + @Autowired
  64 + SampleTimeDataLoader sampleTimeDataLoader;
  65 + @Autowired
  66 + SchSiginUpdateDBThread schSiginUpdateDBThread;
59 67  
60 68 private static long timeDiff;
61 69 private static long timeDiffTraffic;
... ... @@ -116,30 +124,31 @@ public class XDApplication implements CommandLineRunner {
116 124 public void prodInit(){
117 125 log.info("prodInit...");
118 126 ScheduledExecutorService sexec = Application.mainServices;
119   - //发车信息
120   - sexec.scheduleWithFixedDelay(fcxxUpdateThread, 60, 40, TimeUnit.SECONDS);
121   - //抓取GPS数据
122   - sexec.scheduleWithFixedDelay(gpsDataLoader, 30, 2, TimeUnit.SECONDS);
123   - //GPS设备掉离线
124   - sexec.scheduleWithFixedDelay(offlineMonitorThread, 120, 60, TimeUnit.SECONDS);
125   - //班次更新线程
126   - sexec.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS);
127   - //班次延迟入库线程
128   - sexec.scheduleWithFixedDelay(schedulePstThread, 60, 10, TimeUnit.SECONDS);
129   - //班次修正日志入库
130   - sexec.scheduleWithFixedDelay(seiPstThread, 60, 60, TimeUnit.SECONDS);
131   - //检查班次误点
132   - sexec.scheduleWithFixedDelay(scheduleLateThread, 60, 30, TimeUnit.SECONDS);
133   - //调度指令延迟入库
134   - sexec.scheduleWithFixedDelay(directivesPstThread, 180, 100, TimeUnit.SECONDS);
  127 +
  128 + /** 线调业务 */
  129 + sexec.scheduleWithFixedDelay(gpsDataLoader, 30, 2, TimeUnit.SECONDS);//抓取GPS数据
  130 + sexec.scheduleWithFixedDelay(offlineMonitorThread, 120, 60, TimeUnit.SECONDS);//GPS设备掉离线
  131 + sexec.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS);//班次更新线程
  132 + sexec.scheduleWithFixedDelay(schedulePstThread, 60, 10, TimeUnit.SECONDS);//班次延迟入库线程
  133 + sexec.scheduleWithFixedDelay(seiPstThread, 60, 60, TimeUnit.SECONDS);//班次修正日志入库
  134 + sexec.scheduleWithFixedDelay(scheduleLateThread, 60, 30, TimeUnit.SECONDS);//检查班次误点
  135 + sexec.scheduleWithFixedDelay(directivesPstThread, 180, 100, TimeUnit.SECONDS);//调度指令延迟入库
  136 + sexec.scheduleWithFixedDelay(threadMonotor, 240, 60, TimeUnit.SECONDS);//线程监听(防止重要的线程阻塞、异常结束。以及部分主备切换工作)
  137 + sexec.scheduleWithFixedDelay(sampleTimeDataLoader, 12, 120 * 60, TimeUnit.SECONDS);//到离站预测需要的站点间耗时数据
  138 + sexec.scheduleWithFixedDelay(basicDataLoader, 2, 2, TimeUnit.HOURS);//基础数据更新
  139 + DirectivePushQueue.start();//消息队列 -指令,系统下发的
  140 + WebSocketPushQueue.start();//消息队列 -webSocket ,推送至线调web页面的
  141 +
  142 + /** 线调为其他程序提供的数据 --写入数据库 */
  143 + sexec.scheduleWithFixedDelay(fcxxUpdateThread, 60, 40, TimeUnit.SECONDS);//发车信息(发车屏、信息发布)
  144 + //线路首末班数据(网关用,班次更新时写入)
  145 + //com.bsth.data.schedule.f_a_l.FirstAndLastHandler
  146 + sexec.scheduleWithFixedDelay(schSiginUpdateDBThread, 60, 60 * 30, TimeUnit.SECONDS);//无法自动完成的班次信息(网关用,补信号)
135 147  
136 148 //运管处静态数据提交
137 149 log.info(timeDiff / 1000 / 60 + "分钟之后提交到运管处");
138 150 sexec.scheduleAtFixedRate(submitToTrafficManage, timeDiffTraffic / 1000, 60 * 60 * 24, TimeUnit.SECONDS);
139 151 //计算油、公里加注
140 152 sexec.scheduleAtFixedRate(calcOilThread, timeDiff / 1000, 60 * 60 * 24, TimeUnit.SECONDS);
141   -
142   - //线程监听(防止重要的线程阻塞、异常结束。以及部分主备切换工作)
143   - sexec.scheduleWithFixedDelay(threadMonotor, 240, 60, TimeUnit.SECONDS);
144 153 }
145 154 }
... ...
src/main/java/com/bsth/controller/LineController.java
1 1 package com.bsth.controller;
2 2  
  3 +import java.util.HashMap;
3 4 import java.util.Map;
4 5  
5 6 import org.springframework.beans.factory.annotation.Autowired;
6 7 import org.springframework.web.bind.annotation.RequestMapping;
7 8 import org.springframework.web.bind.annotation.RequestMethod;
  9 +import org.springframework.web.bind.annotation.RequestParam;
8 10 import org.springframework.web.bind.annotation.RestController;
9 11  
  12 +import com.bsth.common.ResponseCode;
10 13 import com.bsth.entity.Line;
11 14 import com.bsth.service.LineService;
12 15 import com.bsth.util.GetUIDAndCode;
... ... @@ -50,12 +53,22 @@ public class LineController extends BaseController<Line, Integer> {
50 53 */
51 54 @RequestMapping(method = RequestMethod.POST)
52 55 public Map<String, Object> save(Line t){
53   -
  56 + Map<String, Object> map = new HashMap<>();
54 57 if(t.getId()==null) {
55 58  
56 59 t.setId(Integer.valueOf(t.getLineCode()));
57 60  
58 61 }
  62 + if( (t.getId().toString().length()) > 6) {
  63 +
  64 + map.put("status", ResponseCode.ERROR);
  65 + return map;
  66 + }
59 67 return service.save(t);
60 68 }
  69 +
  70 + @RequestMapping(value ="/findById" , method = RequestMethod.GET)
  71 + Line findByID(@RequestParam(defaultValue = "id") Integer id){
  72 + return service.findById(id);
  73 + }
61 74 }
... ...
src/main/java/com/bsth/controller/StationRouteController.java
... ... @@ -12,6 +12,8 @@ import org.springframework.web.bind.annotation.RestController;
12 12 import java.util.List;
13 13 import java.util.Map;
14 14  
  15 +import javax.servlet.http.HttpServletResponse;
  16 +
15 17 /**
16 18 *
17 19 * @ClassName: StationRouteController(站点路由控制器)
... ... @@ -48,6 +50,18 @@ public class StationRouteController extends BaseController&lt;StationRoute, Integer
48 50 }
49 51  
50 52 /**
  53 + * @Description :TODO(查询路段信息)
  54 + *
  55 + * @param map <line.id_eq:线路ID; directions_eq:方向>
  56 + *
  57 + * @return Map<String, Object>
  58 + */
  59 + @RequestMapping(value = "/export" , method = RequestMethod.GET)
  60 + public Map<String, Object> export(@RequestParam Integer id, HttpServletResponse resp) {
  61 + return service.getSectionRouteExport(id, resp);
  62 + }
  63 +
  64 + /**
51 65 * @param String
52 66 * @throws
53 67 * @Description: TODO(批量撤销站点)
... ...
src/main/java/com/bsth/controller/excep/NowOutboundController.java
1 1 package com.bsth.controller.excep;
2 2  
  3 +import java.text.ParseException;
3 4 import java.util.HashMap;
  5 +import java.util.List;
4 6 import java.util.Map;
5 7  
6 8 import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -10,7 +12,9 @@ import org.springframework.web.bind.annotation.RequestParam;
10 12 import org.springframework.web.bind.annotation.RestController;
11 13  
12 14 import com.bsth.controller.BaseController;
  15 +import com.bsth.data.BasicData;
13 16 import com.bsth.entity.excep.Outbound;
  17 +import com.bsth.entity.excep.Speeding;
14 18 import com.bsth.entity.sys.SysUser;
15 19 import com.bsth.service.excep.NowOutboundService;
16 20 import com.bsth.util.PageObject;
... ... @@ -44,5 +48,11 @@ public class NowOutboundController extends BaseController&lt;SysUser, Integer&gt;{
44 48 return modelMap;
45 49 }
46 50  
  51 + @RequestMapping(value = "/findPosition", method = RequestMethod.GET)
  52 + public List<Outbound> findPosition(@RequestParam String vehicle,@RequestParam String startdate,@RequestParam String enddate) throws ParseException {
  53 + String deviceid = BasicData.deviceId2NbbmMap.inverse().get(vehicle);
  54 + List<Outbound> listOutbound = nowOutboundService.findPosition(deviceid,startdate,enddate);
  55 + return listOutbound;
  56 + }
47 57  
48 58 }
... ...
src/main/java/com/bsth/controller/forms/ExportController.java
... ... @@ -190,9 +190,6 @@ public class ExportController {
190 190 m.put("clzbh", l.getClzbh());
191 191 m.put("jsy", l.getJsy());
192 192 m.put("jName", l.getjName());
193   -
194   -
195   -
196 193 m.put("sgh", l.getSgh());
197 194 m.put("sName", l.getsName());
198 195 m.put("jhlc", l.getJhlc());
... ...
src/main/java/com/bsth/controller/forms/MCY_FormsController.java
... ... @@ -78,6 +78,13 @@ public class MCY_FormsController {
78 78  
79 79 return formsService.singledata(map);
80 80 }
  81 +
  82 + // 路单数据
  83 + @RequestMapping(value = "/singledatanew", method = RequestMethod.GET)
  84 + public List<Singledata> singledatanew(@RequestParam Map<String, Object> map) {
  85 +
  86 + return formsService.singledata(map);
  87 + }
81 88  
82 89 // 车辆加注
83 90 @RequestMapping(value = "/vehicleloading", method = RequestMethod.GET)
... ...
src/main/java/com/bsth/controller/oil/CwjyController.java
... ... @@ -12,7 +12,10 @@ import org.springframework.web.bind.annotation.RequestMethod;
12 12 import org.springframework.web.bind.annotation.RequestParam;
13 13 import org.springframework.web.bind.annotation.RestController;
14 14  
  15 +import com.bsth.common.ResponseCode;
15 16 import com.bsth.controller.BaseController;
  17 +import com.bsth.data.BasicData;
  18 +import com.bsth.entity.Line;
16 19 import com.bsth.entity.oil.Cwjy;
17 20 import com.bsth.entity.oil.Ylxxb;
18 21 import com.bsth.entity.sys.SysUser;
... ... @@ -30,12 +33,24 @@ public class CwjyController extends BaseController&lt;Cwjy, Integer&gt;{
30 33 SysUser sysUser = SecurityUtils.getCurrentUser();
31 34 t.setCreateDate(new Date());
32 35 t.setXgr(sysUser.getUserName());
33   - return service.save(t);
  36 + t.setNbbm(t.getNbbm().trim().toUpperCase());
  37 + Line line=BasicData.nbbm2LineMap.get(t.getNbbm());
  38 + t.setLine(line == null?"" : line.getLineCode());
  39 + Map<String, Object> map = new HashMap<>();
  40 + try {
  41 + map=service.save(t);
  42 + }catch (Exception e) {
  43 + // TODO: handle exception
  44 + if(e.getMessage().indexOf("PK_CWJYUK")>0){
  45 + map.put("fage", "存在相同数据,数据已经过滤");
  46 + }
  47 + }
  48 + return map;
34 49 }
35 50  
36 51 @RequestMapping(value = "/checkNbbm",method = RequestMethod.GET)
37 52 public int checkNbbm(Cwjy t){
38   - return service.checkNbbm(t.getNbbm().trim());
  53 + return service.checkNbbm(t);
39 54 }
40 55  
41 56 @RequestMapping(value = "/queryList",method = RequestMethod.GET)
... ...
src/main/java/com/bsth/controller/oil/DlbController.java
... ... @@ -2,6 +2,7 @@ package com.bsth.controller.oil;
2 2  
3 3 import java.text.SimpleDateFormat;
4 4 import java.util.ArrayList;
  5 +import java.util.Date;
5 6 import java.util.HashMap;
6 7 import java.util.Iterator;
7 8 import java.util.List;
... ... @@ -84,8 +85,14 @@ public class DlbController extends BaseController&lt;Dlb, Integer&gt;{
84 85  
85 86  
86 87 @RequestMapping(value = "/obtain",method = RequestMethod.GET)
87   - public Map<String, Object> obtain(@RequestParam Map<String, Object> map){
88   - Map<String, Object> list=service.obtain(map);
  88 + public Map<String, Object> obtain(@RequestParam Map<String, Object> map) throws Exception{
  89 + Map<String, Object> list=new HashMap<String, Object>();
  90 + try {
  91 + list = service.obtain(map);
  92 + } catch (Exception e) {
  93 + // TODO Auto-generated catch block
  94 + throw e;
  95 + }
89 96 return list;
90 97 }
91 98  
... ... @@ -188,4 +195,30 @@ public class DlbController extends BaseController&lt;Dlb, Integer&gt;{
188 195  
189 196 }
190 197  
  198 +
  199 + @RequestMapping(value = "/checkJsy",method = RequestMethod.GET)
  200 + public String checkJsy(@RequestParam Map<String, Object> map){
  201 + String list=service.checkJsy(map);
  202 + return list;
  203 + }
  204 +
  205 + @RequestMapping(value = "/deleteIds", method = RequestMethod.POST)
  206 + public Map<String, Object> deleteIds(@RequestParam Map<String, Object> map) {
  207 + Map<String, Object> maps=new HashMap<String, Object>();
  208 + try {
  209 + maps= service.deleteIds(map);
  210 + } catch (Exception e) {
  211 + // TODO Auto-generated catch block
  212 + e.printStackTrace();
  213 + }
  214 + return maps;
  215 + }
  216 +
  217 + @RequestMapping(value = "/saveDlb",method = RequestMethod.POST)
  218 + public Map<String, Object> saveDlb(Dlb t){
  219 +// SysUser user = SecurityUtils.getCurrentUser();
  220 + t.setCreatetime(new Date());
  221 +// Ylb t=new Ylb();
  222 + return service.saveDlb(t);
  223 + }
191 224 }
... ...
src/main/java/com/bsth/controller/oil/YlbController.java
... ... @@ -209,8 +209,8 @@ public class YlbController extends BaseController&lt;Ylb, Integer&gt;{
209 209 return maps;
210 210 }
211 211 @RequestMapping(value="/oilListMonth")
212   - public List<Ylb> oilListMonth(@RequestParam String line,@RequestParam String date,@RequestParam String type){
213   - return yblService.oilListMonth(line, date, type);
  212 + public List<Ylb> oilListMonth(@RequestParam Map<String, Object> map){
  213 + return yblService.oilListMonth(map);
214 214 }
215 215  
216 216 @RequestMapping(value = "/checkJsy",method = RequestMethod.GET)
... ...
src/main/java/com/bsth/controller/oil/YlxxbController.java
1 1 package com.bsth.controller.oil;
2 2  
3 3 import java.util.HashMap;
  4 +import java.util.List;
4 5 import java.util.Map;
5 6  
6 7 import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -28,6 +29,12 @@ public class YlxxbController extends BaseController&lt;Ylxxb, Integer&gt;{
28 29 return pagequery;
29 30 }
30 31  
  32 + @RequestMapping(value = "/listNbbm",method = RequestMethod.GET)
  33 + public List<Ylxxb> listNbbm(@RequestParam Map<String, Object> map){
  34 + List<Ylxxb> list=service.Pagequery_nbbm(map);
  35 + return list;
  36 + }
  37 +
31 38  
32 39 /**
33 40 * 核对油量(有加油没里程)
... ... @@ -45,4 +52,17 @@ public class YlxxbController extends BaseController&lt;Ylxxb, Integer&gt;{
45 52 }
46 53 return list;
47 54 }
  55 +
  56 + @RequestMapping(value = "/checkNbbm",method = RequestMethod.POST)
  57 + public Map<String, Object> checkNbbm(@RequestParam Map<String, Object> map){
  58 + Map<String, Object> list=new HashMap<>();
  59 + try {
  60 + list = service.checkNbbm(map);
  61 + } catch (Exception e) {
  62 + // TODO Auto-generated catch block
  63 + e.printStackTrace();
  64 + }
  65 + return list;
  66 + }
  67 +
48 68 }
... ...
src/main/java/com/bsth/controller/realcontrol/BasicDataController.java
... ... @@ -131,7 +131,7 @@ public class BasicDataController {
131 131 */
132 132 @RequestMapping("/nbbm2PlateNo")
133 133 public Map<String, String> nbbm2PlateNo(){
134   - return basicData.getNbbm2PlateNo();
  134 + return basicData.nbbmCompanyPlateMap;
135 135 }
136 136  
137 137  
... ...
src/main/java/com/bsth/controller/realcontrol/FrequentPhrasesController.java 0 → 100644
  1 +package com.bsth.controller.realcontrol;
  2 +
  3 +import com.bsth.controller.BaseController;
  4 +import com.bsth.entity.realcontrol.FrequentPhrases;
  5 +import org.springframework.web.bind.annotation.RequestMapping;
  6 +import org.springframework.web.bind.annotation.RestController;
  7 +
  8 +/**
  9 + * Created by panzhao on 2017/9/17.
  10 + */
  11 +@RestController
  12 +@RequestMapping("frequent_phrases")
  13 +public class FrequentPhrasesController extends BaseController<FrequentPhrases, Integer>{
  14 +
  15 +}
... ...
src/main/java/com/bsth/controller/realcontrol/LineConfigController.java
... ... @@ -79,6 +79,11 @@ public class LineConfigController extends BaseController&lt;LineConfig, Integer&gt;{
79 79 return lineConfigService.getByLineCode(lineCode);
80 80 }
81 81  
  82 + @RequestMapping(value = "/findByIdx")
  83 + public Map<String, Object> findByIdx(@RequestParam String idx){
  84 + return lineConfigService.findByIdx(idx);
  85 + }
  86 +
82 87 /**
83 88 * 到站缓冲区设置
84 89 * @param lineCode
... ...
src/main/java/com/bsth/controller/realcontrol/RealMapController.java
1 1 package com.bsth.controller.realcontrol;
2 2  
  3 +import com.bsth.data.gpsdata.arrival.GeoCacheData;
  4 +import com.bsth.data.gpsdata.arrival.entity.TimedEnableStationRoute;
3 5 import com.bsth.service.realcontrol.RealMapService;
4 6 import org.springframework.beans.factory.annotation.Autowired;
5 7 import org.springframework.web.bind.annotation.RequestMapping;
  8 +import org.springframework.web.bind.annotation.RequestMethod;
6 9 import org.springframework.web.bind.annotation.RequestParam;
7 10 import org.springframework.web.bind.annotation.RestController;
8 11  
... ... @@ -74,4 +77,9 @@ public class RealMapController {
74 77 public Map<String, Object> multiSectionRoute(@RequestParam String codeIdx){
75 78 return realMapService.multiSectionRoute(codeIdx);
76 79 }
  80 +
  81 + @RequestMapping(value = "/lockAndFlxedTimeEnabled", method = RequestMethod.POST)
  82 + public void lockAndFlxedTimeEnabled(TimedEnableStationRoute tes){
  83 + GeoCacheData.tesMap.put(tes.getLineCode(), tes);
  84 + }
77 85 }
... ...
src/main/java/com/bsth/controller/realcontrol/ScheduleRealInfoController.java
... ... @@ -417,6 +417,70 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo,
417 417 }
418 418 return scheduleRealInfoService.statisticsDailyTj(gsdm,fgsdm,line, date,date2, xlName, type);
419 419 }
  420 +
  421 + /*
  422 + * 公里修正报表
  423 + */
  424 + @RequestMapping(value="/mileageReportTj")
  425 + public List<Map<String,Object>> mileageReport(@RequestParam Map<String, Object> map){
  426 + String gsdm="";
  427 + if(map.get("gsdm")!=null){
  428 + gsdm=map.get("gsdm").toString();
  429 + }
  430 + String fgsdm="";
  431 + if(map.get("fgsdm")!=null){
  432 + fgsdm=map.get("fgsdm").toString();
  433 + }
  434 + String line="";
  435 + if(map.get("line")!=null){
  436 + line=map.get("line").toString();
  437 + }
  438 + String date="";
  439 + if(map.get("date")!=null){
  440 + date=map.get("date").toString();
  441 + }
  442 + String date2="";
  443 + if(map.get("date2")!=null){
  444 + date2=map.get("date2").toString();
  445 + }
  446 + String xlName="";
  447 + if(map.get("xlName")!=null){
  448 + xlName=map.get("xlName").toString();
  449 + }
  450 + return scheduleRealInfoService.mileageReport(gsdm,fgsdm,line, date,date2);
  451 + }
  452 +
  453 + /*
  454 + * 班次修正报表
  455 + */
  456 + @RequestMapping(value="/scheduleCorrectionReport")
  457 + public List<Map<String,Object>> scheduleCorrectionReport(@RequestParam Map<String, Object> map){
  458 + String gsdm="";
  459 + if(map.get("gsdm")!=null){
  460 + gsdm=map.get("gsdm").toString();
  461 + }
  462 + String fgsdm="";
  463 + if(map.get("fgsdm")!=null){
  464 + fgsdm=map.get("fgsdm").toString();
  465 + }
  466 + String line="";
  467 + if(map.get("line")!=null){
  468 + line=map.get("line").toString();
  469 + }
  470 + String date="";
  471 + if(map.get("date")!=null){
  472 + date=map.get("date").toString();
  473 + }
  474 + String date2="";
  475 + if(map.get("date2")!=null){
  476 + date2=map.get("date2").toString();
  477 + }
  478 + String xlName="";
  479 + if(map.get("xlName")!=null){
  480 + xlName=map.get("xlName").toString();
  481 + }
  482 + return scheduleRealInfoService.scheduleCorrectionReport(gsdm,fgsdm,line, date,date2);
  483 + }
420 484  
421 485 @RequestMapping(value="/MapById",method = RequestMethod.GET)
422 486 public Map<String, Object> MapById(@RequestParam("id") Long id){
... ...
src/main/java/com/bsth/controller/realcontrol/anomalyCheckController.java
... ... @@ -95,4 +95,25 @@ public class anomalyCheckController {
95 95 public void updateCacheBuff(){
96 96 geoCacheData.loadData();
97 97 }
  98 +
  99 + @RequestMapping(value = "/reCalcLpSch")
  100 + public void reCalcLpSch(){
  101 + dayOfSchedule._test_reCalcLpSch();
  102 + }
  103 +
  104 + @RequestMapping(value = "/findSchByLpName")
  105 + public List<ScheduleRealInfo> findSchByLpName(@RequestParam String lpName){
  106 + return dayOfSchedule.getLpScheduleMap().get(lpName);
  107 + }
  108 +
  109 + @RequestMapping(value = "/findSchByNbbm")
  110 + public List<ScheduleRealInfo> findSchByNbbm(@RequestParam String nbbm){
  111 + return dayOfSchedule.findByNbbm(nbbm);
  112 + }
  113 +
  114 + @RequestMapping(value = "/removeExecPlan")
  115 + public int removeExecPlan(@RequestParam String nbbm){
  116 + dayOfSchedule.removeExecPlan(nbbm);
  117 + return 1;
  118 + }
98 119 }
... ...
src/main/java/com/bsth/controller/report/ReportController.java
... ... @@ -84,12 +84,19 @@ public class ReportController {
84 84 @RequestParam int zd){
85 85 return service.queryStrinon(line,zd);
86 86 }
  87 + //根据排班查到离站
87 88 @RequestMapping(value="/queryInOutStrtion" ,method = RequestMethod.GET)
88 89 public List<Map<String, Object>> queryInOutStrtion(@RequestParam String line,
89 90 @RequestParam String date,@RequestParam int zd,@RequestParam String lzsj){
90 91 return service.queryInOutStrtion(line,date,zd,lzsj);
91 92 }
92 93  
  94 + //根据GPS数据查到离站
  95 + @RequestMapping(value="/queryInOutStrtions" ,method = RequestMethod.GET)
  96 + public List<Map<String, Object>> queryInOutStrtions(@RequestParam String line,
  97 + @RequestParam String date,@RequestParam int zd,@RequestParam String lzsj){
  98 + return service.queryInOutStrtions(line,date,zd,lzsj);
  99 + }
93 100 @RequestMapping(value="/queryListClzd" ,method = RequestMethod.GET)
94 101 public List<ArrivalInfo> queryListClzd(@RequestParam String zd,@RequestParam String line,
95 102 @RequestParam String zdlx,@RequestParam String fcsj,@RequestParam String ddsj){
... ...
src/main/java/com/bsth/controller/sys/IntervalController.java
... ... @@ -9,12 +9,13 @@ import org.springframework.web.bind.annotation.RequestParam;
9 9 import org.springframework.web.bind.annotation.RestController;
10 10  
11 11 import com.alibaba.fastjson.JSON;
  12 +import com.bsth.controller.BaseController;
12 13 import com.bsth.entity.sys.Interval;
13 14 import com.bsth.service.sys.IntervalService;
14 15  
15 16 @RestController
16 17 @RequestMapping("interval")
17   -public class IntervalController {
  18 +public class IntervalController extends BaseController<Interval, Integer> {
18 19  
19 20 @Autowired
20 21 IntervalService intervalService;
... ...
src/main/java/com/bsth/controller/sys/UserController.java
... ... @@ -31,220 +31,252 @@ import java.util.*;
31 31 @RequestMapping("user")
32 32 public class UserController extends BaseController<SysUser, Integer> {
33 33  
34   - Logger logger = LoggerFactory.getLogger(this.getClass());
35   -
36   - @Autowired
37   - SysUserService sysUserService;
38   -
39   - @Autowired
40   - CompanyAuthorityService companyAuthorityService;
41   -
42   - @RequestMapping(value = "/login/jCryptionKey")
43   - public Map<String, Object> jCryptionKey(HttpServletRequest request){
44   - //公匙返回页面
45   - Map<String, Object> rs = new HashMap<>();
46   - rs.put("publickey", RSAUtils.generateBase64PublicKey());
47   - return rs;
48   - }
49   -
50   - //需要验证码的账号
51   - public static Map<String, Integer> captchaMap = new HashMap<>();
52   -
53   - @RequestMapping(value = "/login", method = RequestMethod.POST)
54   - public Map<String, Object> login(HttpServletRequest request, @RequestParam String userName,
55   - @RequestParam String password, String captcha) {
56   -
57   - Map<String, Object> rs = new HashMap<>();
58   - rs.put("status", ResponseCode.ERROR);
59   - try {
60   - HttpSession session = request.getSession();
61   - rs.put("captcha", session.getAttribute("captcha"));
62   -
63   - if(captchaMap.get(userName) != null && captchaMap.get(userName) >= 3){
64   - //校验验证码
65   - String verCode = (String) session
66   - .getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
67   -
68   - if(StringUtils.isBlank(captcha))
69   - return put(rs, "msg", "请输入验证码");
70   -
71   - if(!verCode.equals(captcha))
72   - return put(rs, "msg", "验证码有误,请刷新后重新输入");
73   - }
74   -
75   - //解密RSA
76   - try {
77   - userName = RSAUtils.decryptBase64(userName);
78   - password = RSAUtils.decryptBase64(password);
79   - } catch (RuntimeException e) {
80   - return put(rs, "msg", "decrypt RSA fail!可能页面已过期,尝试刷新页面。");
81   - }
82   -
83   - SysUser user = sysUserService.findByUserName(userName);
84   - if (null == user)
85   - return put(rs, "msg", "不存在的用户");
86   -
87   - if (!user.isEnabled())
88   - return put(rs, "msg", "该用户已被锁定,请联系管理员");
89   -
90   - // 校验密码
91   - boolean matchStatus = new BCryptPasswordEncoder(4).matches(password, user.getPassword());
92   - if (!matchStatus) {
93   - rs.put("msg", "密码有误");
94   -
95   - Integer captchSize = captchaMap.get(userName);
96   - if(null == captchSize)
97   - captchSize = 0;
98   -
99   - captchSize ++;
100   - captchaMap.put(userName, captchSize);
101   - return rs;
102   - }
103   -
104   - // 登录
105   - SecurityUtils.login(user, request);
106   - //session里写入用户名,webSocket连接时标识身份用
107   - session.setAttribute(Constants.SESSION_USERNAME, user.getUserName());
108   -
109   - //获取公司权限数据
110   - List<CompanyAuthority> cmyAuths=companyAuthorityService.findByUser(user);
111   - session.setAttribute(Constants.COMPANY_AUTHORITYS, cmyAuths);
112   -
113   - captchaMap.remove(userName);
114   - rs.put("status", ResponseCode.SUCCESS);
115   - } catch (Exception e) {
116   - logger.error("", e);
117   - rs.put("msg", "服务器出现异常,请联系管理员");
118   - }
119   - return rs;
120   - }
121   -
122   - /**
123   - * 返回当前用户的公司权限数据,用于构建页面级联下拉框
124   - * @return
125   - */
126   - @RequestMapping("companyData")
127   - public List<CompanyData> companyData(HttpServletRequest request){
128   - List<CompanyData> rs = new ArrayList<>();
129   - CompanyData companyData;
130   -
131   - ArrayListMultimap<String, CompanyAuthority> map = ArrayListMultimap.create();
132   - List<CompanyAuthority> cmyAuths = (List<CompanyAuthority>) request.getSession().getAttribute(Constants.COMPANY_AUTHORITYS);
133   -
134   - for(CompanyAuthority cAuth : cmyAuths){
135   - map.put(cAuth.getCompanyCode()+"_"+cAuth.getCompanyName(), cAuth);
136   - }
137   -
138   - Set<String> keys = map.keySet();
139   - String[] temps;
140   - for(String k : keys){
141   - temps = k.split("_");
142   -
143   - companyData = new CompanyData();
144   - companyData.setCompanyCode(temps[0]);
145   - companyData.setCompanyName(temps[1]);
146   - companyData.setChildren(new ArrayList<CompanyData.ChildrenCompany>());
147   -
148   - cmyAuths = map.get(k);
149   - for(CompanyAuthority c : cmyAuths){
150   - companyData.getChildren().add(new CompanyData.ChildrenCompany(c.getSubCompanyCode(), c.getSubCompanyName()));
151   - }
152   -
153   - rs.add(companyData);
154   - }
155   -
156   - return rs;
157   - }
158   -
159   - @RequestMapping(value = "/login/captchaStatus")
160   - public int captchaStatus(String userName){
161   - Integer size = captchaMap.get(userName);
162   - return size == null?0:size;
163   - }
164   -
165   - public Map<String, Object> put(Map<String, Object> rs, String key, Object val){
166   - rs.put(key, val);
167   - return rs;
168   - }
169   -
170   - /**
171   - *
172   - * @Title: loginFailure @Description: TODO(查询登录失败的详细信息) @param @param
173   - * request @return String 返回类型 @throws
174   - */
175   - @RequestMapping("/loginFailure")
176   - public String loginFailure(HttpServletRequest request) {
177   - String msg = "";
178   - HttpSession session = request.getSession();
179   -
180   - Object obj = session.getAttribute("SPRING_SECURITY_LAST_EXCEPTION");
181   -
182   - if (obj instanceof BadCredentialsException)
183   - msg = "登录失败,用户名或密码错误.";
184   - else if (obj instanceof SessionAuthenticationException)
185   - msg = "登录失败,当前策略不允许重复登录.";
186   - session.removeAttribute("SPRING_SECURITY_LAST_EXCEPTION");
187   - return msg;
188   - }
189   -
190   - @RequestMapping("/currentUser")
191   - public SysUser currentUser() {
192   - return SecurityUtils.getCurrentUser();
193   - }
194   -
195   - /**
196   - * @Title changeEnabled
197   - * @Description: TODO(改变用户状态)
198   - * @param id
199   - * 用户ID
200   - * @param enabled
201   - * 状态
202   - * @return
203   - */
204   - @RequestMapping("/changeEnabled")
205   - public int changeEnabled(@RequestParam int id, @RequestParam int enabled) {
206   - return sysUserService.changeEnabled(id, enabled);
207   - }
208   -
209   - /**
210   - * @Title changePWD
211   - * @Description: TODO(修改密码)
212   - * @param oldPWD
213   - * 原始密码
214   - * @param newPWD
215   - * 新密码
216   - * @param cnewPWD
217   - * 确认新密码
218   - * @return
219   - */
220   - @RequestMapping(value = "/changePWD", method = RequestMethod.POST)
221   - public String changePWD(@RequestParam String oldPWD, @RequestParam String newPWD, @RequestParam String cnewPWD) {
222   - SysUser sysUser = SecurityUtils.getCurrentUser();
223   - String msg = "";
224   - if (new BCryptPasswordEncoder(4).matches(oldPWD, sysUser.getPassword())) {
225   - if (oldPWD.equals(newPWD)) {
226   - msg = "新密码不能跟原始密码一样!";
227   - } else {
228   - if (newPWD.equals(cnewPWD)) {
229   - sysUserService.changePWD(sysUser.getId(), newPWD);
230   - msg = "修改成功!";
231   - } else {
232   - msg = "新密码两次输入不一致!";
233   - }
234   - }
235   - } else {
236   - msg = "原始密码错误!";
237   - }
238   - return msg;
239   - }
240   -
241   - @RequestMapping(value = "/register" ,method = RequestMethod.POST)
242   - public Map<String, Object> register(SysUser u){
243   - return sysUserService.register(u);
244   - }
245   -
246   - @RequestMapping(value = "/all_distinct")
247   - public List<SysUser> findAll_distinct(){
248   - return sysUserService.findAll_distinct();
249   - }
  34 + Logger logger = LoggerFactory.getLogger(this.getClass());
  35 +
  36 + @Autowired
  37 + SysUserService sysUserService;
  38 +
  39 + @Autowired
  40 + CompanyAuthorityService companyAuthorityService;
  41 +
  42 + @RequestMapping(value = "/login/jCryptionKey")
  43 + public Map<String, Object> jCryptionKey(HttpServletRequest request) {
  44 + //公匙返回页面
  45 + Map<String, Object> rs = new HashMap<>();
  46 + rs.put("publickey", RSAUtils.generateBase64PublicKey());
  47 + return rs;
  48 + }
  49 +
  50 + //需要验证码的账号
  51 + public static Map<String, Integer> captchaMap = new HashMap<>();
  52 +
  53 + @RequestMapping(value = "/login", method = RequestMethod.POST)
  54 + public Map<String, Object> login(HttpServletRequest request, @RequestParam String userName,
  55 + @RequestParam String password, String captcha) {
  56 +
  57 + Map<String, Object> rs = new HashMap<>();
  58 + rs.put("status", ResponseCode.ERROR);
  59 + try {
  60 + HttpSession session = request.getSession();
  61 + rs.put("captcha", session.getAttribute("captcha"));
  62 +
  63 + if (captchaMap.get(userName) != null && captchaMap.get(userName) >= 3) {
  64 + //校验验证码
  65 + String verCode = (String) session
  66 + .getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
  67 +
  68 + if (StringUtils.isBlank(captcha))
  69 + return put(rs, "msg", "请输入验证码");
  70 +
  71 + if (!verCode.equals(captcha))
  72 + return put(rs, "msg", "验证码有误,请刷新后重新输入");
  73 + }
  74 +
  75 + //解密RSA
  76 + try {
  77 + userName = RSAUtils.decryptBase64(userName);
  78 + password = RSAUtils.decryptBase64(password);
  79 + } catch (RuntimeException e) {
  80 + return put(rs, "msg", "decrypt RSA fail!可能页面已过期,尝试刷新页面。");
  81 + }
  82 +
  83 + SysUser user = sysUserService.findByUserName(userName);
  84 + if (null == user)
  85 + return put(rs, "msg", "不存在的用户");
  86 +
  87 + if (!user.isEnabled())
  88 + return put(rs, "msg", "该用户已被锁定,请联系管理员");
  89 +
  90 + // 校验密码
  91 + boolean matchStatus = new BCryptPasswordEncoder(4).matches(password, user.getPassword());
  92 + if (!matchStatus) {
  93 + rs.put("msg", "密码有误");
  94 +
  95 + Integer captchSize = captchaMap.get(userName);
  96 + if (null == captchSize)
  97 + captchSize = 0;
  98 +
  99 + captchSize++;
  100 + captchaMap.put(userName, captchSize);
  101 + return rs;
  102 + }
  103 +
  104 + // 登录
  105 + SecurityUtils.login(user, request);
  106 + //session里写入用户名,webSocket连接时标识身份用
  107 + session.setAttribute(Constants.SESSION_USERNAME, user.getUserName());
  108 +
  109 + //获取公司权限数据
  110 + List<CompanyAuthority> cmyAuths = companyAuthorityService.findByUser(user);
  111 + session.setAttribute(Constants.COMPANY_AUTHORITYS, cmyAuths);
  112 +
  113 + captchaMap.remove(userName);
  114 + rs.put("status", ResponseCode.SUCCESS);
  115 + } catch (Exception e) {
  116 + logger.error("", e);
  117 + rs.put("msg", "服务器出现异常,请联系管理员");
  118 + }
  119 + return rs;
  120 + }
  121 +
  122 + @RequestMapping(value = "/change_user", method = RequestMethod.POST)
  123 + public Map<String, Object> changeUser(HttpServletRequest request, @RequestParam String userName,
  124 + @RequestParam String password) {
  125 +
  126 + Map<String, Object> rs = new HashMap<>();
  127 + rs.put("status", ResponseCode.ERROR);
  128 + try {
  129 + HttpSession session = request.getSession();
  130 +
  131 + SysUser user = sysUserService.findByUserName(userName);
  132 + if (null == user)
  133 + return put(rs, "msg", "不存在的用户");
  134 +
  135 + if (!user.isEnabled())
  136 + return put(rs, "msg", "该用户已被锁定,请联系管理员");
  137 +
  138 + // 校验密码
  139 + boolean matchStatus = new BCryptPasswordEncoder(4).matches(password, user.getPassword());
  140 + if (!matchStatus)
  141 + return put(rs, "msg", "密码有误");
  142 +
  143 + // 登录
  144 + SecurityUtils.login(user, request);
  145 + //session里写入用户名,webSocket连接时标识身份用
  146 + session.setAttribute(Constants.SESSION_USERNAME, user.getUserName());
  147 +
  148 + //获取公司权限数据
  149 + List<CompanyAuthority> cmyAuths = companyAuthorityService.findByUser(user);
  150 + session.setAttribute(Constants.COMPANY_AUTHORITYS, cmyAuths);
  151 + rs.put("status", ResponseCode.SUCCESS);
  152 + } catch (Exception e) {
  153 + logger.error("", e);
  154 + rs.put("msg", "服务器出现异常,请联系管理员");
  155 + }
  156 + return rs;
  157 + }
  158 +
  159 + /**
  160 + * 返回当前用户的公司权限数据,用于构建页面级联下拉框
  161 + *
  162 + * @return
  163 + */
  164 + @RequestMapping("companyData")
  165 + public List<CompanyData> companyData(HttpServletRequest request) {
  166 + List<CompanyData> rs = new ArrayList<>();
  167 + CompanyData companyData;
  168 +
  169 + ArrayListMultimap<String, CompanyAuthority> map = ArrayListMultimap.create();
  170 + List<CompanyAuthority> cmyAuths = (List<CompanyAuthority>) request.getSession().getAttribute(Constants.COMPANY_AUTHORITYS);
  171 +
  172 + for (CompanyAuthority cAuth : cmyAuths) {
  173 + map.put(cAuth.getCompanyCode() + "_" + cAuth.getCompanyName(), cAuth);
  174 + }
  175 +
  176 + Set<String> keys = map.keySet();
  177 + String[] temps;
  178 + for (String k : keys) {
  179 + temps = k.split("_");
  180 +
  181 + companyData = new CompanyData();
  182 + companyData.setCompanyCode(temps[0]);
  183 + companyData.setCompanyName(temps[1]);
  184 + companyData.setChildren(new ArrayList<CompanyData.ChildrenCompany>());
  185 +
  186 + cmyAuths = map.get(k);
  187 + for (CompanyAuthority c : cmyAuths) {
  188 + companyData.getChildren().add(new CompanyData.ChildrenCompany(c.getSubCompanyCode(), c.getSubCompanyName()));
  189 + }
  190 +
  191 + rs.add(companyData);
  192 + }
  193 +
  194 + return rs;
  195 + }
  196 +
  197 + @RequestMapping(value = "/login/captchaStatus")
  198 + public int captchaStatus(String userName) {
  199 + Integer size = captchaMap.get(userName);
  200 + return size == null ? 0 : size;
  201 + }
  202 +
  203 + public Map<String, Object> put(Map<String, Object> rs, String key, Object val) {
  204 + rs.put(key, val);
  205 + return rs;
  206 + }
  207 +
  208 + /**
  209 + * @Title: loginFailure @Description: TODO(查询登录失败的详细信息) @param @param
  210 + * request @return String 返回类型 @throws
  211 + */
  212 + @RequestMapping("/loginFailure")
  213 + public String loginFailure(HttpServletRequest request) {
  214 + String msg = "";
  215 + HttpSession session = request.getSession();
  216 +
  217 + Object obj = session.getAttribute("SPRING_SECURITY_LAST_EXCEPTION");
  218 +
  219 + if (obj instanceof BadCredentialsException)
  220 + msg = "登录失败,用户名或密码错误.";
  221 + else if (obj instanceof SessionAuthenticationException)
  222 + msg = "登录失败,当前策略不允许重复登录.";
  223 + session.removeAttribute("SPRING_SECURITY_LAST_EXCEPTION");
  224 + return msg;
  225 + }
  226 +
  227 + @RequestMapping("/currentUser")
  228 + public SysUser currentUser() {
  229 + return SecurityUtils.getCurrentUser();
  230 + }
  231 +
  232 + /**
  233 + * @param id 用户ID
  234 + * @param enabled 状态
  235 + * @return
  236 + * @Title changeEnabled
  237 + * @Description: TODO(改变用户状态)
  238 + */
  239 + @RequestMapping("/changeEnabled")
  240 + public int changeEnabled(@RequestParam int id, @RequestParam int enabled) {
  241 + return sysUserService.changeEnabled(id, enabled);
  242 + }
  243 +
  244 + /**
  245 + * @param oldPWD 原始密码
  246 + * @param newPWD 新密码
  247 + * @param cnewPWD 确认新密码
  248 + * @return
  249 + * @Title changePWD
  250 + * @Description: TODO(修改密码)
  251 + */
  252 + @RequestMapping(value = "/changePWD", method = RequestMethod.POST)
  253 + public String changePWD(@RequestParam String oldPWD, @RequestParam String newPWD, @RequestParam String cnewPWD) {
  254 + SysUser sysUser = SecurityUtils.getCurrentUser();
  255 + String msg = "";
  256 + if (new BCryptPasswordEncoder(4).matches(oldPWD, sysUser.getPassword())) {
  257 + if (oldPWD.equals(newPWD)) {
  258 + msg = "新密码不能跟原始密码一样!";
  259 + } else {
  260 + if (newPWD.equals(cnewPWD)) {
  261 + sysUserService.changePWD(sysUser.getId(), newPWD);
  262 + msg = "修改成功!";
  263 + } else {
  264 + msg = "新密码两次输入不一致!";
  265 + }
  266 + }
  267 + } else {
  268 + msg = "原始密码错误!";
  269 + }
  270 + return msg;
  271 + }
  272 +
  273 + @RequestMapping(value = "/register", method = RequestMethod.POST)
  274 + public Map<String, Object> register(SysUser u) {
  275 + return sysUserService.register(u);
  276 + }
  277 +
  278 + @RequestMapping(value = "/all_distinct")
  279 + public List<SysUser> findAll_distinct() {
  280 + return sysUserService.findAll_distinct();
  281 + }
250 282 }
... ...
src/main/java/com/bsth/controller/traffic/VehicleInoutStopController.java 0 → 100644
  1 +package com.bsth.controller.traffic;
  2 +
  3 +import com.bsth.controller.BaseController;
  4 +import com.bsth.entity.traffic.VehicleInoutStop;
  5 +import org.springframework.web.bind.annotation.RequestMapping;
  6 +import org.springframework.web.bind.annotation.RestController;
  7 +/**
  8 + *
  9 + * @author BSTH
  10 + *
  11 + */
  12 +@RestController
  13 +@RequestMapping("vehicle_stop")
  14 +public class VehicleInoutStopController extends BaseController<VehicleInoutStop,Integer> {
  15 +}
... ...
src/main/java/com/bsth/data/BasicData.java
1 1 package com.bsth.data;
2 2  
3   -import com.bsth.Application;
4 3 import com.bsth.data.gpsdata.arrival.GeoCacheData;
5 4 import com.bsth.data.pinyin.PersionPinYinBuffer;
6 5 import com.bsth.entity.*;
... ... @@ -13,12 +12,9 @@ import org.apache.commons.lang3.StringUtils;
13 12 import org.slf4j.Logger;
14 13 import org.slf4j.LoggerFactory;
15 14 import org.springframework.beans.factory.annotation.Autowired;
16   -import org.springframework.boot.CommandLineRunner;
17   -import org.springframework.jdbc.core.JdbcTemplate;
18 15 import org.springframework.stereotype.Component;
19 16  
20 17 import java.util.*;
21   -import java.util.concurrent.TimeUnit;
22 18  
23 19 /**
24 20 * @author PanZhao
... ... @@ -27,7 +23,7 @@ import java.util.concurrent.TimeUnit;
27 23 * @date 2016年8月10日 下午3:27:45
28 24 */
29 25 @Component
30   -public class BasicData implements CommandLineRunner {
  26 +public class BasicData {
31 27  
32 28 //公司代码和公司名对照(K: 公司编码,V:公司名)
33 29 public static Map<String, String> businessCodeNameMap;
... ... @@ -80,20 +76,12 @@ public class BasicData implements CommandLineRunner {
80 76  
81 77 static Logger logger = LoggerFactory.getLogger(BasicData.class);
82 78  
83   - @Autowired
84   - BasicDataLoader dataLoader;
85   -
86   - @Override
87   - public void run(String... arg0) throws Exception {
88   - Application.mainServices.scheduleWithFixedDelay(dataLoader, 2, 2, TimeUnit.HOURS);
89   - }
90   -
91 79 public static String getStationNameByCode(String code, String prefix){
92 80 String name = stationCode2NameMap.get(code);
93 81 return name != null? name: stationCode2NameMap.get(prefix + code);
94 82 }
95 83  
96   - @Autowired
  84 +/* @Autowired
97 85 JdbcTemplate jdbcTemplate;
98 86 public Map<String, String> getNbbm2PlateNo(){
99 87 List<Map<String, Object>> list = jdbcTemplate.queryForList("select CAR_CODE,CAR_PLATE from bsth_c_cars where CAR_CODE is not null and CAR_PLATE is not null");
... ... @@ -103,7 +91,7 @@ public class BasicData implements CommandLineRunner {
103 91 rs.put(map.get("CAR_CODE").toString(), map.get("CAR_PLATE").toString());
104 92 }
105 93 return rs;
106   - }
  94 + }*/
107 95  
108 96 @Component
109 97 public static class BasicDataLoader extends Thread {
... ... @@ -269,7 +257,7 @@ public class BasicData implements CommandLineRunner {
269 257 * @Description: TODO(加载线路相关信息)
270 258 */
271 259 public void loadLineInfo() {
272   - Iterator<Line> iterator = lineRepository.findAll().iterator();
  260 + Iterator<Line> iterator = lineRepository.findAllService().iterator();
273 261  
274 262 Line line;
275 263 BiMap<Integer, String> biMap = HashBiMap.create();
... ...
src/main/java/com/bsth/data/LineConfigData.java
... ... @@ -77,7 +77,7 @@ public class LineConfigData implements CommandLineRunner {
77 77 public long applyIn(ScheduleRealInfo sch, Long timestamp){
78 78 LineConfig config = lineConfMap.get(sch.getXlBm());
79 79 int diff = sch.getXlDir().equals("0")?config.getUpInDiff():config.getDownInDiff();
80   - return timestamp - (diff * 1000);
  80 + return timestamp + (diff * 1000);
81 81 }
82 82  
83 83 @Component
... ...
src/main/java/com/bsth/data/car_out_info/CarOutInfoHandler.java
... ... @@ -54,27 +54,19 @@ public class CarOutInfoHandler {
54 54 * 全量更新发车信息表
55 55 */
56 56 public void updateAll() {
57   - Set<String> ks = BasicData.lineCode2NameMap.keySet();
58   - for (String lineCode : ks) {
59   - update(lineCode);
60   - }
61   - }
62   -
63   - public void update(String lineCode) {
64   - try {
65   - ArrayListMultimap<String, ScheduleRealInfo> lpScheduleMap = dayOfSchedule.getLpScheduleMap();
66   - List<ScheduleRealInfo> list = new ArrayList<>();
  57 + try{
  58 + //将班次按线路分组
  59 + List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findAll());
  60 + ArrayListMultimap<String, ScheduleRealInfo> xlMaps = ArrayListMultimap.create();
  61 + for(ScheduleRealInfo sch : all){
  62 + xlMaps.put(sch.getXlBm(), sch);
  63 + }
67 64  
68   - Set<String> ks = lpScheduleMap.keySet();
69   - String prefix = lineCode + "_";
  65 + Set<String> ks = xlMaps.keySet();
70 66 for (String k : ks) {
71   - if (k.startsWith(prefix)) {
72   - list.addAll(lpScheduleMap.get(k));
73   - }
  67 + update(xlMaps.get(k));
74 68 }
75   -
76   - update(list);
77   - } catch (Exception e) {
  69 + }catch (Exception e){
78 70 logger.error("", e);
79 71 }
80 72 }
... ...
src/main/java/com/bsth/data/forecast/ForecastRealServer.java
1 1 package com.bsth.data.forecast;
2 2  
3   -import com.bsth.Application;
4 3 import com.bsth.data.forecast.entity.ForecastResult;
5 4 import com.bsth.data.forecast.entity.ForecastResult.ForecastResultItem;
6 5 import com.bsth.data.forecast.entity.SimpleRoute;
... ... @@ -13,7 +12,6 @@ import com.google.common.collect.ArrayListMultimap;
13 12 import org.slf4j.Logger;
14 13 import org.slf4j.LoggerFactory;
15 14 import org.springframework.beans.factory.annotation.Autowired;
16   -import org.springframework.boot.CommandLineRunner;
17 15 import org.springframework.stereotype.Component;
18 16  
19 17 import java.text.DecimalFormat;
... ... @@ -21,7 +19,6 @@ import java.util.ArrayList;
21 19 import java.util.HashMap;
22 20 import java.util.List;
23 21 import java.util.Map;
24   -import java.util.concurrent.TimeUnit;
25 22  
26 23 /**
27 24 *
... ... @@ -32,10 +29,7 @@ import java.util.concurrent.TimeUnit;
32 29 *
33 30 */
34 31 @Component
35   -public class ForecastRealServer implements CommandLineRunner {
36   -
37   - @Autowired
38   - SampleTimeDataLoader dataLoader;
  32 +public class ForecastRealServer {
39 33  
40 34 @Autowired
41 35 DayOfSchedule dayOfSchedule;
... ... @@ -57,12 +51,6 @@ public class ForecastRealServer implements CommandLineRunner {
57 51 forecastMap = new HashMap<>();
58 52 }
59 53  
60   - @Override
61   - public void run(String... arg0) throws Exception {
62   - //2小时更新一次站点间耗时数据
63   - Application.mainServices.scheduleWithFixedDelay(dataLoader, 12, 120 * 60, TimeUnit.SECONDS);
64   - }
65   -
66 54 /**
67 55 *
68 56 * @Title: forecast
... ...
src/main/java/com/bsth/data/gpsdata/GpsEntity.java
... ... @@ -79,6 +79,12 @@ public class GpsEntity implements Cloneable{
79 79 @JsonIgnore
80 80 private StationRoute station;
81 81  
  82 + /**
  83 + * 前置约束 -站点编码
  84 + */
  85 + @JsonIgnore
  86 + private String premiseCode;
  87 +
82 88 /** 状态 */
83 89 private String signalState = "normal";
84 90  
... ... @@ -358,4 +364,12 @@ public class GpsEntity implements Cloneable{
358 364 public void setServerTimestamp(Long serverTimestamp) {
359 365 this.serverTimestamp = serverTimestamp;
360 366 }
  367 +
  368 + public String getPremiseCode() {
  369 + return premiseCode;
  370 + }
  371 +
  372 + public void setPremiseCode(String premiseCode) {
  373 + this.premiseCode = premiseCode;
  374 + }
361 375 }
... ...
src/main/java/com/bsth/data/gpsdata/arrival/GeoCacheData.java
... ... @@ -2,8 +2,11 @@ package com.bsth.data.gpsdata.arrival;
2 2  
3 3 import com.bsth.data.gpsdata.GpsEntity;
4 4 import com.bsth.data.gpsdata.arrival.entity.StationRoute;
  5 +import com.bsth.data.gpsdata.arrival.entity.TimedEnableStationRoute;
  6 +import com.bsth.data.gpsdata.arrival.precondition.entity.PreconditionGeo;
5 7 import com.bsth.data.gpsdata.arrival.utils.CircleQueue;
6 8 import com.bsth.data.gpsdata.arrival.utils.StationRouteComp;
  9 +import com.google.common.base.Splitter;
7 10 import com.google.common.collect.ArrayListMultimap;
8 11 import com.vividsolutions.jts.geom.Coordinate;
9 12 import com.vividsolutions.jts.geom.GeometryFactory;
... ... @@ -13,6 +16,7 @@ import org.apache.commons.lang3.StringUtils;
13 16 import org.slf4j.Logger;
14 17 import org.slf4j.LoggerFactory;
15 18 import org.springframework.beans.factory.annotation.Autowired;
  19 +import org.springframework.jdbc.core.BeanPropertyRowMapper;
16 20 import org.springframework.jdbc.core.JdbcTemplate;
17 21 import org.springframework.jdbc.core.RowMapper;
18 22 import org.springframework.stereotype.Component;
... ... @@ -41,6 +45,8 @@ public class GeoCacheData {
41 45  
42 46 //线路站点路由
43 47 private static ArrayListMultimap<String, StationRoute> stationCacheMap;
  48 + //线路前置进站围栏
  49 + public static ArrayListMultimap<String, PreconditionGeo> premiseGeoMap;
44 50  
45 51 //线路_上下行_站点编码 ——> 站点
46 52 private static Map<String, StationRoute> routeCodeMap;
... ... @@ -53,6 +59,9 @@ public class GeoCacheData {
53 59 //线路限速信息
54 60 private static Map<String, Double> speedLimitMap;
55 61  
  62 + //需要定时刷新的站点路由
  63 + public static Map<String, TimedEnableStationRoute> tesMap = new HashMap<>();
  64 +
56 65 @Autowired
57 66 JdbcTemplate jdbcTemplate;
58 67  
... ... @@ -63,10 +72,6 @@ public class GeoCacheData {
63 72 public static void putGps(GpsEntity gps) {
64 73 CircleQueue<GpsEntity> queue = gpsCacheMap.get(gps.getNbbm());
65 74 if (queue == null) {
66   - /*//第一个点从站内开始
67   - if (gps.getInstation() == 0)
68   - return;*/
69   -
70 75 queue = new CircleQueue<>(CACHE_SIZE);
71 76 gpsCacheMap.put(gps.getNbbm(), queue);
72 77 }
... ... @@ -141,6 +146,61 @@ public class GeoCacheData {
141 146  
142 147 //加载路段信息
143 148 loadRoadsData();
  149 +
  150 + //加载前置进站围栏
  151 + loadPremiseGeoData();
  152 + }
  153 +
  154 + private void loadPremiseGeoData() {
  155 + ArrayListMultimap<String, PreconditionGeo> premiseGeoMapCopy = ArrayListMultimap.create();
  156 +
  157 + String sql = "select * from bsth_f_geo_premise";
  158 + List<PreconditionGeo> list = jdbcTemplate.query(sql, BeanPropertyRowMapper.newInstance(PreconditionGeo.class));
  159 +
  160 + List<String> coordList;
  161 + String[] cs;
  162 + com.bsth.util.Geo.Point point;
  163 + List<com.bsth.util.Geo.Point> ps;
  164 + StationRoute sr;
  165 + for(PreconditionGeo p : list){
  166 + try{
  167 + sr = routeCodeMap.get(p.getLineCode()+"_"+p.getUpDown()+"_"+p.getStationCode());
  168 + p.setOrder(sr.getRouteSort());
  169 + //polygon
  170 + ps = new ArrayList<>();
  171 + coordList = Splitter.on(",").trimResults().splitToList(p.getCoords());
  172 + for(String c : coordList){
  173 + cs = c.split(" ");
  174 + point = new com.bsth.util.Geo.Point(Double.parseDouble(cs[0]), Double.parseDouble(cs[1]));
  175 + ps.add(point);
  176 + }
  177 +
  178 + p.setPolygon(new com.bsth.util.Geo.Polygon(ps));
  179 +
  180 + sr.setPremise(true);
  181 + //按线路,走向分组
  182 + premiseGeoMapCopy.put(p.getLineCode()+"_"+p.getUpDown(), p);
  183 + }catch (Exception e){
  184 + logger.error("", e);
  185 + }
  186 + }
  187 +
  188 + //排序
  189 + Set<String> ks = premiseGeoMapCopy.keySet();
  190 + PreconditionGeoComp comp = new PreconditionGeoComp();
  191 + for(String k : ks){
  192 + Collections.sort(premiseGeoMapCopy.get(k), comp);
  193 + }
  194 +
  195 + premiseGeoMap = premiseGeoMapCopy;
  196 + }
  197 +
  198 + private static class PreconditionGeoComp implements Comparator<PreconditionGeo>{
  199 +
  200 + @Override
  201 + public int compare(PreconditionGeo p1, PreconditionGeo p2) {
  202 + return p1.getOrder() - p2.getOrder();
  203 + }
144 204 }
145 205  
146 206 private void loadRoadsData() {
... ... @@ -282,6 +342,28 @@ public class GeoCacheData {
282 342 connectStationRoute(tempMap.get(key));
283 343 }
284 344  
  345 + //定时启用的站点走向
  346 + if(tesMap.size() > 0){
  347 + List<String> rems = new ArrayList<>();
  348 + long t = System.currentTimeMillis();
  349 + for(TimedEnableStationRoute tes : tesMap.values()){
  350 + if(tes.getEnableTime() > t){
  351 + logger.info("锁住站点路由," + tes.getLineCode());
  352 + tempMap.replaceValues(tes.getLineCode() + "_0", stationCacheMap.get(tes.getLineCode() + "_0"));
  353 + tempMap.replaceValues(tes.getLineCode() + "_1", stationCacheMap.get(tes.getLineCode() + "_1"));
  354 + }
  355 + else
  356 + rems.add(tes.getLineCode());
  357 + }
  358 +
  359 + //remove
  360 + if(rems.size() > 0){
  361 + for(String lineCode : rems){
  362 + logger.info("启用路由," + lineCode);
  363 + tesMap.remove(lineCode);
  364 + }
  365 + }
  366 + }
285 367 stationCacheMap = tempMap;
286 368 routeCodeMap = codeMap;
287 369 }
... ...
src/main/java/com/bsth/data/gpsdata/arrival/SignalHandle.java
... ... @@ -78,6 +78,7 @@ public abstract class SignalHandle {
78 78 byte updown = Byte.parseByte(sch.getXlDir());
79 79 //gps 切换走向
80 80 gps.setUpDown(updown);
  81 + gps.setPremiseCode(null);
81 82  
82 83 List<StationRoute> srs = GeoCacheData.getStationRoute(sch.getXlBm(), updown);
83 84 StationRoute station = GeoUtils.gpsInStation(gps, srs);
... ...
src/main/java/com/bsth/data/gpsdata/arrival/entity/StationRoute.java
... ... @@ -60,6 +60,11 @@ public class StationRoute {
60 60  
61 61 private String name;
62 62  
  63 + /**
  64 + * 是否有前置进站约束
  65 + */
  66 + private boolean premise;
  67 +
63 68 public String getCode() {
64 69 return code;
65 70 }
... ... @@ -147,5 +152,13 @@ public class StationRoute {
147 152 public void setName(String name) {
148 153 this.name = name;
149 154 }
  155 +
  156 + public boolean isPremise() {
  157 + return premise;
  158 + }
  159 +
  160 + public void setPremise(boolean premise) {
  161 + this.premise = premise;
  162 + }
150 163 }
151 164  
... ...
src/main/java/com/bsth/data/gpsdata/arrival/entity/TimedEnableStationRoute.java 0 → 100644
  1 +package com.bsth.data.gpsdata.arrival.entity;
  2 +
  3 +/**
  4 + * 定时启用站点路由
  5 + * Created by panzhao on 2017/8/28.
  6 + */
  7 +public class TimedEnableStationRoute {
  8 +
  9 + private String lineCode;
  10 +
  11 + private Long enableTime;
  12 +
  13 + public String getLineCode() {
  14 + return lineCode;
  15 + }
  16 +
  17 + public void setLineCode(String lineCode) {
  18 + this.lineCode = lineCode;
  19 + }
  20 +
  21 + public Long getEnableTime() {
  22 + return enableTime;
  23 + }
  24 +
  25 + public void setEnableTime(Long enableTime) {
  26 + this.enableTime = enableTime;
  27 + }
  28 +}
... ...
src/main/java/com/bsth/data/gpsdata/arrival/handlers/AbnormalStateHandle.java
... ... @@ -65,8 +65,8 @@ public class AbnormalStateHandle extends SignalHandle{
65 65 * @return
66 66 */
67 67 public boolean outOfBounds(GpsEntity gps){
68   - //场内的车不处理
69   - if(gps.getInstation() == 2){
  68 + //只处理电子围栏外的车
  69 + if(gps.getInstation() != 0){
70 70 return false;
71 71 }
72 72  
... ...
src/main/java/com/bsth/data/gpsdata/arrival/handlers/InOutStationSignalHandle.java
... ... @@ -4,6 +4,7 @@ import com.bsth.data.LineConfigData;
4 4 import com.bsth.data.gpsdata.GpsEntity;
5 5 import com.bsth.data.gpsdata.arrival.GeoCacheData;
6 6 import com.bsth.data.gpsdata.arrival.SignalHandle;
  7 +import com.bsth.data.gpsdata.arrival.entity.StationRoute;
7 8 import com.bsth.data.gpsdata.arrival.utils.CircleQueue;
8 9 import com.bsth.data.gpsdata.arrival.utils.ScheduleSignalState;
9 10 import com.bsth.data.gpsdata.arrival.utils.SignalSchPlanMatcher;
... ... @@ -148,6 +149,7 @@ public class InOutStationSignalHandle extends SignalHandle{
148 149 && (gps.getInstation()==0 || !gps.getStopNo().equals(prev.getStopNo()))
149 150 && !willDepart(gps, prev, sch)){
150 151  
  152 + gps.setPremiseCode(null);
151 153 //发车班次匹配
152 154 signalSchPlanMatcher.outMatch(gps, sch);
153 155 sch = dayOfSchedule.executeCurr(gps.getNbbm());
... ... @@ -163,6 +165,10 @@ public class InOutStationSignalHandle extends SignalHandle{
163 165  
164 166 //实发时间
165 167 sch.setFcsjActualAll(rsT);
  168 + sch.setSiginCompate(1);
  169 +
  170 + //出站既出场
  171 + outStationAndOutPark(sch);
166 172 //通知客户端
167 173 sendUtils.sendFcsj(sch);
168 174 //持久化
... ... @@ -171,12 +177,11 @@ public class InOutStationSignalHandle extends SignalHandle{
171 177 //清理应发未发标记
172 178 LateAdjustHandle.remove(sch);
173 179  
174   - if(!gps.isService()){
  180 + if(!gps.isService() && !dayOfSchedule.emptyService(sch)){
175 181 //切换成营运状态
176 182 gpsStatusManager.changeServiceState(sch.getClZbh(), sch.getXlDir(), 0, "发车@系统");
177 183 }
178   - //出站既出场
179   - outStationAndOutPark(sch);
  184 +
180 185 logger.info("车辆:" + sch.getClZbh() + " 班次:" + sch.getDfsj() + "发车, 时间:" + sch.getFcsjActual());
181 186 }
182 187 else if(isOutSch(sch)){
... ... @@ -205,8 +210,8 @@ public class InOutStationSignalHandle extends SignalHandle{
205 210 }
206 211 if(next != null && prev.getStopNo().equals(next.getQdzCode())){
207 212 //发下一个班次
208   - dayOfSchedule.addExecPlan(next);
209   - outStation(gps, prev);
  213 + if(dayOfSchedule.addExecPlan(next))
  214 + outStation(gps, prev);
210 215 }
211 216 }
212 217 //当前班次是区间
... ... @@ -218,8 +223,8 @@ public class InOutStationSignalHandle extends SignalHandle{
218 223 //是环线
219 224 if(prev.getStopNo().equals(next.getQdzCode())){
220 225 //发下一个班次
221   - dayOfSchedule.addExecPlan(next);
222   - outStation(gps, prev);
  226 + if(dayOfSchedule.addExecPlan(next))
  227 + outStation(gps, prev);
223 228 }
224 229 }
225 230 }
... ... @@ -231,6 +236,10 @@ public class InOutStationSignalHandle extends SignalHandle{
231 236 * @return
232 237 */
233 238 private boolean outManyFit(GpsEntity gps, ScheduleRealInfo sch) {
  239 + LineConfig conf = lineConfigData.get(sch.getXlBm());
  240 + if(null != conf && conf.isLockFirstOutTime())
  241 + return false;//锁定第一个发车信号,不匹配最佳
  242 +
234 243 if(StringUtils.isNotEmpty(sch.getZdsjActual()))
235 244 return false;
236 245  
... ... @@ -238,39 +247,42 @@ public class InOutStationSignalHandle extends SignalHandle{
238 247 long t2 = gps.getTimestamp();
239 248 long c = sch.getDfsjT();
240 249  
241   - if(c - t1 > 1000 * 60 * 15 && Math.abs(t2 - c) < 1000 * 60 * 5){
  250 + /*if(c - t1 > 1000 * 60 * 15 && Math.abs(t2 - c) < 1000 * 60 * 5){
  251 + return true;
  252 + }*/
  253 + int threshold = 1000 * 60 * 5;
  254 + if(Math.abs(t2 - c) < threshold && c - t1 > threshold){
242 255 return true;
243 256 }
  257 + //if(Math.abs(t2 - c) < 1000 * 60 * 5 && c - t1 > 1000 * 60 * 5)
244 258 return false;
245 259 }
246 260  
247 261  
248 262 private void outStationAndOutPark(ScheduleRealInfo sch){
249   - LineConfig config = lineConfigData.get(sch.getXlBm());
250   - //限定出站既出场的停车场
251   - String park = config.getTwinsPark();
252   - boolean limitPark = StringUtils.isNotEmpty(park);
253   -
254   - if (config != null && config.getOutConfig() == 2) {
255   - //出站既出场
256   - ScheduleRealInfo schPrev = dayOfSchedule.prev(sch);
257   - if (schPrev != null && schPrev.getBcType().equals("out")
258   - && (!limitPark || park.equals(schPrev.getQdzCode()))) {
259   -
260   - schPrev.setFcsjActualAll(sch.getFcsjActualTime());
261   - schPrev.setZdsjActualAll(sch.getFcsjActualTime());
262   -
263   - sendUtils.refreshSch(schPrev);
264   - dayOfSchedule.save(schPrev);
265   -
266   - /*if(schPrev.getBcType().equals("out")){
267   - //出场时,切换成营运状态
268   - String deviceId = BasicData.deviceId2NbbmMap.inverse().get(sch.getClZbh());
269   - gpsStatusManager.changeServiceState(deviceId, schPrev.getXlDir(), 0, "出场@系统");
270   - //DirectivePushQueue.put6003(schPrev.getClZbh(), 0, Integer.parseInt(schPrev.getXlDir()), "出场@系统");
271   - //directiveService.send60Operation(schPrev.getClZbh(), 0, Integer.parseInt(schPrev.getXlDir()), null, "出场@系统");
272   - }*/
  263 + try{
  264 + LineConfig config = lineConfigData.get(sch.getXlBm());
  265 + //限定出站既出场的停车场
  266 + String park = config.getTwinsPark();
  267 + boolean limitPark = StringUtils.isNotEmpty(park);
  268 +
  269 + if (config != null && config.getOutConfig() == 2) {
  270 + //出站既出场
  271 + ScheduleRealInfo schPrev = dayOfSchedule.prev(sch);
  272 + if (schPrev != null && schPrev.getBcType().equals("out") && (schPrev.getBcsj()==0 || schPrev.getJhlcOrig().intValue()==0)
  273 + && (!limitPark || park.equals(schPrev.getQdzCode()))) {
  274 +
  275 + schPrev.setFcsjActualAll(sch.getFcsjActualTime());
  276 + schPrev.setZdsjActualAll(sch.getFcsjActualTime());
  277 + //起点实到
  278 + sch.setQdzArrDatesj(schPrev.getZdsjActual());
  279 +
  280 + sendUtils.refreshSch(schPrev);
  281 + dayOfSchedule.save(schPrev);
  282 + }
273 283 }
  284 + }catch (Exception e){
  285 + logger.error("", e);
274 286 }
275 287 }
276 288  
... ... @@ -283,7 +295,7 @@ public class InOutStationSignalHandle extends SignalHandle{
283 295 ScheduleRealInfo sch = dayOfSchedule.executeCurr(gps.getNbbm());
284 296  
285 297 if(gps.getStopNo().equals(sch.getZdzCode())
286   - && !gps.getStopNo().equals(prev.getStopNo())){
  298 + && (!gps.getStopNo().equals(prev.getStopNo()) || gps.getStopNo().equals(prev.getPremiseCode()))){
287 299  
288 300 int diff = 0;
289 301 try{
... ... @@ -299,6 +311,11 @@ public class InOutStationSignalHandle extends SignalHandle{
299 311 if(Math.abs(diff) > MAX_NORMAL_DIFF)
300 312 return;
301 313  
  314 + //校验进站前置约束
  315 + if(!validInPremise(gps)){
  316 + return;
  317 + }
  318 +
302 319 //环线或内外圈 ,飘出去再回来
303 320 if(sch.getQdzCode().equals(sch.getZdzCode())
304 321 && StringUtils.isNotEmpty(sch.getFcsjActual())
... ... @@ -316,7 +333,7 @@ public class InOutStationSignalHandle extends SignalHandle{
316 333 long rsT = lineConfigData.applyIn(sch, gps.getTimestamp());
317 334  
318 335 sch.setZdsjActualAll(rsT);
319   -
  336 + sch.setSiginCompate(2);
320 337 //通知误点停靠程序,有车辆到站
321 338 LateAdjustHandle.carArrive(gps);
322 339  
... ... @@ -352,11 +369,12 @@ public class InOutStationSignalHandle extends SignalHandle{
352 369 if(!next.getXlBm().equals(sch.getXlBm())){
353 370 gpsStatusManager.changeLine(next.getClZbh(), next.getXlBm(), "套跑@系统");
354 371 }
355   - }
356   - else if(sch.getBcType().equals("in")){
357   - //进场,切换成非营运状态
358   - gpsStatusManager.changeServiceState(sch.getClZbh(), sch.getXlDir(), 1, "进场@系统");
359   - }
  372 +
  373 + //下一个班次是空驶班次
  374 + if(dayOfSchedule.emptyService(next))
  375 + nonService(sch, "空驶@系统");
  376 + } else
  377 + nonService(sch, "结束@系统");
360 378 }
361 379 else {
362 380 /*if(sch.getFcsjActual() == null){
... ... @@ -393,9 +411,8 @@ public class InOutStationSignalHandle extends SignalHandle{
393 411  
394 412 if(nearSch != null){
395 413 //直接跳到这个班次
396   - dayOfSchedule.addExecPlan(nearSch);
397   - //重新进站
398   - inStation(gps, prev);
  414 + if(dayOfSchedule.addExecPlan(nearSch))
  415 + inStation(gps, prev);//重新进站
399 416 }
400 417 }
401 418 }
... ... @@ -403,6 +420,28 @@ public class InOutStationSignalHandle extends SignalHandle{
403 420 }
404 421  
405 422 /**
  423 + * 校验进站前置约束
  424 + * @param gps
  425 + * @return
  426 + */
  427 + private boolean validInPremise(GpsEntity gps) {
  428 + StationRoute sr = gps.getStation();
  429 + if(null == sr || !sr.isPremise())
  430 + return true;
  431 +
  432 + String premiseCode = gps.getPremiseCode();
  433 +
  434 + if(StringUtils.isNotEmpty(premiseCode) && premiseCode.equals(gps.getStopNo())){
  435 + logger.info("满足前置进站约束 " + premiseCode);
  436 + return true;
  437 + }
  438 + else{
  439 + logger.info(gps.getNbbm() + " not premiseCode 不满足前置进站约束 " + premiseCode);
  440 + }
  441 + return false;
  442 + }
  443 +
  444 + /**
406 445 * 和当前进站信号最匹配的一个班次
407 446 * @param gps
408 447 * @param halfList
... ... @@ -420,7 +459,7 @@ public class InOutStationSignalHandle extends SignalHandle{
420 459 String stopId = gps.getStopNo();
421 460 for(int i = 0; i < halfList.size(); i ++){
422 461 sch = halfList.get(i);
423   - if(!sch.getZdzCode().equals(stopId))
  462 + if(!sch.getZdzCode().equals(stopId) || sch.getStatus()==2)
424 463 continue;
425 464  
426 465 if(sch.getZdsjT() < gps.getTimestamp())
... ... @@ -443,7 +482,7 @@ public class InOutStationSignalHandle extends SignalHandle{
443 482 boolean limitPark = StringUtils.isNotEmpty(park);
444 483  
445 484  
446   - if (next.getBcType().equals("in") && config.getOutConfig() == 2
  485 + if (next.getBcType().equals("in") && config.getOutConfig() == 2 && (next.getBcsj()==0 || next.getJhlcOrig().equals(0))
447 486 && (!limitPark || park.equals(next.getZdzCode()))) {
448 487  
449 488 next.setFcsjActualAll(sch.getZdsjActualTime());
... ... @@ -458,7 +497,7 @@ public class InOutStationSignalHandle extends SignalHandle{
458 497 dayOfSchedule.addExecPlan(next);
459 498  
460 499 //进场,切换成非营运状态
461   - gpsStatusManager.changeServiceState(sch.getClZbh(), sch.getXlDir(), 1, "进场@系统");
  500 + nonService(sch, "进场@系统");
462 501 }
463 502 }
464 503  
... ... @@ -514,4 +553,13 @@ public class InOutStationSignalHandle extends SignalHandle{
514 553 private boolean isInSch(ScheduleRealInfo sch){
515 554 return sch.getBcType().equals("in") || GeoCacheData.tccMap.keySet().contains(sch.getZdzCode());
516 555 }
  556 +
  557 + /**
  558 + * 切换为非营运状态
  559 + * @param sch
  560 + * @param sender
  561 + */
  562 + private void nonService(ScheduleRealInfo sch, String sender){
  563 + gpsStatusManager.changeServiceState(sch.getClZbh(), sch.getXlDir(), 1, sender);
  564 + }
517 565 }
518 566 \ No newline at end of file
... ...
src/main/java/com/bsth/data/gpsdata/arrival/handlers/StationInsideHandle.java
... ... @@ -6,6 +6,8 @@ import com.bsth.data.gpsdata.arrival.SignalHandle;
6 6 import com.bsth.data.gpsdata.arrival.entity.StationRoute;
7 7 import com.bsth.data.gpsdata.arrival.utils.CircleQueue;
8 8 import com.bsth.data.gpsdata.arrival.utils.GeoUtils;
  9 +import org.slf4j.Logger;
  10 +import org.slf4j.LoggerFactory;
9 11 import org.springframework.stereotype.Component;
10 12  
11 13 import java.util.List;
... ... @@ -17,6 +19,7 @@ import java.util.List;
17 19 @Component
18 20 public class StationInsideHandle extends SignalHandle {
19 21  
  22 + Logger logger = LoggerFactory.getLogger(this.getClass());
20 23  
21 24 @Override
22 25 public boolean handle(GpsEntity gps, CircleQueue<GpsEntity> prevs) {
... ... @@ -37,13 +40,41 @@ public class StationInsideHandle extends SignalHandle {
37 40 gps.setStation(station);
38 41 }
39 42  
  43 + //是否在进站前置围栏内
  44 + String premiseCode = GeoUtils.gpsInPremiseGeo(gps);
  45 + gps.setPremiseCode(premiseCode);
  46 +
  47 + if(isNotEmpty(prevs)){
  48 + try {
  49 + GpsEntity prev = prevs.getTail();
  50 + //继承前置围栏
  51 + if(null == premiseCode && null != prev.getPremiseCode())
  52 + gps.setPremiseCode(prev.getPremiseCode());
  53 +
  54 + //在场,站外
  55 + if(gps.getInstation() == 0){
  56 + //继承上一个点的站点编码
  57 + gps.setStopNo(prev.getStopNo());
  58 +
  59 + /*if(null == premiseCode && null != prev.getPremiseCode())
  60 + gps.setPremiseCode(prev.getPremiseCode());*/
  61 + }
  62 + /*else if(null != gps.getPremiseCode() && !gps.getStopNo().equals(gps.getPremiseCode())){
  63 + gps.setPremiseCode(null);
  64 + }*/
  65 + }catch (Exception e){
  66 + logger.error("", e);
  67 + }
  68 + }
  69 +
  70 +/*
40 71 //在场,站外
41 72 if(gps.getInstation() == 0 && isNotEmpty(prevs)){
42 73 //继承上一个点的站点编码
43 74 GpsEntity prev = prevs.getTail();
44 75 gps.setStopNo(prev.getStopNo());
45 76 }
46   -
  77 +*/
47 78 return true;
48 79 }
49 80 }
... ...
src/main/java/com/bsth/data/gpsdata/arrival/precondition/InPreconditionHandler.java 0 → 100644
  1 +package com.bsth.data.gpsdata.arrival.precondition;
  2 +
  3 +import com.bsth.data.gpsdata.GpsEntity;
  4 +import org.springframework.stereotype.Component;
  5 +
  6 +/**
  7 + * 进站(前置电子围栏)
  8 + * Created by panzhao on 2017/9/23.
  9 + */
  10 +@Component
  11 +public class InPreconditionHandler {
  12 +
  13 + /**
  14 + * 进站动作是否有通过前置围栏
  15 + * @param gps
  16 + * @param prev
  17 + * @return
  18 + */
  19 + public boolean isPass(GpsEntity gps, GpsEntity prev){
  20 + return false;
  21 + }
  22 +}
... ...
src/main/java/com/bsth/data/gpsdata/arrival/precondition/entity/PreconditionGeo.java 0 → 100644
  1 +package com.bsth.data.gpsdata.arrival.precondition.entity;
  2 +
  3 +import com.bsth.util.Geo.Polygon;
  4 +
  5 +/**
  6 + * 前置围栏 -地理坐标
  7 + * Created by panzhao on 2017/9/23.
  8 + */
  9 +public class PreconditionGeo {
  10 +
  11 + private String name;
  12 +
  13 + /**
  14 + * 前置约束的站点编码
  15 + */
  16 + private String stationCode;
  17 +
  18 + /**
  19 + * 线路编码
  20 + */
  21 + private String lineCode;
  22 +
  23 + /**
  24 + * 上下行
  25 + */
  26 + private int upDown;
  27 +
  28 + /**
  29 + * 多边形坐标
  30 + */
  31 + private String coords;
  32 +
  33 + private com.bsth.util.Geo.Polygon polygon;
  34 +
  35 + private Integer order;
  36 +
  37 + public String getName() {
  38 + return name;
  39 + }
  40 +
  41 + public void setName(String name) {
  42 + this.name = name;
  43 + }
  44 +
  45 + public String getStationCode() {
  46 + return stationCode;
  47 + }
  48 +
  49 + public void setStationCode(String stationCode) {
  50 + this.stationCode = stationCode;
  51 + }
  52 +
  53 + public String getLineCode() {
  54 + return lineCode;
  55 + }
  56 +
  57 + public void setLineCode(String lineCode) {
  58 + this.lineCode = lineCode;
  59 + }
  60 +
  61 + public int getUpDown() {
  62 + return upDown;
  63 + }
  64 +
  65 + public void setUpDown(int upDown) {
  66 + this.upDown = upDown;
  67 + }
  68 +
  69 + public String getCoords() {
  70 + return coords;
  71 + }
  72 +
  73 + public void setCoords(String coords) {
  74 + this.coords = coords;
  75 + }
  76 +
  77 + public Integer getOrder() {
  78 + return order;
  79 + }
  80 +
  81 + public void setOrder(Integer order) {
  82 + this.order = order;
  83 + }
  84 +
  85 + public Polygon getPolygon() {
  86 + return polygon;
  87 + }
  88 +
  89 + public void setPolygon(Polygon polygon) {
  90 + this.polygon = polygon;
  91 + }
  92 +}
... ...
src/main/java/com/bsth/data/gpsdata/arrival/utils/GeoUtils.java
... ... @@ -3,6 +3,7 @@ package com.bsth.data.gpsdata.arrival.utils;
3 3 import com.bsth.data.gpsdata.GpsEntity;
4 4 import com.bsth.data.gpsdata.arrival.GeoCacheData;
5 5 import com.bsth.data.gpsdata.arrival.entity.StationRoute;
  6 +import com.bsth.data.gpsdata.arrival.precondition.entity.PreconditionGeo;
6 7 import com.vividsolutions.jts.geom.Coordinate;
7 8 import com.vividsolutions.jts.geom.GeometryFactory;
8 9 import com.vividsolutions.jts.geom.LineString;
... ... @@ -169,6 +170,28 @@ public class GeoUtils {
169 170 }
170 171  
171 172 /**
  173 + * 是否在进站前置围栏内
  174 + * @param gps
  175 + * @return
  176 + */
  177 + public static String gpsInPremiseGeo(GpsEntity gps) {
  178 + List<PreconditionGeo> list = GeoCacheData.premiseGeoMap.get(gps.getLineId()+"_"+gps.getUpDown());
  179 +
  180 + if(null == list || list.size()==0)
  181 + return null;
  182 +
  183 + com.bsth.util.Geo.Point point = new com.bsth.util.Geo.Point(gps.getLon(), gps.getLat());
  184 + com.bsth.util.Geo.Polygon polygon;
  185 + for(PreconditionGeo p : list){
  186 + polygon = p.getPolygon();
  187 + if(com.bsth.util.Geo.GeoUtils.isPointInPolygon(point, polygon)){
  188 + return p.getStationCode();
  189 + }
  190 + }
  191 + return null;
  192 + }
  193 +
  194 + /**
172 195 * 是否是有效的连续点
173 196 * @param prevGps
174 197 * @param gps
... ...
src/main/java/com/bsth/data/gpsdata/arrival/utils/SignalSchPlanMatcher.java
... ... @@ -69,8 +69,8 @@ public class SignalSchPlanMatcher {
69 69 double s = (int) (next.getDfsjT() - sch.getDfsjT());
70 70 double r = (int) (t - sch.getDfsjT());
71 71 if(r / s > 0.7){
72   - dayOfSchedule.addExecPlan(next);
73   - outMatch(outSigal, next);
  72 + if(dayOfSchedule.addExecPlan(next))
  73 + outMatch(outSigal, next);
74 74 }
75 75 }
76 76  
... ...
src/main/java/com/bsth/data/gpsdata/recovery/GpsDataRecovery.java
... ... @@ -60,7 +60,7 @@ public class GpsDataRecovery implements ApplicationContextAware {
60 60 for (String nbbm : keys) {
61 61 Collections.sort(listMap.get(nbbm), comp);
62 62 threadPool.execute(new RecoveryThread(listMap.get(nbbm), count));
63   - /*if(nbbm.equals("W9H-088"))
  63 + /*if(nbbm.equals("W2H-015"))
64 64 new RecoveryThread(listMap.get(nbbm), count).run();*/
65 65 /*if(lineId.equals("60028"))
66 66 new RecoveryThread(listMap.get(lineId), count).run();*/
... ... @@ -84,7 +84,7 @@ public class GpsDataRecovery implements ApplicationContextAware {
84 84 Calendar calendar = Calendar.getInstance();
85 85 int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);
86 86  
87   - String sql = "select DEVICE_ID,LAT,LON,TS,SPEED_GPS,LINE_ID,SERVICE_STATE from bsth_c_gps_info where days_year=207";// + dayOfYear;
  87 + String sql = "select DEVICE_ID,LAT,LON,TS,SPEED_GPS,LINE_ID,SERVICE_STATE from bsth_c_gps_info where days_year=267";// + dayOfYear;
88 88 JdbcTemplate jdbcTemplate = new JdbcTemplate(DBUtils_MS.getDataSource());
89 89  
90 90 List<GpsEntity> list =
... ... @@ -153,7 +153,7 @@ public class GpsDataRecovery implements ApplicationContextAware {
153 153 boolean task;
154 154 for (GpsEntity gps : list) {
155 155 try {
156   - /*if(gps.getTimestamp() >= 1500942270000L){
  156 + /*if(gps.getTimestamp() >= 1506216540000L){
157 157 System.out.println("debugger...");
158 158 }*/
159 159 //是否有任务
... ...
src/main/java/com/bsth/data/gpsdata/thread/GpsDataLoaderThread.java
... ... @@ -48,11 +48,11 @@ public class GpsDataLoaderThread extends Thread {
48 48 //0:从GPS客户端内存获取 -1:从网关获取
49 49 private static int flag = 0;
50 50  
51   - public static void setFlag(int v){
  51 + public static void setFlag(int v) {
52 52 flag = v;
53 53 }
54 54  
55   - public static int getFlag(int v){
  55 + public static int getFlag(int v) {
56 56 return flag;
57 57 }
58 58  
... ... @@ -65,7 +65,7 @@ public class GpsDataLoaderThread extends Thread {
65 65 @Override
66 66 public void run() {
67 67 try {
68   - if(flag == 0)
  68 + if (flag == 0)
69 69 load();
70 70 else
71 71 loadByGateway();
... ... @@ -76,6 +76,7 @@ public class GpsDataLoaderThread extends Thread {
76 76  
77 77 /**
78 78 * 从网关获取实时GPS数据
  79 + *
79 80 * @throws Exception
80 81 */
81 82 public void loadByGateway() throws Exception {
... ... @@ -107,6 +108,9 @@ public class GpsDataLoaderThread extends Thread {
107 108 if (jsonObj != null)
108 109 list = JSON.parseArray(jsonObj.getString("data"), GpsEntity.class);
109 110  
  111 + //过滤掉无效的点位
  112 + list = filterInvalid(list);
  113 +
110 114 String nbbm;
111 115 GpsEntity old;
112 116 for (GpsEntity gps : list) {
... ... @@ -130,7 +134,7 @@ public class GpsDataLoaderThread extends Thread {
130 134 //有更新的点位
131 135 updateList.add(gps);
132 136 }
133   - logger.info("全量点:"+ list.size() +",更新点" + updateList.size());
  137 + logger.info("全量点:" + list.size() + ",更新点" + updateList.size());
134 138 //分析数据
135 139 gpsRealAnalyse.analyse(updateList);
136 140 } else
... ... @@ -146,9 +150,33 @@ public class GpsDataLoaderThread extends Thread {
146 150 }
147 151  
148 152 /**
  153 + * 过滤无效的gps点位
  154 + *
  155 + * @param list
  156 + * @return
  157 + */
  158 + private List<GpsEntity> filterInvalid(List<GpsEntity> list) {
  159 + List<GpsEntity> rsList = new ArrayList<>();
  160 +
  161 + try {
  162 + for (GpsEntity gps : list) {
  163 + if (gps.getValid() == 0)
  164 + rsList.add(gps);
  165 + }
  166 +
  167 + if (rsList.size() < list.size())
  168 + logger.info("过滤无效的点位 : " + (list.size() - rsList.size()));
  169 + } catch (Exception e) {
  170 + logger.error("", e);
  171 + rsList = list;
  172 + }
  173 + return rsList;
  174 + }
  175 +
  176 + /**
149 177 * 从客户端内存获取GPS数据
150 178 */
151   - public void load() throws Exception{
  179 + public void load() throws Exception {
152 180 List<GpsEntity> list = null;
153 181 CloseableHttpClient httpClient = null;
154 182 CloseableHttpResponse response = null;
... ... @@ -174,6 +202,10 @@ public class GpsDataLoaderThread extends Thread {
174 202 stringBuffer.append(str);
175 203  
176 204 list = JSON.parseArray(stringBuffer.toString(), GpsEntity.class);
  205 +
  206 + //过滤掉无效的点位
  207 + list = filterInvalid(list);
  208 +
177 209 String nbbm;
178 210 logger.info("load end!");
179 211 for (GpsEntity gps : list) {
... ...
src/main/java/com/bsth/data/msg_queue/DirectivePushQueue.java
... ... @@ -5,7 +5,6 @@ import com.bsth.service.directive.DirectiveService;
5 5 import org.slf4j.Logger;
6 6 import org.slf4j.LoggerFactory;
7 7 import org.springframework.beans.BeansException;
8   -import org.springframework.boot.CommandLineRunner;
9 8 import org.springframework.context.ApplicationContext;
10 9 import org.springframework.context.ApplicationContextAware;
11 10 import org.springframework.stereotype.Component;
... ... @@ -17,7 +16,7 @@ import java.util.concurrent.ConcurrentLinkedQueue;
17 16 * Created by panzhao on 2017/5/11.
18 17 */
19 18 @Component
20   -public class DirectivePushQueue implements CommandLineRunner, ApplicationContextAware {
  19 +public class DirectivePushQueue implements ApplicationContextAware {
21 20  
22 21 static ConcurrentLinkedQueue<QueueData_Directive> linkedList;
23 22 static DataPushThread thread;
... ... @@ -80,10 +79,10 @@ public class DirectivePushQueue implements CommandLineRunner, ApplicationContext
80 79 return linkedList.size();
81 80 }
82 81  
83   - @Override
  82 +/* @Override
84 83 public void run(String... strings) throws Exception {
85 84 start();
86   - }
  85 + }*/
87 86  
88 87 @Override
89 88 public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
... ...
src/main/java/com/bsth/data/msg_queue/WebSocketPushQueue.java
... ... @@ -3,7 +3,6 @@ package com.bsth.data.msg_queue;
3 3 import com.bsth.common.Constants;
4 4 import org.slf4j.Logger;
5 5 import org.slf4j.LoggerFactory;
6   -import org.springframework.boot.CommandLineRunner;
7 6 import org.springframework.stereotype.Component;
8 7 import org.springframework.web.socket.TextMessage;
9 8 import org.springframework.web.socket.WebSocketSession;
... ... @@ -15,7 +14,7 @@ import java.util.concurrent.ConcurrentLinkedQueue;
15 14 * Created by panzhao on 2017/5/11.
16 15 */
17 16 @Component
18   -public class WebSocketPushQueue implements CommandLineRunner {
  17 +public class WebSocketPushQueue {
19 18  
20 19 static ConcurrentLinkedQueue<QueueData> linkedList;
21 20 static DataPushThread thread;
... ... @@ -54,10 +53,6 @@ public class WebSocketPushQueue implements CommandLineRunner {
54 53 return linkedList.size();
55 54 }
56 55  
57   - @Override
58   - public void run(String... strings) throws Exception {
59   - start();
60   - }
61 56  
62 57 public static class DataPushThread extends Thread {
63 58  
... ...
src/main/java/com/bsth/data/schedule/DayOfSchedule.java
... ... @@ -278,12 +278,14 @@ public class DayOfSchedule {
278 278 List<String> lprms = new ArrayList<>();
279 279 Set<String> lps = lpScheduleMap.keySet();
280 280 for (String lp : lps) {
281   - if (lp.indexOf(lineCode + "_") != -1)
  281 + if (lp.startsWith(lineCode + "_"))
282 282 lprms.add(lp);
283 283 }
284 284  
285   - for (String lp : lprms)
  285 + for (String lp : lprms){
  286 + logger.info("清理路牌映射 " + lp);
286 287 lpScheduleMap.removeAll(lp);
  288 + }
287 289  
288 290 logger.info(lineCode + "排班清理 " + count);
289 291 }
... ... @@ -571,7 +573,7 @@ public class DayOfSchedule {
571 573 continue;
572 574  
573 575 //出站既出场,忽略出场班次
574   - if (outConfig == 2 && temp.getBcType().equals("out")
  576 + if (outConfig == 2 && temp.getBcType().equals("out") && (temp.getBcsj()==0 || temp.getJhlcOrig().equals(0))
575 577 && (!limitPark || park.equals(temp.getQdzCode())))
576 578 continue;
577 579  
... ... @@ -590,7 +592,7 @@ public class DayOfSchedule {
590 592 * @param sch 当前班次
591 593 * @return
592 594 */
593   - private ScheduleRealInfo next2(Collection<ScheduleRealInfo> list, ScheduleRealInfo sch) {
  595 + private ScheduleRealInfo next2_lp(Collection<ScheduleRealInfo> list, ScheduleRealInfo sch) {
594 596 int outConfig = -1;
595 597 LineConfig config = lineConfigData.get(sch.getXlBm());
596 598 if (config != null)
... ... @@ -603,8 +605,35 @@ public class DayOfSchedule {
603 605 flag = true;
604 606 continue;
605 607 }
606   - //忽略烂班
607   - if (temp.isDestroy())
  608 +
  609 + if (flag) {
  610 + next = temp;
  611 + break;
  612 + }
  613 + }
  614 + return next;
  615 + }
  616 +
  617 + private ScheduleRealInfo next3_lp(Collection<ScheduleRealInfo> list, ScheduleRealInfo sch) {
  618 + int outConfig = -1;
  619 + LineConfig config = lineConfigData.get(sch.getXlBm());
  620 + if (config != null)
  621 + outConfig = config.getOutConfig();
  622 +
  623 + //限定出站既出场的停车场
  624 + String park = config.getTwinsPark();
  625 + boolean limitPark = StringUtils.isNotEmpty(park);
  626 + boolean flag = false;
  627 + ScheduleRealInfo next = null;
  628 + for (ScheduleRealInfo temp : list) {
  629 + if (temp.getId() == sch.getId()) {
  630 + flag = true;
  631 + continue;
  632 + }
  633 +
  634 + //出站既出场,忽略出场班次
  635 + if (outConfig == 2 && temp.getBcType().equals("out") && (temp.getBcsj()==0 || temp.getJhlcOrig().equals(0))
  636 + && (!limitPark || park.equals(temp.getQdzCode())))
608 637 continue;
609 638  
610 639 if (flag) {
... ... @@ -729,7 +758,7 @@ public class DayOfSchedule {
729 758 /**
730 759 * @Title: prveNotExecNum
731 760 * @Description: TODO(班次之前未执行班次数量)
732   - */
  761 +
733 762 public int prveNotExecNum(ScheduleRealInfo sch) {
734 763 int n = 0;
735 764 List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh());
... ... @@ -741,29 +770,29 @@ public class DayOfSchedule {
741 770 break;
742 771 }
743 772 return n;
744   - }
  773 + }*/
745 774  
746 775 /**
747 776 * @Title: validEndTime
748 777 * @Description: TODO(是否是有效的到达时间)
749   - */
  778 +
750 779 public boolean validEndTime(ScheduleRealInfo sch, Long ts) {
751 780 if (sch.getFcsjActualTime() != null && sch.getFcsjActualTime() > ts)
752 781 return false;
753 782  
754 783 return validTime(sch, ts);
755   - }
  784 + }*/
756 785  
757 786 /**
758 787 * @Title: validStartTime
759 788 * @Description: TODO(是否是合适的发车时间)
760   - */
  789 +
761 790 public boolean validStartTime(ScheduleRealInfo sch, Long ts) {
762 791 if (sch.getZdsjActualTime() != null && sch.getZdsjActualTime() < ts)
763 792 return false;
764 793  
765 794 return validTime(sch, ts);
766   - }
  795 + }*/
767 796  
768 797 public boolean validTime(ScheduleRealInfo sch, Long ts) {
769 798 List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh());
... ... @@ -875,15 +904,16 @@ public class DayOfSchedule {
875 904 return outList;
876 905 }
877 906  
878   - public Set<String> allCar() {
  907 +/* public Set<String> allCar() {
879 908 return nbbmScheduleMap.keySet();
880   - }
  909 + }*/
881 910  
882 911 public Collection<ScheduleRealInfo> findAll() {
883 912 return nbbmScheduleMap.values();
884 913 }
885 914  
886   - public void addExecPlan(ScheduleRealInfo sch) {
  915 + public boolean addExecPlan(ScheduleRealInfo sch) {
  916 + ScheduleRealInfo oldExec = executeCurr(sch.getClZbh());
887 917 if (sch != null){
888 918 if(sch.getStatus()==2)
889 919 reCalcExecPlan(sch.getClZbh());
... ... @@ -892,6 +922,8 @@ public class DayOfSchedule {
892 922 }
893 923 else
894 924 carExecutePlanMap.remove(sch.getClZbh());
  925 +
  926 + return executeCurr(sch.getClZbh()) != oldExec;
895 927 }
896 928  
897 929 public void removeExecPlan(String clzbh) {
... ... @@ -939,15 +971,16 @@ public class DayOfSchedule {
939 971 return ups;
940 972 }
941 973  
942   - public void removeNbbm2SchMapp(ScheduleRealInfo sch, String nbbm) {
943   - nbbmScheduleMap.remove(nbbm, sch);
  974 + public void removeNbbm2SchMapp(ScheduleRealInfo sch) {
  975 + nbbmScheduleMap.remove(sch.getClZbh(), sch);
944 976 }
945 977  
946   - public void addNbbm2SchMapp(ScheduleRealInfo sch, String nbbm) {
947   - nbbmScheduleMap.put(nbbm, sch);
  978 + public void addNbbm2SchMapp(ScheduleRealInfo sch) {
  979 + nbbmScheduleMap.put(sch.getClZbh(), sch);
948 980 }
949 981  
950 982 public void reCalcExecPlan(String nbbm) {
  983 + logger.info("reCalcExecPlan...: " + nbbm);
951 984 List<ScheduleRealInfo> list = nbbmScheduleMap.get(nbbm);
952 985 Collections.sort(list, schFCSJComparator);
953 986  
... ... @@ -1119,7 +1152,7 @@ public class DayOfSchedule {
1119 1152 public ScheduleRealInfo nextByLp(ScheduleRealInfo sch) {
1120 1153 List<ScheduleRealInfo> list = lpScheduleMap.get(sch.getXlBm() + "_" + sch.getLpName());
1121 1154 Collections.sort(list, schFCSJComparator);
1122   - return next(list, sch);
  1155 + return next3_lp(list, sch);
1123 1156 }
1124 1157  
1125 1158 /**
... ... @@ -1131,10 +1164,22 @@ public class DayOfSchedule {
1131 1164 public ScheduleRealInfo nextByLp2(ScheduleRealInfo sch) {
1132 1165 List<ScheduleRealInfo> list = lpScheduleMap.get(sch.getXlBm() + "_" + sch.getLpName());
1133 1166 Collections.sort(list, schFCSJComparator);
1134   - return next2(list, sch);
  1167 + return next2_lp(list, sch);
1135 1168 }
1136 1169  
1137 1170 public ArrayListMultimap<String, ScheduleRealInfo> getLpScheduleMap() {
1138 1171 return lpScheduleMap;
1139 1172 }
  1173 +
  1174 + /**
  1175 + * 重新全量计算路牌下的班次关联性
  1176 + * 临时性的函数
  1177 + */
  1178 + public void _test_reCalcLpSch() {
  1179 + Map<String ,Collection<ScheduleRealInfo>> map = lpScheduleMap.asMap();
  1180 + Set<String> ks = map.keySet();
  1181 + for(String k : ks){
  1182 + schAttrCalculator.calcQdzTimePlan(new ArrayList<ScheduleRealInfo>(map.get(k)));
  1183 + }
  1184 + }
1140 1185 }
1141 1186 \ No newline at end of file
... ...
src/main/java/com/bsth/data/schedule/SchAttrCalculator.java
... ... @@ -17,212 +17,291 @@ import java.util.Collections;
17 17 import java.util.List;
18 18  
19 19 /**
20   - *
  20 + * @author PanZhao
21 21 * @ClassName: SchAttrCalculator
22 22 * @Description: TODO(班次相关属性计算器)
23   - * @author PanZhao
24 23 * @date 2016年8月15日 下午4:40:26
25   - *
26 24 */
27 25 @Component
28 26 public class SchAttrCalculator {
29 27  
30   - @Autowired
31   - LineConfigData lineConfigData;
32   -
33   - private final static long DAY_TIME = 1000 * 60 * 60 * 24L;
34   -
35   - Logger logger = LoggerFactory.getLogger(this.getClass());
36   -
37   - private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd")
38   - ,fmtHHmm = DateTimeFormat.forPattern("HH:mm")
39   - ,fmtyyyyMMddHHmm = DateTimeFormat.forPattern("yyyy-MM-ddHH:mm");
40   -
41   - /**
42   - * @Title: calcRealDate
43   - * @Description: TODO(计算班次的真实执行日期)
44   - */
45   - public SchAttrCalculator calcRealDate(ScheduleRealInfo sch) {
46   - LineConfig conf = lineConfigData.get(sch.getXlBm());
47   -
48   - try {
49   - if (null == sch.getFcsjT())
50   - calcFcsjTime(sch);
51   -
52   - //计发時間
53   - if(sch.getFcsj().compareTo(conf.getStartOpt()) < 0){
54   - sch.setFcsjAll(fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr()+sch.getFcsj()) + DAY_TIME);
55   - }
56   -
57   - //待发時間
58   - if(sch.getDfsj().compareTo(conf.getStartOpt()) < 0){
59   - sch.setDfsjAll(fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr()+sch.getDfsj()) + DAY_TIME);
60   - }
61   - else
62   - sch.setDfsjAll(fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr()+sch.getDfsj()));
63   -
64   - //实发時間
65   - if(StringUtils.isNotEmpty(sch.getFcsjActual()) &&
66   - sch.getFcsjActual().compareTo(conf.getStartOpt()) < 0){
67   - sch.setFcsjActualAll(fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr()+sch.getFcsjActual()) + DAY_TIME);
68   - }
69   -
70   - //实际终点時間
71   - if(StringUtils.isNotEmpty(sch.getZdsjActual()) &&
72   - sch.getZdsjActual().compareTo(conf.getStartOpt()) < 0){
73   - sch.setZdsjActualAll(fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr()+sch.getZdsjActual()) + DAY_TIME);
74   - }
75   -
76   - sch.setRealExecDate(fmtyyyyMMdd.print(sch.getFcsjT()));
77   - } catch (Exception e) {
78   - logger.error("", e);
79   - }
80   - return this;
81   - }
82   -
83   - /**
84   - *
85   - * @Title: calcAllTimeByFcsj
86   - * @Description: TODO(根据发车时间字符串计算 (计发时间,终点时间,待发时间))
87   - */
88   - public SchAttrCalculator calcAllTimeByFcsj(ScheduleRealInfo sch) {
89   - try {
90   - // 生成时间戳
91   - calcTimestamp(sch);
92   -
93   - // 计划终点时间
94   - if (sch.getBcsj() != null) {
95   - sch.setZdsjT(sch.getDfsjT() + (sch.getBcsj() * 60 * 1000));
96   - sch.setZdsj(fmtHHmm.print(sch.getZdsjT()));
97   - }
98   - } catch (ParseException e) {
99   - logger.error("", e);
100   - }
101   - return this;
102   - }
103   -
104   - /**
105   - *
106   - * @Title: calcQdzTimePlan
107   - * @Description: TODO(计算班次的起点应到时间)
108   - */
109   - public void calcQdzTimePlan(List<ScheduleRealInfo> list){
110   - Collections.sort(list, new ScheduleComparator.FCSJ());
111   -
112   - int len = list.size();
113   - if(len == 0)
114   - return;
115   -
116   - ScheduleRealInfo prve = list.get(0), curr;
117   - for(int i = 1; i < len; i ++){
118   - curr = list.get(i);
119   -
120   - if(prve.getZdzName().equals(curr.getQdzName())
121   - || prve.getZdzCode().equals(curr.getQdzCode())){
122   - curr.setQdzArrDatejh(prve.getZdsj());
123   - if(StringUtils.isNotEmpty(prve.getZdsjActual()))
124   - curr.setQdzArrDatesj(prve.getZdsjActual());
125   - }
126   - prve = curr;
127   - }
128   - }
129   -
130   - /**
131   - *
132   - * @Title: updateQdzTimePlan
133   - * @Description: TODO(更新班次的起点应到时间) 并返回被更新的班次
134   - */
135   - public List<ScheduleRealInfo> updateQdzTimePlan(List<ScheduleRealInfo> list){
136   - Collections.sort(list, new ScheduleComparator.FCSJ());
137   -
138   - List<ScheduleRealInfo> updateList = new ArrayList<>();
139   - int len = list.size();
140   - if(len == 0)
141   - return updateList;
142   -
143   - ScheduleRealInfo prve = list.get(0), curr;
144   - for(int i = 1; i < len; i ++){
145   - curr = list.get(i);
146   -
147   - if(prve.getZdzName().equals(curr.getQdzName())
148   - || prve.getZdzCode().equals(curr.getQdzCode())){
149   -
150   - if(curr.getQdzArrDatejh() != null && prve.getZdsj().equals(curr.getQdzArrDatejh())){
151   - prve = curr;
152   - continue;
153   - }
154   -
155   - curr.setQdzArrDatejh(prve.getZdsj());
156   - updateList.add(curr);
157   - }
158   - else{
159   - curr.setQdzArrDatejh(null);
160   - updateList.add(curr);
161   - }
162   - prve = curr;
163   - }
164   -
165   - return updateList;
166   - }
167   -
168   - public SchAttrCalculator calcFcsjTime(ScheduleRealInfo sch) throws ParseException {
169   - sch.setFcsjT(fmtyyyyMMddHHmm.parseMillis(sch.getRealExecDate() + sch.getFcsj()));
170   - return this;
171   - }
172   -
173   - public void calcTimestamp(ScheduleRealInfo sch) throws ParseException{
174   - //计发时间
175   - if(sch.getFcsjT() == null)
176   - calcFcsjTime(sch);
177   -
178   - //待发时间
179   - if(sch.getDfsj() == null)
180   - sch.setDfsjAll(sch.getFcsjT());
181   - if(sch.getDfsjT() == null)
182   - sch.setDfsjAll(sch.getDfsj());
183   -
184   - //实发时间戳
185   - if(sch.getFcsjActualTime() == null && sch.getFcsjActual() != null)
186   - sch.setFcsjActualAll(sch.getFcsjActual());
187   -
188   - //实达时间戳
189   - if(sch.getZdsjActualTime() == null && sch.getZdsjActual() != null)
190   - sch.setZdsjActualAll(sch.getZdsjActual());
191   - }
192   -
193   - /**
194   - * 计算当前要执行的班次
195   - * @param list
196   - * @return
197   - */
198   - public ScheduleRealInfo calcCurrentExecSch(List<ScheduleRealInfo> list){
199   - String lineCode = list.get(0).getXlBm();
200   - LineConfig conf = lineConfigData.get(lineCode);
201   - int outConfig = -1;
202   - //限定出站既出场的停车场
203   - String park = null;
204   - if(conf != null){
205   - outConfig = conf.getOutConfig();
206   - park = conf.getTwinsPark();
207   - }
208   - boolean limitPark = StringUtils.isNotEmpty(park);
209   -
210   - for(ScheduleRealInfo sch : list){
211   - //如果是出站既出场,忽略出场班次
212   - if(outConfig == 2 && sch.getBcType().equals("out")
213   - && (!limitPark || park.equals(sch.getQdzCode())))
214   - continue;
215   -
216   - //忽略烂班
217   - if(sch.isDestroy())
218   - continue;
219   -
220   - //已执行
221   - if(StringUtils.isNotEmpty(sch.getZdsjActual()))
222   - continue;
223   -
224   - return sch;
225   - }
226   - return null;
227   - }
  28 + @Autowired
  29 + LineConfigData lineConfigData;
  30 +
  31 + private final static long DAY_TIME = 1000 * 60 * 60 * 24L;
  32 +
  33 + Logger logger = LoggerFactory.getLogger(this.getClass());
  34 +
  35 + private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd"), fmtHHmm = DateTimeFormat.forPattern("HH:mm"), fmtyyyyMMddHHmm = DateTimeFormat.forPattern("yyyy-MM-ddHH:mm");
  36 +
  37 + /**
  38 + * @Title: calcRealDate
  39 + * @Description: TODO(计算班次的真实执行日期)
  40 + */
  41 + public SchAttrCalculator calcRealDate(ScheduleRealInfo sch) {
  42 + LineConfig conf = lineConfigData.get(sch.getXlBm());
  43 +
  44 + try {
  45 + if (null == sch.getFcsjT())
  46 + calcFcsjTime(sch);
  47 +
  48 + String rq = sch.getScheduleDateStr();
  49 + //计发時間
  50 + sch.setFcsjAll(getTime(rq, sch.getFcsj(), conf));
  51 +
  52 + //待发時間
  53 + sch.setDfsjAll(getTime(rq, sch.getDfsj(), conf));
  54 + /*if (sch.getDfsj().compareTo(conf.getStartOpt()) < 0) {
  55 + sch.setDfsjAll(fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr() + sch.getDfsj()) + DAY_TIME);
  56 + } else
  57 + sch.setDfsjAll(fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr() + sch.getDfsj()));*/
  58 +
  59 + //实发時間
  60 + sch.setFcsjActualAll(getTime(rq, sch.getFcsjActual(), conf));
  61 + /*if (StringUtils.isNotEmpty(sch.getFcsjActual()) &&
  62 + sch.getFcsjActual().compareTo(conf.getStartOpt()) < 0) {
  63 + sch.setFcsjActualAll(fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr() + sch.getFcsjActual()) + DAY_TIME);
  64 + }*/
  65 +
  66 + //实际终点時間
  67 + sch.setZdsjActualAll(getTime(rq, sch.getZdsjActual(), conf));
  68 + /*if (StringUtils.isNotEmpty(sch.getZdsjActual()) &&
  69 + sch.getZdsjActual().compareTo(conf.getStartOpt()) < 0) {
  70 + sch.setZdsjActualAll(fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr() + sch.getZdsjActual()) + DAY_TIME);
  71 + }*/
  72 +
  73 + sch.setRealExecDate(fmtyyyyMMdd.print(sch.getFcsjT()));
  74 + } catch (Exception e) {
  75 + logger.error("", e);
  76 + }
  77 + return this;
  78 + }
  79 +
  80 + public Long getTime(String rq, String timeStr, LineConfig conf) {
  81 + Long t = null;
  82 + if (StringUtils.isNotEmpty(timeStr)) {
  83 + t = fmtyyyyMMddHHmm.parseMillis(rq + timeStr);
  84 + if(timeStr.compareTo(conf.getStartOpt()) < 0)
  85 + return t + DAY_TIME;
  86 + }
  87 + return t;
  88 + }
  89 +
  90 + /**
  91 + * @Title: calcAllTimeByFcsj
  92 + * @Description: TODO(根据发车时间字符串计算 (计发时间,终点时间,待发时间))
  93 + */
  94 + public SchAttrCalculator calcAllTimeByFcsj(ScheduleRealInfo sch) {
  95 + try {
  96 + // 生成时间戳
  97 + calcTimestamp(sch);
  98 +
  99 + // 计划终点时间
  100 + if (sch.getBcsj() != null) {
  101 + sch.setZdsjT(sch.getDfsjT() + (sch.getBcsj() * 60 * 1000));
  102 + sch.setZdsj(fmtHHmm.print(sch.getZdsjT()));
  103 + }
  104 + } catch (ParseException e) {
  105 + logger.error("", e);
  106 + }
  107 + return this;
  108 + }
  109 +
  110 + /**
  111 + * @Title: calcQdzTimePlan
  112 + * @Description: TODO(计算班次的起点应到时间)
  113 + */
  114 + public void calcQdzTimePlan(List<ScheduleRealInfo> list) {
  115 + Collections.sort(list, new ScheduleComparator.FCSJ());
  116 +
  117 + int len = list.size();
  118 + if (len == 0)
  119 + return;
  120 +
  121 + ScheduleRealInfo prve = list.get(0), curr;
  122 + for (int i = 1; i < len; i++) {
  123 + curr = list.get(i);
  124 +
  125 + if (isJoin(prve, curr)) {
  126 + curr.setQdzArrDatejh(prve.getZdsj());
  127 + if (StringUtils.isNotEmpty(prve.getZdsjActual()))
  128 + curr.setQdzArrDatesj(prve.getZdsjActual());
  129 + }
  130 + prve = curr;
  131 + }
  132 + }
  133 +
  134 + private boolean isJoin(ScheduleRealInfo prve, ScheduleRealInfo curr) {
  135 + return prve.getZdzName().equals(curr.getQdzName())//名称相等
  136 + || prve.getZdzCode().equals(curr.getQdzCode())//编码相等
  137 + || prve.getZdzName().startsWith(curr.getQdzName())//起始包括
  138 + || curr.getQdzName().startsWith(prve.getZdzName());//起始包括
  139 + }
  140 +
  141 + /**
  142 + * @Title: updateQdzTimePlan
  143 + * @Description: TODO(更新班次的起点应到时间) 并返回被更新的班次
  144 + */
  145 + public List<ScheduleRealInfo> updateQdzTimePlan(List<ScheduleRealInfo> list) {
  146 + Collections.sort(list, new ScheduleComparator.FCSJ());
  147 +
  148 + List<ScheduleRealInfo> updateList = new ArrayList<>();
  149 + int len = list.size();
  150 + if (len == 0)
  151 + return updateList;
  152 +
  153 + ScheduleRealInfo prve = list.get(0), curr;
  154 + for (int i = 1; i < len; i++) {
  155 + curr = list.get(i);
  156 +
  157 + if (prve.getZdzName().equals(curr.getQdzName())
  158 + || prve.getZdzCode().equals(curr.getQdzCode())) {
  159 +
  160 + if (curr.getQdzArrDatejh() != null && prve.getZdsj().equals(curr.getQdzArrDatejh())) {
  161 + prve = curr;
  162 + continue;
  163 + }
  164 +
  165 + curr.setQdzArrDatejh(prve.getZdsj());
  166 + updateList.add(curr);
  167 + } else {
  168 + curr.setQdzArrDatejh(null);
  169 + updateList.add(curr);
  170 + }
  171 + prve = curr;
  172 + }
  173 +
  174 + return updateList;
  175 + }
  176 +
  177 + public SchAttrCalculator calcFcsjTime(ScheduleRealInfo sch) throws ParseException {
  178 + sch.setFcsjT(fmtyyyyMMddHHmm.parseMillis(sch.getRealExecDate() + sch.getFcsj()));
  179 + return this;
  180 + }
  181 +
  182 + public void calcTimestamp(ScheduleRealInfo sch) throws ParseException {
  183 + //计发时间
  184 + if (sch.getFcsjT() == null)
  185 + calcFcsjTime(sch);
  186 +
  187 + //待发时间
  188 + if (sch.getDfsj() == null)
  189 + sch.setDfsjAll(sch.getFcsjT());
  190 + if (sch.getDfsjT() == null)
  191 + sch.setDfsjAll(sch.getDfsj());
  192 +
  193 + //实发时间戳
  194 + if (sch.getFcsjActualTime() == null && sch.getFcsjActual() != null)
  195 + sch.setFcsjActualAll(sch.getFcsjActual());
  196 +
  197 + //实达时间戳
  198 + if (sch.getZdsjActualTime() == null && sch.getZdsjActual() != null)
  199 + sch.setZdsjActualAll(sch.getZdsjActual());
  200 + }
  201 +
  202 + /**
  203 + * 计算当前要执行的班次
  204 + *
  205 + * @param list
  206 + * @return
  207 + */
  208 + public ScheduleRealInfo calcCurrentExecSch(List<ScheduleRealInfo> list) {
  209 + String lineCode = list.get(0).getXlBm();
  210 + LineConfig conf = lineConfigData.get(lineCode);
  211 + long t = System.currentTimeMillis();
  212 + int outConfig = -1;
  213 + //限定出站既出场的停车场
  214 + String park = null;
  215 + if (conf != null) {
  216 + outConfig = conf.getOutConfig();
  217 + park = conf.getTwinsPark();
  218 + }
  219 + boolean limitPark = StringUtils.isNotEmpty(park);
  220 +
  221 + for (ScheduleRealInfo sch : list) {
  222 + //如果是出站既出场,忽略出场班次
  223 + if (outConfig == 2 && sch.getBcType().equals("out")
  224 + && (!limitPark || park.equals(sch.getQdzCode())))
  225 + continue;
  226 +
  227 + //忽略烂班
  228 + if (sch.isDestroy())
  229 + continue;
  230 +
  231 + //已执行
  232 + if (StringUtils.isNotEmpty(sch.getZdsjActual()))
  233 + continue;
  234 +
  235 + if (Math.abs((t - sch.getDfsjT())) > 1000 * 60 * 60) {
  236 + //差值较大,倒着找看有没有更合适的
  237 + ScheduleRealInfo schReverse = calcCurrentExecSchReverse(list, outConfig, limitPark, park);
  238 + if (null != schReverse && !schReverse.getId().equals(sch.getId())) {
  239 + logger.info("calc_current_exec_sch_reverse... -" + schReverse.getId());
  240 + return suitableExecSch(schReverse, sch, t);
  241 + }
  242 + }
  243 + return sch;
  244 + }
  245 + return null;
  246 + }
  247 +
  248 + /**
  249 + * 反转匹配一个班次
  250 + *
  251 + * @param list
  252 + * @param outConfig
  253 + * @param limitPark
  254 + * @param park
  255 + * @return
  256 + */
  257 + private ScheduleRealInfo calcCurrentExecSchReverse(List<ScheduleRealInfo> list, int outConfig, boolean limitPark, String park) {
  258 + ScheduleRealInfo near = null;
  259 + for (ScheduleRealInfo sch : list) {
  260 + //如果是出站既出场,忽略出场班次
  261 + if (outConfig == 2 && isInout(sch)
  262 + && (!limitPark || park.equals(sch.getQdzCode()) || park.equals(sch.getZdzCode())))
  263 + continue;
  264 +
  265 + //忽略烂班
  266 + if (sch.isDestroy())
  267 + continue;
  268 +
  269 + if (StringUtils.isNotEmpty(sch.getZdsjActual())) {
  270 + near = null;
  271 + continue;
  272 + }
  273 +
  274 + if (null == near)
  275 + near = sch;
  276 + }
  277 + return near;
  278 + }
  279 +
  280 + /**
  281 + * 比较2个班次,谁是指定时间更合适执行的
  282 + *
  283 + * @param schReverse
  284 + * @param sch
  285 + * @param t
  286 + * @return
  287 + */
  288 + private ScheduleRealInfo suitableExecSch(ScheduleRealInfo schReverse, ScheduleRealInfo sch, long t) {
  289 + return Math.abs(t - schReverse.getDfsjT()) > Math.abs(t - sch.getDfsjT()) ? sch : schReverse;
  290 + }
  291 +
  292 + private boolean isInout(ScheduleRealInfo sch) {
  293 + return sch.getBcType().equals("out") || sch.getBcType().equals("in");
  294 + }
  295 +
  296 + /**
  297 + *
  298 + * @param fcsjT
  299 + * @param zdsjT
  300 + */
  301 + public boolean isValid(Long fcsjT, Long zdsjT) {
  302 + if(null != fcsjT && null != zdsjT)
  303 + return fcsjT < zdsjT;
  304 +
  305 + return true;
  306 + }
228 307 }
... ...
src/main/java/com/bsth/data/schedule/ScheduleComparator.java
... ... @@ -3,6 +3,8 @@ package com.bsth.data.schedule;
3 3 import com.bsth.entity.realcontrol.ScheduleRealInfo;
4 4  
5 5 import java.util.Comparator;
  6 +import java.util.HashMap;
  7 +import java.util.Map;
6 8  
7 9 /**
8 10 *
... ... @@ -20,20 +22,38 @@ public class ScheduleComparator {
20 22 return s1.getFcno() - s2.getFcno();
21 23 }
22 24 }*/
  25 +
  26 + static Map<String, Integer> bcTypeOrderMap = new HashMap<>();
  27 +
  28 + static{
  29 + bcTypeOrderMap.put("out", 0);
  30 + bcTypeOrderMap.put("normal", 1);
  31 + bcTypeOrderMap.put("region", 2);
  32 + bcTypeOrderMap.put("major", 3);
  33 + bcTypeOrderMap.put("venting", 4);
  34 + bcTypeOrderMap.put("ldks", 5);
  35 + bcTypeOrderMap.put("in", 6);
  36 + }
23 37  
24 38 public static class FCSJ implements Comparator<ScheduleRealInfo>{
25 39  
26 40 @Override
27 41 public int compare(ScheduleRealInfo s1, ScheduleRealInfo s2) {
28   - return (int) (s1.getFcsjT() - s2.getFcsjT());
  42 + int diff = (int) (s1.getFcsjT() - s2.getFcsjT());
  43 + return diff!=0?diff:typeOrder(s1.getBcType()) - typeOrder(s2.getBcType());
29 44 }
30 45 }
31 46  
  47 + private static int typeOrder(String bcType){
  48 + return bcTypeOrderMap.get(bcType)!=null?bcTypeOrderMap.get(bcType):0;
  49 + }
  50 +
32 51 public static class DFSJ implements Comparator<ScheduleRealInfo>{
33 52  
34 53 @Override
35 54 public int compare(ScheduleRealInfo s1, ScheduleRealInfo s2) {
36   - return (int) (s1.getDfsjT() - s2.getDfsjT());
  55 + int diff = (int) (s1.getDfsjT() - s2.getDfsjT());
  56 + return diff!=0?diff:typeOrder(s1.getBcType()) - typeOrder(s2.getBcType());
37 57 }
38 58 }
39 59 }
... ...
src/main/java/com/bsth/data/schedule/edit_logs/FormLogger.java
... ... @@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
15 15 import org.springframework.stereotype.Service;
16 16  
17 17 import java.util.Date;
  18 +import java.util.LinkedList;
18 19  
19 20 /**
20 21 * 为报表写入相关的班次修改记录
... ... @@ -27,9 +28,12 @@ public class FormLogger {
27 28  
28 29 Logger log = LoggerFactory.getLogger(this.getClass());
29 30  
  31 + static LinkedList<Changetochange> ccPsts = new LinkedList<>();
  32 +
30 33 @Autowired
31 34 ChangetochangeRepository changetochangeRepository;
32 35  
  36 +
33 37 /**
34 38 * 换人换车情况表
35 39 */
... ... @@ -70,7 +74,9 @@ public class FormLogger {
70 74 if(StringUtils.isNotEmpty(newJsy))
71 75 cc.setSjgh(newJsy);
72 76  
73   - changetochangeRepository.save(cc);
  77 + //改异步入库
  78 + ccPsts.add(cc);
  79 + //changetochangeRepository.save(cc);
74 80 }catch (Exception e){
75 81 log.error("纪录换人换车情况表", e);
76 82 }
... ... @@ -82,4 +88,13 @@ public class FormLogger {
82 88 cpc.setJsy(jsy);
83 89 saveChangetochange(sch, cpc);
84 90 }
  91 +
  92 + public void saveDb(){
  93 + Changetochange cc;
  94 + for(int i = 0; i < 1000; i ++){
  95 + cc = ccPsts.poll();
  96 + if(null != cc)
  97 + changetochangeRepository.save(cc);
  98 + }
  99 + }
85 100 }
... ...
src/main/java/com/bsth/data/schedule/edit_logs/SeiPstThread.java
... ... @@ -23,6 +23,9 @@ public class SeiPstThread extends Thread{
23 23  
24 24 Logger log = LoggerFactory.getLogger(this.getClass());
25 25  
  26 + @Autowired
  27 + FormLogger formLogger;
  28 +
26 29 @Override
27 30 public void run() {
28 31 try{
... ... @@ -40,6 +43,9 @@ public class SeiPstThread extends Thread{
40 43 }
41 44  
42 45 repository.save(pstList);
  46 +
  47 + //报表结构化日志入库
  48 + formLogger.saveDb();
43 49 }catch (Exception e){
44 50 log.error("", e);
45 51 }
... ...
src/main/java/com/bsth/data/schedule/late_adjust/LateAdjustHandle.java
... ... @@ -101,6 +101,7 @@ public class LateAdjustHandle implements ApplicationContextAware{
101 101 lateSchMap.remove(sch.getClZbh());
102 102 sch.setLate2(false);
103 103 sch.setLateMinute(0);
  104 + sch.setDfAuto(false);
104 105 }
105 106 }catch (Exception e){
106 107 logger.error("", e);
... ...
src/main/java/com/bsth/data/schedule/signal/SchSiginUpdateDBThread.java 0 → 100644
  1 +package com.bsth.data.schedule.signal;
  2 +
  3 +import org.slf4j.Logger;
  4 +import org.slf4j.LoggerFactory;
  5 +import org.springframework.beans.factory.annotation.Autowired;
  6 +import org.springframework.stereotype.Component;
  7 +
  8 +/**
  9 + * Created by panzhao on 2017/8/14.
  10 + */
  11 +@Component
  12 +public class SchSiginUpdateDBThread extends Thread{
  13 +
  14 + @Autowired
  15 + SignalComplateHandler signalComplateHandler;
  16 +
  17 + Logger logger = LoggerFactory.getLogger(this.getClass());
  18 +
  19 + @Override
  20 + public void run() {
  21 + try{
  22 + signalComplateHandler.handler();
  23 + }catch (Exception e){
  24 + logger.error("", e);
  25 + }
  26 + }
  27 +}
... ...
src/main/java/com/bsth/data/schedule/signal/SignalComplateHandler.java 0 → 100644
  1 +package com.bsth.data.schedule.signal;
  2 +
  3 +import com.bsth.data.schedule.DayOfSchedule;
  4 +import com.bsth.data.schedule.signal.entity.SchSiginCompate;
  5 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  6 +import com.bsth.util.db.DBUtils_MS;
  7 +import org.apache.commons.lang3.StringUtils;
  8 +import org.slf4j.Logger;
  9 +import org.slf4j.LoggerFactory;
  10 +import org.springframework.beans.factory.annotation.Autowired;
  11 +import org.springframework.jdbc.core.BatchPreparedStatementSetter;
  12 +import org.springframework.jdbc.core.JdbcTemplate;
  13 +import org.springframework.jdbc.datasource.DataSourceTransactionManager;
  14 +import org.springframework.stereotype.Component;
  15 +import org.springframework.transaction.TransactionDefinition;
  16 +import org.springframework.transaction.TransactionStatus;
  17 +import org.springframework.transaction.support.DefaultTransactionDefinition;
  18 +
  19 +import java.sql.PreparedStatement;
  20 +import java.sql.SQLException;
  21 +import java.util.ArrayList;
  22 +import java.util.Collection;
  23 +import java.util.Date;
  24 +import java.util.List;
  25 +
  26 +/**
  27 + * 班次信号补全(写入数据库,网关以补发的形式提交运管处)
  28 + * Created by panzhao on 2017/8/13.
  29 + */
  30 +@Component
  31 +public class SignalComplateHandler {
  32 +
  33 + @Autowired
  34 + DayOfSchedule dayOfSchedule;
  35 +
  36 + Logger log = LoggerFactory.getLogger(this.getClass());
  37 +
  38 + public void handler(){
  39 + Collection<ScheduleRealInfo> all = dayOfSchedule.findAll();
  40 + List<SchSiginCompate> list = new ArrayList<>();
  41 +
  42 + SchSiginCompate siginCompate;
  43 + Date d = new Date();
  44 + long et = System.currentTimeMillis() - (1000 * 60 * 60 * 2),
  45 + st = et - (1000 * 60 * 60 * 2);
  46 + for(ScheduleRealInfo sch : all){
  47 + if(sch.getDfsjT() > et || sch.getDfsjT() < st)
  48 + continue;
  49 +
  50 + //能自动完成的
  51 + if(sch.getSiginCompate() >= 2)
  52 + continue;
  53 +
  54 + //烂班
  55 + if(sch.isDestroy())
  56 + continue;
  57 +
  58 + //空驶任务
  59 + if(dayOfSchedule.emptyService(sch))
  60 + continue;
  61 +
  62 + siginCompate = new SchSiginCompate(sch);
  63 + if(siginCompate == null || StringUtils.isEmpty(siginCompate.getDeciveId()))
  64 + continue;
  65 +
  66 + //标记已经补发
  67 + sch.setSiginCompate(3);
  68 + //标记入库
  69 + dayOfSchedule.save(sch);
  70 + siginCompate.setCreateDate(d);
  71 + list.add(siginCompate);
  72 + }
  73 +
  74 + put(list);
  75 + }
  76 +
  77 + public void put(final List<SchSiginCompate> list){
  78 + if(null == list || list.size() == 0)
  79 + return;
  80 +
  81 + JdbcTemplate jdbcTemp = new JdbcTemplate(DBUtils_MS.getDataSource());
  82 + //编程式事务
  83 + DataSourceTransactionManager tran = new DataSourceTransactionManager(jdbcTemp.getDataSource());
  84 + DefaultTransactionDefinition def = new DefaultTransactionDefinition();
  85 + def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
  86 + TransactionStatus status = tran.getTransaction(def);
  87 +
  88 + try{
  89 + jdbcTemp.batchUpdate("insert into bsth_t_sigin_complate(id, rq, line_code, device_id, up_down, s_code, e_code, st, et, create_date, status) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", new BatchPreparedStatementSetter() {
  90 + @Override
  91 + public void setValues(PreparedStatement ps, int i) throws SQLException {
  92 + SchSiginCompate sc = list.get(i);
  93 + ps.setLong(1, sc.getId());
  94 + ps.setString(2, sc.getRq());
  95 + ps.setString(3, sc.getLineCode());
  96 + ps.setString(4, sc.getDeciveId());
  97 + ps.setInt(5, sc.getUpDown());
  98 + ps.setString(6, sc.getsCode());
  99 + ps.setString(7, sc.geteCode());
  100 + ps.setLong(8, sc.getSt());
  101 + ps.setLong(9, sc.getEt());
  102 + ps.setDate(10, new java.sql.Date(sc.getCreateDate().getTime()));
  103 + ps.setInt(11, sc.getStatus());
  104 + }
  105 +
  106 + @Override
  107 + public int getBatchSize() {
  108 + return list.size();
  109 + }
  110 + });
  111 +
  112 + tran.commit(status);
  113 + log.info("补信号班次入库," + list.size());
  114 + }catch (Exception e){
  115 + log.error("", e);
  116 + tran.rollback(status);
  117 + }
  118 + }
  119 +
  120 +
  121 +}
... ...
src/main/java/com/bsth/data/schedule/signal/entity/SchSiginCompate.java 0 → 100644
  1 +package com.bsth.data.schedule.signal.entity;
  2 +
  3 +import com.bsth.data.BasicData;
  4 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  5 +
  6 +import java.util.Date;
  7 +
  8 +/**
  9 + * 班次信号补偿
  10 + * Created by panzhao on 2017/8/13.
  11 + */
  12 +public class SchSiginCompate {
  13 +
  14 + /** 实际班次ID */
  15 + private long id;
  16 +
  17 + /** 班次日期 */
  18 + private String rq;
  19 +
  20 + /** 线路编码 */
  21 + private String lineCode;
  22 +
  23 + /** 设备号 */
  24 + private String deciveId;
  25 +
  26 + /** 上下行 */
  27 + private int upDown;
  28 +
  29 + /** 起始站编码 */
  30 + private String sCode;
  31 +
  32 + /** 终点站编码 */
  33 + private String eCode;
  34 +
  35 + /** 开始时间戳 */
  36 + private long st;
  37 +
  38 + /** 结束时间戳 */
  39 + private long et;
  40 +
  41 + /** 入库时间 */
  42 + private Date createDate;
  43 +
  44 + private int status = 0;
  45 +
  46 + public SchSiginCompate(ScheduleRealInfo sch) {
  47 + this.id = sch.getId();
  48 + this.rq = sch.getScheduleDateStr();
  49 + this.lineCode = sch.getXlBm();
  50 + this.upDown = Integer.parseInt(sch.getXlDir());
  51 + this.deciveId = BasicData.deviceId2NbbmMap.inverse().get(sch.getClZbh());
  52 + this.sCode = sch.getQdzCode();
  53 + this.eCode = sch.getZdzCode();
  54 + this.st = sch.getDfsjT();
  55 + this.et = sch.getZdsjT();
  56 +
  57 + if(sch.getFcsjActualTime() != null)
  58 + this.st = sch.getFcsjActualTime();
  59 + if(sch.getZdsjActualTime() != null)
  60 + this.et = sch.getZdsjActualTime();
  61 + }
  62 +
  63 + public long getId() {
  64 + return id;
  65 + }
  66 +
  67 + public void setId(long id) {
  68 + this.id = id;
  69 + }
  70 +
  71 + public String getRq() {
  72 + return rq;
  73 + }
  74 +
  75 + public void setRq(String rq) {
  76 + this.rq = rq;
  77 + }
  78 +
  79 + public String getLineCode() {
  80 + return lineCode;
  81 + }
  82 +
  83 + public void setLineCode(String lineCode) {
  84 + this.lineCode = lineCode;
  85 + }
  86 +
  87 + public String getDeciveId() {
  88 + return deciveId;
  89 + }
  90 +
  91 + public void setDeciveId(String deciveId) {
  92 + this.deciveId = deciveId;
  93 + }
  94 +
  95 + public int getUpDown() {
  96 + return upDown;
  97 + }
  98 +
  99 + public void setUpDown(int upDown) {
  100 + this.upDown = upDown;
  101 + }
  102 +
  103 + public String getsCode() {
  104 + return sCode;
  105 + }
  106 +
  107 + public void setsCode(String sCode) {
  108 + this.sCode = sCode;
  109 + }
  110 +
  111 + public String geteCode() {
  112 + return eCode;
  113 + }
  114 +
  115 + public void seteCode(String eCode) {
  116 + this.eCode = eCode;
  117 + }
  118 +
  119 + public long getSt() {
  120 + return st;
  121 + }
  122 +
  123 + public void setSt(long st) {
  124 + this.st = st;
  125 + }
  126 +
  127 + public long getEt() {
  128 + return et;
  129 + }
  130 +
  131 + public void setEt(long et) {
  132 + this.et = et;
  133 + }
  134 +
  135 + public Date getCreateDate() {
  136 + return createDate;
  137 + }
  138 +
  139 + public void setCreateDate(Date createDate) {
  140 + this.createDate = createDate;
  141 + }
  142 +
  143 + public int getStatus() {
  144 + return status;
  145 + }
  146 +
  147 + public void setStatus(int status) {
  148 + this.status = status;
  149 + }
  150 +}
... ...
src/main/java/com/bsth/data/schedule/thread/ScheduleRefreshThread.java
... ... @@ -49,25 +49,34 @@ public class ScheduleRefreshThread extends Thread{
49 49 Collection<LineConfig> confs = lineConfs.getAll();
50 50  
51 51 String currSchDate, oldSchDate;
52   - String lineCode;
  52 + String lineCode = null;
53 53 for(LineConfig conf : confs){
54   - lineCode = conf.getLine().getLineCode();
55   - oldSchDate = dayOfSchedule.getCurrSchDate().get(lineCode);
56   - currSchDate = dayOfSchedule.calcSchDate(lineCode);
57   -
58   - if(oldSchDate == null || !oldSchDate.equals(currSchDate)){
  54 + try{
  55 + lineCode = conf.getLine().getLineCode();
  56 + oldSchDate = dayOfSchedule.getCurrSchDate().get(lineCode);
  57 + currSchDate = dayOfSchedule.calcSchDate(lineCode);
59 58  
60   - logger.info(lineCode + "开始翻班, " + currSchDate);
61   - //清除指令数据
62   - Set<String> cars = dayOfSchedule.findCarByLineCode(lineCode);
63   - for(String car : cars)
64   - dayOfDirectives.clear(BasicData.deviceId2NbbmMap.inverse().get(car));
65   - //清除驾驶员上报数据
66   - pilotReport.clear(lineCode);
67   -
68   - //重载排班数据
69   - dayOfSchedule.reloadSch(lineCode, currSchDate, false);
70   - logger.info(lineCode + "翻班完成, " + currSchDate + " -班次数量:" + dayOfSchedule.findByLineCode(lineCode).size());
  59 + if(oldSchDate == null || !oldSchDate.equals(currSchDate)){
  60 +
  61 + logger.info(lineCode + "开始翻班, " + currSchDate);
  62 +
  63 + try{
  64 + //清除指令数据
  65 + Set<String> cars = dayOfSchedule.findCarByLineCode(lineCode);
  66 + for(String car : cars)
  67 + dayOfDirectives.clear(BasicData.deviceId2NbbmMap.inverse().get(car));
  68 + //清除驾驶员上报数据
  69 + pilotReport.clear(lineCode);
  70 + }catch (Exception e){
  71 + logger.error("清理 60 和 80出现问题", e);
  72 + }
  73 +
  74 + //重载排班数据
  75 + dayOfSchedule.reloadSch(lineCode, currSchDate, false);
  76 + logger.info(lineCode + "翻班完成, " + currSchDate + " -班次数量:" + dayOfSchedule.findByLineCode(lineCode).size());
  77 + }
  78 + }catch (Exception e){
  79 + logger.error("班次更新失败!! -" + lineCode, e);
71 80 }
72 81 }
73 82  
... ...
src/main/java/com/bsth/entity/Personnel.java
... ... @@ -44,7 +44,7 @@ public class Personnel extends BEntity {
44 44 @Formula(" concat(company_code, '_', branche_company_code) ")
45 45 private String cgsbm;
46 46  
47   - /** 工号 */
  47 + /** 工号(员工编号带公司编码前缀) */
48 48 @Column(nullable = false)
49 49 private String jobCode;
50 50 /** 姓名 */
... ... @@ -59,10 +59,17 @@ public class Personnel extends BEntity {
59 59 private String personnelType;
60 60 /** 所属岗位/工种(字典类型gzType) */
61 61 private String posts;
62   -
  62 +
  63 + /** 工号 */
  64 + @Column(nullable = false)
  65 + private String jobCodeori;
63 66 /** 身份证 */
64 67 private String card;
65 68  
  69 +
  70 + /** 备注 */
  71 + private String remark;
  72 +
66 73 public Personnel() {}
67 74  
68 75 public Personnel(Object id, Object companyCode, Object gh) {
... ... @@ -231,4 +238,20 @@ public class Personnel extends BEntity {
231 238 public void setCgsbm(String cgsbm) {
232 239 this.cgsbm = cgsbm;
233 240 }
  241 +
  242 + public String getJobCodeori() {
  243 + return jobCodeori;
  244 + }
  245 +
  246 + public void setJobCodeori(String jobCodeori) {
  247 + this.jobCodeori = jobCodeori;
  248 + }
  249 +
  250 + public String getRemark() {
  251 + return remark;
  252 + }
  253 +
  254 + public void setRemark(String remark) {
  255 + this.remark = remark;
  256 + }
234 257 }
... ...
src/main/java/com/bsth/entity/excep/ArrivalInfo.java
... ... @@ -61,11 +61,12 @@ public class ArrivalInfo {
61 61 private String jzsj;
62 62 /** -1 则信号有效,但程序标记为不使用 */
63 63 private int flag = 0;
64   -
  64 + private Date dates;
  65 + private int route;
65 66 public ArrivalInfo(){}
66 67  
67 68 public ArrivalInfo(String deviceId, long ts, String lineCode, int upDown, String stopNo, int inOut, long createDate,
68   - int weeksYear, String stopName) {
  69 + int weeksYear, String stopName,Date dates,int route) {
69 70  
70 71 this.deviceId = deviceId;
71 72 this.ts = ts;
... ... @@ -75,6 +76,8 @@ public class ArrivalInfo {
75 76 this.stopName = stopName;
76 77 this.inOut = inOut;
77 78 this.createDate = createDate;
  79 + this.dates=dates;
  80 + this.route=route;
78 81 }
79 82  
80 83 /* @Override
... ... @@ -253,6 +256,22 @@ public class ArrivalInfo {
253 256 public void setPzh(String pzh) {
254 257 this.pzh = pzh;
255 258 }
  259 +
  260 + public Date getDates() {
  261 + return dates;
  262 + }
  263 +
  264 + public void setDates(Date dates) {
  265 + this.dates = dates;
  266 + }
  267 +
  268 + public int getRoute() {
  269 + return route;
  270 + }
  271 +
  272 + public void setRoute(int route) {
  273 + this.route = route;
  274 + }
256 275  
257 276  
258 277  
... ...
src/main/java/com/bsth/entity/excep/Outbound.java
... ... @@ -34,9 +34,6 @@ public class Outbound {
34 34 */
35 35 private String lineName;
36 36  
37   -
38   -
39   -
40 37 /**
41 38 * 上下行(0 上行 , 1 下行 , -1 无效)
42 39 */
... ... @@ -57,18 +54,66 @@ public class Outbound {
57 54 */
58 55 private String location;
59 56  
  57 + /**
  58 + * 超速结束时经度
  59 + */
  60 + private Float endlon;
  61 +
  62 + /**
  63 + * 超速结束时纬度
  64 + */
  65 + private Float endlat;
60 66  
61 67 /**
62 68 * 时间戳
63 69 */
64 70 private Long timestamp;
65 71  
  72 + public Float getEndlon() {
  73 + return endlon;
  74 + }
  75 +
  76 + public void setEndlon(Float endlon) {
  77 + this.endlon = endlon;
  78 + }
  79 +
  80 + public Float getEndlat() {
  81 + return endlat;
  82 + }
  83 +
  84 + public void setEndlat(Float endlat) {
  85 + this.endlat = endlat;
  86 + }
  87 +
  88 + public Long getEndtimestamp() {
  89 + return endtimestamp;
  90 + }
  91 +
  92 + public void setEndtimestamp(Long endtimestamp) {
  93 + this.endtimestamp = endtimestamp;
  94 + }
  95 +
  96 + public String getEndtimestampDate() {
  97 + return endtimestampDate;
  98 + }
  99 +
  100 + public void setEndtimestampDate(String endtimestampDate) {
  101 + this.endtimestampDate = endtimestampDate;
  102 + }
  103 +
66 104 /**
67 105 * 时间戳转换的时间
68 106 */
69 107 private String timestampDate;
70 108  
71 109  
  110 + //结束时间,单位:秒/s
  111 + @Transient
  112 + private Long endtimestamp;
  113 +
  114 + @Transient
  115 + private String endtimestampDate;
  116 +
72 117 /**
73 118 * 时间
74 119 */
... ...
src/main/java/com/bsth/entity/oil/Cwjy.java
... ... @@ -26,6 +26,11 @@ public class Cwjy {
26 26 private String xgr;
27 27  
28 28 private Date createDate;
  29 +
  30 + private String line;
  31 +
  32 + @Transient
  33 + private String linename;
29 34  
30 35 @Transient
31 36 private String gsname;
... ... @@ -95,6 +100,24 @@ public class Cwjy {
95 100 public void setFgsname(String fgsname) {
96 101 this.fgsname = fgsname;
97 102 }
  103 +
  104 + public String getLine() {
  105 + return line;
  106 + }
  107 +
  108 + public void setLine(String line) {
  109 + this.line = line;
  110 + }
  111 +
  112 + public String getLinename() {
  113 + return BasicData.lineCode2NameMap.get(this.line);
  114 + }
  115 +
  116 + public void setLinename(String linename) {
  117 + this.linename = linename;
  118 + }
  119 +
  120 +
98 121  
99 122  
100 123 }
... ...
src/main/java/com/bsth/entity/oil/Dlb.java
... ... @@ -54,6 +54,7 @@ public class Dlb {
54 54 private String edituser;
55 55 private Date edittime;
56 56 private Date createtime;
  57 + private Date updatetime;
57 58 private int nylx;
58 59 //进场顺序(根据最先出场和最后进场来关联车辆的存电量)
59 60 private int jcsx;
... ... @@ -374,4 +375,14 @@ public class Dlb {
374 375 public void setFgsname(String fgsname) {
375 376 this.fgsname = fgsname;
376 377 }
  378 +
  379 + public Date getUpdatetime() {
  380 + return updatetime;
  381 + }
  382 +
  383 + public void setUpdatetime(Date updatetime) {
  384 + this.updatetime = updatetime;
  385 + }
  386 +
  387 +
377 388 }
... ...
src/main/java/com/bsth/entity/oil/Ylxxb.java
... ... @@ -38,13 +38,14 @@ public class Ylxxb {
38 38 private Integer nylx;
39 39 @Transient
40 40 private String ldgh;
41   - //0为接口数据,1为手工输入
  41 + //0为接口数据,1为手工输入,2为改变车号,3为改变驾驶员
42 42 private Integer jylx=0;
43 43 @Transient
44 44 private String gsname;
45 45 @Transient
46 46 private String fgsname;
47   -
  47 + @Transient
  48 + private String linename;
48 49 @Transient
49 50 private Double zjzl;
50 51  
... ... @@ -193,6 +194,12 @@ public class Ylxxb {
193 194 public void setZjzl(Double zjzl) {
194 195 this.zjzl = zjzl;
195 196 }
  197 + public String getLinename() {
  198 + return linename;
  199 + }
  200 + public void setLinename(String linename) {
  201 + this.linename = linename;
  202 + }
196 203  
197 204  
198 205  
... ...
src/main/java/com/bsth/entity/oil/YlxxbUpdate.java 0 → 100644
  1 +package com.bsth.entity.oil;
  2 +
  3 +import java.util.Date;
  4 +
  5 +import javax.persistence.Entity;
  6 +import javax.persistence.GeneratedValue;
  7 +import javax.persistence.Id;
  8 +import javax.persistence.Table;
  9 +import javax.persistence.Transient;
  10 +
  11 +import org.springframework.format.annotation.DateTimeFormat;
  12 +
  13 +import com.bsth.data.BasicData;
  14 +
  15 +@Entity
  16 +@Table(name = "bsth_c_ylxxb_update")
  17 +public class YlxxbUpdate {
  18 + @Id
  19 + @GeneratedValue
  20 + private Integer id;
  21 + @DateTimeFormat(pattern="yyyy-MM-dd")
  22 + private Date yyrq;
  23 + private Date jlrq;
  24 + private String nbbm;
  25 + private String jsy;
  26 + private Double jzl;
  27 + private String stationid;
  28 + private Date createtime;
  29 + private String gsdm;
  30 +
  31 + private Date xgrq;
  32 + private String xgr;
  33 + private String tj;
  34 + public Integer getId() {
  35 + return id;
  36 + }
  37 + public void setId(Integer id) {
  38 + this.id = id;
  39 + }
  40 + public Date getYyrq() {
  41 + return yyrq;
  42 + }
  43 + public void setYyrq(Date yyrq) {
  44 + this.yyrq = yyrq;
  45 + }
  46 + public Date getJlrq() {
  47 + return jlrq;
  48 + }
  49 + public void setJlrq(Date jlrq) {
  50 + this.jlrq = jlrq;
  51 + }
  52 + public String getNbbm() {
  53 + return nbbm;
  54 + }
  55 + public void setNbbm(String nbbm) {
  56 + this.nbbm = nbbm;
  57 + }
  58 + public String getJsy() {
  59 + return jsy;
  60 + }
  61 + public void setJsy(String jsy) {
  62 + this.jsy = jsy;
  63 + }
  64 + public Double getJzl() {
  65 + return jzl;
  66 + }
  67 + public void setJzl(Double jzl) {
  68 + this.jzl = jzl;
  69 + }
  70 + public String getStationid() {
  71 + return stationid;
  72 + }
  73 + public void setStationid(String stationid) {
  74 + this.stationid = stationid;
  75 + }
  76 + public Date getCreatetime() {
  77 + return createtime;
  78 + }
  79 + public void setCreatetime(Date createtime) {
  80 + this.createtime = createtime;
  81 + }
  82 + public String getGsdm() {
  83 + return gsdm;
  84 + }
  85 + public void setGsdm(String gsdm) {
  86 + this.gsdm = gsdm;
  87 + }
  88 + public Date getXgrq() {
  89 + return xgrq;
  90 + }
  91 + public void setXgrq(Date xgrq) {
  92 + this.xgrq = xgrq;
  93 + }
  94 + public String getXgr() {
  95 + return xgr;
  96 + }
  97 + public void setXgr(String xgr) {
  98 + this.xgr = xgr;
  99 + }
  100 + public String getTj() {
  101 + return tj;
  102 + }
  103 + public void setTj(String tj) {
  104 + this.tj = tj;
  105 + }
  106 +
  107 +
  108 +
  109 +
  110 +}
... ...
src/main/java/com/bsth/entity/realcontrol/FrequentPhrases.java 0 → 100644
  1 +package com.bsth.entity.realcontrol;
  2 +
  3 +import javax.persistence.Entity;
  4 +import javax.persistence.GeneratedValue;
  5 +import javax.persistence.Id;
  6 +import javax.persistence.Table;
  7 +
  8 +/**
  9 + * 常用短语
  10 + * Created by panzhao on 2017/9/17.
  11 + */
  12 +@Entity
  13 +@Table(name = "bsth_c_s_frequent_phrases")
  14 +public class FrequentPhrases {
  15 +
  16 + @Id
  17 + @GeneratedValue
  18 + private Integer id;
  19 +
  20 + /**
  21 + * 用户名
  22 + */
  23 + private String userName;
  24 +
  25 + /**
  26 + * 短语
  27 + */
  28 + private String text;
  29 +
  30 + public Integer getId() {
  31 + return id;
  32 + }
  33 +
  34 + public void setId(Integer id) {
  35 + this.id = id;
  36 + }
  37 +
  38 + public String getUserName() {
  39 + return userName;
  40 + }
  41 +
  42 + public void setUserName(String userName) {
  43 + this.userName = userName;
  44 + }
  45 +
  46 + public String getText() {
  47 + return text;
  48 + }
  49 +
  50 + public void setText(String text) {
  51 + this.text = text;
  52 + }
  53 +}
... ...
src/main/java/com/bsth/entity/realcontrol/LineConfig.java
... ... @@ -89,6 +89,11 @@ public class LineConfig {
89 89 private int upStopMinute;
90 90 private int downStopMinute;
91 91  
  92 + /**
  93 + * 使用第一个发车时间,不匹配最佳时间
  94 + */
  95 + private boolean lockFirstOutTime;
  96 +
92 97  
93 98 @OneToMany(cascade = CascadeType.ALL)
94 99 private Set<D80ReplyTemp> d80Temps = new HashSet<>();
... ... @@ -281,4 +286,12 @@ public class LineConfig {
281 286 public void setTwinsStation(String twinsStation) {
282 287 this.twinsStation = twinsStation;
283 288 }
  289 +
  290 + public boolean isLockFirstOutTime() {
  291 + return lockFirstOutTime;
  292 + }
  293 +
  294 + public void setLockFirstOutTime(boolean lockFirstOutTime) {
  295 + this.lockFirstOutTime = lockFirstOutTime;
  296 + }
284 297 }
... ...
src/main/java/com/bsth/entity/realcontrol/ScheduleRealInfo.java
... ... @@ -214,6 +214,17 @@ public class ScheduleRealInfo {
214 214 @JsonIgnore
215 215 private int saveFailCount=0;
216 216  
  217 + /** 是否需要补充GPS信号 (网关提交至运管处动态数据用) 1: 能发车, 2:能到达 3: 补发过*/
  218 + private int siginCompate;
  219 +
  220 + /**
  221 + * 漂移状态
  222 + * 1: 发车漂移
  223 + * 2:到站漂移
  224 + * 3:中途漂移
  225 + */
  226 + private Integer driftStatus = 0;
  227 +
217 228 public boolean isDfAuto() {
218 229 return dfAuto;
219 230 }
... ... @@ -303,10 +314,10 @@ public class ScheduleRealInfo {
303 314 String old = this.getRemarks();
304 315 if(StringUtils.isBlank(old))
305 316 old = "";
306   -
  317 +
307 318 old += remark + ";";
308 319 this.setRemarks(old);
309   -
  320 +
310 321 }
311 322  
312 323 public Long getId() {
... ... @@ -622,16 +633,17 @@ public class ScheduleRealInfo {
622 633 this.dfsjT = dfsjT;
623 634 this.dfsj = fmtHHmm.print(this.dfsjT);
624 635 }
625   -
  636 +
626 637 public void setDfsjAll(String dfsj) {
627 638 this.dfsjT = fmtyyyyMMddHHmm.parseMillis(this.realExecDate + dfsj);
628 639 this.dfsj = dfsj;
629 640 }
630   -
  641 +
631 642 public void calcEndTime(){
632 643 //计划终点时间
633 644 if(this.getBcsj() != null){
634   - this.setZdsjT(this.getDfsjT() + (this.getBcsj() * 60 * 1000));
  645 + //this.setZdsjT(this.getDfsjT() + (this.getBcsj() * 60 * 1000));
  646 + this.setZdsjT(this.getFcsjT() + (this.getBcsj() * 60 * 1000));//计划终点时间不变
635 647 this.setZdsj(fmtHHmm.print(this.zdsjT));
636 648 }
637 649 }
... ... @@ -665,33 +677,33 @@ public class ScheduleRealInfo {
665 677 public void setSflj(boolean sflj) {
666 678 this.sflj = sflj;
667 679 }
668   -
  680 +
669 681 /**
670   - *
671   - * @Title: setFcsjAll
672   - * @Description: TODO(设置计划发车时间)
  682 + *
  683 + * @Title: setFcsjAll
  684 + * @Description: TODO(设置计划发车时间)
673 685 * @throws
674 686 */
675 687 public void setFcsjAll(String fcsj){
676 688 this.fcsjT = fmtyyyyMMddHHmm.parseMillis(this.realExecDate + fcsj);
677 689 this.fcsj = fcsj;
678 690 }
679   -
  691 +
680 692 /**
681   - *
682   - * @Title: setFcsjAll
683   - * @Description: TODO(设置计划发车时间)
  693 + *
  694 + * @Title: setFcsjAll
  695 + * @Description: TODO(设置计划发车时间)
684 696 * @throws
685 697 */
686 698 public void setFcsjAll(Long fcsjT){
687 699 this.fcsjT = fcsjT;
688 700 this.fcsj = fmtHHmm.print(fcsjT);
689 701 }
690   -
  702 +
691 703 /**
692   - *
693   - * @Title: setFcsjActualAll
694   - * @Description: TODO(设置实际发车时间 字符串)
  704 + *
  705 + * @Title: setFcsjActualAll
  706 + * @Description: TODO(设置实际发车时间 字符串)
695 707 * @throws
696 708 */
697 709 public void setFcsjActualAll(String fcsjActual){
... ... @@ -699,39 +711,47 @@ public class ScheduleRealInfo {
699 711 this.fcsjActual = fcsjActual;
700 712 calcStatus();
701 713 }
702   -
  714 +
703 715 /**
704   - *
705   - * @Title: setFcsjActualAll
706   - * @Description: TODO(设置实际发车时间 时间戳)
  716 + *
  717 + * @Title: setFcsjActualAll
  718 + * @Description: TODO(设置实际发车时间 时间戳)
707 719 * @throws
708 720 */
709 721 public void setFcsjActualAll(Long t){
  722 +
710 723 this.fcsjActualTime = t;
711   - this.fcsjActual = fmtHHmm.print(t);
  724 + if(null == t)
  725 + this.fcsjActual = null;
  726 + else
  727 + this.fcsjActual = fmtHHmm.print(t);
712 728  
713 729 //更新班次状态
714 730 calcStatus();
715 731 }
716   -
  732 +
717 733 /**
718   - *
719   - * @Title: setFcsjActualAll
720   - * @Description: TODO(设置实际终点时间)
  734 + *
  735 + * @Title: setFcsjActualAll
  736 + * @Description: TODO(设置实际终点时间)
721 737 * @throws
722 738 */
723 739 public void setZdsjActualAll(Long t){
724 740 this.zdsjActualTime = t;
725   - this.zdsjActual = fmtHHmm.print(t);
726   -
  741 +
  742 + if(null == t)
  743 + this.zdsjActual = null;
  744 + else
  745 + this.zdsjActual = fmtHHmm.print(t);
  746 +
727 747 //更新班次状态
728 748 calcStatus();
729 749 }
730   -
  750 +
731 751 /**
732   - *
733   - * @Title: setFcsjActualAll
734   - * @Description: TODO(设置实际终点时间)
  752 + *
  753 + * @Title: setFcsjActualAll
  754 + * @Description: TODO(设置实际终点时间)
735 755 * @throws
736 756 */
737 757 public void setZdsjActualAll(String zdsjActual){
... ... @@ -740,7 +760,7 @@ public class ScheduleRealInfo {
740 760  
741 761 calcStatus();
742 762 }
743   -
  763 +
744 764 public Long getSpId() {
745 765 return spId;
746 766 }
... ... @@ -760,11 +780,11 @@ public class ScheduleRealInfo {
760 780 public void calcStatus() {
761 781 if(this.status == -1)
762 782 return;
763   -
  783 +
764 784 this.status = 0;
765 785 if(StringUtils.isNotBlank(this.fcsjActual)){
766 786 this.status = 1;
767   -
  787 +
768 788 //进出场班次并且没有计划里程的
769 789 if((this.bcType.equals("out") || this.bcType.equals("in"))
770 790 && this.jhlc == null){
... ... @@ -774,7 +794,7 @@ public class ScheduleRealInfo {
774 794 if(StringUtils.isNotBlank(this.zdsjActual))
775 795 this.status = 2;
776 796 }
777   -
  797 +
778 798 public void destroy(){
779 799 this.jhlc = 0.0;
780 800 if(this.isSflj())
... ... @@ -782,11 +802,11 @@ public class ScheduleRealInfo {
782 802 this.status = -1;
783 803 this.clearFcsjActual();
784 804 }
785   -
  805 +
786 806 public boolean isDestroy(){
787 807 return this.status == -1;
788 808 }
789   -
  809 +
790 810 /* public boolean isNotDestroy(){
791 811 return this.status != -1;
792 812 }*/
... ... @@ -806,18 +826,18 @@ public class ScheduleRealInfo {
806 826 public void setScheduleDateStr(String scheduleDateStr) {
807 827 this.scheduleDateStr = scheduleDateStr;
808 828 }
809   -
  829 +
810 830 public void clearFcsjActual(){
811 831 this.setFcsjActual(null);
812 832 this.setFcsjActualTime(null);
813 833 this.calcStatus();
814 834 }
815   -
  835 +
816 836 //清除实际终点时间
817 837 public void clearZdsjActual(){
818 838 this.setZdsjActual(null);
819 839 this.setZdsjActualTime(null);
820   -
  840 +
821 841 calcStatus();
822 842 }
823 843  
... ... @@ -922,4 +942,20 @@ public class ScheduleRealInfo {
922 942 public void setSaveFailCount(int saveFailCount) {
923 943 this.saveFailCount = saveFailCount;
924 944 }
  945 +
  946 + public int getSiginCompate() {
  947 + return siginCompate;
  948 + }
  949 +
  950 + public void setSiginCompate(int siginCompate) {
  951 + this.siginCompate = siginCompate;
  952 + }
  953 +
  954 + public Integer getDriftStatus() {
  955 + return driftStatus;
  956 + }
  957 +
  958 + public void setDriftStatus(Integer driftStatus) {
  959 + this.driftStatus = driftStatus;
  960 + }
925 961 }
... ...
src/main/java/com/bsth/entity/report/MileageReport.java 0 → 100644
  1 +package com.bsth.entity.report;
  2 +
  3 +import java.util.Date;
  4 +
  5 +/**
  6 + * @ClassName: MileageReport.java
  7 + * @Description: TODO(营运里程修正报表)
  8 + * @author: YouRuiFeng
  9 + * @date: 2017-8-14 上午11:09:19
  10 + *
  11 + */
  12 +public class MileageReport {
  13 + /** 公司编码 */
  14 + private String companyId;
  15 +
  16 + /** 分公司编码 */
  17 + private String subCompanyId;
  18 +
  19 + /** 公司名称 */
  20 + private String companyName;
  21 +
  22 + /** 分公司名称 */
  23 + private String subCompanyName;
  24 +
  25 + /** 线路编码 */
  26 + private String lineCode;
  27 +
  28 + /** 线路名称 */
  29 + private String lineName;
  30 +
  31 + /** 总营运公里 */
  32 + private double zgl;
  33 +
  34 + /** 实际运营公里 */
  35 + private double sjyygl;
  36 +
  37 + /** 实际空驶公里 */
  38 + private double sjksgl;
  39 +
  40 + /** 手动待发公里 */
  41 + private double sddfgl;
  42 +
  43 + /** 自动代发公里 */
  44 + private double zddfgl;
  45 +
  46 + /** 完全无Gps信号公里 */
  47 + private double wqwxhgl;
  48 +
  49 + /** 部分无Gps公里 */
  50 + private double bfwxhgl;
  51 +
  52 + /** 漂移公里 */
  53 + private double pygl;
  54 +
  55 + /** 临加公里 */
  56 + private double ljgl;
  57 +
  58 + /** 子任务 */
  59 + private double zrwgl;
  60 +
  61 + /** 其他*/
  62 + private String other;
  63 +
  64 + /** 备注 */
  65 + private String remarks;
  66 +
  67 + /** 日期 (班次日期) */
  68 + private String rq;
  69 +
  70 + private Date createDate;
  71 +
  72 +
  73 + public String getCompanyId() {
  74 + return companyId;
  75 + }
  76 +
  77 + public void setCompanyId(String companyId) {
  78 + this.companyId = companyId;
  79 + }
  80 +
  81 + public String getSubCompanyId() {
  82 + return subCompanyId;
  83 + }
  84 +
  85 + public void setSubCompanyId(String subCompanyId) {
  86 + this.subCompanyId = subCompanyId;
  87 + }
  88 +
  89 + public String getCompanyName() {
  90 + return companyName;
  91 + }
  92 +
  93 + public void setCompanyName(String companyName) {
  94 + this.companyName = companyName;
  95 + }
  96 +
  97 + public String getSubCompanyName() {
  98 + return subCompanyName;
  99 + }
  100 +
  101 + public void setSubCompanyName(String subCompanyName) {
  102 + this.subCompanyName = subCompanyName;
  103 + }
  104 +
  105 + public String getLineCode() {
  106 + return lineCode;
  107 + }
  108 +
  109 + public void setLineCode(String lineCode) {
  110 + this.lineCode = lineCode;
  111 + }
  112 +
  113 + public String getLineName() {
  114 + return lineName;
  115 + }
  116 +
  117 + public void setLineName(String lineName) {
  118 + this.lineName = lineName;
  119 + }
  120 +
  121 + public double getZgl() {
  122 + return zgl;
  123 + }
  124 +
  125 + public void setZgl(double zgl) {
  126 + this.zgl = zgl;
  127 + }
  128 +
  129 + public double getSjyygl() {
  130 + return sjyygl;
  131 + }
  132 +
  133 + public void setSjyygl(double sjyygl) {
  134 + this.sjyygl = sjyygl;
  135 + }
  136 +
  137 + public double getSjksgl() {
  138 + return sjksgl;
  139 + }
  140 +
  141 + public void setSjksgl(double sjksgl) {
  142 + this.sjksgl = sjksgl;
  143 + }
  144 +
  145 + public double getSddfgl() {
  146 + return sddfgl;
  147 + }
  148 +
  149 + public void setSddfgl(double sddfgl) {
  150 + this.sddfgl = sddfgl;
  151 + }
  152 +
  153 + public double getZddfgl() {
  154 + return zddfgl;
  155 + }
  156 +
  157 + public void setZddfgl(double zddfgl) {
  158 + this.zddfgl = zddfgl;
  159 + }
  160 +
  161 + public double getWqwxhgl() {
  162 + return wqwxhgl;
  163 + }
  164 +
  165 + public void setWqwxhgl(double wqwxhgl) {
  166 + this.wqwxhgl = wqwxhgl;
  167 + }
  168 +
  169 + public double getBfwxhgl() {
  170 + return bfwxhgl;
  171 + }
  172 +
  173 + public void setBfwxhgl(double bfwxhgl) {
  174 + this.bfwxhgl = bfwxhgl;
  175 + }
  176 +
  177 + public double getPygl() {
  178 + return pygl;
  179 + }
  180 +
  181 + public void setPygl(double pygl) {
  182 + this.pygl = pygl;
  183 + }
  184 +
  185 + public double getLjgl() {
  186 + return ljgl;
  187 + }
  188 +
  189 + public void setLjgl(double ljgl) {
  190 + this.ljgl = ljgl;
  191 + }
  192 +
  193 + public double getZrwgl() {
  194 + return zrwgl;
  195 + }
  196 +
  197 + public void setZrwgl(double zrwgl) {
  198 + this.zrwgl = zrwgl;
  199 + }
  200 +
  201 + public String getOther() {
  202 + return other;
  203 + }
  204 +
  205 + public void setOther(String other) {
  206 + this.other = other;
  207 + }
  208 +
  209 + public String getRemarks() {
  210 + return remarks;
  211 + }
  212 +
  213 + public void setRemarks(String remarks) {
  214 + this.remarks = remarks;
  215 + }
  216 +
  217 + public String getRq() {
  218 + return rq;
  219 + }
  220 +
  221 + public void setRq(String rq) {
  222 + this.rq = rq;
  223 + }
  224 +
  225 + public Date getCreateDate() {
  226 + return createDate;
  227 + }
  228 +
  229 + public void setCreateDate(Date createDate) {
  230 + this.createDate = createDate;
  231 + }
  232 +
  233 +
  234 +}
... ...
src/main/java/com/bsth/entity/report/ScheduleCorrectionReport.java 0 → 100644
  1 +package com.bsth.entity.report;
  2 +
  3 +import java.util.Date;
  4 +
  5 +/**
  6 + * @ClassName: MileageReport.java
  7 + * @Description: TODO(营运里程修正报表)
  8 + * @author: YouRuiFeng
  9 + * @date: 2017-8-14 上午11:09:19
  10 + *
  11 + */
  12 +public class ScheduleCorrectionReport {
  13 + /** 公司编码 */
  14 + private String companyId;
  15 +
  16 + /** 分公司编码 */
  17 + private String subCompanyId;
  18 +
  19 + /** 公司名称 */
  20 + private String companyName;
  21 +
  22 + /** 分公司名称 */
  23 + private String subCompanyName;
  24 +
  25 + /** 线路编码 */
  26 + private String lineCode;
  27 +
  28 + /** 线路名称 */
  29 + private String lineName;
  30 +
  31 + /** 总营运班次 */
  32 + private int zbc;
  33 +
  34 + /** 实际运营班次 */
  35 + private int sjyybc;
  36 +
  37 + /** 实际空驶班次 */
  38 + private int sjksbc;
  39 +
  40 + /** 手动待发班次 */
  41 + private int sddfbc;
  42 +
  43 + /** 自动代发班次 */
  44 + private int zddfbc;
  45 +
  46 + /** 完全无Gps信号班次 */
  47 + private int wqwxhbc;
  48 +
  49 + /** 部分无Gps班次 */
  50 + private int bfwxhbc;
  51 +
  52 + /** 漂移班次 */
  53 + private int pybc;
  54 +
  55 + /** 临加班次 */
  56 + private int ljbc;
  57 +
  58 + /** 子任务 */
  59 + private int zrwbc;
  60 +
  61 + /** 其他*/
  62 + private String other;
  63 +
  64 + /** 备注 */
  65 + private String remarks;
  66 +
  67 + /** 日期 (班次日期) */
  68 + private String rq;
  69 +
  70 + private Date createDate;
  71 +
  72 + public String getCompanyId() {
  73 + return companyId;
  74 + }
  75 +
  76 + public void setCompanyId(String companyId) {
  77 + this.companyId = companyId;
  78 + }
  79 +
  80 + public String getSubCompanyId() {
  81 + return subCompanyId;
  82 + }
  83 +
  84 + public void setSubCompanyId(String subCompanyId) {
  85 + this.subCompanyId = subCompanyId;
  86 + }
  87 +
  88 + public String getCompanyName() {
  89 + return companyName;
  90 + }
  91 +
  92 + public void setCompanyName(String companyName) {
  93 + this.companyName = companyName;
  94 + }
  95 +
  96 + public String getSubCompanyName() {
  97 + return subCompanyName;
  98 + }
  99 +
  100 + public void setSubCompanyName(String subCompanyName) {
  101 + this.subCompanyName = subCompanyName;
  102 + }
  103 +
  104 + public String getLineCode() {
  105 + return lineCode;
  106 + }
  107 +
  108 + public void setLineCode(String lineCode) {
  109 + this.lineCode = lineCode;
  110 + }
  111 +
  112 + public String getLineName() {
  113 + return lineName;
  114 + }
  115 +
  116 + public void setLineName(String lineName) {
  117 + this.lineName = lineName;
  118 + }
  119 +
  120 + public int getZbc() {
  121 + return zbc;
  122 + }
  123 +
  124 + public void setZbc(int zbc) {
  125 + this.zbc = zbc;
  126 + }
  127 +
  128 + public int getSjyybc() {
  129 + return sjyybc;
  130 + }
  131 +
  132 + public void setSjyybc(int sjyybc) {
  133 + this.sjyybc = sjyybc;
  134 + }
  135 +
  136 + public int getSjksbc() {
  137 + return sjksbc;
  138 + }
  139 +
  140 + public void setSjksbc(int sjksbc) {
  141 + this.sjksbc = sjksbc;
  142 + }
  143 +
  144 + public int getSddfbc() {
  145 + return sddfbc;
  146 + }
  147 +
  148 + public void setSddfbc(int sddfbc) {
  149 + this.sddfbc = sddfbc;
  150 + }
  151 +
  152 + public int getZddfbc() {
  153 + return zddfbc;
  154 + }
  155 +
  156 + public void setZddfbc(int zddfbc) {
  157 + this.zddfbc = zddfbc;
  158 + }
  159 +
  160 + public int getWqwxhbc() {
  161 + return wqwxhbc;
  162 + }
  163 +
  164 + public void setWqwxhbc(int wqwxhbc) {
  165 + this.wqwxhbc = wqwxhbc;
  166 + }
  167 +
  168 + public int getBfwxhbc() {
  169 + return bfwxhbc;
  170 + }
  171 +
  172 + public void setBfwxhbc(int bfwxhbc) {
  173 + this.bfwxhbc = bfwxhbc;
  174 + }
  175 +
  176 + public int getPybc() {
  177 + return pybc;
  178 + }
  179 +
  180 + public void setPybc(int pybc) {
  181 + this.pybc = pybc;
  182 + }
  183 +
  184 + public int getLjbc() {
  185 + return ljbc;
  186 + }
  187 +
  188 + public void setLjbc(int ljbc) {
  189 + this.ljbc = ljbc;
  190 + }
  191 +
  192 + public int getZrwbc() {
  193 + return zrwbc;
  194 + }
  195 +
  196 + public void setZrwbc(int zrwbc) {
  197 + this.zrwbc = zrwbc;
  198 + }
  199 +
  200 + public String getOther() {
  201 + return other;
  202 + }
  203 +
  204 + public void setOther(String other) {
  205 + this.other = other;
  206 + }
  207 +
  208 + public String getRemarks() {
  209 + return remarks;
  210 + }
  211 +
  212 + public void setRemarks(String remarks) {
  213 + this.remarks = remarks;
  214 + }
  215 +
  216 + public String getRq() {
  217 + return rq;
  218 + }
  219 +
  220 + public void setRq(String rq) {
  221 + this.rq = rq;
  222 + }
  223 +
  224 + public Date getCreateDate() {
  225 + return createDate;
  226 + }
  227 +
  228 + public void setCreateDate(Date createDate) {
  229 + this.createDate = createDate;
  230 + }
  231 +
  232 +}
... ...
src/main/java/com/bsth/entity/schedule/SchedulePlanInfo.java
... ... @@ -3,6 +3,7 @@ package com.bsth.entity.schedule;
3 3 import com.bsth.entity.Line;
4 4 import com.bsth.service.schedule.rules.rerun.RerunRule_input;
5 5 import com.bsth.service.schedule.rules.shiftloop.ScheduleResult_output;
  6 +import com.bsth.service.schedule.rules.shiftloop.ScheduleRule_Type;
6 7 import org.apache.commons.lang3.StringUtils;
7 8  
8 9 import javax.persistence.*;
... ... @@ -267,7 +268,8 @@ public class SchedulePlanInfo extends BEntity {
267 268 List<EmployeeConfigInfo> employeeConfigInfoList,
268 269 SchedulePlan schedulePlan,
269 270 boolean isFirstBc, // 是否第一个班次
270   - boolean isLastBc // 是否最后一个班次
  271 + boolean isLastBc, // 是否最后一个班次
  272 + ScheduleRule_Type sType // 类型
271 273 ) {
272 274  
273 275 // TODO:关联的公司名称
... ... @@ -294,47 +296,51 @@ public class SchedulePlanInfo extends BEntity {
294 296 this.lpName = ttInfoDetail.getLp().getLpName();
295 297  
296 298 // 关联的车辆信息
297   - this.cl = carConfigInfo.getCl().getId(); // 车辆id
298   - this.clZbh = carConfigInfo.getCl().getInsideCode(); // 自编号/内部编号
  299 + if (sType == ScheduleRule_Type.NORMAL) {
  300 + this.cl = carConfigInfo.getCl().getId(); // 车辆id
  301 + this.clZbh = carConfigInfo.getCl().getInsideCode(); // 自编号/内部编号
  302 + }
299 303  
300 304 // TODO:报道时间,出场时间没有
301 305 // 关联的驾驶员
302   - EmployeeConfigInfo employeeConfigInfo = null;
303   - if (isFb) {
304   - if (employeeConfigInfoList.size() > 1) {
305   - employeeConfigInfo = employeeConfigInfoList.get(1);
  306 + if (sType == ScheduleRule_Type.NORMAL) {
  307 + EmployeeConfigInfo employeeConfigInfo = null;
  308 + if (isFb) {
  309 + if (employeeConfigInfoList.size() > 1) {
  310 + employeeConfigInfo = employeeConfigInfoList.get(1);
  311 + } else {
  312 + employeeConfigInfo = employeeConfigInfoList.get(0);
  313 + }
306 314 } else {
307 315 employeeConfigInfo = employeeConfigInfoList.get(0);
308 316 }
309   - } else {
310   - employeeConfigInfo = employeeConfigInfoList.get(0);
311   - }
312 317  
313   - this.j = employeeConfigInfo.getJsy().getId();
  318 + this.j = employeeConfigInfo.getJsy().getId();
314 319 // this.jGh = employeeConfigInfo.getJsy().getJobCode();
315   - if (StringUtils.isNotEmpty(employeeConfigInfo.getJsy().getJobCode())) {
316   - String[] jsy_temp = employeeConfigInfo.getJsy().getJobCode().split("-");
317   - if (jsy_temp.length > 1) {
318   - this.jGh = jsy_temp[1];
319   - } else {
320   - this.jGh = jsy_temp[0];
321   - }
322   - }
323   - this.jName = employeeConfigInfo.getJsy().getPersonnelName();
324   - // 关联的售票员
325   - if (employeeConfigInfo.getSpy() != null) {
326   - this.s = employeeConfigInfo.getSpy().getId();
327   -// this.sGh = employeeConfigInfo.getSpy().getJobCode();
328   - if (StringUtils.isNotEmpty(employeeConfigInfo.getSpy().getJobCode())) {
329   - String[] spy_temp = employeeConfigInfo.getSpy().getJobCode().split("-");
330   - if (spy_temp.length > 1) {
331   - this.sGh = spy_temp[1];
  320 + if (StringUtils.isNotEmpty(employeeConfigInfo.getJsy().getJobCode())) {
  321 + String[] jsy_temp = employeeConfigInfo.getJsy().getJobCode().split("-");
  322 + if (jsy_temp.length > 1) {
  323 + this.jGh = jsy_temp[1];
332 324 } else {
333   - this.sGh = spy_temp[0];
  325 + this.jGh = jsy_temp[0];
334 326 }
335 327 }
  328 + this.jName = employeeConfigInfo.getJsy().getPersonnelName();
  329 + // 关联的售票员
  330 + if (employeeConfigInfo.getSpy() != null) {
  331 + this.s = employeeConfigInfo.getSpy().getId();
  332 +// this.sGh = employeeConfigInfo.getSpy().getJobCode();
  333 + if (StringUtils.isNotEmpty(employeeConfigInfo.getSpy().getJobCode())) {
  334 + String[] spy_temp = employeeConfigInfo.getSpy().getJobCode().split("-");
  335 + if (spy_temp.length > 1) {
  336 + this.sGh = spy_temp[1];
  337 + } else {
  338 + this.sGh = spy_temp[0];
  339 + }
  340 + }
336 341  
337   - this.sName = employeeConfigInfo.getSpy().getPersonnelName();
  342 + this.sName = employeeConfigInfo.getSpy().getPersonnelName();
  343 + }
338 344 }
339 345  
340 346 // 时刻明细数据
... ... @@ -360,42 +366,44 @@ public class SchedulePlanInfo extends BEntity {
360 366 this.remark = ttInfoDetail.getRemark();
361 367  
362 368 // 使用车辆配置的停车场信息
363   - String pzType = carConfigInfo.getPzType(); // 配置类型
364   - if (pzType != null && !pzType.equals("BSY")) {
365   - if ("ZW".equals(pzType)) { // 只看早晚进出场
366   - if (isFirstBc) { // 第一个班次是出场
  369 + if (sType == ScheduleRule_Type.NORMAL) {
  370 + String pzType = carConfigInfo.getPzType(); // 配置类型
  371 + if (pzType != null && !pzType.equals("BSY")) {
  372 + if ("ZW".equals(pzType)) { // 只看早晚进出场
  373 + if (isFirstBc) { // 第一个班次是出场
367 374 // this.qdz = carConfigInfo.getTcc().getId(); // 起点站-停车场id
368   - this.qdzCode = carConfigInfo.getTcc().getParkCode(); // 起点站-停车场code
369   - this.qdzName = carConfigInfo.getTcc().getParkName(); // 起点站-停车场name
  375 + this.qdzCode = carConfigInfo.getTcc().getParkCode(); // 起点站-停车场code
  376 + this.qdzName = carConfigInfo.getTcc().getParkName(); // 起点站-停车场name
370 377  
371   - this.jhlc = "0".equals(this.xlDir) ? carConfigInfo.getUpOutLc() : carConfigInfo.getDownOutLc();
372   - this.bcsj = "0".equals(this.xlDir) ? carConfigInfo.getUpOutSj().intValue() : carConfigInfo.getDownOutSj().intValue();
  378 + this.jhlc = "0".equals(this.xlDir) ? carConfigInfo.getUpOutLc() : carConfigInfo.getDownOutLc();
  379 + this.bcsj = "0".equals(this.xlDir) ? carConfigInfo.getUpOutSj().intValue() : carConfigInfo.getDownOutSj().intValue();
373 380  
374   - } else if (isLastBc) { // 最后一个班次是进场
  381 + } else if (isLastBc) { // 最后一个班次是进场
375 382 // this.zdz = carConfigInfo.getTcc().getId(); // 终点站-停车场id
376   - this.zdzCode = carConfigInfo.getTcc().getParkCode(); // 终点站-停车场code
377   - this.zdzName = carConfigInfo.getTcc().getParkName(); // 终点站-停车场name
  383 + this.zdzCode = carConfigInfo.getTcc().getParkCode(); // 终点站-停车场code
  384 + this.zdzName = carConfigInfo.getTcc().getParkName(); // 终点站-停车场name
378 385  
379   - this.jhlc = "0".equals(this.xlDir) ? carConfigInfo.getUpInLc() : carConfigInfo.getDownInLc();
380   - this.bcsj = "0".equals(this.xlDir) ? carConfigInfo.getUpInSj().intValue() : carConfigInfo.getDownInSj().intValue();
381   - }
  386 + this.jhlc = "0".equals(this.xlDir) ? carConfigInfo.getUpInLc() : carConfigInfo.getDownInLc();
  387 + this.bcsj = "0".equals(this.xlDir) ? carConfigInfo.getUpInSj().intValue() : carConfigInfo.getDownInSj().intValue();
  388 + }
382 389  
383   - } else if ("FS".equals(pzType)) { // 所有进出场
384   - if ("out".equals(this.bcType)) { // 出场班次
  390 + } else if ("FS".equals(pzType)) { // 所有进出场
  391 + if ("out".equals(this.bcType)) { // 出场班次
385 392 // this.qdz = carConfigInfo.getTcc().getId(); // 起点站-停车场id
386   - this.qdzCode = carConfigInfo.getTcc().getParkCode(); // 起点站-停车场code
387   - this.qdzName = carConfigInfo.getTcc().getParkName(); // 起点站-停车场name
  393 + this.qdzCode = carConfigInfo.getTcc().getParkCode(); // 起点站-停车场code
  394 + this.qdzName = carConfigInfo.getTcc().getParkName(); // 起点站-停车场name
388 395  
389   - this.jhlc = "0".equals(this.xlDir) ? carConfigInfo.getUpOutLc() : carConfigInfo.getDownOutLc();
390   - this.bcsj = "0".equals(this.xlDir) ? carConfigInfo.getUpOutSj().intValue() : carConfigInfo.getDownOutSj().intValue();
  396 + this.jhlc = "0".equals(this.xlDir) ? carConfigInfo.getUpOutLc() : carConfigInfo.getDownOutLc();
  397 + this.bcsj = "0".equals(this.xlDir) ? carConfigInfo.getUpOutSj().intValue() : carConfigInfo.getDownOutSj().intValue();
391 398  
392   - } else if ("in".equals(this.bcType)) {
  399 + } else if ("in".equals(this.bcType)) {
393 400 // this.zdz = carConfigInfo.getTcc().getId(); // 终点站-停车场id
394   - this.zdzCode = carConfigInfo.getTcc().getParkCode(); // 终点站-停车场code
395   - this.zdzName = carConfigInfo.getTcc().getParkName(); // 终点站-停车场name
  401 + this.zdzCode = carConfigInfo.getTcc().getParkCode(); // 终点站-停车场code
  402 + this.zdzName = carConfigInfo.getTcc().getParkName(); // 终点站-停车场name
396 403  
397   - this.jhlc = "0".equals(this.xlDir) ? carConfigInfo.getUpInLc() : carConfigInfo.getDownInLc();
398   - this.bcsj = "0".equals(this.xlDir) ? carConfigInfo.getUpInSj().intValue() : carConfigInfo.getDownInSj().intValue();
  404 + this.jhlc = "0".equals(this.xlDir) ? carConfigInfo.getUpInLc() : carConfigInfo.getDownInLc();
  405 + this.bcsj = "0".equals(this.xlDir) ? carConfigInfo.getUpInSj().intValue() : carConfigInfo.getDownInSj().intValue();
  406 + }
399 407 }
400 408 }
401 409 }
... ...
src/main/java/com/bsth/entity/search/PredicatesBuilder.java
... ... @@ -108,7 +108,10 @@ public class PredicatesBuilder {
108 108 String.class.isAssignableFrom(rightType)) { // Date >= String
109 109 DateTime dateTime = new DateTime(object);
110 110 return cb.greaterThanOrEqualTo((Path<Date>) expression, dateTime.toDate());
111   - } else {
  111 + } else if (long.class.isAssignableFrom(leftType) &&
  112 + String.class.isAssignableFrom(rightType)) { // Long >= String
  113 + return cb.greaterThanOrEqualTo((Path<Long>) expression, Long.valueOf(object+""));
  114 + } else {
112 115 throw new RuntimeException("ge 不支持类型组合:" + expression.getJavaType() + ">=" + object.getClass());
113 116 }
114 117 }
... ... @@ -140,7 +143,10 @@ public class PredicatesBuilder {
140 143 String.class.isAssignableFrom(rightType)) { // Date <= String
141 144 DateTime dateTime = new DateTime(object);
142 145 return cb.lessThanOrEqualTo((Path<Date>) expression, dateTime.toDate());
143   - } else {
  146 + }else if (long.class.isAssignableFrom(leftType) &&
  147 + String.class.isAssignableFrom(rightType)) { // Long <= String
  148 + return cb.lessThanOrEqualTo((Path<Long>) expression, Long.valueOf(object + "") );
  149 + } else {
144 150 throw new RuntimeException("le 不支持类型组合:" + expression.getJavaType() + "<=" + object.getClass());
145 151 }
146 152 }
... ...
src/main/java/com/bsth/entity/sys/Interval.java
... ... @@ -39,11 +39,11 @@ public class Interval {
39 39 }
40 40  
41 41  
42   - public Integer getCreateBy() {
  42 + public String getCreateBy() {
43 43 return createBy;
44 44 }
45 45  
46   - public void setCreateBy(Integer createBy) {
  46 + public void setCreateBy(String createBy) {
47 47 this.createBy = createBy;
48 48 }
49 49  
... ... @@ -55,11 +55,11 @@ public class Interval {
55 55 this.createDate = createDate;
56 56 }
57 57  
58   - public Integer getUpdateBy() {
  58 + public String getUpdateBy() {
59 59 return updateBy;
60 60 }
61 61  
62   - public void setUpdateBy(Integer updateBy) {
  62 + public void setUpdateBy(String updateBy) {
63 63 this.updateBy = updateBy;
64 64 }
65 65  
... ... @@ -75,13 +75,13 @@ public class Interval {
75 75 private Integer trough;
76 76  
77 77 @Column(name = "create_by")
78   - private Integer createBy;
  78 + private String createBy;
79 79  
80 80 @Column(updatable = false, name = "create_date", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
81 81 private Date createDate;
82 82  
83 83 @Column(name = "update_by")
84   - private Integer updateBy;
  84 + private String updateBy;
85 85  
86 86 @Column(name = "update_date", columnDefinition = "timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
87 87 private Date updateDate;
... ...
src/main/java/com/bsth/entity/traffic/VehicleInoutStop.java 0 → 100644
  1 +package com.bsth.entity.traffic;
  2 +
  3 +import com.bsth.entity.Cars;
  4 +import com.bsth.entity.Line;
  5 +
  6 +import javax.persistence.*;
  7 +import java.util.Date;
  8 +
  9 +/**
  10 + *
  11 + * @ClassName: VehicleInoutStop(车载上报停靠站信息)
  12 + *
  13 + * @Description: TODO(线路标准信息)
  14 + *
  15 + * @Author bsth@zq
  16 + *
  17 + * @Date 2017-9-18 9:34:39
  18 + *
  19 + * @Version 公交调度系统BS版 0.1
  20 + *
  21 + */
  22 +@Entity
  23 +@Table(name = "bsth_c_shreal")
  24 +public class VehicleInoutStop {
  25 +
  26 + @Id
  27 + @GeneratedValue(strategy = GenerationType.IDENTITY)
  28 + private Integer id;
  29 +
  30 + @ManyToOne
  31 + private Line line;
  32 +
  33 + @ManyToOne
  34 + private Cars cars;
  35 +
  36 + // 站点序号
  37 + private Integer stop;
  38 +
  39 + // 营运状态
  40 + private Integer serviceState;
  41 +
  42 + // 上下行
  43 + private Integer upDown;
  44 +
  45 + // 进出站/站内外
  46 + private Integer inOutStop;
  47 +
  48 + // 上报时间
  49 + private long reportDate;
  50 +
  51 + public Integer getId() {
  52 + return id;
  53 + }
  54 +
  55 + public void setId(Integer id) {
  56 + this.id = id;
  57 + }
  58 +
  59 + public Line getLine() {
  60 + return line;
  61 + }
  62 +
  63 + public void setLine(Line line) {
  64 + this.line = line;
  65 + }
  66 +
  67 + public Cars getCars() {
  68 + return cars;
  69 + }
  70 +
  71 + public void setCars(Cars cars) {
  72 + this.cars = cars;
  73 + }
  74 +
  75 + public Integer getStop() {
  76 + return stop;
  77 + }
  78 +
  79 + public void setStop(Integer stop) {
  80 + this.stop = stop;
  81 + }
  82 +
  83 + public Integer getServiceState() {
  84 + return serviceState;
  85 + }
  86 +
  87 + public void setServiceState(Integer serviceState) {
  88 + this.serviceState = serviceState;
  89 + }
  90 +
  91 + public Integer getUpDown() {
  92 + return upDown;
  93 + }
  94 +
  95 + public void setUpDown(Integer upDown) {
  96 + this.upDown = upDown;
  97 + }
  98 +
  99 + public Integer getInOutStop() {
  100 + return inOutStop;
  101 + }
  102 +
  103 + public void setInOutStop(Integer inOutStop) {
  104 + this.inOutStop = inOutStop;
  105 + }
  106 +
  107 + public long getReportDate() { return reportDate; }
  108 +
  109 + public void setReportDate(long reportDate) { this.reportDate = reportDate; }
  110 +}
... ...
src/main/java/com/bsth/filter/AccessLogFilter.java
1 1 package com.bsth.filter;
2 2  
3   -import javax.servlet.FilterChain;
4   -import javax.servlet.ServletException;
5   -import javax.servlet.http.HttpServletRequest;
6   -import javax.servlet.http.HttpServletResponse;
7   -
8   -import org.slf4j.Logger;
9   -import org.slf4j.LoggerFactory;
10   -import org.springframework.stereotype.Component;
11   -
12 3 import com.alibaba.fastjson.JSON;
  4 +import com.bsth.entity.sys.SysUser;
13 5 import com.bsth.security.util.SecurityUtils;
14 6 import com.bsth.util.IpUtils;
15 7 import com.google.common.collect.Lists;
16 8 import com.google.common.collect.Maps;
  9 +import org.slf4j.Logger;
  10 +import org.slf4j.LoggerFactory;
  11 +import org.springframework.stereotype.Component;
17 12  
  13 +import javax.servlet.FilterChain;
  14 +import javax.servlet.ServletException;
  15 +import javax.servlet.http.HttpServletRequest;
  16 +import javax.servlet.http.HttpServletResponse;
18 17 import java.io.IOException;
19 18 import java.util.Enumeration;
20 19 import java.util.List;
... ... @@ -38,7 +37,9 @@ public class AccessLogFilter extends BaseFilter {
38 37 HttpServletResponse response, FilterChain chain)
39 38 throws IOException, ServletException {
40 39  
41   - String username = SecurityUtils.getCurrentUser().getName();
  40 + SysUser user = SecurityUtils.getCurrentUser();
  41 + String username = user.getUserName();
  42 + String name = user.getName();
42 43 String jsessionId = request.getRequestedSessionId();
43 44 String ip = IpUtils.getIpAddr(request);
44 45 String userAgent = request.getHeader("User-Agent");
... ... @@ -47,7 +48,7 @@ public class AccessLogFilter extends BaseFilter {
47 48 String headers = getHeaders(request);
48 49  
49 50 StringBuilder s = new StringBuilder();
50   - s.append(getBlock(username));
  51 + s.append(getBlock(username + " -" + name));
51 52 s.append(getBlock(jsessionId));
52 53 s.append(getBlock(ip));
53 54 s.append(getBlock(userAgent));
... ...
src/main/java/com/bsth/repository/LineRepository.java
... ... @@ -41,4 +41,7 @@ public interface LineRepository extends BaseRepository&lt;Line, Integer&gt; {
41 41  
42 42 @Query(value = " SELECT l FROM Line l where l.company like %?1% and l.brancheCompany like %?2% and l.lineCode like ?3")
43 43 public List<Line> findLineBygsBm(String gsBm, String fgsBm, String line);
  44 +
  45 + @Query("SELECT L FROM Line L where L.destroy=0")
  46 + List<Line> findAllService();
44 47 }
... ...