Commit 81631d6d0446f30731b71a293b9b043e5461a0eb

Authored by 徐烜
2 parents f70c07fa c42739f4

Merge branch 'minhang' of http://222.66.0.204:8090//panzhaov5/bsth_control into minhang

Showing 32 changed files with 3148 additions and 912 deletions

Too many changes to show.

To preserve performance only 32 of 52 files are displayed.

src/main/java/com/bsth/XDApplication.java
... ... @@ -6,6 +6,7 @@ import com.bsth.data.car_out_info.UpdateDBThread;
6 6 import com.bsth.data.directive.DirectivesPstThread;
7 7 import com.bsth.data.gpsdata.thread.GpsDataLoaderThread;
8 8 import com.bsth.data.gpsdata.thread.OfflineMonitorThread;
  9 +import com.bsth.data.schedule.edit_logs.SeiPstThread;
9 10 import com.bsth.data.schedule.late_adjust.ScheduleLateThread;
10 11 import com.bsth.data.schedule.thread.CalcOilThread;
11 12 import com.bsth.data.schedule.thread.SchedulePstThread;
... ... @@ -53,6 +54,8 @@ public class XDApplication implements CommandLineRunner {
53 54 DirectivesPstThread directivesPstThread;
54 55 @Autowired
55 56 ThreadMonotor threadMonotor;
  57 + @Autowired
  58 + SeiPstThread seiPstThread;
56 59  
57 60 private static long timeDiff;
58 61  
... ... @@ -93,6 +96,8 @@ public class XDApplication implements CommandLineRunner {
93 96 //sexec.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS);
94 97 //实际排班延迟入库线程
95 98 //sexec.scheduleWithFixedDelay(schedulePstThread, 60, 15, TimeUnit.SECONDS);
  99 + //班次修正日志延迟入库
  100 + //sexec.scheduleWithFixedDelay(seiPstThread, 60, 30, TimeUnit.SECONDS);
96 101  
97 102 //线程监听(防止重要的线程阻塞、异常结束。以及部分主备切换工作)
98 103 //sexec.scheduleWithFixedDelay(threadMonotor, 240, 60, TimeUnit.SECONDS);
... ... @@ -107,10 +112,12 @@ public class XDApplication implements CommandLineRunner {
107 112 sexec.scheduleWithFixedDelay(gpsDataLoader, 30, 2, TimeUnit.SECONDS);
108 113 //GPS设备掉离线
109 114 sexec.scheduleWithFixedDelay(offlineMonitorThread, 120, 60, TimeUnit.SECONDS);
110   - //实际排班更新线程
  115 + //班次更新线程
111 116 sexec.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS);
112   - //实际排班延迟入库线程
113   - sexec.scheduleWithFixedDelay(schedulePstThread, 60, 15, TimeUnit.SECONDS);
  117 + //班次延迟入库线程
  118 + sexec.scheduleWithFixedDelay(schedulePstThread, 60, 10, TimeUnit.SECONDS);
  119 + //班次修正日志延迟入库
  120 + sexec.scheduleWithFixedDelay(seiPstThread, 60, 60, TimeUnit.SECONDS);
114 121 //检查班次误点
115 122 sexec.scheduleWithFixedDelay(scheduleLateThread, 60, 30, TimeUnit.SECONDS);
116 123 //调度指令延迟入库
... ...
src/main/java/com/bsth/controller/realcontrol/SchEditInfoController.java 0 → 100644
  1 +package com.bsth.controller.realcontrol;
  2 +
  3 +import com.bsth.controller.BaseController;
  4 +import com.bsth.data.schedule.edit_logs.entity.SchEditInfo;
  5 +import com.bsth.data.schedule.edit_logs.service.SchEditInfoService;
  6 +import org.springframework.beans.factory.annotation.Autowired;
  7 +import org.springframework.web.bind.annotation.RequestMapping;
  8 +import org.springframework.web.bind.annotation.RequestMethod;
  9 +import org.springframework.web.bind.annotation.RequestParam;
  10 +import org.springframework.web.bind.annotation.RestController;
  11 +
  12 +import java.util.Map;
  13 +
  14 +/**
  15 + * 班次修正记录
  16 + * Created by panzhao on 2017/5/22.
  17 + */
  18 +@RestController
  19 +@RequestMapping("schEditInfo")
  20 +public class SchEditInfoController extends BaseController<SchEditInfo, Long>{
  21 +
  22 + @Autowired
  23 + SchEditInfoService editInfoService;
  24 +
  25 + @RequestMapping(value = "/_list", method = RequestMethod.GET)
  26 + public Map<String, Object> _list(@RequestParam String rq, @RequestParam String lineCode,@RequestParam Map<String, String> map) {
  27 + return editInfoService._list(rq, lineCode, map);
  28 + }
  29 +}
... ...
src/main/java/com/bsth/controller/realcontrol/ScheduleRealInfoController.java
... ... @@ -433,10 +433,12 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo,
433 433 * @return
434 434 */
435 435 @RequestMapping("dateArray")
436   - public List<String> dateArray(){
  436 + public List<String> dateArray(@RequestParam(defaultValue = "0") int c){
437 437 List<String> rs = new ArrayList<>();
438 438  
439   - long t = new Date().getTime() - ONE_DAY - (1000 * 60 * 60 * 2);
  439 + long t = new Date().getTime();
  440 + if(c != 1)
  441 + t -= ONE_DAY - (1000 * 60 * 60 * 2);
440 442 for(int i = 0; i < 10; i ++){
441 443 rs.add(fmtyyyyMMdd.print(t));
442 444 t -= ONE_DAY;
... ...
src/main/java/com/bsth/controller/report/SheetController.java 0 → 100644
  1 +package com.bsth.controller.report;
  2 +
  3 +import java.util.List;
  4 +import java.util.Map;
  5 +
  6 +import org.springframework.beans.factory.annotation.Autowired;
  7 +import org.springframework.web.bind.annotation.RequestMapping;
  8 +import org.springframework.web.bind.annotation.RequestMethod;
  9 +import org.springframework.web.bind.annotation.RequestParam;
  10 +import org.springframework.web.bind.annotation.RestController;
  11 +
  12 +import com.bsth.controller.BaseController;
  13 +import com.bsth.entity.sheet.Sheet;
  14 +import com.bsth.service.report.SheetService;
  15 +
  16 +@RestController
  17 +@RequestMapping("sheet")
  18 +public class SheetController extends BaseController<Sheet, Integer>{
  19 + @Autowired
  20 + SheetService sheetService;
  21 + @RequestMapping(value = "/saveListSheet",method = RequestMethod.POST)
  22 + public String saveListSheet(){
  23 + String result="";
  24 + try {
  25 + result = sheetService.saveSheetList();
  26 + } catch (Exception e) {
  27 + // TODO Auto-generated catch block
  28 + e.printStackTrace();
  29 + }
  30 + return result;
  31 + }
  32 +
  33 +
  34 + @RequestMapping(value = "/sheetList",method = RequestMethod.GET)
  35 + public List<Sheet> sheetList(@RequestParam Integer id){
  36 + List<Sheet> list=sheetService.sheetList(id);
  37 + return list;
  38 + }
  39 + @RequestMapping(value = "/countList",method = RequestMethod.GET)
  40 + public List<Map<String, Object>> countList(@RequestParam Map<String, Object> map){
  41 + List<Map<String, Object>> list=sheetService.countList(map);
  42 + return list;
  43 + }
  44 +}
... ...
src/main/java/com/bsth/data/safe_driv/SafeDrivCenter.java
1 1 package com.bsth.data.safe_driv;
2 2  
3   -import com.bsth.Application;
4 3 import com.bsth.websocket.handler.SendUtils;
5 4 import org.joda.time.format.DateTimeFormat;
6 5 import org.joda.time.format.DateTimeFormatter;
... ... @@ -15,7 +14,6 @@ import java.util.HashMap;
15 14 import java.util.HashSet;
16 15 import java.util.Map;
17 16 import java.util.Set;
18   -import java.util.concurrent.TimeUnit;
19 17  
20 18 /**
21 19 * 安全驾驶
... ... @@ -69,7 +67,7 @@ public class SafeDrivCenter implements CommandLineRunner,ApplicationContextAware
69 67 @Override
70 68 public void run(String... strings) throws Exception {
71 69 //定时加载安全驾驶数据
72   - Application.mainServices.scheduleWithFixedDelay(safeDrivDataLoadThread, 60, 7, TimeUnit.SECONDS);
  70 + //Application.mainServices.scheduleWithFixedDelay(safeDrivDataLoadThread, 80, 7, TimeUnit.SECONDS);
73 71 }
74 72  
75 73 @Override
... ...
src/main/java/com/bsth/data/schedule/edit_logs/FormLogger.java
1   -package com.bsth.data.schedule.edit_logs;
2   -
3   -import com.bsth.controller.realcontrol.dto.ChangePersonCar;
4   -import com.bsth.entity.mcy_forms.Changetochange;
5   -import com.bsth.entity.realcontrol.ScheduleRealInfo;
6   -import com.bsth.entity.sys.SysUser;
7   -import com.bsth.repository.form.ChangetochangeRepository;
8   -import com.bsth.security.util.SecurityUtils;
9   -import org.apache.commons.lang3.StringUtils;
10   -import org.joda.time.format.DateTimeFormat;
11   -import org.joda.time.format.DateTimeFormatter;
12   -import org.slf4j.Logger;
13   -import org.slf4j.LoggerFactory;
14   -import org.springframework.beans.factory.annotation.Autowired;
15   -import org.springframework.stereotype.Service;
16   -
17   -import java.util.Date;
18   -
19   -/**
20   - * 为报表写入相关的班次修改记录
21   - * Created by panzhao on 2017/5/7.
22   - */
23   -@Service
24   -public class FormLogger {
25   -
26   - private static DateTimeFormatter fmtHHmm = DateTimeFormat.forPattern("HH:mm");
27   -
28   - Logger log = LoggerFactory.getLogger(this.getClass());
29   -
30   - @Autowired
31   - ChangetochangeRepository changetochangeRepository;
32   -
33   - /**
34   - * 换人换车情况表
35   - */
36   - public void saveChangetochange(ScheduleRealInfo sch, ChangePersonCar cpc){
37   - try {
38   - String newNbbm = cpc.getClZbh();
39   - String newJsy = cpc.getJsy();
40   - String oldJsy = sch.getjGh()+"/"+sch.getjName();
41   -
42   - if(newNbbm == null && newJsy == null)
43   - return;
44   -
45   - if(newNbbm != null && newJsy != null
46   - && newNbbm.equals(sch.getClZbh()) && newJsy.equals(oldJsy))
47   - return;
48   -
49   - Date d = new Date();
50   - SysUser user = SecurityUtils.getCurrentUser();
51   - Changetochange cc = new Changetochange();
52   - cc.setRq(sch.getScheduleDateStr());
53   - cc.setGs(sch.getGsBm());
54   - cc.setFgs(sch.getFgsBm());
55   - cc.setXl(sch.getXlBm());
56   - cc.setLp(sch.getLpName());
57   - cc.setFssj(fmtHHmm.print(d.getTime()));
58   - cc.setXgsj(fmtHHmm.print(d.getTime()));
59   - if(user != null)
60   - cc.setXgr(user.getUserName());
61   -
62   - cc.setPcch(sch.getClZbh());
63   - cc.setPcry(oldJsy);
64   - cc.setJhch(sch.getClZbh());
65   - cc.setJhgh(sch.getjGh());
66   -
67   - if(StringUtils.isNotEmpty(newNbbm))
68   - cc.setSjch(newNbbm);
69   - if(StringUtils.isNotEmpty(newJsy))
70   - cc.setSjgh(newJsy);
71   -
72   - changetochangeRepository.save(cc);
73   - }catch (Exception e){
74   - log.error("纪录换人换车情况表", e);
75   - }
76   - }
77   -
78   - public void saveChangetochange(ScheduleRealInfo sch, String nbbm, String jsy){
79   - ChangePersonCar cpc = new ChangePersonCar();
80   - cpc.setClZbh(nbbm);
81   - cpc.setJsy(jsy);
82   - saveChangetochange(sch, cpc);
83   - }
84   -}
  1 +package com.bsth.data.schedule.edit_logs;
  2 +
  3 +import com.bsth.controller.realcontrol.dto.ChangePersonCar;
  4 +import com.bsth.entity.mcy_forms.Changetochange;
  5 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  6 +import com.bsth.entity.sys.SysUser;
  7 +import com.bsth.repository.form.ChangetochangeRepository;
  8 +import com.bsth.security.util.SecurityUtils;
  9 +import org.apache.commons.lang3.StringUtils;
  10 +import org.joda.time.format.DateTimeFormat;
  11 +import org.joda.time.format.DateTimeFormatter;
  12 +import org.slf4j.Logger;
  13 +import org.slf4j.LoggerFactory;
  14 +import org.springframework.beans.factory.annotation.Autowired;
  15 +import org.springframework.stereotype.Service;
  16 +
  17 +import java.util.Date;
  18 +
  19 +/**
  20 + * 为报表写入相关的班次修改记录
  21 + * Created by panzhao on 2017/5/7.
  22 + */
  23 +@Service
  24 +public class FormLogger {
  25 +
  26 + private static DateTimeFormatter fmtHHmm = DateTimeFormat.forPattern("HH:mm");
  27 +
  28 + Logger log = LoggerFactory.getLogger(this.getClass());
  29 +
  30 + @Autowired
  31 + ChangetochangeRepository changetochangeRepository;
  32 +
  33 + /**
  34 + * 换人换车情况表
  35 + */
  36 + public void saveChangetochange(ScheduleRealInfo sch, ChangePersonCar cpc){
  37 + try {
  38 + String newNbbm = cpc.getClZbh();
  39 + String newJsy = cpc.getJsy();
  40 + String oldJsy = sch.getjGh()+"/"+sch.getjName();
  41 +
  42 + if(newNbbm == null && newJsy == null)
  43 + return;
  44 +
  45 + if(newNbbm != null && newJsy != null
  46 + && newNbbm.equals(sch.getClZbh()) && newJsy.equals(oldJsy))
  47 + return;
  48 +
  49 + Date d = new Date();
  50 + SysUser user = SecurityUtils.getCurrentUser();
  51 + Changetochange cc = new Changetochange();
  52 + cc.setRq(sch.getScheduleDateStr());
  53 + cc.setGs(sch.getGsBm());
  54 + cc.setFgs(sch.getFgsBm());
  55 + cc.setXl(sch.getXlBm());
  56 + cc.setLp(sch.getLpName());
  57 + cc.setFssj(fmtHHmm.print(d.getTime()));
  58 + cc.setXgsj(fmtHHmm.print(d.getTime()));
  59 + if(user != null)
  60 + cc.setXgr(user.getUserName());
  61 +
  62 + cc.setPcch(sch.getClZbh());
  63 + cc.setPcry(oldJsy);
  64 + cc.setJhch(sch.getClZbh());
  65 + cc.setJhgh(sch.getjGh());
  66 +
  67 + if(StringUtils.isNotEmpty(newNbbm))
  68 + cc.setSjch(newNbbm);
  69 + if(StringUtils.isNotEmpty(newJsy))
  70 + cc.setSjgh(newJsy);
  71 +
  72 + changetochangeRepository.save(cc);
  73 + }catch (Exception e){
  74 + log.error("纪录换人换车情况表", e);
  75 + }
  76 + }
  77 +
  78 + public void saveChangetochange(ScheduleRealInfo sch, String nbbm, String jsy){
  79 + ChangePersonCar cpc = new ChangePersonCar();
  80 + cpc.setClZbh(nbbm);
  81 + cpc.setJsy(jsy);
  82 + saveChangetochange(sch, cpc);
  83 + }
  84 +}
... ...
src/main/java/com/bsth/data/schedule/edit_logs/ScheduleModifyLogger.java
1   -package com.bsth.data.schedule.edit_logs;
2   -
3   -/**
4   - * 班次修正记录
5   - * Created by panzhao on 2017/5/16.
6   - */
7   -public class ScheduleModifyLogger {
8   -
9   - /**
10   - * 待发调整
11   - */
12   - public static void dftz(Long id, String remarks, String dfsj, String bcType, String opType){
13   -
14   - }
15   -}
16 1 \ No newline at end of file
  2 +package com.bsth.data.schedule.edit_logs;
  3 +
  4 +import com.alibaba.fastjson.JSONArray;
  5 +import com.alibaba.fastjson.JSONObject;
  6 +import com.bsth.controller.realcontrol.dto.ChangePersonCar;
  7 +import com.bsth.data.schedule.edit_logs.entity.EditType;
  8 +import com.bsth.data.schedule.edit_logs.entity.SchEditInfo;
  9 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  10 +import org.apache.commons.lang3.StringUtils;
  11 +import org.slf4j.Logger;
  12 +import org.slf4j.LoggerFactory;
  13 +
  14 +import java.util.LinkedList;
  15 +
  16 +/**
  17 + * 班次修正记录
  18 + * Created by panzhao on 2017/5/16.
  19 + */
  20 +public class ScheduleModifyLogger {
  21 +
  22 + public static LinkedList<SchEditInfo> list;
  23 +
  24 + static {
  25 + list = new LinkedList<>();
  26 + }
  27 +
  28 + static Logger log = LoggerFactory.getLogger(ScheduleModifyLogger.class);
  29 +
  30 + /**
  31 + * 待发调整
  32 + * opType 0: 双击调整、 1:待发调整、2:批量待发调整、3:间隔调整
  33 + */
  34 + public static void dftz(ScheduleRealInfo sch, String opType, String oldDfsj, String nowDfsj, String remarks) {
  35 + try {
  36 + if (oldDfsj.equals(nowDfsj))
  37 + return;
  38 +
  39 + SchEditInfo sei = SchEditInfo.getInstance(sch);
  40 + sei.setType(EditType.DFTZ);
  41 + sei.setType2(opType);
  42 + sei.setRemarks(remarks == null ? "" : remarks);
  43 +
  44 + //detail
  45 + JSONObject jobj = new JSONObject();
  46 + jobj.put("old", oldDfsj);
  47 + jobj.put("now", nowDfsj);
  48 +
  49 + sei.setJsonArray(jobj.toJSONString());
  50 +
  51 + put(sei);
  52 + } catch (Exception e) {
  53 + log.error("", e);
  54 + }
  55 + }
  56 +
  57 + /**
  58 + * 发车信息微调记录器
  59 + */
  60 + public static void fcxxwt(ScheduleRealInfo sch, String remarks, JSONArray jsonArray) {
  61 +
  62 + try {
  63 + if (jsonArray == null || jsonArray.size() == 0)
  64 + return;
  65 +
  66 + SchEditInfo sei = SchEditInfo.getInstance(sch);
  67 + sei.setRemarks(remarks);
  68 + sei.setJsonArray(jsonArray.toJSONString());
  69 + sei.setType(EditType.FCXXWT);
  70 +
  71 + put(sei);
  72 + } catch (Exception e) {
  73 + log.error("", e);
  74 + }
  75 + }
  76 +
  77 + /**
  78 + * 计划烂班
  79 + *
  80 + * @param remarks
  81 + */
  82 + public static void jhlb(ScheduleRealInfo sch, String remarks) {
  83 + try {
  84 + SchEditInfo sei = SchEditInfo.getInstance(sch);
  85 + sei.setRemarks(remarks);
  86 + sei.setType(EditType.JHLB);
  87 +
  88 + put(sei);
  89 + } catch (Exception e) {
  90 + log.error("", e);
  91 + }
  92 + }
  93 +
  94 + /**
  95 + * 实发调整
  96 + *
  97 + * @param sch
  98 + * @param nowSfsj
  99 + * @param remarks
  100 + */
  101 + public static void sftz(ScheduleRealInfo sch, String nowSfsj, String remarks) {
  102 + try {
  103 + SchEditInfo sei = SchEditInfo.getInstance(sch);
  104 + sei.setRemarks(remarks);
  105 + sei.setType(EditType.SFTZ);
  106 + //detail
  107 + JSONObject jobj = new JSONObject();
  108 + jobj.put("old", sch.getFcsjActual());
  109 + jobj.put("now", nowSfsj);
  110 +
  111 + sei.setJsonArray(jobj.toJSONString());
  112 + put(sei);
  113 + } catch (Exception e) {
  114 + log.error("", e);
  115 + }
  116 + }
  117 +
  118 + /**
  119 + * 撤销烂班
  120 + *
  121 + * @param sch
  122 + */
  123 + public static void cxlb(ScheduleRealInfo sch) {
  124 + try {
  125 + SchEditInfo sei = SchEditInfo.getInstance(sch);
  126 + sei.setType(EditType.CXLB);
  127 +
  128 + put(sei);
  129 + } catch (Exception e) {
  130 + log.error("", e);
  131 + }
  132 + }
  133 +
  134 + /**
  135 + * 撤销执行
  136 + *
  137 + * @param sch
  138 + */
  139 + public static void cxzx(ScheduleRealInfo sch) {
  140 + try {
  141 + SchEditInfo sei = SchEditInfo.getInstance(sch);
  142 + sei.setType(EditType.CXZX);
  143 +
  144 + //detail
  145 + JSONObject obj = new JSONObject();
  146 + if (StringUtils.isNotEmpty(sch.getFcsjActual()))
  147 + obj.put("old_sfsj", sch.getFcsjActual());
  148 +
  149 + if (StringUtils.isNotEmpty(sch.getZdsjActual()))
  150 + obj.put("old_sdsj", sch.getZdsjActual());
  151 +
  152 + sei.setJsonArray(obj.toJSONString());
  153 + put(sei);
  154 + } catch (Exception e) {
  155 + log.error("", e);
  156 + }
  157 + }
  158 +
  159 + /**
  160 + * 撤销实发
  161 + *
  162 + * @param sch
  163 + */
  164 + public static void cxsf(ScheduleRealInfo sch) {
  165 + try {
  166 + SchEditInfo sei = SchEditInfo.getInstance(sch);
  167 + sei.setType(EditType.CXSF);
  168 +
  169 + //detail
  170 + JSONObject obj = new JSONObject();
  171 + obj.put("old_sfsj", sch.getFcsjActual());
  172 +
  173 + sei.setJsonArray(obj.toJSONString());
  174 + put(sei);
  175 + } catch (Exception e) {
  176 + log.error("", e);
  177 + }
  178 + }
  179 +
  180 + /**
  181 + * 调整人车
  182 + *
  183 + * @param sch
  184 + * @param cpc
  185 + */
  186 + public static void tzrc(ScheduleRealInfo sch, ChangePersonCar cpc) {
  187 + try {
  188 + String newNbbm = cpc.getClZbh();
  189 + String newJsy = cpc.getJsy();
  190 + String newSpy = cpc.getSpy();
  191 + //String oldJsy = sch.getjGh() + "/" + sch.getjName();
  192 +
  193 + if (newNbbm == null && newJsy == null && newSpy==null)
  194 + return;
  195 + /*if (newNbbm != null && newJsy != null
  196 + && newNbbm.equals(sch.getClZbh()) && newJsy.equals(oldJsy))
  197 + return;*/
  198 +
  199 +
  200 + SchEditInfo sei = SchEditInfo.getInstance(sch);
  201 + sei.setType(EditType.TZRC);
  202 +
  203 + //detail
  204 + JSONObject jobj = new JSONObject();
  205 + if (StringUtils.isNotEmpty(newNbbm) && !newNbbm.equals(sch.getClZbh())) {
  206 + jobj.put("old_nbbm", sch.getClZbh());
  207 + jobj.put("now_nbbm", newNbbm);
  208 + }
  209 +
  210 + String oldJsy = sch.getjGh() + "/" + sch.getjName();
  211 + if (StringUtils.isNotEmpty(newJsy) && !newJsy.equals(oldJsy)) {
  212 + jobj.put("old_jsy", oldJsy);
  213 + jobj.put("now_jsy", newJsy);
  214 + }
  215 +
  216 + String oldSpy = sch.getsGh() + "/" + sch.getsName();
  217 + if (StringUtils.isNotEmpty(newSpy) && !newSpy.equals(oldSpy)) {
  218 + jobj.put("old_spy", oldSpy);
  219 + jobj.put("now_spy", cpc.getSpy());
  220 + }
  221 +
  222 + sei.setJsonArray(jobj.toJSONString());
  223 + put(sei);
  224 + } catch (Exception e) {
  225 + log.error("", e);
  226 + }
  227 + }
  228 +
  229 + public static void put(SchEditInfo sei) {
  230 + list.add(sei);
  231 + }
  232 +}
... ...
src/main/java/com/bsth/data/schedule/edit_logs/SeiPstThread.java 0 → 100644
  1 +package com.bsth.data.schedule.edit_logs;
  2 +
  3 +import com.bsth.data.schedule.edit_logs.entity.SchEditInfo;
  4 +import com.bsth.data.schedule.edit_logs.repository.EditInfoRepository;
  5 +import org.slf4j.Logger;
  6 +import org.slf4j.LoggerFactory;
  7 +import org.springframework.beans.factory.annotation.Autowired;
  8 +import org.springframework.stereotype.Component;
  9 +
  10 +import java.util.ArrayList;
  11 +import java.util.LinkedList;
  12 +import java.util.List;
  13 +
  14 +/**
  15 + * 班次修正日志入库
  16 + * Created by panzhao on 2017/5/19.
  17 + */
  18 +@Component
  19 +public class SeiPstThread extends Thread{
  20 +
  21 + @Autowired
  22 + EditInfoRepository repository;
  23 +
  24 + Logger log = LoggerFactory.getLogger(this.getClass());
  25 +
  26 + @Override
  27 + public void run() {
  28 + try{
  29 + List<SchEditInfo> pstList = new ArrayList<>();
  30 + LinkedList<SchEditInfo> list = ScheduleModifyLogger.list;
  31 + SchEditInfo sei;
  32 + for(int i = 0; i < 1000; i ++){
  33 + sei = list.poll();
  34 + if(sei == null)
  35 + break;
  36 + else{
  37 + //repository.save(sei);
  38 + pstList.add(sei);
  39 + }
  40 + }
  41 +
  42 + repository.save(pstList);
  43 + }catch (Exception e){
  44 + log.error("", e);
  45 + }
  46 + }
  47 +}
0 48 \ No newline at end of file
... ...
src/main/java/com/bsth/data/schedule/edit_logs/entity/EditType.java 0 → 100644
  1 +package com.bsth.data.schedule.edit_logs.entity;
  2 +
  3 +/**
  4 + * Created by panzhao on 2017/5/18.
  5 + */
  6 +public enum EditType {
  7 +
  8 + DFTZ,SFTZ,FCXXWT,TZRC,LPDD,ZRW,JHLB,CXLB, CXSF, CXZX
  9 +}
0 10 \ No newline at end of file
... ...
src/main/java/com/bsth/data/schedule/edit_logs/entity/SchEditInfo.java 0 → 100644
  1 +package com.bsth.data.schedule.edit_logs.entity;
  2 +
  3 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  4 +import com.bsth.entity.sys.SysUser;
  5 +import com.bsth.security.util.SecurityUtils;
  6 +import org.joda.time.format.DateTimeFormat;
  7 +import org.joda.time.format.DateTimeFormatter;
  8 +
  9 +import javax.persistence.*;
  10 +
  11 +/**
  12 + * Created by panzhao on 2017/5/18.
  13 + */
  14 +@Entity
  15 +@Table(name = "logger_sch_modify")
  16 +public class SchEditInfo {
  17 +
  18 + @Id
  19 + @GeneratedValue
  20 + private long id;
  21 + /**
  22 + * 日期 yyyy-MM-dd
  23 + */
  24 + private String rq;
  25 +
  26 + /**
  27 + * 时间 HH:mm
  28 + */
  29 + private String timeStr;
  30 +
  31 + /** 时间戳 */
  32 + private long ts;
  33 +
  34 + private String lineCode;
  35 +
  36 + private String gsbm;
  37 +
  38 + private String fgsbm;
  39 +
  40 + /**
  41 + * 班次ID
  42 + */
  43 + private long schId;
  44 +
  45 + /**
  46 + * 类型
  47 + */
  48 + @Enumerated(EnumType.STRING)
  49 + private EditType type;
  50 +
  51 + private String type2;
  52 + /**
  53 + * 操作人 @system 系统/用户名
  54 + */
  55 + private String user;
  56 +
  57 + /**
  58 + * 操作明细
  59 + */
  60 + @Column(length = 2000)
  61 + private String jsonArray;
  62 +
  63 + private String remarks;
  64 +
  65 + public String getRq() {
  66 + return rq;
  67 + }
  68 +
  69 + public void setRq(String rq) {
  70 + this.rq = rq;
  71 + }
  72 +
  73 + public String getTimeStr() {
  74 + return timeStr;
  75 + }
  76 +
  77 + public void setTimeStr(String timeStr) {
  78 + this.timeStr = timeStr;
  79 + }
  80 +
  81 + public long getSchId() {
  82 + return schId;
  83 + }
  84 +
  85 + public void setSchId(long schId) {
  86 + this.schId = schId;
  87 + }
  88 +
  89 + public EditType getType() {
  90 + return type;
  91 + }
  92 +
  93 + public void setType(EditType type) {
  94 + this.type = type;
  95 + }
  96 +
  97 + public String getUser() {
  98 + return user;
  99 + }
  100 +
  101 + public void setUser(String user) {
  102 + this.user = user;
  103 + }
  104 +
  105 + public long getId() {
  106 + return id;
  107 + }
  108 +
  109 + public void setId(long id) {
  110 + this.id = id;
  111 + }
  112 +
  113 + public String getJsonArray() {
  114 + return jsonArray;
  115 + }
  116 +
  117 + public void setJsonArray(String jsonArray) {
  118 + this.jsonArray = jsonArray;
  119 + }
  120 +
  121 + public String getType2() {
  122 + return type2;
  123 + }
  124 +
  125 + public void setType2(String type2) {
  126 + this.type2 = type2;
  127 + }
  128 +
  129 + public String getRemarks() {
  130 + return remarks;
  131 + }
  132 +
  133 + public void setRemarks(String remarks) {
  134 + this.remarks = remarks;
  135 + }
  136 +
  137 +
  138 + @Transient
  139 + private static DateTimeFormatter fmtHHmm = DateTimeFormat.forPattern("HH:mm");
  140 + /* @Transient
  141 + private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd");*/
  142 + public static SchEditInfo getInstance(ScheduleRealInfo sch){
  143 + SchEditInfo sei = new SchEditInfo();
  144 + long t = System.currentTimeMillis();
  145 +
  146 + sei.setTs(t);
  147 + sei.setTimeStr(fmtHHmm.print(t));
  148 +
  149 + SysUser user = SecurityUtils.getCurrentUser();
  150 + if(user != null)
  151 + sei.setUser(user.getUserName());
  152 +
  153 + if(sch != null){
  154 + sei.setRq(sch.getScheduleDateStr());
  155 + sei.setSchId(sch.getId());
  156 + sei.setLineCode(sch.getXlBm());
  157 + sei.setGsbm(sch.getGsBm());
  158 + sei.setFgsbm(sch.getFgsBm());
  159 + }
  160 + return sei;
  161 + }
  162 +
  163 + public String getLineCode() {
  164 + return lineCode;
  165 + }
  166 +
  167 + public void setLineCode(String lineCode) {
  168 + this.lineCode = lineCode;
  169 + }
  170 +
  171 + public String getGsbm() {
  172 + return gsbm;
  173 + }
  174 +
  175 + public void setGsbm(String gsbm) {
  176 + this.gsbm = gsbm;
  177 + }
  178 +
  179 + public String getFgsbm() {
  180 + return fgsbm;
  181 + }
  182 +
  183 + public void setFgsbm(String fgsbm) {
  184 + this.fgsbm = fgsbm;
  185 + }
  186 +
  187 + public long getTs() {
  188 + return ts;
  189 + }
  190 +
  191 + public void setTs(long ts) {
  192 + this.ts = ts;
  193 + }
  194 +}
0 195 \ No newline at end of file
... ...
src/main/java/com/bsth/data/schedule/edit_logs/loggers/FcxxwtLogger.java 0 → 100644
  1 +package com.bsth.data.schedule.edit_logs.loggers;
  2 +
  3 +import com.alibaba.fastjson.JSONArray;
  4 +import com.alibaba.fastjson.JSONObject;
  5 +import com.bsth.data.schedule.edit_logs.ScheduleModifyLogger;
  6 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  7 +import org.slf4j.Logger;
  8 +import org.slf4j.LoggerFactory;
  9 +
  10 +/**
  11 + * 发车信息微调记录
  12 + * Created by panzhao on 2017/5/19.
  13 + */
  14 +public class FcxxwtLogger {
  15 +
  16 + static Logger log = LoggerFactory.getLogger(FcxxwtLogger.class);
  17 +
  18 + private JSONArray jsonArray = new JSONArray();
  19 + private String remarks;
  20 + private ScheduleRealInfo sch;
  21 +
  22 + public void log(String title, Object old, Object now){
  23 + try {
  24 +
  25 + JSONObject jsonObject = new JSONObject();
  26 + jsonObject.put("title", title);
  27 + jsonObject.put("old", old);
  28 + jsonObject.put("now", now);
  29 +
  30 + jsonArray.add(jsonObject);
  31 + }catch (Exception e){
  32 + log.error("", e);
  33 + }
  34 + }
  35 +
  36 + public void log(String text){
  37 + try {
  38 + JSONObject jsonObject = new JSONObject();
  39 + jsonObject.put("title", text);
  40 +
  41 + jsonArray.add(jsonObject);
  42 + }catch (Exception e){
  43 + log.error("", e);
  44 + }
  45 + }
  46 +
  47 + public static FcxxwtLogger start(ScheduleRealInfo sch, String remarks){
  48 + FcxxwtLogger fLog = new FcxxwtLogger();
  49 + fLog.setSch(sch);
  50 + fLog.setRemarks(remarks);
  51 + return fLog;
  52 + }
  53 +
  54 + public void end(){
  55 + ScheduleModifyLogger.fcxxwt(sch, this.remarks, jsonArray);
  56 + }
  57 +
  58 + public String getRemarks() {
  59 + return remarks;
  60 + }
  61 +
  62 + public void setRemarks(String remarks) {
  63 + this.remarks = remarks;
  64 + }
  65 +
  66 + public ScheduleRealInfo getSch() {
  67 + return sch;
  68 + }
  69 +
  70 + public void setSch(ScheduleRealInfo sch) {
  71 + this.sch = sch;
  72 + }
  73 +}
... ...
src/main/java/com/bsth/data/schedule/edit_logs/repository/EditInfoRepository.java 0 → 100644
  1 +package com.bsth.data.schedule.edit_logs.repository;
  2 +
  3 +import com.bsth.data.schedule.edit_logs.entity.SchEditInfo;
  4 +import com.bsth.repository.BaseRepository;
  5 +import org.springframework.stereotype.Repository;
  6 +
  7 +/**
  8 + * Created by panzhao on 2017/5/19.
  9 + */
  10 +@Repository
  11 +public interface EditInfoRepository extends BaseRepository<SchEditInfo, Long>{
  12 +}
... ...
src/main/java/com/bsth/data/schedule/edit_logs/service/SchEditInfoService.java 0 → 100644
  1 +package com.bsth.data.schedule.edit_logs.service;
  2 +
  3 +import com.bsth.data.schedule.edit_logs.entity.SchEditInfo;
  4 +import com.bsth.service.BaseService;
  5 +
  6 +import java.util.Map;
  7 +
  8 +/**
  9 + * Created by panzhao on 2017/5/22.
  10 + */
  11 +public interface SchEditInfoService extends BaseService<SchEditInfo, Long> {
  12 +
  13 + Map<String, Object> _list(String rq, String lineCode, Map<String, String> map);
  14 +}
... ...
src/main/java/com/bsth/data/schedule/edit_logs/service/SchEditInfoServiceImpl.java 0 → 100644
  1 +package com.bsth.data.schedule.edit_logs.service;
  2 +
  3 +import com.bsth.common.ResponseCode;
  4 +import com.bsth.data.schedule.edit_logs.entity.SchEditInfo;
  5 +import com.bsth.data.schedule.edit_logs.service.dto.SchEditInfoDto;
  6 +import com.bsth.service.impl.BaseServiceImpl;
  7 +import com.bsth.util.BatchSaveUtils;
  8 +import org.apache.commons.lang3.StringUtils;
  9 +import org.slf4j.Logger;
  10 +import org.slf4j.LoggerFactory;
  11 +import org.springframework.beans.factory.annotation.Autowired;
  12 +import org.springframework.jdbc.core.BeanPropertyRowMapper;
  13 +import org.springframework.jdbc.core.JdbcTemplate;
  14 +import org.springframework.stereotype.Service;
  15 +
  16 +import java.util.HashMap;
  17 +import java.util.List;
  18 +import java.util.Map;
  19 +import java.util.Set;
  20 +
  21 +/**
  22 + * Created by panzhao on 2017/5/22.
  23 + */
  24 +@Service
  25 +public class SchEditInfoServiceImpl extends BaseServiceImpl<SchEditInfo, Long> implements SchEditInfoService{
  26 +
  27 + Logger log = LoggerFactory.getLogger(this.getClass());
  28 +
  29 + @Autowired
  30 + JdbcTemplate jdbcTemplate;
  31 +
  32 + public Map<String, Object> _list(String rq, String lineCode, Map<String, String> map) {
  33 +
  34 + Map<String, Object> rs = new HashMap();
  35 + try {
  36 + //拼接除rq、lineCode 外的其他where 条件
  37 + map.remove("rq");
  38 + map.remove("lineCode");
  39 + String cont = "", v;
  40 + Set<String> ks = map.keySet();
  41 + for(String k : ks){
  42 + v =map.get(k);
  43 + if(StringUtils.isNotEmpty(v))
  44 + cont += " and t2." + BatchSaveUtils.propertyToField(k) + "='" + v + "'";
  45 + }
  46 + String sql = "select t1.*, t2.fcsj,t2.lp_name,t2.cl_zbh,t2.j_gh,t2.j_name,t2.xl_dir,t2.real_exec_date from (select * from logger_sch_modify where rq=? and line_code=? ) t1 INNER JOIN bsth_c_s_sp_info_real t2 on t1.sch_id=t2.id where 1=1 " + cont;
  47 +
  48 + List<SchEditInfoDto> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper(SchEditInfoDto.class), rq, lineCode);
  49 +
  50 + rs.put("status", ResponseCode.SUCCESS);
  51 + rs.put("list", list);
  52 + }catch (Exception e){
  53 + log.error("", e);
  54 + rs.put("status", ResponseCode.ERROR);
  55 + rs.put("msg", e.getMessage());
  56 + }
  57 + return rs;
  58 + }
  59 +}
... ...
src/main/java/com/bsth/data/schedule/edit_logs/service/dto/SchEditInfoDto.java 0 → 100644
  1 +package com.bsth.data.schedule.edit_logs.service.dto;
  2 +
  3 +/**
  4 + * Created by panzhao on 2017/5/22.
  5 + */
  6 +public class SchEditInfoDto {
  7 +
  8 + private long id;
  9 + /*** 日期 yyyy-MM-dd*/
  10 + private String rq;
  11 +
  12 + /*** 时间 HH:mm*/
  13 + private String timeStr;
  14 +
  15 + private String lineCode;
  16 +
  17 + private String gsbm;
  18 +
  19 + private String fgsbm;
  20 +
  21 + /*** 班次ID*/
  22 + private long schId;
  23 +
  24 + /*** 类型*/
  25 + private String type;
  26 +
  27 + private String type2;
  28 + /*** 操作人 @system 系统/用户名*/
  29 + private String user;
  30 +
  31 + /*** 操作明细*/
  32 + private String jsonArray;
  33 +
  34 + private String remarks;
  35 +
  36 + /** 路牌 */
  37 + private String lpName;
  38 +
  39 + /** 驾驶员工号 */
  40 + private String jGh;
  41 +
  42 + /** 驾驶员姓名 */
  43 + private String jName;
  44 +
  45 + /** 车辆自编号 */
  46 + private String clZbh;
  47 +
  48 + /** 计发时间 */
  49 + private String fcsj;
  50 +
  51 + /** 上下行 */
  52 + private int xlDir;
  53 +
  54 + /** 实际执行日期 */
  55 + private String realExecDate;
  56 +
  57 + public long getId() {
  58 + return id;
  59 + }
  60 +
  61 + public void setId(long id) {
  62 + this.id = id;
  63 + }
  64 +
  65 + public String getRq() {
  66 + return rq;
  67 + }
  68 +
  69 + public void setRq(String rq) {
  70 + this.rq = rq;
  71 + }
  72 +
  73 + public String getTimeStr() {
  74 + return timeStr;
  75 + }
  76 +
  77 + public void setTimeStr(String timeStr) {
  78 + this.timeStr = timeStr;
  79 + }
  80 +
  81 + public String getLineCode() {
  82 + return lineCode;
  83 + }
  84 +
  85 + public void setLineCode(String lineCode) {
  86 + this.lineCode = lineCode;
  87 + }
  88 +
  89 + public String getGsbm() {
  90 + return gsbm;
  91 + }
  92 +
  93 + public void setGsbm(String gsbm) {
  94 + this.gsbm = gsbm;
  95 + }
  96 +
  97 + public String getFgsbm() {
  98 + return fgsbm;
  99 + }
  100 +
  101 + public void setFgsbm(String fgsbm) {
  102 + this.fgsbm = fgsbm;
  103 + }
  104 +
  105 + public long getSchId() {
  106 + return schId;
  107 + }
  108 +
  109 + public void setSchId(long schId) {
  110 + this.schId = schId;
  111 + }
  112 +
  113 + public String getType2() {
  114 + return type2;
  115 + }
  116 +
  117 + public void setType2(String type2) {
  118 + this.type2 = type2;
  119 + }
  120 +
  121 + public String getUser() {
  122 + return user;
  123 + }
  124 +
  125 + public void setUser(String user) {
  126 + this.user = user;
  127 + }
  128 +
  129 + public String getJsonArray() {
  130 + return jsonArray;
  131 + }
  132 +
  133 + public void setJsonArray(String jsonArray) {
  134 + this.jsonArray = jsonArray;
  135 + }
  136 +
  137 + public String getRemarks() {
  138 + return remarks;
  139 + }
  140 +
  141 + public void setRemarks(String remarks) {
  142 + this.remarks = remarks;
  143 + }
  144 +
  145 + public String getLpName() {
  146 + return lpName;
  147 + }
  148 +
  149 + public void setLpName(String lpName) {
  150 + this.lpName = lpName;
  151 + }
  152 +
  153 + public String getjGh() {
  154 + return jGh;
  155 + }
  156 +
  157 + public void setjGh(String jGh) {
  158 + this.jGh = jGh;
  159 + }
  160 +
  161 + public String getjName() {
  162 + return jName;
  163 + }
  164 +
  165 + public void setjName(String jName) {
  166 + this.jName = jName;
  167 + }
  168 +
  169 +
  170 + public String getRealExecDate() {
  171 + return realExecDate;
  172 + }
  173 +
  174 + public void setRealExecDate(String realExecDate) {
  175 + this.realExecDate = realExecDate;
  176 + }
  177 +
  178 + public String getType() {
  179 + return type;
  180 + }
  181 +
  182 + public void setType(String type) {
  183 + this.type = type;
  184 + }
  185 +
  186 + public String getClZbh() {
  187 + return clZbh;
  188 + }
  189 +
  190 + public void setClZbh(String clZbh) {
  191 + this.clZbh = clZbh;
  192 + }
  193 +
  194 + public String getFcsj() {
  195 + return fcsj;
  196 + }
  197 +
  198 + public void setFcsj(String fcsj) {
  199 + this.fcsj = fcsj;
  200 + }
  201 +
  202 + public int getXlDir() {
  203 + return xlDir;
  204 + }
  205 +
  206 + public void setXlDir(int xlDir) {
  207 + this.xlDir = xlDir;
  208 + }
  209 +}
... ...
src/main/java/com/bsth/data/schedule/thread/CalcOilThread.java
... ... @@ -3,6 +3,8 @@ package com.bsth.data.schedule.thread;
3 3 import com.bsth.service.oil.DlbService;
4 4 import com.bsth.data.safe_driv.SafeDrivCenter;
5 5 import com.bsth.service.oil.YlbService;
  6 +import com.bsth.service.report.SheetService;
  7 +
6 8 import org.slf4j.Logger;
7 9 import org.slf4j.LoggerFactory;
8 10 import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -19,6 +21,9 @@ public class CalcOilThread extends Thread{
19 21 YlbService ylbService;
20 22 @Autowired
21 23 DlbService dlbService;
  24 +
  25 + @Autowired
  26 + SheetService sheetService;
22 27 Logger logger = LoggerFactory.getLogger(this.getClass());
23 28  
24 29 @Override
... ... @@ -28,7 +33,9 @@ public class CalcOilThread extends Thread{
28 33 ylbService.obtainDsq();
29 34 dlbService.obtainDsq();
30 35 logger.info("计算路单里程加注量结束!");
31   -
  36 + logger.info("开始计算班次准点率....");
  37 + sheetService.saveSheetList();
  38 + logger.info("计算班次准点率结束!");
32 39 //清除安全驾驶数据 先临时蹭这个线程
33 40 SafeDrivCenter.clear();
34 41 } catch(Exception e){
... ...
src/main/java/com/bsth/entity/sheet/Sheet.java 0 → 100644
  1 +package com.bsth.entity.sheet;
  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 +@Entity
  11 +@Table(name = "bsth_c_sheet")
  12 +public class Sheet {
  13 + @Id
  14 + @GeneratedValue
  15 + private Integer id;
  16 + private String gs;
  17 + private String fgs;
  18 + private String line;
  19 + private String date;
  20 + private String realDate;
  21 + private String jhsj;
  22 + private Long jhsjt;
  23 + private String sjsj;
  24 + private Long sjsjt;
  25 + private String xlDir;
  26 + private Date createDate;
  27 + private String zdname;
  28 +
  29 + @Transient
  30 + private String sfzd;
  31 +
  32 + public Integer getId() {
  33 + return id;
  34 + }
  35 + public void setId(Integer id) {
  36 + this.id = id;
  37 + }
  38 + public String getGs() {
  39 + return gs;
  40 + }
  41 + public void setGs(String gs) {
  42 + this.gs = gs;
  43 + }
  44 + public String getFgs() {
  45 + return fgs;
  46 + }
  47 + public void setFgs(String fgs) {
  48 + this.fgs = fgs;
  49 + }
  50 + public String getLine() {
  51 + return line;
  52 + }
  53 + public void setLine(String line) {
  54 + this.line = line;
  55 + }
  56 + public String getDate() {
  57 + return date;
  58 + }
  59 + public void setDate(String date) {
  60 + this.date = date;
  61 + }
  62 + public String getRealDate() {
  63 + return realDate;
  64 + }
  65 + public void setRealDate(String realDate) {
  66 + this.realDate = realDate;
  67 + }
  68 + public String getJhsj() {
  69 + return jhsj;
  70 + }
  71 + public void setJhsj(String jhsj) {
  72 + this.jhsj = jhsj;
  73 + }
  74 + public String getSjsj() {
  75 + return sjsj;
  76 + }
  77 + public void setSjsj(String sjsj) {
  78 + this.sjsj = sjsj;
  79 + }
  80 +
  81 + public Long getJhsjt() {
  82 + return jhsjt;
  83 + }
  84 + public void setJhsjt(Long jhsjt) {
  85 + this.jhsjt = jhsjt;
  86 + }
  87 + public Long getSjsjt() {
  88 + return sjsjt;
  89 + }
  90 + public void setSjsjt(Long sjsjt) {
  91 + this.sjsjt = sjsjt;
  92 + }
  93 + public String getXlDir() {
  94 + return xlDir;
  95 + }
  96 + public void setXlDir(String xlDir) {
  97 + this.xlDir = xlDir;
  98 + }
  99 + public Date getCreateDate() {
  100 + return createDate;
  101 + }
  102 + public void setCreateDate(Date createDate) {
  103 + this.createDate = createDate;
  104 + }
  105 +
  106 + public String getZdname() {
  107 + return zdname;
  108 + }
  109 + public void setZdname(String zdname) {
  110 + this.zdname = zdname;
  111 + }
  112 + public String getSfzd() {
  113 + return sfzd;
  114 + }
  115 + public void setSfzd(String sfzd) {
  116 + this.sfzd = sfzd;
  117 + }
  118 +
  119 +
  120 +
  121 +}
... ...
src/main/java/com/bsth/repository/realcontrol/ScheduleRealInfoRepository.java
... ... @@ -147,6 +147,10 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI
147 147 List<ScheduleRealInfo> scheduleByDateAndLineQp(String line,String date);
148 148  
149 149 @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  150 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 order by s.xlDir,s.realExecDate,s.dfsj, (s.lpName+1)")
  151 + List<ScheduleRealInfo> scheduleByDateAndLineQp2(String line,String date);
  152 +
  153 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
150 154 @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 and s.bcType not in ('in','out') order by s.xlBm,s.adjustExps,s.fcsj")
151 155 List<ScheduleRealInfo> scheduleByDateAndLine2(String line,String date);
152 156  
... ...
src/main/java/com/bsth/repository/sheet/SheetRepository.java 0 → 100644
  1 +package com.bsth.repository.sheet;
  2 +
  3 +import com.bsth.entity.sheet.Sheet;
  4 +import com.bsth.repository.BaseRepository;
  5 +import org.springframework.stereotype.Repository;
  6 +
  7 +/**
  8 + *
  9 + */
  10 +@Repository
  11 +public interface SheetRepository extends BaseRepository<Sheet, Integer>{
  12 +}
... ...
src/main/java/com/bsth/service/forms/impl/FormsServiceImpl.java
... ... @@ -28,10 +28,12 @@ import com.bsth.entity.mcy_forms.Singledata;
28 28 import com.bsth.entity.mcy_forms.Turnoutrate;
29 29 import com.bsth.entity.mcy_forms.Vehicleloading;
30 30 import com.bsth.entity.mcy_forms.Waybillday;
  31 +import com.bsth.entity.oil.Dlb;
31 32 import com.bsth.entity.oil.Ylb;
32 33 import com.bsth.entity.realcontrol.ScheduleRealInfo;
33 34 import com.bsth.entity.schedule.SchedulePlanInfo;
34 35 import com.bsth.repository.LineRepository;
  36 +import com.bsth.repository.oil.DlbRepository;
35 37 import com.bsth.repository.oil.YlbRepository;
36 38 import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
37 39 import com.bsth.data.BasicData;
... ... @@ -67,6 +69,9 @@ public class FormsServiceImpl implements FormsService {
67 69 YlbRepository ylbRepository;
68 70  
69 71 @Autowired
  72 + DlbRepository dlbRepository;
  73 +
  74 + @Autowired
70 75 LineRepository lineRepository;
71 76  
72 77  
... ... @@ -98,6 +103,7 @@ public class FormsServiceImpl implements FormsService {
98 103 });
99 104 List<ScheduleRealInfo> realList= scheduleRealInfoRepository.scheduleByDateAndLineTjrb(line, date);
100 105 List<Ylb> listYlb= ylbRepository.obtainYl(date, "", "", line, "", "xlbm");
  106 + List<Dlb> listDlb= dlbRepository.obtainDl(date, "", "", line, "", "xlbm");
101 107 double jzl=0.0,sh=0.0,yh=0.0;
102 108 for (int i = 0; i < list.size(); i++) {
103 109 Waybillday w=list.get(i);
... ... @@ -132,6 +138,14 @@ public class FormsServiceImpl implements FormsService {
132 138 }
133 139 }
134 140  
  141 + for (int j = 0; j < listDlb.size(); j++) {
  142 + Dlb d=listDlb.get(j);
  143 + if(w.getNbbm().equals(d.getNbbm()) && w.getJgh().equals(d.getJsy())){
  144 + jzl=Arith.add(jzl, d.getCdl());
  145 + sh=Arith.add(sh, d.getSh());
  146 + yh=Arith.add(yh, d.getHd());
  147 + }
  148 + }
135 149 w.setJzl(String.valueOf(jzl));
136 150 w.setYh(String.valueOf(yh));
137 151 w.setSh(String.valueOf(sh));
... ... @@ -1087,7 +1101,10 @@ public class FormsServiceImpl implements FormsService {
1087 1101  
1088 1102 @Override
1089 1103 public List<Daily> daily(Map<String, Object> map) {
1090   -
  1104 + String xlbm="";;
  1105 + if(map.get("line")!=null){
  1106 + xlbm=map.get("line").toString().trim();
  1107 + }
1091 1108 String gsbm="";
1092 1109 if(map.get("gsdmDaily")!=null){
1093 1110 gsbm=map.get("gsdmDaily").toString();
... ... @@ -1098,7 +1115,7 @@ public class FormsServiceImpl implements FormsService {
1098 1115 fgsbm=map.get("fgsdmDaily").toString();
1099 1116 }
1100 1117  
1101   - String sql="select t.schedule_date_str,"
  1118 + /*String sql="select t.schedule_date_str,"
1102 1119 + " t.cl_zbh,t.j_gh,t.j_name,x.yh from (select r.schedule_date_str,r.xl_bm,"
1103 1120 + " r.cl_zbh,r.j_gh,r.j_name from bsth_c_s_sp_info_real r WHERE "
1104 1121 + " r.xl_bm='" + map.get("line").toString() + "' "
... ... @@ -1112,7 +1129,20 @@ public class FormsServiceImpl implements FormsService {
1112 1129 + " and y.ssgsdm like '%"+gsbm+"%' "
1113 1130 + " and y.fgsdm like '%"+fgsbm+"%'"
1114 1131 + " ) x"
1115   - + " on t.cl_zbh = x.nbbm and t.j_gh=x.jsy";
  1132 + + " on t.cl_zbh = x.nbbm and t.j_gh=x.jsy";*/
  1133 +
  1134 + String sql="select r.schedule_date_str, "
  1135 + + " r.xl_bm,r.cl_zbh,r.j_gh,r.j_name,r.gs_bm,r.fgs_bm"
  1136 + + " from bsth_c_s_sp_info_real r where "
  1137 + + "r.schedule_date_str = '"+map.get("date").toString()+"'";
  1138 + if(xlbm.equals("")){
  1139 + sql +="and r.gs_bm='"+gsbm+"' "
  1140 + + " and r.fgs_bm='"+fgsbm+"'";
  1141 + }else{
  1142 + sql += " and r.xl_bm = '"+xlbm+"'";
  1143 + }
  1144 + sql += " group by r.schedule_date_str,"
  1145 + + " r.xl_bm,r.cl_zbh,r.j_gh,r.j_name,r.gs_bm,r.fgs_bm order by r.xl_bm,r.cl_zbh";
1116 1146  
1117 1147 List<Daily> list = jdbcTemplate.query(sql, new RowMapper<Daily>() {
1118 1148 @Override
... ... @@ -1122,21 +1152,31 @@ public class FormsServiceImpl implements FormsService {
1122 1152 daily.setZbh(arg0.getString("cl_zbh"));
1123 1153 daily.setJgh(arg0.getString("j_gh"));
1124 1154 daily.setjName(arg0.getString("j_name"));
1125   - daily.setYh(arg0.getString("yh"));
1126 1155 return daily;
1127 1156 }
1128 1157 });
  1158 + List<Ylb> listYlb= ylbRepository.obtainYl(map.get("date").toString(), "", "", xlbm, "", "xlbm");
  1159 + List<Dlb> listDlb= dlbRepository.obtainDl(map.get("date").toString(), "", "", xlbm, "", "xlbm");
1129 1160 List<ScheduleRealInfo> sList;
1130 1161 List<ScheduleRealInfo> lists=scheduleRealInfoRepository.scheduleByDateAndLineTjrb(map.get("line").toString(), map.get("date").toString());
1131 1162 for(int i=0;i<list.size();i++){
1132 1163 sList =new ArrayList<ScheduleRealInfo>();
1133 1164 Daily d=list.get(i);
1134   - if(d.getYh()==null){
1135   - d.setYh("0");
1136   - }else{
1137   - if(d.getYh().equals(""))
1138   - d.setYh("0");
  1165 + Double yh=0.0;
  1166 + for (int j = 0; j < listYlb.size(); j++) {
  1167 + Ylb y=listYlb.get(j);
  1168 + if(y.getNbbm().equals(d.getZbh())&& y.getJsy().equals(d.getJgh())){
  1169 + yh=Arith.add(yh, y.getYh());
  1170 + }
  1171 + }
  1172 +
  1173 + for (int j = 0; j < listDlb.size(); j++) {
  1174 + Dlb b=listDlb.get(j);
  1175 + if(b.getNbbm().equals(d.getZbh())&& b.getJsy().equals(d.getJgh())){
  1176 + yh=Arith.add(yh, b.getHd());
  1177 + }
1139 1178 }
  1179 + d.setYh(String.valueOf(yh));
1140 1180 for (int j = 0; j < lists.size(); j++) {
1141 1181 ScheduleRealInfo s=lists.get(j);
1142 1182 if(d.getJgh().equals(s.getjGh()) && d.getZbh().equals(s.getClZbh())){
... ...
src/main/java/com/bsth/service/impl/BusIntervalServiceImpl.java
... ... @@ -11,6 +11,7 @@ import java.util.Collections;
11 11 import java.util.Comparator;
12 12 import java.util.Date;
13 13 import java.util.HashMap;
  14 +import java.util.HashSet;
14 15 import java.util.Iterator;
15 16 import java.util.List;
16 17 import java.util.Map;
... ... @@ -585,7 +586,7 @@ public class BusIntervalServiceImpl implements BusIntervalService {
585 586  
586 587 @Override
587 588 public Map<String, Object> timeAndSpeed(Map<String, Object> map) {
588   - List<Long> ttList = new ArrayList<Long>();
  589 + List<Map<String, Object>> ttList = new ArrayList<Map<String, Object>>();
589 590 List<ChildTaskPlan> cList = new ArrayList<ChildTaskPlan>();
590 591 List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
591 592 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
... ... @@ -593,6 +594,7 @@ public class BusIntervalServiceImpl implements BusIntervalService {
593 594 Map<String, List<ScheduleRealInfo>> keyMap = new HashMap<String, List<ScheduleRealInfo>>();
594 595 Map<String, List<ChildTaskPlan>> cMap = new HashMap<String, List<ChildTaskPlan>>();
595 596 Map<String, Object> modelMap = new HashMap<String, Object>();
  597 + Set<Long> tsSet = new HashSet<Long>();
596 598  
597 599 String company = map.get("company").toString();
598 600 String subCompany = map.get("subCompany").toString();
... ... @@ -616,20 +618,23 @@ public class BusIntervalServiceImpl implements BusIntervalService {
616 618  
617 619 try {
618 620  
619   - String sql = "select * from bsth_c_s_sp_info_real where DATE_FORMAT(schedule_date,'%Y-%m-%d') >= '"+startDate+"' and DATE_FORMAT(schedule_date,'%Y-%m-%d') <= '"+endDate+"'";
  621 + String where = "";
620 622 if(line.length() != 0 && statu.equals("1")){
621   - sql += " and xl_bm = '"+line+"'";
  623 + where += " and xl_bm = '"+line+"'";
622 624 }
623 625 if(lp.length() != 0 && statu.equals("1")){
624   - sql += " and lp_name = '"+lp+"'";
  626 + where += " and lp_name = '"+lp+"'";
625 627 }
626 628 if(company.length() != 0){
627   - sql += " and gs_bm = '"+company+"' and fgs_bm = '"+subCompany+"'";
  629 + where += " and gs_bm = '"+company+"' and fgs_bm = '"+subCompany+"'";
628 630 }
629 631 if(sfqr == 1){
630   - sql += " and zdsj >= '"+times1+"' and fcsj <= '"+times2+"'";
  632 + where += " and zdsj >= '"+times1+"' and fcsj <= '"+times2+"'";
631 633 }
632   - sql += " and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks' order by fcsj";
  634 + where += " and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks'";
  635 +
  636 + String sql = "select * from bsth_c_s_sp_info_real where DATE_FORMAT(schedule_date,'%Y-%m-%d') >= '"+startDate+"'"
  637 + + " and DATE_FORMAT(schedule_date,'%Y-%m-%d') <= '"+endDate+"'"+where+"";
633 638  
634 639 list = jdbcTemplate.query(sql,
635 640 new RowMapper<ScheduleRealInfo>(){
... ... @@ -704,6 +709,65 @@ public class BusIntervalServiceImpl implements BusIntervalService {
704 709 return schedule;
705 710 }
706 711 });
  712 +
  713 + {
  714 + List<Map<String, String>> temp1 = new ArrayList<Map<String, String>>();
  715 + List<Map<String, String>> temp2 = new ArrayList<Map<String, String>>();
  716 + sql = "select * from bsth_c_s_sp_info where bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks'";
  717 +
  718 + if(startDate.equals(endDate)){
  719 + sql += " and schedule_date = '"+startDate+"'";
  720 + } else {
  721 + sql += " and schedule_date >= '"+startDate+"' and schedule_date <= '"+endDate+"'";
  722 + }
  723 + if(line.length() != 0 && statu.equals("1")){
  724 + sql += " and xl_bm = '"+line+"'";
  725 + }
  726 + if(company.length() != 0){
  727 + sql += " and gs_bm = '"+company+"' and fgs_bm = '"+subCompany+"'";
  728 + }
  729 + temp1 = jdbcTemplate.query(sql,
  730 + new RowMapper<Map<String, String>>(){
  731 + @Override
  732 + public Map<String, String> mapRow(ResultSet rs, int rowNum) throws SQLException {
  733 + Map<String, String> m = new HashMap<String, String>();
  734 + m.put("id", rs.getString("id"));
  735 + m.put("lp", rs.getString("lp"));
  736 + m.put("fcsj", rs.getString("fcsj"));
  737 + m.put("xl_bm", rs.getString("xl_bm"));
  738 + m.put("tt_info", rs.getString("tt_info"));
  739 + return m;
  740 + }
  741 + });
  742 + sql = "select * from bsth_c_s_ttinfo_detail where ists = 1"
  743 + + " and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks'";
  744 +
  745 + if(line.length() != 0 && statu.equals("1")){
  746 + sql += " and xl = '"+line+"'";
  747 + }
  748 + temp2 = jdbcTemplate.query(sql,
  749 + new RowMapper<Map<String, String>>(){
  750 + @Override
  751 + public Map<String, String> mapRow(ResultSet rs, int rowNum) throws SQLException {
  752 + Map<String, String> m = new HashMap<String, String>();
  753 + m.put("id", rs.getString("id"));
  754 + m.put("lp", rs.getString("lp"));
  755 + m.put("xl", rs.getString("xl"));
  756 + m.put("fcsj", rs.getString("fcsj"));
  757 + m.put("ttinfo", rs.getString("ttinfo"));
  758 + return m;
  759 + }
  760 + });
  761 +
  762 + for(Map<String, String> m2 : temp2){
  763 + for(Map<String, String> m1 : temp1){
  764 + if(m2.get("ttinfo").equals(m1.get("tt_info")) && m2.get("xl").equals(m1.get("xl_bm"))
  765 + && m2.get("lp").equals(m1.get("lp")) && m2.get("fcsj").equals(m1.get("fcsj"))){
  766 + tsSet.add(Long.valueOf(m1.get("id")));
  767 + }
  768 + }
  769 + }
  770 + }
707 771  
708 772 sql = "select * from bsth_c_s_child_task order by start_date";
709 773  
... ... @@ -723,13 +787,17 @@ public class BusIntervalServiceImpl implements BusIntervalService {
723 787 });
724 788  
725 789 if(model.length() != 0){
726   - sql = "select id from bsth_c_s_sp_info where tt_info = '" + model + "' and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks'";
  790 + sql = "select sp.id from bsth_c_s_sp_info sp left join bsth_c_s_ttinfo_detail tt on sp.tt_info = tt.ttinfo and sp.xl_bm = tt.xl and sp.lp = tt.lp and sp.fcsj = tt.fcsj "
  791 + + "where tt_info = '" + model + "' and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks'";
727 792  
728 793 ttList = jdbcTemplate.query(sql,
729   - new RowMapper<Long>(){
  794 + new RowMapper<Map<String, Object>>(){
730 795 @Override
731   - public Long mapRow(ResultSet rs, int rowNum) throws SQLException {
732   - return rs.getLong("id");
  796 + public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
  797 + Map<String, Object> m = new HashMap<String, Object>();
  798 + m.put("id", rs.getString("id"));
  799 + m.put("ists", rs.getString("ists")!=null?rs.getString("ists"):"0");
  800 + return m;
733 801 }
734 802 });
735 803 }
... ... @@ -771,13 +839,15 @@ public class BusIntervalServiceImpl implements BusIntervalService {
771 839 if(schedule.getXlName()==null || schedule.getXlName().trim().length()==0)
772 840 continue;
773 841 if(model.length() != 0){
774   - for(Long tt : ttList)
775   - if((long) tt == (long)schedule.getSpId()){
  842 + for(Map<String, Object> tt : ttList){
  843 + long id = Long.valueOf(tt.get("id").toString());
  844 + if(id == (long)schedule.getSpId()){
776 845 String key = schedule.getScheduleDateStr() + "/" + schedule.getXlName() + "/" + schedule.getLpName();
777 846 if(!keyMap.containsKey(key))
778 847 keyMap.put(key, new ArrayList<ScheduleRealInfo>());
779 848 keyMap.get(key).add(schedule);
780 849 }
  850 + }
781 851 }else{
782 852 String key = schedule.getScheduleDateStr() + "/" + schedule.getXlName() + "/" + schedule.getLpName();
783 853 if(!keyMap.containsKey(key))
... ... @@ -821,14 +891,16 @@ public class BusIntervalServiceImpl implements BusIntervalService {
821 891 for(int i = 1; i < keyList.size(); i++){
822 892 ScheduleRealInfo schedule1 = sortMap.get(keyList.get(i - 1));
823 893 ScheduleRealInfo schedule2 = sortMap.get(keyList.get(i));
824   - if(sfqr == 1 && time1 > schedule1.getFcsjT()){
825   - jhyysj += schedule2.getFcsjT() - time1;
826   - }else if(sfqr == 1 && time2 < schedule2.getFcsjT()){
827   - jhyysj += time2 - schedule1.getFcsjT();
828   - }else{
829   - jhyysj += schedule2.getFcsjT() - schedule1.getFcsjT();
  894 + if(!tsSet.contains(schedule1.getId())){
  895 + if(sfqr == 1 && time1 > schedule1.getFcsjT()){
  896 + jhyysj += schedule2.getFcsjT() - time1;
  897 + }else if(sfqr == 1 && time2 < schedule2.getFcsjT()){
  898 + jhyysj += time2 - schedule1.getFcsjT();
  899 + }else{
  900 + jhyysj += schedule2.getFcsjT() - schedule1.getFcsjT();
  901 + }
  902 + jhyysj1 += schedule2.getFcsjT() - schedule1.getFcsjT();
830 903 }
831   - jhyysj1 += schedule2.getFcsjT() - schedule1.getFcsjT();
832 904 long zdsj2 = schedule2.getZdsjT();
833 905 long fcsj2 = schedule2.getFcsjT();
834 906 if(fcsj2 > zdsj2)
... ...
src/main/java/com/bsth/service/oil/impl/YlbServiceImpl.java
... ... @@ -1016,18 +1016,21 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
1016 1016 if(nbbm.trim()!=""){
1017 1017 stringList.add(nbbm);
1018 1018 List<Object[]> objectLists=repository.checkNbmmNum(rq, gsbm, fgsbm, xlbm,nbbm);
1019   - int cs=Integer.parseInt(objectLists.get(0)[1].toString());
1020   - if(sxtj.equals("1")){
1021   - if(cs==1){
  1019 + if(objectLists.size()>0){
  1020 + int cs=Integer.parseInt(objectLists.get(0)[1].toString());
  1021 + if(sxtj.equals("1")){
  1022 + if(cs==1){
  1023 + listYlb=repository.listYlb(rq, gsbm, fgsbm, xlbm, stringList);
  1024 + }
  1025 + }else if(sxtj.equals("2")){
  1026 + if(cs>1){
  1027 + listYlb=repository.listYlb(rq, gsbm, fgsbm, xlbm, stringList);
  1028 + }
  1029 + }else{
1022 1030 listYlb=repository.listYlb(rq, gsbm, fgsbm, xlbm, stringList);
1023 1031 }
1024 1032 }
1025 1033  
1026   - if(sxtj.equals("2")){
1027   - if(cs>1){
1028   - listYlb=repository.listYlb(rq, gsbm, fgsbm, xlbm, stringList);
1029   - }
1030   - }
1031 1034 }else{
1032 1035 //全部
1033 1036 if(sxtj.equals("0")){
... ... @@ -1248,17 +1251,18 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
1248 1251 if(zlc>0){
1249 1252 long l=0l;
1250 1253 double ylxs=0.0;
1251   - if(i==iterator2.size()){
  1254 + if(i==iterator2.size()-1){
1252 1255 ylxs=czyl;
1253 1256 }else{
1254 1257 l=Math.round(nextJzyl);
1255 1258 ylxs=l*100/100;
1256 1259 }
1257   -// nextJzyl = Arith.add(nextJzyl,Arith.sub(nextJzyl,ylxs));
1258 1260 yh=Arith.add(yh, Arith.sub(ylxs,nextJzyl));
1259 1261 t.setYh(yh);
1260 1262 t.setJzyl(ylxs);
1261 1263 nextJzyl=ylxs;
  1264 +
  1265 +
1262 1266 }else{
1263 1267 t.setYh(yh);
1264 1268 t.setJzyl(nextJzyl);
... ...
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
... ... @@ -10,11 +10,12 @@ import com.bsth.controller.realcontrol.dto.DfsjChange;
10 10 import com.bsth.controller.realcontrol.dto.LpData;
11 11 import com.bsth.data.BasicData;
12 12 import com.bsth.data.LineConfigData;
13   -import com.bsth.data.msg_queue.DirectivePushQueue;
14 13 import com.bsth.data.schedule.DayOfSchedule;
15 14 import com.bsth.data.schedule.SchAttrCalculator;
16   -import com.bsth.data.schedule.edit_logs.FormLogger;
17 15 import com.bsth.data.schedule.ScheduleComparator;
  16 +import com.bsth.data.schedule.edit_logs.FormLogger;
  17 +import com.bsth.data.schedule.edit_logs.ScheduleModifyLogger;
  18 +import com.bsth.data.schedule.edit_logs.loggers.FcxxwtLogger;
18 19 import com.bsth.data.schedule.late_adjust.LateAdjustHandle;
19 20 import com.bsth.entity.Cars;
20 21 import com.bsth.entity.Line;
... ... @@ -221,6 +222,9 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
221 222 schedule.setRealExecDate(schedule.getScheduleDateStr());
222 223 }
223 224  
  225 + //记录日志
  226 + ScheduleModifyLogger.dftz(schedule,opType, schedule.getDfsj(),dfsj,remarks);
  227 +
224 228 schedule.setDfsjAll(dfsj);
225 229 schedule.setDfAuto(false);
226 230 schedule.addRemarks(remarks);
... ... @@ -276,6 +280,8 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
276 280 map.put("msg", "不必要的重复烂班!");
277 281 return map;
278 282 }
  283 + //记录日志
  284 + ScheduleModifyLogger.jhlb(schedule, remarks);
279 285  
280 286 schedule.setAdjustExps(reason);
281 287 schedule.destroy();
... ... @@ -1043,6 +1049,9 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1043 1049 sch.setRealExecDate(sch.getScheduleDateStr());
1044 1050 }
1045 1051  
  1052 + //日志记录
  1053 + ScheduleModifyLogger.sftz(sch, fcsjActual, remarks);
  1054 +
1046 1055 sch.setFcsjActualAll(fcsjActual);
1047 1056 sch.addRemarks(remarks);
1048 1057 sch.calcStatus();
... ... @@ -1078,6 +1087,9 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1078 1087 rs.put("status", ResponseCode.ERROR);
1079 1088 rs.put("msg", "未烂班,无法撤销!");
1080 1089 } else {
  1090 + //日志记录
  1091 + ScheduleModifyLogger.cxlb(sch);
  1092 +
1081 1093 sch.setStatus(0);
1082 1094 sch.setRemarks("");//清空备注
1083 1095 sch.setJhlc(sch.getJhlcOrig());
... ... @@ -1117,6 +1129,8 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1117 1129 break;
1118 1130 }
1119 1131 }*/
  1132 + //日志记录
  1133 + ScheduleModifyLogger.cxsf(sch);
1120 1134  
1121 1135 sch.clearFcsjActual();
1122 1136 rs.put("status", ResponseCode.SUCCESS);
... ... @@ -1163,7 +1177,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1163 1177 sch = list.get(i);
1164 1178  
1165 1179 //调整待发
1166   - outgoAdjust(sch.getId(), null, fmtHHmm.print(st), null, "间隔调整");
  1180 + outgoAdjust(sch.getId(), null, fmtHHmm.print(st), null, "3");
1167 1181 }
1168 1182  
1169 1183 rs.put("status", ResponseCode.SUCCESS);
... ... @@ -1186,6 +1200,8 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1186 1200 List<ScheduleRealInfo> ts = new ArrayList<>();
1187 1201 try {
1188 1202 Long id = Long.parseLong(map.get("id"));
  1203 + String remarks = map.get("remarks");
  1204 +
1189 1205 ScheduleRealInfo sch = dayOfSchedule.get(id);
1190 1206  
1191 1207 if(null == sch){
... ... @@ -1194,6 +1210,9 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1194 1210 return rs;
1195 1211 }
1196 1212  
  1213 + //日志记录器
  1214 + FcxxwtLogger fLog = FcxxwtLogger.start(sch, remarks);
  1215 +
1197 1216 String clZbh = map.get("clZbh");
1198 1217 String jsy = map.get("jsy");
1199 1218 if(!clZbh.equals(sch.getClZbh())
... ... @@ -1208,7 +1227,8 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1208 1227 rs.put("status", ResponseCode.ERROR);
1209 1228 rs.put("msg", "车辆 " + clZbh + " 不存在!");
1210 1229 return rs;
1211   - } else {
  1230 + } else if(!clZbh.equals(sch.getClZbh())){
  1231 + fLog.log("换车", sch.getClZbh(), clZbh);
1212 1232 dayOfSchedule.changeCar(sch, clZbh);
1213 1233 }
1214 1234 }
... ... @@ -1224,7 +1244,10 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1224 1244 rs.put("status", ResponseCode.ERROR);
1225 1245 return rs;
1226 1246 }
1227   - persoChange(sch, jGh);
  1247 + else if(!jGh.equals(sch.getjGh())){
  1248 + fLog.log("换驾驶员", sch.getjGh() + "/" + sch.getjName(), jsy);
  1249 + persoChange(sch, jGh);
  1250 + }
1228 1251 }
1229 1252  
1230 1253 /**
... ... @@ -1239,9 +1262,13 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1239 1262 rs.put("status", ResponseCode.ERROR);
1240 1263 return rs;
1241 1264 }
1242   - persoChangeSPY(sch, sGh);
  1265 + else if(!sGh.equals(sch.getsGh())){
  1266 + fLog.log("换售票员", sch.getsGh() + "/" + sch.getsName(), spy);
  1267 + persoChangeSPY(sch, sGh);
  1268 + }
1243 1269 }
1244   - else{
  1270 + else if(StringUtils.isNotEmpty(sch.getsGh())){
  1271 + fLog.log("撤销售票员");
1245 1272 sch.setsGh("");
1246 1273 sch.setsName("");
1247 1274 }
... ... @@ -1261,6 +1288,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1261 1288 else
1262 1289 t = fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr() + fcsjActual);
1263 1290  
  1291 + fLog.log("调整实发时间", sch.getFcsjActual(), fcsjActual);
1264 1292 sch.setFcsjActualAll(t);
1265 1293 //取消应发未到标记
1266 1294 if(sch.isLate2()){
... ... @@ -1268,6 +1296,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1268 1296 LateAdjustHandle.remove(sch);
1269 1297 }
1270 1298 } else if (StringUtils.isNotEmpty(sch.getFcsjActual()) && StringUtils.isEmpty(fcsjActual)){
  1299 + fLog.log("撤销实发时间", sch.getFcsjActual(), "");
1271 1300 //撤销实发
1272 1301 revokeRealOutgo(sch.getId());
1273 1302 }
... ... @@ -1280,6 +1309,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1280 1309 && !zdsjActual.equals(sch.getZdsjActual())) {
1281 1310  
1282 1311 //调整实达
  1312 + fLog.log("调整实达时间", sch.getZdsjActual(), zdsjActual);
1283 1313 sch.setZdsjActualAll(zdsjActual);
1284 1314 //路牌下一班起点到达时间
1285 1315 ScheduleRealInfo next = dayOfSchedule.nextByLp(sch);
... ... @@ -1289,19 +1319,20 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1289 1319 ts.add(next);
1290 1320 }
1291 1321  
1292   - try{
  1322 +/* try{
1293 1323 //车辆下一个要执行的班次
1294 1324 ScheduleRealInfo carNext = dayOfSchedule.next(sch);
1295 1325 if(carNext != null && !carNext.getXlBm().equals(sch.getXlBm())){
1296 1326 DirectivePushQueue.put64(carNext.getClZbh(), carNext.getXlBm(), "套跑@系统");
1297   - //directiveService.lineChange(carNext.getClZbh(), carNext.getXlBm(), "套跑@系统");
  1327 + fLog.log("下发线路切换指令", sch.getXlName(), carNext.getXlName());
1298 1328 }
1299   - }catch (Exception e){logger.error("", e);}
  1329 + }catch (Exception e){logger.error("", e);}*/
1300 1330  
1301 1331 //重新计算车辆执行班次
1302 1332 dayOfSchedule.reCalcExecPlan(sch.getClZbh());
1303 1333 } else if(StringUtils.isNotEmpty(sch.getZdsjActual()) && StringUtils.isEmpty(zdsjActual)){
1304 1334 //清除实达时间
  1335 + fLog.log("撤销实达时间", sch.getZdsjActual(), "");
1305 1336 sch.clearZdsjActual();
1306 1337 //清除路牌下一班起点到达时间
1307 1338 ScheduleRealInfo next = dayOfSchedule.nextByLp(sch);
... ... @@ -1316,7 +1347,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1316 1347 /**
1317 1348 * 备注
1318 1349 */
1319   - sch.setRemarks(map.get("remarks"));
  1350 + sch.setRemarks(remarks);
1320 1351  
1321 1352 /**
1322 1353 * 烂班
... ... @@ -1324,6 +1355,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1324 1355 if (map.get("status") != null
1325 1356 && Integer.parseInt(map.get("status").toString()) == -1) {
1326 1357 destroy(sch.getId() + "", "", map.get("adjustExps").toString());
  1358 + fLog.log("烂班");
1327 1359 }
1328 1360  
1329 1361 /**
... ... @@ -1333,9 +1365,12 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1333 1365 if (StringUtils.isNotEmpty(jhlc)) {
1334 1366 double jhlcNum = Double.parseDouble(jhlc);
1335 1367 //烂班
1336   - if(jhlcNum == 0 && sch.getJhlcOrig() != 0 && !sch._isInout())
  1368 + if(jhlcNum == 0 && sch.getJhlcOrig() != 0 && !sch._isInout() && !sch.isDestroy()){
1337 1369 destroy(sch.getId() + "", "", map.get("adjustExps").toString());
  1370 + fLog.log("里程设置为0,自动烂班");
  1371 + }
1338 1372 else if(jhlcNum != sch.getJhlc()){
  1373 + fLog.log("设置里程", sch.getJhlc(), jhlcNum);
1339 1374 sch.setJhlc(jhlcNum);
1340 1375 //临加班次,实际计划一起改
1341 1376 if(sch.isSflj())
... ... @@ -1347,7 +1382,8 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1347 1382 * 修改班次类型
1348 1383 */
1349 1384 String bcType = map.get("bcType");
1350   - if (StringUtils.isNotEmpty(bcType)) {
  1385 + if (StringUtils.isNotEmpty(bcType) && !bcType.equals(sch.getBcType())) {
  1386 + fLog.log("修改班次类型", sch.getBcType(), bcType);
1351 1387 sch.setBcType(bcType);
1352 1388 }
1353 1389  
... ... @@ -1359,6 +1395,9 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1359 1395  
1360 1396 rs.put("status", ResponseCode.SUCCESS);
1361 1397 rs.put("ts", ts);
  1398 +
  1399 + //日志记录结束
  1400 + fLog.end();
1362 1401 } catch (Exception e) {
1363 1402 logger.error("", e);
1364 1403 rs.put("status", ResponseCode.ERROR);
... ... @@ -1383,7 +1422,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1383 1422 schedule = dayOfSchedule.get(id);
1384 1423  
1385 1424 if(schedule != null)
1386   - outgoAdjust(id, null, dfsj, null, "批量调整");
  1425 + outgoAdjust(id, null, dfsj, null, "2");
1387 1426 }
1388 1427  
1389 1428 rs.put("status", ResponseCode.SUCCESS);
... ... @@ -2894,7 +2933,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2894 2933 list.add(t);
2895 2934 }
2896 2935  
2897   - List<ScheduleRealInfo> listInfo2 = scheduleRealInfoRepository.scheduleByDateAndLine(line, date);
  2936 + List<ScheduleRealInfo> listInfo2 = scheduleRealInfoRepository.scheduleByDateAndLineQp2(line, date);
2898 2937 List<ScheduleRealInfo> xList = new ArrayList<ScheduleRealInfo>();
2899 2938 List<ScheduleRealInfo> yList = new ArrayList<ScheduleRealInfo>();
2900 2939 List<ScheduleRealInfo> zList = new ArrayList<ScheduleRealInfo>();
... ... @@ -3117,9 +3156,17 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
3117 3156 Double jccgl=culateMieageService.culateJccgl(listS);
3118 3157 Double zyygl=Arith.add(sjgl, ljgl);
3119 3158 Double zksgl=Arith.add(ksgl, jccgl);
3120   - yesterdayDataList.get(x).put("totalKilometers", Arith.add(zyygl, zksgl));
  3159 + Double zlc=Arith.add(zyygl, zksgl);
  3160 + yesterdayDataList.get(x).put("totalKilometers", zlc);
3121 3161  
3122 3162 }
  3163 + for (int i = 0; i < yesterdayDataList.size(); i++) {
  3164 + Map<String, Object> map=yesterdayDataList.get(i);
  3165 + Double zlc=map.get("totalKilometers")==null?0.0:Double.parseDouble(map.get("totalKilometers").toString());
  3166 + if(zlc<=0){
  3167 + yesterdayDataList.remove(map);
  3168 + }
  3169 + }
3123 3170 //增加顺序号
3124 3171 for (int i = 0; i < yesterdayDataList.size(); i++) {
3125 3172 if (i == 0) {
... ... @@ -3144,7 +3191,6 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
3144 3191 Set<ScheduleRealInfo> set = new HashSet<>();
3145 3192  
3146 3193 ScheduleRealInfo sch;
3147   - //BiMap<String, String> map = BasicData.deviceId2NbbmMap.inverse();
3148 3194  
3149 3195 String jGh = null,jName,sGh,sName;
3150 3196 for (ChangePersonCar cpc : cpcs) {
... ... @@ -3171,6 +3217,8 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
3171 3217  
3172 3218 //为换人换车情况表写入数据
3173 3219 schModifyLog.saveChangetochange(sch, cpc);
  3220 + //日志记录
  3221 + ScheduleModifyLogger.tzrc(sch, cpc);
3174 3222  
3175 3223 if (StringUtils.isNotEmpty(cpc.getJsy())) {
3176 3224 //换驾驶员
... ... @@ -3257,7 +3305,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
3257 3305 if (StringUtils.isEmpty(dc.getOld_dfsj()) || StringUtils.isEmpty(dc.getNew_dfsj()))
3258 3306 continue;
3259 3307  
3260   - tempMap = outgoAdjust(dc.getSchId(), "", dc.getNew_dfsj(), null, "批量调整");
  3308 + tempMap = outgoAdjust(dc.getSchId(), "", dc.getNew_dfsj(), null, "2");
3261 3309  
3262 3310 if (tempMap.get("status").equals(ResponseCode.SUCCESS)) {
3263 3311 list.addAll((Collection<? extends ScheduleRealInfo>) tempMap.get("ts"));
... ... @@ -4534,6 +4582,8 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
4534 4582 rs.put("status", ResponseCode.ERROR);
4535 4583 rs.put("msg", "班次未执行,无法撤销!");
4536 4584 } else {
  4585 + //日志记录
  4586 + ScheduleModifyLogger.cxzx(sch);
4537 4587  
4538 4588 sch.clearFcsjActual();
4539 4589 sch.clearZdsjActual();
... ...
src/main/java/com/bsth/service/report/SheetService.java 0 → 100644
  1 +package com.bsth.service.report;
  2 +
  3 +import java.util.List;
  4 +import java.util.Map;
  5 +
  6 +import com.bsth.entity.sheet.Sheet;
  7 +import com.bsth.service.BaseService;
  8 +
  9 +public interface SheetService extends BaseService<Sheet, Integer>{
  10 + public List<Map<String, Object>> bcPunctual(Map<String, Object> map);
  11 + public String saveSheetList() throws Exception;
  12 + public List<Map<String, Object>> countList(Map<String, Object> map);
  13 +
  14 + public List<Sheet> sheetList(Integer id);
  15 +}
... ...
src/main/java/com/bsth/service/report/impl/ReportServiceImpl.java
... ... @@ -375,11 +375,11 @@ public class ReportServiceImpl implements ReportService{
375 375 String[] minSjs = minfcsj.split(":");
376 376 int minSj=Integer.parseInt(minSjs[0])*60+Integer.parseInt(minSjs[1]);
377 377 //查询时间里程
378   - String sqlPc=" (SELECT jhlc,fcsj,bc_type,lp,2 as xh FROM bsth_c_s_ttinfo_detail "
  378 + String sqlPc=" (SELECT jhlc,fcsj,bc_type,lp,2 as xh, ists FROM bsth_c_s_ttinfo_detail "
379 379 + " where ttinfo ='"+ttinfo+"' and fcsj <='"+minfcsj+"' ) "
380 380 + " union "
381   - + " (SELECT jhlc,fcsj,bc_type,lp,1 as xh FROM bsth_c_s_ttinfo_detail "
382   - + " where ttinfo ='"+ttinfo+"' and fcsj > '"+minfcsj+"') order by lp,xh,fcsj";
  381 + + " (SELECT jhlc,fcsj,bc_type,lp,1 as xh, ists FROM bsth_c_s_ttinfo_detail "
  382 + + " where ttinfo ='"+ttinfo+"' and fcsj > '"+minfcsj+"') order by lp,xh,fcsj";
383 383  
384 384 Map<String, Object> map=new HashMap<String,Object>();
385 385 List<Map<String, Object>> list= jdbcTemplate.query(sqlPc,
... ... @@ -391,6 +391,7 @@ public class ReportServiceImpl implements ReportService{
391 391 m.put("yygl", rs.getString("jhlc")==null?"0":rs.getString("jhlc"));
392 392 m.put("bcType", rs.getString("bc_type"));
393 393 m.put("lp", rs.getString("lp"));
  394 + m.put("ists", rs.getObject("ists")==null?"0":rs.getString("ists"));
394 395 return m;
395 396 }
396 397 });
... ... @@ -451,6 +452,9 @@ public class ReportServiceImpl implements ReportService{
451 452 lp=m.get("lp").toString();
452 453  
453 454 }
  455 + if(m.containsKey("ists") && m.get("ists").equals("1")){
  456 + sj = 0;
  457 + }
454 458 }
455 459 if(yysj>0){
456 460 yycs =yygl/(yysj*1.0/60);
... ... @@ -573,191 +577,77 @@ public class ReportServiceImpl implements ReportService{
573 577  
574 578 //查询全程
575 579 String sqlqc="select t.*,x.station_name as qdz_name from ( "
576   - + "(SELECT fcsj,qdz,2 as xh,xl_dir FROM bsth_c_s_ttinfo_detail "
577   - + " where ttinfo ='"+ttinfo+"' and bc_type='normal' and fcsj <='"+minfcsj+"' ) "
  580 + + " (SELECT bc_type, fcsj,qdz,2 as xh,xl_dir FROM bsth_c_s_ttinfo_detail "
  581 + + " where ttinfo ='"+ttinfo+"' and (bc_type='normal' || bc_type='region') "
  582 + + " and fcsj <='"+minfcsj+"') "
578 583 + " union "
579   - + " (SELECT fcsj,qdz,1 as xh,xl_dir FROM bsth_c_s_ttinfo_detail "
580   - + " where ttinfo ='"+ttinfo+"' and bc_type='normal' and fcsj > '"+minfcsj+"') "
581   - + "order by xl_dir,xh,fcsj ) t left join bsth_c_station x on t.qdz=x.id";
  584 + + " (SELECT bc_type, fcsj,qdz,1 as xh,xl_dir FROM bsth_c_s_ttinfo_detail "
  585 + + " where ttinfo ='"+ttinfo+"' and (bc_type='normal' || bc_type='region') "
  586 + + " and fcsj > '"+minfcsj+"') "
  587 + + "order by xl_dir,xh,fcsj ) t left join bsth_c_station x on t.qdz=x.id";
582 588 List<Map<String, String>> qclist= jdbcTemplate.query(sqlqc,
583 589 new RowMapper<Map<String, String>>(){
584 590 @Override
585   - public Map<String, String> mapRow(ResultSet rs, int rowNum) throws SQLException {
586   - Map<String, String> m=new HashMap<String,String>();
587   - m.put("qdz_name", rs.getString("qdz_name"));
588   - m.put("fcsj", rs.getString("fcsj"));
589   - m.put("xl", rs.getString("xl_dir"));
590   - return m;
591   - }
  591 + public Map<String, String> mapRow(ResultSet rs, int rowNum) throws SQLException {
  592 + Map<String, String> m=new HashMap<String,String>();
  593 + m.put("qdz_name", rs.getString("qdz_name"));
  594 + m.put("bcType", rs.getString("bc_type"));
  595 + m.put("fcsj", rs.getString("fcsj"));
  596 + m.put("xl", rs.getString("xl_dir"));
  597 + m.put("xh", rs.getString("xh"));
  598 + return m;
  599 + }
592 600  
593 601 });
594   -
595   - Map<String, Object> qcMap=new HashMap<String,Object>();
596   - int num=0;
597   - String sxfcsj="";
598   - String xxfcsj="";
599   - String sxzd="";
600   - String xxzd="";
601   - for (int i = 0; i < qclist.size(); i++) {
602   - Map<String, String> map=qclist.get(i);
603   - if(map.get("xl").equals("0")){
604   - if(sxzd.equals("")){
605   - sxzd=map.get("qdz_name").toString();
606   - qcMap.put("sxzm", sxzd);
607   - sxfcsj +=map.get("fcsj").toString()+"-";
608   - }
609   - if(!(qclist.get(i+1).get("xl").equals("0"))){
610   - sxfcsj +=map.get("fcsj").toString();
611   - qcMap.put("sxsj",sxfcsj);
612   - qcMap.put("sxbc", i+1);
613   - num=i+1;
614   - }
615   - }
616   - if(map.get("xl").equals("1")){
617   - if(xxzd.equals("")){
618   - xxzd=map.get("qdz_name").toString();
619   - xxfcsj+=map.get("fcsj").toString()+"-";
620   - qcMap.put("xxzm", xxzd);
621   - }
  602 +
  603 + List<List<Map<String, String>>> mapList = new ArrayList<List<Map<String,String>>>();
  604 + mapList.add(new ArrayList<Map<String, String>>());
  605 + mapList.add(new ArrayList<Map<String, String>>());
  606 + for(Map<String, String> m : qclist){
  607 + String bcType = m.get("bcType");
  608 + if(bcType.equals("normal")){
  609 + mapList.get(0).add(m);
  610 + } else {
  611 + mapList.get(1).add(m);
622 612 }
623 613 }
624   - xxfcsj +=qclist.get(qclist.size()-1).get("fcsj").toString();
625   - qcMap.put("xxsj", xxfcsj);
626   - qcMap.put("xxbc", qclist.size()-num);
627   - list.add(qcMap);
628   -
629   -
630   - //查询区间
631   - String sqlqj="select t.*,x.station_name as qdz_name from ( "
632   - + "(SELECT fcsj,qdz,'1' as gf,xl_dir FROM bsth_c_s_ttinfo_detail "
633   - + "where ttinfo ='"+ttinfo+"' and bc_type='region' and fcsj >='06:31'"
634   - + "and fcsj <'08:30')"
635   - + " union ( SELECT fcsj,qdz,'2' as gf,xl_dir FROM bsth_c_s_ttinfo_detail "
636   - + "where ttinfo ='"+ttinfo+"' and bc_type='region' "
637   - + "and fcsj > '16:01' and fcsj < '18:00') order by xl_dir,gf,fcsj ) t "
638   - + "left join bsth_c_station x on t.qdz=x.id";
639   -
640   - List<Map<String, String>> qjlist= jdbcTemplate.query(sqlqj,
641   - new RowMapper<Map<String, String>>(){
642   - @Override
643   - public Map<String, String> mapRow(ResultSet rs, int rowNum) throws SQLException {
644   - Map<String, String> m=new HashMap<String,String>();
645   - m.put("qdz_name", rs.getString("qdz_name"));
646   - m.put("fcsj", rs.getString("fcsj"));
647   - m.put("xl", rs.getString("xl_dir"));
648   - m.put("gf", rs.getString("gf"));
649   - return m;
650   - }
651   - });
652 614  
653   - Map<String, Object> qjzMap=new HashMap<String,Object>();
654   - Map<String, Object> qjwMap=new HashMap<String,Object>();
655   - int numqj=0;
656   - String sxfcsjqj="";
657   - String xxfcsjqj="";
658   - String sxzdqj="";
659   - String xxzdqj="";
660   - for(int i=0;i<qjlist.size();i++){
661   - Map<String, String> map=qjlist.get(i);
662   - if(map.get("xl").toString().equals("0")){
663   - if(map.get("gf").toString().equals("1")){
664   - if(sxzdqj.equals("")){
665   - sxzdqj =map.get("qdz_name").toString();
666   - qjzMap.put("sxzm", sxzdqj);
667   - sxfcsjqj +=map.get("fcsj").toString()+"-";
668   - }
669   - if(i<qjlist.size()-1){
670   - if(!(qjlist.get(i+1).get("gf").equals("1"))){
671   - sxfcsjqj +=map.get("fcsj").toString();
672   - qjzMap.put("sxsj",sxfcsjqj);
673   - qjzMap.put("sxbc", i+1);
674   - numqj=i+1;
675   - sxzdqj ="";
676   - sxfcsjqj="";
677   - }
678   - }else{
679   - qjzMap.put("sxsj",sxfcsjqj+"-"+map.get("fcsj").toString());
680   - qjzMap.put("sxbc", i+1);
681   - numqj=i+1;
682   - sxzdqj ="";
683   - sxfcsjqj="";
684   - }
685   - }
686   - if(map.get("gf").toString().equals("2")){
687   - if(sxzdqj.equals("")){
688   - sxzdqj =map.get("qdz_name").toString();
689   - qjwMap.put("sxzm", sxzdqj);
690   - sxfcsjqj +=map.get("fcsj").toString()+"-";
691   - }
692   - if(i<qjlist.size()-1){
693   - if(!(qjlist.get(i+1).get("xl").equals("0"))){
694   - sxfcsjqj +=map.get("fcsj").toString();
695   - qjwMap.put("sxsj",sxfcsjqj);
696   - qjwMap.put("sxbc", i+1-numqj);
697   - numqj=i+1;
698   - }
699   - }else{
700   - qjwMap.put("sxsj",sxfcsjqj+"-"+map.get("fcsj").toString());
701   - qjwMap.put("sxbc", i+1-numqj);
702   - numqj=i+1;
703   - }
704   - }
705   -
706   - }else{
707   - if(map.get("gf").toString().equals("1")){
708   - if(xxzdqj.equals("")){
709   - xxzdqj =map.get("qdz_name").toString();
710   - qjzMap.put("xxzm", xxzdqj);
711   - xxfcsjqj +=map.get("fcsj").toString()+"-";
712   - }
713   - if(i<qjlist.size()-1){
714   - if(!(qjlist.get(i+1).get("gf").equals("1"))){
715   - xxfcsjqj +=map.get("fcsj").toString();
716   - qjzMap.put("xxsj",xxfcsjqj);
717   - qjzMap.put("xxbc", i+1-numqj);
718   - numqj=i+1;
719   - xxzdqj ="";
720   - xxfcsjqj="";
721   - }
722   - }else{
723   - qjzMap.put("xxsj",xxfcsjqj+"-"+map.get("fcsj").toString());
724   - qjzMap.put("xxbc", i+1-numqj);
725   - numqj=i+1;
726   - xxzdqj ="";
727   - xxfcsjqj="";
728   - }
729   - }
730   - if(map.get("gf").toString().equals("2")){
731   - if(xxzdqj.equals("")){
732   - xxzdqj =map.get("qdz_name").toString();
733   - qjwMap.put("xxzm", xxzdqj);
734   - xxfcsjqj +=map.get("fcsj").toString()+"-";
735   - }
736   - if(i<qjlist.size()){
737   - if(i==qjlist.size()-1){
738   - xxfcsjqj +=map.get("fcsj").toString();
739   - qjwMap.put("xxsj",xxfcsjqj);
740   - qjwMap.put("xxbc", i+1-numqj);
741   - numqj=i+1;
742   - }
743   - }else{
744   - qjwMap.put("xxsj",xxfcsjqj+"-"+xxfcsjqj);
745   - qjwMap.put("xxbc", i+1-numqj);
746   - numqj=i+1;
747   - }
  615 + for(int i = 0; i < mapList.size(); i++){
  616 + List<Map<String, String>> l = mapList.get(i);
  617 + Map<String, Object> tempMap = new HashMap<String, Object>();
  618 + List<String> upfcsj = new ArrayList<String>();
  619 + List<String> downfcsj = new ArrayList<String>();
  620 + String sxqdz = "", xxqdz = "";
  621 + String sxfcsj = "", xxfcsj = "";
  622 + int sxbc = 0, xxbc = 0;
  623 + for(Map<String, String> m : l){
  624 + if(m.get("xl").equals("0")){
  625 + sxbc++;
  626 + upfcsj.add(m.get("fcsj"));
  627 + if(sxqdz.length() == 0 && m.containsKey("qdz_name"))
  628 + sxqdz = m.get("qdz_name");
  629 + } else {
  630 + xxbc++;
  631 + downfcsj.add(m.get("fcsj"));
  632 + if(xxqdz.length() == 0 && m.containsKey("qdz_name"))
  633 + xxqdz = m.get("qdz_name");
748 634 }
749   -
750   -
751 635 }
  636 + if(upfcsj.size() != 0)
  637 + sxfcsj = upfcsj.get(0) + "-" + upfcsj.get(upfcsj.size() - 1);
  638 + if(downfcsj.size() != 0)
  639 + xxfcsj = downfcsj.get(0) + "-" + downfcsj.get(downfcsj.size() - 1);
  640 + tempMap.put("sxqdz", sxqdz);
  641 + tempMap.put("sxfcsj", i==0?sxfcsj:"");
  642 + tempMap.put("sxbc", sxbc!=0?sxbc:"");
  643 + tempMap.put("xxqdz", xxqdz);
  644 + tempMap.put("xxfcsj", i==0?xxfcsj:"");
  645 + tempMap.put("xxbc", xxbc!=0?xxbc:"");
  646 + tempMap.put("bcType", i);
  647 + if(sxqdz.length()!=0 || xxqdz.length()!=0)
  648 + list.add(tempMap);
752 649 }
753 650  
754   - if(!qjzMap.isEmpty()){
755   - list.add(qjzMap);
756   - }
757   - if(!qjwMap.isEmpty()){
758   - list.add(qjwMap);
759   -
760   - }
761 651 return list;
762 652 }
763 653 @Override
... ... @@ -769,30 +659,36 @@ public class ReportServiceImpl implements ReportService{
769 659 String[] minSjs = minfcsj.split(":");
770 660 int minSj=Integer.parseInt(minSjs[0])*60+Integer.parseInt(minSjs[1]);
771 661 //查询时间里程
772   - String sqlPc=" (SELECT jhlc,fcsj,bcsj,bc_type,lp,xl_dir,2 as xh FROM "
  662 + String sqlPc=" (SELECT jhlc,fcsj,bcsj,bc_type,lp,xl_dir,ists,2 as xh FROM "
773 663 + " bsth_c_s_ttinfo_detail where ttinfo ='"+ttinfo+"' and "
774   - + " fcsj <='"+minfcsj+"' and bc_type = 'normal') "
  664 + + " fcsj <='"+minfcsj+"' and bc_type!='in' and bc_type!='out' and bc_type!='ldks') "
775 665 + " union "
776   - + " (SELECT jhlc,fcsj,bcsj,bc_type,lp,xl_dir,1 as xh FROM "
  666 + + " (SELECT jhlc,fcsj,bcsj,bc_type,lp,xl_dir,ists,1 as xh FROM "
777 667 + " bsth_c_s_ttinfo_detail where ttinfo ='"+ttinfo+"' and "
778   - + " fcsj >'"+minfcsj+"' and bc_type ='normal') "
779   - + " order by xl_dir, xh,fcsj";
780   -
  668 + + " fcsj > '"+minfcsj+"' and bc_type!='in' and bc_type!='out' and bc_type!='ldks') "
  669 + + " order by xl_dir, xh, fcsj";
781 670 Map<String, Object> map=new HashMap<String,Object>();
782 671 List<Map<String, Object>> list= jdbcTemplate.query(sqlPc,
783   - new RowMapper<Map<String, Object>>(){
784   - @Override
785   - public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
786   - Map<String, Object> m=new HashMap<String,Object>();
787   - m.put("fcsj", rs.getString("fcsj"));
788   - m.put("yygl", rs.getString("jhlc")==null?"0":rs.getString("jhlc"));
789   - m.put("bcsj", rs.getString("bcsj"));
790   - m.put("bcType", rs.getString("bc_type"));
791   - m.put("lp", rs.getString("lp"));
792   - m.put("dir", rs.getString("xl_dir"));
793   - return m;
794   - }
795   - });
  672 + new RowMapper<Map<String, Object>>(){
  673 + @Override
  674 + public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
  675 + Map<String, Object> m=new HashMap<String,Object>();
  676 + m.put("fcsj", rs.getString("fcsj"));
  677 + m.put("yygl", rs.getString("jhlc")==null?"0":rs.getString("jhlc"));
  678 + m.put("bcsj", rs.getString("bcsj"));
  679 + m.put("bcType", rs.getString("bc_type"));
  680 + m.put("lp", rs.getString("lp"));
  681 + m.put("dir", rs.getString("xl_dir"));
  682 + m.put("ists", rs.getString("ists")!=null?rs.getString("ists"):"");
  683 +
  684 + if(rs.getString("xh").equals("2")){
  685 + String[] split = m.get("fcsj").toString().split(":");
  686 + m.put("fcsj", Integer.valueOf(split[0]) + 24 + ":"+split[1]);
  687 + }
  688 +
  689 + return m;
  690 + }
  691 + });
796 692  
797 693 List<Map<String, Object>> newList=new ArrayList<Map<String,Object>>();
798 694 Map<String, List<Map<String, Object>>> keyMap = new HashMap<String, List<Map<String, Object>>>();
... ... @@ -824,8 +720,10 @@ public class ReportServiceImpl implements ReportService{
824 720 Map<String, Object> tempMap = new HashMap<String, Object>();
825 721 List<Map<String, Object>> list2 = keyMap.get(key);
826 722 List<Integer> cjs = new ArrayList<Integer>();
827   - int sxsj = 0, xxsj = 0, zcj = 0;
  723 + int sxsj = 0, xxsj = 0, zcj = 0, tssj = 0;
  724 + int sxbc = 0, xxbc = 0;
828 725 int temp = 24*60+1;
  726 + boolean ists = false;
829 727 for(Map<String, Object> m : list2){
830 728 String[] split = m.get("fcsj").toString().split(":");
831 729 int fcsj = Integer.valueOf(split[0])*60 + Integer.valueOf(split[1]);
... ... @@ -833,14 +731,25 @@ public class ReportServiceImpl implements ReportService{
833 731 int bcsj = Integer.valueOf(m.get("bcsj").toString());
834 732 if(xlDir == 0){
835 733 sxsj += bcsj;
  734 + sxbc ++;
836 735 } else {
837 736 xxsj += bcsj;
  737 + xxbc ++;
838 738 }
839 739 if(temp >= fcsj){
840 740 temp = fcsj;
  741 + ists = false;
841 742 } else {
842   - cjs.add(fcsj - temp);
  743 + if(ists){
  744 + tssj += fcsj - temp;
  745 + ists = false;
  746 + } else {
  747 + cjs.add(fcsj - temp);
  748 + }
843 749 temp = fcsj;
  750 + if(m.get("ists").equals("1")){
  751 + ists = true;
  752 + }
844 753 }
845 754 }
846 755 Collections.sort(cjs);
... ... @@ -848,11 +757,12 @@ public class ReportServiceImpl implements ReportService{
848 757 zcj += i;
849 758 }
850 759 tempMap.put("sjd", key);
851   - tempMap.put("sxsj", sxsj);
852   - tempMap.put("xxsj", xxsj);
853   - tempMap.put("fqsj", sxsj + xxsj);
  760 + tempMap.put("sxsj", sxsj / sxbc);
  761 + tempMap.put("xxsj", xxsj / xxbc);
  762 + tempMap.put("fqsj", (sxsj + xxsj) / list2.size());
854 763 tempMap.put("cjqj", cjs.size()>0?cjs.get(0)+"——"+cjs.get(cjs.size()-1):"——");
855   - tempMap.put("pjcj", cjs.size()>0?zcj/(cjs.size()-1):"/");
  764 + tempMap.put("pjcj", cjs.size()>0?zcj/cjs.size():"/");
  765 + tempMap.put("tssj", tssj);
856 766 maps.put(key, tempMap);
857 767 }
858 768 newList.add(maps.get("(首)——6:30"));
... ...
src/main/java/com/bsth/service/report/impl/SheetServiceImpl.java 0 → 100644
  1 +package com.bsth.service.report.impl;
  2 +
  3 +import java.sql.ResultSet;
  4 +import java.sql.SQLException;
  5 +import java.text.DecimalFormat;
  6 +import java.text.ParseException;
  7 +import java.text.SimpleDateFormat;
  8 +import java.util.ArrayList;
  9 +import java.util.Calendar;
  10 +import java.util.Collections;
  11 +import java.util.Comparator;
  12 +import java.util.Date;
  13 +import java.util.GregorianCalendar;
  14 +import java.util.HashMap;
  15 +import java.util.Iterator;
  16 +import java.util.List;
  17 +import java.util.Map;
  18 +import java.util.Set;
  19 +
  20 +import javax.transaction.Transactional;
  21 +
  22 +import org.apache.poi.hssf.eventusermodel.EventWorkbookBuilder.SheetRecordCollectingListener;
  23 +import org.slf4j.Logger;
  24 +import org.slf4j.LoggerFactory;
  25 +import org.springframework.beans.factory.annotation.Autowired;
  26 +import org.springframework.jdbc.core.JdbcTemplate;
  27 +import org.springframework.jdbc.core.RowMapper;
  28 +import org.springframework.scheduling.commonj.ScheduledTimerListener;
  29 +import org.springframework.stereotype.Service;
  30 +
  31 +import com.bsth.data.BasicData;
  32 +import com.bsth.entity.Line;
  33 +import com.bsth.entity.oil.Ylb;
  34 +import com.bsth.entity.realcontrol.ChildTaskPlan;
  35 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  36 +import com.bsth.entity.sheet.Sheet;
  37 +import com.bsth.repository.LineRepository;
  38 +import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
  39 +import com.bsth.repository.sheet.SheetRepository;
  40 +import com.bsth.service.impl.BaseServiceImpl;
  41 +import com.bsth.service.report.SheetService;
  42 +import com.bsth.util.BatchSaveUtils;
  43 +import com.bsth.util.ComparableChild;
  44 +import com.bsth.util.ComparableReal;
  45 +import com.google.common.util.concurrent.AbstractScheduledService.Scheduler;
  46 +
  47 +@Service
  48 +public class SheetServiceImpl extends BaseServiceImpl<Sheet, Integer> implements SheetService {
  49 + Logger logger = LoggerFactory.getLogger(this.getClass());
  50 + @Autowired
  51 + ScheduleRealInfoRepository scheduleRealInfoRepository;
  52 + @Autowired
  53 + LineRepository lineRepository;
  54 + @Autowired
  55 + JdbcTemplate jdbcTemplate;
  56 + @Autowired
  57 + SheetRepository sheetRepository;
  58 + /**
  59 + * 班次准点率
  60 + */
  61 + @Override
  62 + public List<Map<String, Object>> bcPunctual(Map<String, Object> map) {
  63 + // TODO Auto-generated method stub
  64 + String line =map.get("line").toString();
  65 + String date =map.get("date").toString();
  66 + List<ScheduleRealInfo> realList=scheduleRealInfoRepository.scheduleByDateAndLineTjrb(line, date);
  67 +
  68 + return null;
  69 + }
  70 + public static boolean isInOut(ScheduleRealInfo s){
  71 + boolean fage=false;
  72 + if(s.getBcType().equals("in")){
  73 + fage=true;
  74 + }
  75 + if(s.getBcType().equals("out")){
  76 + fage=true;
  77 + }
  78 + if(s.getBcType().equals("ldks")){
  79 + fage=true;
  80 + }
  81 +
  82 + return fage;
  83 + }
  84 + @Override
  85 + public String saveSheetList() throws Exception{
  86 + Map<String, Object> map=new HashMap<String,Object>();
  87 + String result = "failure";
  88 + try {
  89 + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
  90 + Date dNow = new Date(); //当前时间
  91 + Calendar calendar = Calendar.getInstance(); //得到日历
  92 + calendar.setTime(dNow);//把当前时间赋给日历
  93 + calendar.add(Calendar.DAY_OF_MONTH, -3); //设置为前三天
  94 +
  95 + String rq=sdf.format(calendar.getTime());
  96 +// String rq="2017-05-16";
  97 +
  98 + List<Line> lineList = (List<Line>) lineRepository.findAll();
  99 +
  100 + List<ScheduleRealInfo> lists= scheduleRealInfoRepository.findByDate(rq);
  101 + List<Sheet> listAdds=new ArrayList<Sheet>();
  102 + for (int i = 0; i < lineList.size(); i++) {
  103 + List<ScheduleRealInfo> list=new ArrayList<ScheduleRealInfo>();
  104 + String line=lineList.get(i).getLineCode();
  105 + for (int j = 0; j < lists.size(); j++) {
  106 + ScheduleRealInfo s=lists.get(j);
  107 + if(!isInOut(s)){
  108 + if(s.getXlBm().equals(line)){
  109 + list.add(s);
  110 + }
  111 + }
  112 +
  113 + }
  114 + if(list.size()>0){
  115 + List<Sheet> listAdd=punctualByLine(line,list);
  116 + if(listAdd.size()>0){
  117 + listAdds.addAll(listAdd);
  118 + }
  119 + }
  120 +
  121 + }
  122 +
  123 + if(listAdds.size()>0){
  124 + new BatchSaveUtils<Sheet>().saveList(listAdds, Sheet.class);
  125 + }
  126 + result = "success";
  127 + }catch (Exception e) {
  128 + // TODO Auto-generated catch block
  129 + throw e;
  130 + }finally{
  131 + logger.info("setDDRB:"+result);
  132 + }
  133 +
  134 + return result;
  135 + }
  136 +
  137 + public List<Sheet> punctualByLine(String line,List<ScheduleRealInfo> list){
  138 + List<Sheet> listAdd=new ArrayList<Sheet>();
  139 +// String line =map.get("line").toString();
  140 +// String date =map.get("date").toString();
  141 + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");
  142 + String sqlMinYysj="select start_opt from bsth_c_line_config where "
  143 + + " id = ("
  144 + + "select max(id) from bsth_c_line_config where line ='"+BasicData.lineId2CodeMap.inverse().get(line) +"'"
  145 + + ")";
  146 + List<String> listMin=jdbcTemplate.query(sqlMinYysj,
  147 + new RowMapper<String>(){
  148 + @Override
  149 + public String mapRow(ResultSet rs, int rowNum) throws SQLException {
  150 + String s=rs.getString("start_opt");
  151 + return s;
  152 + }
  153 + });
  154 + if(listMin.size()>0){
  155 + String minfcsj=listMin.get(0);
  156 + String[] minSjs = minfcsj.split(":");
  157 + //车辆最早发车时间 用了过滤超第二天0点的数据
  158 + Long minSj=Long.parseLong(minSjs[0])*60+Long.parseLong(minSjs[1]);
  159 + //0 上行 1下行
  160 + List<ScheduleRealInfo> listJhsj0=new ArrayList<ScheduleRealInfo>();
  161 +
  162 + List<ScheduleRealInfo> listJhsj1=new ArrayList<ScheduleRealInfo>();
  163 +
  164 + List<ScheduleRealInfo> listReal0=new ArrayList<ScheduleRealInfo>();
  165 +
  166 + List<ScheduleRealInfo> listReal1=new ArrayList<ScheduleRealInfo>();
  167 + //排除所有进出场班次
  168 +// List<ScheduleRealInfo> list=scheduleRealInfoRepository.scheduleByDateAndLine2(line, date);
  169 + /* for (int i = 0; i < list.size(); i++) {
  170 + //排除所有烂班的班次
  171 + ScheduleRealInfo s=list.get(i);
  172 + Set<ChildTaskPlan> cts=s.getcTasks();
  173 + if(cts!=null && cts.size() > 0){
  174 +
  175 + }
  176 + ScheduleRealInfo r=checkBc(s);
  177 + String[] fcsj= r.getFcsj().split(":");
  178 + Long fcsjL=Long.parseLong(fcsj[0])*60+Long.parseLong(fcsj[1]);
  179 + Long fscjT=0L;
  180 + if(fcsjL<minSj){
  181 + Calendar calendar = new GregorianCalendar();
  182 + calendar.setTime(r.getScheduleDate());
  183 + calendar.add(calendar.DATE,1);
  184 + r.setScheduleDate(calendar.getTime());
  185 + try {
  186 + fscjT = sdf.parse(sdf.format(r.getScheduleDate())+" "+r.getFcsj()).getTime();
  187 + } catch (ParseException e) {
  188 + // TODO Auto-generated catch block
  189 + e.printStackTrace();
  190 + }
  191 +
  192 + }else{
  193 + try {
  194 + fscjT =sdf.parse(r.getScheduleDateStr()+" "+r.getFcsj()).getTime();
  195 + } catch (ParseException e) {
  196 + // TODO Auto-generated catch block
  197 + e.printStackTrace();
  198 + };
  199 + }
  200 +
  201 + Sheet sheet=new Sheet();
  202 + Long fcsjAcual=0L;
  203 + if (r.getFcsjActual()!=null) {
  204 + if(!r.getFcsjActual().equals("")){
  205 + try {
  206 + fcsjAcual =sdf.parse(r.getRealExecDate()+" "+r.getFcsjActual()).getTime();
  207 + } catch (ParseException e) {
  208 + // TODO Auto-generated catch block
  209 + e.printStackTrace();
  210 + }
  211 +
  212 +
  213 + Long sjc=fscjT-fcsjAcual;
  214 + //在快慢五分钟内直接添加
  215 + if(sjc>= 3*60*1000*-1 && sjc <=3*60*1000){
  216 +
  217 + sheet.setDate(r.getScheduleDateStr());
  218 + sheet.setRealDate(r.getRealExecDate());
  219 + sheet.setJhsjt(fscjT);
  220 + sheet.setJhsj(r.getFcsj());
  221 + sheet.setSjsjt(fcsjAcual);
  222 + sheet.setSjsj(r.getFcsjActual());
  223 + sheet.setGs(r.getGsBm());
  224 + sheet.setFgs(r.getFgsBm());
  225 + sheet.setLine(r.getXlBm());
  226 + sheet.setXlDir(r.getXlDir());
  227 + sheet.setZdname(r.getQdzName());
  228 + sheet.setCreateDate(new Date());
  229 + listAdd.add(sheet);
  230 + }else{
  231 + r.setFcsjActualTime(fcsjAcual);
  232 + r.setFcsjT(fscjT);
  233 + if(r.getXlDir().equals("0")){
  234 + listJhsj0.add(r);
  235 + listReal0.add(r);
  236 + }else{
  237 + listJhsj1.add(r);
  238 + listReal1.add(r);
  239 + }
  240 + }
  241 + }else{
  242 + sheet.setDate(r.getScheduleDateStr());
  243 + sheet.setRealDate(r.getRealExecDate());
  244 + sheet.setJhsjt(fscjT);
  245 + sheet.setJhsj(r.getFcsj());
  246 + sheet.setSjsjt(0L);
  247 + sheet.setSjsj("烂班");
  248 + sheet.setGs(r.getGsBm());
  249 + sheet.setFgs(r.getFgsBm());
  250 + sheet.setLine(r.getXlBm());
  251 + sheet.setXlDir(r.getXlDir());
  252 + sheet.setZdname(r.getQdzName());
  253 + sheet.setCreateDate(new Date());
  254 + listAdd.add(sheet);
  255 + }
  256 + }else{
  257 + sheet.setDate(r.getScheduleDateStr());
  258 + sheet.setRealDate(r.getRealExecDate());
  259 + sheet.setJhsjt(fscjT);
  260 + sheet.setJhsj(r.getFcsj());
  261 + sheet.setSjsjt(0L);
  262 + sheet.setSjsj("烂班");
  263 + sheet.setGs(r.getGsBm());
  264 + sheet.setFgs(r.getFgsBm());
  265 + sheet.setLine(r.getXlBm());
  266 + sheet.setXlDir(r.getXlDir());
  267 + sheet.setZdname(r.getQdzName());
  268 + sheet.setCreateDate(new Date());
  269 + listAdd.add(sheet);
  270 + }
  271 + }*/
  272 + for (int i = 0; i < list.size(); i++) {
  273 + ScheduleRealInfo s=list.get(i);
  274 + ScheduleRealInfo r=checkBc(s);
  275 + String[] fcsj= r.getFcsj().split(":");
  276 + Long fcsjL=Long.parseLong(fcsj[0])*60+Long.parseLong(fcsj[1]);
  277 + Long fscjT=0L;
  278 + if(fcsjL<minSj){
  279 + Calendar calendar = new GregorianCalendar();
  280 + calendar.setTime(r.getScheduleDate());
  281 + calendar.add(calendar.DATE,1);
  282 + r.setScheduleDate(calendar.getTime());
  283 + try {
  284 + fscjT = sdf.parse(sdf.format(r.getScheduleDate())+" "+r.getFcsj()).getTime();
  285 + } catch (ParseException e) {
  286 + // TODO Auto-generated catch block
  287 + e.printStackTrace();
  288 + }
  289 +
  290 + }else{
  291 + try {
  292 + fscjT =sdf.parse(r.getScheduleDateStr()+" "+r.getFcsj()).getTime();
  293 + } catch (ParseException e) {
  294 + // TODO Auto-generated catch block
  295 + e.printStackTrace();
  296 + };
  297 + }
  298 + r.setFcsjT(fscjT);
  299 + Sheet sheet=new Sheet();
  300 + if (s.getFcsjActual() != null) {
  301 + Long fcsjAcual = 0L;
  302 + try {
  303 + fcsjAcual = sdf.parse(r.getRealExecDate() + " " + r.getFcsjActual()).getTime();
  304 + r.setFcsjActualTime(fcsjAcual);
  305 + r.setFcsjT(fscjT);
  306 + } catch (ParseException e) {
  307 + // TODO Auto-generated catch block
  308 + e.printStackTrace();
  309 + }
  310 + if (r.isSflj()) {
  311 + if (s.getXlDir().equals("0")) {
  312 + listReal0.add(r);
  313 + } else {
  314 + listReal1.add(r);
  315 + }
  316 +
  317 + } else {
  318 + if (s.getFcsjActual() != null) {
  319 + Long sjc = fcsjAcual - fscjT;
  320 + // 在快慢五分钟内直接添加
  321 + if (sjc >= 1 * 60 * 1000 * -1 && sjc <= 3 * 60 * 1000) {
  322 + sheet.setDate(r.getScheduleDateStr());
  323 + sheet.setRealDate(r.getRealExecDate());
  324 + sheet.setJhsjt(fscjT);
  325 + sheet.setJhsj(r.getFcsj());
  326 + sheet.setSjsjt(fcsjAcual);
  327 + sheet.setSjsj(r.getFcsjActual());
  328 + sheet.setGs(r.getGsBm());
  329 + sheet.setFgs(r.getFgsBm());
  330 + sheet.setLine(r.getXlBm());
  331 + sheet.setXlDir(r.getXlDir());
  332 + sheet.setZdname(r.getQdzName());
  333 + sheet.setCreateDate(new Date());
  334 + listAdd.add(sheet);
  335 + } else {
  336 + if (r.getXlDir().equals("0")) {
  337 + listJhsj0.add(r);
  338 + listReal0.add(r);
  339 + } else {
  340 + listJhsj1.add(r);
  341 + listReal1.add(r);
  342 + }
  343 + }
  344 + }
  345 + }
  346 + } else {
  347 + /*sheet.setDate(r.getScheduleDateStr());
  348 + sheet.setRealDate(r.getRealExecDate());
  349 + sheet.setJhsjt(fscjT);
  350 + sheet.setJhsj(r.getFcsj());
  351 + sheet.setSjsjt(0L);
  352 + sheet.setSjsj("烂班");
  353 + sheet.setGs(r.getGsBm());
  354 + sheet.setFgs(r.getFgsBm());
  355 + sheet.setLine(r.getXlBm());
  356 + sheet.setXlDir(r.getXlDir());
  357 + sheet.setZdname(r.getQdzName());
  358 + sheet.setCreateDate(new Date());
  359 + listAdd.add(sheet);*/
  360 + r.setFcsjActualTime(0L);
  361 + r.setFcsjT(fscjT);
  362 + r.setFcsjActual("烂班");
  363 + if (r.getXlDir().equals("0")) {
  364 + listJhsj0.add(r);
  365 + listReal0.add(r);
  366 + } else {
  367 + listJhsj1.add(r);
  368 + listReal1.add(r);
  369 + }
  370 +
  371 + }
  372 +
  373 + }
  374 + //计发排序
  375 + Collections.sort(listJhsj0, new ComparableReal());
  376 + Collections.sort(listJhsj1, new ComparableReal());
  377 + //实发排序
  378 + Collections.sort(listReal0,new ComparableAcual());
  379 + Collections.sort(listReal1,new ComparableAcual());
  380 +
  381 + //计划发车时间和实际发车时间比较计算准点率
  382 +
  383 +
  384 +
  385 + int no=listJhsj0.size()*2;
  386 + boolean fage=true;
  387 +// for (int p = no; p > 0; p--) {
  388 + while(fage){
  389 + //查询所有的实发 对应最接近的 计发
  390 + List<Map<String, Object>> list_map=new ArrayList<Map<String,Object>>();
  391 + for (int i = 0; i < listReal0.size(); i++) {
  392 + Map<String, Object> m_=new HashMap<String,Object>();
  393 + ScheduleRealInfo s1=listReal0.get(i);
  394 + Long sjsj=s1.getFcsjActualTime();
  395 + ScheduleRealInfo absInfo=new ScheduleRealInfo();
  396 + int next_j=listJhsj0.size();
  397 + for (int j = 0; j < listJhsj0.size(); j++) {
  398 + ScheduleRealInfo s2=listJhsj0.get(j);
  399 + if(j==0){
  400 + absInfo=s2;
  401 + }else{
  402 + //计发实发时间绝对值比较 取到最接近的值
  403 + Long abs1 = Math.abs(sjsj - s2.getFcsjT());
  404 + Long abs2 = Math.abs(sjsj -absInfo.getFcsjT());
  405 + if(abs2-abs1>0){
  406 + absInfo=s2;
  407 + next_j=j;
  408 + }
  409 + }
  410 + }
  411 + if(next_j<=0){
  412 + break;
  413 + }else{
  414 + m_.put("s", s1.getId());
  415 + m_.put("j", absInfo.getId());
  416 + m_.put("s_list", s1);
  417 + m_.put("j_list", absInfo);
  418 + m_.put("abs", Math.abs(sjsj-absInfo.getFcsjT()));
  419 + list_map.add(m_);
  420 + }
  421 + }
  422 + Collections.sort(list_map,new ComparableMap());
  423 + Map<String, Object> m_s=new HashMap<String,Object>();
  424 + List<Map<String, Object>> list_m_s=new ArrayList<Map<String,Object>>();
  425 +
  426 + for (int i = 0; i < list_map.size(); i++) {
  427 + Map<String, Object> m_=list_map.get(i);
  428 + Map<String, Object> m_l=new HashMap<String,Object>();
  429 + if(m_s.get(m_.get("j").toString())==null){
  430 + m_s.put(m_.get("s").toString(), m_.get("s"));
  431 + m_s.put(m_.get("j").toString(), m_.get("j"));
  432 + m_l.put("s", m_.get("s"));
  433 + m_l.put("j", m_.get("j"));
  434 + m_l.put("s_l",m_.get("s_list"));
  435 + m_l.put("j_l",m_.get("j_list"));
  436 + list_m_s.add(m_l);
  437 + }
  438 + }
  439 + for (int i = 0; i < list_m_s.size(); i++) {
  440 + Map<String, Object> m_l=list_m_s.get(i);
  441 + Long s=Long.parseLong(m_l.get("s").toString());
  442 + boolean s_bool=false;
  443 + for (int k = 0; k < listReal0.size(); k++) {
  444 + ScheduleRealInfo s0=listReal0.get(k);
  445 + if(s0.getId()-s==0){
  446 + listReal0.remove(s0);
  447 + s_bool=true;
  448 + }
  449 + }
  450 +
  451 + Long j=Long.parseLong(m_l.get("j").toString());
  452 + boolean j_bool=false;
  453 + for (int j2 = 0; j2 < listJhsj0.size(); j2++) {
  454 + ScheduleRealInfo j0=listJhsj0.get(j2);
  455 + if(j0.getId()-j==0){
  456 + listJhsj0.remove(j0);
  457 + j_bool=true;
  458 + }
  459 + }
  460 +
  461 + if(s_bool&&j_bool){
  462 + ScheduleRealInfo sf=(ScheduleRealInfo)m_l.get("s_l");
  463 + ScheduleRealInfo jf=(ScheduleRealInfo)m_l.get("j_l");
  464 + Sheet sheet=new Sheet();
  465 + sheet.setDate(sf.getScheduleDateStr());
  466 + sheet.setRealDate(sf.getRealExecDate());
  467 + sheet.setJhsjt(jf.getFcsjT());
  468 + sheet.setJhsj(jf.getFcsj());
  469 + sheet.setSjsjt(sf.getFcsjActualTime());
  470 + sheet.setSjsj(sf.getFcsjActual());
  471 + sheet.setGs(sf.getGsBm());
  472 + sheet.setFgs(sf.getFgsBm());
  473 + sheet.setLine(sf.getXlBm());
  474 + sheet.setXlDir(sf.getXlDir());
  475 + sheet.setZdname(sf.getQdzName());
  476 + sheet.setCreateDate(new Date());
  477 + listAdd.add(sheet);
  478 + }
  479 + }
  480 +
  481 + if(listJhsj0.size()<=0){
  482 + fage=false;
  483 + }
  484 + no--;
  485 + if(no<0){
  486 + fage=false;
  487 + }
  488 + }
  489 +
  490 +
  491 + int nos=listJhsj1.size()*2;
  492 + fage=true;
  493 + while(fage){
  494 + //查询所有的实发 对应最接近的 计发
  495 + List<Map<String, Object>> list_map=new ArrayList<Map<String,Object>>();
  496 + for (int i = 0; i < listReal1.size(); i++) {
  497 + Map<String, Object> m_=new HashMap<String,Object>();
  498 + ScheduleRealInfo s1=listReal1.get(i);
  499 + Long sjsj=s1.getFcsjActualTime();
  500 + ScheduleRealInfo absInfo=new ScheduleRealInfo();
  501 + int next_j=listJhsj1.size();
  502 + for (int j = 0; j < listJhsj1.size(); j++) {
  503 + ScheduleRealInfo s2=listJhsj1.get(j);
  504 + if(j==0){
  505 + absInfo=s2;
  506 + }else{
  507 + //计发实发时间绝对值比较 取到最接近的值
  508 + Long abs1 = Math.abs(sjsj - s2.getFcsjT());
  509 + Long abs2 = Math.abs(sjsj -absInfo.getFcsjT());
  510 + if(abs2-abs1>0){
  511 + absInfo=s2;
  512 + next_j=j;
  513 + }
  514 + }
  515 + }
  516 + if(next_j<=0){
  517 + break;
  518 + }else{
  519 + m_.put("s", s1.getId());
  520 + m_.put("j", absInfo.getId());
  521 + m_.put("s_list", s1);
  522 + m_.put("j_list", absInfo);
  523 + m_.put("abs", Math.abs(sjsj-absInfo.getFcsjT()));
  524 + list_map.add(m_);
  525 + }
  526 +
  527 + }
  528 + Collections.sort(list_map,new ComparableMap());
  529 + Map<String, Object> m_s=new HashMap<String,Object>();
  530 + List<Map<String, Object>> list_m_s=new ArrayList<Map<String,Object>>();
  531 +
  532 + for (int i = 0; i < list_map.size(); i++) {
  533 + Map<String, Object> m_=list_map.get(i);
  534 + Map<String, Object> m_l=new HashMap<String,Object>();
  535 + if(m_s.get(m_.get("j").toString())==null){
  536 + m_s.put(m_.get("s").toString(), m_.get("s"));
  537 + m_s.put(m_.get("j").toString(), m_.get("j"));
  538 + m_l.put("s", m_.get("s"));
  539 + m_l.put("j", m_.get("j"));
  540 + m_l.put("s_l",m_.get("s_list"));
  541 + m_l.put("j_l",m_.get("j_list"));
  542 + list_m_s.add(m_l);
  543 + }
  544 + }
  545 + for (int i = 0; i < list_m_s.size(); i++) {
  546 + Map<String, Object> m_l=list_m_s.get(i);
  547 + Long s=Long.parseLong(m_l.get("s").toString());
  548 + boolean s_bool=false;
  549 + for (int k = 0; k < listReal1.size(); k++) {
  550 + ScheduleRealInfo s0=listReal1.get(k);
  551 + if(s0.getId()-s==0){
  552 + listReal1.remove(s0);
  553 + s_bool=true;
  554 + }
  555 + }
  556 +
  557 + Long j=Long.parseLong(m_l.get("j").toString());
  558 + boolean j_bool=false;
  559 + for (int j2 = 0; j2 < listJhsj1.size(); j2++) {
  560 + ScheduleRealInfo j0=listJhsj1.get(j2);
  561 + if(j0.getId()-j==0){
  562 + listJhsj1.remove(j0);
  563 + j_bool=true;
  564 + }
  565 + }
  566 +
  567 + if(s_bool&&j_bool){
  568 + ScheduleRealInfo sf=(ScheduleRealInfo)m_l.get("s_l");
  569 + ScheduleRealInfo jf=(ScheduleRealInfo)m_l.get("j_l");
  570 + Sheet sheet=new Sheet();
  571 + sheet.setDate(sf.getScheduleDateStr());
  572 + sheet.setRealDate(sf.getRealExecDate());
  573 + sheet.setJhsjt(jf.getFcsjT());
  574 + sheet.setJhsj(jf.getFcsj());
  575 + sheet.setSjsjt(sf.getFcsjActualTime());
  576 + sheet.setSjsj(sf.getFcsjActual());
  577 + sheet.setGs(sf.getGsBm());
  578 + sheet.setFgs(sf.getFgsBm());
  579 + sheet.setLine(sf.getXlBm());
  580 + sheet.setXlDir(sf.getXlDir());
  581 + sheet.setZdname(sf.getQdzName());
  582 + sheet.setCreateDate(new Date());
  583 + listAdd.add(sheet);
  584 + }
  585 + }
  586 +
  587 + if(listJhsj1.size()<=0){
  588 + fage=false;
  589 + }
  590 + nos--;
  591 + if(nos<0){
  592 + fage=false;
  593 + }
  594 + }
  595 + }
  596 + return listAdd;
  597 + }
  598 +
  599 + public ScheduleRealInfo checkBc(ScheduleRealInfo s){
  600 + //如果班次有子任务 且 子任务中有属于营运的。把该子任务的发车时间设置成班次的发车时间
  601 + Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
  602 + if(!childTaskPlans.isEmpty()){
  603 + List<ChildTaskPlan> listit=new ArrayList<ChildTaskPlan>(childTaskPlans);
  604 + Collections.sort(listit, new ComparableChild());
  605 + for (int i = 0; i < listit.size(); i++) {
  606 + ChildTaskPlan c=listit.get(i);
  607 + if(!c.isDestroy()){
  608 + if(c.getMileageType().equals("service")){
  609 + s.setFcsjActual(c.getStartDate());
  610 + break;
  611 + }
  612 +
  613 + }
  614 + }
  615 + }
  616 + return s;
  617 + }
  618 +
  619 + public Long abs_js(List<ScheduleRealInfo> list,ScheduleRealInfo t){
  620 + Long jhsj=t.getFcsjT();
  621 + ScheduleRealInfo absInfo=new ScheduleRealInfo();
  622 + for (int j = 0; j < list.size(); j++) {
  623 + ScheduleRealInfo s =list.get(j);
  624 + if(j==0){
  625 + absInfo=s;
  626 + }else{
  627 + //计发实发时间绝对值比较 取到最接近的值
  628 + Long abs1 = Math.abs(jhsj - s.getFcsjActualTime());
  629 + Long abs2 = Math.abs(absInfo.getFcsjActualTime());
  630 + if(abs2-abs1>0){
  631 + absInfo=s;
  632 + }
  633 + }
  634 + }
  635 + return absInfo.getId();
  636 +
  637 + }
  638 +
  639 + @Override
  640 + public List<Map<String, Object>> countList(Map<String, Object> map) {
  641 + // TODO Auto-generated method stub
  642 + List<Map<String, Object>> listmap=new ArrayList<Map<String,Object>>();
  643 + String line="";
  644 + if(map.get("line")!=null){
  645 + line =map.get("line").toString();
  646 + }
  647 + String gs="";
  648 + if(map.get("gs")!=null){
  649 + gs=map.get("gs").toString();
  650 + }
  651 + String fgs="";
  652 + if(map.get("fgs")!=null){
  653 + fgs=map.get("fgs").toString();
  654 + }
  655 + String date=map.get("date").toString();
  656 + String sql="select * from bsth_c_sheet where date='"+date+"'";
  657 + if(line.trim().equals("")){
  658 + sql +=" and gs like '%"+gs+"%' and fgs like '%"+fgs+"%'";
  659 + }else{
  660 + sql +=" and line ='"+line+"'";
  661 + }
  662 + sql +=" order by line ";
  663 + List<Sheet> list=jdbcTemplate.query(sql,
  664 + new RowMapper<Sheet>(){
  665 + @Override
  666 + public Sheet mapRow(ResultSet rs, int rowNum) throws SQLException {
  667 + Sheet s=new Sheet();
  668 + s.setGs(rs.getString("gs"));
  669 + s.setFgs(rs.getString("fgs"));
  670 + s.setLine(rs.getString("line"));
  671 + s.setDate(rs.getString("date"));
  672 + s.setJhsj(rs.getString("jhsj"));
  673 + s.setJhsjt(rs.getLong("jhsjt"));
  674 + s.setSjsj(rs.getString("sjsj"));
  675 + s.setSjsjt(rs.getLong("sjsjt"));
  676 + s.setId(rs.getInt("id"));
  677 + return s;
  678 + }
  679 + });
  680 +
  681 + String sqlByLine="select line from bsth_c_sheet where date='"+date+"'";
  682 + if(line.trim().equals("")){
  683 + sqlByLine +=" and gs like '%"+gs+"%' and fgs like '%"+fgs+"%'";
  684 + }else{
  685 + sqlByLine +=" and line ='"+line+"'";
  686 + }
  687 + sqlByLine +=" group by line ";
  688 + List<String> listLine=jdbcTemplate.query(sqlByLine,
  689 + new RowMapper<String>(){
  690 + @Override
  691 + public String mapRow(ResultSet rs, int rowNum) throws SQLException {
  692 + String line=rs.getString("line");
  693 + return line;
  694 + }
  695 + });
  696 + for (int i = 0; i < listLine.size(); i++) {
  697 + String xlbm=listLine.get(i);
  698 + List<Sheet> newList=new ArrayList<Sheet>();
  699 + for (int j = 0; j < list.size(); j++) {
  700 + if(xlbm.equals(list.get(j).getLine())){
  701 + newList.add(list.get(j));
  702 + }
  703 + }
  704 +
  705 + if(newList.size()>0){
  706 + Map<String, Object> newmap=culateByLine(newList);
  707 + listmap.add(newmap);
  708 + }
  709 +
  710 + }
  711 + return listmap;
  712 + }
  713 +
  714 + public Map<String, Object> culateByLine(List<Sheet> list){
  715 + Map<String, Object> map=new HashMap<String,Object>();
  716 + String gs=BasicData.businessCodeNameMap.get(list.get(0).getGs());
  717 + String fgs=BasicData.businessFgsCodeNameMap.get(list.get(0).getFgs()+"_"+list.get(0).getGs());
  718 + String line=BasicData.lineCode2NameMap.get(list.get(0).getLine());
  719 + Integer id=list.get(0).getId();
  720 + int bcs=list.size();
  721 + int zdbcs=0;
  722 + for (int i = 0; i < list.size(); i++) {
  723 + Sheet s=list.get(i);
  724 + Long sjc=s.getJhsjt()-s.getSjsjt();
  725 + if(sjc>= 3*60*1000*-1 && sjc <=1*60*1000){
  726 + zdbcs++;
  727 + }
  728 + }
  729 + double zdlv =(zdbcs*1.0/bcs)*100;
  730 + DecimalFormat df = new DecimalFormat("0.00");
  731 + map.put("gs", gs);
  732 + map.put("fgs", fgs);
  733 + map.put("line", line);
  734 + map.put("bcs", bcs);
  735 + map.put("zdbcs", zdbcs);
  736 + map.put("zdlv", df.format(zdlv)+"%");
  737 + map.put("id", id);
  738 + return map;
  739 + }
  740 + @Override
  741 + public List<Sheet> sheetList(Integer id) {
  742 + // TODO Auto-generated method stub
  743 + Sheet sheet=sheetRepository.findOne(id);
  744 + String sql="select * from bsth_c_sheet where date='"+sheet.getDate()+"' and line = '"+sheet.getLine()+"'"
  745 + + " order by xl_dir,jhsj";
  746 +
  747 + List<Sheet> list=jdbcTemplate.query(sql,
  748 + new RowMapper<Sheet>(){
  749 + @Override
  750 + public Sheet mapRow(ResultSet rs, int rowNum) throws SQLException {
  751 + Sheet s=new Sheet();
  752 + s.setId(rs.getInt("id"));
  753 + s.setGs(rs.getString("gs"));
  754 + s.setFgs(rs.getString("fgs"));
  755 + s.setLine(rs.getString("line"));
  756 + s.setDate(rs.getString("date"));
  757 + s.setJhsj(rs.getString("jhsj"));
  758 + s.setJhsjt(rs.getLong("jhsjt"));
  759 + s.setSjsj(rs.getString("sjsj"));
  760 + s.setSjsjt(rs.getLong("sjsjt"));
  761 + s.setZdname(rs.getString("zdname"));
  762 + return s;
  763 + }
  764 + });
  765 + for (int i = 0; i < list.size(); i++) {
  766 + Sheet t=list.get(i);
  767 + t.setLine(BasicData.lineCode2NameMap.get(t.getLine()));
  768 + Long sjc=t.getJhsjt()-t.getSjsjt();
  769 + if(sjc>= 3*60*1000*-1 && sjc <=1*60*1000){
  770 + t.setSfzd("Y");
  771 + }else{
  772 + t.setSfzd("N");
  773 + }
  774 + }
  775 +
  776 + return list;
  777 + }
  778 +
  779 +
  780 +}
  781 + class ComparableAcual implements Comparator<ScheduleRealInfo>{
  782 +
  783 + @Override
  784 + public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
  785 + // TODO Auto-generated method stub
  786 + return o1.getFcsjActualTime().compareTo(o2.getFcsjActualTime());
  787 + }
  788 +
  789 +}
  790 +
  791 + class ComparableMap implements Comparator<Map<String, Object>>{
  792 + @Override
  793 + public int compare(Map<String, Object> o1, Map<String, Object> o2) {
  794 + // TODO Auto-generated method stub
  795 + return (int) (Long.parseLong(o1.get("abs").toString())-Long.parseLong((o2.get("abs").toString())));
  796 + }
  797 + }
... ...
src/main/java/com/bsth/service/schedule/datatools/TTInfoDetailDataToolsImpl.java
1   -package com.bsth.service.schedule.datatools;
2   -
3   -import com.bsth.service.schedule.exception.ScheduleException;
4   -import com.bsth.service.schedule.utils.DataToolsProperties;
5   -import com.bsth.service.schedule.utils.DataToolsService;
6   -import jxl.Cell;
7   -import jxl.Sheet;
8   -import jxl.Workbook;
9   -import jxl.write.Label;
10   -import jxl.write.WritableSheet;
11   -import jxl.write.WritableWorkbook;
12   -import org.apache.commons.lang3.StringUtils;
13   -import org.joda.time.DateTime;
14   -import org.slf4j.Logger;
15   -import org.slf4j.LoggerFactory;
16   -import org.springframework.beans.factory.annotation.Autowired;
17   -import org.springframework.beans.factory.annotation.Qualifier;
18   -import org.springframework.boot.context.properties.EnableConfigurationProperties;
19   -import org.springframework.stereotype.Service;
20   -
21   -import java.io.File;
22   -import java.io.PrintWriter;
23   -import java.io.StringWriter;
24   -import java.util.*;
25   -
26   -/**
27   - * Created by xu on 17/5/16.
28   - */
29   -@EnableConfigurationProperties(DataToolsProperties.class)
30   -@Service(value = "ttInfoDetail_dataTool")
31   -public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetailForEdit {
32   - /** 日志记录器 */
33   - private final static Logger LOGGER = LoggerFactory.getLogger(TTInfoDetailDataToolsImpl.class);
34   -
35   - @Autowired
36   - @Qualifier(value = "dataToolsServiceImpl")
37   - private DataToolsService dataToolsService;
38   -
39   - @Autowired
40   - private DataToolsProperties dataToolsProperties;
41   -
42   - @Override
43   - public File uploadFile(String filename, byte[] filedata) throws ScheduleException {
44   - try {
45   - // 对上传的excel文件做处理,将第一个sheet名字设定为工作表1
46   - File file = dataToolsService.uploadFile(filename, filedata);
47   - Workbook workbook = Workbook.getWorkbook(file);
48   - Sheet sheet = workbook.getSheet(0);
49   -
50   - File fileCal = new File(file.getAbsolutePath() + "_sheetChange.xls");
51   - WritableWorkbook writableWorkbook = Workbook.createWorkbook(fileCal);
52   - WritableSheet writableSheet = writableWorkbook.createSheet("工作表1", 0);
53   - for (int i = 0; i < sheet.getRows(); i++) {
54   - Cell[] cells = sheet.getRow(i);
55   - for (int j = 0; j < cells.length; j++) {
56   - writableSheet.addCell(new Label(j, i, cells[j].getContents()));
57   - }
58   - }
59   - writableWorkbook.write();
60   - writableWorkbook.close();
61   -
62   - return fileCal;
63   -
64   - } catch (Exception exp) {
65   - throw new ScheduleException(exp);
66   - }
67   - }
68   -
69   - @Override
70   - public void importData(File file, Map<String, Object> params) throws ScheduleException {
71   - try {
72   - LOGGER.info("//---------------- 导入时刻表明细 start... ----------------//");
73   -
74   - String filename = file.getAbsolutePath(); // xls文件名
75   - String sheetname = String.valueOf(params.get("sheetname")); // sheet名字
76   - Long ttid = Long.valueOf(String.valueOf(params.get("ttid"))); // 时刻表id
77   - Long xlid = Long.valueOf(String.valueOf(params.get("xlid"))); // 线路id
78   - Integer lineid = Integer.valueOf(String.valueOf(params.get("lineinfo"))); // 线路标准id
79   - String xlname = String.valueOf(params.get("xlname")); // 线路名字
80   - String ttname = String.valueOf(params.get("ttname")); // 时刻表名字
81   -
82   - LOGGER.info("参数1, xls文件名={},sheet名字={}", filename, sheetname);
83   - LOGGER.info("参数2, 线路id={},线路名字={}", xlid, xlname);
84   - LOGGER.info("参数3, 时刻表id={},时刻表名字={}", ttid, ttname);
85   -
86   - LOGGER.info("转换xls文件格式成文本格式...");
87   - // 1、修改已经上传的excel文件,在每个起点站后标示数字,表示第几个班次
88   - // 2、由于格式问题,需要把内容都转换成字符串
89   - List<String> colList = new ArrayList<>();
90   - Workbook workbook = Workbook.getWorkbook(new File(filename));
91   - Sheet sheet = workbook.getSheet(sheetname);
92   - Cell[] cells = sheet.getRow(0);
93   - for (int i = 0; i < cells.length; i++) {
94   - if (i == 0) {
95   - colList.add(cells[i].getContents().trim());
96   - } else {
97   - colList.add(cells[i].getContents() + i);
98   - }
99   - }
100   -
101   - File fileCal = new File(filename + "_stringType.xls");
102   - WritableWorkbook writableWorkbook = Workbook.createWorkbook(fileCal, workbook);
103   - WritableSheet sheet1 = writableWorkbook.getSheet(sheetname);
104   - for (int i = 0; i < sheet1.getColumns(); i++) { // 第一行数据
105   - sheet1.addCell(new Label(i, 0, colList.get(i)));
106   - }
107   - for (int i = 1; i < sheet1.getRows(); i++) { // 第二行开始
108   - Cell[] cells1 = sheet.getRow(i);
109   - for (int j = 0; j < cells1.length; j++) {
110   - sheet1.addCell(new Label(j, i, cells1[j].getContents()));
111   - }
112   - }
113   - writableWorkbook.write();
114   - writableWorkbook.close();
115   -
116   - // 2、删除原有数据
117   - // 操作在ktr内部执行
118   -
119   - // 3、导入时刻表
120   -
121   - // 计算表头参数
122   - Workbook book = Workbook.getWorkbook(fileCal);
123   - Sheet sheet_exp = book.getSheet(sheetname);
124   - List<String> columnames = new ArrayList<>();
125   - for (int i = 0; i < sheet_exp.getColumns(); i++) { // 获取第一行,数据,作为列名
126   - columnames.add(sheet_exp.getCell(i, 0).getContents());
127   - }
128   - LOGGER.info("表头={}", StringUtils.join(columnames.toArray(), ","));
129   -
130   - // 创建ktr转换所需参数
131   - Map<String, Object> ktrParms = new HashMap<>();
132   - File ktrFile = new File(this.getClass().getResource(
133   - dataToolsProperties.getTtinfodetailMetadatainputktr()).toURI());
134   -// File ktrFile2 = new File(this.getClass().getResource(
135   -// dataToolsProperties.getTtinfodetailDatainputktr()).toURI());
136   - File ktrFile2 = new File(this.getClass().getResource(
137   - dataToolsProperties.getTtinfodetailDatainputktr2()).toURI());
138   -
139   - // 通用参数,转换文件路径,excel输入文件路径,错误输出文件路径
140   - ktrParms.put("transpath", ktrFile.getAbsolutePath());
141   - ktrParms.put("filepath", fileCal.getAbsolutePath());
142   - ktrParms.put("erroroutputdir", dataToolsProperties.getTransErrordir());
143   -
144   - // 附加参数
145   - ktrParms.put("injectktrfile", ktrFile2.getAbsolutePath()); // 注入元数据的ktr文件
146   - ktrParms.put("sheetname", sheetname); // sheet工作区的名字
147   - ktrParms.put("lineinfoid", lineid); // 线路标准id
148   - ktrParms.put("xlname", xlname); // 线路名称
149   - ktrParms.put("ttinfoname", ttname); // 时刻表名称
150   - ktrParms.put("ttid", ttid.intValue()); // 时刻表id
151   - ktrParms.put("excelfieldnames", StringUtils.join(columnames.toArray(), ",")); // 时刻表excel输入字段名,以逗号连接
152   - columnames.remove(0);
153   - ktrParms.put("normalizefieldnames", StringUtils.join(columnames.toArray(), ",")); // 数据范式化字段名,以逗号连接
154   -
155   - dataToolsService.importData(fileCal, ktrParms);
156   -
157   - LOGGER.info("//---------------- 导入时刻表明细 success... ----------------//");
158   - } catch (Exception exp) {
159   - LOGGER.info("//---------------- 导入时刻表明细 failed... ----------------//");
160   -
161   - StringWriter sw = new StringWriter();
162   - exp.printStackTrace(new PrintWriter(sw));
163   - LOGGER.info(sw.toString());
164   -
165   - throw new ScheduleException(exp.getMessage());
166   - }
167   - }
168   -
169   - @Override
170   - public File exportData(Map<String, Object> params) throws ScheduleException {
171   - try {
172   - LOGGER.info("//---------------- 导出时刻表明细 start... ----------------//");
173   -
174   - // 创建ktr转换所需参数
175   - Map<String, Object> ktrParms = new HashMap<>();
176   - File ktrFile = new File(this.getClass().getResource(
177   - dataToolsProperties.getTtinfodetailMetaoutput()).toURI());
178   - File ktrFile2 = new File(this.getClass().getResource(
179   - dataToolsProperties.getTtinfodetailOutput()).toURI());
180   -
181   - // 通用参数,转换文件路径,excel输出文件名
182   - ktrParms.put("transpath", ktrFile.getAbsolutePath());
183   - ktrParms.put("filename", String.format("时刻表_(id=%s)_download-", String.valueOf(params.get("ttinfoid"))));
184   -
185   - // 附加参数
186   - ktrParms.put("injectktrfile", ktrFile2.getAbsolutePath()); // 注入元数据的ktr文件
187   - ktrParms.put("ttinfoid", String.valueOf(params.get("ttinfoid")));
188   -
189   - File file = dataToolsService.exportData(ktrParms);
190   -
191   - LOGGER.info("//---------------- 导出时刻表明细 success... ----------------//");
192   -
193   - return file;
194   - } catch (Exception exp) {
195   - LOGGER.info("//---------------- 导出时刻表明细 failed... ----------------//");
196   -
197   - StringWriter sw = new StringWriter();
198   - exp.printStackTrace(new PrintWriter(sw));
199   - LOGGER.info(sw.toString());
200   -
201   - throw new ScheduleException(exp.getMessage());
202   - }
203   - }
204   -
205   - @Override
206   - public EditInfo getEditInfo(Integer xlid, Long ttid, Long maxfcno) throws ScheduleException {
207   - try {
208   - LOGGER.info("//---------------- 时刻表编辑用数据输出 start... ----------------//");
209   -
210   - // 创建ktr转换所需参数
211   - Map<String, Object> ktrParms = new HashMap<>();
212   - File ktrFile = new File(this.getClass().getResource(
213   - dataToolsProperties.getTtinfodetailForeditktr()).toURI());
214   -
215   - // 通用参数,转换文件路径,excel输出文件名,错误输出文件路径
216   - ktrParms.put("transpath", ktrFile.getAbsolutePath());
217   - ktrParms.put("filename", "todo");
218   -
219   - // 附加参数
220   - String outputFilePath = String.format("ttinfodetail_(id=%s)_foredit-%s",
221   - String.valueOf(ttid), new DateTime().toString("yyyyMMddHHmmss"));
222   -
223   - ktrParms.put("tempfilepath", dataToolsProperties.getTransTempdir() + File.separator + outputFilePath); // 数据输出文件路径
224   - ktrParms.put("xlid", String.valueOf(xlid));
225   - ktrParms.put("ttid", String.valueOf(ttid));
226   -
227   - dataToolsService.exportData(ktrParms);
228   -
229   - EditInfo editInfo = new EditInfo(); // 输出数据
230   -
231   -
232   - // 1.6、获取最大的发车数,用于输出数据的数量
233   - LOGGER.info("最大发车顺序号={}", maxfcno);
234   - if (maxfcno != null) {
235   - // 2、读取ktr生成的excel数据,组织编辑用数据返回
236   - // 2-1、读取Excel文件
237   - Workbook book = Workbook.getWorkbook(new File(dataToolsProperties.getTransTempdir() +
238   - File.separator + outputFilePath + ".xls"));
239   - Sheet sheet = book.getSheet(0);
240   -
241   - // 2-2、处理数据
242   - int all_bc_ks = 0; // 总空驶班次
243   - int all_bc_yy = 0; // 总营运班次
244   - double all_lc_ks = 0; // 总空驶里程
245   - double all_lc_yy = 0; // 总营运里程
246   -
247   - String[] headarrays = new String[maxfcno.intValue() + 3];
248   - headarrays[0] = "路牌";
249   - headarrays[maxfcno.intValue() + 1] = "空驶班次/空驶里程";
250   - headarrays[maxfcno.intValue() + 2] = "运营班次/运营里程";
251   -
252   - for (int r = 1; r < sheet.getRows(); r++) {
253   - List<FcInfo> fcInfos = new ArrayList<>();
254   - // 每行第一列都是路牌
255   - fcInfos.add(new FcInfo(null, null, sheet.getCell(0, r).getContents(), null, null, null, null)); // 用fcsj放置路牌显示
256   -
257   - int bc_ks = 0; // 空驶班次
258   - int bc_yy = 0; // 营运班次
259   - double lc_ks = 0; // 空驶里程
260   - double lc_yy = 0; // 营运里程
261   -
262   - for (int c = 1; c <= maxfcno; c++) {
263   - String content_str = sheet.getCell(c, r).getContents();
264   - try {
265   - String[] content = StringUtils.isEmpty(content_str) ? null : content_str.split(","); // 总的内容
266   -
267   - String ttdid_str = content == null ? "" : content[0]; // 时刻表明细id
268   - String fcsj = content == null ? "" : content[1]; // 发车时间
269   - String jhlc = content == null ? "" : content[2]; // 计划里程
270   - String fzdname = content == null ? "" : content[3]; // 发车站点名称
271   - String bctype = content == null ? "" : content[4]; // 班次类型
272   - String xldir = content == null ? "" : content[5]; // 线路上下行
273   - String isfb = content == null ? "" : content[6]; // 是否分班
274   -
275   - String qdzCode = content == null ? "" : content[7]; // 起点站编码
276   - String zdzCode = content == null ? "" : content[8]; // 终点站编码
277   -
278   - FcInfo fcInfo = new FcInfo(ttdid_str, bctype, fcsj, xldir, isfb, qdzCode, zdzCode);
279   -
280   - if (StringUtils.isNotEmpty(fzdname))
281   - headarrays[c] = fzdname;
282   - fcInfos.add(fcInfo);
283   -
284   -
285   - // 计算班次里程
286   - if (StringUtils.isNotEmpty(jhlc)) {
287   - if ("in".equals(bctype) || "out".equals(bctype) || "ldks".equals(bctype)) {
288   - bc_ks += 1;
289   - lc_ks += Double.valueOf(jhlc);
290   -
291   - all_bc_ks += 1;
292   - all_lc_ks += Double.valueOf(jhlc);
293   -
294   - } else {
295   - bc_yy += 1;
296   - lc_yy += Double.valueOf(jhlc);
297   -
298   - all_bc_yy += 1;
299   - all_lc_yy += Double.valueOf(jhlc);
300   - }
301   - }
302   -
303   - } catch (Exception exp) {
304   - exp.printStackTrace();
305   - LOGGER.info("第{}行,第{}列数据有问题,数据={},异常message={}", r, c, content_str, exp.getCause());
306   - break;
307   - }
308   -
309   - }
310   -
311   - // 添加一列 空驶班次/空驶里程,fcsj放置数据
312   - fcInfos.add(new FcInfo(null, null, String.format("%d/%.3f", bc_ks, lc_ks), null, null, null, null));
313   -
314   - // 添加一列 营运班次/营运里程,fcsj放置数据
315   - fcInfos.add(new FcInfo(null, null, String.format("%d/%.3f", bc_yy, lc_yy), null, null, null, null));
316   -
317   - editInfo.getContents().add(fcInfos);
318   - }
319   - editInfo.getHeader().addAll(Arrays.asList(headarrays));
320   -
321   - editInfo.setYy_desc(String.format("空驶班次=%d,营运班次=%d,空驶里程=%.3f,营运里程=%.3f,总里程=%.3f", all_bc_ks, all_bc_yy, all_lc_ks, all_lc_yy, all_lc_ks + all_lc_yy));
322   - }
323   -
324   - LOGGER.info("//---------------- 时刻表编辑用数据输出 success... ----------------//");
325   -
326   - return editInfo;
327   - } catch (Exception exp) {
328   - LOGGER.info("//---------------- 时刻表编辑用数据输出 failed... ----------------//");
329   -
330   - StringWriter sw = new StringWriter();
331   - exp.printStackTrace(new PrintWriter(sw));
332   - LOGGER.info(sw.toString());
333   -
334   - throw new ScheduleException(exp.getMessage());
335   - }
336   - }
337   -
338   -}
  1 +package com.bsth.service.schedule.datatools;
  2 +
  3 +import com.bsth.service.schedule.exception.ScheduleException;
  4 +import com.bsth.service.schedule.utils.DataToolsProperties;
  5 +import com.bsth.service.schedule.utils.DataToolsService;
  6 +import jxl.Cell;
  7 +import jxl.Sheet;
  8 +import jxl.Workbook;
  9 +import jxl.write.Label;
  10 +import jxl.write.WritableSheet;
  11 +import jxl.write.WritableWorkbook;
  12 +import org.apache.commons.lang3.StringUtils;
  13 +import org.joda.time.DateTime;
  14 +import org.slf4j.Logger;
  15 +import org.slf4j.LoggerFactory;
  16 +import org.springframework.beans.factory.annotation.Autowired;
  17 +import org.springframework.beans.factory.annotation.Qualifier;
  18 +import org.springframework.boot.context.properties.EnableConfigurationProperties;
  19 +import org.springframework.stereotype.Service;
  20 +
  21 +import java.io.File;
  22 +import java.io.PrintWriter;
  23 +import java.io.StringWriter;
  24 +import java.util.*;
  25 +
  26 +/**
  27 + * Created by xu on 17/5/16.
  28 + */
  29 +@EnableConfigurationProperties(DataToolsProperties.class)
  30 +@Service(value = "ttInfoDetail_dataTool")
  31 +public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetailForEdit {
  32 + /** 日志记录器 */
  33 + private final static Logger LOGGER = LoggerFactory.getLogger(TTInfoDetailDataToolsImpl.class);
  34 +
  35 + @Autowired
  36 + @Qualifier(value = "dataToolsServiceImpl")
  37 + private DataToolsService dataToolsService;
  38 +
  39 + @Autowired
  40 + private DataToolsProperties dataToolsProperties;
  41 +
  42 + @Override
  43 + public File uploadFile(String filename, byte[] filedata) throws ScheduleException {
  44 + try {
  45 + // 对上传的excel文件做处理,将第一个sheet名字设定为工作表1
  46 + File file = dataToolsService.uploadFile(filename, filedata);
  47 + Workbook workbook = Workbook.getWorkbook(file);
  48 + Sheet sheet = workbook.getSheet(0);
  49 +
  50 + File fileCal = new File(file.getAbsolutePath() + "_sheetChange.xls");
  51 + WritableWorkbook writableWorkbook = Workbook.createWorkbook(fileCal);
  52 + WritableSheet writableSheet = writableWorkbook.createSheet("工作表1", 0);
  53 + for (int i = 0; i < sheet.getRows(); i++) {
  54 + Cell[] cells = sheet.getRow(i);
  55 + for (int j = 0; j < cells.length; j++) {
  56 + writableSheet.addCell(new Label(j, i, cells[j].getContents()));
  57 + }
  58 + }
  59 + writableWorkbook.write();
  60 + writableWorkbook.close();
  61 +
  62 + return fileCal;
  63 +
  64 + } catch (Exception exp) {
  65 + throw new ScheduleException(exp);
  66 + }
  67 + }
  68 +
  69 + @Override
  70 + public void importData(File file, Map<String, Object> params) throws ScheduleException {
  71 + try {
  72 + LOGGER.info("//---------------- 导入时刻表明细 start... ----------------//");
  73 +
  74 + String filename = file.getAbsolutePath(); // xls文件名
  75 + String sheetname = String.valueOf(params.get("sheetname")); // sheet名字
  76 + Long ttid = Long.valueOf(String.valueOf(params.get("ttid"))); // 时刻表id
  77 + Long xlid = Long.valueOf(String.valueOf(params.get("xlid"))); // 线路id
  78 + Integer lineid = Integer.valueOf(String.valueOf(params.get("lineinfo"))); // 线路标准id
  79 + String xlname = String.valueOf(params.get("xlname")); // 线路名字
  80 + String ttname = String.valueOf(params.get("ttname")); // 时刻表名字
  81 +
  82 + LOGGER.info("参数1, xls文件名={},sheet名字={}", filename, sheetname);
  83 + LOGGER.info("参数2, 线路id={},线路名字={}", xlid, xlname);
  84 + LOGGER.info("参数3, 时刻表id={},时刻表名字={}", ttid, ttname);
  85 +
  86 + LOGGER.info("转换xls文件格式成文本格式...");
  87 + // 1、修改已经上传的excel文件,在每个起点站后标示数字,表示第几个班次
  88 + // 2、由于格式问题,需要把内容都转换成字符串
  89 + List<String> colList = new ArrayList<>();
  90 + Workbook workbook = Workbook.getWorkbook(new File(filename));
  91 + Sheet sheet = workbook.getSheet(sheetname);
  92 + Cell[] cells = sheet.getRow(0);
  93 + for (int i = 0; i < cells.length; i++) {
  94 + if (i == 0) {
  95 + colList.add(cells[i].getContents().trim());
  96 + } else {
  97 + colList.add(cells[i].getContents() + i);
  98 + }
  99 + }
  100 +
  101 + File fileCal = new File(filename + "_stringType.xls");
  102 + WritableWorkbook writableWorkbook = Workbook.createWorkbook(fileCal, workbook);
  103 + WritableSheet sheet1 = writableWorkbook.getSheet(sheetname);
  104 + for (int i = 0; i < sheet1.getColumns(); i++) { // 第一行数据
  105 + sheet1.addCell(new Label(i, 0, colList.get(i)));
  106 + }
  107 + for (int i = 1; i < sheet1.getRows(); i++) { // 第二行开始
  108 + Cell[] cells1 = sheet.getRow(i);
  109 + for (int j = 0; j < cells1.length; j++) {
  110 + sheet1.addCell(new Label(j, i, cells1[j].getContents()));
  111 + }
  112 + }
  113 + writableWorkbook.write();
  114 + writableWorkbook.close();
  115 +
  116 + // 2、删除原有数据
  117 + // 操作在ktr内部执行
  118 +
  119 + // 3、导入时刻表
  120 +
  121 + // 计算表头参数
  122 + Workbook book = Workbook.getWorkbook(fileCal);
  123 + Sheet sheet_exp = book.getSheet(sheetname);
  124 + List<String> columnames = new ArrayList<>();
  125 + for (int i = 0; i < sheet_exp.getColumns(); i++) { // 获取第一行,数据,作为列名
  126 + columnames.add(sheet_exp.getCell(i, 0).getContents());
  127 + }
  128 + LOGGER.info("表头={}", StringUtils.join(columnames.toArray(), ","));
  129 +
  130 + // 创建ktr转换所需参数
  131 + Map<String, Object> ktrParms = new HashMap<>();
  132 + File ktrFile = new File(this.getClass().getResource(
  133 + dataToolsProperties.getTtinfodetailMetadatainputktr()).toURI());
  134 +// File ktrFile2 = new File(this.getClass().getResource(
  135 +// dataToolsProperties.getTtinfodetailDatainputktr()).toURI());
  136 + File ktrFile2 = new File(this.getClass().getResource(
  137 + dataToolsProperties.getTtinfodetailDatainputktr2()).toURI());
  138 +
  139 + // 通用参数,转换文件路径,excel输入文件路径,错误输出文件路径
  140 + ktrParms.put("transpath", ktrFile.getAbsolutePath());
  141 + ktrParms.put("filepath", fileCal.getAbsolutePath());
  142 + ktrParms.put("erroroutputdir", dataToolsProperties.getTransErrordir());
  143 +
  144 + // 附加参数
  145 + ktrParms.put("injectktrfile", ktrFile2.getAbsolutePath()); // 注入元数据的ktr文件
  146 + ktrParms.put("sheetname", sheetname); // sheet工作区的名字
  147 + ktrParms.put("lineinfoid", lineid); // 线路标准id
  148 + ktrParms.put("xlname", xlname); // 线路名称
  149 + ktrParms.put("ttinfoname", ttname); // 时刻表名称
  150 + ktrParms.put("ttid", ttid.intValue()); // 时刻表id
  151 + ktrParms.put("excelfieldnames", StringUtils.join(columnames.toArray(), ",")); // 时刻表excel输入字段名,以逗号连接
  152 + columnames.remove(0);
  153 + ktrParms.put("normalizefieldnames", StringUtils.join(columnames.toArray(), ",")); // 数据范式化字段名,以逗号连接
  154 +
  155 + dataToolsService.importData(fileCal, ktrParms);
  156 +
  157 + LOGGER.info("//---------------- 导入时刻表明细 success... ----------------//");
  158 + } catch (Exception exp) {
  159 + LOGGER.info("//---------------- 导入时刻表明细 failed... ----------------//");
  160 +
  161 + StringWriter sw = new StringWriter();
  162 + exp.printStackTrace(new PrintWriter(sw));
  163 + LOGGER.info(sw.toString());
  164 +
  165 + throw new ScheduleException(exp.getMessage());
  166 + }
  167 + }
  168 +
  169 + @Override
  170 + public File exportData(Map<String, Object> params) throws ScheduleException {
  171 + try {
  172 + LOGGER.info("//---------------- 导出时刻表明细 start... ----------------//");
  173 +
  174 + // 创建ktr转换所需参数
  175 + Map<String, Object> ktrParms = new HashMap<>();
  176 + File ktrFile = new File(this.getClass().getResource(
  177 + dataToolsProperties.getTtinfodetailMetaoutput()).toURI());
  178 + File ktrFile2 = new File(this.getClass().getResource(
  179 + dataToolsProperties.getTtinfodetailOutput()).toURI());
  180 +
  181 + // 通用参数,转换文件路径,excel输出文件名
  182 + ktrParms.put("transpath", ktrFile.getAbsolutePath());
  183 + ktrParms.put("filename", String.format("时刻表_(id=%s)_download-", String.valueOf(params.get("ttinfoid"))));
  184 +
  185 + // 附加参数
  186 + ktrParms.put("injectktrfile", ktrFile2.getAbsolutePath()); // 注入元数据的ktr文件
  187 + ktrParms.put("ttinfoid", String.valueOf(params.get("ttinfoid")));
  188 +
  189 + File file = dataToolsService.exportData(ktrParms);
  190 +
  191 + LOGGER.info("//---------------- 导出时刻表明细 success... ----------------//");
  192 +
  193 + return file;
  194 + } catch (Exception exp) {
  195 + LOGGER.info("//---------------- 导出时刻表明细 failed... ----------------//");
  196 +
  197 + StringWriter sw = new StringWriter();
  198 + exp.printStackTrace(new PrintWriter(sw));
  199 + LOGGER.info(sw.toString());
  200 +
  201 + throw new ScheduleException(exp.getMessage());
  202 + }
  203 + }
  204 +
  205 + @Override
  206 + public EditInfo getEditInfo(Integer xlid, Long ttid, Long maxfcno) throws ScheduleException {
  207 + try {
  208 + LOGGER.info("//---------------- 时刻表编辑用数据输出 start... ----------------//");
  209 +
  210 + // 创建ktr转换所需参数
  211 + Map<String, Object> ktrParms = new HashMap<>();
  212 + File ktrFile = new File(this.getClass().getResource(
  213 + dataToolsProperties.getTtinfodetailForeditktr()).toURI());
  214 +
  215 + // 通用参数,转换文件路径,excel输出文件名,错误输出文件路径
  216 + ktrParms.put("transpath", ktrFile.getAbsolutePath());
  217 + ktrParms.put("filename", "todo");
  218 +
  219 + // 附加参数
  220 + String outputFilePath = String.format("ttinfodetail_(id=%s)_foredit-%s",
  221 + String.valueOf(ttid), new DateTime().toString("yyyyMMddHHmmss"));
  222 +
  223 + ktrParms.put("tempfilepath", dataToolsProperties.getTransTempdir() + File.separator + outputFilePath); // 数据输出文件路径
  224 + ktrParms.put("xlid", String.valueOf(xlid));
  225 + ktrParms.put("ttid", String.valueOf(ttid));
  226 +
  227 + dataToolsService.exportData(ktrParms);
  228 +
  229 + EditInfo editInfo = new EditInfo(); // 输出数据
  230 +
  231 +
  232 + // 1.6、获取最大的发车数,用于输出数据的数量
  233 + LOGGER.info("最大发车顺序号={}", maxfcno);
  234 + if (maxfcno != null) {
  235 + // 2、读取ktr生成的excel数据,组织编辑用数据返回
  236 + // 2-1、读取Excel文件
  237 + Workbook book = Workbook.getWorkbook(new File(dataToolsProperties.getTransTempdir() +
  238 + File.separator + outputFilePath + ".xls"));
  239 + Sheet sheet = book.getSheet(0);
  240 +
  241 + // 2-2、处理数据
  242 + int all_bc_ks = 0; // 总空驶班次
  243 + int all_bc_yy = 0; // 总营运班次
  244 + double all_lc_ks = 0; // 总空驶里程
  245 + double all_lc_yy = 0; // 总营运里程
  246 +
  247 + String[] headarrays = new String[maxfcno.intValue() + 3];
  248 + headarrays[0] = "路牌";
  249 + headarrays[maxfcno.intValue() + 1] = "空驶班次/空驶里程";
  250 + headarrays[maxfcno.intValue() + 2] = "运营班次/运营里程";
  251 +
  252 + for (int r = 1; r < sheet.getRows(); r++) {
  253 + List<FcInfo> fcInfos = new ArrayList<>();
  254 + // 每行第一列都是路牌
  255 + fcInfos.add(new FcInfo(null, null, sheet.getCell(0, r).getContents(), null, null, null, null)); // 用fcsj放置路牌显示
  256 +
  257 + int bc_ks = 0; // 空驶班次
  258 + int bc_yy = 0; // 营运班次
  259 + double lc_ks = 0; // 空驶里程
  260 + double lc_yy = 0; // 营运里程
  261 +
  262 + for (int c = 1; c <= maxfcno; c++) {
  263 + String content_str = sheet.getCell(c, r).getContents();
  264 + try {
  265 + String[] content = StringUtils.isEmpty(content_str) ? null : content_str.split(","); // 总的内容
  266 +
  267 + String ttdid_str = content == null ? "" : content[0]; // 时刻表明细id
  268 + String fcsj = content == null ? "" : content[1]; // 发车时间
  269 + String jhlc = content == null ? "" : content[2]; // 计划里程
  270 + String fzdname = content == null ? "" : content[3]; // 发车站点名称
  271 + String bctype = content == null ? "" : content[4]; // 班次类型
  272 + String xldir = content == null ? "" : content[5]; // 线路上下行
  273 + String isfb = content == null ? "" : content[6]; // 是否分班
  274 +
  275 + String qdzCode = content == null ? "" : content[7]; // 起点站编码
  276 + String zdzCode = content == null ? "" : content[8]; // 终点站编码
  277 +
  278 + FcInfo fcInfo = new FcInfo(ttdid_str, bctype, fcsj, xldir, isfb, qdzCode, zdzCode);
  279 +
  280 + if (StringUtils.isNotEmpty(fzdname))
  281 + headarrays[c] = fzdname;
  282 + fcInfos.add(fcInfo);
  283 +
  284 +
  285 + // 计算班次里程
  286 + if (StringUtils.isNotEmpty(jhlc)) {
  287 + if ("in".equals(bctype) || "out".equals(bctype) || "ldks".equals(bctype)) {
  288 + bc_ks += 1;
  289 + lc_ks += Double.valueOf(jhlc);
  290 +
  291 + all_bc_ks += 1;
  292 + all_lc_ks += Double.valueOf(jhlc);
  293 +
  294 + } else {
  295 + bc_yy += 1;
  296 + lc_yy += Double.valueOf(jhlc);
  297 +
  298 + all_bc_yy += 1;
  299 + all_lc_yy += Double.valueOf(jhlc);
  300 + }
  301 + }
  302 +
  303 + } catch (Exception exp) {
  304 + exp.printStackTrace();
  305 + LOGGER.info("第{}行,第{}列数据有问题,数据={},异常message={}", r, c, content_str, exp.getCause());
  306 + break;
  307 + }
  308 +
  309 + }
  310 +
  311 + // 添加一列 空驶班次/空驶里程,fcsj放置数据
  312 + fcInfos.add(new FcInfo(null, null, String.format("%d/%.3f", bc_ks, lc_ks), null, null, null, null));
  313 +
  314 + // 添加一列 营运班次/营运里程,fcsj放置数据
  315 + fcInfos.add(new FcInfo(null, null, String.format("%d/%.3f", bc_yy, lc_yy), null, null, null, null));
  316 +
  317 + editInfo.getContents().add(fcInfos);
  318 + }
  319 + editInfo.getHeader().addAll(Arrays.asList(headarrays));
  320 +
  321 + editInfo.setYy_desc(String.format("空驶班次=%d,营运班次=%d,空驶里程=%.3f,营运里程=%.3f,总里程=%.3f", all_bc_ks, all_bc_yy, all_lc_ks, all_lc_yy, all_lc_ks + all_lc_yy));
  322 + }
  323 +
  324 + LOGGER.info("//---------------- 时刻表编辑用数据输出 success... ----------------//");
  325 +
  326 + return editInfo;
  327 + } catch (Exception exp) {
  328 + LOGGER.info("//---------------- 时刻表编辑用数据输出 failed... ----------------//");
  329 +
  330 + StringWriter sw = new StringWriter();
  331 + exp.printStackTrace(new PrintWriter(sw));
  332 + LOGGER.info(sw.toString());
  333 +
  334 + throw new ScheduleException(exp.getMessage());
  335 + }
  336 + }
  337 +
  338 +}
... ...
src/main/java/com/bsth/service/schedule/datatools/TTInfoDetailForEdit.java
1   -package com.bsth.service.schedule.datatools;
2   -
3   -import com.bsth.service.schedule.exception.ScheduleException;
4   -import org.apache.commons.lang3.StringUtils;
5   -
6   -import java.util.ArrayList;
7   -import java.util.List;
8   -
9   -/**
10   - * Created by xu on 17/5/16.
11   - */
12   -public interface TTInfoDetailForEdit {
13   - /**
14   - * 发车信息内部类。
15   - */
16   - public static class FcInfo {
17   - /** 时刻明细id */
18   - private Long ttdid;
19   - /** 发车时间 */
20   - private String fcsj;
21   - /** 班次类型 */
22   - private String bc_type;
23   - /** 线路上下行 */
24   - private String xldir;
25   - /** 是偶分班 */
26   - private Boolean isfb;
27   -
28   - /** 起点站code */
29   - private String qdzCode;
30   - /** 终点站code */
31   - private String zdzCode;
32   -
33   - public FcInfo() {
34   - }
35   -
36   - public FcInfo(
37   - String ttdid_str,
38   - String bc_type,
39   - String fcsj,
40   - String xldir,
41   - String isfb,
42   - String qdzCode,
43   - String zdzCode) {
44   - this.ttdid = StringUtils.isEmpty(ttdid_str) ? null : Long.valueOf(ttdid_str);
45   - this.bc_type = bc_type;
46   - this.fcsj = fcsj;
47   - this.xldir = xldir;
48   - if ("N".equals(isfb))
49   - this.isfb = false;
50   - else if ("Y".equals(isfb) || "true".equals(isfb))
51   - this.isfb = true;
52   - else
53   - this.isfb = false;
54   -
55   - if (StringUtils.isNotEmpty(qdzCode) && !"null".equals(qdzCode)) {
56   - this.qdzCode = qdzCode;
57   - }
58   - if (StringUtils.isNotEmpty(zdzCode) && !"null".equals(zdzCode)) {
59   - this.zdzCode = zdzCode;
60   - }
61   -
62   - }
63   -
64   - public Long getTtdid() {
65   - return ttdid;
66   - }
67   -
68   - public void setTtdid(Long ttdid) {
69   - this.ttdid = ttdid;
70   - }
71   -
72   - public String getFcsj() {
73   - return fcsj;
74   - }
75   -
76   - public void setFcsj(String fcsj) {
77   - this.fcsj = fcsj;
78   - }
79   -
80   - public String getBc_type() {
81   - return bc_type;
82   - }
83   -
84   - public void setBc_type(String bc_type) {
85   - this.bc_type = bc_type;
86   - }
87   -
88   - public String getXldir() {
89   - return xldir;
90   - }
91   -
92   - public void setXldir(String xldir) {
93   - this.xldir = xldir;
94   - }
95   -
96   - public Boolean getIsfb() {
97   - return isfb;
98   - }
99   -
100   - public void setIsfb(Boolean isfb) {
101   - this.isfb = isfb;
102   - }
103   -
104   - public String getQdzCode() {
105   - return qdzCode;
106   - }
107   -
108   - public void setQdzCode(String qdzCode) {
109   - this.qdzCode = qdzCode;
110   - }
111   -
112   - public String getZdzCode() {
113   - return zdzCode;
114   - }
115   -
116   - public void setZdzCode(String zdzCode) {
117   - this.zdzCode = zdzCode;
118   - }
119   - }
120   -
121   - /**
122   - * 时刻表编辑用的返回数据。
123   - */
124   - public static class EditInfo {
125   - /** 标题数据 */
126   - private List<String> header = new ArrayList<>();
127   - /** 内容数据 */
128   - private List<List<FcInfo>> contents = new ArrayList<>();
129   -
130   - /** 营运描述 */
131   - private String yy_desc;
132   -
133   - public List<String> getHeader() {
134   - return header;
135   - }
136   -
137   - public void setHeader(List<String> header) {
138   - this.header = header;
139   - }
140   -
141   - public List<List<FcInfo>> getContents() {
142   - return contents;
143   - }
144   -
145   - public void setContents(List<List<FcInfo>> contents) {
146   - this.contents = contents;
147   - }
148   -
149   - public String getYy_desc() {
150   - return yy_desc;
151   - }
152   -
153   - public void setYy_desc(String yy_desc) {
154   - this.yy_desc = yy_desc;
155   - }
156   - }
157   -
158   - /**
159   - * 获取待编辑的数据。
160   - * @param xlid 线路id
161   - * @param ttid 时刻表id
162   - * @param maxfcno 最大发车顺序号
163   - * @return
164   - */
165   - EditInfo getEditInfo(Integer xlid, Long ttid, Long maxfcno) throws ScheduleException;
166   -
167   -}
168   -
  1 +package com.bsth.service.schedule.datatools;
  2 +
  3 +import com.bsth.service.schedule.exception.ScheduleException;
  4 +import org.apache.commons.lang3.StringUtils;
  5 +
  6 +import java.util.ArrayList;
  7 +import java.util.List;
  8 +
  9 +/**
  10 + * Created by xu on 17/5/16.
  11 + */
  12 +public interface TTInfoDetailForEdit {
  13 + /**
  14 + * 发车信息内部类。
  15 + */
  16 + public static class FcInfo {
  17 + /** 时刻明细id */
  18 + private Long ttdid;
  19 + /** 发车时间 */
  20 + private String fcsj;
  21 + /** 班次类型 */
  22 + private String bc_type;
  23 + /** 线路上下行 */
  24 + private String xldir;
  25 + /** 是偶分班 */
  26 + private Boolean isfb;
  27 +
  28 + /** 起点站code */
  29 + private String qdzCode;
  30 + /** 终点站code */
  31 + private String zdzCode;
  32 +
  33 + public FcInfo() {
  34 + }
  35 +
  36 + public FcInfo(
  37 + String ttdid_str,
  38 + String bc_type,
  39 + String fcsj,
  40 + String xldir,
  41 + String isfb,
  42 + String qdzCode,
  43 + String zdzCode) {
  44 + this.ttdid = StringUtils.isEmpty(ttdid_str) ? null : Long.valueOf(ttdid_str);
  45 + this.bc_type = bc_type;
  46 + this.fcsj = fcsj;
  47 + this.xldir = xldir;
  48 + if ("N".equals(isfb))
  49 + this.isfb = false;
  50 + else if ("Y".equals(isfb) || "true".equals(isfb))
  51 + this.isfb = true;
  52 + else
  53 + this.isfb = false;
  54 +
  55 + if (StringUtils.isNotEmpty(qdzCode) && !"null".equals(qdzCode)) {
  56 + this.qdzCode = qdzCode;
  57 + }
  58 + if (StringUtils.isNotEmpty(zdzCode) && !"null".equals(zdzCode)) {
  59 + this.zdzCode = zdzCode;
  60 + }
  61 +
  62 + }
  63 +
  64 + public Long getTtdid() {
  65 + return ttdid;
  66 + }
  67 +
  68 + public void setTtdid(Long ttdid) {
  69 + this.ttdid = ttdid;
  70 + }
  71 +
  72 + public String getFcsj() {
  73 + return fcsj;
  74 + }
  75 +
  76 + public void setFcsj(String fcsj) {
  77 + this.fcsj = fcsj;
  78 + }
  79 +
  80 + public String getBc_type() {
  81 + return bc_type;
  82 + }
  83 +
  84 + public void setBc_type(String bc_type) {
  85 + this.bc_type = bc_type;
  86 + }
  87 +
  88 + public String getXldir() {
  89 + return xldir;
  90 + }
  91 +
  92 + public void setXldir(String xldir) {
  93 + this.xldir = xldir;
  94 + }
  95 +
  96 + public Boolean getIsfb() {
  97 + return isfb;
  98 + }
  99 +
  100 + public void setIsfb(Boolean isfb) {
  101 + this.isfb = isfb;
  102 + }
  103 +
  104 + public String getQdzCode() {
  105 + return qdzCode;
  106 + }
  107 +
  108 + public void setQdzCode(String qdzCode) {
  109 + this.qdzCode = qdzCode;
  110 + }
  111 +
  112 + public String getZdzCode() {
  113 + return zdzCode;
  114 + }
  115 +
  116 + public void setZdzCode(String zdzCode) {
  117 + this.zdzCode = zdzCode;
  118 + }
  119 + }
  120 +
  121 + /**
  122 + * 时刻表编辑用的返回数据。
  123 + */
  124 + public static class EditInfo {
  125 + /** 标题数据 */
  126 + private List<String> header = new ArrayList<>();
  127 + /** 内容数据 */
  128 + private List<List<FcInfo>> contents = new ArrayList<>();
  129 +
  130 + /** 营运描述 */
  131 + private String yy_desc;
  132 +
  133 + public List<String> getHeader() {
  134 + return header;
  135 + }
  136 +
  137 + public void setHeader(List<String> header) {
  138 + this.header = header;
  139 + }
  140 +
  141 + public List<List<FcInfo>> getContents() {
  142 + return contents;
  143 + }
  144 +
  145 + public void setContents(List<List<FcInfo>> contents) {
  146 + this.contents = contents;
  147 + }
  148 +
  149 + public String getYy_desc() {
  150 + return yy_desc;
  151 + }
  152 +
  153 + public void setYy_desc(String yy_desc) {
  154 + this.yy_desc = yy_desc;
  155 + }
  156 + }
  157 +
  158 + /**
  159 + * 获取待编辑的数据。
  160 + * @param xlid 线路id
  161 + * @param ttid 时刻表id
  162 + * @param maxfcno 最大发车顺序号
  163 + * @return
  164 + */
  165 + EditInfo getEditInfo(Integer xlid, Long ttid, Long maxfcno) throws ScheduleException;
  166 +
  167 +}
  168 +
... ...
src/main/resources/static/pages/base/timesmodel/add.html
... ... @@ -4,9 +4,9 @@
4 4 }
5 5 .tagsDiv {
6 6 border: 1px solid #c2cad8;
7   - margin-left: 50px;
  7 + margin-left: 15px;
8 8 padding: 4px 15px 4px 15px;
9   - width: 69%;
  9 + width: 50%;
10 10 }
11 11 </style>
12 12 <!-- 片段标题 START -->
... ... @@ -58,7 +58,7 @@
58 58 <a href="#tab2" data-toggle="tab" class="step">
59 59 <span class="number"> 2 </span>
60 60 <span class="desc">
61   - <i class="fa fa-check"></i> 获取参数方式 </span>
  61 + <i class="fa fa-check"></i> 选择参数方案 </span>
62 62 </a>
63 63 </li>
64 64 <li>
... ... @@ -121,28 +121,28 @@
121 121 </div>
122 122 <!-- 获取参数 -->
123 123 <div class="tab-pane" id="tab2">
124   - <h3 class="block"> 获取参数方式 </h3>
  124 + <h3 class="block"> 参数方案 </h3>
125 125 <!-- 获取参数 -->
126 126 <div class="form-group">
127   - <label class="col-md-3 control-label"> <span class="required"> * </span> 获取参数方式:</label>
  127 + <label class="col-md-3 control-label"> <span class="required"> * </span> 选择参数方案:</label>
128 128 <div class="col-md-9">
129 129 <div class="icheck-list">
130 130 <label >
131   - <input type="radio" class="icheck" name="baseRes" value=1 > 手动输入
  131 + <input type="radio" class="icheck" name="baseRes" value=1 checked> 班型/人次/车辆
132 132 </label>
133 133 <label>
134   - <input type="radio" class="icheck" name="baseRes" value=0 checked> 客流大数据分析
  134 + <input type="radio" class="icheck" name="baseRes" value=0> 客流大数据分析
135 135 </label>
136 136 </div>
137 137 </div>
138 138 </div>
139 139 <!-- 客容总量 -->
140   - <div class="form-group" id="krlGroup">
  140 + <!-- <div class="form-group" id="krlGroup">
141 141 <label class="col-md-3 control-label"><span class="required"> * </span>客容总量&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:</label>
142 142 <div class="col-md-9">
143 143 <input type="text" class="form-control input-medium" name="krl" id="krlInput" placeholder="客容总量">
144 144 </div>
145   - </div>
  145 + </div> -->
146 146 </div>
147 147 <!-- 参数详情 -->
148 148 <div class="tab-pane" id="tab3">
... ...
src/main/resources/static/pages/base/timesmodel/js/add-form-wizard.js
... ... @@ -328,10 +328,10 @@ var SKBFormWizard = function() {
328 328 map.lb = 15;// 定义例保时间.
329 329 map.workeLunch = 20;// 定义午餐时间.
330 330 map.workeDinner = 20;// 定义晚餐时间.
331   - map.mixstopTime = 8;// 定义最小停站间隙
332   - map.maxstopTime = 20;// 定义最大停站间隙.
333   - map.upStopTime = 10;// 定义上行停站时间.
334   - map.downStopTime = 10;// 定义下行停站时间.
  331 + //map.mixstopTime = 8;// 定义最小停站间隙
  332 + //map.maxstopTime = 20;// 定义最大停站间隙.
  333 + //map.upStopTime = 10;// 定义上行停站时间.
  334 + //map.downStopTime = 10;// 定义下行停站时间.
335 335 if(n==0) {
336 336 // 定义一个周转时间.
337 337 var zzsj = parseInt(map.upTravelTime) + 10*2 + parseInt(map.downTravelTime);
... ... @@ -456,7 +456,7 @@ var SKBFormWizard = function() {
456 456 rules : {
457 457 'skbName' : {required : true,},// 时刻表名称,必填项.
458 458 'lineName' : {required : true,},// 线路名称,必填项.
459   - 'krl' : {isBaseRes : true,number : true,digits : true,},// 客容量,当选择为客流方式时必填项、整数
  459 + // 'krl' : {isBaseRes : true,number : true,digits : true,},// 客容量,当选择为客流方式时必填项、整数
460 460 'startStationFirstTime' : {required : true}, // 起始站首班时间,必填项.
461 461 'startStationEndTime' : {required : true}, // 起始站末班时间 ,必填项.
462 462 'endStationFirstTime' : {required : true}, // 终点站首班时间 ,必填项.
... ... @@ -502,6 +502,7 @@ var SKBFormWizard = function() {
502 502 'clzs':{required : true,number : true,digits : true, isBcType : true},// 车辆总数,必填项、必须为整数.
503 503 'bxrc' : {required : true},// 班型人次,必填项
504 504 'linePlayType' : {required : true},// 线路规划类型,必填项
  505 + 'zdzcrl' : {number : true,digits : true},
505 506 },
506 507  
507 508 /**
... ... @@ -557,7 +558,7 @@ var SKBFormWizard = function() {
557 558 var argus = form.serializeJSON();
558 559 console.log(argus);
559 560 // 获取站点路由.
560   - $get('/stationroute/all',{'line.id_eq':argus.lineName.split('_')[0]},function(result) {
  561 + $get('/stationroute/all',{'line.id_eq':argus.lineName.split('_')[0],'destroy_eq':0},function(result) {
561 562 // 判断.
562 563 if(result) {
563 564 // 定义上行起点站,上行终点站,下行起点站,下行终点站.
... ... @@ -652,7 +653,7 @@ var SKBFormWizard = function() {
652 653 },function(){return '高峰时段配车数必须高于其它时段配车数!';});
653 654  
654 655 // 验证客流数据分析时客容量为必填项.
655   - $.validator.addMethod("isBaseRes", function(value,element) {
  656 + /*$.validator.addMethod("isBaseRes", function(value,element) {
656 657 // 定义返回值.
657 658 var tag = true;
658 659 // 定义选择获取参数方式值
... ... @@ -662,7 +663,7 @@ var SKBFormWizard = function() {
662 663 tag = false;
663 664 return tag;
664 665 }, '客流大数据分析,客流总量为必填项!');
665   -
  666 + */
666 667 // 验证配车总数与班型人次搭配
667 668 $.validator.addMethod('isBcType', function(value,element) {
668 669 // 定义返回值.
... ... @@ -673,6 +674,14 @@ var SKBFormWizard = function() {
673 674 // 判断.
674 675 if(bxrc=='' || bxrc==null || clzs=='' || clzs==0)
675 676 return false;
  677 + var bxrcAr = bxrc.split(','),pczs = 0;
  678 + for(var s = 0 ; s< bxrcAr.length;s++) {
  679 + // 切割单个班型人次.
  680 + pczs = pczs + parseInt(bxrcAr[s].split('/')[2]);
  681 + }
  682 + if(pczs!=clzs)
  683 + tag = false;
  684 + /**
676 685 // 定义首末班次开始结束时间集合.
677 686 var map = {'line':{'startStationFirstTime':$('#qdzsbsjInput').val(),
678 687 'startStationEndTime':$('#qdzmbsjInput').val(),
... ... @@ -706,19 +715,20 @@ var SKBFormWizard = function() {
706 715 // 判断
707 716 if(parseFloat(countGs.toFixed(2))>maxGs || (bxrcAr.length==1 && countRc > parseInt(clzs)) )
708 717 tag = false;
  718 + */
709 719 return tag;
710   - },function(){return '配车总数与班型人次搭配不合理!'; });
  720 + },function(){return '配车总数与【班型/人次/车辆】搭配不合理!'; });
711 721  
712 722 /**
713 723 * @description : (TODO) 监听获取参数方式值改变事件.
714 724 *
715 725 * */
716   - $('input:radio[name="baseRes"]').on('change',function(v) {
  726 + /*$('input:radio[name="baseRes"]').on('change',function(v) {
717 727 if($(this).val()=='1')
718 728 $('#krlGroup').hide();
719 729 else if($(this).val()=='0')
720 730 $('#krlGroup').show();
721   - });
  731 + });*/
722 732  
723 733 // 确认提交信息
724 734 var displayConfirm = function() {
... ... @@ -794,14 +804,17 @@ var SKBFormWizard = function() {
794 804 if (form.valid() == false) {
795 805 return false;
796 806 }
797   - if(index==1) {
  807 + /*if(index==1) {
798 808 // 初始化客容量值.
799 809 if($('#krlInput').val() == '')
800 810 $('#krlInput').val(50);
801   - }else if(index == 2) {
  811 + }else */if(index == 2) {
802 812 var baseRes = $('#submit_argus_form input[name="baseRes"]:checked').val(),// 获取参数方式值.
803 813 lineId = $('#lineSelect').val().split('_')[0],// 线路ID.
804   - krl = $('#krlInput').val();// 客容量
  814 + krl = 50;
  815 + // krl = $('#krlInput').val();// 客容量
  816 + // 弹出正在加载层
  817 + var i = layer.load(2);
805 818 getLineInfo(lineId,function(r) {
806 819 getHtmlTemp(baseRes,r.content[0],lineId,krl,function(htlMap) {
807 820 $('#tab3').html(htlMap.forminput);
... ... @@ -831,6 +844,8 @@ var SKBFormWizard = function() {
831 844 options += '</optgroup>';
832 845 $('#carParkSelect').html(options).select2();
833 846 $('#carParkSelect').select2("val",r.content[0].carPark);
  847 + // 关闭弹出加载层
  848 + layer.close(i);
834 849 });
835 850 });
836 851 });
... ...
src/main/resources/static/pages/base/timesmodel/js/base-fun.js
... ... @@ -324,6 +324,220 @@ var BaseFun = function() {
324 324 'bxrcgs':null};
325 325 },
326 326  
  327 + BXPplaceClassesTime01 : function(saa,cara,map,seMap,dataMap,lpNoA) {
  328 + var allJsonD = baseF.plgfbc(saa,cara,map,seMap,dataMap);
  329 + var jsonArray = baseF.tzsmbcsj01(baseF.setbcsAndfcno(allJsonD),dataMap.smbcsjArr,dataMap.ccsjArr,dataMap.cclcArr,dataMap.qdzArr,saa[0].lbsj),lpNoA,dataMap;
  330 + var list = baseF.splitBxRc(map.bxrc);
  331 + baseF.fprclp01(list,cara);
  332 + console.log(list);
  333 + var bxrclist = list.data;
  334 + var rs = new Array(),bxrcgs= new Array();
  335 + // 遍历已分配好路牌的班型人次数组.
  336 + for(var x = 0 ; x < bxrclist.length; x++) {
  337 + // 定义当前班型人次下的路牌数组.
  338 + var cla = bxrclist[x].sslp;
  339 + var dsdnmb = bxrclist[x].rs/bxrclist[x].fpcls;
  340 + // 定义当前班型人次下的工时.
  341 + var hoursV = bxrclist[x].hoursV*dsdnmb;
  342 + // 遍历路牌
  343 + for(var s = 0 ; s < cla.length; s++) {
  344 + //cla[s].lpName = bxrclist[x].type;
  345 + // 获取路牌编号.
  346 + var lpNo = cla[s].lpNo;
  347 + // 定义路牌下的所有班次.
  348 + var lpbc = new Array();
  349 + bxrcgs.push({'lpNo':lpNo,'hoursV':hoursV,'type':bxrclist[x].type});
  350 + // 遍历班次数.
  351 + for(var i =0 ; i <jsonArray.length; i++) {
  352 + // 判断当期遍历的班次是否属于当前的路牌.
  353 + if(jsonArray[i].lpNo == lpNo)
  354 + lpbc.push(jsonArray[i]);
  355 + }
  356 + // 按照发车序号顺序排序.
  357 + lpbc.sort(function(a,b){return b.fcno-a.fcno});
  358 + // 调整班次数.也就是说调整工时.
  359 + baseF.tzlpgs01(lpbc,hoursV,map,dataMap,lpNo,saa);
  360 + rs = rs.concat(lpbc);
  361 + }
  362 + }
  363 + var jar = baseF.tzsmbcsj01(baseF.setbcsAndfcno(rs),dataMap.smbcsjArr,dataMap.ccsjArr,dataMap.cclcArr,dataMap.qdzArr,saa[0].lbsj),lpNoA,dataMap;
  364 + //var jar = baseF.tzsmbcsj(baseF.setbcsAndfcno(rs),dataMap.smbcsjArr,dataMap.ccsjArr,dataMap.cclcArr,dataMap.qdzArr,saa[0].lbsj),lpNoA,dataMap;
  365 + var resultJA = new Array();
  366 + for(var m = 0 ; m < cara.length; m++) {
  367 + // 获取路牌编号.
  368 + var lpNo_ = cara[m].lpNo;
  369 + // 定义路牌下的所有班次.
  370 + var lpbc_ = new Array();
  371 + // 遍历班次数.
  372 + for(var j =0 ; j <jar.length; j++) {
  373 + // 判断当期遍历的班次是否属于当前的路牌.
  374 + if(jar[j].lpNo == lpNo_)
  375 + lpbc_.push(jar[j]);
  376 + }
  377 + // 按照发车序号顺序排序.
  378 + lpbc_.sort(function(a,b){return a.fcno-b.fcno});
  379 + resultJA = resultJA.concat(baseF.addjclbbc01(lpbc_,dataMap,saa[0].lbsj,map));
  380 + // resultJA = resultJA.concat(lpbc_);
  381 + }
  382 + return {'json':resultJA,'bxrcgs':null};
  383 + },
  384 +
  385 + /**
  386 + * @description : (TODO) 添加进出场班次、早晚例保班次.
  387 + *
  388 + * @param [bc--路牌下的所有班次;dataMap--参数信息;lbsj--例保时间]
  389 + *
  390 + */
  391 + addjclbbc01 : function(bc,dataMap,lbsj,gatps) {
  392 + if(bc.length>0)
  393 + bc[bc.length-1].STOPTIME = 0;
  394 + var result = new Array();
  395 + var fcno = 0,dxfno = 0,stas = false;
  396 + for(var b = 0 ; b < bc.length;b++) {
  397 + var fxdm = baseF.dirDmToIndex(bc[b].xlDir);
  398 + var car = {'lp':bc[b].lp, 'lpNo':bc[b].lpNo, 'lpName':bc[b].lpName, 'lpType':bc[b].lpType};
  399 + if(b==0) {
  400 + var dqbcfcsj = baseF.getDateTime(bc[b].fcsj);
  401 + result.push(baseF.getbcObj(
  402 + dqbcfcsj,dataMap.ccsjArr[fxdm],car,dataMap.bcTypeArr.bd,
  403 + dataMap.dira[fxdm],1,0,gatps,0,null,null,null,0,lbsj));// 早行例保班次
  404 + result.push(baseF.getbcObj(
  405 + dqbcfcsj,dataMap.ccsjArr[fxdm],car,dataMap.bcTypeArr.out,
  406 + dataMap.dira[fxdm],2,dataMap.cclcArr[fxdm],gatps,0,dataMap.qdzArr[fxdm],null,null,0,0));// 出场班次
  407 + fcno ++;
  408 + }else if(b==bc.length-1){
  409 + var fcno_ = dxfno + 2;
  410 + var qdbcddsj = baseF.getDateTime(bc[b].ARRIVALTIME);
  411 + result.push(baseF.getbcObj(
  412 + qdbcddsj,dataMap.jcsjArr[fxdm],car,dataMap.bcTypeArr.in_,
  413 + dataMap.dira[fxdm],fcno_++,dataMap.jclcArr[fxdm],gatps,0,dataMap.qdzArr[fxdm],null,null,0,0));// 进场班次
  414 + result.push(baseF.getbcObj(
  415 + qdbcddsj,dataMap.jcsjArr[fxdm],car,dataMap.bcTypeArr.lc,
  416 + dataMap.dira[fxdm],fcno_++,0,gatps,0,null,null,null,0,lbsj));// 晚班例保班次
  417 + }
  418 + dxfno = bc[b].fcno + fcno;
  419 + bc[b].fcno = dxfno;
  420 + if(stas) {
  421 + fcno ++;
  422 + stas = false;
  423 + }
  424 + result.push(bc[b]);
  425 + }
  426 + return result;
  427 + },
  428 +
  429 + /**
  430 + * @description : (TODO) 调整某路牌下的工时.
  431 + *
  432 + * @param [arr--当前路牌下的班次数组;gs--当前路牌的总工时;dataMap--参数信息;lpNo--路牌编码;saa--参数信息]
  433 + *
  434 + * */
  435 + tzlpgs01 : function(arr,gs,map,dataMap,lpNo,saa) {
  436 + // 定义当前路牌的进场时间、早晚例保时间.
  437 + var jczwsj = saa[0].lbsj*2 + dataMap.ccsjArr[baseF.dirDmToIndex(arr[0].xlDir)] +
  438 + dataMap.jcsjArr[baseF.dirDmToIndex(arr[arr.length-1].xlDir)];
  439 + // 定义开始、结束时间.
  440 + //var st = null , ed = null;
  441 + // 根据路牌编码依次轮流取高峰之间和晚高峰之后的时间段.
  442 + /*if(lpNo%2!=0) {
  443 + st = dataMap.gfzjsjd[0].st;
  444 + ed = dataMap.gfzjsjd[0].ed;
  445 + }else {
  446 + st = dataMap.wgfzhsjd[0].st;
  447 + ed = dataMap.wgfzhsjd[0].ed;
  448 + }*/
  449 + // 定义路牌总工时.第一次切高峰之间和晚高峰之后的班次.
  450 + var lpdqzgs = parseFloat(((baseF.getlpzgs(arr) + jczwsj)/60).toFixed(2));
  451 + while(lpdqzgs>gs) {
  452 + for(var t = 0 ; t<arr.length;t++) {
  453 + // 得到当前路牌下的发车时间.
  454 + var dqbcfcsj = baseF.getDateTime(arr[t].fcsj);
  455 + // 判断时间范围.
  456 + if(!baseF.isgfsjd01(dqbcfcsj,dataMap)) {
  457 + arr.splice(t,1);
  458 + break;
  459 + }
  460 + }
  461 + lpdqzgs = parseFloat(((baseF.getlpzgs(arr) + jczwsj)/60).toFixed(2));
  462 + }
  463 + // 判断总工时是否大于班型对应的工时.
  464 + /*if(lpdqzgs>gs) {
  465 + // 定义相差值.
  466 + var dx = parseFloat((lpdqzgs - gs).toFixed(2));
  467 + // 定义圈数.
  468 + var qs = Math.round(dx*60/70);
  469 + for(var t = 0 ; t<arr.length;t++) {
  470 + // 得到当前路牌下的发车时间.
  471 + var dqbcfcsj = baseF.getDateTime(arr[t].fcsj);
  472 + // 判断时间范围.
  473 + if(dqbcfcsj>st && dqbcfcsj<ed) {
  474 + arr[t-1].STOPTIME = 0;
  475 + // 切割.
  476 + arr.splice(t,qs*2);
  477 + break;
  478 + }
  479 + }
  480 + }*/
  481 + },
  482 +
  483 + /**
  484 + * @description (TODO) 把班型人次合理的分配到不同的路牌上.
  485 + *
  486 + * @param [bxgs--班型人次数组长度;list--班型人次数组集合;clzs--路牌数组]
  487 + *
  488 + * @return 返回一个把路牌合理的分配到班型人次下组成的数据集合.
  489 + * */
  490 + fprclp01 : function(list,clzs) {
  491 + var bxgs = list.data.length;
  492 + // 定义总车数.
  493 + var dxcount = clzs.length;
  494 + /*for(var t = 1 ; t<bxgs ; t++) {
  495 + dxcount = dxcount + list.data[t].rs;
  496 + }*/
  497 + // 最多车次与总车次的比例.
  498 + var blnum = Math.round(dxcount/list.data[0].fpcls);
  499 + var rs = new Array();
  500 + // 遍历
  501 + for(var r = 0 ; r<bxgs ;r++) {
  502 + // 得到没有分配出去的路牌.
  503 + var dxa = baseF.chaji_array(clzs,rs);
  504 + // 定义当前车次数.
  505 + var rsnum = list.data[r].fpcls;
  506 + // 定义记录当前分割路牌的次数下标.分配到班型车次下的路牌数组.
  507 + var index = 0,sslp = new Array();
  508 + // 当前车次所有占比例.
  509 + var tempint = parseInt(rsnum/blnum);
  510 + // 判断如果比例小1 则为当前车次数.
  511 + blnum = tempint <=1 ? rsnum : blnum;
  512 + // 判断当前班型车次数组下标值.如果为倒数第二个或者之前
  513 + if(r<bxgs-1) {
  514 + // 遍历
  515 + for(var c = 0 ; c<tempint;c++) {
  516 + // 创建新的没有分配出去的路牌数组.
  517 + var temp = dxa.concat();
  518 + // 创建切割路牌数组.
  519 + var tagA = new Array();
  520 + // 判断切割的下标值是否小于等于路牌数组的倒数第二个或者之前.
  521 + if(index<=dxa.length-blnum) {
  522 + tagA = temp.splice(index,blnum);
  523 + }else {
  524 + tagA = temp.splice(dxa.length-blnum,blnum);
  525 + }
  526 + // 组合切割路牌数组.赋值给已分配出去的路牌.
  527 + rs = rs.concat(tagA);
  528 + // 赋值给分配到班型车次下的路牌数组.
  529 + sslp = sslp.concat(tagA);
  530 + // 记录切割下标.
  531 + index = index + 1 + blnum;
  532 + }
  533 + // 分配到班型车次下的路牌数组.
  534 + list.data[r].sslp = sslp;
  535 + }else {
  536 + list.data[r].sslp = dxa;
  537 + }
  538 + }
  539 + },
  540 +
327 541 /**
328 542 * @description : (TODO) 根据班型人次与车辆总数排列班次时刻数据.
329 543 *
... ... @@ -758,7 +972,7 @@ var BaseFun = function() {
758 972 for(var c = 0 ; c<len ; c++) {
759 973 // 铺出所有的班次
760 974 var _mmstartTime = baseF.getDateTime(map.earlyStartTime);// 获取早高峰开始时间点,并转为时间对象.
761   - var tempTime = new Date(_mmstartTime.setMinutes(_mmstartTime.getMinutes()-(len - cara[c].lpNo)*saa[0].fcjx));
  975 + var tempTime = new Date(_mmstartTime.setMinutes(_mmstartTime.getMinutes()-(len - cara[c].lpNo)*saa[0].fcjx.gffcjx));
762 976 var kssj = dataMap.zgfsjd[0].st;
763 977 var cctag = map.linePlayType=='1' ? 0 : baseF.getdefaultDir(dataMap.smbcsjArr);// 获取出场类型 [0--上行出场;1--下行出场]
764 978 var sjAndDir = baseF.getBeganTime(tempTime,kssj,null, saa,dataMap.zgfsjd,dataMap.wgfsjd,dataMap.pcxssjArr,dataMap.gfxxsjArr,cctag, dataMap.ztjxA);// 计算当前路牌第一个首班时间点.
... ... @@ -781,9 +995,10 @@ var BaseFun = function() {
781 995 kssj,dataMap.zwcArr[1],cara[c],dataMap.bcTypeArr.cf,
782 996 dataMap.dira[cctag],xhNo++,0,map,0,null,null,null,0,0));// 晚餐班次
783 997 }
784   - var tzsj = dataMap.ztjxA[cctag];
  998 + var tzsj = baseF.isgfsjd01(kssj,dataMap) ? dataMap.gftzsj[cctag] : dataMap.dgtzsj[cctag];
  999 + // var tzsj = dataMap.ztjxA[cctag];
785 1000 var _xxsj = baseF.getxssj(dataMap.zgfsjd,dataMap.wgfsjd,kssj,dataMap.pcxssjArr,dataMap.gfxxsjArr,cctag);// 获取行驶时间
786   - var tzsj = baseF.isLastbc(kssj,endTime,tzsj,_xxsj) ? 0 : tzsj;
  1001 + tzsj = baseF.isLastbc(kssj,endTime,tzsj,_xxsj) ? 0 : tzsj;
787 1002 rs.push(baseF.getbcObj(
788 1003 kssj,_xxsj,cara[c],dataMap.bcTypeArr.normal,
789 1004 dataMap.dira[cctag],xhNo++,dataMap.pcxslcArr[cctag],map,0,
... ... @@ -794,6 +1009,15 @@ var BaseFun = function() {
794 1009 return rs;
795 1010 },
796 1011  
  1012 + isgfsjd01 : function(kssj,dataMap) {
  1013 +
  1014 + var tag = false;
  1015 + if((dataMap.zgfsjd[0].st <=kssj && kssj<= dataMap.zgfsjd[0].ed ) || ( dataMap.wgfsjd[0].st <= kssj && kssj <= dataMap.wgfsjd[0].ed))
  1016 + tag = true;
  1017 + return tag;
  1018 + },
  1019 +
  1020 +
797 1021 /**
798 1022 * @description : (TODO) 该方法可去除.
799 1023 *
... ... @@ -836,6 +1060,7 @@ var BaseFun = function() {
836 1060 for(var s = 0 ; s< bxrcAr.length;s++) {
837 1061 var s1a = bxrcAr[s].split('/');
838 1062 var rs = parseInt(s1a[1]);
  1063 + var fpcls = parseInt(s1a[2]);
839 1064 var gsgdIndex = 0,hoursV = 0.0,minueV='' ;
840 1065 for(var g = 0 ; g < gsgd.length; g++) {
841 1066 if(gsgd[g].type == s1a[0]) {
... ... @@ -846,6 +1071,7 @@ var BaseFun = function() {
846 1071 }
847 1072 list.push({'type':s1a[0],
848 1073 'rs':rs,
  1074 + 'fpcls':fpcls,
849 1075 'hoursV':hoursV,
850 1076 'minueV':minueV});
851 1077 rsa.push(rs);
... ... @@ -945,12 +1171,49 @@ var BaseFun = function() {
945 1171 baseF.tzqtbc(_obj.xxbc,_obj.qt,sj,cl,zd,lbsj);
946 1172 return _obj.sxbc.concat(_obj.xxbc).concat(_obj.qt);
947 1173 },
948   - tcbc : function(ar,kssj,jssj) {
  1174 + /**
  1175 + * @discription : (TODO) 调整首末班车时间点
  1176 + *
  1177 + * @params : [list--时刻表明细数组;smbcsj--首末班车时间]
  1178 + *
  1179 + * @return : 返回一个数组对象。这里返回的是时刻表明细数据
  1180 + **/
  1181 + tzsmbcsj01 : function(list,smbcsj,sj,cl,zd,lbsj) {
  1182 + var _obj = baseF.getsxAndxxbc(list);
  1183 + baseF.tcbc(_obj.sxbc,smbcsj[0].kssj,smbcsj[0].jssj ,_obj.xxbc);// 剔除上行不在时间范围内的班次
  1184 + baseF.tcbc(_obj.xxbc,smbcsj[1].kssj,smbcsj[1].jssj,_obj.sxbc);// 剔除下行不在时间范围内的班次
  1185 + baseF.dzsmsj(_obj.sxbc,smbcsj[0].kssj,smbcsj[0].jssj,_obj.xxbc);// 调整上行首末班车时间
  1186 + baseF.dzsmsj(_obj.xxbc,smbcsj[1].kssj,smbcsj[1].jssj,_obj.sxbc);// 调整下行首末班车时间
  1187 + return _obj.sxbc.concat(_obj.xxbc).concat(_obj.qt);
  1188 + },
  1189 + tcbc : function(ar,kssj,jssj,ppar) {
949 1190 for(var s = 0 ; s<ar.length;s++) {
950 1191 if(baseF.isDelete(baseF.getDateTime(kssj),
951 1192 baseF.getDateTime(jssj),
952 1193 baseF.getDateTime(ar[s].fcsj))) {
  1194 + var tempa = ar.concat(ppar),sslpA = new Array();
  1195 + for(var r = 0 ; r<tempa.length;r++) {
  1196 + if(tempa[r].lpNo == ar[s].lpNo)
  1197 + sslpA.push(tempa[r]);
  1198 + }
  1199 + sslpA.sort(function(a,b){return a.fcno-b.fcno});
  1200 + var lastBc = null;
  1201 + for(var p = 0 ; p<sslpA.length;p++) {
  1202 + if(sslpA[p].fcno == ar[s].fcno && sslpA[p].xlDir ==ar[s].xlDir && sslpA[p].fcsj == ar[s].fcsj ) {
  1203 + lastBc = sslpA[p-1];
  1204 + break;
  1205 + }
  1206 + }
  1207 + if(lastBc !=null) {
  1208 + for(var t = 0 ;t < ppar.length;t++) {
  1209 + if(ppar[t].fcno == lastBc.fcno && ppar[t].xlDir == lastBc.xlDir && ppar[t].fcsj == lastBc.fcsj ) {
  1210 + ppar.splice(t, 1);
  1211 + break;
  1212 + }
  1213 + }
  1214 + }
953 1215 ar.splice(s, 1);
  1216 + s--;
954 1217 }
955 1218 }
956 1219 },
... ...
src/main/resources/static/pages/base/timesmodel/js/gantt.js
... ... @@ -32,13 +32,15 @@
32 32 });
33 33 $('.tipso-animation').tipso('show');
34 34 setTimeout(function(){$('.tipso-animation').tipso('hide');},4000);
  35 + console.log(map);
  36 + //debugger;
35 37 // 1、定义开始与结束时间点字符串.
36 38 var seMap = getStartAndEndDate(map);
37 39 // 2、获取开始与结束时间对象.
38 40 /*var seDate = getksjssj(null,seMap.s.split('-')[0]);*/
39 41 var seDate = getksjssj(null,seMap.s);
40 42 // 3、定义周转时间.
41   - map.zzsj = parseInt(getzzsj(map));
  43 + map.zzsj = getzzsj(map);
42 44 // 5、方向代码.
43 45 var dirA = getsxxDM();
44 46 // 6、班次类型.
... ... @@ -53,7 +55,7 @@
53 55 CSMap = getMaxCarAndStopSpace1(map);
54 56 }
55 57 // 发车间隙
56   - map.stopSpace = CSMap.stopSpace;
  58 + map.fcjx = CSMap.fcjx;
57 59 // 定义时间参数.
58 60 var stopAraay = getsj(map);
59 61 if(isNull(objD)) {
... ... @@ -62,7 +64,8 @@
62 64 data = BaseFun.KLplaceClassesTime(CSMap.gattA,stopAraay,CSMap.maxCar,map,seMap,dataMap);
63 65 }else if(map.baseRes== '1') {
64 66 // 采用班型人次数据获取渲染时刻表明细图形的配置参数数据.
65   - data = BaseFun.BXPplaceClassesTime(stopAraay,CSMap.maxCar,map,seMap,dataMap,getylp(CSMap.maxCar).lpNoA);
  67 + // data = BaseFun.BXPplaceClassesTime(stopAraay,CSMap.maxCar,map,seMap,dataMap,getylp(CSMap.maxCar).lpNoA);
  68 + data = BaseFun.BXPplaceClassesTime01(stopAraay,CSMap.maxCar,map,seMap,dataMap,getylp(CSMap.maxCar).lpNoA);
66 69 }
67 70  
68 71 }else {
... ... @@ -107,7 +110,7 @@
107 110 * @returns 返回一个分装发车间隙、车辆数的最大值集合.
108 111 * */
109 112 function getMaxCarAndStopSpace1(map) {
110   - return {'gattA':null,'stopSpace': Math.round(map.zzsj/map.clzs),'maxCar':BaseFun.getYAxisCarArray(parseInt(map.clzs))};
  113 + return {'gattA':null,'fcjx': {'gffcjx': Math.round(map.zzsj.gfzzsj/map.clzs) , 'dgfcjx': Math.round(map.zzsj.dgzzsj/map.clzs)},'maxCar':BaseFun.getYAxisCarArray(parseInt(map.clzs))};
111 114 }
112 115  
113 116 /**
... ... @@ -143,9 +146,11 @@
143 146 'dira' : dira,// 方向集合 [下标0代表上;下标1代表下]
144 147 'bcTypeArr' : bcTypeArr,// 班次类型
145 148 'lbsj' : gatps.lb=='' ? 0:parseInt(gatps.lb),// 例保时间.
146   - 'minztjx' : parseInt(gatps.mixstopTime), // 最小停站时间.
147   - 'ztjxA' : BaseFun.formatPairing(gatps.upStopTime,gatps.downStopTime), // 停站时间.
148   - 'maxztjx' : parseInt(gatps.maxstopTime), // 最大停站时间.
  149 + // 'minztjx' : parseInt(gatps.mixstopTime), // 最小停站时间.
  150 + // 'ztjxA' : BaseFun.formatPairing(gatps.upStopTime,gatps.downStopTime), // 停站时间.
  151 + // 'maxztjx' : parseInt(gatps.maxstopTime), // 最大停站时间.
  152 + 'gftzsj': BaseFun.formatPairing(gatps.gfupStopTime,gatps.gfdownStopTime),// 高峰停站时间.
  153 + 'dgtzsj' : BaseFun.formatPairing(gatps.dgupStopTime,gatps.dgdownStopTime),// 低谷停站时间.
149 154 'map' : gatps,
150 155 'zzsj':gatps.zzsj,// 周转时间.
151 156 };
... ... @@ -160,7 +165,14 @@
160 165 * */
161 166 function getzzsj(map) {
162 167 // 一圈所用时间 (上行+下行+停歇时间)
163   - return parseInt(map.upTravelTime) + parseInt(map.upStopTime) + parseInt(map.downStopTime) + parseInt(map.downTravelTime);
  168 + return {
  169 + 'gfzzsj': parseInt(map.earlyUpTime =='' ? map.upTravelTime : map.earlyUpTime) +
  170 + parseInt(map.gfupStopTime) + parseInt(map.gfdownStopTime) +
  171 + parseInt(map.earlyDownTime =='' ? map.downTravelTime : map.earlyDownTime ), // 高峰周转时间
  172 + 'dgzzsj': parseInt(map.troughUpTime==''? map.upTravelTime : map.troughUpTime) +
  173 + parseInt(map.dgupStopTime) + parseInt(map.dgdownStopTime) +
  174 + parseInt(map.troughDownTime==''? map.downTravelTime: map.troughDownTime),// 低谷周转时间
  175 + };
164 176 }
165 177  
166 178 /**
... ... @@ -171,8 +183,8 @@
171 183 * @return 返回开始与结束时间字符串集合.
172 184 * */
173 185 function getStartAndEndDate(map) {
174   - return {'s': map.linePlayType=='1'? map.startStationFirstTime : getMinDate(map.startStationFirstTime,map.endStationFirstTime),
175   - 'e': map.linePlayType=='1'? map.startStationEndTime : getMaxDate(map.startStationEndTime,map.endStationEndTime)}
  186 + return {'s': map.linePlayType == '1' ? map.startStationFirstTime : getMinDate(map.startStationFirstTime,map.endStationFirstTime),
  187 + 'e': map.linePlayType == '1' ? map.startStationEndTime : getMaxDate(map.startStationEndTime,map.endStationEndTime)}
176 188 }
177 189  
178 190 /**
... ... @@ -259,7 +271,6 @@
259 271 year = newDate.getFullYear();
260 272 var jssj = BaseFun.getEndDate(year + '-' + month + '-' + dt + ' ' + '00:00');
261 273 return {'kssj' : kssj, 'jssj' : jssj};
262   -
263 274 }
264 275  
265 276 /**
... ... @@ -272,9 +283,11 @@
272 283 function getsj(map) {
273 284 var sxsj = parseInt(map.upTravelTime);// 上行时间.
274 285 var xxsj = parseInt(map.downTravelTime);// 下行时间.
275   - return [{'sxtzjx':parseInt(map.upStopTime), // 上行停站间隙.
276   - 'xxtzjx':parseInt(map.downStopTime), // 下行停站间隙.
277   - 'fcjx':parseInt(map.stopSpace),// 发车间隙.
  286 + return [{'gfsxtzjx':parseInt(map.gfupStopTime), // 高峰上行停站间隙.
  287 + 'gfxxtzjx':parseInt(map.gfdownStopTime), // 高峰下行停站间隙.
  288 + 'dgsxtzjx':parseInt(map.dgupStopTime), // 低谷上行停站间隙.
  289 + 'dgxxtzjx':parseInt(map.dgdownStopTime),// 低谷下行停站间隙.
  290 + 'fcjx':map.fcjx,// 发车间隙.
278 291 'sxsj':sxsj,// 上行时间.
279 292 'xxsj':xxsj,// 下行时间.
280 293 'zzsj':map.zzsj,// 周转时间.
... ...