Commit fecbb47eadca260eed58f62acfe00d7e8624c843

Authored by 潘钊
2 parents 87287347 33f20edb

Merge branch 'minhang' into pudong

# Conflicts:
#	src/main/resources/static/login.html
Showing 26 changed files with 1796 additions and 302 deletions

Too many changes to show.

To preserve performance only 26 of 47 files are displayed.

src/main/java/com/bsth/controller/logger/MileModifyController.java 0 → 100644
  1 +package com.bsth.controller.logger;
  2 +
  3 +import com.bsth.controller.BaseController;
  4 +import com.bsth.entity.logger.Logger_MileModify;
  5 +import org.springframework.web.bind.annotation.RequestMapping;
  6 +import org.springframework.web.bind.annotation.RestController;
  7 +
  8 +/**
  9 + * Created by panzhao on 2017/3/6.
  10 + */
  11 +@RestController
  12 +@RequestMapping("logger_mile_modify")
  13 +public class MileModifyController extends BaseController<Logger_MileModify, Long>{
  14 +}
src/main/java/com/bsth/controller/realcontrol/LineConfigController.java
@@ -35,6 +35,11 @@ public class LineConfigController extends BaseController&lt;LineConfig, Integer&gt;{ @@ -35,6 +35,11 @@ public class LineConfigController extends BaseController&lt;LineConfig, Integer&gt;{
35 return lineConfigService.editOutTimeType(lineCode, type); 35 return lineConfigService.editOutTimeType(lineCode, type);
36 } 36 }
37 37
  38 + @RequestMapping(value = "/enableInParkForSource", method = RequestMethod.POST)
  39 + public Map<String, Object> enableInParkForSource(@RequestParam String lineCode, @RequestParam int enable){
  40 + return lineConfigService.enableInParkForSource(lineCode, enable);
  41 + }
  42 +
38 @RequestMapping(value = "/getByLineCode") 43 @RequestMapping(value = "/getByLineCode")
39 public LineConfig getByLineCode(@RequestParam String lineCode){ 44 public LineConfig getByLineCode(@RequestParam String lineCode){
40 return lineConfigService.getByLineCode(lineCode); 45 return lineConfigService.getByLineCode(lineCode);
src/main/java/com/bsth/controller/realcontrol/ScheduleRealInfoController.java
@@ -262,6 +262,12 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo, @@ -262,6 +262,12 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo,
262 @RequestParam String date,@RequestParam String state) { 262 @RequestParam String date,@RequestParam String state) {
263 return scheduleRealInfoService.queryUserInfo(line, date,state); 263 return scheduleRealInfoService.queryUserInfo(line, date,state);
264 } 264 }
  265 +
  266 + @RequestMapping(value = "/queryUserInfoPx")
  267 + public List<ScheduleRealInfo> queryUserInfoPx(@RequestParam String line,
  268 + @RequestParam String date,@RequestParam String state,@RequestParam String type) {
  269 + return scheduleRealInfoService.queryUserInfoPx(line, date,state,type);
  270 + }
265 271
266 @RequestMapping(value = "/exportWaybill") 272 @RequestMapping(value = "/exportWaybill")
267 public List<ScheduleRealInfo> exportWaybill(@RequestParam String jName, @RequestParam String clZbh, 273 public List<ScheduleRealInfo> exportWaybill(@RequestParam String jName, @RequestParam String clZbh,
@@ -368,6 +374,11 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo, @@ -368,6 +374,11 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo,
368 return scheduleRealInfoService.realScheduleList(line,date); 374 return scheduleRealInfoService.realScheduleList(line,date);
369 } 375 }
370 376
  377 + @RequestMapping(value="/realScheduleListQp")
  378 + public List<ScheduleRealInfo> realScheduleListQp(@RequestParam String line,@RequestParam String date){
  379 + return scheduleRealInfoService.realScheduleListQp(line,date);
  380 + }
  381 +
371 @RequestMapping(value="/multi_tzrc", method=RequestMethod.POST) 382 @RequestMapping(value="/multi_tzrc", method=RequestMethod.POST)
372 public Map<String, Object> multi_tzrc(@RequestParam String cpcsJson){ 383 public Map<String, Object> multi_tzrc(@RequestParam String cpcsJson){
373 cpcsJson = StringEscapeUtils.unescapeHtml4(cpcsJson); 384 cpcsJson = StringEscapeUtils.unescapeHtml4(cpcsJson);
@@ -451,7 +462,7 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo, @@ -451,7 +462,7 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo,
451 } 462 }
452 463
453 @RequestMapping(value = "lpChangeMulti", method = RequestMethod.POST) 464 @RequestMapping(value = "lpChangeMulti", method = RequestMethod.POST)
454 - public Map<String, Object> lpChangeMulti(@RequestParam String leftIdx, @RequestParam String rightIdx){  
455 - return scheduleRealInfoService.lpChangeMulti(leftIdx, rightIdx); 465 + public Map<String, Object> lpChangeMulti(@RequestParam String leftIdx, @RequestParam String rightIdx,@RequestParam int type){
  466 + return scheduleRealInfoService.lpChangeMulti(leftIdx, rightIdx, type);
456 } 467 }
457 } 468 }
src/main/java/com/bsth/controller/realcontrol/dto/LpData.java
@@ -19,17 +19,36 @@ public class LpData { @@ -19,17 +19,36 @@ public class LpData {
19 this.zdsj = sch.getZdsjActualTime(); 19 this.zdsj = sch.getZdsjActualTime();
20 } 20 }
21 21
22 - public void appendTo(ScheduleRealInfo sch) {  
23 - sch.setjGh(this.jGh);  
24 - sch.setjName(this.jName);  
25 - sch.setsGh(this.sGh);  
26 - sch.setsName(this.sName);  
27 - sch.setClZbh(this.nbbm);  
28 -  
29 - if (this.fcsj != null)  
30 - sch.setFcsjActualAll(this.fcsj);  
31 - if (this.zdsj != null)  
32 - sch.setZdsjActualAll(this.zdsj); 22 + public void appendTo(ScheduleRealInfo sch, int type) {
  23 +
  24 + if (type == 0) {
  25 + //只换人
  26 + sch.setjGh(this.jGh);
  27 + sch.setjName(this.jName);
  28 + sch.setsGh(this.sGh);
  29 + sch.setsName(this.sName);
  30 + } else if (type == 1) {
  31 + //只换车
  32 + sch.setClZbh(this.nbbm);
  33 +
  34 + if (this.fcsj != null)
  35 + sch.setFcsjActualAll(this.fcsj);
  36 + if (this.zdsj != null)
  37 + sch.setZdsjActualAll(this.zdsj);
  38 +
  39 + } else if (type == 2) {
  40 + //换人并换车
  41 + sch.setjGh(this.jGh);
  42 + sch.setjName(this.jName);
  43 + sch.setsGh(this.sGh);
  44 + sch.setsName(this.sName);
  45 + sch.setClZbh(this.nbbm);
  46 +
  47 + if (this.fcsj != null)
  48 + sch.setFcsjActualAll(this.fcsj);
  49 + if (this.zdsj != null)
  50 + sch.setZdsjActualAll(this.zdsj);
  51 + }
33 } 52 }
34 53
35 /** 54 /**
src/main/java/com/bsth/data/directive/DayOfDirectives.java
1 package com.bsth.data.directive; 1 package com.bsth.data.directive;
2 2
3 -import java.util.ArrayList;  
4 -import java.util.Collection;  
5 -import java.util.Comparator;  
6 -import java.util.HashMap;  
7 -import java.util.List;  
8 -import java.util.Map;  
9 -  
10 -import org.slf4j.Logger;  
11 -import org.slf4j.LoggerFactory;  
12 -import org.springframework.beans.factory.annotation.Autowired;  
13 -import org.springframework.stereotype.Component;  
14 -  
15 import com.alibaba.fastjson.JSONObject; 3 import com.alibaba.fastjson.JSONObject;
16 import com.bsth.data.LineConfigData; 4 import com.bsth.data.LineConfigData;
17 import com.bsth.entity.directive.D60; 5 import com.bsth.entity.directive.D60;
@@ -21,6 +9,12 @@ import com.bsth.entity.directive.DirectiveReponse; @@ -21,6 +9,12 @@ import com.bsth.entity.directive.DirectiveReponse;
21 import com.bsth.entity.realcontrol.ScheduleRealInfo; 9 import com.bsth.entity.realcontrol.ScheduleRealInfo;
22 import com.bsth.service.directive.DirectiveService; 10 import com.bsth.service.directive.DirectiveService;
23 import com.bsth.websocket.handler.SendUtils; 11 import com.bsth.websocket.handler.SendUtils;
  12 +import org.slf4j.Logger;
  13 +import org.slf4j.LoggerFactory;
  14 +import org.springframework.beans.factory.annotation.Autowired;
  15 +import org.springframework.stereotype.Component;
  16 +
  17 +import java.util.*;
24 18
25 /** 19 /**
26 * 20 *
@@ -42,6 +36,9 @@ public class DayOfDirectives { @@ -42,6 +36,9 @@ public class DayOfDirectives {
42 //等待C0_A4回复的用户 36 //等待C0_A4回复的用户
43 //public static Map<K, V> 37 //public static Map<K, V>
44 38
  39 + //等待入库的指令
  40 + public static LinkedList<Directive> pstDirectives;
  41 +
45 @Autowired 42 @Autowired
46 DirectiveService directiveService; 43 DirectiveService directiveService;
47 44
@@ -57,14 +54,19 @@ public class DayOfDirectives { @@ -57,14 +54,19 @@ public class DayOfDirectives {
57 static{ 54 static{
58 d60Map = new HashMap<>(); 55 d60Map = new HashMap<>();
59 d64Map = new HashMap<>(); 56 d64Map = new HashMap<>();
  57 + pstDirectives = new LinkedList<>();
60 } 58 }
61 59
62 public void put60(D60 d60) { 60 public void put60(D60 d60) {
63 d60Map.put(d60.getMsgId(), d60); 61 d60Map.put(d60.getMsgId(), d60);
  62 + //等待持久化
  63 + pstDirectives.add(d60);
64 } 64 }
65 65
66 public void put64(D64 d64) { 66 public void put64(D64 d64) {
67 d64Map.put(d64.getKey(), d64); 67 d64Map.put(d64.getKey(), d64);
  68 + //等待持久化
  69 + pstDirectives.add(d64);
68 } 70 }
69 71
70 /** 72 /**
@@ -98,8 +100,9 @@ public class DayOfDirectives { @@ -98,8 +100,9 @@ public class DayOfDirectives {
98 d60.setReply47Time(System.currentTimeMillis()); 100 d60.setReply47Time(System.currentTimeMillis());
99 break; 101 break;
100 } 102 }
101 - // 入库  
102 - saveD60(d60); 103 + // 等待持久化
  104 + if(!pstDirectives.contains(d60))
  105 + pstDirectives.add(d60);
103 106
104 ScheduleRealInfo sch = d60.getSch(); 107 ScheduleRealInfo sch = d60.getSch();
105 if (null == sch) 108 if (null == sch)
@@ -131,19 +134,20 @@ public class DayOfDirectives { @@ -131,19 +134,20 @@ public class DayOfDirectives {
131 logger.warn("64响应 data is null ,json: " + json); 134 logger.warn("64响应 data is null ,json: " + json);
132 else { 135 else {
133 d64.setRespAck(data.getShort("requestAck")); 136 d64.setRespAck(data.getShort("requestAck"));
134 - // 响应入库  
135 - directiveService.save64(d64); 137 + // 持久化
  138 + if(!pstDirectives.contains(d64))
  139 + pstDirectives.add(d64);
136 } 140 }
137 } 141 }
138 } 142 }
139 143
140 - private void saveD60(D60 d60) { 144 +/* private void saveD60(D60 d60) {
141 // 等47再入库 145 // 等47再入库
142 if (d60.getReply47() == null) 146 if (d60.getReply47() == null)
143 return; 147 return;
144 148
145 directiveService.save(d60); 149 directiveService.save(d60);
146 - } 150 + }*/
147 151
148 public void clear(String device){ 152 public void clear(String device){
149 int c60 = 0, c64 = 0; 153 int c60 = 0, c64 = 0;
src/main/java/com/bsth/data/directive/DirectivesPstThread.java 0 → 100644
  1 +package com.bsth.data.directive;
  2 +
  3 +import com.bsth.entity.directive.D60;
  4 +import com.bsth.entity.directive.D64;
  5 +import com.bsth.entity.directive.Directive;
  6 +import com.bsth.repository.directive.D60Repository;
  7 +import com.bsth.repository.directive.D64Repository;
  8 +import org.slf4j.Logger;
  9 +import org.slf4j.LoggerFactory;
  10 +import org.springframework.beans.factory.annotation.Autowired;
  11 +import org.springframework.stereotype.Component;
  12 +
  13 +import java.util.LinkedList;
  14 +
  15 +/**
  16 + * 指令持久化线程
  17 + * Created by panzhao on 2017/3/6.
  18 + */
  19 +@Component
  20 +public class DirectivesPstThread extends Thread {
  21 +
  22 + Logger logger = LoggerFactory.getLogger(this.getClass());
  23 +
  24 + @Autowired
  25 + D60Repository d60Repository;
  26 +
  27 + @Autowired
  28 + D64Repository d64Repository;
  29 +
  30 + @Override
  31 + public void run() {
  32 + LinkedList<Directive> list = DayOfDirectives.pstDirectives;
  33 +
  34 + Directive directive;
  35 + for (int i = 0; i < 1000; i++) {
  36 + try {
  37 + directive = list.poll();
  38 +
  39 + if (directive instanceof D60) {
  40 + d60Repository.save((D60) directive);
  41 + }
  42 +
  43 + if (directive instanceof D64) {
  44 + d64Repository.save((D64) directive);
  45 + }
  46 + } catch (Exception e) {
  47 + logger.error("", e);
  48 + }
  49 + }
  50 + }
  51 +}
src/main/java/com/bsth/data/directive/FirstScheduleCheckThread.java
1 -package com.bsth.data.directive;  
2 -  
3 -import java.util.List;  
4 -import java.util.Set;  
5 -  
6 -import org.slf4j.Logger;  
7 -import org.slf4j.LoggerFactory;  
8 -import org.springframework.beans.factory.annotation.Autowired;  
9 -import org.springframework.stereotype.Component;  
10 -  
11 -import com.bsth.data.match.Arrival2Schedule;  
12 -import com.bsth.data.match.ExpectArrivalEnd;  
13 -import com.bsth.data.schedule.DayOfSchedule;  
14 -import com.bsth.entity.realcontrol.ScheduleRealInfo;  
15 -import com.bsth.service.directive.DirectiveService;  
16 -  
17 -/**  
18 - *  
19 - * @ClassName: FirstScheduleCheckThread  
20 - * @Description: TODO(首班出场检测)  
21 - * @author PanZhao  
22 - * @date 2016年8月27日 上午1:25:21  
23 - *  
24 - */  
25 -@Component  
26 -public class FirstScheduleCheckThread extends Thread{  
27 -  
28 - @Autowired  
29 - DayOfSchedule dayOfSchedule;  
30 -  
31 - @Autowired  
32 - DirectiveService directiveService;  
33 -  
34 - Logger logger = LoggerFactory.getLogger(this.getClass());  
35 -  
36 - //提前半小时下发指令  
37 - private final static long THREE_MINUTES = 1000 * 60 * 30L;  
38 -  
39 - @Override  
40 - public void run() {  
41 - try{  
42 - Set<String> cars = dayOfSchedule.allCar();  
43 -  
44 - long t = System.currentTimeMillis();  
45 - List<ScheduleRealInfo> schList;  
46 - ScheduleRealInfo first;  
47 - for(String car : cars){  
48 -  
49 - schList = dayOfSchedule.findByNbbm(car);  
50 -  
51 - if(null == schList || schList.size() == 0)  
52 - continue;  
53 -  
54 - first = schList.get(0);  
55 -  
56 - if(null != first.getBcType()  
57 - && first.getBcType().equals("out")){  
58 -  
59 - //没有计划里程的出场班次,出场既是首发站,发送下一班次的营运指令  
60 - if(first.getJhlc() == null && first.getXlDir().equals(schList.get(1).getXlDir()))  
61 - first = schList.get(1);  
62 -  
63 - //为首班补发指令  
64 - if(first.getDirectiveState() == -1  
65 - && Math.abs(first.getDfsjT() - t) < THREE_MINUTES){  
66 -  
67 - directiveService.send60Dispatch(first, dayOfSchedule.doneSum(first.getClZbh()), "定补@系统");  
68 - //期望完成出场班次时间  
69 - long endTime;  
70 -  
71 - if(first.getZdsj() != null)  
72 - endTime=first.getZdsjT() - 60000;  
73 - else  
74 - endTime=schList.get(1).getDfsjT() - 60000;  
75 -  
76 - ExpectArrivalEnd ead = new ExpectArrivalEnd()  
77 - ,ead2 = new ExpectArrivalEnd();  
78 - ead.setNbbm(car);  
79 - ead.setEndStation(first.getQdzCode());  
80 - ead.setEndTime(endTime);  
81 -  
82 - ead2.setNbbm(car);  
83 - ead2.setEndStation(first.getZdzCode());  
84 - ead2.setEndTime(endTime);  
85 -  
86 - Arrival2Schedule.addExpect(car, ead);  
87 - Arrival2Schedule.addExpect(car, ead2);  
88 - }  
89 - }  
90 - }  
91 - }catch(Exception e){  
92 - logger.error("", e);  
93 - }  
94 - }  
95 -} 1 +//package com.bsth.data.directive;
  2 +//
  3 +//import java.util.List;
  4 +//import java.util.Set;
  5 +//
  6 +//import org.slf4j.Logger;
  7 +//import org.slf4j.LoggerFactory;
  8 +//import org.springframework.beans.factory.annotation.Autowired;
  9 +//import org.springframework.stereotype.Component;
  10 +//
  11 +//import com.bsth.data.match.Arrival2Schedule;
  12 +//import com.bsth.data.match.ExpectArrivalEnd;
  13 +//import com.bsth.data.schedule.DayOfSchedule;
  14 +//import com.bsth.entity.realcontrol.ScheduleRealInfo;
  15 +//import com.bsth.service.directive.DirectiveService;
  16 +//
  17 +///**
  18 +// *
  19 +// * @ClassName: FirstScheduleCheckThread
  20 +// * @Description: TODO(首班出场检测)
  21 +// * @author PanZhao
  22 +// * @date 2016年8月27日 上午1:25:21
  23 +// *
  24 +// */
  25 +//@Component
  26 +//public class FirstScheduleCheckThread extends Thread{
  27 +//
  28 +// @Autowired
  29 +// DayOfSchedule dayOfSchedule;
  30 +//
  31 +// @Autowired
  32 +// DirectiveService directiveService;
  33 +//
  34 +// Logger logger = LoggerFactory.getLogger(this.getClass());
  35 +//
  36 +// //提前半小时下发指令
  37 +// private final static long THREE_MINUTES = 1000 * 60 * 30L;
  38 +//
  39 +// @Override
  40 +// public void run() {
  41 +// try{
  42 +// Set<String> cars = dayOfSchedule.allCar();
  43 +//
  44 +// long t = System.currentTimeMillis();
  45 +// List<ScheduleRealInfo> schList;
  46 +// ScheduleRealInfo first;
  47 +// for(String car : cars){
  48 +//
  49 +// schList = dayOfSchedule.findByNbbm(car);
  50 +//
  51 +// if(null == schList || schList.size() == 0)
  52 +// continue;
  53 +//
  54 +// first = schList.get(0);
  55 +//
  56 +// if(null != first.getBcType()
  57 +// && first.getBcType().equals("out")){
  58 +//
  59 +// //没有计划里程的出场班次,出场既是首发站,发送下一班次的营运指令
  60 +// if(first.getJhlc() == null && first.getXlDir().equals(schList.get(1).getXlDir()))
  61 +// first = schList.get(1);
  62 +//
  63 +// //为首班补发指令
  64 +// if(first.getDirectiveState() == -1
  65 +// && Math.abs(first.getDfsjT() - t) < THREE_MINUTES){
  66 +//
  67 +// directiveService.send60Dispatch(first, dayOfSchedule.doneSum(first.getClZbh()), "定补@系统");
  68 +// //期望完成出场班次时间
  69 +// long endTime;
  70 +//
  71 +// if(first.getZdsj() != null)
  72 +// endTime=first.getZdsjT() - 60000;
  73 +// else
  74 +// endTime=schList.get(1).getDfsjT() - 60000;
  75 +//
  76 +// ExpectArrivalEnd ead = new ExpectArrivalEnd()
  77 +// ,ead2 = new ExpectArrivalEnd();
  78 +// ead.setNbbm(car);
  79 +// ead.setEndStation(first.getQdzCode());
  80 +// ead.setEndTime(endTime);
  81 +//
  82 +// ead2.setNbbm(car);
  83 +// ead2.setEndStation(first.getZdzCode());
  84 +// ead2.setEndTime(endTime);
  85 +//
  86 +// Arrival2Schedule.addExpect(car, ead);
  87 +// Arrival2Schedule.addExpect(car, ead2);
  88 +// }
  89 +// }
  90 +// }
  91 +// }catch(Exception e){
  92 +// logger.error("", e);
  93 +// }
  94 +// }
  95 +//}
src/main/java/com/bsth/data/schedule/DayOfSchedule.java
@@ -5,7 +5,7 @@ import com.alibaba.fastjson.JSONArray; @@ -5,7 +5,7 @@ import com.alibaba.fastjson.JSONArray;
5 import com.bsth.Application; 5 import com.bsth.Application;
6 import com.bsth.data.BasicData; 6 import com.bsth.data.BasicData;
7 import com.bsth.data.LineConfigData; 7 import com.bsth.data.LineConfigData;
8 -import com.bsth.data.directive.FirstScheduleCheckThread; 8 +import com.bsth.data.directive.DirectivesPstThread;
9 import com.bsth.data.gpsdata.GpsRealData; 9 import com.bsth.data.gpsdata.GpsRealData;
10 import com.bsth.data.gpsdata.recovery.GpsDataRecovery; 10 import com.bsth.data.gpsdata.recovery.GpsDataRecovery;
11 import com.bsth.data.schedule.thread.ScheduleLateThread; 11 import com.bsth.data.schedule.thread.ScheduleLateThread;
@@ -115,9 +115,6 @@ public class DayOfSchedule implements CommandLineRunner { @@ -115,9 +115,6 @@ public class DayOfSchedule implements CommandLineRunner {
115 SchedulePstThread schedulePstThread; 115 SchedulePstThread schedulePstThread;
116 116
117 @Autowired 117 @Autowired
118 - FirstScheduleCheckThread firstScheduleCheckThread;  
119 -  
120 - @Autowired  
121 ScheduleLateThread scheduleLateThread; 118 ScheduleLateThread scheduleLateThread;
122 119
123 @Autowired 120 @Autowired
@@ -129,6 +126,9 @@ public class DayOfSchedule implements CommandLineRunner { @@ -129,6 +126,9 @@ public class DayOfSchedule implements CommandLineRunner {
129 @Autowired 126 @Autowired
130 GpsDataRecovery gpsDataRecovery; 127 GpsDataRecovery gpsDataRecovery;
131 128
  129 + @Autowired
  130 + DirectivesPstThread directivesPstThread;
  131 +
132 private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd"), fmtHHmm = DateTimeFormat.forPattern("HH:mm"); 132 private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd"), fmtHHmm = DateTimeFormat.forPattern("HH:mm");
133 133
134 @Override 134 @Override
@@ -141,8 +141,6 @@ public class DayOfSchedule implements CommandLineRunner { @@ -141,8 +141,6 @@ public class DayOfSchedule implements CommandLineRunner {
141 Application.mainServices.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS); 141 Application.mainServices.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS);
142 //入库 142 //入库
143 // Application.mainServices.scheduleWithFixedDelay(schedulePstThread, 60, 60, TimeUnit.SECONDS); 143 // Application.mainServices.scheduleWithFixedDelay(schedulePstThread, 60, 60, TimeUnit.SECONDS);
144 - //首班出场指令补发器  
145 -// Application.mainServices.scheduleWithFixedDelay(firstScheduleCheckThread, 30, 240, TimeUnit.SECONDS);  
146 //班次误点扫描 144 //班次误点扫描
147 // Application.mainServices.scheduleWithFixedDelay(scheduleLateThread, 60, 60, TimeUnit.SECONDS); 145 // Application.mainServices.scheduleWithFixedDelay(scheduleLateThread, 60, 60, TimeUnit.SECONDS);
148 146
@@ -153,6 +151,9 @@ public class DayOfSchedule implements CommandLineRunner { @@ -153,6 +151,9 @@ public class DayOfSchedule implements CommandLineRunner {
153 151
154 logger.info(diff / 1000 / 60 + "分钟之后提交到运管处"); 152 logger.info(diff / 1000 / 60 + "分钟之后提交到运管处");
155 //Application.mainServices.scheduleWithFixedDelay(submitToTrafficManage, diff / 1000, 60 * 60 * 24, TimeUnit.SECONDS); 153 //Application.mainServices.scheduleWithFixedDelay(submitToTrafficManage, diff / 1000, 60 * 60 * 24, TimeUnit.SECONDS);
  154 +
  155 + //指令持久化线程
  156 + Application.mainServices.scheduleWithFixedDelay(directivesPstThread, 180, 180, TimeUnit.SECONDS);
156 } 157 }
157 158
158 //数据恢复 159 //数据恢复
src/main/java/com/bsth/entity/logger/Logger.java 0 → 100644
  1 +package com.bsth.entity.logger;
  2 +
  3 +import javax.persistence.GeneratedValue;
  4 +import javax.persistence.Id;
  5 +import javax.persistence.MappedSuperclass;
  6 +
  7 +/**
  8 + * 操作日志通用字段
  9 + * Created by panzhao on 2017/3/6.
  10 + */
  11 +@MappedSuperclass
  12 +public abstract class Logger {
  13 +
  14 + @Id
  15 + @GeneratedValue
  16 + private Long id;
  17 +
  18 + /** 用户信息 */
  19 + private String userName;
  20 + private String name;
  21 +
  22 + /** ########## 客户端信息 ########### */
  23 + /** ip */
  24 + private String clientIp;
  25 + /** 浏览器 */
  26 + private String browser;
  27 + /** 系统平台 */
  28 + private String clientSystem;
  29 + /** 浏览器内核 */
  30 + private String browserCore;
  31 +
  32 + /** 操作时间 */
  33 + private Long ts;
  34 +
  35 + public String getUserName() {
  36 + return userName;
  37 + }
  38 +
  39 + public void setUserName(String userName) {
  40 + this.userName = userName;
  41 + }
  42 +
  43 + public String getName() {
  44 + return name;
  45 + }
  46 +
  47 + public void setName(String name) {
  48 + this.name = name;
  49 + }
  50 +
  51 + public String getClientIp() {
  52 + return clientIp;
  53 + }
  54 +
  55 + public void setClientIp(String clientIp) {
  56 + this.clientIp = clientIp;
  57 + }
  58 +
  59 + public String getBrowser() {
  60 + return browser;
  61 + }
  62 +
  63 + public void setBrowser(String browser) {
  64 + this.browser = browser;
  65 + }
  66 +
  67 + public String getClientSystem() {
  68 + return clientSystem;
  69 + }
  70 +
  71 + public void setClientSystem(String clientSystem) {
  72 + this.clientSystem = clientSystem;
  73 + }
  74 +
  75 + public String getBrowserCore() {
  76 + return browserCore;
  77 + }
  78 +
  79 + public void setBrowserCore(String browserCore) {
  80 + this.browserCore = browserCore;
  81 + }
  82 +
  83 + public Long getTs() {
  84 + return ts;
  85 + }
  86 +
  87 + public void setTs(Long ts) {
  88 + this.ts = ts;
  89 + }
  90 +}
src/main/java/com/bsth/entity/logger/Logger_MileModify.java 0 → 100644
  1 +package com.bsth.entity.logger;
  2 +
  3 +import javax.persistence.Entity;
  4 +import javax.persistence.Table;
  5 +
  6 +/**
  7 + * 操作日志 -修改公里
  8 + * Created by panzhao on 2017/3/6.
  9 + */
  10 +@Entity
  11 +@Table(name = "logger_mile_modify")
  12 +public class Logger_MileModify extends Logger{
  13 +
  14 + /** 之前的公里 */
  15 + private Double beforeMile;
  16 +
  17 + /** 修改之后的公里 */
  18 + private Double afterMile;
  19 +
  20 + /** 线路 code/name */
  21 + private String lineStr;
  22 +
  23 + /** 路牌 */
  24 + private String lp;
  25 +
  26 + /** 车辆自编号 */
  27 + private String nbbm;
  28 +
  29 + /** 发车时间 */
  30 + private String fcsj;
  31 +
  32 + /** 班次ID */
  33 + private Long schId;
  34 +
  35 + /** 备注 */
  36 + private String remarks;
  37 +
  38 + public Double getBeforeMile() {
  39 + return beforeMile;
  40 + }
  41 +
  42 + public void setBeforeMile(Double beforeMile) {
  43 + this.beforeMile = beforeMile;
  44 + }
  45 +
  46 + public Double getAfterMile() {
  47 + return afterMile;
  48 + }
  49 +
  50 + public void setAfterMile(Double afterMile) {
  51 + this.afterMile = afterMile;
  52 + }
  53 +
  54 + public String getLineStr() {
  55 + return lineStr;
  56 + }
  57 +
  58 + public void setLineStr(String lineStr) {
  59 + this.lineStr = lineStr;
  60 + }
  61 +
  62 + public String getLp() {
  63 + return lp;
  64 + }
  65 +
  66 + public void setLp(String lp) {
  67 + this.lp = lp;
  68 + }
  69 +
  70 + public String getNbbm() {
  71 + return nbbm;
  72 + }
  73 +
  74 + public void setNbbm(String nbbm) {
  75 + this.nbbm = nbbm;
  76 + }
  77 +
  78 + public String getFcsj() {
  79 + return fcsj;
  80 + }
  81 +
  82 + public void setFcsj(String fcsj) {
  83 + this.fcsj = fcsj;
  84 + }
  85 +
  86 + public Long getSchId() {
  87 + return schId;
  88 + }
  89 +
  90 + public void setSchId(Long schId) {
  91 + this.schId = schId;
  92 + }
  93 +
  94 + public String getRemarks() {
  95 + return remarks;
  96 + }
  97 +
  98 + public void setRemarks(String remarks) {
  99 + this.remarks = remarks;
  100 + }
  101 +}
src/main/java/com/bsth/entity/realcontrol/LineConfig.java
@@ -56,6 +56,23 @@ public class LineConfig { @@ -56,6 +56,23 @@ public class LineConfig {
56 /** 识别区间调头 */ 56 /** 识别区间调头 */
57 private boolean readReverse; 57 private boolean readReverse;
58 58
  59 + /** 原线路回场 */
  60 + private boolean inParkForSource;
  61 +
  62 + /**
  63 + * 到离站偏移值
  64 + */
  65 +
  66 + //上行进站
  67 + private int upInDiff;
  68 + //上行出站
  69 + private int upOutDiff;
  70 + //下行进站
  71 + private int downInDiff;
  72 + //下行出站
  73 + private int downOutDiff;
  74 +
  75 +
59 @OneToMany(cascade = CascadeType.ALL) 76 @OneToMany(cascade = CascadeType.ALL)
60 private Set<D80ReplyTemp> d80Temps = new HashSet<>(); 77 private Set<D80ReplyTemp> d80Temps = new HashSet<>();
61 78
@@ -151,4 +168,44 @@ public class LineConfig { @@ -151,4 +168,44 @@ public class LineConfig {
151 public void setReadReverse(boolean readReverse) { 168 public void setReadReverse(boolean readReverse) {
152 this.readReverse = readReverse; 169 this.readReverse = readReverse;
153 } 170 }
  171 +
  172 + public boolean isInParkForSource() {
  173 + return inParkForSource;
  174 + }
  175 +
  176 + public void setInParkForSource(boolean inParkForSource) {
  177 + this.inParkForSource = inParkForSource;
  178 + }
  179 +
  180 + public int getUpInDiff() {
  181 + return upInDiff;
  182 + }
  183 +
  184 + public void setUpInDiff(int upInDiff) {
  185 + this.upInDiff = upInDiff;
  186 + }
  187 +
  188 + public int getUpOutDiff() {
  189 + return upOutDiff;
  190 + }
  191 +
  192 + public void setUpOutDiff(int upOutDiff) {
  193 + this.upOutDiff = upOutDiff;
  194 + }
  195 +
  196 + public int getDownInDiff() {
  197 + return downInDiff;
  198 + }
  199 +
  200 + public void setDownInDiff(int downInDiff) {
  201 + this.downInDiff = downInDiff;
  202 + }
  203 +
  204 + public int getDownOutDiff() {
  205 + return downOutDiff;
  206 + }
  207 +
  208 + public void setDownOutDiff(int downOutDiff) {
  209 + this.downOutDiff = downOutDiff;
  210 + }
154 } 211 }
src/main/java/com/bsth/repository/logger/MileModifyRepository.java 0 → 100644
  1 +package com.bsth.repository.logger;
  2 +
  3 +import com.bsth.entity.logger.Logger_MileModify;
  4 +import com.bsth.repository.BaseRepository;
  5 +import org.springframework.stereotype.Repository;
  6 +
  7 +/**
  8 + * Created by panzhao on 2017/3/6.
  9 + */
  10 +@Repository
  11 +public interface MileModifyRepository extends BaseRepository<Logger_MileModify, Long>{
  12 +}
src/main/java/com/bsth/repository/oil/JdlRepository.java
@@ -20,7 +20,7 @@ public interface JdlRepository extends BaseRepository&lt;Jdl, Integer&gt;{ @@ -20,7 +20,7 @@ public interface JdlRepository extends BaseRepository&lt;Jdl, Integer&gt;{
20 "gs_bm, gs_name, fgs_bm, fgs_name, rq, nbbm, jdl, jdz, remarks, creater_date)" + 20 "gs_bm, gs_name, fgs_bm, fgs_name, rq, nbbm, jdl, jdz, remarks, creater_date)" +
21 " VALUES(" + 21 " VALUES(" +
22 "?1,?2,?3,?4,str_to_date(?5,'%Y-%m-%d'),?6,?7,?8,?9,str_to_date(?10,'%Y-%m-%d %H:%i:%s'))", nativeQuery=true) 22 "?1,?2,?3,?4,str_to_date(?5,'%Y-%m-%d'),?6,?7,?8,?9,str_to_date(?10,'%Y-%m-%d %H:%i:%s'))", nativeQuery=true)
23 - void insertData(String gsbm, String gsName, String fgsbm, String fgsName, String rq, String nbbm, Double jdl, String jdz, String remarks, String createrDate); 23 + void insertData(String gsbm, String gsName, String fgsbm, String fgsName, String rq, String nbbm, String jdl, String jdz, String remarks, String createrDate);
24 24
25 @Transactional 25 @Transactional
26 @Modifying 26 @Modifying
@@ -35,6 +35,6 @@ public interface JdlRepository extends BaseRepository&lt;Jdl, Integer&gt;{ @@ -35,6 +35,6 @@ public interface JdlRepository extends BaseRepository&lt;Jdl, Integer&gt;{
35 @Transactional 35 @Transactional
36 @Modifying 36 @Modifying
37 @Query(value="UPDATE bsth_c_jdl set jdl = ?1 where gs_bm = ?2 and fgs_bm = ?3 and rq = ?4 and nbbm = ?5 and jdz = ?6",nativeQuery=true) 37 @Query(value="UPDATE bsth_c_jdl set jdl = ?1 where gs_bm = ?2 and fgs_bm = ?3 and rq = ?4 and nbbm = ?5 and jdz = ?6",nativeQuery=true)
38 - void UpdateJdl(Double jdl, String gsbm, String fgsbm, String rq, String nbbm, String jdz); 38 + void UpdateJdl(String jdl, String gsbm, String fgsbm, String rq, String nbbm, String jdz);
39 39
40 } 40 }
src/main/java/com/bsth/repository/realcontrol/ScheduleRealInfoRepository.java
@@ -30,6 +30,12 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI @@ -30,6 +30,12 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI
30 30
31 @Query(value="select min(s.id), s.jGh,s.clZbh,s.lpName,s.jName,s.sGh,s.sName from ScheduleRealInfo s where s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 GROUP BY s.jGh,s.clZbh,s.lpName ,s.jName,s.sGh,s.sName order by (lpName+1)") 31 @Query(value="select min(s.id), s.jGh,s.clZbh,s.lpName,s.jName,s.sGh,s.sName from ScheduleRealInfo s where s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 GROUP BY s.jGh,s.clZbh,s.lpName ,s.jName,s.sGh,s.sName order by (lpName+1)")
32 List<ScheduleRealInfo> queryUserInfo2(String line,String date); 32 List<ScheduleRealInfo> queryUserInfo2(String line,String date);
  33 +
  34 + @Query(value="select min(s.id), s.jGh,s.clZbh,s.lpName,s.jName,s.sGh,s.sName from ScheduleRealInfo s where s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 GROUP BY s.jGh,s.clZbh,s.lpName ,s.jName,s.sGh,s.sName order by ?3 desc")
  35 + List<ScheduleRealInfo> queryUserInfoPxDesc(String line,String date,String state);
  36 +
  37 + @Query(value="select min(s.id), s.jGh,s.clZbh,s.lpName,s.jName,s.sGh,s.sName from ScheduleRealInfo s where s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 GROUP BY s.jGh,s.clZbh,s.lpName ,s.jName,s.sGh,s.sName order by ?3 asc")
  38 + List<ScheduleRealInfo> queryUserInfoPxAsc(String line,String date,String state);
33 39
34 @Query(value="select min(s.id), s.clZbh from ScheduleRealInfo s where s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 GROUP BY s.clZbh ") 40 @Query(value="select min(s.id), s.clZbh from ScheduleRealInfo s where s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 GROUP BY s.clZbh ")
35 List<ScheduleRealInfo> queryUserInfo3(String line,String date); 41 List<ScheduleRealInfo> queryUserInfo3(String line,String date);
@@ -114,9 +120,12 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI @@ -114,9 +120,12 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI
114 void deleteByLineCodeAndDate(String xlBm, String schDate); 120 void deleteByLineCodeAndDate(String xlBm, String schDate);
115 121
116 //去掉了 xlBm is not null 122 //去掉了 xlBm is not null
117 - @Query(value="select s from ScheduleRealInfo s where s.xlBm like %?1% and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 order by (s.lpName+1), s.realExecDate,s.fcsj") 123 + @Query(value="select s from ScheduleRealInfo s where s.xlBm like %?1% and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 order by s.realExecDate,s.fcsj, (s.lpName+1)")
118 List<ScheduleRealInfo> scheduleByDateAndLine(String line,String date); 124 List<ScheduleRealInfo> scheduleByDateAndLine(String line,String date);
119 125
  126 + @Query(value="select s from ScheduleRealInfo s where s.xlBm like %?1% and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 order by (s.lpName+1), s.realExecDate,s.fcsj")
  127 + List<ScheduleRealInfo> scheduleByDateAndLineQp(String line,String date);
  128 +
120 @Query(value="select s from ScheduleRealInfo s where s.xlBm like %?1% and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 and s.bcType not in ('in','out') order by s.xlBm") 129 @Query(value="select s from ScheduleRealInfo s where s.xlBm like %?1% and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 and s.bcType not in ('in','out') order by s.xlBm")
121 List<ScheduleRealInfo> scheduleByDateAndLine2(String line,String date); 130 List<ScheduleRealInfo> scheduleByDateAndLine2(String line,String date);
122 131
src/main/java/com/bsth/service/logger/MileModifyService.java 0 → 100644
  1 +package com.bsth.service.logger;
  2 +
  3 +import com.bsth.entity.logger.Logger_MileModify;
  4 +import com.bsth.service.BaseService;
  5 +
  6 +/**
  7 + * Created by panzhao on 2017/3/6.
  8 + */
  9 +public interface MileModifyService extends BaseService<Logger_MileModify, Long>{
  10 +}
src/main/java/com/bsth/service/logger/impl/MileModifyServiceImpl.java 0 → 100644
  1 +package com.bsth.service.logger.impl;
  2 +
  3 +import com.bsth.entity.logger.Logger_MileModify;
  4 +import com.bsth.service.impl.BaseServiceImpl;
  5 +import com.bsth.service.logger.MileModifyService;
  6 +import org.springframework.stereotype.Service;
  7 +
  8 +/**
  9 + * Created by panzhao on 2017/3/6.
  10 + */
  11 +@Service
  12 +public class MileModifyServiceImpl extends BaseServiceImpl<Logger_MileModify, Long> implements MileModifyService {
  13 +}
src/main/java/com/bsth/service/oil/impl/JdlServiceImpl.java
@@ -2,6 +2,7 @@ package com.bsth.service.oil.impl; @@ -2,6 +2,7 @@ package com.bsth.service.oil.impl;
2 2
3 import java.io.File; 3 import java.io.File;
4 import java.io.FileInputStream; 4 import java.io.FileInputStream;
  5 +import java.text.DecimalFormat;
5 import java.text.SimpleDateFormat; 6 import java.text.SimpleDateFormat;
6 import java.util.ArrayList; 7 import java.util.ArrayList;
7 import java.util.Date; 8 import java.util.Date;
@@ -34,6 +35,7 @@ public class JdlServiceImpl extends BaseServiceImpl&lt;Jdl, Integer&gt; implements Jdl @@ -34,6 +35,7 @@ public class JdlServiceImpl extends BaseServiceImpl&lt;Jdl, Integer&gt; implements Jdl
34 public String importExcel(File file, String gsbm, String gsName, String fgsbm, String fgsName) { 35 public String importExcel(File file, String gsbm, String gsName, String fgsbm, String fgsName) {
35 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 36 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
36 SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 37 SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  38 + DecimalFormat df = new DecimalFormat("######0.00");
37 List<String> textList = new ArrayList<String>(); 39 List<String> textList = new ArrayList<String>();
38 try { 40 try {
39 POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(file)); 41 POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(file));
@@ -84,10 +86,10 @@ public class JdlServiceImpl extends BaseServiceImpl&lt;Jdl, Integer&gt; implements Jdl @@ -84,10 +86,10 @@ public class JdlServiceImpl extends BaseServiceImpl&lt;Jdl, Integer&gt; implements Jdl
84 86
85 if(jdl_.size() == 0){ 87 if(jdl_.size() == 0){
86 repository.insertData(gsbm, gsName, fgsbm, fgsName, rq, nbbm, 88 repository.insertData(gsbm, gsName, fgsbm, fgsName, rq, nbbm,
87 - jdl, jdz, remarks, sd.format(new Date())); 89 + df.format(jdl), jdz, remarks, sd.format(new Date()));
88 }else{ 90 }else{
89 jdl += jdl_.get(0); 91 jdl += jdl_.get(0);
90 - repository.UpdateJdl(jdl, gsbm, fgsbm, rq, nbbm, jdz); 92 + repository.UpdateJdl(df.format(jdl), gsbm, fgsbm, rq, nbbm, jdz);
91 } 93 }
92 } 94 }
93 wb.close(); 95 wb.close();
src/main/java/com/bsth/service/realcontrol/LineConfigService.java
@@ -16,4 +16,6 @@ public interface LineConfigService extends BaseService&lt;LineConfig, Integer&gt;{ @@ -16,4 +16,6 @@ public interface LineConfigService extends BaseService&lt;LineConfig, Integer&gt;{
16 Map<String, Object> editOutTimeType(String lineCode, int type); 16 Map<String, Object> editOutTimeType(String lineCode, int type);
17 17
18 LineConfig getByLineCode(String lineCode); 18 LineConfig getByLineCode(String lineCode);
  19 +
  20 + Map<String,Object> enableInParkForSource(String lineCode, int enable);
19 } 21 }
src/main/java/com/bsth/service/realcontrol/ScheduleRealInfoService.java
@@ -62,6 +62,8 @@ public interface ScheduleRealInfoService extends BaseService&lt;ScheduleRealInfo, L @@ -62,6 +62,8 @@ public interface ScheduleRealInfoService extends BaseService&lt;ScheduleRealInfo, L
62 62
63 List<ScheduleRealInfo> queryUserInfo(String line,String date,String state); 63 List<ScheduleRealInfo> queryUserInfo(String line,String date,String state);
64 64
  65 + List<ScheduleRealInfo> queryUserInfoPx(String line,String date,String state,String type);
  66 +
65 List<ScheduleRealInfo> exportWaybill(String jName,String clZbh,String lpName,String date,String line); 67 List<ScheduleRealInfo> exportWaybill(String jName,String clZbh,String lpName,String date,String line);
66 68
67 List<ScheduleRealInfo> exportWaybillQp(String clZbh,String date,String line); 69 List<ScheduleRealInfo> exportWaybillQp(String clZbh,String date,String line);
@@ -122,7 +124,7 @@ public interface ScheduleRealInfoService extends BaseService&lt;ScheduleRealInfo, L @@ -122,7 +124,7 @@ public interface ScheduleRealInfoService extends BaseService&lt;ScheduleRealInfo, L
122 Map<String,Object> scheduleDaily(String line,String date); 124 Map<String,Object> scheduleDaily(String line,String date);
123 125
124 List<ScheduleRealInfo> realScheduleList(String line,String date); 126 List<ScheduleRealInfo> realScheduleList(String line,String date);
125 - 127 + List<ScheduleRealInfo> realScheduleListQp(String line,String date);
126 128
127 List<Map<String,Object>> yesterdayDataList(String line,String date); 129 List<Map<String,Object>> yesterdayDataList(String line,String date);
128 130
@@ -152,7 +154,7 @@ public interface ScheduleRealInfoService extends BaseService&lt;ScheduleRealInfo, L @@ -152,7 +154,7 @@ public interface ScheduleRealInfoService extends BaseService&lt;ScheduleRealInfo, L
152 154
153 List<SchedulePlanInfo> currentSchedulePlan(String lineCode); 155 List<SchedulePlanInfo> currentSchedulePlan(String lineCode);
154 156
155 - Map<String,Object> lpChangeMulti(String leftIdx, String rightIdx); 157 + Map<String,Object> lpChangeMulti(String leftIdx, String rightIdx, int type);
156 158
157 - void lpChange(ScheduleRealInfo leftSch, ScheduleRealInfo rightSch); 159 + void lpChange(ScheduleRealInfo leftSch, ScheduleRealInfo rightSch, int type);
158 } 160 }
src/main/java/com/bsth/service/realcontrol/impl/LineConfigServiceImpl.java
@@ -6,6 +6,8 @@ import com.bsth.entity.realcontrol.LineConfig; @@ -6,6 +6,8 @@ import com.bsth.entity.realcontrol.LineConfig;
6 import com.bsth.repository.realcontrol.LineConfigRepository; 6 import com.bsth.repository.realcontrol.LineConfigRepository;
7 import com.bsth.service.impl.BaseServiceImpl; 7 import com.bsth.service.impl.BaseServiceImpl;
8 import com.bsth.service.realcontrol.LineConfigService; 8 import com.bsth.service.realcontrol.LineConfigService;
  9 +import org.slf4j.Logger;
  10 +import org.slf4j.LoggerFactory;
9 import org.springframework.beans.factory.annotation.Autowired; 11 import org.springframework.beans.factory.annotation.Autowired;
10 import org.springframework.stereotype.Service; 12 import org.springframework.stereotype.Service;
11 13
@@ -15,71 +17,103 @@ import java.util.List; @@ -15,71 +17,103 @@ import java.util.List;
15 import java.util.Map; 17 import java.util.Map;
16 18
17 @Service 19 @Service
18 -public class LineConfigServiceImpl extends BaseServiceImpl<LineConfig, Integer> implements LineConfigService{  
19 -  
20 - @Autowired  
21 - LineConfigRepository lineConfigRepository;  
22 -  
23 - @Autowired  
24 - LineConfigData lineConfigData;  
25 -  
26 - @Override  
27 - public Map<String, Object> check(String[] codeArray) {  
28 - Map<String, Object> rs = new HashMap<>();  
29 - List<String> notArr = new ArrayList<>();  
30 -  
31 - for(String lineCode : codeArray){  
32 - if(null == lineConfigData.get(lineCode + ""))  
33 - notArr.add(lineCode);  
34 - }  
35 -  
36 - if(notArr.size() > 0){  
37 - rs.put("status", 1);  
38 - rs.put("not", notArr);  
39 - }  
40 - else  
41 - rs.put("status", 0);  
42 - return rs;  
43 - }  
44 -  
45 - @Override  
46 - public Integer init(String lineCode) throws Exception{  
47 - LineConfig conf = lineConfigData.get(lineCode );  
48 -  
49 - if(conf == null)  
50 - lineConfigData.init(lineCode);  
51 -  
52 - return 1;  
53 - }  
54 -  
55 - @Override  
56 - public Map<String, Object> editStartOptTime(String time, String lineCode) {  
57 - Map<String, Object> rs = new HashMap<>();  
58 - LineConfig conf = lineConfigData.get(lineCode);  
59 - conf.setStartOpt(time);  
60 - lineConfigData.set(conf);  
61 -  
62 - rs.put("status", ResponseCode.SUCCESS);  
63 - rs.put("time", time);  
64 - return rs;  
65 - }  
66 -  
67 - @Override  
68 - public Map<String, Object> editOutTimeType(String lineCode, int type) {  
69 - Map<String, Object> rs = new HashMap<>();  
70 - LineConfig conf = lineConfigData.get(lineCode);  
71 -  
72 - conf.setOutConfig(type);  
73 - //conf.setInConfig(type);  
74 - lineConfigData.set(conf);  
75 -  
76 - rs.put("status", ResponseCode.SUCCESS);  
77 - rs.put("type", type);  
78 - return rs;  
79 - }  
80 -  
81 - @Override  
82 - public LineConfig getByLineCode(String lineCode) {  
83 - return lineConfigData.get(lineCode);  
84 - } 20 +public class LineConfigServiceImpl extends BaseServiceImpl<LineConfig, Integer> implements LineConfigService {
  21 +
  22 + @Autowired
  23 + LineConfigRepository lineConfigRepository;
  24 +
  25 + @Autowired
  26 + LineConfigData lineConfigData;
  27 +
  28 + Logger logger = LoggerFactory.getLogger(this.getClass());
  29 +
  30 + @Override
  31 + public Map<String, Object> check(String[] codeArray) {
  32 + Map<String, Object> rs = new HashMap<>();
  33 + List<String> notArr = new ArrayList<>();
  34 +
  35 + for (String lineCode : codeArray) {
  36 + if (null == lineConfigData.get(lineCode + ""))
  37 + notArr.add(lineCode);
  38 + }
  39 +
  40 + if (notArr.size() > 0) {
  41 + rs.put("status", 1);
  42 + rs.put("not", notArr);
  43 + } else
  44 + rs.put("status", 0);
  45 + return rs;
  46 + }
  47 +
  48 + @Override
  49 + public Integer init(String lineCode) throws Exception {
  50 + LineConfig conf = lineConfigData.get(lineCode);
  51 +
  52 + if (conf == null)
  53 + lineConfigData.init(lineCode);
  54 +
  55 + return 1;
  56 + }
  57 +
  58 + @Override
  59 + public Map<String, Object> editStartOptTime(String time, String lineCode) {
  60 + Map<String, Object> rs = new HashMap<>();
  61 + try {
  62 + LineConfig conf = lineConfigData.get(lineCode);
  63 + conf.setStartOpt(time);
  64 + lineConfigData.set(conf);
  65 +
  66 + rs.put("status", ResponseCode.SUCCESS);
  67 + rs.put("time", time);
  68 + } catch (Exception e) {
  69 + rs.put("status", ResponseCode.ERROR);
  70 + rs.put("msg", e.getMessage());
  71 + logger.error("", e);
  72 + }
  73 + return rs;
  74 + }
  75 +
  76 + @Override
  77 + public Map<String, Object> editOutTimeType(String lineCode, int type) {
  78 + Map<String, Object> rs = new HashMap<>();
  79 + try {
  80 + LineConfig conf = lineConfigData.get(lineCode);
  81 +
  82 + conf.setOutConfig(type);
  83 + //conf.setInConfig(type);
  84 + lineConfigData.set(conf);
  85 +
  86 + rs.put("status", ResponseCode.SUCCESS);
  87 + rs.put("type", type);
  88 + } catch (Exception e) {
  89 + rs.put("status", ResponseCode.ERROR);
  90 + rs.put("msg", e.getMessage());
  91 + logger.error("", e);
  92 + }
  93 + return rs;
  94 + }
  95 +
  96 + @Override
  97 + public LineConfig getByLineCode(String lineCode) {
  98 + return lineConfigData.get(lineCode);
  99 + }
  100 +
  101 + @Override
  102 + public Map<String, Object> enableInParkForSource(String lineCode, int enable) {
  103 + Map<String, Object> rs = new HashMap<>();
  104 + try {
  105 + LineConfig conf = lineConfigData.get(lineCode);
  106 +
  107 + conf.setInParkForSource(enable==1);
  108 + lineConfigData.set(conf);
  109 +
  110 + rs.put("status", ResponseCode.SUCCESS);
  111 + rs.put("enable", enable);
  112 + } catch (Exception e) {
  113 + rs.put("status", ResponseCode.ERROR);
  114 + rs.put("msg", e.getMessage());
  115 + logger.error("", e);
  116 + }
  117 + return rs;
  118 + }
85 } 119 }
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
@@ -56,9 +56,13 @@ import org.joda.time.format.DateTimeFormatter; @@ -56,9 +56,13 @@ import org.joda.time.format.DateTimeFormatter;
56 import org.slf4j.Logger; 56 import org.slf4j.Logger;
57 import org.slf4j.LoggerFactory; 57 import org.slf4j.LoggerFactory;
58 import org.springframework.beans.factory.annotation.Autowired; 58 import org.springframework.beans.factory.annotation.Autowired;
  59 +import org.springframework.jdbc.core.JdbcTemplate;
  60 +import org.springframework.jdbc.core.RowMapper;
59 import org.springframework.stereotype.Service; 61 import org.springframework.stereotype.Service;
60 62
61 import java.io.*; 63 import java.io.*;
  64 +import java.sql.ResultSet;
  65 +import java.sql.SQLException;
62 import java.text.DecimalFormat; 66 import java.text.DecimalFormat;
63 import java.text.ParseException; 67 import java.text.ParseException;
64 import java.text.SimpleDateFormat; 68 import java.text.SimpleDateFormat;
@@ -69,7 +73,8 @@ import java.util.zip.ZipOutputStream; @@ -69,7 +73,8 @@ import java.util.zip.ZipOutputStream;
69 @Service 73 @Service
70 public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInfo, Long> 74 public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInfo, Long>
71 implements ScheduleRealInfoService { 75 implements ScheduleRealInfoService {
72 - 76 + @Autowired
  77 + JdbcTemplate jdbcTemplate;
73 @Autowired 78 @Autowired
74 ScheduleRealInfoRepository scheduleRealInfoRepository; 79 ScheduleRealInfoRepository scheduleRealInfoRepository;
75 80
@@ -448,6 +453,33 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -448,6 +453,33 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
448 } 453 }
449 454
450 } 455 }
  456 +
  457 + @Override
  458 + public List<ScheduleRealInfo> queryUserInfoPx(String line, String date, String state,String type) {
  459 +// List<ScheduleRealInfo> list=new ArrayList<ScheduleRealInfo>();
  460 + String sqlPlan="select min(s.id) as id,s.j_Gh as jGh,s.cl_Zbh as clZbh,"
  461 + + " s.lp_Name as lpName,s.j_Name as jName,s.s_Gh as sGh,s.s_Name as sName"
  462 + + " from bsth_c_s_sp_info_real s "
  463 + + " where s.xl_Bm = '"+line+"' and DATE_FORMAT(s.schedule_Date,'%Y-%m-%d') ='"+date+"' "
  464 + + " GROUP BY s.j_Gh,s.cl_Zbh,s.lp_Name ,s.j_Name,s.s_Gh,"
  465 + + " s.s_Name order by "+state+" "+type;
  466 + List<ScheduleRealInfo> list= jdbcTemplate.query(sqlPlan,
  467 + new RowMapper<ScheduleRealInfo>(){
  468 + @Override
  469 + public ScheduleRealInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
  470 + ScheduleRealInfo t=new ScheduleRealInfo();
  471 + t.setId(rs.getLong("id"));
  472 + t.setjGh(rs.getString("jGh"));
  473 + t.setClZbh(rs.getString("clZbh"));
  474 + t.setLpName(rs.getString("lpName"));
  475 + t.setjName(rs.getString("jName"));
  476 + t.setsGh(rs.getString("sGh"));
  477 + t.setsName(rs.getString("sName"));
  478 + return t;
  479 + }
  480 + });
  481 + return list;
  482 + }
451 483
452 /** 484 /**
453 * 485 *
@@ -861,12 +893,6 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -861,12 +893,6 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
861 List<ScheduleRealInfo> ts = new ArrayList<>(); 893 List<ScheduleRealInfo> ts = new ArrayList<>();
862 try { 894 try {
863 Long id = Long.parseLong(map.get("id")); 895 Long id = Long.parseLong(map.get("id"));
864 - //班次类型  
865 - //String bcType = map.get("bcType");  
866 - //车辆自编号  
867 - //String clZbh = map.get("clZbh");  
868 - //计划发车时间  
869 - //String fcsj = map.get("fcsj");  
870 //实际发车时间 896 //实际发车时间
871 String fcsjActual = map.get("fcsjActual"); 897 String fcsjActual = map.get("fcsjActual");
872 //实际终点时间 898 //实际终点时间
@@ -928,6 +954,13 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -928,6 +954,13 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
928 } catch (NumberFormatException e) { 954 } catch (NumberFormatException e) {
929 logger.error("", e); 955 logger.error("", e);
930 } 956 }
  957 +
  958 + //修改班次里程
  959 + String jhlc = map.get("jhlc");
  960 + if(StringUtils.isNotEmpty(jhlc)
  961 + && Double.parseDouble(jhlc) != sch.getJhlc()){
  962 + sch.setJhlc(Double.parseDouble(jhlc));
  963 + }
931 } 964 }
932 965
933 String bcType = map.get("bcType"); 966 String bcType = map.get("bcType");
@@ -1360,39 +1393,50 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -1360,39 +1393,50 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1360 if (s.getRemarks() != null) { 1393 if (s.getRemarks() != null) {
1361 remarks += s.getRemarks(); 1394 remarks += s.getRemarks();
1362 } 1395 }
1363 - 1396 +
1364 Set<ChildTaskPlan> childTaskPlans = s.getcTasks(); 1397 Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
1365 - if (childTaskPlans.isEmpty()) {  
1366 - if(s.getStatus()==-1){  
1367 - if(remarks.indexOf("烂班")>-1){  
1368 - remarks +="(烂班)";  
1369 - }  
1370 - s.setRemarks(remarks);  
1371 - }  
1372 -  
1373 - }else{ 1398 + if (!childTaskPlans.isEmpty()) {
1374 s.setFcsjActual(""); 1399 s.setFcsjActual("");
1375 s.setZdsjActual(""); 1400 s.setZdsjActual("");
1376 } 1401 }
  1402 +
  1403 + if(s.isDestroy()){
  1404 + s.setFcsjActual("");
  1405 + s.setZdsjActual("");
  1406 + s.setJhlc(0.0);
  1407 + remarks +="(烂班)";
  1408 + s.setRemarks(remarks);
  1409 + }
1377 listSchedule.add(s); 1410 listSchedule.add(s);
1378 - if(!childTaskPlans.isEmpty()){  
1379 - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();  
1380 - while (it.hasNext()) {  
1381 - ChildTaskPlan c = it.next();  
1382 - if(!c.isDestroy()){  
1383 - ScheduleRealInfo t=new ScheduleRealInfo();  
1384 - t.setFcsjActual(c.getStartDate());  
1385 - t.setZdsjActual(c.getEndDate());  
1386 - t.setQdzName(c.getStartStationName());  
1387 - t.setZdzName(c.getEndStationName());  
1388 - t.setJhlc( Double.parseDouble(String.valueOf(c.getMileage())));  
1389 - t.setRemarks(c.getRemarks());  
1390 - t.setAdjustExps("子");  
1391 - listSchedule.add(t);  
1392 - }  
1393 - } 1411 + //计算营运里程,空驶里程
  1412 + if (!childTaskPlans.isEmpty()) {
  1413 + String sqlPc="select * from bsth_c_s_child_task where schedule="+s.getId() +" order by start_date ";
  1414 + List<ScheduleRealInfo> lists= jdbcTemplate.query(sqlPc,
  1415 + new RowMapper<ScheduleRealInfo>(){
  1416 + @Override
  1417 + public ScheduleRealInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
  1418 + ScheduleRealInfo t=new ScheduleRealInfo();
  1419 + if(rs.getInt("destroy")==0){
  1420 + t.setFcsjActual(rs.getString("start_date"));
  1421 + t.setZdsjActual(rs.getString("end_date"));
  1422 + t.setJhlc(rs.getDouble("mileage"));
  1423 + }else{
  1424 + t.setFcsjActual("");
  1425 + t.setZdsjActual("");
  1426 + t.setJhlc(0.0);
  1427 + }
  1428 + t.setQdzName(rs.getString("start_station_name"));
  1429 + t.setZdzName(rs.getString("end_station_name"));
  1430 + t.setRemarks(rs.getString("remarks"));
  1431 + t.setAdjustExps("子");
  1432 + return t;
  1433 + }
  1434 + });
  1435 + for (int j = 0; j < lists.size(); j++) {
  1436 + ScheduleRealInfo t=lists.get(j);
  1437 + listSchedule.add(t);
  1438 + }
1394 } 1439 }
1395 -  
1396 } 1440 }
1397 1441
1398 return listSchedule; 1442 return listSchedule;
@@ -2003,7 +2047,99 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -2003,7 +2047,99 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2003 String zdsjActual=""; 2047 String zdsjActual="";
2004 String zdsj1=""; 2048 String zdsj1="";
2005 String zdsjActual1=""; 2049 String zdsjActual1="";
2006 - List<ScheduleRealInfo> listInfo=scheduleRealInfoRepository.scheduleByDateAndLine(line, date); 2050 + List<ScheduleRealInfo> listInfo=scheduleRealInfoRepository.scheduleByDateAndLineQp(line, date);
  2051 + for (int i = 0; i < listInfo.size(); i++) {
  2052 + ScheduleRealInfo t=listInfo.get(i);
  2053 + if(!lpName.equals(t.getLpName())){
  2054 + zdsjActual=t.getZdsjActual();
  2055 + zdsj=t.getZdsj();
  2056 + t.setZdsjActual("");
  2057 + t.setZdsj("");
  2058 + }else{
  2059 + zdsj1=t.getZdsj();
  2060 + zdsjActual1=t.getZdsjActual();
  2061 + t.setZdsjActual(zdsjActual);
  2062 + t.setZdsj(zdsj);
  2063 + zdsj=zdsj1;
  2064 + zdsjActual=zdsjActual1;
  2065 + }
  2066 + lpName=t.getLpName();
  2067 + list.add(t);
  2068 + }
  2069 +
  2070 + List<ScheduleRealInfo> listInfo2=scheduleRealInfoRepository.scheduleByDateAndLine(line, date);
  2071 + List<ScheduleRealInfo> xList=new ArrayList<ScheduleRealInfo>();
  2072 + List<ScheduleRealInfo> yList=new ArrayList<ScheduleRealInfo>();
  2073 + List<ScheduleRealInfo> zList=new ArrayList<ScheduleRealInfo>();
  2074 + List<ScheduleRealInfo> newList=new ArrayList<ScheduleRealInfo>();
  2075 + if(listInfo2.size()>0){
  2076 + int a=listInfo2.size()%3;
  2077 + int b=listInfo2.size()/3;
  2078 + int x = 0,y=0;
  2079 + if(a==2){
  2080 + x=b+1;y=x*2;;
  2081 + }else if(b==1){
  2082 + x=b+1;y=x*2-1;;
  2083 + }else{
  2084 + x=b;
  2085 + y=2*x;
  2086 +
  2087 + }
  2088 + for (int i = 0; i < listInfo2.size(); i++) {
  2089 + ScheduleRealInfo s=listInfo2.get(i);
  2090 + if(i+1<=x){
  2091 + xList.add(s);
  2092 + }else if((i+1)>x&&(i+1)<=y){
  2093 + yList.add(s);
  2094 + }else{
  2095 + zList.add(s);
  2096 + }
  2097 + }
  2098 + for (int i = 0; i < x; i++) {
  2099 + newList.add(xList.get(i));
  2100 + if(yList.size()>i){
  2101 + newList.add(yList.get(i));
  2102 + }else{
  2103 + newList.add(new ScheduleRealInfo());
  2104 + }
  2105 + if(zList.size()>i){
  2106 + newList.add(zList.get(i));
  2107 + }else{
  2108 + newList.add(new ScheduleRealInfo());
  2109 + }
  2110 +
  2111 + }
  2112 + }
  2113 + for (int i = 0; i < newList.size(); i++) {
  2114 + ScheduleRealInfo t1=newList.get(i);
  2115 + for (int j = 0; j < list.size(); j++) {
  2116 + ScheduleRealInfo t2=list.get(j);
  2117 + if(t1.getId()==t2.getId()){
  2118 + t1=t2;
  2119 + }
  2120 + }
  2121 + }
  2122 + return newList;
  2123 + }
  2124 +
  2125 + @Override
  2126 + public List<ScheduleRealInfo> realScheduleListQp(String line, String date) {
  2127 + /*List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.queryUserInfo(line, date);
  2128 + List<ScheduleRealInfo> listTotal = scheduleRealInfoRepository.scheduleByDateAndLine(line, date);
  2129 + for(ScheduleRealInfo info:listInfo){
  2130 + for(ScheduleRealInfo total:listTotal){
  2131 + if(info.getjGh().equals(total.getjGh()) && info.getLpName().equals(total.getLpName()) && info.getClZbh().equals(total.getClZbh())){
  2132 +
  2133 + }
  2134 + }
  2135 + }*/
  2136 + List<ScheduleRealInfo> list=new ArrayList<ScheduleRealInfo>();
  2137 + String lpName="lpName";
  2138 + String zdsj="";
  2139 + String zdsjActual="";
  2140 + String zdsj1="";
  2141 + String zdsjActual1="";
  2142 + List<ScheduleRealInfo> listInfo=scheduleRealInfoRepository.scheduleByDateAndLineQp(line, date);
2007 for (int i = 0; i < listInfo.size(); i++) { 2143 for (int i = 0; i < listInfo.size(); i++) {
2008 ScheduleRealInfo t=listInfo.get(i); 2144 ScheduleRealInfo t=listInfo.get(i);
2009 if(!lpName.equals(t.getLpName())){ 2145 if(!lpName.equals(t.getLpName())){
@@ -2038,7 +2174,6 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -2038,7 +2174,6 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2038 return list; 2174 return list;
2039 } 2175 }
2040 2176
2041 -  
2042 public List<Map<String, Object>> yesterdayDataList(String line, String date) { 2177 public List<Map<String, Object>> yesterdayDataList(String line, String date) {
2043 //前一天日期 2178 //前一天日期
2044 // String date = sdfMonth.format(org.apache.commons.lang.time.DateUtils.addDays(new Date(), -1)); 2179 // String date = sdfMonth.format(org.apache.commons.lang.time.DateUtils.addDays(new Date(), -1));
@@ -3251,7 +3386,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -3251,7 +3386,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
3251 3386
3252 3387
3253 @Override 3388 @Override
3254 - public Map<String, Object> lpChangeMulti(String leftIdx, String rightIdx) { 3389 + public Map<String, Object> lpChangeMulti(String leftIdx, String rightIdx, int type) {
3255 Map<String, Object> rs = new HashMap<>(); 3390 Map<String, Object> rs = new HashMap<>();
3256 List<ScheduleRealInfo> ts = new ArrayList<>(); 3391 List<ScheduleRealInfo> ts = new ArrayList<>();
3257 try { 3392 try {
@@ -3269,10 +3404,13 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -3269,10 +3404,13 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
3269 rightSch = dayOfSchedule.get(Long.parseLong(rightList.get(i))); 3404 rightSch = dayOfSchedule.get(Long.parseLong(rightList.get(i)));
3270 3405
3271 //调换路牌 3406 //调换路牌
3272 - lpChange(leftSch, rightSch); 3407 + lpChange(leftSch, rightSch, type);
3273 3408
3274 ts.add(leftSch); 3409 ts.add(leftSch);
3275 ts.add(rightSch); 3410 ts.add(rightSch);
  3411 +
  3412 + dayOfSchedule.save(leftSch);
  3413 + dayOfSchedule.save(rightSch);
3276 } 3414 }
3277 3415
3278 rs.put("status", ResponseCode.SUCCESS); 3416 rs.put("status", ResponseCode.SUCCESS);
@@ -3287,11 +3425,11 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -3287,11 +3425,11 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
3287 } 3425 }
3288 3426
3289 @Override 3427 @Override
3290 - public void lpChange(ScheduleRealInfo leftSch, ScheduleRealInfo rightSch) { 3428 + public void lpChange(ScheduleRealInfo leftSch, ScheduleRealInfo rightSch, int type) {
3291 LpData leftData = new LpData(leftSch); 3429 LpData leftData = new LpData(leftSch);
3292 LpData rightData = new LpData(rightSch); 3430 LpData rightData = new LpData(rightSch);
3293 3431
3294 - leftData.appendTo(rightSch);  
3295 - rightData.appendTo(leftSch); 3432 + leftData.appendTo(rightSch, type);
  3433 + rightData.appendTo(leftSch, type);
3296 } 3434 }
3297 } 3435 }
3298 \ No newline at end of file 3436 \ No newline at end of file
src/main/java/com/bsth/service/schedule/impl/SchedulePlanServiceImpl.java
@@ -82,6 +82,7 @@ public class SchedulePlanServiceImpl extends BServiceImpl&lt;SchedulePlan, Long&gt; im @@ -82,6 +82,7 @@ public class SchedulePlanServiceImpl extends BServiceImpl&lt;SchedulePlan, Long&gt; im
82 KieSession session = kieBase.newKieSession(); 82 KieSession session = kieBase.newKieSession();
83 // 设置gloable对象,在drl中通过别名使用 83 // 设置gloable对象,在drl中通过别名使用
84 session.setGlobal("scheduleResult", scheduleResults_output); 84 session.setGlobal("scheduleResult", scheduleResults_output);
  85 + session.setGlobal("log", logger); // 设置日志
85 86
86 // 载入数据 87 // 载入数据
87 session.insert(scheduleCalcuParam_input); 88 session.insert(scheduleCalcuParam_input);
src/main/resources/datatools/ktrs/test.ktr 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<transformation>
  3 + <info>
  4 + <name>employeesConfigDataInput</name>
  5 + <description>&#x4eba;&#x5458;&#x914d;&#x7f6e;&#x4fe1;&#x606f;&#x5bfc;&#x5165;</description>
  6 + <extended_description>&#x4eba;&#x5458;&#x914d;&#x7f6e;&#x4fe1;&#x606f;</extended_description>
  7 + <trans_version/>
  8 + <trans_type>Normal</trans_type>
  9 + <trans_status>0</trans_status>
  10 + <directory>&#x2f;</directory>
  11 + <parameters>
  12 + <parameter>
  13 + <name>erroroutputdir</name>
  14 + <default_value/>
  15 + <description>ktr step&#x914d;&#x7f6e;&#x7684;&#x9519;&#x8bef;&#x8f93;&#x51fa;&#x76ee;&#x5f55;</description>
  16 + </parameter>
  17 + <parameter>
  18 + <name>filepath</name>
  19 + <default_value/>
  20 + <description>&#x5f85;&#x5904;&#x7406;&#x5bfc;&#x5165;&#x7684;excel&#x6587;&#x4ef6;</description>
  21 + </parameter>
  22 + </parameters>
  23 + <log>
  24 +<trans-log-table><connection/>
  25 +<schema/>
  26 +<table/>
  27 +<size_limit_lines/>
  28 +<interval/>
  29 +<timeout_days/>
  30 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STATUS</id><enabled>Y</enabled><name>STATUS</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name><subject/></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name><subject/></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name><subject/></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name><subject/></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name><subject/></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name><subject/></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>STARTDATE</id><enabled>Y</enabled><name>STARTDATE</name></field><field><id>ENDDATE</id><enabled>Y</enabled><name>ENDDATE</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>DEPDATE</id><enabled>Y</enabled><name>DEPDATE</name></field><field><id>REPLAYDATE</id><enabled>Y</enabled><name>REPLAYDATE</name></field><field><id>LOG_FIELD</id><enabled>Y</enabled><name>LOG_FIELD</name></field><field><id>EXECUTING_SERVER</id><enabled>N</enabled><name>EXECUTING_SERVER</name></field><field><id>EXECUTING_USER</id><enabled>N</enabled><name>EXECUTING_USER</name></field><field><id>CLIENT</id><enabled>N</enabled><name>CLIENT</name></field></trans-log-table>
  31 +<perf-log-table><connection/>
  32 +<schema/>
  33 +<table/>
  34 +<interval/>
  35 +<timeout_days/>
  36 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>SEQ_NR</id><enabled>Y</enabled><name>SEQ_NR</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>INPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>INPUT_BUFFER_ROWS</name></field><field><id>OUTPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>OUTPUT_BUFFER_ROWS</name></field></perf-log-table>
  37 +<channel-log-table><connection/>
  38 +<schema/>
  39 +<table/>
  40 +<timeout_days/>
  41 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>LOGGING_OBJECT_TYPE</id><enabled>Y</enabled><name>LOGGING_OBJECT_TYPE</name></field><field><id>OBJECT_NAME</id><enabled>Y</enabled><name>OBJECT_NAME</name></field><field><id>OBJECT_COPY</id><enabled>Y</enabled><name>OBJECT_COPY</name></field><field><id>REPOSITORY_DIRECTORY</id><enabled>Y</enabled><name>REPOSITORY_DIRECTORY</name></field><field><id>FILENAME</id><enabled>Y</enabled><name>FILENAME</name></field><field><id>OBJECT_ID</id><enabled>Y</enabled><name>OBJECT_ID</name></field><field><id>OBJECT_REVISION</id><enabled>Y</enabled><name>OBJECT_REVISION</name></field><field><id>PARENT_CHANNEL_ID</id><enabled>Y</enabled><name>PARENT_CHANNEL_ID</name></field><field><id>ROOT_CHANNEL_ID</id><enabled>Y</enabled><name>ROOT_CHANNEL_ID</name></field></channel-log-table>
  42 +<step-log-table><connection/>
  43 +<schema/>
  44 +<table/>
  45 +<timeout_days/>
  46 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>LOG_FIELD</id><enabled>N</enabled><name>LOG_FIELD</name></field></step-log-table>
  47 +<metrics-log-table><connection/>
  48 +<schema/>
  49 +<table/>
  50 +<timeout_days/>
  51 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>METRICS_DATE</id><enabled>Y</enabled><name>METRICS_DATE</name></field><field><id>METRICS_CODE</id><enabled>Y</enabled><name>METRICS_CODE</name></field><field><id>METRICS_DESCRIPTION</id><enabled>Y</enabled><name>METRICS_DESCRIPTION</name></field><field><id>METRICS_SUBJECT</id><enabled>Y</enabled><name>METRICS_SUBJECT</name></field><field><id>METRICS_TYPE</id><enabled>Y</enabled><name>METRICS_TYPE</name></field><field><id>METRICS_VALUE</id><enabled>Y</enabled><name>METRICS_VALUE</name></field></metrics-log-table>
  52 + </log>
  53 + <maxdate>
  54 + <connection/>
  55 + <table/>
  56 + <field/>
  57 + <offset>0.0</offset>
  58 + <maxdiff>0.0</maxdiff>
  59 + </maxdate>
  60 + <size_rowset>10000</size_rowset>
  61 + <sleep_time_empty>50</sleep_time_empty>
  62 + <sleep_time_full>50</sleep_time_full>
  63 + <unique_connections>N</unique_connections>
  64 + <feedback_shown>Y</feedback_shown>
  65 + <feedback_size>50000</feedback_size>
  66 + <using_thread_priorities>Y</using_thread_priorities>
  67 + <shared_objects_file/>
  68 + <capture_step_performance>N</capture_step_performance>
  69 + <step_performance_capturing_delay>1000</step_performance_capturing_delay>
  70 + <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
  71 + <dependencies>
  72 + </dependencies>
  73 + <partitionschemas>
  74 + </partitionschemas>
  75 + <slaveservers>
  76 + </slaveservers>
  77 + <clusterschemas>
  78 + </clusterschemas>
  79 + <created_user>-</created_user>
  80 + <created_date>2016&#x2f;06&#x2f;29 15&#x3a;12&#x3a;27.273</created_date>
  81 + <modified_user>-</modified_user>
  82 + <modified_date>2016&#x2f;06&#x2f;29 15&#x3a;12&#x3a;27.273</modified_date>
  83 + <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA&#x3d;</key_for_session_key>
  84 + <is_key_private>N</is_key_private>
  85 + </info>
  86 + <notepads>
  87 + <notepad>
  88 + <note>&#x8fd9;&#x91cc;&#x6709;&#x4e9b;&#x95ee;&#x9898;&#xa;&#x5728;window2012&#x7684;&#x73af;&#x5883;&#x4e0b;&#xff0c;&#xa;MySql&#x6570;&#x636e;&#x5e93;&#x67e5;&#x8be2;&#x4e2d;&#x5982;&#x679c;&#x8fd4;&#x56de;&#x4e2d;&#x6587;&#x5185;&#x5bb9;&#x7684;&#x5b57;&#x6bb5;&#xff0c;&#x8fd9;&#x4e2a;&#x5185;&#x5bb9;&#x4e71;&#x7801;&#xa;&#x89e3;&#x51b3;&#x529e;&#x6cd5;&#xff0c;&#x5c31;&#x662f;&#x6570;&#x636e;&#x5e93;&#x67e5;&#x8be2;&#x5168;&#x90e8;&#x7f13;&#x5b58;&#xff0c;&#x5c31;&#x4e0d;&#x4e71;&#x7801;&#xa;linux&#x73af;&#x5883;&#x4e0b;&#x6ca1;&#x95ee;&#x9898;</note>
  89 + <xloc>101</xloc>
  90 + <yloc>264</yloc>
  91 + <width>333</width>
  92 + <heigth>90</heigth>
  93 + <fontname>YaHei Consolas Hybrid</fontname>
  94 + <fontsize>12</fontsize>
  95 + <fontbold>N</fontbold>
  96 + <fontitalic>N</fontitalic>
  97 + <fontcolorred>0</fontcolorred>
  98 + <fontcolorgreen>0</fontcolorgreen>
  99 + <fontcolorblue>0</fontcolorblue>
  100 + <backgroundcolorred>255</backgroundcolorred>
  101 + <backgroundcolorgreen>205</backgroundcolorgreen>
  102 + <backgroundcolorblue>112</backgroundcolorblue>
  103 + <bordercolorred>100</bordercolorred>
  104 + <bordercolorgreen>100</bordercolorgreen>
  105 + <bordercolorblue>100</bordercolorblue>
  106 + <drawshadow>Y</drawshadow>
  107 + </notepad>
  108 + </notepads>
  109 + <connection>
  110 + <name>bus_control_variable</name>
  111 + <server>&#x24;&#x7b;v_db_ip&#x7d;</server>
  112 + <type>MYSQL</type>
  113 + <access>Native</access>
  114 + <database>&#x24;&#x7b;v_db_dname&#x7d;</database>
  115 + <port>3306</port>
  116 + <username>&#x24;&#x7b;v_db_uname&#x7d;</username>
  117 + <password>&#x24;&#x7b;v_db_pwd&#x7d;</password>
  118 + <servername/>
  119 + <data_tablespace/>
  120 + <index_tablespace/>
  121 + <attributes>
  122 + <attribute><code>EXTRA_OPTION_MYSQL.characterEncoding</code><attribute>utf8</attribute></attribute>
  123 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  124 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  125 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  126 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  127 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  128 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  129 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  130 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  131 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  132 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  133 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  134 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  135 + </attributes>
  136 + </connection>
  137 + <connection>
  138 + <name>bus_control_&#x516c;&#x53f8;_201</name>
  139 + <server>localhost</server>
  140 + <type>MYSQL</type>
  141 + <access>Native</access>
  142 + <database>control</database>
  143 + <port>3306</port>
  144 + <username>root</username>
  145 + <password>Encrypted </password>
  146 + <servername/>
  147 + <data_tablespace/>
  148 + <index_tablespace/>
  149 + <attributes>
  150 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  151 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  152 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  153 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  154 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  155 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  156 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  157 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  158 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  159 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  160 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  161 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  162 + </attributes>
  163 + </connection>
  164 + <connection>
  165 + <name>bus_control_&#x672c;&#x673a;</name>
  166 + <server>localhost</server>
  167 + <type>MYSQL</type>
  168 + <access>Native</access>
  169 + <database>control</database>
  170 + <port>3306</port>
  171 + <username>root</username>
  172 + <password>Encrypted </password>
  173 + <servername/>
  174 + <data_tablespace/>
  175 + <index_tablespace/>
  176 + <attributes>
  177 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  178 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  179 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  180 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  181 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  182 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  183 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  184 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  185 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  186 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  187 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  188 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  189 + </attributes>
  190 + </connection>
  191 + <connection>
  192 + <name>xlab_mysql_youle</name>
  193 + <server>101.231.124.8</server>
  194 + <type>MYSQL</type>
  195 + <access>Native</access>
  196 + <database>xlab_youle</database>
  197 + <port>45687</port>
  198 + <username>xlab-youle</username>
  199 + <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>
  200 + <servername/>
  201 + <data_tablespace/>
  202 + <index_tablespace/>
  203 + <attributes>
  204 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  205 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  206 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  207 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  208 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  209 + <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>
  210 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  211 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  212 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  213 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  214 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  215 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  216 + </attributes>
  217 + </connection>
  218 + <connection>
  219 + <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>
  220 + <server>localhost</server>
  221 + <type>MYSQL</type>
  222 + <access>Native</access>
  223 + <database>xlab_youle</database>
  224 + <port>3306</port>
  225 + <username>root</username>
  226 + <password>Encrypted </password>
  227 + <servername/>
  228 + <data_tablespace/>
  229 + <index_tablespace/>
  230 + <attributes>
  231 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  232 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  233 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  234 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  235 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  236 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  237 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  238 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  239 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  240 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  241 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  242 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  243 + </attributes>
  244 + </connection>
  245 + <connection>
  246 + <name>xlab_youle</name>
  247 + <server/>
  248 + <type>MYSQL</type>
  249 + <access>JNDI</access>
  250 + <database>xlab_youle</database>
  251 + <port>1521</port>
  252 + <username/>
  253 + <password>Encrypted </password>
  254 + <servername/>
  255 + <data_tablespace/>
  256 + <index_tablespace/>
  257 + <attributes>
  258 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  259 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  260 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  261 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  262 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  263 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  264 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  265 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  266 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  267 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  268 + </attributes>
  269 + </connection>
  270 + <order>
  271 + <hop> <from>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ecinfo</from><to>&#x9519;&#x8bef;&#x8f93;&#x51fa;</to><enabled>Y</enabled> </hop>
  272 + <hop> <from>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</from><to>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</to><enabled>Y</enabled> </hop>
  273 + <hop> <from>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</from><to>&#x542f;&#x7528;&#x88ab;&#x6570;&#x636e;flag</to><enabled>Y</enabled> </hop>
  274 + <hop> <from>&#x542f;&#x7528;&#x88ab;&#x6570;&#x636e;flag</from><to>&#x7ebf;&#x8def;id&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>
  275 + <hop> <from>&#x7ebf;&#x8def;id&#x67e5;&#x8be2;</from><to>&#x8fc7;&#x6ee4;&#x7ebf;&#x8def;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
  276 + <hop> <from>&#x8fc7;&#x6ee4;&#x7ebf;&#x8def;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</from><to>&#x9a7e;&#x9a76;&#x5458;id&#x67e5;&#x627e;</to><enabled>Y</enabled> </hop>
  277 + <hop> <from>&#x9a7e;&#x9a76;&#x5458;id&#x67e5;&#x627e;</from><to>&#x8fc7;&#x6ee4;&#x9a7e;&#x9a76;&#x5458;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
  278 + <hop> <from>&#x8fc7;&#x6ee4;&#x9a7e;&#x9a76;&#x5458;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</from><to>&#x552e;&#x7968;&#x5458;id&#x67e5;&#x627e;</to><enabled>Y</enabled> </hop>
  279 + <hop> <from>&#x552e;&#x7968;&#x5458;id&#x67e5;&#x627e;</from><to>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ecinfo</to><enabled>Y</enabled> </hop>
  280 + </order>
  281 + <step>
  282 + <name>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</name>
  283 + <type>ExcelInput</type>
  284 + <description/>
  285 + <distribute>Y</distribute>
  286 + <custom_distribution/>
  287 + <copies>1</copies>
  288 + <partitioning>
  289 + <method>none</method>
  290 + <schema_name/>
  291 + </partitioning>
  292 + <header>Y</header>
  293 + <noempty>Y</noempty>
  294 + <stoponempty>N</stoponempty>
  295 + <filefield/>
  296 + <sheetfield/>
  297 + <sheetrownumfield/>
  298 + <rownumfield/>
  299 + <sheetfield/>
  300 + <filefield/>
  301 + <limit>0</limit>
  302 + <encoding/>
  303 + <add_to_result_filenames>Y</add_to_result_filenames>
  304 + <accept_filenames>Y</accept_filenames>
  305 + <accept_field>filepath_</accept_field>
  306 + <accept_stepname>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</accept_stepname>
  307 + <file>
  308 + <name/>
  309 + <filemask/>
  310 + <exclude_filemask/>
  311 + <file_required>N</file_required>
  312 + <include_subfolders>N</include_subfolders>
  313 + </file>
  314 + <fields>
  315 + <field>
  316 + <name>&#x7ebf;&#x8def;</name>
  317 + <type>String</type>
  318 + <length>-1</length>
  319 + <precision>-1</precision>
  320 + <trim_type>none</trim_type>
  321 + <repeat>N</repeat>
  322 + <format/>
  323 + <currency/>
  324 + <decimal/>
  325 + <group/>
  326 + </field>
  327 + <field>
  328 + <name>&#x642d;&#x73ed;&#x7f16;&#x7801;</name>
  329 + <type>String</type>
  330 + <length>-1</length>
  331 + <precision>-1</precision>
  332 + <trim_type>none</trim_type>
  333 + <repeat>N</repeat>
  334 + <format>&#x23;</format>
  335 + <currency/>
  336 + <decimal/>
  337 + <group/>
  338 + </field>
  339 + <field>
  340 + <name>&#x9a7e;&#x9a76;&#x5458;&#x5de5;&#x53f7;</name>
  341 + <type>String</type>
  342 + <length>-1</length>
  343 + <precision>-1</precision>
  344 + <trim_type>none</trim_type>
  345 + <repeat>N</repeat>
  346 + <format>&#x23;</format>
  347 + <currency/>
  348 + <decimal/>
  349 + <group/>
  350 + </field>
  351 + <field>
  352 + <name>&#x9a7e;&#x9a76;&#x5458;</name>
  353 + <type>String</type>
  354 + <length>-1</length>
  355 + <precision>-1</precision>
  356 + <trim_type>none</trim_type>
  357 + <repeat>N</repeat>
  358 + <format/>
  359 + <currency/>
  360 + <decimal/>
  361 + <group/>
  362 + </field>
  363 + <field>
  364 + <name>&#x552e;&#x7968;&#x5458;&#x5de5;&#x53f7;</name>
  365 + <type>String</type>
  366 + <length>-1</length>
  367 + <precision>-1</precision>
  368 + <trim_type>none</trim_type>
  369 + <repeat>N</repeat>
  370 + <format>&#x23;</format>
  371 + <currency/>
  372 + <decimal/>
  373 + <group/>
  374 + </field>
  375 + <field>
  376 + <name>&#x552e;&#x7968;&#x5458;</name>
  377 + <type>String</type>
  378 + <length>-1</length>
  379 + <precision>-1</precision>
  380 + <trim_type>none</trim_type>
  381 + <repeat>N</repeat>
  382 + <format/>
  383 + <currency/>
  384 + <decimal/>
  385 + <group/>
  386 + </field>
  387 + </fields>
  388 + <sheets>
  389 + <sheet>
  390 + <name>&#x5de5;&#x4f5c;&#x8868;1</name>
  391 + <startrow>0</startrow>
  392 + <startcol>0</startcol>
  393 + </sheet>
  394 + </sheets>
  395 + <strict_types>N</strict_types>
  396 + <error_ignored>N</error_ignored>
  397 + <error_line_skipped>N</error_line_skipped>
  398 + <bad_line_files_destination_directory/>
  399 + <bad_line_files_extension>warning</bad_line_files_extension>
  400 + <error_line_files_destination_directory/>
  401 + <error_line_files_extension>error</error_line_files_extension>
  402 + <line_number_files_destination_directory/>
  403 + <line_number_files_extension>line</line_number_files_extension>
  404 + <shortFileFieldName/>
  405 + <pathFieldName/>
  406 + <hiddenFieldName/>
  407 + <lastModificationTimeFieldName/>
  408 + <uriNameFieldName/>
  409 + <rootUriNameFieldName/>
  410 + <extensionFieldName/>
  411 + <sizeFieldName/>
  412 + <spreadsheet_type>JXL</spreadsheet_type>
  413 + <cluster_schema/>
  414 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  415 + <xloc>93</xloc>
  416 + <yloc>51</yloc>
  417 + <draw>Y</draw>
  418 + </GUI>
  419 + </step>
  420 +
  421 + <step>
  422 + <name>&#x542f;&#x7528;&#x88ab;&#x6570;&#x636e;flag</name>
  423 + <type>Constant</type>
  424 + <description/>
  425 + <distribute>Y</distribute>
  426 + <custom_distribution/>
  427 + <copies>1</copies>
  428 + <partitioning>
  429 + <method>none</method>
  430 + <schema_name/>
  431 + </partitioning>
  432 + <fields>
  433 + <field>
  434 + <name>isCancel</name>
  435 + <type>Integer</type>
  436 + <format/>
  437 + <currency/>
  438 + <decimal/>
  439 + <group/>
  440 + <nullif>0</nullif>
  441 + <length>-1</length>
  442 + <precision>-1</precision>
  443 + <set_empty_string>N</set_empty_string>
  444 + </field>
  445 + </fields>
  446 + <cluster_schema/>
  447 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  448 + <xloc>225</xloc>
  449 + <yloc>53</yloc>
  450 + <draw>Y</draw>
  451 + </GUI>
  452 + </step>
  453 +
  454 + <step>
  455 + <name>&#x552e;&#x7968;&#x5458;id&#x67e5;&#x627e;</name>
  456 + <type>DBJoin</type>
  457 + <description/>
  458 + <distribute>Y</distribute>
  459 + <custom_distribution/>
  460 + <copies>1</copies>
  461 + <partitioning>
  462 + <method>none</method>
  463 + <schema_name/>
  464 + </partitioning>
  465 + <connection>bus_control_variable</connection>
  466 + <rowlimit>1</rowlimit>
  467 + <sql>select id as sid from bsth_c_personnel&#xa;where job_code &#x3d; &#x3f; and personnel_name &#x3d; &#x3f;</sql>
  468 + <outer_join>Y</outer_join>
  469 + <replace_vars>N</replace_vars>
  470 + <parameter>
  471 + <field>
  472 + <name>&#x552e;&#x7968;&#x5458;&#x5de5;&#x53f7;</name>
  473 + <type>String</type>
  474 + </field>
  475 + <field>
  476 + <name>&#x552e;&#x7968;&#x5458;</name>
  477 + <type>String</type>
  478 + </field>
  479 + </parameter>
  480 + <cluster_schema/>
  481 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  482 + <xloc>673</xloc>
  483 + <yloc>47</yloc>
  484 + <draw>Y</draw>
  485 + </GUI>
  486 + </step>
  487 +
  488 + <step>
  489 + <name>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ecinfo</name>
  490 + <type>InsertUpdate</type>
  491 + <description/>
  492 + <distribute>Y</distribute>
  493 + <custom_distribution/>
  494 + <copies>1</copies>
  495 + <partitioning>
  496 + <method>none</method>
  497 + <schema_name/>
  498 + </partitioning>
  499 + <connection>bus_control_variable</connection>
  500 + <commit>100</commit>
  501 + <update_bypassed>N</update_bypassed>
  502 + <lookup>
  503 + <schema/>
  504 + <table>bsth_c_s_ecinfo</table>
  505 + <key>
  506 + <name>xlid</name>
  507 + <field>xl</field>
  508 + <condition>&#x3d;</condition>
  509 + <name2/>
  510 + </key>
  511 + <key>
  512 + <name>&#x642d;&#x73ed;&#x7f16;&#x7801;</name>
  513 + <field>dbbm</field>
  514 + <condition>&#x3d;</condition>
  515 + <name2/>
  516 + </key>
  517 + <value>
  518 + <name>xl</name>
  519 + <rename>xlid</rename>
  520 + <update>Y</update>
  521 + </value>
  522 + <value>
  523 + <name>dbbm</name>
  524 + <rename>&#x642d;&#x73ed;&#x7f16;&#x7801;</rename>
  525 + <update>Y</update>
  526 + </value>
  527 + <value>
  528 + <name>jsy</name>
  529 + <rename>jid</rename>
  530 + <update>Y</update>
  531 + </value>
  532 + <value>
  533 + <name>spy</name>
  534 + <rename>sid</rename>
  535 + <update>Y</update>
  536 + </value>
  537 + <value>
  538 + <name>is_cancel</name>
  539 + <rename>isCancel</rename>
  540 + <update>Y</update>
  541 + </value>
  542 + </lookup>
  543 + <cluster_schema/>
  544 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  545 + <xloc>676</xloc>
  546 + <yloc>200</yloc>
  547 + <draw>Y</draw>
  548 + </GUI>
  549 + </step>
  550 +
  551 + <step>
  552 + <name>&#x7ebf;&#x8def;id&#x67e5;&#x8be2;</name>
  553 + <type>DBLookup</type>
  554 + <description/>
  555 + <distribute>Y</distribute>
  556 + <custom_distribution/>
  557 + <copies>1</copies>
  558 + <partitioning>
  559 + <method>none</method>
  560 + <schema_name/>
  561 + </partitioning>
  562 + <connection>bus_control_variable</connection>
  563 + <cache>Y</cache>
  564 + <cache_load_all>Y</cache_load_all>
  565 + <cache_size>0</cache_size>
  566 + <lookup>
  567 + <schema/>
  568 + <table>bsth_c_line</table>
  569 + <orderby/>
  570 + <fail_on_multiple>N</fail_on_multiple>
  571 + <eat_row_on_failure>N</eat_row_on_failure>
  572 + <key>
  573 + <name>&#x7ebf;&#x8def;</name>
  574 + <field>name</field>
  575 + <condition>&#x3d;</condition>
  576 + <name2/>
  577 + </key>
  578 + <key>
  579 + <name>isCancel</name>
  580 + <field>destroy</field>
  581 + <condition>&#x3d;</condition>
  582 + <name2/>
  583 + </key>
  584 + <value>
  585 + <name>id</name>
  586 + <rename>xlid</rename>
  587 + <default/>
  588 + <type>Integer</type>
  589 + </value>
  590 + </lookup>
  591 + <cluster_schema/>
  592 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  593 + <xloc>397</xloc>
  594 + <yloc>144</yloc>
  595 + <draw>Y</draw>
  596 + </GUI>
  597 + </step>
  598 +
  599 + <step>
  600 + <name>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</name>
  601 + <type>GetVariable</type>
  602 + <description/>
  603 + <distribute>Y</distribute>
  604 + <custom_distribution/>
  605 + <copies>1</copies>
  606 + <partitioning>
  607 + <method>none</method>
  608 + <schema_name/>
  609 + </partitioning>
  610 + <fields>
  611 + <field>
  612 + <name>filepath_</name>
  613 + <variable>&#x24;&#x7b;filepath&#x7d;</variable>
  614 + <type>String</type>
  615 + <format/>
  616 + <currency/>
  617 + <decimal/>
  618 + <group/>
  619 + <length>-1</length>
  620 + <precision>-1</precision>
  621 + <trim_type>none</trim_type>
  622 + </field>
  623 + <field>
  624 + <name>erroroutputdir_</name>
  625 + <variable>&#x24;&#x7b;erroroutputdir&#x7d;</variable>
  626 + <type>String</type>
  627 + <format/>
  628 + <currency/>
  629 + <decimal/>
  630 + <group/>
  631 + <length>-1</length>
  632 + <precision>-1</precision>
  633 + <trim_type>none</trim_type>
  634 + </field>
  635 + </fields>
  636 + <cluster_schema/>
  637 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  638 + <xloc>94</xloc>
  639 + <yloc>178</yloc>
  640 + <draw>Y</draw>
  641 + </GUI>
  642 + </step>
  643 +
  644 + <step>
  645 + <name>&#x8fc7;&#x6ee4;&#x7ebf;&#x8def;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</name>
  646 + <type>FilterRows</type>
  647 + <description/>
  648 + <distribute>Y</distribute>
  649 + <custom_distribution/>
  650 + <copies>1</copies>
  651 + <partitioning>
  652 + <method>none</method>
  653 + <schema_name/>
  654 + </partitioning>
  655 +<send_true_to/>
  656 +<send_false_to/>
  657 + <compare>
  658 +<condition>
  659 + <negated>N</negated>
  660 + <leftvalue>xlid</leftvalue>
  661 + <function>IS NOT NULL</function>
  662 + <rightvalue/>
  663 + </condition>
  664 + </compare>
  665 + <cluster_schema/>
  666 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  667 + <xloc>395</xloc>
  668 + <yloc>49</yloc>
  669 + <draw>Y</draw>
  670 + </GUI>
  671 + </step>
  672 +
  673 + <step>
  674 + <name>&#x8fc7;&#x6ee4;&#x9a7e;&#x9a76;&#x5458;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</name>
  675 + <type>FilterRows</type>
  676 + <description/>
  677 + <distribute>Y</distribute>
  678 + <custom_distribution/>
  679 + <copies>1</copies>
  680 + <partitioning>
  681 + <method>none</method>
  682 + <schema_name/>
  683 + </partitioning>
  684 +<send_true_to>&#x552e;&#x7968;&#x5458;id&#x67e5;&#x627e;</send_true_to>
  685 +<send_false_to/>
  686 + <compare>
  687 +<condition>
  688 + <negated>N</negated>
  689 + <leftvalue>jid</leftvalue>
  690 + <function>IS NOT NULL</function>
  691 + <rightvalue/>
  692 + </condition>
  693 + </compare>
  694 + <cluster_schema/>
  695 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  696 + <xloc>538</xloc>
  697 + <yloc>47</yloc>
  698 + <draw>Y</draw>
  699 + </GUI>
  700 + </step>
  701 +
  702 + <step>
  703 + <name>&#x9519;&#x8bef;&#x8f93;&#x51fa;</name>
  704 + <type>ExcelOutput</type>
  705 + <description/>
  706 + <distribute>Y</distribute>
  707 + <custom_distribution/>
  708 + <copies>1</copies>
  709 + <partitioning>
  710 + <method>none</method>
  711 + <schema_name/>
  712 + </partitioning>
  713 + <header>Y</header>
  714 + <footer>N</footer>
  715 + <encoding>UTF-8</encoding>
  716 + <append>N</append>
  717 + <add_to_result_filenames>Y</add_to_result_filenames>
  718 + <file>
  719 + <name>&#x24;&#x7b;erroroutputdir&#x7d;&#x2f;&#x4eba;&#x5458;&#x914d;&#x7f6e;_&#x9519;&#x8bef;</name>
  720 + <extention>xls</extention>
  721 + <do_not_open_newfile_init>N</do_not_open_newfile_init>
  722 + <create_parent_folder>N</create_parent_folder>
  723 + <split>N</split>
  724 + <add_date>N</add_date>
  725 + <add_time>N</add_time>
  726 + <SpecifyFormat>N</SpecifyFormat>
  727 + <date_time_format/>
  728 + <sheetname>Sheet1</sheetname>
  729 + <autosizecolums>N</autosizecolums>
  730 + <nullisblank>N</nullisblank>
  731 + <protect_sheet>N</protect_sheet>
  732 + <password>Encrypted </password>
  733 + <splitevery>0</splitevery>
  734 + <usetempfiles>N</usetempfiles>
  735 + <tempdirectory/>
  736 + </file>
  737 + <template>
  738 + <enabled>N</enabled>
  739 + <append>N</append>
  740 + <filename>template.xls</filename>
  741 + </template>
  742 + <fields>
  743 + <field>
  744 + <name>&#x7ebf;&#x8def;</name>
  745 + <type>String</type>
  746 + <format/>
  747 + </field>
  748 + <field>
  749 + <name>&#x642d;&#x73ed;&#x7f16;&#x7801;</name>
  750 + <type>String</type>
  751 + <format/>
  752 + </field>
  753 + <field>
  754 + <name>&#x9a7e;&#x9a76;&#x5458;&#x5de5;&#x53f7;</name>
  755 + <type>String</type>
  756 + <format/>
  757 + </field>
  758 + <field>
  759 + <name>&#x9a7e;&#x9a76;&#x5458;</name>
  760 + <type>String</type>
  761 + <format/>
  762 + </field>
  763 + <field>
  764 + <name>&#x552e;&#x7968;&#x5458;&#x5de5;&#x53f7;</name>
  765 + <type>String</type>
  766 + <format/>
  767 + </field>
  768 + <field>
  769 + <name>&#x552e;&#x7968;&#x5458;</name>
  770 + <type>String</type>
  771 + <format/>
  772 + </field>
  773 + <field>
  774 + <name>isCancel</name>
  775 + <type>Integer</type>
  776 + <format/>
  777 + </field>
  778 + <field>
  779 + <name>xlid</name>
  780 + <type>Integer</type>
  781 + <format/>
  782 + </field>
  783 + <field>
  784 + <name>jid</name>
  785 + <type>Integer</type>
  786 + <format/>
  787 + </field>
  788 + <field>
  789 + <name>sid</name>
  790 + <type>Integer</type>
  791 + <format/>
  792 + </field>
  793 + <field>
  794 + <name>error_count</name>
  795 + <type>Integer</type>
  796 + <format/>
  797 + </field>
  798 + <field>
  799 + <name>error_desc</name>
  800 + <type>String</type>
  801 + <format/>
  802 + </field>
  803 + <field>
  804 + <name>error_column1</name>
  805 + <type>String</type>
  806 + <format/>
  807 + </field>
  808 + <field>
  809 + <name>error_column2</name>
  810 + <type>String</type>
  811 + <format/>
  812 + </field>
  813 + </fields>
  814 + <custom>
  815 + <header_font_name>arial</header_font_name>
  816 + <header_font_size>10</header_font_size>
  817 + <header_font_bold>N</header_font_bold>
  818 + <header_font_italic>N</header_font_italic>
  819 + <header_font_underline>no</header_font_underline>
  820 + <header_font_orientation>horizontal</header_font_orientation>
  821 + <header_font_color>black</header_font_color>
  822 + <header_background_color>none</header_background_color>
  823 + <header_row_height>255</header_row_height>
  824 + <header_alignment>left</header_alignment>
  825 + <header_image/>
  826 + <row_font_name>arial</row_font_name>
  827 + <row_font_size>10</row_font_size>
  828 + <row_font_color>black</row_font_color>
  829 + <row_background_color>none</row_background_color>
  830 + </custom>
  831 + <cluster_schema/>
  832 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  833 + <xloc>676</xloc>
  834 + <yloc>323</yloc>
  835 + <draw>Y</draw>
  836 + </GUI>
  837 + </step>
  838 +
  839 + <step>
  840 + <name>&#x9a7e;&#x9a76;&#x5458;id&#x67e5;&#x627e;</name>
  841 + <type>DBJoin</type>
  842 + <description/>
  843 + <distribute>Y</distribute>
  844 + <custom_distribution/>
  845 + <copies>1</copies>
  846 + <partitioning>
  847 + <method>none</method>
  848 + <schema_name/>
  849 + </partitioning>
  850 + <connection>bus_control_variable</connection>
  851 + <rowlimit>1</rowlimit>
  852 + <sql>select id as jid from bsth_c_personnel&#xa;where job_code &#x3d; &#x3f; and personnel_name &#x3d; &#x3f;</sql>
  853 + <outer_join>Y</outer_join>
  854 + <replace_vars>N</replace_vars>
  855 + <parameter>
  856 + <field>
  857 + <name>&#x9a7e;&#x9a76;&#x5458;&#x5de5;&#x53f7;</name>
  858 + <type>String</type>
  859 + </field>
  860 + <field>
  861 + <name>&#x9a7e;&#x9a76;&#x5458;</name>
  862 + <type>String</type>
  863 + </field>
  864 + </parameter>
  865 + <cluster_schema/>
  866 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  867 + <xloc>537</xloc>
  868 + <yloc>143</yloc>
  869 + <draw>Y</draw>
  870 + </GUI>
  871 + </step>
  872 +
  873 + <step_error_handling>
  874 + <error>
  875 + <source_step>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ecinfo</source_step>
  876 + <target_step>&#x9519;&#x8bef;&#x8f93;&#x51fa;</target_step>
  877 + <is_enabled>Y</is_enabled>
  878 + <nr_valuename>error_count</nr_valuename>
  879 + <descriptions_valuename>error_desc</descriptions_valuename>
  880 + <fields_valuename>error_column1</fields_valuename>
  881 + <codes_valuename>error_column2</codes_valuename>
  882 + <max_errors/>
  883 + <max_pct_errors/>
  884 + <min_pct_rows/>
  885 + </error>
  886 + </step_error_handling>
  887 + <slave-step-copy-partition-distribution>
  888 +</slave-step-copy-partition-distribution>
  889 + <slave_transformation>N</slave_transformation>
  890 +
  891 +</transformation>
src/main/resources/rules/shiftloop.drl
@@ -8,6 +8,10 @@ import com.bsth.service.schedule.rules.shiftloop.ScheduleRule_input; @@ -8,6 +8,10 @@ import com.bsth.service.schedule.rules.shiftloop.ScheduleRule_input;
8 import com.bsth.service.schedule.rules.shiftloop.ScheduleResult_output; 8 import com.bsth.service.schedule.rules.shiftloop.ScheduleResult_output;
9 import com.bsth.service.schedule.rules.shiftloop.ScheduleResults_output; 9 import com.bsth.service.schedule.rules.shiftloop.ScheduleResults_output;
10 10
  11 +import org.slf4j.Logger;
  12 +
  13 +global Logger log;
  14 +
11 /* 15 /*
12 TODO:规则说明,以后待说明 16 TODO:规则说明,以后待说明
13 */ 17 */
@@ -30,7 +34,10 @@ end @@ -30,7 +34,10 @@ end
30 rule "calcu_days_1" 34 rule "calcu_days_1"
31 salience 100 35 salience 100
32 when 36 when
33 - ScheduleCalcuParam_input($fromDate : fromDate, $toDate : toDate, $fromDate.isBefore($toDate)) 37 + ScheduleCalcuParam_input(
  38 + $fromDate : fromDate,
  39 + $toDate : toDate,
  40 + $fromDate.isBefore($toDate) || $fromDate.isEqual($toDate))
34 ScheduleRule_input($ruleId : ruleId, $qyrq : qyrq) 41 ScheduleRule_input($ruleId : ruleId, $qyrq : qyrq)
35 eval($qyrq.isBefore($fromDate)) 42 eval($qyrq.isBefore($fromDate))
36 then 43 then
@@ -44,8 +51,8 @@ rule &quot;calcu_days_1&quot; @@ -44,8 +51,8 @@ rule &quot;calcu_days_1&quot;
44 cdr.setCalcu_start_date($fromDate); 51 cdr.setCalcu_start_date($fromDate);
45 cdr.setCalcu_end_date($toDate); 52 cdr.setCalcu_end_date($toDate);
46 53
47 - System.out.println("开始日期离启用日期的天数 qyrq_days=" + p1.getDays());  
48 - System.out.println("总共需要排班的天数 sdays=" + (p2.getDays() + 1)); 54 + log.info("开始日期离启用日期的天数 qyrq_days={}", p1.getDays());
  55 + log.info("总共需要排班的天数 sdays={}", (p2.getDays() + 1));
49 56
50 insert(cdr); // 插入fact数据,进入下一个阶段 57 insert(cdr); // 插入fact数据,进入下一个阶段
51 end 58 end
@@ -53,7 +60,10 @@ end @@ -53,7 +60,10 @@ end
53 rule "calcu_days_2" 60 rule "calcu_days_2"
54 salience 100 61 salience 100
55 when 62 when
56 - ScheduleCalcuParam_input($fromDate : fromDate, $toDate : toDate, $fromDate.isBefore($toDate)) 63 + ScheduleCalcuParam_input(
  64 + $fromDate : fromDate,
  65 + $toDate : toDate,
  66 + $fromDate.isBefore($toDate) || $fromDate.isEqual($toDate))
57 ScheduleRule_input($ruleId : ruleId, $qyrq : qyrq) 67 ScheduleRule_input($ruleId : ruleId, $qyrq : qyrq)
58 eval((!$qyrq.isBefore($fromDate)) && (!$qyrq.isAfter($toDate))) 68 eval((!$qyrq.isBefore($fromDate)) && (!$qyrq.isAfter($toDate)))
59 then 69 then
@@ -62,12 +72,12 @@ rule &quot;calcu_days_2&quot; @@ -62,12 +72,12 @@ rule &quot;calcu_days_2&quot;
62 cdr.setRuleId($ruleId); 72 cdr.setRuleId($ruleId);
63 cdr.setQyrq_days(0); 73 cdr.setQyrq_days(0);
64 Period p2 = new Period($qyrq, $toDate, PeriodType.days()); 74 Period p2 = new Period($qyrq, $toDate, PeriodType.days());
65 - cdr.setSdays(p2.getDays()); 75 + cdr.setSdays(Integer.valueOf(p2.getDays() + 1));
66 cdr.setCalcu_start_date($qyrq); 76 cdr.setCalcu_start_date($qyrq);
67 cdr.setCalcu_end_date($toDate); 77 cdr.setCalcu_end_date($toDate);
68 78
69 - System.out.println("开始日期离启用日期的天数 qyrq_days=0");  
70 - System.out.println("总共需要排班的天数 sdays=" + (p2.getDays() + 1)); 79 + log.info("开始日期离启用日期的天数 qyrq_days=0");
  80 + log.info("总共需要排班的天数 sdays={}", (p2.getDays() + 1));
71 81
72 insert(cdr); // 插入fact数据,进入下一个阶段 82 insert(cdr); // 插入fact数据,进入下一个阶段
73 end 83 end
@@ -130,7 +140,7 @@ rule &quot;calcu_guideboard_index_1&quot; @@ -130,7 +140,7 @@ rule &quot;calcu_guideboard_index_1&quot;
130 cgir.setRuleId($ruleId); 140 cgir.setRuleId($ruleId);
131 cgir.setCalcu_index($oindex); 141 cgir.setCalcu_index($oindex);
132 142
133 - System.out.println("guideboard ruleId=" + $ruleId + ", calcu_index=" + cgir.getCalcu_index()); 143 + log.info("guideboard ruleId={}, calcu_index={}", $ruleId, cgir.getCalcu_index());
134 144
135 insert(cgir); 145 insert(cgir);
136 end 146 end
@@ -148,7 +158,7 @@ rule &quot;calcu_guideboard_index_2&quot; @@ -148,7 +158,7 @@ rule &quot;calcu_guideboard_index_2&quot;
148 cgip_1.setTemp(Integer.valueOf($rangesize) - 1 - $oindex); 158 cgip_1.setTemp(Integer.valueOf($rangesize) - 1 - $oindex);
149 cgip_1.setDays_temp($qyrq_days - cgip_1.getTemp()); 159 cgip_1.setDays_temp($qyrq_days - cgip_1.getTemp());
150 160
151 - System.out.println("guideboard ruleId=" + $ruleId + ", days_temp=" + cgip_1.getDays_temp()); 161 + log.info("guideboard ruleId={}, days_temp={}", $ruleId, cgip_1.getDays_temp());
152 162
153 insert(cgip_1); 163 insert(cgip_1);
154 end 164 end
@@ -165,7 +175,7 @@ rule &quot;calcu_guideboard_index_2_1_result&quot; @@ -165,7 +175,7 @@ rule &quot;calcu_guideboard_index_2_1_result&quot;
165 // cgir.setCalcu_index($oindex + $days_temp); 175 // cgir.setCalcu_index($oindex + $days_temp);
166 cgir.setCalcu_index($range_size - 1 + $days_temp); 176 cgir.setCalcu_index($range_size - 1 + $days_temp);
167 177
168 - System.out.println("guideboard ruleId=" + $ruleId + ", calcu_index=" + cgir.getCalcu_index()); 178 + log.info("guideboard ruleId={}, calcu_index={}", $ruleId, cgir.getCalcu_index());
169 179
170 insert(cgir); 180 insert(cgir);
171 end 181 end
@@ -194,7 +204,7 @@ rule &quot;calcu_guideboard_index_2_2_1_result&quot; @@ -194,7 +204,7 @@ rule &quot;calcu_guideboard_index_2_2_1_result&quot;
194 cgir.setRuleId($ruleId); 204 cgir.setRuleId($ruleId);
195 cgir.setCalcu_index($y_value - 1); 205 cgir.setCalcu_index($y_value - 1);
196 206
197 - System.out.println("guideboard ruleId=" + $ruleId + ", calcu_index=" + cgir.getCalcu_index()); 207 + log.info("guideboard ruleId={}, calcu_index={}", $ruleId, cgir.getCalcu_index());
198 208
199 insert(cgir); 209 insert(cgir);
200 end 210 end
@@ -210,7 +220,7 @@ rule &quot;calcu_guideboard_index_2_2_2_result&quot; @@ -210,7 +220,7 @@ rule &quot;calcu_guideboard_index_2_2_2_result&quot;
210 cgir.setRuleId($ruleId); 220 cgir.setRuleId($ruleId);
211 cgir.setCalcu_index($rangesize - 1); 221 cgir.setCalcu_index($rangesize - 1);
212 222
213 - System.out.println("guideboard ruleId=" + $ruleId + ", calcu_index=" + cgir.getCalcu_index()); 223 + log.info("guideboard ruleId={}, calcu_index={}", $ruleId, cgir.getCalcu_index());
214 224
215 insert(cgir); 225 insert(cgir);
216 end 226 end
@@ -243,7 +253,7 @@ rule &quot;calcu_employee_index_1&quot; @@ -243,7 +253,7 @@ rule &quot;calcu_employee_index_1&quot;
243 cgir.setRuleId($ruleId); 253 cgir.setRuleId($ruleId);
244 cgir.setCalcu_index($oindex); 254 cgir.setCalcu_index($oindex);
245 255
246 - System.out.println("employee ruleId=" + $ruleId + ", calcu_index=" + cgir.getCalcu_index()); 256 + log.info("employee ruleId={}, calcu_index={}", $ruleId, cgir.getCalcu_index());
247 257
248 insert(cgir); 258 insert(cgir);
249 end 259 end
@@ -261,7 +271,7 @@ rule &quot;calcu_employee_index_2&quot; @@ -261,7 +271,7 @@ rule &quot;calcu_employee_index_2&quot;
261 cgip_1.setTemp(Integer.valueOf($rangesize) - 1 - $oindex); 271 cgip_1.setTemp(Integer.valueOf($rangesize) - 1 - $oindex);
262 cgip_1.setDays_temp($qyrq_days - cgip_1.getTemp()); 272 cgip_1.setDays_temp($qyrq_days - cgip_1.getTemp());
263 273
264 - System.out.println("employee ruleId=" + $ruleId + ", days_temp=" + cgip_1.getDays_temp()); 274 + log.info("employee ruleId={}, days_temp={}", $ruleId, cgip_1.getDays_temp());
265 275
266 insert(cgip_1); 276 insert(cgip_1);
267 end 277 end
@@ -278,7 +288,7 @@ rule &quot;calcu_employee_index_2_1_result&quot; @@ -278,7 +288,7 @@ rule &quot;calcu_employee_index_2_1_result&quot;
278 // cgir.setCalcu_index($oindex + $days_temp); 288 // cgir.setCalcu_index($oindex + $days_temp);
279 cgir.setCalcu_index($range_size - 1 + $days_temp); 289 cgir.setCalcu_index($range_size - 1 + $days_temp);
280 290
281 - System.out.println("employee ruleId=" + $ruleId + ", calcu_index=" + cgir.getCalcu_index()); 291 + log.info("employee ruleId={}, calcu_index={}", $ruleId, cgir.getCalcu_index());
282 292
283 insert(cgir); 293 insert(cgir);
284 end 294 end
@@ -307,7 +317,7 @@ rule &quot;calcu_employee_index_2_2_1_result&quot; @@ -307,7 +317,7 @@ rule &quot;calcu_employee_index_2_2_1_result&quot;
307 cgir.setRuleId($ruleId); 317 cgir.setRuleId($ruleId);
308 cgir.setCalcu_index($y_value - 1); 318 cgir.setCalcu_index($y_value - 1);
309 319
310 - System.out.println("employee ruleId=" + $ruleId + ", calcu_index=" + cgir.getCalcu_index()); 320 + log.info("employee ruleId={}, calcu_index={}", $ruleId, cgir.getCalcu_index());
311 321
312 insert(cgir); 322 insert(cgir);
313 end 323 end
@@ -323,7 +333,7 @@ rule &quot;calcu_employee_index_2_2_2_result&quot; @@ -323,7 +333,7 @@ rule &quot;calcu_employee_index_2_2_2_result&quot;
323 cgir.setRuleId($ruleId); 333 cgir.setRuleId($ruleId);
324 cgir.setCalcu_index($rangesize - 1); 334 cgir.setCalcu_index($rangesize - 1);
325 335
326 - System.out.println("employee ruleId=" + $ruleId + ", calcu_index=" + cgir.getCalcu_index()); 336 + log.info("employee ruleId={}, calcu_index={}", $ruleId, cgir.getCalcu_index());
327 337
328 insert(cgir); 338 insert(cgir);
329 end 339 end
@@ -371,11 +381,13 @@ rule &quot;calcu_guideboard_range_loop_1_1&quot; @@ -371,11 +381,13 @@ rule &quot;calcu_guideboard_range_loop_1_1&quot;
371 cgrlr.setRangeSize(0); 381 cgrlr.setRangeSize(0);
372 cgrlr.setLastLoopSize(0); 382 cgrlr.setLastLoopSize(0);
373 383
374 - System.out.println("guideboard ruleId=" + $ruleId + ", " +  
375 - "f=" + cgrlr.getFirstLoopSize() +  
376 - ", m=" + cgrlr.getMiddelLoopCount() +  
377 - ", m_r=" + cgrlr.getRangeSize() +  
378 - ", l=" + cgrlr.getLastLoopSize()); 384 + log.info(
  385 + "guideboard ruleId={},f={},m={},m_r={},l={}",
  386 + $ruleId,
  387 + cgrlr.getFirstLoopSize(),
  388 + cgrlr.getMiddelLoopCount(),
  389 + cgrlr.getRangeSize(),
  390 + cgrlr.getLastLoopSize());
379 391
380 insert(cgrlr); 392 insert(cgrlr);
381 end 393 end
@@ -398,11 +410,13 @@ rule &quot;calcu_guideboard_range_loop_1_2&quot; @@ -398,11 +410,13 @@ rule &quot;calcu_guideboard_range_loop_1_2&quot;
398 cgrlr.setRangeSize(new Integer($rangesize)); 410 cgrlr.setRangeSize(new Integer($rangesize));
399 cgrlr.setLastLoopSize(gbd_days_temp_minus_yvalue); 411 cgrlr.setLastLoopSize(gbd_days_temp_minus_yvalue);
400 412
401 - System.out.println("guideboard ruleId=" + $ruleId + ", " +  
402 - "f=" + cgrlr.getFirstLoopSize() +  
403 - ", m=" + cgrlr.getMiddelLoopCount() +  
404 - ", m_r=" + cgrlr.getRangeSize() +  
405 - ", l=" + cgrlr.getLastLoopSize()); 413 + log.info(
  414 + "guideboard ruleId={},f={},m={},m_r={},l={}",
  415 + $ruleId,
  416 + cgrlr.getFirstLoopSize(),
  417 + cgrlr.getMiddelLoopCount(),
  418 + cgrlr.getRangeSize(),
  419 + cgrlr.getLastLoopSize());
406 420
407 insert(cgrlr); 421 insert(cgrlr);
408 end 422 end
@@ -448,11 +462,13 @@ rule &quot;calcu_employee_range_loop_1_1&quot; @@ -448,11 +462,13 @@ rule &quot;calcu_employee_range_loop_1_1&quot;
448 cgrlr.setRangeSize(0); 462 cgrlr.setRangeSize(0);
449 cgrlr.setLastLoopSize(0); 463 cgrlr.setLastLoopSize(0);
450 464
451 - System.out.println("employee ruleId=" + $ruleId + ", " +  
452 - "f=" + cgrlr.getFirstLoopSize() +  
453 - ", m=" + cgrlr.getMiddelLoopCount() +  
454 - ", m_r=" + cgrlr.getRangeSize() +  
455 - ", l=" + cgrlr.getLastLoopSize()); 465 + log.info(
  466 + "employee ruleId={},f={},m={},m_r={},l={}",
  467 + $ruleId,
  468 + cgrlr.getFirstLoopSize(),
  469 + cgrlr.getMiddelLoopCount(),
  470 + cgrlr.getRangeSize(),
  471 + cgrlr.getLastLoopSize());
456 472
457 insert(cgrlr); 473 insert(cgrlr);
458 end 474 end
@@ -475,11 +491,13 @@ rule &quot;calcu_employee_range_loop_1_2&quot; @@ -475,11 +491,13 @@ rule &quot;calcu_employee_range_loop_1_2&quot;
475 cgrlr.setRangeSize(new Integer($rangesize)); 491 cgrlr.setRangeSize(new Integer($rangesize));
476 cgrlr.setLastLoopSize(gbd_days_temp_minus_yvalue); 492 cgrlr.setLastLoopSize(gbd_days_temp_minus_yvalue);
477 493
478 - System.out.println("employee ruleId=" + $ruleId + ", " +  
479 - "f=" + cgrlr.getFirstLoopSize() +  
480 - ", m=" + cgrlr.getMiddelLoopCount() +  
481 - ", m_r=" + cgrlr.getRangeSize() +  
482 - ", l=" + cgrlr.getLastLoopSize()); 494 + log.info(
  495 + "employee ruleId={},f={},m={},m_r={},l={}",
  496 + $ruleId,
  497 + cgrlr.getFirstLoopSize(),
  498 + cgrlr.getMiddelLoopCount(),
  499 + cgrlr.getRangeSize(),
  500 + cgrlr.getLastLoopSize());
483 501
484 insert(cgrlr); 502 insert(cgrlr);
485 end 503 end
@@ -546,7 +564,7 @@ rule &quot;calcu_loop_guideboard&quot; @@ -546,7 +564,7 @@ rule &quot;calcu_loop_guideboard&quot;
546 clgr.setRuleId($ruleId); 564 clgr.setRuleId($ruleId);
547 clgr.setGo_list(scheduleResult_outputs); 565 clgr.setGo_list(scheduleResult_outputs);
548 566
549 - System.out.println(scheduleResult_outputs.size()); 567 + log.info(String.valueOf(scheduleResult_outputs.size()));
550 568
551 insert(clgr); 569 insert(clgr);
552 end 570 end
@@ -610,7 +628,7 @@ rule &quot;calcu_loop_employee&quot; @@ -610,7 +628,7 @@ rule &quot;calcu_loop_employee&quot;
610 clgr.setRuleId($ruleId); 628 clgr.setRuleId($ruleId);
611 clgr.setEo_list(scheduleResult_outputs); 629 clgr.setEo_list(scheduleResult_outputs);
612 630
613 - System.out.println(scheduleResult_outputs.size()); 631 + log.info(String.valueOf(scheduleResult_outputs.size()));
614 632
615 insert(clgr); 633 insert(clgr);
616 end 634 end
src/main/resources/rules/ttinfo.drl
@@ -34,7 +34,11 @@ end @@ -34,7 +34,11 @@ end
34 34
35 rule "calcu_days" 35 rule "calcu_days"
36 when 36 when
37 - TTInfoCalcuParam_input($fromDate : fromDate, $toDate : toDate, $fromDate.isBefore($toDate), $xlId : xlId) 37 + TTInfoCalcuParam_input(
  38 + $fromDate : fromDate,
  39 + $toDate : toDate,
  40 + $xlId : xlId,
  41 + $fromDate.isBefore($toDate) || $fromDate.isEqual($toDate))
38 then 42 then
39 // 构造Calcu_days_result对象,进行下一阶段计算 43 // 构造Calcu_days_result对象,进行下一阶段计算
40 Calcu_days_result cdr = new Calcu_days_result(); 44 Calcu_days_result cdr = new Calcu_days_result();
src/main/resources/static/login.html
@@ -176,26 +176,28 @@ @@ -176,26 +176,28 @@
176 </head> 176 </head>
177 177
178 <body> 178 <body>
179 -<div class="warn-note">警告!系统目前仅在 WebKit 内核下完成兼容性测试,请使用 Google Chrome 浏览器进入系统。</div> 179 +<div class="warn-note">警告!系统目前仅在 WebKit 内核下完成兼容性测试,请使用 Google
  180 + Chrome 浏览器进入系统。</div>
180 <div class="wrapper ng-scope"> 181 <div class="wrapper ng-scope">
181 <div id="loginPanel" class="dialog dialog-shadow"> 182 <div id="loginPanel" class="dialog dialog-shadow">
182 <br> 183 <br>
183 - <h3 class="logo-text">浦东公交调度系统 </h3> 184 + <h3 class="logo-text">浦东公交调度系统</h3>
184 <hr> 185 <hr>
185 <form style="padding: 0px 35px;"> 186 <form style="padding: 0px 35px;">
186 <div class="form-group" style="margin-bottom: 0"> 187 <div class="form-group" style="margin-bottom: 0">
187 <label></label> 188 <label></label>
188 <div class="input-icon"> 189 <div class="input-icon">
189 - <i class="fa fa-user font-gray"></i> <input type="text" name="userName"  
190 - class="form-control" placeholder="输入用户名" autofocus="autofocus" autocomplete="off"> 190 + <i class="fa fa-user font-gray"></i> <input type="text"
  191 + name="userName" class="form-control" placeholder="输入用户名"
  192 + autofocus="autofocus" autocomplete="off">
191 </div> 193 </div>
192 </div> 194 </div>
193 195
194 <div class="form-group"> 196 <div class="form-group">
195 <label></label> 197 <label></label>
196 <div class="input-icon"> 198 <div class="input-icon">
197 - <i class="fa fa-key font-gray"></i> <input type="password" name="password"  
198 - class="form-control" placeholder="输入密码" > 199 + <i class="fa fa-key font-gray"></i> <input type="password"
  200 + name="password" class="form-control" placeholder="输入密码">
199 </div> 201 </div>
200 </div> 202 </div>
201 203
@@ -203,21 +205,24 @@ @@ -203,21 +205,24 @@
203 <label></label> 205 <label></label>
204 <div class="input-icon"> 206 <div class="input-icon">
205 <input type="text" name="captcha" style="width: 153px !important;" 207 <input type="text" name="captcha" style="width: 153px !important;"
206 - class="form-control input-inline input-medium" placeholder="输入验证码" >  
207 -  
208 - <span class="help-inline"> <img alt="验证码" class="captcha-img" title="点击刷新验证码"> </span> 208 + class="form-control input-inline input-medium"
  209 + placeholder="输入验证码"> <span class="help-inline"> <img
  210 + alt="验证码" class="captcha-img" title="点击刷新验证码">
  211 + </span>
209 </div> 212 </div>
210 </div> 213 </div>
211 </form> 214 </form>
212 - <br><br>  
213 - <div class="form-actions" > 215 + <br>
  216 + <br>
  217 + <div class="form-actions">
214 <button class="btn blue-steel" id="loginBtn" disabled="disabled">登录</button> 218 <button class="btn blue-steel" id="loginBtn" disabled="disabled">登录</button>
215 </div> 219 </div>
216 220
217 <div class="alert alert-danger"></div> 221 <div class="alert alert-danger"></div>
218 </div> 222 </div>
219 223
220 - <div class="login-footer"> © 2016 上海巴士拓华科技发展有限公司 Some Rights Reserved </div> 224 + <div class="login-footer">© 2016 上海巴士拓华科技发展有限公司 Some Rights
  225 + Reserved</div>
221 </div> 226 </div>
222 227
223 <script> 228 <script>
@@ -226,8 +231,8 @@ @@ -226,8 +231,8 @@
226 delete window.module; 231 delete window.module;
227 </script> 232 </script>
228 <!-- jQuery --> 233 <!-- jQuery -->
229 -<script src="/metronic_v4.5.4/plugins/jquery.min.js" ></script>  
230 -<script src="/assets/plugins/jsencrypt.min.js" ></script> 234 +<script src="/metronic_v4.5.4/plugins/jquery.min.js"></script>
  235 +<script src="/assets/plugins/jsencrypt.min.js"></script>
231 <script> 236 <script>
232 window.onload=function(){ 237 window.onload=function(){
233 var body=document.getElementsByTagName("body")[0]; 238 var body=document.getElementsByTagName("body")[0];