Commit 009fc291ff472fd6ffd15b647a2687b3f016031e

Authored by 廖磊
2 parents 69ab9eda 1126883b

Merge branch 'minhang' of

http://222.66.0.204:8090/panzhaov5/bsth_control into minhang
Showing 87 changed files with 3054 additions and 860 deletions
src/main/java/com/bsth/Application.java
@@ -17,7 +17,7 @@ import java.util.concurrent.ScheduledExecutorService; @@ -17,7 +17,7 @@ import java.util.concurrent.ScheduledExecutorService;
17 @SpringBootApplication 17 @SpringBootApplication
18 public class Application extends SpringBootServletInitializer { 18 public class Application extends SpringBootServletInitializer {
19 19
20 - public static ScheduledExecutorService mainServices = Executors.newScheduledThreadPool(15); 20 + public static ScheduledExecutorService mainServices = Executors.newScheduledThreadPool(16);
21 21
22 @Override 22 @Override
23 protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 23 protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
src/main/java/com/bsth/XDApplication.java
@@ -4,10 +4,14 @@ import com.bsth.data.BasicData; @@ -4,10 +4,14 @@ import com.bsth.data.BasicData;
4 import com.bsth.data.ThreadMonotor; 4 import com.bsth.data.ThreadMonotor;
5 import com.bsth.data.car_out_info.UpdateDBThread; 5 import com.bsth.data.car_out_info.UpdateDBThread;
6 import com.bsth.data.directive.DirectivesPstThread; 6 import com.bsth.data.directive.DirectivesPstThread;
  7 +import com.bsth.data.forecast.SampleTimeDataLoader;
7 import com.bsth.data.gpsdata.thread.GpsDataLoaderThread; 8 import com.bsth.data.gpsdata.thread.GpsDataLoaderThread;
8 import com.bsth.data.gpsdata.thread.OfflineMonitorThread; 9 import com.bsth.data.gpsdata.thread.OfflineMonitorThread;
  10 +import com.bsth.data.msg_queue.DirectivePushQueue;
  11 +import com.bsth.data.msg_queue.WebSocketPushQueue;
9 import com.bsth.data.schedule.edit_logs.SeiPstThread; 12 import com.bsth.data.schedule.edit_logs.SeiPstThread;
10 import com.bsth.data.schedule.late_adjust.ScheduleLateThread; 13 import com.bsth.data.schedule.late_adjust.ScheduleLateThread;
  14 +import com.bsth.data.schedule.signal.SchSiginUpdateDBThread;
11 import com.bsth.data.schedule.thread.CalcOilThread; 15 import com.bsth.data.schedule.thread.CalcOilThread;
12 import com.bsth.data.schedule.thread.SchedulePstThread; 16 import com.bsth.data.schedule.thread.SchedulePstThread;
13 import com.bsth.data.schedule.thread.ScheduleRefreshThread; 17 import com.bsth.data.schedule.thread.ScheduleRefreshThread;
@@ -56,6 +60,10 @@ public class XDApplication implements CommandLineRunner { @@ -56,6 +60,10 @@ public class XDApplication implements CommandLineRunner {
56 ThreadMonotor threadMonotor; 60 ThreadMonotor threadMonotor;
57 @Autowired 61 @Autowired
58 SeiPstThread seiPstThread; 62 SeiPstThread seiPstThread;
  63 + @Autowired
  64 + SampleTimeDataLoader sampleTimeDataLoader;
  65 + @Autowired
  66 + SchSiginUpdateDBThread schSiginUpdateDBThread;
59 67
60 private static long timeDiff; 68 private static long timeDiff;
61 private static long timeDiffTraffic; 69 private static long timeDiffTraffic;
@@ -116,30 +124,31 @@ public class XDApplication implements CommandLineRunner { @@ -116,30 +124,31 @@ public class XDApplication implements CommandLineRunner {
116 public void prodInit(){ 124 public void prodInit(){
117 log.info("prodInit..."); 125 log.info("prodInit...");
118 ScheduledExecutorService sexec = Application.mainServices; 126 ScheduledExecutorService sexec = Application.mainServices;
119 - //发车信息  
120 - sexec.scheduleWithFixedDelay(fcxxUpdateThread, 60, 40, TimeUnit.SECONDS);  
121 - //抓取GPS数据  
122 - sexec.scheduleWithFixedDelay(gpsDataLoader, 30, 2, TimeUnit.SECONDS);  
123 - //GPS设备掉离线  
124 - sexec.scheduleWithFixedDelay(offlineMonitorThread, 120, 60, TimeUnit.SECONDS);  
125 - //班次更新线程  
126 - sexec.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS);  
127 - //班次延迟入库线程  
128 - sexec.scheduleWithFixedDelay(schedulePstThread, 60, 10, TimeUnit.SECONDS);  
129 - //班次修正日志入库  
130 - sexec.scheduleWithFixedDelay(seiPstThread, 60, 60, TimeUnit.SECONDS);  
131 - //检查班次误点  
132 - sexec.scheduleWithFixedDelay(scheduleLateThread, 60, 30, TimeUnit.SECONDS);  
133 - //调度指令延迟入库  
134 - sexec.scheduleWithFixedDelay(directivesPstThread, 180, 100, TimeUnit.SECONDS); 127 +
  128 + /** 线调业务 */
  129 + sexec.scheduleWithFixedDelay(gpsDataLoader, 30, 2, TimeUnit.SECONDS);//抓取GPS数据
  130 + sexec.scheduleWithFixedDelay(offlineMonitorThread, 120, 60, TimeUnit.SECONDS);//GPS设备掉离线
  131 + sexec.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS);//班次更新线程
  132 + sexec.scheduleWithFixedDelay(schedulePstThread, 60, 10, TimeUnit.SECONDS);//班次延迟入库线程
  133 + sexec.scheduleWithFixedDelay(seiPstThread, 60, 60, TimeUnit.SECONDS);//班次修正日志入库
  134 + sexec.scheduleWithFixedDelay(scheduleLateThread, 60, 30, TimeUnit.SECONDS);//检查班次误点
  135 + sexec.scheduleWithFixedDelay(directivesPstThread, 180, 100, TimeUnit.SECONDS);//调度指令延迟入库
  136 + sexec.scheduleWithFixedDelay(threadMonotor, 240, 60, TimeUnit.SECONDS);//线程监听(防止重要的线程阻塞、异常结束。以及部分主备切换工作)
  137 + sexec.scheduleWithFixedDelay(sampleTimeDataLoader, 12, 120 * 60, TimeUnit.SECONDS);//到离站预测需要的站点间耗时数据
  138 + sexec.scheduleWithFixedDelay(basicDataLoader, 2, 2, TimeUnit.HOURS);//基础数据更新
  139 + DirectivePushQueue.start();//消息队列 -指令,系统下发的
  140 + WebSocketPushQueue.start();//消息队列 -webSocket ,推送至线调web页面的
  141 +
  142 + /** 线调为其他程序提供的数据 --写入数据库 */
  143 + sexec.scheduleWithFixedDelay(fcxxUpdateThread, 60, 40, TimeUnit.SECONDS);//发车信息(发车屏、信息发布)
  144 + //线路首末班数据(网关用,班次更新时写入)
  145 + //com.bsth.data.schedule.f_a_l.FirstAndLastHandler
  146 + sexec.scheduleWithFixedDelay(schSiginUpdateDBThread, 60, 60 * 30, TimeUnit.SECONDS);//无法自动完成的班次信息(网关用,补信号)
135 147
136 //运管处静态数据提交 148 //运管处静态数据提交
137 log.info(timeDiff / 1000 / 60 + "分钟之后提交到运管处"); 149 log.info(timeDiff / 1000 / 60 + "分钟之后提交到运管处");
138 sexec.scheduleAtFixedRate(submitToTrafficManage, timeDiffTraffic / 1000, 60 * 60 * 24, TimeUnit.SECONDS); 150 sexec.scheduleAtFixedRate(submitToTrafficManage, timeDiffTraffic / 1000, 60 * 60 * 24, TimeUnit.SECONDS);
139 //计算油、公里加注 151 //计算油、公里加注
140 sexec.scheduleAtFixedRate(calcOilThread, timeDiff / 1000, 60 * 60 * 24, TimeUnit.SECONDS); 152 sexec.scheduleAtFixedRate(calcOilThread, timeDiff / 1000, 60 * 60 * 24, TimeUnit.SECONDS);
141 -  
142 - //线程监听(防止重要的线程阻塞、异常结束。以及部分主备切换工作)  
143 - sexec.scheduleWithFixedDelay(threadMonotor, 240, 60, TimeUnit.SECONDS);  
144 } 153 }
145 } 154 }
src/main/java/com/bsth/controller/LineController.java
1 package com.bsth.controller; 1 package com.bsth.controller;
2 2
  3 +import java.util.HashMap;
3 import java.util.Map; 4 import java.util.Map;
4 5
5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.beans.factory.annotation.Autowired;
6 import org.springframework.web.bind.annotation.RequestMapping; 7 import org.springframework.web.bind.annotation.RequestMapping;
7 import org.springframework.web.bind.annotation.RequestMethod; 8 import org.springframework.web.bind.annotation.RequestMethod;
  9 +import org.springframework.web.bind.annotation.RequestParam;
8 import org.springframework.web.bind.annotation.RestController; 10 import org.springframework.web.bind.annotation.RestController;
9 11
  12 +import com.bsth.common.ResponseCode;
10 import com.bsth.entity.Line; 13 import com.bsth.entity.Line;
11 import com.bsth.service.LineService; 14 import com.bsth.service.LineService;
12 import com.bsth.util.GetUIDAndCode; 15 import com.bsth.util.GetUIDAndCode;
@@ -50,12 +53,22 @@ public class LineController extends BaseController<Line, Integer> { @@ -50,12 +53,22 @@ public class LineController extends BaseController<Line, Integer> {
50 */ 53 */
51 @RequestMapping(method = RequestMethod.POST) 54 @RequestMapping(method = RequestMethod.POST)
52 public Map<String, Object> save(Line t){ 55 public Map<String, Object> save(Line t){
53 - 56 + Map<String, Object> map = new HashMap<>();
54 if(t.getId()==null) { 57 if(t.getId()==null) {
55 58
56 t.setId(Integer.valueOf(t.getLineCode())); 59 t.setId(Integer.valueOf(t.getLineCode()));
57 60
58 } 61 }
  62 + if( (t.getId().toString().length()) > 6) {
  63 +
  64 + map.put("status", ResponseCode.ERROR);
  65 + return map;
  66 + }
59 return service.save(t); 67 return service.save(t);
60 } 68 }
  69 +
  70 + @RequestMapping(value ="/findById" , method = RequestMethod.GET)
  71 + Line findByID(@RequestParam(defaultValue = "id") Integer id){
  72 + return service.findById(id);
  73 + }
61 } 74 }
src/main/java/com/bsth/controller/StationRouteController.java
@@ -12,6 +12,8 @@ import org.springframework.web.bind.annotation.RestController; @@ -12,6 +12,8 @@ import org.springframework.web.bind.annotation.RestController;
12 import java.util.List; 12 import java.util.List;
13 import java.util.Map; 13 import java.util.Map;
14 14
  15 +import javax.servlet.http.HttpServletResponse;
  16 +
15 /** 17 /**
16 * 18 *
17 * @ClassName: StationRouteController(站点路由控制器) 19 * @ClassName: StationRouteController(站点路由控制器)
@@ -48,6 +50,18 @@ public class StationRouteController extends BaseController&lt;StationRoute, Integer @@ -48,6 +50,18 @@ public class StationRouteController extends BaseController&lt;StationRoute, Integer
48 } 50 }
49 51
50 /** 52 /**
  53 + * @Description :TODO(查询路段信息)
  54 + *
  55 + * @param map <line.id_eq:线路ID; directions_eq:方向>
  56 + *
  57 + * @return Map<String, Object>
  58 + */
  59 + @RequestMapping(value = "/export" , method = RequestMethod.GET)
  60 + public Map<String, Object> export(@RequestParam Integer id, HttpServletResponse resp) {
  61 + return service.getSectionRouteExport(id, resp);
  62 + }
  63 +
  64 + /**
51 * @param String 65 * @param String
52 * @throws 66 * @throws
53 * @Description: TODO(批量撤销站点) 67 * @Description: TODO(批量撤销站点)
src/main/java/com/bsth/data/BasicData.java
1 package com.bsth.data; 1 package com.bsth.data;
2 2
3 -import com.bsth.Application;  
4 import com.bsth.data.gpsdata.arrival.GeoCacheData; 3 import com.bsth.data.gpsdata.arrival.GeoCacheData;
5 import com.bsth.data.pinyin.PersionPinYinBuffer; 4 import com.bsth.data.pinyin.PersionPinYinBuffer;
6 import com.bsth.entity.*; 5 import com.bsth.entity.*;
@@ -13,12 +12,10 @@ import org.apache.commons.lang3.StringUtils; @@ -13,12 +12,10 @@ import org.apache.commons.lang3.StringUtils;
13 import org.slf4j.Logger; 12 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory; 13 import org.slf4j.LoggerFactory;
15 import org.springframework.beans.factory.annotation.Autowired; 14 import org.springframework.beans.factory.annotation.Autowired;
16 -import org.springframework.boot.CommandLineRunner;  
17 import org.springframework.jdbc.core.JdbcTemplate; 15 import org.springframework.jdbc.core.JdbcTemplate;
18 import org.springframework.stereotype.Component; 16 import org.springframework.stereotype.Component;
19 17
20 import java.util.*; 18 import java.util.*;
21 -import java.util.concurrent.TimeUnit;  
22 19
23 /** 20 /**
24 * @author PanZhao 21 * @author PanZhao
@@ -27,7 +24,7 @@ import java.util.concurrent.TimeUnit; @@ -27,7 +24,7 @@ import java.util.concurrent.TimeUnit;
27 * @date 2016年8月10日 下午3:27:45 24 * @date 2016年8月10日 下午3:27:45
28 */ 25 */
29 @Component 26 @Component
30 -public class BasicData implements CommandLineRunner { 27 +public class BasicData {
31 28
32 //公司代码和公司名对照(K: 公司编码,V:公司名) 29 //公司代码和公司名对照(K: 公司编码,V:公司名)
33 public static Map<String, String> businessCodeNameMap; 30 public static Map<String, String> businessCodeNameMap;
@@ -80,14 +77,6 @@ public class BasicData implements CommandLineRunner { @@ -80,14 +77,6 @@ public class BasicData implements CommandLineRunner {
80 77
81 static Logger logger = LoggerFactory.getLogger(BasicData.class); 78 static Logger logger = LoggerFactory.getLogger(BasicData.class);
82 79
83 - @Autowired  
84 - BasicDataLoader dataLoader;  
85 -  
86 - @Override  
87 - public void run(String... arg0) throws Exception {  
88 - Application.mainServices.scheduleWithFixedDelay(dataLoader, 2, 2, TimeUnit.HOURS);  
89 - }  
90 -  
91 public static String getStationNameByCode(String code, String prefix){ 80 public static String getStationNameByCode(String code, String prefix){
92 String name = stationCode2NameMap.get(code); 81 String name = stationCode2NameMap.get(code);
93 return name != null? name: stationCode2NameMap.get(prefix + code); 82 return name != null? name: stationCode2NameMap.get(prefix + code);
src/main/java/com/bsth/data/forecast/ForecastRealServer.java
1 package com.bsth.data.forecast; 1 package com.bsth.data.forecast;
2 2
3 -import com.bsth.Application;  
4 import com.bsth.data.forecast.entity.ForecastResult; 3 import com.bsth.data.forecast.entity.ForecastResult;
5 import com.bsth.data.forecast.entity.ForecastResult.ForecastResultItem; 4 import com.bsth.data.forecast.entity.ForecastResult.ForecastResultItem;
6 import com.bsth.data.forecast.entity.SimpleRoute; 5 import com.bsth.data.forecast.entity.SimpleRoute;
@@ -13,7 +12,6 @@ import com.google.common.collect.ArrayListMultimap; @@ -13,7 +12,6 @@ import com.google.common.collect.ArrayListMultimap;
13 import org.slf4j.Logger; 12 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory; 13 import org.slf4j.LoggerFactory;
15 import org.springframework.beans.factory.annotation.Autowired; 14 import org.springframework.beans.factory.annotation.Autowired;
16 -import org.springframework.boot.CommandLineRunner;  
17 import org.springframework.stereotype.Component; 15 import org.springframework.stereotype.Component;
18 16
19 import java.text.DecimalFormat; 17 import java.text.DecimalFormat;
@@ -21,7 +19,6 @@ import java.util.ArrayList; @@ -21,7 +19,6 @@ import java.util.ArrayList;
21 import java.util.HashMap; 19 import java.util.HashMap;
22 import java.util.List; 20 import java.util.List;
23 import java.util.Map; 21 import java.util.Map;
24 -import java.util.concurrent.TimeUnit;  
25 22
26 /** 23 /**
27 * 24 *
@@ -32,10 +29,7 @@ import java.util.concurrent.TimeUnit; @@ -32,10 +29,7 @@ import java.util.concurrent.TimeUnit;
32 * 29 *
33 */ 30 */
34 @Component 31 @Component
35 -public class ForecastRealServer implements CommandLineRunner {  
36 -  
37 - @Autowired  
38 - SampleTimeDataLoader dataLoader; 32 +public class ForecastRealServer {
39 33
40 @Autowired 34 @Autowired
41 DayOfSchedule dayOfSchedule; 35 DayOfSchedule dayOfSchedule;
@@ -57,12 +51,6 @@ public class ForecastRealServer implements CommandLineRunner { @@ -57,12 +51,6 @@ public class ForecastRealServer implements CommandLineRunner {
57 forecastMap = new HashMap<>(); 51 forecastMap = new HashMap<>();
58 } 52 }
59 53
60 - @Override  
61 - public void run(String... arg0) throws Exception {  
62 - //2小时更新一次站点间耗时数据  
63 - Application.mainServices.scheduleWithFixedDelay(dataLoader, 12, 120 * 60, TimeUnit.SECONDS);  
64 - }  
65 -  
66 /** 54 /**
67 * 55 *
68 * @Title: forecast 56 * @Title: forecast
src/main/java/com/bsth/data/gpsdata/arrival/handlers/InOutStationSignalHandle.java
@@ -163,6 +163,7 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -163,6 +163,7 @@ public class InOutStationSignalHandle extends SignalHandle{
163 163
164 //实发时间 164 //实发时间
165 sch.setFcsjActualAll(rsT); 165 sch.setFcsjActualAll(rsT);
  166 + sch.setSiginCompate(1);
166 //通知客户端 167 //通知客户端
167 sendUtils.sendFcsj(sch); 168 sendUtils.sendFcsj(sch);
168 //持久化 169 //持久化
@@ -316,7 +317,7 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -316,7 +317,7 @@ public class InOutStationSignalHandle extends SignalHandle{
316 long rsT = lineConfigData.applyIn(sch, gps.getTimestamp()); 317 long rsT = lineConfigData.applyIn(sch, gps.getTimestamp());
317 318
318 sch.setZdsjActualAll(rsT); 319 sch.setZdsjActualAll(rsT);
319 - 320 + sch.setSiginCompate(2);
320 //通知误点停靠程序,有车辆到站 321 //通知误点停靠程序,有车辆到站
321 LateAdjustHandle.carArrive(gps); 322 LateAdjustHandle.carArrive(gps);
322 323
src/main/java/com/bsth/data/msg_queue/DirectivePushQueue.java
@@ -5,7 +5,6 @@ import com.bsth.service.directive.DirectiveService; @@ -5,7 +5,6 @@ import com.bsth.service.directive.DirectiveService;
5 import org.slf4j.Logger; 5 import org.slf4j.Logger;
6 import org.slf4j.LoggerFactory; 6 import org.slf4j.LoggerFactory;
7 import org.springframework.beans.BeansException; 7 import org.springframework.beans.BeansException;
8 -import org.springframework.boot.CommandLineRunner;  
9 import org.springframework.context.ApplicationContext; 8 import org.springframework.context.ApplicationContext;
10 import org.springframework.context.ApplicationContextAware; 9 import org.springframework.context.ApplicationContextAware;
11 import org.springframework.stereotype.Component; 10 import org.springframework.stereotype.Component;
@@ -17,7 +16,7 @@ import java.util.concurrent.ConcurrentLinkedQueue; @@ -17,7 +16,7 @@ import java.util.concurrent.ConcurrentLinkedQueue;
17 * Created by panzhao on 2017/5/11. 16 * Created by panzhao on 2017/5/11.
18 */ 17 */
19 @Component 18 @Component
20 -public class DirectivePushQueue implements CommandLineRunner, ApplicationContextAware { 19 +public class DirectivePushQueue implements ApplicationContextAware {
21 20
22 static ConcurrentLinkedQueue<QueueData_Directive> linkedList; 21 static ConcurrentLinkedQueue<QueueData_Directive> linkedList;
23 static DataPushThread thread; 22 static DataPushThread thread;
@@ -80,10 +79,10 @@ public class DirectivePushQueue implements CommandLineRunner, ApplicationContext @@ -80,10 +79,10 @@ public class DirectivePushQueue implements CommandLineRunner, ApplicationContext
80 return linkedList.size(); 79 return linkedList.size();
81 } 80 }
82 81
83 - @Override 82 +/* @Override
84 public void run(String... strings) throws Exception { 83 public void run(String... strings) throws Exception {
85 start(); 84 start();
86 - } 85 + }*/
87 86
88 @Override 87 @Override
89 public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 88 public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
src/main/java/com/bsth/data/msg_queue/WebSocketPushQueue.java
@@ -3,7 +3,6 @@ package com.bsth.data.msg_queue; @@ -3,7 +3,6 @@ package com.bsth.data.msg_queue;
3 import com.bsth.common.Constants; 3 import com.bsth.common.Constants;
4 import org.slf4j.Logger; 4 import org.slf4j.Logger;
5 import org.slf4j.LoggerFactory; 5 import org.slf4j.LoggerFactory;
6 -import org.springframework.boot.CommandLineRunner;  
7 import org.springframework.stereotype.Component; 6 import org.springframework.stereotype.Component;
8 import org.springframework.web.socket.TextMessage; 7 import org.springframework.web.socket.TextMessage;
9 import org.springframework.web.socket.WebSocketSession; 8 import org.springframework.web.socket.WebSocketSession;
@@ -15,7 +14,7 @@ import java.util.concurrent.ConcurrentLinkedQueue; @@ -15,7 +14,7 @@ import java.util.concurrent.ConcurrentLinkedQueue;
15 * Created by panzhao on 2017/5/11. 14 * Created by panzhao on 2017/5/11.
16 */ 15 */
17 @Component 16 @Component
18 -public class WebSocketPushQueue implements CommandLineRunner { 17 +public class WebSocketPushQueue {
19 18
20 static ConcurrentLinkedQueue<QueueData> linkedList; 19 static ConcurrentLinkedQueue<QueueData> linkedList;
21 static DataPushThread thread; 20 static DataPushThread thread;
@@ -54,10 +53,6 @@ public class WebSocketPushQueue implements CommandLineRunner { @@ -54,10 +53,6 @@ public class WebSocketPushQueue implements CommandLineRunner {
54 return linkedList.size(); 53 return linkedList.size();
55 } 54 }
56 55
57 - @Override  
58 - public void run(String... strings) throws Exception {  
59 - start();  
60 - }  
61 56
62 public static class DataPushThread extends Thread { 57 public static class DataPushThread extends Thread {
63 58
src/main/java/com/bsth/data/schedule/DayOfSchedule.java
@@ -729,7 +729,7 @@ public class DayOfSchedule { @@ -729,7 +729,7 @@ public class DayOfSchedule {
729 /** 729 /**
730 * @Title: prveNotExecNum 730 * @Title: prveNotExecNum
731 * @Description: TODO(班次之前未执行班次数量) 731 * @Description: TODO(班次之前未执行班次数量)
732 - */ 732 +
733 public int prveNotExecNum(ScheduleRealInfo sch) { 733 public int prveNotExecNum(ScheduleRealInfo sch) {
734 int n = 0; 734 int n = 0;
735 List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh()); 735 List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh());
@@ -741,29 +741,29 @@ public class DayOfSchedule { @@ -741,29 +741,29 @@ public class DayOfSchedule {
741 break; 741 break;
742 } 742 }
743 return n; 743 return n;
744 - } 744 + }*/
745 745
746 /** 746 /**
747 * @Title: validEndTime 747 * @Title: validEndTime
748 * @Description: TODO(是否是有效的到达时间) 748 * @Description: TODO(是否是有效的到达时间)
749 - */ 749 +
750 public boolean validEndTime(ScheduleRealInfo sch, Long ts) { 750 public boolean validEndTime(ScheduleRealInfo sch, Long ts) {
751 if (sch.getFcsjActualTime() != null && sch.getFcsjActualTime() > ts) 751 if (sch.getFcsjActualTime() != null && sch.getFcsjActualTime() > ts)
752 return false; 752 return false;
753 753
754 return validTime(sch, ts); 754 return validTime(sch, ts);
755 - } 755 + }*/
756 756
757 /** 757 /**
758 * @Title: validStartTime 758 * @Title: validStartTime
759 * @Description: TODO(是否是合适的发车时间) 759 * @Description: TODO(是否是合适的发车时间)
760 - */ 760 +
761 public boolean validStartTime(ScheduleRealInfo sch, Long ts) { 761 public boolean validStartTime(ScheduleRealInfo sch, Long ts) {
762 if (sch.getZdsjActualTime() != null && sch.getZdsjActualTime() < ts) 762 if (sch.getZdsjActualTime() != null && sch.getZdsjActualTime() < ts)
763 return false; 763 return false;
764 764
765 return validTime(sch, ts); 765 return validTime(sch, ts);
766 - } 766 + }*/
767 767
768 public boolean validTime(ScheduleRealInfo sch, Long ts) { 768 public boolean validTime(ScheduleRealInfo sch, Long ts) {
769 List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh()); 769 List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh());
@@ -875,9 +875,9 @@ public class DayOfSchedule { @@ -875,9 +875,9 @@ public class DayOfSchedule {
875 return outList; 875 return outList;
876 } 876 }
877 877
878 - public Set<String> allCar() { 878 +/* public Set<String> allCar() {
879 return nbbmScheduleMap.keySet(); 879 return nbbmScheduleMap.keySet();
880 - } 880 + }*/
881 881
882 public Collection<ScheduleRealInfo> findAll() { 882 public Collection<ScheduleRealInfo> findAll() {
883 return nbbmScheduleMap.values(); 883 return nbbmScheduleMap.values();
@@ -939,12 +939,12 @@ public class DayOfSchedule { @@ -939,12 +939,12 @@ public class DayOfSchedule {
939 return ups; 939 return ups;
940 } 940 }
941 941
942 - public void removeNbbm2SchMapp(ScheduleRealInfo sch, String nbbm) {  
943 - nbbmScheduleMap.remove(nbbm, sch); 942 + public void removeNbbm2SchMapp(ScheduleRealInfo sch) {
  943 + nbbmScheduleMap.remove(sch.getClZbh(), sch);
944 } 944 }
945 945
946 - public void addNbbm2SchMapp(ScheduleRealInfo sch, String nbbm) {  
947 - nbbmScheduleMap.put(nbbm, sch); 946 + public void addNbbm2SchMapp(ScheduleRealInfo sch) {
  947 + nbbmScheduleMap.put(sch.getClZbh(), sch);
948 } 948 }
949 949
950 public void reCalcExecPlan(String nbbm) { 950 public void reCalcExecPlan(String nbbm) {
src/main/java/com/bsth/data/schedule/signal/SchSiginUpdateDBThread.java 0 → 100644
  1 +package com.bsth.data.schedule.signal;
  2 +
  3 +import org.slf4j.Logger;
  4 +import org.slf4j.LoggerFactory;
  5 +import org.springframework.beans.factory.annotation.Autowired;
  6 +import org.springframework.stereotype.Component;
  7 +
  8 +/**
  9 + * Created by panzhao on 2017/8/14.
  10 + */
  11 +@Component
  12 +public class SchSiginUpdateDBThread extends Thread{
  13 +
  14 + @Autowired
  15 + SignalComplateHandler signalComplateHandler;
  16 +
  17 + Logger logger = LoggerFactory.getLogger(this.getClass());
  18 +
  19 + @Override
  20 + public void run() {
  21 + try{
  22 + signalComplateHandler.handler();
  23 + }catch (Exception e){
  24 + logger.error("", e);
  25 + }
  26 + }
  27 +}
src/main/java/com/bsth/data/schedule/signal/SignalComplateHandler.java 0 → 100644
  1 +package com.bsth.data.schedule.signal;
  2 +
  3 +import com.bsth.data.schedule.DayOfSchedule;
  4 +import com.bsth.data.schedule.signal.entity.SchSiginCompate;
  5 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  6 +import com.bsth.util.db.DBUtils_MS;
  7 +import org.apache.commons.lang3.StringUtils;
  8 +import org.slf4j.Logger;
  9 +import org.slf4j.LoggerFactory;
  10 +import org.springframework.beans.factory.annotation.Autowired;
  11 +import org.springframework.jdbc.core.BatchPreparedStatementSetter;
  12 +import org.springframework.jdbc.core.JdbcTemplate;
  13 +import org.springframework.jdbc.datasource.DataSourceTransactionManager;
  14 +import org.springframework.stereotype.Component;
  15 +import org.springframework.transaction.TransactionDefinition;
  16 +import org.springframework.transaction.TransactionStatus;
  17 +import org.springframework.transaction.support.DefaultTransactionDefinition;
  18 +
  19 +import java.sql.PreparedStatement;
  20 +import java.sql.SQLException;
  21 +import java.util.ArrayList;
  22 +import java.util.Collection;
  23 +import java.util.Date;
  24 +import java.util.List;
  25 +
  26 +/**
  27 + * 班次信号补全(写入数据库,网关以补发的形式提交运管处)
  28 + * Created by panzhao on 2017/8/13.
  29 + */
  30 +@Component
  31 +public class SignalComplateHandler {
  32 +
  33 + @Autowired
  34 + DayOfSchedule dayOfSchedule;
  35 +
  36 + Logger log = LoggerFactory.getLogger(this.getClass());
  37 +
  38 + public void handler(){
  39 + Collection<ScheduleRealInfo> all = dayOfSchedule.findAll();
  40 + List<SchSiginCompate> list = new ArrayList<>();
  41 +
  42 + SchSiginCompate siginCompate;
  43 + Date d = new Date();
  44 + long et = System.currentTimeMillis() - (1000 * 60 * 60 * 2),
  45 + st = et - (1000 * 60 * 60 * 2);
  46 + for(ScheduleRealInfo sch : all){
  47 + if(sch.getDfsjT() > et || sch.getDfsjT() < st)
  48 + continue;
  49 +
  50 + //能自动完成的
  51 + if(sch.getSiginCompate() >= 2)
  52 + continue;
  53 +
  54 + //烂班
  55 + if(sch.isDestroy())
  56 + continue;
  57 +
  58 + //空驶任务
  59 + if(dayOfSchedule.emptyService(sch))
  60 + continue;
  61 +
  62 + siginCompate = new SchSiginCompate(sch);
  63 + if(siginCompate == null || StringUtils.isEmpty(siginCompate.getDeciveId()))
  64 + continue;
  65 +
  66 + //标记已经补发
  67 + sch.setSiginCompate(3);
  68 + //标记入库
  69 + dayOfSchedule.save(sch);
  70 + siginCompate.setCreateDate(d);
  71 + list.add(siginCompate);
  72 + }
  73 +
  74 + put(list);
  75 + }
  76 +
  77 + public void put(final List<SchSiginCompate> list){
  78 + if(null == list || list.size() == 0)
  79 + return;
  80 +
  81 + JdbcTemplate jdbcTemp = new JdbcTemplate(DBUtils_MS.getDataSource());
  82 + //编程式事务
  83 + DataSourceTransactionManager tran = new DataSourceTransactionManager(jdbcTemp.getDataSource());
  84 + DefaultTransactionDefinition def = new DefaultTransactionDefinition();
  85 + def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
  86 + TransactionStatus status = tran.getTransaction(def);
  87 +
  88 + try{
  89 + jdbcTemp.batchUpdate("insert into bsth_t_sigin_complate(id, rq, line_code, device_id, up_down, s_code, e_code, st, et, create_date, status) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", new BatchPreparedStatementSetter() {
  90 + @Override
  91 + public void setValues(PreparedStatement ps, int i) throws SQLException {
  92 + SchSiginCompate sc = list.get(i);
  93 + ps.setLong(1, sc.getId());
  94 + ps.setString(2, sc.getRq());
  95 + ps.setString(3, sc.getLineCode());
  96 + ps.setString(4, sc.getDeciveId());
  97 + ps.setInt(5, sc.getUpDown());
  98 + ps.setString(6, sc.getsCode());
  99 + ps.setString(7, sc.geteCode());
  100 + ps.setLong(8, sc.getSt());
  101 + ps.setLong(9, sc.getEt());
  102 + ps.setDate(10, new java.sql.Date(sc.getCreateDate().getTime()));
  103 + ps.setInt(11, sc.getStatus());
  104 + }
  105 +
  106 + @Override
  107 + public int getBatchSize() {
  108 + return list.size();
  109 + }
  110 + });
  111 +
  112 + tran.commit(status);
  113 + log.info("补信号班次入库," + list.size());
  114 + }catch (Exception e){
  115 + log.error("", e);
  116 + tran.rollback(status);
  117 + }
  118 + }
  119 +
  120 +
  121 +}
src/main/java/com/bsth/data/schedule/signal/entity/SchSiginCompate.java 0 → 100644
  1 +package com.bsth.data.schedule.signal.entity;
  2 +
  3 +import com.bsth.data.BasicData;
  4 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  5 +
  6 +import java.util.Date;
  7 +
  8 +/**
  9 + * 班次信号补偿
  10 + * Created by panzhao on 2017/8/13.
  11 + */
  12 +public class SchSiginCompate {
  13 +
  14 + /** 实际班次ID */
  15 + private long id;
  16 +
  17 + /** 班次日期 */
  18 + private String rq;
  19 +
  20 + /** 线路编码 */
  21 + private String lineCode;
  22 +
  23 + /** 设备号 */
  24 + private String deciveId;
  25 +
  26 + /** 上下行 */
  27 + private int upDown;
  28 +
  29 + /** 起始站编码 */
  30 + private String sCode;
  31 +
  32 + /** 终点站编码 */
  33 + private String eCode;
  34 +
  35 + /** 开始时间戳 */
  36 + private long st;
  37 +
  38 + /** 结束时间戳 */
  39 + private long et;
  40 +
  41 + /** 入库时间 */
  42 + private Date createDate;
  43 +
  44 + private int status = 0;
  45 +
  46 + public SchSiginCompate(ScheduleRealInfo sch) {
  47 + this.id = sch.getId();
  48 + this.rq = sch.getScheduleDateStr();
  49 + this.lineCode = sch.getXlBm();
  50 + this.upDown = Integer.parseInt(sch.getXlDir());
  51 + this.deciveId = BasicData.deviceId2NbbmMap.inverse().get(sch.getClZbh());
  52 + this.sCode = sch.getQdzCode();
  53 + this.eCode = sch.getZdzCode();
  54 + this.st = sch.getDfsjT();
  55 + this.et = sch.getZdsjT();
  56 +
  57 + if(sch.getFcsjActualTime() != null)
  58 + this.st = sch.getFcsjActualTime();
  59 + if(sch.getZdsjActualTime() != null)
  60 + this.et = sch.getZdsjActualTime();
  61 + }
  62 +
  63 + public long getId() {
  64 + return id;
  65 + }
  66 +
  67 + public void setId(long id) {
  68 + this.id = id;
  69 + }
  70 +
  71 + public String getRq() {
  72 + return rq;
  73 + }
  74 +
  75 + public void setRq(String rq) {
  76 + this.rq = rq;
  77 + }
  78 +
  79 + public String getLineCode() {
  80 + return lineCode;
  81 + }
  82 +
  83 + public void setLineCode(String lineCode) {
  84 + this.lineCode = lineCode;
  85 + }
  86 +
  87 + public String getDeciveId() {
  88 + return deciveId;
  89 + }
  90 +
  91 + public void setDeciveId(String deciveId) {
  92 + this.deciveId = deciveId;
  93 + }
  94 +
  95 + public int getUpDown() {
  96 + return upDown;
  97 + }
  98 +
  99 + public void setUpDown(int upDown) {
  100 + this.upDown = upDown;
  101 + }
  102 +
  103 + public String getsCode() {
  104 + return sCode;
  105 + }
  106 +
  107 + public void setsCode(String sCode) {
  108 + this.sCode = sCode;
  109 + }
  110 +
  111 + public String geteCode() {
  112 + return eCode;
  113 + }
  114 +
  115 + public void seteCode(String eCode) {
  116 + this.eCode = eCode;
  117 + }
  118 +
  119 + public long getSt() {
  120 + return st;
  121 + }
  122 +
  123 + public void setSt(long st) {
  124 + this.st = st;
  125 + }
  126 +
  127 + public long getEt() {
  128 + return et;
  129 + }
  130 +
  131 + public void setEt(long et) {
  132 + this.et = et;
  133 + }
  134 +
  135 + public Date getCreateDate() {
  136 + return createDate;
  137 + }
  138 +
  139 + public void setCreateDate(Date createDate) {
  140 + this.createDate = createDate;
  141 + }
  142 +
  143 + public int getStatus() {
  144 + return status;
  145 + }
  146 +
  147 + public void setStatus(int status) {
  148 + this.status = status;
  149 + }
  150 +}
src/main/java/com/bsth/entity/Personnel.java
@@ -44,7 +44,7 @@ public class Personnel extends BEntity { @@ -44,7 +44,7 @@ public class Personnel extends BEntity {
44 @Formula(" concat(company_code, '_', branche_company_code) ") 44 @Formula(" concat(company_code, '_', branche_company_code) ")
45 private String cgsbm; 45 private String cgsbm;
46 46
47 - /** 工号 */ 47 + /** 工号(员工编号带公司编码前缀) */
48 @Column(nullable = false) 48 @Column(nullable = false)
49 private String jobCode; 49 private String jobCode;
50 /** 姓名 */ 50 /** 姓名 */
@@ -59,10 +59,17 @@ public class Personnel extends BEntity { @@ -59,10 +59,17 @@ public class Personnel extends BEntity {
59 private String personnelType; 59 private String personnelType;
60 /** 所属岗位/工种(字典类型gzType) */ 60 /** 所属岗位/工种(字典类型gzType) */
61 private String posts; 61 private String posts;
62 - 62 +
  63 + /** 工号 */
  64 + @Column(nullable = false)
  65 + private String jobCodeori;
63 /** 身份证 */ 66 /** 身份证 */
64 private String card; 67 private String card;
65 68
  69 +
  70 + /** 备注 */
  71 + private String remark;
  72 +
66 public Personnel() {} 73 public Personnel() {}
67 74
68 public Personnel(Object id, Object companyCode, Object gh) { 75 public Personnel(Object id, Object companyCode, Object gh) {
@@ -231,4 +238,20 @@ public class Personnel extends BEntity { @@ -231,4 +238,20 @@ public class Personnel extends BEntity {
231 public void setCgsbm(String cgsbm) { 238 public void setCgsbm(String cgsbm) {
232 this.cgsbm = cgsbm; 239 this.cgsbm = cgsbm;
233 } 240 }
  241 +
  242 + public String getJobCodeori() {
  243 + return jobCodeori;
  244 + }
  245 +
  246 + public void setJobCodeori(String jobCodeori) {
  247 + this.jobCodeori = jobCodeori;
  248 + }
  249 +
  250 + public String getRemark() {
  251 + return remark;
  252 + }
  253 +
  254 + public void setRemark(String remark) {
  255 + this.remark = remark;
  256 + }
234 } 257 }
src/main/java/com/bsth/entity/realcontrol/ScheduleRealInfo.java
@@ -214,6 +214,9 @@ public class ScheduleRealInfo { @@ -214,6 +214,9 @@ public class ScheduleRealInfo {
214 @JsonIgnore 214 @JsonIgnore
215 private int saveFailCount=0; 215 private int saveFailCount=0;
216 216
  217 + /** 是否需要补充GPS信号 (网关提交至运管处动态数据用) 1: 能发车, 2:能到达 3: 补发过*/
  218 + private int siginCompate;
  219 +
217 public boolean isDfAuto() { 220 public boolean isDfAuto() {
218 return dfAuto; 221 return dfAuto;
219 } 222 }
@@ -303,10 +306,10 @@ public class ScheduleRealInfo { @@ -303,10 +306,10 @@ public class ScheduleRealInfo {
303 String old = this.getRemarks(); 306 String old = this.getRemarks();
304 if(StringUtils.isBlank(old)) 307 if(StringUtils.isBlank(old))
305 old = ""; 308 old = "";
306 - 309 +
307 old += remark + ";"; 310 old += remark + ";";
308 this.setRemarks(old); 311 this.setRemarks(old);
309 - 312 +
310 } 313 }
311 314
312 public Long getId() { 315 public Long getId() {
@@ -622,12 +625,12 @@ public class ScheduleRealInfo { @@ -622,12 +625,12 @@ public class ScheduleRealInfo {
622 this.dfsjT = dfsjT; 625 this.dfsjT = dfsjT;
623 this.dfsj = fmtHHmm.print(this.dfsjT); 626 this.dfsj = fmtHHmm.print(this.dfsjT);
624 } 627 }
625 - 628 +
626 public void setDfsjAll(String dfsj) { 629 public void setDfsjAll(String dfsj) {
627 this.dfsjT = fmtyyyyMMddHHmm.parseMillis(this.realExecDate + dfsj); 630 this.dfsjT = fmtyyyyMMddHHmm.parseMillis(this.realExecDate + dfsj);
628 this.dfsj = dfsj; 631 this.dfsj = dfsj;
629 } 632 }
630 - 633 +
631 public void calcEndTime(){ 634 public void calcEndTime(){
632 //计划终点时间 635 //计划终点时间
633 if(this.getBcsj() != null){ 636 if(this.getBcsj() != null){
@@ -665,33 +668,33 @@ public class ScheduleRealInfo { @@ -665,33 +668,33 @@ public class ScheduleRealInfo {
665 public void setSflj(boolean sflj) { 668 public void setSflj(boolean sflj) {
666 this.sflj = sflj; 669 this.sflj = sflj;
667 } 670 }
668 - 671 +
669 /** 672 /**
670 - *  
671 - * @Title: setFcsjAll  
672 - * @Description: TODO(设置计划发车时间) 673 + *
  674 + * @Title: setFcsjAll
  675 + * @Description: TODO(设置计划发车时间)
673 * @throws 676 * @throws
674 */ 677 */
675 public void setFcsjAll(String fcsj){ 678 public void setFcsjAll(String fcsj){
676 this.fcsjT = fmtyyyyMMddHHmm.parseMillis(this.realExecDate + fcsj); 679 this.fcsjT = fmtyyyyMMddHHmm.parseMillis(this.realExecDate + fcsj);
677 this.fcsj = fcsj; 680 this.fcsj = fcsj;
678 } 681 }
679 - 682 +
680 /** 683 /**
681 - *  
682 - * @Title: setFcsjAll  
683 - * @Description: TODO(设置计划发车时间) 684 + *
  685 + * @Title: setFcsjAll
  686 + * @Description: TODO(设置计划发车时间)
684 * @throws 687 * @throws
685 */ 688 */
686 public void setFcsjAll(Long fcsjT){ 689 public void setFcsjAll(Long fcsjT){
687 this.fcsjT = fcsjT; 690 this.fcsjT = fcsjT;
688 this.fcsj = fmtHHmm.print(fcsjT); 691 this.fcsj = fmtHHmm.print(fcsjT);
689 } 692 }
690 - 693 +
691 /** 694 /**
692 - *  
693 - * @Title: setFcsjActualAll  
694 - * @Description: TODO(设置实际发车时间 字符串) 695 + *
  696 + * @Title: setFcsjActualAll
  697 + * @Description: TODO(设置实际发车时间 字符串)
695 * @throws 698 * @throws
696 */ 699 */
697 public void setFcsjActualAll(String fcsjActual){ 700 public void setFcsjActualAll(String fcsjActual){
@@ -699,11 +702,11 @@ public class ScheduleRealInfo { @@ -699,11 +702,11 @@ public class ScheduleRealInfo {
699 this.fcsjActual = fcsjActual; 702 this.fcsjActual = fcsjActual;
700 calcStatus(); 703 calcStatus();
701 } 704 }
702 - 705 +
703 /** 706 /**
704 - *  
705 - * @Title: setFcsjActualAll  
706 - * @Description: TODO(设置实际发车时间 时间戳) 707 + *
  708 + * @Title: setFcsjActualAll
  709 + * @Description: TODO(设置实际发车时间 时间戳)
707 * @throws 710 * @throws
708 */ 711 */
709 public void setFcsjActualAll(Long t){ 712 public void setFcsjActualAll(Long t){
@@ -713,25 +716,25 @@ public class ScheduleRealInfo { @@ -713,25 +716,25 @@ public class ScheduleRealInfo {
713 //更新班次状态 716 //更新班次状态
714 calcStatus(); 717 calcStatus();
715 } 718 }
716 - 719 +
717 /** 720 /**
718 - *  
719 - * @Title: setFcsjActualAll  
720 - * @Description: TODO(设置实际终点时间) 721 + *
  722 + * @Title: setFcsjActualAll
  723 + * @Description: TODO(设置实际终点时间)
721 * @throws 724 * @throws
722 */ 725 */
723 public void setZdsjActualAll(Long t){ 726 public void setZdsjActualAll(Long t){
724 this.zdsjActualTime = t; 727 this.zdsjActualTime = t;
725 this.zdsjActual = fmtHHmm.print(t); 728 this.zdsjActual = fmtHHmm.print(t);
726 - 729 +
727 //更新班次状态 730 //更新班次状态
728 calcStatus(); 731 calcStatus();
729 } 732 }
730 - 733 +
731 /** 734 /**
732 - *  
733 - * @Title: setFcsjActualAll  
734 - * @Description: TODO(设置实际终点时间) 735 + *
  736 + * @Title: setFcsjActualAll
  737 + * @Description: TODO(设置实际终点时间)
735 * @throws 738 * @throws
736 */ 739 */
737 public void setZdsjActualAll(String zdsjActual){ 740 public void setZdsjActualAll(String zdsjActual){
@@ -740,7 +743,7 @@ public class ScheduleRealInfo { @@ -740,7 +743,7 @@ public class ScheduleRealInfo {
740 743
741 calcStatus(); 744 calcStatus();
742 } 745 }
743 - 746 +
744 public Long getSpId() { 747 public Long getSpId() {
745 return spId; 748 return spId;
746 } 749 }
@@ -760,11 +763,11 @@ public class ScheduleRealInfo { @@ -760,11 +763,11 @@ public class ScheduleRealInfo {
760 public void calcStatus() { 763 public void calcStatus() {
761 if(this.status == -1) 764 if(this.status == -1)
762 return; 765 return;
763 - 766 +
764 this.status = 0; 767 this.status = 0;
765 if(StringUtils.isNotBlank(this.fcsjActual)){ 768 if(StringUtils.isNotBlank(this.fcsjActual)){
766 this.status = 1; 769 this.status = 1;
767 - 770 +
768 //进出场班次并且没有计划里程的 771 //进出场班次并且没有计划里程的
769 if((this.bcType.equals("out") || this.bcType.equals("in")) 772 if((this.bcType.equals("out") || this.bcType.equals("in"))
770 && this.jhlc == null){ 773 && this.jhlc == null){
@@ -774,7 +777,7 @@ public class ScheduleRealInfo { @@ -774,7 +777,7 @@ public class ScheduleRealInfo {
774 if(StringUtils.isNotBlank(this.zdsjActual)) 777 if(StringUtils.isNotBlank(this.zdsjActual))
775 this.status = 2; 778 this.status = 2;
776 } 779 }
777 - 780 +
778 public void destroy(){ 781 public void destroy(){
779 this.jhlc = 0.0; 782 this.jhlc = 0.0;
780 if(this.isSflj()) 783 if(this.isSflj())
@@ -782,11 +785,11 @@ public class ScheduleRealInfo { @@ -782,11 +785,11 @@ public class ScheduleRealInfo {
782 this.status = -1; 785 this.status = -1;
783 this.clearFcsjActual(); 786 this.clearFcsjActual();
784 } 787 }
785 - 788 +
786 public boolean isDestroy(){ 789 public boolean isDestroy(){
787 return this.status == -1; 790 return this.status == -1;
788 } 791 }
789 - 792 +
790 /* public boolean isNotDestroy(){ 793 /* public boolean isNotDestroy(){
791 return this.status != -1; 794 return this.status != -1;
792 }*/ 795 }*/
@@ -806,18 +809,18 @@ public class ScheduleRealInfo { @@ -806,18 +809,18 @@ public class ScheduleRealInfo {
806 public void setScheduleDateStr(String scheduleDateStr) { 809 public void setScheduleDateStr(String scheduleDateStr) {
807 this.scheduleDateStr = scheduleDateStr; 810 this.scheduleDateStr = scheduleDateStr;
808 } 811 }
809 - 812 +
810 public void clearFcsjActual(){ 813 public void clearFcsjActual(){
811 this.setFcsjActual(null); 814 this.setFcsjActual(null);
812 this.setFcsjActualTime(null); 815 this.setFcsjActualTime(null);
813 this.calcStatus(); 816 this.calcStatus();
814 } 817 }
815 - 818 +
816 //清除实际终点时间 819 //清除实际终点时间
817 public void clearZdsjActual(){ 820 public void clearZdsjActual(){
818 this.setZdsjActual(null); 821 this.setZdsjActual(null);
819 this.setZdsjActualTime(null); 822 this.setZdsjActualTime(null);
820 - 823 +
821 calcStatus(); 824 calcStatus();
822 } 825 }
823 826
@@ -922,4 +925,12 @@ public class ScheduleRealInfo { @@ -922,4 +925,12 @@ public class ScheduleRealInfo {
922 public void setSaveFailCount(int saveFailCount) { 925 public void setSaveFailCount(int saveFailCount) {
923 this.saveFailCount = saveFailCount; 926 this.saveFailCount = saveFailCount;
924 } 927 }
  928 +
  929 + public int getSiginCompate() {
  930 + return siginCompate;
  931 + }
  932 +
  933 + public void setSiginCompate(int siginCompate) {
  934 + this.siginCompate = siginCompate;
  935 + }
925 } 936 }
src/main/java/com/bsth/repository/StationRouteRepository.java
@@ -15,6 +15,7 @@ import org.springframework.transaction.annotation.Transactional; @@ -15,6 +15,7 @@ import org.springframework.transaction.annotation.Transactional;
15 15
16 import com.bsth.entity.Line; 16 import com.bsth.entity.Line;
17 import com.bsth.entity.StationRoute; 17 import com.bsth.entity.StationRoute;
  18 +import com.bsth.entity.StationRouteCache;
18 19
19 /** 20 /**
20 * 21 *
@@ -86,6 +87,9 @@ public interface StationRouteRepository extends BaseRepository&lt;StationRoute, Int @@ -86,6 +87,9 @@ public interface StationRouteRepository extends BaseRepository&lt;StationRoute, Int
86 "ON a.`stationRoute.station` = b.id ORDER BY a.`stationRoute.stationRouteCode` ASC", nativeQuery=true) 87 "ON a.`stationRoute.station` = b.id ORDER BY a.`stationRoute.stationRouteCode` ASC", nativeQuery=true)
87 List<Object[]> findPoints(int line,int directions); 88 List<Object[]> findPoints(int line,int directions);
88 89
  90 + @Query("select r from StationRoute r where r.line.id=?1 and r.destroy=0 order by r.directions ASC ,r.stationRouteCode ASC")
  91 + // @Query(value = "SELECT * from bsth_c_stationroute line = ?1 and destroy=0 bsth_c_station ORDER BY directions ASC, stationRouteCode ASC", nativeQuery=true)
  92 + List<StationRoute> findStationExport(int line);
89 93
90 /** 94 /**
91 * @Description :TODO(查询线路某方向下的站点序号与类型) 95 * @Description :TODO(查询线路某方向下的站点序号与类型)
src/main/java/com/bsth/service/LineService.java
1 package com.bsth.service; 1 package com.bsth.service;
2 2
  3 +import org.springframework.web.bind.annotation.RequestMapping;
  4 +import org.springframework.web.bind.annotation.RequestMethod;
  5 +
3 import com.bsth.entity.Line; 6 import com.bsth.entity.Line;
4 7
5 /** 8 /**
@@ -27,4 +30,6 @@ public interface LineService extends BaseService&lt;Line, Integer&gt; { @@ -27,4 +30,6 @@ public interface LineService extends BaseService&lt;Line, Integer&gt; {
27 long selectMaxIdToLineCode(); 30 long selectMaxIdToLineCode();
28 31
29 Line findByLineCode(String lineCode); 32 Line findByLineCode(String lineCode);
  33 +
  34 + Line findById(Integer id);
30 } 35 }
src/main/java/com/bsth/service/StationRouteService.java
@@ -3,6 +3,8 @@ package com.bsth.service; @@ -3,6 +3,8 @@ package com.bsth.service;
3 import java.util.List; 3 import java.util.List;
4 import java.util.Map; 4 import java.util.Map;
5 5
  6 +import javax.servlet.http.HttpServletResponse;
  7 +
6 import com.bsth.entity.StationRoute; 8 import com.bsth.entity.StationRoute;
7 9
8 /** 10 /**
@@ -105,5 +107,10 @@ public interface StationRouteService extends BaseService&lt;StationRoute, Integer&gt; @@ -105,5 +107,10 @@ public interface StationRouteService extends BaseService&lt;StationRoute, Integer&gt;
105 107
106 Map<String, Object> upddis(Map<String, Object> map); 108 Map<String, Object> upddis(Map<String, Object> map);
107 109
108 - 110 + /**
  111 + * @param id
  112 + * @return
  113 + */
  114 + Map<String, Object> getSectionRouteExport(Integer id, HttpServletResponse resp);
  115 +
109 } 116 }
src/main/java/com/bsth/service/impl/BusIntervalServiceImpl.java
@@ -673,9 +673,10 @@ public class BusIntervalServiceImpl implements BusIntervalService { @@ -673,9 +673,10 @@ public class BusIntervalServiceImpl implements BusIntervalService {
673 if(sfqr == 1){ 673 if(sfqr == 1){
674 where += " and zdsj >= '"+times1+"' and fcsj <= '"+times2+"'"; 674 where += " and zdsj >= '"+times1+"' and fcsj <= '"+times2+"'";
675 } 675 }
676 - where += " and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks'"; 676 +// where += " and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks'";
  677 + where += " and bc_type != 'ldks'";
677 678
678 - String sql = "select id, schedule_date_Str, real_exec_date, xl_name, lp_name, bcs, bcsj, jhlc," 679 + String sql = "select id, schedule_date_Str, real_exec_date, xl_name, lp_name, bcs, bcsj, jhlc, bc_type,"
679 + " fcsj, fcsj_actual, zdsj, zdsj_actual, qdz_name, zdz_name, xl_dir, status, remarks, gs_name, fgs_name, sp_id" 680 + " fcsj, fcsj_actual, zdsj, zdsj_actual, qdz_name, zdz_name, xl_dir, status, remarks, gs_name, fgs_name, sp_id"
680 + " from bsth_c_s_sp_info_real where DATE_FORMAT(schedule_date,'%Y-%m-%d') >= '"+startDate+"'" 681 + " from bsth_c_s_sp_info_real where DATE_FORMAT(schedule_date,'%Y-%m-%d') >= '"+startDate+"'"
681 + " and DATE_FORMAT(schedule_date,'%Y-%m-%d') <= '"+endDate+"'"+where+""; 682 + " and DATE_FORMAT(schedule_date,'%Y-%m-%d') <= '"+endDate+"'"+where+"";
@@ -699,6 +700,7 @@ public class BusIntervalServiceImpl implements BusIntervalService { @@ -699,6 +700,7 @@ public class BusIntervalServiceImpl implements BusIntervalService {
699 schedule.setZdsjActual(rs.getString("zdsj_actual")); 700 schedule.setZdsjActual(rs.getString("zdsj_actual"));
700 schedule.setQdzName(rs.getString("qdz_name")); 701 schedule.setQdzName(rs.getString("qdz_name"));
701 schedule.setZdzName(rs.getString("zdz_name")); 702 schedule.setZdzName(rs.getString("zdz_name"));
  703 + schedule.setBcType(rs.getString("bc_type"));
702 schedule.setXlDir(rs.getString("xl_dir")); 704 schedule.setXlDir(rs.getString("xl_dir"));
703 schedule.setStatus(rs.getInt("status")); 705 schedule.setStatus(rs.getInt("status"));
704 schedule.setRemarks(rs.getString("remarks")); 706 schedule.setRemarks(rs.getString("remarks"));
@@ -832,7 +834,7 @@ public class BusIntervalServiceImpl implements BusIntervalService { @@ -832,7 +834,7 @@ public class BusIntervalServiceImpl implements BusIntervalService {
832 if(model.length() != 0){ 834 if(model.length() != 0){
833 sql = "select sp.id from " 835 sql = "select sp.id from "
834 + "(select id, tt_info, xl_bm, lp, fcsj from bsth_c_s_sp_info where schedule_date >= '"+startDate+"' and schedule_date <= '"+endDate+"'" 836 + "(select id, tt_info, xl_bm, lp, fcsj from bsth_c_s_sp_info where schedule_date >= '"+startDate+"' and schedule_date <= '"+endDate+"'"
835 - + " and tt_info = '" + model + "' and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks') sp" 837 + + " and tt_info = '" + model + "' and bc_type != 'ldks') sp"
836 + " left join bsth_c_s_ttinfo_detail tt on sp.tt_info = tt.ttinfo and sp.xl_bm = tt.xl and sp.lp = tt.lp and sp.fcsj = tt.fcsj"; 838 + " left join bsth_c_s_ttinfo_detail tt on sp.tt_info = tt.ttinfo and sp.xl_bm = tt.xl and sp.lp = tt.lp and sp.fcsj = tt.fcsj";
837 839
838 ttList = jdbcTemplate.query(sql, 840 ttList = jdbcTemplate.query(sql,
@@ -915,6 +917,7 @@ public class BusIntervalServiceImpl implements BusIntervalService { @@ -915,6 +917,7 @@ public class BusIntervalServiceImpl implements BusIntervalService {
915 for(String key : keyMap.keySet()){ 917 for(String key : keyMap.keySet()){
916 Map<String, Object> tempMap = new HashMap<String, Object>(); 918 Map<String, Object> tempMap = new HashMap<String, Object>();
917 Map<Long, ScheduleRealInfo> sortMap = new HashMap<Long, ScheduleRealInfo>(); 919 Map<Long, ScheduleRealInfo> sortMap = new HashMap<Long, ScheduleRealInfo>();
  920 + Map<Long, Map<String, Object>> sortMap1 = new HashMap<Long, Map<String, Object>>();
918 List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>(); 921 List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
919 List<Long> keyList = new ArrayList<Long>(); 922 List<Long> keyList = new ArrayList<Long>();
920 List<Long> keyList2 = new ArrayList<Long>(); 923 List<Long> keyList2 = new ArrayList<Long>();
@@ -946,30 +949,25 @@ public class BusIntervalServiceImpl implements BusIntervalService { @@ -946,30 +949,25 @@ public class BusIntervalServiceImpl implements BusIntervalService {
946 for(int i = 1; i < keyList.size(); i++){ 949 for(int i = 1; i < keyList.size(); i++){
947 ScheduleRealInfo schedule1 = sortMap.get(keyList.get(i - 1)); 950 ScheduleRealInfo schedule1 = sortMap.get(keyList.get(i - 1));
948 ScheduleRealInfo schedule2 = sortMap.get(keyList.get(i)); 951 ScheduleRealInfo schedule2 = sortMap.get(keyList.get(i));
949 - if(!tsSet.contains(schedule1.getId())){  
950 - if(sfqr == 1 && time1 > schedule1.getFcsjT()){  
951 - jhyysj += schedule2.getFcsjT() - time1;  
952 - }else if(sfqr == 1 && time2 < schedule2.getFcsjT()){  
953 - jhyysj += time2 - schedule1.getFcsjT(); 952 + if(!tsSet.contains(schedule1.getId()) && !schedule1.getBcType().toString().equals("in") && !schedule1.getBcType().toString().equals("out")){
  953 + long fcsj1 = schedule1.getFcsjT();
  954 + long fcsj2 = schedule2.getFcsjT();
  955 + if(tsSet.contains(schedule2.getId()) || schedule2.getBcType().toString().equals("in") || schedule2.getBcType().toString().equals("out")){
  956 + fcsj2 = schedule1.getZdsjT();
  957 + }
  958 + if(sfqr == 1 && time1 > fcsj1){
  959 + jhyysj += fcsj2 - time1;
  960 + }else if(sfqr == 1 && time2 < fcsj2){
  961 + jhyysj += time2 - fcsj1;
954 }else{ 962 }else{
955 - jhyysj += schedule2.getFcsjT() - schedule1.getFcsjT(); 963 + jhyysj += fcsj2 - fcsj1;
956 } 964 }
957 - jhyysj1 += schedule2.getFcsjT() - schedule1.getFcsjT();  
958 - }  
959 - long zdsj2 = schedule2.getZdsjT();  
960 - long fcsj2 = schedule2.getFcsjT();  
961 - if(fcsj2 > zdsj2)  
962 - zdsj2 += 1440l;  
963 - if(sfqr == 1 && time1 > fcsj2){  
964 - jhyssj += zdsj2 - time1;  
965 - }else if(sfqr == 1 && time2 < zdsj2){  
966 - jhyssj += time2 - fcsj2;  
967 - }else{  
968 - jhyssj += zdsj2 - fcsj2; 965 + if(jhyysj < 0){
  966 + System.out.println(fcsj2 + " - " + fcsj1);
  967 + }
  968 + jhyysj1 += fcsj2 - fcsj1;
969 } 969 }
970 - jhyssj1 += zdsj2 - fcsj2;  
971 - jhlc += schedule2.getJhlc()==null?0:schedule2.getJhlc();  
972 - if(i == 1){ 970 + if(i == 1 && schedule1.getBcType().toString().equals("normal")){
973 long zdsj1 = schedule1.getZdsjT(); 971 long zdsj1 = schedule1.getZdsjT();
974 long fcsj1 = schedule1.getFcsjT(); 972 long fcsj1 = schedule1.getFcsjT();
975 if(fcsj1 > zdsj1) 973 if(fcsj1 > zdsj1)
@@ -984,12 +982,27 @@ public class BusIntervalServiceImpl implements BusIntervalService { @@ -984,12 +982,27 @@ public class BusIntervalServiceImpl implements BusIntervalService {
984 jhyssj1 += zdsj1 - fcsj1; 982 jhyssj1 += zdsj1 - fcsj1;
985 jhlc += schedule1.getJhlc()==null?0:schedule1.getJhlc(); 983 jhlc += schedule1.getJhlc()==null?0:schedule1.getJhlc();
986 } 984 }
  985 + if(schedule2.getBcType().toString().equals("normal")){
  986 + long zdsj2 = schedule2.getZdsjT();
  987 + long fcsj2 = schedule2.getFcsjT();
  988 + if(fcsj2 > zdsj2)
  989 + zdsj2 += 1440l;
  990 + if(sfqr == 1 && time1 > fcsj2){
  991 + jhyssj += zdsj2 - time1;
  992 + }else if(sfqr == 1 && time2 < zdsj2){
  993 + jhyssj += time2 - fcsj2;
  994 + }else{
  995 + jhyssj += zdsj2 - fcsj2;
  996 + }
  997 + jhyssj1 += zdsj2 - fcsj2;
  998 + jhlc += schedule2.getJhlc()==null?0:schedule2.getJhlc();
  999 + }
987 } 1000 }
988 1001
989 for(int i = 0; i < keyList.size(); i++){ 1002 for(int i = 0; i < keyList.size(); i++){
990 Map<String, Object> m = new HashMap<String, Object>(); 1003 Map<String, Object> m = new HashMap<String, Object>();
991 ScheduleRealInfo schedule = sortMap.get(keyList.get(i)); 1004 ScheduleRealInfo schedule = sortMap.get(keyList.get(i));
992 - 1005 +
993 if(cMap.containsKey(schedule.getId())){ 1006 if(cMap.containsKey(schedule.getId())){
994 List<ChildTaskPlan> cTasks = cMap.get(schedule.getId()); 1007 List<ChildTaskPlan> cTasks = cMap.get(schedule.getId());
995 for(ChildTaskPlan childTaskPlan : cTasks){ 1008 for(ChildTaskPlan childTaskPlan : cTasks){
@@ -1012,6 +1025,7 @@ public class BusIntervalServiceImpl implements BusIntervalService { @@ -1012,6 +1025,7 @@ public class BusIntervalServiceImpl implements BusIntervalService {
1012 temp.put("fcsj", null); 1025 temp.put("fcsj", null);
1013 } 1026 }
1014 } 1027 }
  1028 + temp.put("bcType", schedule.getBcType());
1015 mapList.add(temp); 1029 mapList.add(temp);
1016 } 1030 }
1017 }else{ 1031 }else{
@@ -1029,6 +1043,7 @@ public class BusIntervalServiceImpl implements BusIntervalService { @@ -1029,6 +1043,7 @@ public class BusIntervalServiceImpl implements BusIntervalService {
1029 m.put("zdsj", null); 1043 m.put("zdsj", null);
1030 m.put("fcsj", null); 1044 m.put("fcsj", null);
1031 } 1045 }
  1046 + m.put("bcType", schedule.getBcType());
1032 mapList.add(m); 1047 mapList.add(m);
1033 } 1048 }
1034 } 1049 }
@@ -1036,6 +1051,7 @@ public class BusIntervalServiceImpl implements BusIntervalService { @@ -1036,6 +1051,7 @@ public class BusIntervalServiceImpl implements BusIntervalService {
1036 for(Map<String, Object> m : mapList){ 1051 for(Map<String, Object> m : mapList){
1037 if(m.get("fcsj") != null && m.get("fcsj").toString().trim().length()!=0){ 1052 if(m.get("fcsj") != null && m.get("fcsj").toString().trim().length()!=0){
1038 keyList2.add(Long.valueOf(m.get("fcsj").toString())); 1053 keyList2.add(Long.valueOf(m.get("fcsj").toString()));
  1054 + sortMap1.put(Long.valueOf(m.get("fcsj").toString()), m);
1039 } 1055 }
1040 } 1056 }
1041 Collections.sort(keyList2); 1057 Collections.sort(keyList2);
@@ -1043,36 +1059,31 @@ public class BusIntervalServiceImpl implements BusIntervalService { @@ -1043,36 +1059,31 @@ public class BusIntervalServiceImpl implements BusIntervalService {
1043 for(int i = 1; i < keyList2.size(); i++){ 1059 for(int i = 1; i < keyList2.size(); i++){
1044 long fcsj1 = keyList2.get(i - 1); 1060 long fcsj1 = keyList2.get(i - 1);
1045 long fcsj2 = keyList2.get(i); 1061 long fcsj2 = keyList2.get(i);
1046 - if(fcsj2 - fcsj1 < 90){  
1047 - if(sfqr == 1 && time1 > fcsj1){  
1048 - sjyysj += fcsj2 - time1;  
1049 - }else if(sfqr == 1 && time2 < fcsj2){  
1050 - sjyysj += time2 - fcsj1;  
1051 - }else{  
1052 - sjyysj += fcsj2 - fcsj1;  
1053 - }  
1054 - sjyysj1 += fcsj2 - fcsj1; 1062 + Map<String, Object> m1 = sortMap1.get(fcsj1);
  1063 + Map<String, Object> m2 = sortMap1.get(fcsj2);
  1064 + if(m1.get("bcType").toString().equals("in") || m1.get("bcType").toString().equals("out"))
  1065 + continue;
  1066 + if(m2.get("bcType").toString().equals("in") || m2.get("bcType").toString().equals("out")){
  1067 + fcsj2 = Long.valueOf(m1.get("zdsj").toString());
  1068 + } else if(i == keyList.size() - 1){
  1069 + fcsj2 = Long.valueOf(m2.get("zdsj").toString());
  1070 + }
  1071 + if(sfqr == 1 && time1 > fcsj1){
  1072 + sjyysj += fcsj2 - time1;
  1073 + }else if(sfqr == 1 && time2 < fcsj2){
  1074 + sjyysj += time2 - fcsj1;
  1075 + }else{
  1076 + sjyysj += fcsj2 - fcsj1;
1055 } 1077 }
  1078 + sjyysj1 += fcsj2 - fcsj1;
1056 } 1079 }
1057 1080
1058 - for(int i = 1; i < mapList.size(); i++){  
1059 - Map<String, Object> m1 = mapList.get(i - 1);  
1060 - Map<String, Object> m2 = mapList.get(i);  
1061 -// if(m1.get("fcsj") != null && m2.get("fcsj") != null){  
1062 -// long fcsj2 = Long.valueOf(m2.get("fcsj").toString());  
1063 -// long fcsj1 = Long.valueOf(m1.get("fcsj").toString());  
1064 -// if(sfqr == 1 && time1 > fcsj1){  
1065 -// sjyysj += fcsj2 - time1;  
1066 -// }else if(sfqr == 1 && time2 < fcsj2){  
1067 -// sjyysj += time2 - fcsj1;  
1068 -// }else{  
1069 -// sjyysj += fcsj2 - fcsj1;  
1070 -// }  
1071 -// sjyysj1 += fcsj2 - fcsj1;  
1072 -// }  
1073 - if(m2.get("fcsj") != null && m2.get("zdsj") != null){  
1074 - long zdsj = Long.valueOf(m2.get("zdsj").toString());  
1075 - long fcsj = Long.valueOf(m2.get("fcsj").toString()); 1081 + for(int i = 0; i < mapList.size(); i++){
  1082 + Map<String, Object> m = mapList.get(i);
  1083 + if(m.get("fcsj") != null && m.get("zdsj") != null &&
  1084 + !m.get("bcType").toString().equals("in") && !m.get("bcType").toString().equals("out")){
  1085 + long zdsj = Long.valueOf(m.get("zdsj").toString());
  1086 + long fcsj = Long.valueOf(m.get("fcsj").toString());
1076 if(fcsj > zdsj) 1087 if(fcsj > zdsj)
1077 zdsj += 1440l; 1088 zdsj += 1440l;
1078 if(sfqr == 1 && time1 > fcsj){ 1089 if(sfqr == 1 && time1 > fcsj){
@@ -1083,22 +1094,7 @@ public class BusIntervalServiceImpl implements BusIntervalService { @@ -1083,22 +1094,7 @@ public class BusIntervalServiceImpl implements BusIntervalService {
1083 sjyssj += zdsj - fcsj; 1094 sjyssj += zdsj - fcsj;
1084 } 1095 }
1085 sjyssj1 += zdsj - fcsj; 1096 sjyssj1 += zdsj - fcsj;
1086 - sjlc += Double.valueOf(m2.get("lc").toString());  
1087 - }  
1088 - if(i == 1 && m1.get("fcsj") != null && m1.get("zdsj") != null){  
1089 - long zdsj = Long.valueOf(m1.get("zdsj").toString());  
1090 - long fcsj = Long.valueOf(m1.get("fcsj").toString());  
1091 - if(fcsj > zdsj)  
1092 - zdsj += 1440l;  
1093 - if(sfqr == 1 && time1 > fcsj){  
1094 - sjyssj += zdsj - time1;  
1095 - }else if(sfqr == 1 && time2 < zdsj){  
1096 - sjyssj += time2 - fcsj;  
1097 - }else{  
1098 - sjyssj += zdsj - fcsj;  
1099 - }  
1100 - sjyssj1 += zdsj - fcsj;  
1101 - sjlc += Double.valueOf(m1.get("lc").toString()); 1097 + sjlc += Double.valueOf(m.get("lc").toString());
1102 } 1098 }
1103 } 1099 }
1104 tempMap.put("company", companyName); 1100 tempMap.put("company", companyName);
src/main/java/com/bsth/service/impl/LineServiceImpl.java
@@ -44,4 +44,10 @@ public class LineServiceImpl extends BaseServiceImpl&lt;Line, Integer&gt; implements L @@ -44,4 +44,10 @@ public class LineServiceImpl extends BaseServiceImpl&lt;Line, Integer&gt; implements L
44 return repository.findByLineCode(lineCode); 44 return repository.findByLineCode(lineCode);
45 } 45 }
46 46
  47 + @Override
  48 + public Line findById(Integer id) {
  49 + // TODO Auto-generated method stub
  50 + return repository.findOne(id);
  51 + }
  52 +
47 } 53 }
src/main/java/com/bsth/service/impl/StationRouteServiceImpl.java
@@ -11,6 +11,7 @@ import com.bsth.repository.StationRepository; @@ -11,6 +11,7 @@ import com.bsth.repository.StationRepository;
11 import com.bsth.repository.StationRouteCacheRepository; 11 import com.bsth.repository.StationRouteCacheRepository;
12 import com.bsth.repository.StationRouteRepository; 12 import com.bsth.repository.StationRouteRepository;
13 import com.bsth.service.StationRouteService; 13 import com.bsth.service.StationRouteService;
  14 +import com.bsth.util.ExcelUtil;
14 import com.bsth.util.FTPClientUtils; 15 import com.bsth.util.FTPClientUtils;
15 import com.bsth.util.PackTarGZUtils; 16 import com.bsth.util.PackTarGZUtils;
16 import com.bsth.util.Geo.GeoUtils; 17 import com.bsth.util.Geo.GeoUtils;
@@ -29,6 +30,8 @@ import java.io.InputStream; @@ -29,6 +30,8 @@ import java.io.InputStream;
29 import java.text.DecimalFormat; 30 import java.text.DecimalFormat;
30 import java.util.*; 31 import java.util.*;
31 32
  33 +import javax.servlet.http.HttpServletResponse;
  34 +
32 /** 35 /**
33 * 36 *
34 * @ClassName: StationRouteServiceImpl(站点路由service业务层实现类) 37 * @ClassName: StationRouteServiceImpl(站点路由service业务层实现类)
@@ -71,6 +74,57 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -71,6 +74,57 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
71 return repository.findAll(new CustomerSpecs<StationRoute>(map), new Sort(orderList)); 74 return repository.findAll(new CustomerSpecs<StationRoute>(map), new Sort(orderList));
72 } 75 }
73 76
  77 + @Override
  78 + public Map<String, Object> getSectionRouteExport(Integer id, HttpServletResponse resp) {
  79 + Map<String, Object> resultMap = new HashMap<String, Object>();
  80 + try {
  81 + // List<Map<String, Object>> resultList = new ArrayList<Map<String,Object>>();
  82 + Map<String,Object> resultExcel = new HashMap<String,Object>();//导出参数的对象
  83 + /* 添加表头*/
  84 + List<String> title = new ArrayList<String>();
  85 + title.add("线路ID");
  86 + title.add("方向");
  87 + title.add("站点ID");
  88 + title.add("站点顺序号");
  89 + title.add("站点备注");
  90 + title.add("站点名称");
  91 + title.add("站点距离(km)");
  92 + title.add("站点时长(min)");
  93 + title.add("线路名称");
  94 + resultExcel.put("title", title);
  95 + /* 添加表单*/
  96 + Map<String,List<String>> temp = new HashMap<String,List<String>>();
  97 + List<StationRoute> strtionList = repository.findStationExport(id);
  98 + if(strtionList == null){
  99 + logger.info("没有数据导,出用户信息失败!");
  100 + } else {
  101 +
  102 + for (int i = 0; i < strtionList.size(); i++) {
  103 + StationRoute station = strtionList.get(i);
  104 +
  105 + List<String> varList = new ArrayList<String>();
  106 + varList.add(station.getLine().getId().toString());
  107 + varList.add(station.getDirections().toString());
  108 + varList.add(station.getStationCode());
  109 + varList.add(station.getStationRouteCode().toString());
  110 + varList.add(station.getStationMark());
  111 + varList.add(station.getStationName());
  112 + varList.add(station.getDistances().toString());
  113 + varList.add(station.getToTime().toString());
  114 + varList.add(station.getLine().getName());
  115 + temp.put((i+1)+"", varList);
  116 + }
  117 + }
  118 + resultExcel.put("content", temp);
  119 + ExcelUtil excelUtil = new ExcelUtil();
  120 + excelUtil.buildExcelDocument(resultExcel, strtionList.get(0).getLine().getName()+"线路站点",resp);
  121 + resultMap.put("status", ResponseCode.SUCCESS);
  122 + } catch (Exception e) {
  123 + resultMap.put("status", ResponseCode.ERROR);
  124 + logger.error("save erro.", e);
  125 + }
  126 + return resultMap;
  127 + }
74 128
75 /** 129 /**
76 * @Description : TODO(根据路段路由Id批量撤销路段) 130 * @Description : TODO(根据路段路由Id批量撤销路段)
src/main/java/com/bsth/service/impl/StationServiceImpl.java
@@ -689,7 +689,7 @@ public class StationServiceImpl extends BaseServiceImpl&lt;Station, Integer&gt; implem @@ -689,7 +689,7 @@ public class StationServiceImpl extends BaseServiceImpl&lt;Station, Integer&gt; implem
689 String bJwpoints[] = stationNameList.get(k)[0].toString().split(" "); 689 String bJwpoints[] = stationNameList.get(k)[0].toString().split(" ");
690 Point p2 = new Point(Double.parseDouble(bJwpoints[0]),Double.parseDouble(bJwpoints[1])); 690 Point p2 = new Point(Double.parseDouble(bJwpoints[0]),Double.parseDouble(bJwpoints[1]));
691 double jl = GeoUtils.getDistance(p1, p2); 691 double jl = GeoUtils.getDistance(p1, p2);
692 - if(jl<=20d) { 692 + if(jl<=60d) {
693 rsM.put("id", stationNameList.get(k)[1]); 693 rsM.put("id", stationNameList.get(k)[1]);
694 temp = true; 694 temp = true;
695 break; 695 break;
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
@@ -3012,10 +3012,17 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -3012,10 +3012,17 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
3012 if (sch == null) 3012 if (sch == null)
3013 continue; 3013 continue;
3014 3014
3015 - if (cpc.getClZbh() != null && !carExist(sch.getGsBm(), cpc.getClZbh())) {  
3016 - rs.put("msg", "车辆 " + cpc.getClZbh() + " <a href=\"/#/busInfoManage\" target=_blank>车辆基础信息</a> 里找不到!");  
3017 - rs.put("status", ResponseCode.ERROR);  
3018 - return rs; 3015 + if (cpc.getClZbh() != null) {
  3016 + if(!carExist(sch.getGsBm(), cpc.getClZbh())) {
  3017 + rs.put("msg", "车辆 " + cpc.getClZbh() + " <a href=\"/#/busInfoManage\" target=_blank>车辆基础信息</a> 里找不到!");
  3018 + rs.put("status", ResponseCode.ERROR);
  3019 + return rs;
  3020 + }
  3021 + else if(!sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(cpc.getClZbh()))){
  3022 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + cpc.getClZbh() + "】的车辆");
  3023 + rs.put("status", ResponseCode.ERROR);
  3024 + return rs;
  3025 + }
3019 } 3026 }
3020 3027
3021 if (StringUtils.isNotEmpty(cpc.getJsy())) { 3028 if (StringUtils.isNotEmpty(cpc.getJsy())) {
@@ -4440,9 +4447,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -4440,9 +4447,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
4440 try { 4447 try {
4441 List<String> leftList = Splitter.on(",").splitToList(leftIdx); 4448 List<String> leftList = Splitter.on(",").splitToList(leftIdx);
4442 List<String> rightList = Splitter.on(",").splitToList(rightIdx); 4449 List<String> rightList = Splitter.on(",").splitToList(rightIdx);
4443 -  
4444 - //有班次变更的车辆  
4445 - Set<String> cars = new HashSet<>(); 4450 + Set<String> lpSet = new HashSet<>();
4446 4451
4447 List<ScheduleRealInfo> largeList, smallList; 4452 List<ScheduleRealInfo> largeList, smallList;
4448 if (leftList.size() > rightList.size()) { 4453 if (leftList.size() > rightList.size()) {
@@ -4463,7 +4468,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -4463,7 +4468,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
4463 //不对称时多出来的 4468 //不对称时多出来的
4464 lpChangeByLeft(leftSch, largeList.get(i - 1), type); 4469 lpChangeByLeft(leftSch, largeList.get(i - 1), type);
4465 ts.add(leftSch); 4470 ts.add(leftSch);
4466 - cars.add(leftSch.getClZbh()); 4471 + lpSet.add(leftSch.getXlBm() + "_" + leftSch.getLpName());
4467 continue; 4472 continue;
4468 } 4473 }
4469 4474
@@ -4471,13 +4476,13 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -4471,13 +4476,13 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
4471 lpChange(leftSch, rightSch, type); 4476 lpChange(leftSch, rightSch, type);
4472 ts.add(leftSch); 4477 ts.add(leftSch);
4473 4478
4474 - cars.add(leftSch.getClZbh());  
4475 - cars.add(rightSch.getClZbh()); 4479 + lpSet.add(leftSch.getXlBm() + "_" + leftSch.getLpName());
  4480 + lpSet.add(rightSch.getXlBm() + "_" + rightSch.getLpName());
4476 } 4481 }
4477 4482
4478 - //重新计算起点应到时间  
4479 - for(String nbbm : cars){  
4480 - ts.addAll(dayOfSchedule.updateQdzTimePlan(nbbm)); 4483 + //重新计算路牌的起点应到时间
  4484 + for(String lpName : lpSet){
  4485 + ts.addAll(dayOfSchedule.updateQdzTimePlan(lpName));
4481 } 4486 }
4482 4487
4483 for (ScheduleRealInfo sch : ts) { 4488 for (ScheduleRealInfo sch : ts) {
@@ -4505,6 +4510,13 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -4505,6 +4510,13 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
4505 4510
4506 @Override 4511 @Override
4507 public void lpChange(ScheduleRealInfo leftSch, ScheduleRealInfo rightSch, int type) { 4512 public void lpChange(ScheduleRealInfo leftSch, ScheduleRealInfo rightSch, int type) {
  4513 + //释放班次映射
  4514 + if(type > 0) {
  4515 + dayOfSchedule.removeNbbm2SchMapp(leftSch);
  4516 + dayOfSchedule.removeNbbm2SchMapp(rightSch);
  4517 + }
  4518 +
  4519 + //对调数据
4508 LpData leftData = new LpData(leftSch); 4520 LpData leftData = new LpData(leftSch);
4509 LpData rightData = new LpData(rightSch); 4521 LpData rightData = new LpData(rightSch);
4510 4522
@@ -4512,12 +4524,9 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -4512,12 +4524,9 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
4512 rightData.appendTo(leftSch, type); 4524 rightData.appendTo(leftSch, type);
4513 4525
4514 if(type > 0){ 4526 if(type > 0){
4515 - //更新车辆和班次映射信息  
4516 - dayOfSchedule.removeNbbm2SchMapp(leftSch, leftData.getNbbm());  
4517 - dayOfSchedule.removeNbbm2SchMapp(rightSch, rightData.getNbbm());  
4518 -  
4519 - dayOfSchedule.addNbbm2SchMapp(leftSch, rightData.getNbbm());  
4520 - dayOfSchedule.addNbbm2SchMapp(rightSch, leftData.getNbbm()); 4527 + //重新映射
  4528 + dayOfSchedule.addNbbm2SchMapp(leftSch);
  4529 + dayOfSchedule.addNbbm2SchMapp(rightSch);
4521 } 4530 }
4522 } 4531 }
4523 4532
@@ -4528,14 +4537,17 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -4528,14 +4537,17 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
4528 * @param type 4537 * @param type
4529 */ 4538 */
4530 public void lpChangeByLeft(ScheduleRealInfo leftSch, ScheduleRealInfo rightSch, int type) { 4539 public void lpChangeByLeft(ScheduleRealInfo leftSch, ScheduleRealInfo rightSch, int type) {
4531 - LpData rightData = new LpData(rightSch); 4540 + //释放班次映射
  4541 + if(type > 0)
  4542 + dayOfSchedule.removeNbbm2SchMapp(leftSch);
4532 4543
  4544 + LpData rightData = new LpData(rightSch);
4533 rightData.appendTo(leftSch, type); 4545 rightData.appendTo(leftSch, type);
4534 4546
4535 - if(type > 0){  
4536 - //更新车辆和班次映射信息  
4537 - dayOfSchedule.addNbbm2SchMapp(leftSch, rightData.getNbbm());  
4538 - } 4547 + //重新映射
  4548 + if(type > 0)
  4549 + dayOfSchedule.addNbbm2SchMapp(leftSch);
  4550 +
4539 } 4551 }
4540 4552
4541 @Override 4553 @Override
src/main/java/com/bsth/service/schedule/datatools/CarsDataToolsImpl.java
@@ -121,6 +121,8 @@ public class CarsDataToolsImpl implements DataToolsService { @@ -121,6 +121,8 @@ public class CarsDataToolsImpl implements DataToolsService {
121 ktrParms.put("transpath", ktrFile.getAbsolutePath()); 121 ktrParms.put("transpath", ktrFile.getAbsolutePath());
122 ktrParms.put("filename", "车辆基础信息_download-"); 122 ktrParms.put("filename", "车辆基础信息_download-");
123 123
  124 + ktrParms.putAll(params);
  125 +
124 DataToolsFile file = dataToolsService.exportData(ktrParms); 126 DataToolsFile file = dataToolsService.exportData(ktrParms);
125 127
126 LOGGER.info("//---------------- 导出车辆基础信息 success... ----------------//"); 128 LOGGER.info("//---------------- 导出车辆基础信息 success... ----------------//");
src/main/java/com/bsth/service/schedule/datatools/EmployeeDataToolsImpl.java
@@ -121,6 +121,8 @@ public class EmployeeDataToolsImpl implements DataToolsService { @@ -121,6 +121,8 @@ public class EmployeeDataToolsImpl implements DataToolsService {
121 ktrParms.put("transpath", ktrFile.getAbsolutePath()); 121 ktrParms.put("transpath", ktrFile.getAbsolutePath());
122 ktrParms.put("filename", "人员基础信息_download-"); 122 ktrParms.put("filename", "人员基础信息_download-");
123 123
  124 + ktrParms.putAll(params);
  125 +
124 DataToolsFile file = dataToolsService.exportData(ktrParms); 126 DataToolsFile file = dataToolsService.exportData(ktrParms);
125 127
126 LOGGER.info("//---------------- 导出人员基础信息 success... ----------------//"); 128 LOGGER.info("//---------------- 导出人员基础信息 success... ----------------//");
src/main/java/com/bsth/util/ExcelUtil.java 0 → 100644
  1 +package com.bsth.util;
  2 +
  3 +import java.io.OutputStream;
  4 +import java.net.URLEncoder;
  5 +import java.util.List;
  6 +import java.util.Map;
  7 +
  8 +import javax.servlet.http.HttpServletResponse;
  9 +
  10 +import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  11 +import org.apache.poi.hssf.usermodel.HSSFFont;
  12 +import org.apache.poi.hssf.usermodel.HSSFRow;
  13 +import org.apache.poi.hssf.usermodel.HSSFSheet;
  14 +import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  15 +import org.apache.poi.hssf.util.HSSFColor;
  16 +
  17 +/**
  18 + * @ClassName: ExcelUtil.java
  19 + * @Description: TODO()
  20 + * @author: YouRuiFeng
  21 + * @date: 2017-8-13 下午3:00:44
  22 + *
  23 + */
  24 +
  25 +@SuppressWarnings("deprecation")
  26 +public class ExcelUtil {
  27 +
  28 +
  29 + public void buildExcelDocument(Map<String, Object> map, String exportName, HttpServletResponse response) throws Exception {
  30 + // 声明一个工作薄
  31 + HSSFWorkbook workbook = new HSSFWorkbook();
  32 + /* // 生成一个表格
  33 + HSSFSheet sheet = workbook.createSheet(title);
  34 + // 设置表格默认列宽度为15个字节
  35 + sheet.setDefaultColumnWidth((short) 15);*/
  36 + // 生成一个样式
  37 + HSSFCellStyle style = workbook.createCellStyle();
  38 + // 设置这些样式
  39 + style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
  40 + style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
  41 + style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  42 + style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  43 + style.setBorderRight(HSSFCellStyle.BORDER_THIN);
  44 + style.setBorderTop(HSSFCellStyle.BORDER_THIN);
  45 + style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  46 + // 生成一个字体
  47 + HSSFFont font = workbook.createFont();
  48 + font.setColor(HSSFColor.VIOLET.index);
  49 + font.setFontHeightInPoints((short) 12);
  50 + font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
  51 + // 把字体应用到当前的样式
  52 + style.setFont(font);
  53 + HSSFCellStyle cellStyle =workbook.createCellStyle();
  54 + cellStyle.setFont(font);
  55 + cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //水平布局:居中
  56 + cellStyle.setWrapText(true);
  57 +
  58 + //获取sheet名称
  59 + String sheetName = (null==map.get("sheetName"))?"Sheet":map.get("sheetName").toString();
  60 + List<String> titleList = (List<String>) map.get("title");
  61 + Map<String,List<String>> content = (Map<String,List<String>>)map.get("content");
  62 + //设置wordsheet名
  63 + HSSFSheet sheet = workbook.createSheet(sheetName);
  64 + //创建第一行
  65 + HSSFRow row = sheet.createRow(0);
  66 + //设置 ABCD列名
  67 + sheet.autoSizeColumn((short)0);
  68 + for(int i=0;i<titleList.size();i++){
  69 + row.createCell(i).setCellValue(titleList.get(i));
  70 + row.setRowStyle(cellStyle);
  71 + }
  72 + for(int i=1;i<=content.size();i++){
  73 + sheet.autoSizeColumn((short)i); //调整第一列宽度
  74 + HSSFRow row_ = sheet.createRow(i);
  75 + List<String> temp = content.get(i+"");
  76 + for(int j=0;j<temp.size();j++){
  77 + row_.createCell(j).setCellValue(temp.get(j));
  78 + row_.setRowStyle(cellStyle);
  79 + }
  80 + }
  81 + String filename =exportName+ ".xls";
  82 + response.reset();//设置为没有缓存
  83 + response.setContentType("application/vnd.ms-excel;charset=utf-8");
  84 + response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
  85 + OutputStream ouputStream = response.getOutputStream();
  86 + workbook.write(ouputStream);
  87 + ouputStream.flush();
  88 + ouputStream.close();
  89 +
  90 + }
  91 +}
src/main/resources/datatools/ktrs/carsDataInput.ktr
@@ -271,9 +271,16 @@ @@ -271,9 +271,16 @@
271 </attributes> 271 </attributes>
272 </connection> 272 </connection>
273 <order> 273 <order>
274 - <hop> <from>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</from><to>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</to><enabled>Y</enabled> </hop>  
275 <hop> <from>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_cars 2</from><to>&#x9519;&#x8bef;&#x8f93;&#x51fa; 2</to><enabled>Y</enabled> </hop> 274 <hop> <from>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_cars 2</from><to>&#x9519;&#x8bef;&#x8f93;&#x51fa; 2</to><enabled>Y</enabled> </hop>
276 - <hop> <from>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</from><to>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_cars 2</to><enabled>Y</enabled> </hop> 275 + <hop> <from>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</from><to>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</to><enabled>Y</enabled> </hop>
  276 + <hop> <from>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</from><to>&#x5185;&#x90e8;&#x7f16;&#x7801;&#x4e0d;&#x4e3a;&#x7a7a;</to><enabled>Y</enabled> </hop>
  277 + <hop> <from>&#x5185;&#x90e8;&#x7f16;&#x7801;&#x4e0d;&#x4e3a;&#x7a7a;</from><to>&#x6dfb;&#x52a0;&#x67e5;&#x8be2;&#x5e38;&#x91cf;</to><enabled>Y</enabled> </hop>
  278 + <hop> <from>&#x6dfb;&#x52a0;&#x67e5;&#x8be2;&#x5e38;&#x91cf;</from><to>&#x516c;&#x53f8;&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>
  279 + <hop> <from>&#x516c;&#x53f8;&#x67e5;&#x8be2;</from><to>&#x516c;&#x53f8;&#x4ee3;&#x7801;&#x4e0d;&#x4e3a;&#x7a7a;</to><enabled>Y</enabled> </hop>
  280 + <hop> <from>&#x516c;&#x53f8;&#x4ee3;&#x7801;&#x4e0d;&#x4e3a;&#x7a7a;</from><to>&#x5206;&#x516c;&#x53f8;&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>
  281 + <hop> <from>&#x5206;&#x516c;&#x53f8;&#x67e5;&#x8be2;</from><to>&#x5206;&#x516c;&#x53f8;&#x4ee3;&#x7801;&#x4e0d;&#x4e3a;&#x7a7a;</to><enabled>Y</enabled> </hop>
  282 + <hop> <from>&#x5206;&#x516c;&#x53f8;&#x4ee3;&#x7801;&#x4e0d;&#x4e3a;&#x7a7a;</from><to>&#x8f66;&#x8f86;&#x7f16;&#x7801;</to><enabled>Y</enabled> </hop>
  283 + <hop> <from>&#x8f66;&#x8f86;&#x7f16;&#x7801;</from><to>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_cars 2</to><enabled>Y</enabled> </hop>
277 </order> 284 </order>
278 <step> 285 <step>
279 <name>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</name> 286 <name>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</name>
@@ -322,18 +329,6 @@ @@ -322,18 +329,6 @@
322 <group/> 329 <group/>
323 </field> 330 </field>
324 <field> 331 <field>
325 - <name>&#x8f66;&#x8f86;&#x7f16;&#x7801;</name>  
326 - <type>String</type>  
327 - <length>-1</length>  
328 - <precision>-1</precision>  
329 - <trim_type>none</trim_type>  
330 - <repeat>N</repeat>  
331 - <format/>  
332 - <currency/>  
333 - <decimal/>  
334 - <group/>  
335 - </field>  
336 - <field>  
337 <name>&#x5185;&#x90e8;&#x7f16;&#x7801;</name> 332 <name>&#x5185;&#x90e8;&#x7f16;&#x7801;</name>
338 <type>String</type> 333 <type>String</type>
339 <length>-1</length> 334 <length>-1</length>
@@ -358,18 +353,6 @@ @@ -358,18 +353,6 @@
358 <group/> 353 <group/>
359 </field> 354 </field>
360 <field> 355 <field>
361 - <name>&#x6240;&#x5c5e;&#x516c;&#x53f8;&#x4ee3;&#x7801;</name>  
362 - <type>String</type>  
363 - <length>-1</length>  
364 - <precision>-1</precision>  
365 - <trim_type>none</trim_type>  
366 - <repeat>N</repeat>  
367 - <format/>  
368 - <currency/>  
369 - <decimal/>  
370 - <group/>  
371 - </field>  
372 - <field>  
373 <name>&#x6240;&#x5c5e;&#x5206;&#x516c;&#x53f8;</name> 356 <name>&#x6240;&#x5c5e;&#x5206;&#x516c;&#x53f8;</name>
374 <type>String</type> 357 <type>String</type>
375 <length>-1</length> 358 <length>-1</length>
@@ -382,18 +365,6 @@ @@ -382,18 +365,6 @@
382 <group/> 365 <group/>
383 </field> 366 </field>
384 <field> 367 <field>
385 - <name>&#x6240;&#x5c5e;&#x5206;&#x516c;&#x53f8;&#x4ee3;&#x7801;</name>  
386 - <type>String</type>  
387 - <length>-1</length>  
388 - <precision>-1</precision>  
389 - <trim_type>none</trim_type>  
390 - <repeat>N</repeat>  
391 - <format/>  
392 - <currency/>  
393 - <decimal/>  
394 - <group/>  
395 - </field>  
396 - <field>  
397 <name>&#x8bbe;&#x5907;&#x4f9b;&#x5e94;&#x5382;&#x5546;</name> 368 <name>&#x8bbe;&#x5907;&#x4f9b;&#x5e94;&#x5382;&#x5546;</name>
398 <type>String</type> 369 <type>String</type>
399 <length>-1</length> 370 <length>-1</length>
@@ -445,8 +416,8 @@ @@ -445,8 +416,8 @@
445 <spreadsheet_type>JXL</spreadsheet_type> 416 <spreadsheet_type>JXL</spreadsheet_type>
446 <cluster_schema/> 417 <cluster_schema/>
447 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI> 418 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
448 - <xloc>131</xloc>  
449 - <yloc>58</yloc> 419 + <xloc>218</xloc>
  420 + <yloc>59</yloc>
450 <draw>Y</draw> 421 <draw>Y</draw>
451 </GUI> 422 </GUI>
452 </step> 423 </step>
@@ -463,7 +434,7 @@ @@ -463,7 +434,7 @@
463 <schema_name/> 434 <schema_name/>
464 </partitioning> 435 </partitioning>
465 <connection>bus_control_variable</connection> 436 <connection>bus_control_variable</connection>
466 - <commit>1000</commit> 437 + <commit>500</commit>
467 <update_bypassed>N</update_bypassed> 438 <update_bypassed>N</update_bypassed>
468 <lookup> 439 <lookup>
469 <schema/> 440 <schema/>
@@ -481,7 +452,7 @@ @@ -481,7 +452,7 @@
481 </value> 452 </value>
482 <value> 453 <value>
483 <name>car_code</name> 454 <name>car_code</name>
484 - <rename>&#x8f66;&#x8f86;&#x7f16;&#x7801;</rename> 455 + <rename>cl_code</rename>
485 <update>Y</update> 456 <update>Y</update>
486 </value> 457 </value>
487 <value> 458 <value>
@@ -496,7 +467,7 @@ @@ -496,7 +467,7 @@
496 </value> 467 </value>
497 <value> 468 <value>
498 <name>business_code</name> 469 <name>business_code</name>
499 - <rename>&#x6240;&#x5c5e;&#x516c;&#x53f8;&#x4ee3;&#x7801;</rename> 470 + <rename>gs_code</rename>
500 <update>Y</update> 471 <update>Y</update>
501 </value> 472 </value>
502 <value> 473 <value>
@@ -506,7 +477,7 @@ @@ -506,7 +477,7 @@
506 </value> 477 </value>
507 <value> 478 <value>
508 <name>branche_company_code</name> 479 <name>branche_company_code</name>
509 - <rename>&#x6240;&#x5c5e;&#x5206;&#x516c;&#x53f8;&#x4ee3;&#x7801;</rename> 480 + <rename>fgs_code</rename>
510 <update>Y</update> 481 <update>Y</update>
511 </value> 482 </value>
512 <value> 483 <value>
@@ -522,8 +493,8 @@ @@ -522,8 +493,8 @@
522 </lookup> 493 </lookup>
523 <cluster_schema/> 494 <cluster_schema/>
524 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI> 495 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
525 - <xloc>516</xloc>  
526 - <yloc>138</yloc> 496 + <xloc>690</xloc>
  497 + <yloc>393</yloc>
527 <draw>Y</draw> 498 <draw>Y</draw>
528 </GUI> 499 </GUI>
529 </step> 500 </step>
@@ -567,8 +538,8 @@ @@ -567,8 +538,8 @@
567 </fields> 538 </fields>
568 <cluster_schema/> 539 <cluster_schema/>
569 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI> 540 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
570 - <xloc>134</xloc>  
571 - <yloc>183</yloc> 541 + <xloc>70</xloc>
  542 + <yloc>59</yloc>
572 <draw>Y</draw> 543 <draw>Y</draw>
573 </GUI> 544 </GUI>
574 </step> 545 </step>
@@ -630,21 +601,11 @@ @@ -630,21 +601,11 @@
630 <format/> 601 <format/>
631 </field> 602 </field>
632 <field> 603 <field>
633 - <name>&#x6240;&#x5c5e;&#x516c;&#x53f8;&#x4ee3;&#x7801;</name>  
634 - <type>String</type>  
635 - <format/>  
636 - </field>  
637 - <field>  
638 <name>&#x6240;&#x5c5e;&#x5206;&#x516c;&#x53f8;</name> 604 <name>&#x6240;&#x5c5e;&#x5206;&#x516c;&#x53f8;</name>
639 <type>String</type> 605 <type>String</type>
640 <format/> 606 <format/>
641 </field> 607 </field>
642 <field> 608 <field>
643 - <name>&#x6240;&#x5c5e;&#x5206;&#x516c;&#x53f8;&#x4ee3;&#x7801;</name>  
644 - <type>String</type>  
645 - <format/>  
646 - </field>  
647 - <field>  
648 <name>&#x8bbe;&#x5907;&#x4f9b;&#x5e94;&#x5382;&#x5546;</name> 609 <name>&#x8bbe;&#x5907;&#x4f9b;&#x5e94;&#x5382;&#x5546;</name>
649 <type>String</type> 610 <type>String</type>
650 <format/> 611 <format/>
@@ -694,8 +655,266 @@ @@ -694,8 +655,266 @@
694 </custom> 655 </custom>
695 <cluster_schema/> 656 <cluster_schema/>
696 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI> 657 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
697 - <xloc>328</xloc>  
698 - <yloc>140</yloc> 658 + <xloc>502</xloc>
  659 + <yloc>395</yloc>
  660 + <draw>Y</draw>
  661 + </GUI>
  662 + </step>
  663 +
  664 + <step>
  665 + <name>&#x5185;&#x90e8;&#x7f16;&#x7801;&#x4e0d;&#x4e3a;&#x7a7a;</name>
  666 + <type>FilterRows</type>
  667 + <description/>
  668 + <distribute>Y</distribute>
  669 + <custom_distribution/>
  670 + <copies>1</copies>
  671 + <partitioning>
  672 + <method>none</method>
  673 + <schema_name/>
  674 + </partitioning>
  675 +<send_true_to/>
  676 +<send_false_to/>
  677 + <compare>
  678 +<condition>
  679 + <negated>N</negated>
  680 + <conditions>
  681 + <condition>
  682 + <negated>N</negated>
  683 + <leftvalue>&#x5185;&#x90e8;&#x7f16;&#x7801;</leftvalue>
  684 + <function>IS NOT NULL</function>
  685 + <rightvalue/>
  686 + </condition>
  687 + </conditions>
  688 + </condition>
  689 + </compare>
  690 + <cluster_schema/>
  691 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  692 + <xloc>218</xloc>
  693 + <yloc>164</yloc>
  694 + <draw>Y</draw>
  695 + </GUI>
  696 + </step>
  697 +
  698 + <step>
  699 + <name>&#x6dfb;&#x52a0;&#x67e5;&#x8be2;&#x5e38;&#x91cf;</name>
  700 + <type>ScriptValueMod</type>
  701 + <description/>
  702 + <distribute>Y</distribute>
  703 + <custom_distribution/>
  704 + <copies>1</copies>
  705 + <partitioning>
  706 + <method>none</method>
  707 + <schema_name/>
  708 + </partitioning>
  709 + <compatible>N</compatible>
  710 + <optimizationLevel>9</optimizationLevel>
  711 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  712 + <jsScript_name>Script 1</jsScript_name>
  713 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var up_code &#x3d; &#x27;88&#x27;&#x3b;</jsScript_script>
  714 + </jsScript> </jsScripts> <fields> <field> <name>up_code</name>
  715 + <rename>up_code</rename>
  716 + <type>String</type>
  717 + <length>-1</length>
  718 + <precision>-1</precision>
  719 + <replace>N</replace>
  720 + </field> </fields> <cluster_schema/>
  721 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  722 + <xloc>389</xloc>
  723 + <yloc>61</yloc>
  724 + <draw>Y</draw>
  725 + </GUI>
  726 + </step>
  727 +
  728 + <step>
  729 + <name>&#x516c;&#x53f8;&#x67e5;&#x8be2;</name>
  730 + <type>DBLookup</type>
  731 + <description/>
  732 + <distribute>Y</distribute>
  733 + <custom_distribution/>
  734 + <copies>1</copies>
  735 + <partitioning>
  736 + <method>none</method>
  737 + <schema_name/>
  738 + </partitioning>
  739 + <connection>bus_control_variable</connection>
  740 + <cache>N</cache>
  741 + <cache_load_all>N</cache_load_all>
  742 + <cache_size>0</cache_size>
  743 + <lookup>
  744 + <schema/>
  745 + <table>bsth_c_business</table>
  746 + <orderby/>
  747 + <fail_on_multiple>N</fail_on_multiple>
  748 + <eat_row_on_failure>N</eat_row_on_failure>
  749 + <key>
  750 + <name>up_code</name>
  751 + <field>up_code</field>
  752 + <condition>&#x3d;</condition>
  753 + <name2/>
  754 + </key>
  755 + <key>
  756 + <name>&#x6240;&#x5c5e;&#x516c;&#x53f8;</name>
  757 + <field>business_name</field>
  758 + <condition>&#x3d;</condition>
  759 + <name2/>
  760 + </key>
  761 + <value>
  762 + <name>business_code</name>
  763 + <rename>gs_code</rename>
  764 + <default/>
  765 + <type>String</type>
  766 + </value>
  767 + </lookup>
  768 + <cluster_schema/>
  769 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  770 + <xloc>540</xloc>
  771 + <yloc>59</yloc>
  772 + <draw>Y</draw>
  773 + </GUI>
  774 + </step>
  775 +
  776 + <step>
  777 + <name>&#x516c;&#x53f8;&#x4ee3;&#x7801;&#x4e0d;&#x4e3a;&#x7a7a;</name>
  778 + <type>FilterRows</type>
  779 + <description/>
  780 + <distribute>Y</distribute>
  781 + <custom_distribution/>
  782 + <copies>1</copies>
  783 + <partitioning>
  784 + <method>none</method>
  785 + <schema_name/>
  786 + </partitioning>
  787 +<send_true_to/>
  788 +<send_false_to/>
  789 + <compare>
  790 +<condition>
  791 + <negated>N</negated>
  792 + <conditions>
  793 + <condition>
  794 + <negated>N</negated>
  795 + <leftvalue>gs_code</leftvalue>
  796 + <function>IS NOT NULL</function>
  797 + <rightvalue/>
  798 + </condition>
  799 + </conditions>
  800 + </condition>
  801 + </compare>
  802 + <cluster_schema/>
  803 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  804 + <xloc>542</xloc>
  805 + <yloc>164</yloc>
  806 + <draw>Y</draw>
  807 + </GUI>
  808 + </step>
  809 +
  810 + <step>
  811 + <name>&#x5206;&#x516c;&#x53f8;&#x67e5;&#x8be2;</name>
  812 + <type>DBLookup</type>
  813 + <description/>
  814 + <distribute>Y</distribute>
  815 + <custom_distribution/>
  816 + <copies>1</copies>
  817 + <partitioning>
  818 + <method>none</method>
  819 + <schema_name/>
  820 + </partitioning>
  821 + <connection>bus_control_variable</connection>
  822 + <cache>N</cache>
  823 + <cache_load_all>N</cache_load_all>
  824 + <cache_size>0</cache_size>
  825 + <lookup>
  826 + <schema/>
  827 + <table>bsth_c_business</table>
  828 + <orderby/>
  829 + <fail_on_multiple>N</fail_on_multiple>
  830 + <eat_row_on_failure>N</eat_row_on_failure>
  831 + <key>
  832 + <name>gs_code</name>
  833 + <field>up_code</field>
  834 + <condition>&#x3d;</condition>
  835 + <name2/>
  836 + </key>
  837 + <key>
  838 + <name>&#x6240;&#x5c5e;&#x5206;&#x516c;&#x53f8;</name>
  839 + <field>business_name</field>
  840 + <condition>&#x3d;</condition>
  841 + <name2/>
  842 + </key>
  843 + <value>
  844 + <name>business_code</name>
  845 + <rename>fgs_code</rename>
  846 + <default/>
  847 + <type>String</type>
  848 + </value>
  849 + </lookup>
  850 + <cluster_schema/>
  851 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  852 + <xloc>683</xloc>
  853 + <yloc>59</yloc>
  854 + <draw>Y</draw>
  855 + </GUI>
  856 + </step>
  857 +
  858 + <step>
  859 + <name>&#x5206;&#x516c;&#x53f8;&#x4ee3;&#x7801;&#x4e0d;&#x4e3a;&#x7a7a;</name>
  860 + <type>FilterRows</type>
  861 + <description/>
  862 + <distribute>Y</distribute>
  863 + <custom_distribution/>
  864 + <copies>1</copies>
  865 + <partitioning>
  866 + <method>none</method>
  867 + <schema_name/>
  868 + </partitioning>
  869 +<send_true_to/>
  870 +<send_false_to/>
  871 + <compare>
  872 +<condition>
  873 + <negated>N</negated>
  874 + <conditions>
  875 + <condition>
  876 + <negated>N</negated>
  877 + <leftvalue>fgs_code</leftvalue>
  878 + <function>IS NOT NULL</function>
  879 + <rightvalue/>
  880 + </condition>
  881 + </conditions>
  882 + </condition>
  883 + </compare>
  884 + <cluster_schema/>
  885 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  886 + <xloc>685</xloc>
  887 + <yloc>162</yloc>
  888 + <draw>Y</draw>
  889 + </GUI>
  890 + </step>
  891 +
  892 + <step>
  893 + <name>&#x8f66;&#x8f86;&#x7f16;&#x7801;</name>
  894 + <type>ScriptValueMod</type>
  895 + <description/>
  896 + <distribute>Y</distribute>
  897 + <custom_distribution/>
  898 + <copies>1</copies>
  899 + <partitioning>
  900 + <method>none</method>
  901 + <schema_name/>
  902 + </partitioning>
  903 + <compatible>N</compatible>
  904 + <optimizationLevel>9</optimizationLevel>
  905 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  906 + <jsScript_name>Script 1</jsScript_name>
  907 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var cl_code &#x3d; gs_code &#x2b; &#x22;0&#x22; &#x2b; &#x5185;&#x90e8;&#x7f16;&#x7801;&#x3b;</jsScript_script>
  908 + </jsScript> </jsScripts> <fields> <field> <name>cl_code</name>
  909 + <rename>cl_code</rename>
  910 + <type>String</type>
  911 + <length>-1</length>
  912 + <precision>-1</precision>
  913 + <replace>N</replace>
  914 + </field> </fields> <cluster_schema/>
  915 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  916 + <xloc>688</xloc>
  917 + <yloc>273</yloc>
699 <draw>Y</draw> 918 <draw>Y</draw>
700 </GUI> 919 </GUI>
701 </step> 920 </step>
src/main/resources/datatools/ktrs/carsDataOutput.ktr
@@ -10,6 +10,11 @@ @@ -10,6 +10,11 @@
10 <directory>&#x2f;</directory> 10 <directory>&#x2f;</directory>
11 <parameters> 11 <parameters>
12 <parameter> 12 <parameter>
  13 + <name>cgsbm_in</name>
  14 + <default_value/>
  15 + <description>&#x5206;&#x516c;&#x53f8;&#x7f16;&#x7801;</description>
  16 + </parameter>
  17 + <parameter>
13 <name>filepath</name> 18 <name>filepath</name>
14 <default_value/> 19 <default_value/>
15 <description>excel&#x6587;&#x4ef6;&#x8def;&#x5f84;</description> 20 <description>excel&#x6587;&#x4ef6;&#x8def;&#x5f84;</description>
@@ -266,8 +271,11 @@ @@ -266,8 +271,11 @@
266 </attributes> 271 </attributes>
267 </connection> 272 </connection>
268 <order> 273 <order>
269 - <hop> <from>&#x8868;&#x8f93;&#x5165;</from><to>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</to><enabled>Y</enabled> </hop>  
270 <hop> <from>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</from><to>Excel&#x8f93;&#x51fa;</to><enabled>Y</enabled> </hop> 274 <hop> <from>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</from><to>Excel&#x8f93;&#x51fa;</to><enabled>Y</enabled> </hop>
  275 + <hop> <from>&#x8f66;&#x8f86;&#x4fe1;&#x606f;&#x8868;&#x8f93;&#x5165;</from><to>&#x6dfb;&#x52a0;&#x67e5;&#x8be2;&#x5e38;&#x91cf;</to><enabled>Y</enabled> </hop>
  276 + <hop> <from>&#x6dfb;&#x52a0;&#x67e5;&#x8be2;&#x5e38;&#x91cf;</from><to>&#x516c;&#x53f8;&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>
  277 + <hop> <from>&#x516c;&#x53f8;&#x67e5;&#x8be2;</from><to>&#x5206;&#x516c;&#x53f8;&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>
  278 + <hop> <from>&#x5206;&#x516c;&#x53f8;&#x67e5;&#x8be2;</from><to>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</to><enabled>Y</enabled> </hop>
271 </order> 279 </order>
272 <step> 280 <step>
273 <name>Excel&#x8f93;&#x51fa;</name> 281 <name>Excel&#x8f93;&#x51fa;</name>
@@ -316,11 +324,6 @@ @@ -316,11 +324,6 @@
316 <format/> 324 <format/>
317 </field> 325 </field>
318 <field> 326 <field>
319 - <name>&#x8f66;&#x8f86;&#x7f16;&#x7801;</name>  
320 - <type>String</type>  
321 - <format/>  
322 - </field>  
323 - <field>  
324 <name>&#x5185;&#x90e8;&#x7f16;&#x7801;</name> 327 <name>&#x5185;&#x90e8;&#x7f16;&#x7801;</name>
325 <type>String</type> 328 <type>String</type>
326 <format/> 329 <format/>
@@ -331,21 +334,11 @@ @@ -331,21 +334,11 @@
331 <format/> 334 <format/>
332 </field> 335 </field>
333 <field> 336 <field>
334 - <name>&#x6240;&#x5c5e;&#x516c;&#x53f8;&#x4ee3;&#x7801;</name>  
335 - <type>String</type>  
336 - <format/>  
337 - </field>  
338 - <field>  
339 <name>&#x6240;&#x5c5e;&#x5206;&#x516c;&#x53f8;</name> 337 <name>&#x6240;&#x5c5e;&#x5206;&#x516c;&#x53f8;</name>
340 <type>String</type> 338 <type>String</type>
341 <format/> 339 <format/>
342 </field> 340 </field>
343 <field> 341 <field>
344 - <name>&#x6240;&#x5c5e;&#x5206;&#x516c;&#x53f8;&#x4ee3;&#x7801;</name>  
345 - <type>String</type>  
346 - <format/>  
347 - </field>  
348 - <field>  
349 <name>&#x8bbe;&#x5907;&#x4f9b;&#x5e94;&#x5382;&#x5546;</name> 342 <name>&#x8bbe;&#x5907;&#x4f9b;&#x5e94;&#x5382;&#x5546;</name>
350 <type>String</type> 343 <type>String</type>
351 <format/> 344 <format/>
@@ -375,8 +368,8 @@ @@ -375,8 +368,8 @@
375 </custom> 368 </custom>
376 <cluster_schema/> 369 <cluster_schema/>
377 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI> 370 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
378 - <xloc>282</xloc>  
379 - <yloc>169</yloc> 371 + <xloc>514</xloc>
  372 + <yloc>293</yloc>
380 <draw>Y</draw> 373 <draw>Y</draw>
381 </GUI> 374 </GUI>
382 </step> 375 </step>
@@ -396,30 +389,18 @@ @@ -396,30 +389,18 @@
396 <rename>&#x8f66;&#x724c;&#x53f7;</rename> 389 <rename>&#x8f66;&#x724c;&#x53f7;</rename>
397 <length>-2</length> 390 <length>-2</length>
398 <precision>-2</precision> 391 <precision>-2</precision>
399 - </field> <field> <name>car_code</name>  
400 - <rename>&#x8f66;&#x8f86;&#x7f16;&#x7801;</rename>  
401 - <length>-2</length>  
402 - <precision>-2</precision>  
403 </field> <field> <name>inside_code</name> 392 </field> <field> <name>inside_code</name>
404 <rename>&#x5185;&#x90e8;&#x7f16;&#x7801;</rename> 393 <rename>&#x5185;&#x90e8;&#x7f16;&#x7801;</rename>
405 <length>-2</length> 394 <length>-2</length>
406 <precision>-2</precision> 395 <precision>-2</precision>
407 - </field> <field> <name>company</name> 396 + </field> <field> <name>gs</name>
408 <rename>&#x6240;&#x5c5e;&#x516c;&#x53f8;</rename> 397 <rename>&#x6240;&#x5c5e;&#x516c;&#x53f8;</rename>
409 <length>-2</length> 398 <length>-2</length>
410 <precision>-2</precision> 399 <precision>-2</precision>
411 - </field> <field> <name>business_code</name>  
412 - <rename>&#x6240;&#x5c5e;&#x516c;&#x53f8;&#x4ee3;&#x7801;</rename>  
413 - <length>-2</length>  
414 - <precision>-2</precision>  
415 - </field> <field> <name>branche_company</name> 400 + </field> <field> <name>fgs</name>
416 <rename>&#x6240;&#x5c5e;&#x5206;&#x516c;&#x53f8;</rename> 401 <rename>&#x6240;&#x5c5e;&#x5206;&#x516c;&#x53f8;</rename>
417 <length>-2</length> 402 <length>-2</length>
418 <precision>-2</precision> 403 <precision>-2</precision>
419 - </field> <field> <name>branche_company_code</name>  
420 - <rename>&#x6240;&#x5c5e;&#x5206;&#x516c;&#x53f8;&#x4ee3;&#x7801;</rename>  
421 - <length>-2</length>  
422 - <precision>-2</precision>  
423 </field> <field> <name>supplier_name</name> 404 </field> <field> <name>supplier_name</name>
424 <rename>&#x8bbe;&#x5907;&#x4f9b;&#x5e94;&#x5382;&#x5546;</rename> 405 <rename>&#x8bbe;&#x5907;&#x4f9b;&#x5e94;&#x5382;&#x5546;</rename>
425 <length>-2</length> 406 <length>-2</length>
@@ -431,14 +412,14 @@ @@ -431,14 +412,14 @@
431 </field> <select_unspecified>N</select_unspecified> 412 </field> <select_unspecified>N</select_unspecified>
432 </fields> <cluster_schema/> 413 </fields> <cluster_schema/>
433 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI> 414 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
434 - <xloc>280</xloc>  
435 - <yloc>67</yloc> 415 + <xloc>512</xloc>
  416 + <yloc>181</yloc>
436 <draw>Y</draw> 417 <draw>Y</draw>
437 </GUI> 418 </GUI>
438 </step> 419 </step>
439 420
440 <step> 421 <step>
441 - <name>&#x8868;&#x8f93;&#x5165;</name> 422 + <name>&#x8f66;&#x8f86;&#x4fe1;&#x606f;&#x8868;&#x8f93;&#x5165;</name>
442 <type>TableInput</type> 423 <type>TableInput</type>
443 <description/> 424 <description/>
444 <distribute>Y</distribute> 425 <distribute>Y</distribute>
@@ -449,11 +430,11 @@ @@ -449,11 +430,11 @@
449 <schema_name/> 430 <schema_name/>
450 </partitioning> 431 </partitioning>
451 <connection>bus_control_variable</connection> 432 <connection>bus_control_variable</connection>
452 - <sql>SELECT &#x2a; FROM bsth_c_cars&#x3b;</sql> 433 + <sql>SELECT &#x2a; FROM bsth_c_cars&#xa;where concat&#x28;business_code, &#x27;_&#x27;, branche_company_code&#x29; in &#x28;&#x24;&#x7b;cgsbm_in&#x7d;&#x29;</sql>
453 <limit>0</limit> 434 <limit>0</limit>
454 <lookup/> 435 <lookup/>
455 <execute_each_row>N</execute_each_row> 436 <execute_each_row>N</execute_each_row>
456 - <variables_active>N</variables_active> 437 + <variables_active>Y</variables_active>
457 <lazy_conversion_active>N</lazy_conversion_active> 438 <lazy_conversion_active>N</lazy_conversion_active>
458 <cluster_schema/> 439 <cluster_schema/>
459 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI> 440 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
@@ -463,6 +444,132 @@ @@ -463,6 +444,132 @@
463 </GUI> 444 </GUI>
464 </step> 445 </step>
465 446
  447 + <step>
  448 + <name>&#x6dfb;&#x52a0;&#x67e5;&#x8be2;&#x5e38;&#x91cf;</name>
  449 + <type>ScriptValueMod</type>
  450 + <description/>
  451 + <distribute>Y</distribute>
  452 + <custom_distribution/>
  453 + <copies>1</copies>
  454 + <partitioning>
  455 + <method>none</method>
  456 + <schema_name/>
  457 + </partitioning>
  458 + <compatible>N</compatible>
  459 + <optimizationLevel>9</optimizationLevel>
  460 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  461 + <jsScript_name>Script 1</jsScript_name>
  462 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var up_code &#x3d; &#x27;88&#x27;&#x3b;</jsScript_script>
  463 + </jsScript> </jsScripts> <fields> <field> <name>up_code</name>
  464 + <rename>up_code</rename>
  465 + <type>String</type>
  466 + <length>-1</length>
  467 + <precision>-1</precision>
  468 + <replace>N</replace>
  469 + </field> </fields> <cluster_schema/>
  470 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  471 + <xloc>244</xloc>
  472 + <yloc>67</yloc>
  473 + <draw>Y</draw>
  474 + </GUI>
  475 + </step>
  476 +
  477 + <step>
  478 + <name>&#x516c;&#x53f8;&#x67e5;&#x8be2;</name>
  479 + <type>DBLookup</type>
  480 + <description/>
  481 + <distribute>Y</distribute>
  482 + <custom_distribution/>
  483 + <copies>1</copies>
  484 + <partitioning>
  485 + <method>none</method>
  486 + <schema_name/>
  487 + </partitioning>
  488 + <connection>bus_control_variable</connection>
  489 + <cache>N</cache>
  490 + <cache_load_all>N</cache_load_all>
  491 + <cache_size>0</cache_size>
  492 + <lookup>
  493 + <schema/>
  494 + <table>bsth_c_business</table>
  495 + <orderby/>
  496 + <fail_on_multiple>N</fail_on_multiple>
  497 + <eat_row_on_failure>N</eat_row_on_failure>
  498 + <key>
  499 + <name>up_code</name>
  500 + <field>up_code</field>
  501 + <condition>&#x3d;</condition>
  502 + <name2/>
  503 + </key>
  504 + <key>
  505 + <name>business_code</name>
  506 + <field>business_code</field>
  507 + <condition>&#x3d;</condition>
  508 + <name2/>
  509 + </key>
  510 + <value>
  511 + <name>business_name</name>
  512 + <rename>gs</rename>
  513 + <default/>
  514 + <type>String</type>
  515 + </value>
  516 + </lookup>
  517 + <cluster_schema/>
  518 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  519 + <xloc>381</xloc>
  520 + <yloc>68</yloc>
  521 + <draw>Y</draw>
  522 + </GUI>
  523 + </step>
  524 +
  525 + <step>
  526 + <name>&#x5206;&#x516c;&#x53f8;&#x67e5;&#x8be2;</name>
  527 + <type>DBLookup</type>
  528 + <description/>
  529 + <distribute>Y</distribute>
  530 + <custom_distribution/>
  531 + <copies>1</copies>
  532 + <partitioning>
  533 + <method>none</method>
  534 + <schema_name/>
  535 + </partitioning>
  536 + <connection>bus_control_variable</connection>
  537 + <cache>N</cache>
  538 + <cache_load_all>N</cache_load_all>
  539 + <cache_size>0</cache_size>
  540 + <lookup>
  541 + <schema/>
  542 + <table>bsth_c_business</table>
  543 + <orderby/>
  544 + <fail_on_multiple>N</fail_on_multiple>
  545 + <eat_row_on_failure>N</eat_row_on_failure>
  546 + <key>
  547 + <name>business_code</name>
  548 + <field>up_code</field>
  549 + <condition>&#x3d;</condition>
  550 + <name2/>
  551 + </key>
  552 + <key>
  553 + <name>branche_company_code</name>
  554 + <field>business_code</field>
  555 + <condition>&#x3d;</condition>
  556 + <name2/>
  557 + </key>
  558 + <value>
  559 + <name>business_name</name>
  560 + <rename>fgs</rename>
  561 + <default/>
  562 + <type>String</type>
  563 + </value>
  564 + </lookup>
  565 + <cluster_schema/>
  566 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  567 + <xloc>508</xloc>
  568 + <yloc>68</yloc>
  569 + <draw>Y</draw>
  570 + </GUI>
  571 + </step>
  572 +
466 <step_error_handling> 573 <step_error_handling>
467 </step_error_handling> 574 </step_error_handling>
468 <slave-step-copy-partition-distribution> 575 <slave-step-copy-partition-distribution>
src/main/resources/datatools/ktrs/employeesDataInput.ktr
@@ -273,13 +273,20 @@ @@ -273,13 +273,20 @@
273 <order> 273 <order>
274 <hop> <from>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_personnel</from><to>&#x9519;&#x8bef;&#x8f93;&#x51fa;</to><enabled>Y</enabled> </hop> 274 <hop> <from>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_personnel</from><to>&#x9519;&#x8bef;&#x8f93;&#x51fa;</to><enabled>Y</enabled> </hop>
275 <hop> <from>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</from><to>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</to><enabled>Y</enabled> </hop> 275 <hop> <from>&#x83b7;&#x53d6;&#x53d8;&#x91cf;</from><to>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</to><enabled>Y</enabled> </hop>
276 - <hop> <from>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</from><to>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>  
277 - <hop> <from>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;</from><to>JavaScript&#x4ee3;&#x7801;</to><enabled>Y</enabled> </hop>  
278 - <hop> <from>JavaScript&#x4ee3;&#x7801;</from><to>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_personnel</to><enabled>Y</enabled> </hop> 276 + <hop> <from>&#x6dfb;&#x52a0;&#x67e5;&#x8be2;&#x5e38;&#x91cf;</from><to>&#x516c;&#x53f8;&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>
  277 + <hop> <from>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</from><to>&#x5de5;&#x53f7;&#x4e0d;&#x4e3a;&#x7a7a;</to><enabled>Y</enabled> </hop>
  278 + <hop> <from>&#x5de5;&#x53f7;&#x4e0d;&#x4e3a;&#x7a7a;</from><to>&#x6dfb;&#x52a0;&#x67e5;&#x8be2;&#x5e38;&#x91cf;</to><enabled>Y</enabled> </hop>
  279 + <hop> <from>&#x516c;&#x53f8;&#x67e5;&#x8be2;</from><to>&#x516c;&#x53f8;&#x4ee3;&#x7801;&#x4e0d;&#x4e3a;&#x7a7a;</to><enabled>Y</enabled> </hop>
  280 + <hop> <from>&#x516c;&#x53f8;&#x4ee3;&#x7801;&#x4e0d;&#x4e3a;&#x7a7a;</from><to>&#x5206;&#x516c;&#x53f8;&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>
  281 + <hop> <from>&#x5206;&#x516c;&#x53f8;&#x67e5;&#x8be2;</from><to>&#x5206;&#x516c;&#x53f8;&#x4ee3;&#x7801;&#x4e0d;&#x4e3a;&#x7a7a;</to><enabled>Y</enabled> </hop>
  282 + <hop> <from>&#x5206;&#x516c;&#x53f8;&#x4ee3;&#x7801;&#x4e0d;&#x4e3a;&#x7a7a;</from><to>&#x5904;&#x7406;&#x5de5;&#x53f7;&#x524d;&#x7f00;</to><enabled>Y</enabled> </hop>
  283 + <hop> <from>&#x5904;&#x7406;&#x5de5;&#x53f7;&#x524d;&#x7f00;</from><to>&#x5c97;&#x4f4d;&#x6570;&#x636e;&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>
  284 + <hop> <from>&#x5c97;&#x4f4d;&#x6570;&#x636e;&#x67e5;&#x8be2;</from><to>&#x6027;&#x522b;&#x6570;&#x636e;&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>
  285 + <hop> <from>&#x6027;&#x522b;&#x6570;&#x636e;&#x67e5;&#x8be2;</from><to>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_personnel</to><enabled>Y</enabled> </hop>
279 </order> 286 </order>
280 <step> 287 <step>
281 - <name>JavaScript&#x4ee3;&#x7801;</name>  
282 - <type>ScriptValueMod</type> 288 + <name>&#x516c;&#x53f8;&#x4ee3;&#x7801;&#x4e0d;&#x4e3a;&#x7a7a;</name>
  289 + <type>FilterRows</type>
283 <description/> 290 <description/>
284 <distribute>Y</distribute> 291 <distribute>Y</distribute>
285 <custom_distribution/> 292 <custom_distribution/>
@@ -288,21 +295,155 @@ @@ -288,21 +295,155 @@
288 <method>none</method> 295 <method>none</method>
289 <schema_name/> 296 <schema_name/>
290 </partitioning> 297 </partitioning>
291 - <compatible>N</compatible>  
292 - <optimizationLevel>9</optimizationLevel>  
293 - <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>  
294 - <jsScript_name>Script 1</jsScript_name>  
295 - <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var gh_calcu &#x3d; &#x5de5;&#x53f7;&#x3b;&#xa;&#xa;if &#x28;&#x5de5;&#x53f7;.indexOf&#x28;&#x6240;&#x5c5e;&#x516c;&#x53f8;&#x4ee3;&#x7801; &#x2b; &#x22;-&#x22;&#x29; &#x3c; 0&#x29; &#x7b;&#xa; gh_calcu &#x3d; &#x6240;&#x5c5e;&#x516c;&#x53f8;&#x4ee3;&#x7801; &#x2b; &#x22;-&#x22; &#x2b; &#x5de5;&#x53f7;&#x3b;&#xa;&#x7d; </jsScript_script>  
296 - </jsScript> </jsScripts> <fields> <field> <name>gh_calcu</name>  
297 - <rename>gh_calcu</rename> 298 +<send_true_to/>
  299 +<send_false_to/>
  300 + <compare>
  301 +<condition>
  302 + <negated>N</negated>
  303 + <conditions>
  304 + <condition>
  305 + <negated>N</negated>
  306 + <leftvalue>gs_code</leftvalue>
  307 + <function>IS NOT NULL</function>
  308 + <rightvalue/>
  309 + </condition>
  310 + </conditions>
  311 + </condition>
  312 + </compare>
  313 + <cluster_schema/>
  314 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  315 + <xloc>583</xloc>
  316 + <yloc>175</yloc>
  317 + <draw>Y</draw>
  318 + </GUI>
  319 + </step>
  320 +
  321 + <step>
  322 + <name>&#x516c;&#x53f8;&#x67e5;&#x8be2;</name>
  323 + <type>DBLookup</type>
  324 + <description/>
  325 + <distribute>Y</distribute>
  326 + <custom_distribution/>
  327 + <copies>1</copies>
  328 + <partitioning>
  329 + <method>none</method>
  330 + <schema_name/>
  331 + </partitioning>
  332 + <connection>bus_control_variable</connection>
  333 + <cache>N</cache>
  334 + <cache_load_all>N</cache_load_all>
  335 + <cache_size>0</cache_size>
  336 + <lookup>
  337 + <schema/>
  338 + <table>bsth_c_business</table>
  339 + <orderby/>
  340 + <fail_on_multiple>N</fail_on_multiple>
  341 + <eat_row_on_failure>N</eat_row_on_failure>
  342 + <key>
  343 + <name>up_code</name>
  344 + <field>up_code</field>
  345 + <condition>&#x3d;</condition>
  346 + <name2/>
  347 + </key>
  348 + <key>
  349 + <name>&#x6240;&#x5c5e;&#x516c;&#x53f8;</name>
  350 + <field>business_name</field>
  351 + <condition>&#x3d;</condition>
  352 + <name2/>
  353 + </key>
  354 + <value>
  355 + <name>business_code</name>
  356 + <rename>gs_code</rename>
  357 + <default/>
298 <type>String</type> 358 <type>String</type>
299 - <length>-1</length>  
300 - <precision>-1</precision>  
301 - <replace>N</replace>  
302 - </field> </fields> <cluster_schema/> 359 + </value>
  360 + </lookup>
  361 + <cluster_schema/>
  362 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  363 + <xloc>583</xloc>
  364 + <yloc>83</yloc>
  365 + <draw>Y</draw>
  366 + </GUI>
  367 + </step>
  368 +
  369 + <step>
  370 + <name>&#x5206;&#x516c;&#x53f8;&#x4ee3;&#x7801;&#x4e0d;&#x4e3a;&#x7a7a;</name>
  371 + <type>FilterRows</type>
  372 + <description/>
  373 + <distribute>Y</distribute>
  374 + <custom_distribution/>
  375 + <copies>1</copies>
  376 + <partitioning>
  377 + <method>none</method>
  378 + <schema_name/>
  379 + </partitioning>
  380 +<send_true_to/>
  381 +<send_false_to/>
  382 + <compare>
  383 +<condition>
  384 + <negated>N</negated>
  385 + <conditions>
  386 + <condition>
  387 + <negated>N</negated>
  388 + <leftvalue>fgs_code</leftvalue>
  389 + <function>IS NOT NULL</function>
  390 + <rightvalue/>
  391 + </condition>
  392 + </conditions>
  393 + </condition>
  394 + </compare>
  395 + <cluster_schema/>
303 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI> 396 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
304 - <xloc>362</xloc>  
305 - <yloc>190</yloc> 397 + <xloc>756</xloc>
  398 + <yloc>178</yloc>
  399 + <draw>Y</draw>
  400 + </GUI>
  401 + </step>
  402 +
  403 + <step>
  404 + <name>&#x5206;&#x516c;&#x53f8;&#x67e5;&#x8be2;</name>
  405 + <type>DBLookup</type>
  406 + <description/>
  407 + <distribute>Y</distribute>
  408 + <custom_distribution/>
  409 + <copies>1</copies>
  410 + <partitioning>
  411 + <method>none</method>
  412 + <schema_name/>
  413 + </partitioning>
  414 + <connection>bus_control_variable</connection>
  415 + <cache>N</cache>
  416 + <cache_load_all>N</cache_load_all>
  417 + <cache_size>0</cache_size>
  418 + <lookup>
  419 + <schema/>
  420 + <table>bsth_c_business</table>
  421 + <orderby/>
  422 + <fail_on_multiple>N</fail_on_multiple>
  423 + <eat_row_on_failure>N</eat_row_on_failure>
  424 + <key>
  425 + <name>gs_code</name>
  426 + <field>up_code</field>
  427 + <condition>&#x3d;</condition>
  428 + <name2/>
  429 + </key>
  430 + <key>
  431 + <name>&#x6240;&#x5c5e;&#x5206;&#x516c;&#x53f8;</name>
  432 + <field>business_name</field>
  433 + <condition>&#x3d;</condition>
  434 + <name2/>
  435 + </key>
  436 + <value>
  437 + <name>business_code</name>
  438 + <rename>fgs_code</rename>
  439 + <default/>
  440 + <type>String</type>
  441 + </value>
  442 + </lookup>
  443 + <cluster_schema/>
  444 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  445 + <xloc>756</xloc>
  446 + <yloc>83</yloc>
306 <draw>Y</draw> 447 <draw>Y</draw>
307 </GUI> 448 </GUI>
308 </step> 449 </step>
@@ -366,7 +507,7 @@ @@ -366,7 +507,7 @@
366 <group/> 507 <group/>
367 </field> 508 </field>
368 <field> 509 <field>
369 - <name>&#x6240;&#x5c5e;&#x516c;&#x53f8;</name> 510 + <name>&#x6027;&#x522b;</name>
370 <type>String</type> 511 <type>String</type>
371 <length>-1</length> 512 <length>-1</length>
372 <precision>-1</precision> 513 <precision>-1</precision>
@@ -378,7 +519,7 @@ @@ -378,7 +519,7 @@
378 <group/> 519 <group/>
379 </field> 520 </field>
380 <field> 521 <field>
381 - <name>&#x6240;&#x5c5e;&#x516c;&#x53f8;&#x4ee3;&#x7801;</name> 522 + <name>&#x6240;&#x5c5e;&#x516c;&#x53f8;</name>
382 <type>String</type> 523 <type>String</type>
383 <length>-1</length> 524 <length>-1</length>
384 <precision>-1</precision> 525 <precision>-1</precision>
@@ -402,7 +543,43 @@ @@ -402,7 +543,43 @@
402 <group/> 543 <group/>
403 </field> 544 </field>
404 <field> 545 <field>
405 - <name>&#x6240;&#x5c5e;&#x5206;&#x516c;&#x53f8;&#x4ee3;&#x7801;</name> 546 + <name>&#x4e00;&#x5361;&#x901a;&#x53f7;</name>
  547 + <type>String</type>
  548 + <length>-1</length>
  549 + <precision>-1</precision>
  550 + <trim_type>none</trim_type>
  551 + <repeat>N</repeat>
  552 + <format>&#x23;</format>
  553 + <currency/>
  554 + <decimal/>
  555 + <group/>
  556 + </field>
  557 + <field>
  558 + <name>&#x8fd0;&#x8425;&#x670d;&#x52a1;&#x8bc1;&#x53f7;</name>
  559 + <type>String</type>
  560 + <length>-1</length>
  561 + <precision>-1</precision>
  562 + <trim_type>none</trim_type>
  563 + <repeat>N</repeat>
  564 + <format>&#x23;</format>
  565 + <currency/>
  566 + <decimal/>
  567 + <group/>
  568 + </field>
  569 + <field>
  570 + <name>&#x5c97;&#x4f4d;</name>
  571 + <type>String</type>
  572 + <length>-1</length>
  573 + <precision>-1</precision>
  574 + <trim_type>none</trim_type>
  575 + <repeat>N</repeat>
  576 + <format/>
  577 + <currency/>
  578 + <decimal/>
  579 + <group/>
  580 + </field>
  581 + <field>
  582 + <name>&#x5907;&#x6ce8;</name>
406 <type>String</type> 583 <type>String</type>
407 <length>-1</length> 584 <length>-1</length>
408 <precision>-1</precision> 585 <precision>-1</precision>
@@ -441,8 +618,168 @@ @@ -441,8 +618,168 @@
441 <spreadsheet_type>JXL</spreadsheet_type> 618 <spreadsheet_type>JXL</spreadsheet_type>
442 <cluster_schema/> 619 <cluster_schema/>
443 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI> 620 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
444 - <xloc>158</xloc>  
445 - <yloc>57</yloc> 621 + <xloc>236</xloc>
  622 + <yloc>83</yloc>
  623 + <draw>Y</draw>
  624 + </GUI>
  625 + </step>
  626 +
  627 + <step>
  628 + <name>&#x5904;&#x7406;&#x5de5;&#x53f7;&#x524d;&#x7f00;</name>
  629 + <type>ScriptValueMod</type>
  630 + <description/>
  631 + <distribute>Y</distribute>
  632 + <custom_distribution/>
  633 + <copies>1</copies>
  634 + <partitioning>
  635 + <method>none</method>
  636 + <schema_name/>
  637 + </partitioning>
  638 + <compatible>N</compatible>
  639 + <optimizationLevel>9</optimizationLevel>
  640 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  641 + <jsScript_name>Script 1</jsScript_name>
  642 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var gh_calcu &#x3d; &#x5de5;&#x53f7;&#x3b;&#xa;&#xa;if &#x28;&#x5de5;&#x53f7;.indexOf&#x28;gs_code &#x2b; &#x22;-&#x22;&#x29; &#x3c; 0&#x29; &#x7b;&#xa; gh_calcu &#x3d; gs_code &#x2b; &#x22;-&#x22; &#x2b; &#x5de5;&#x53f7;&#x3b;&#xa;&#x7d; </jsScript_script>
  643 + </jsScript> </jsScripts> <fields> <field> <name>gh_calcu</name>
  644 + <rename>gh_calcu</rename>
  645 + <type>String</type>
  646 + <length>-1</length>
  647 + <precision>-1</precision>
  648 + <replace>N</replace>
  649 + </field> </fields> <cluster_schema/>
  650 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  651 + <xloc>758</xloc>
  652 + <yloc>297</yloc>
  653 + <draw>Y</draw>
  654 + </GUI>
  655 + </step>
  656 +
  657 + <step>
  658 + <name>&#x5c97;&#x4f4d;&#x6570;&#x636e;&#x67e5;&#x8be2;</name>
  659 + <type>DBLookup</type>
  660 + <description/>
  661 + <distribute>Y</distribute>
  662 + <custom_distribution/>
  663 + <copies>1</copies>
  664 + <partitioning>
  665 + <method>none</method>
  666 + <schema_name/>
  667 + </partitioning>
  668 + <connection>bus_control_variable</connection>
  669 + <cache>N</cache>
  670 + <cache_load_all>N</cache_load_all>
  671 + <cache_size>0</cache_size>
  672 + <lookup>
  673 + <schema/>
  674 + <table>bsth_c_sys_dictionary</table>
  675 + <orderby/>
  676 + <fail_on_multiple>N</fail_on_multiple>
  677 + <eat_row_on_failure>N</eat_row_on_failure>
  678 + <key>
  679 + <name>gzType</name>
  680 + <field>d_group</field>
  681 + <condition>&#x3d;</condition>
  682 + <name2/>
  683 + </key>
  684 + <key>
  685 + <name>&#x5c97;&#x4f4d;</name>
  686 + <field>d_name</field>
  687 + <condition>&#x3d;</condition>
  688 + <name2/>
  689 + </key>
  690 + <value>
  691 + <name>d_code</name>
  692 + <rename>posts</rename>
  693 + <default/>
  694 + <type>String</type>
  695 + </value>
  696 + </lookup>
  697 + <cluster_schema/>
  698 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  699 + <xloc>588</xloc>
  700 + <yloc>296</yloc>
  701 + <draw>Y</draw>
  702 + </GUI>
  703 + </step>
  704 +
  705 + <step>
  706 + <name>&#x5de5;&#x53f7;&#x4e0d;&#x4e3a;&#x7a7a;</name>
  707 + <type>FilterRows</type>
  708 + <description/>
  709 + <distribute>Y</distribute>
  710 + <custom_distribution/>
  711 + <copies>1</copies>
  712 + <partitioning>
  713 + <method>none</method>
  714 + <schema_name/>
  715 + </partitioning>
  716 +<send_true_to/>
  717 +<send_false_to/>
  718 + <compare>
  719 +<condition>
  720 + <negated>N</negated>
  721 + <conditions>
  722 + <condition>
  723 + <negated>N</negated>
  724 + <leftvalue>&#x5de5;&#x53f7;</leftvalue>
  725 + <function>IS NOT NULL</function>
  726 + <rightvalue/>
  727 + </condition>
  728 + </conditions>
  729 + </condition>
  730 + </compare>
  731 + <cluster_schema/>
  732 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  733 + <xloc>238</xloc>
  734 + <yloc>178</yloc>
  735 + <draw>Y</draw>
  736 + </GUI>
  737 + </step>
  738 +
  739 + <step>
  740 + <name>&#x6027;&#x522b;&#x6570;&#x636e;&#x67e5;&#x8be2;</name>
  741 + <type>DBLookup</type>
  742 + <description/>
  743 + <distribute>Y</distribute>
  744 + <custom_distribution/>
  745 + <copies>1</copies>
  746 + <partitioning>
  747 + <method>none</method>
  748 + <schema_name/>
  749 + </partitioning>
  750 + <connection>bus_control_variable</connection>
  751 + <cache>N</cache>
  752 + <cache_load_all>N</cache_load_all>
  753 + <cache_size>0</cache_size>
  754 + <lookup>
  755 + <schema/>
  756 + <table>bsth_c_sys_dictionary</table>
  757 + <orderby/>
  758 + <fail_on_multiple>N</fail_on_multiple>
  759 + <eat_row_on_failure>N</eat_row_on_failure>
  760 + <key>
  761 + <name>sexType</name>
  762 + <field>d_group</field>
  763 + <condition>&#x3d;</condition>
  764 + <name2/>
  765 + </key>
  766 + <key>
  767 + <name>&#x6027;&#x522b;</name>
  768 + <field>d_name</field>
  769 + <condition>&#x3d;</condition>
  770 + <name2/>
  771 + </key>
  772 + <value>
  773 + <name>d_code</name>
  774 + <rename>sex</rename>
  775 + <default/>
  776 + <type>String</type>
  777 + </value>
  778 + </lookup>
  779 + <cluster_schema/>
  780 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  781 + <xloc>456</xloc>
  782 + <yloc>299</yloc>
446 <draw>Y</draw> 783 <draw>Y</draw>
447 </GUI> 784 </GUI>
448 </step> 785 </step>
@@ -459,7 +796,7 @@ @@ -459,7 +796,7 @@
459 <schema_name/> 796 <schema_name/>
460 </partitioning> 797 </partitioning>
461 <connection>bus_control_variable</connection> 798 <connection>bus_control_variable</connection>
462 - <commit>5000</commit> 799 + <commit>500</commit>
463 <update_bypassed>N</update_bypassed> 800 <update_bypassed>N</update_bypassed>
464 <lookup> 801 <lookup>
465 <schema/> 802 <schema/>
@@ -471,18 +808,13 @@ @@ -471,18 +808,13 @@
471 <name2/> 808 <name2/>
472 </key> 809 </key>
473 <value> 810 <value>
474 - <name>personnel_name</name>  
475 - <rename>&#x59d3;&#x540d;</rename>  
476 - <update>Y</update>  
477 - </value>  
478 - <value>  
479 <name>company</name> 811 <name>company</name>
480 <rename>&#x6240;&#x5c5e;&#x516c;&#x53f8;</rename> 812 <rename>&#x6240;&#x5c5e;&#x516c;&#x53f8;</rename>
481 <update>Y</update> 813 <update>Y</update>
482 </value> 814 </value>
483 <value> 815 <value>
484 <name>company_code</name> 816 <name>company_code</name>
485 - <rename>&#x6240;&#x5c5e;&#x516c;&#x53f8;&#x4ee3;&#x7801;</rename> 817 + <rename>gs_code</rename>
486 <update>Y</update> 818 <update>Y</update>
487 </value> 819 </value>
488 <value> 820 <value>
@@ -492,7 +824,17 @@ @@ -492,7 +824,17 @@
492 </value> 824 </value>
493 <value> 825 <value>
494 <name>branche_company_code</name> 826 <name>branche_company_code</name>
495 - <rename>&#x6240;&#x5c5e;&#x5206;&#x516c;&#x53f8;&#x4ee3;&#x7801;</rename> 827 + <rename>fgs_code</rename>
  828 + <update>Y</update>
  829 + </value>
  830 + <value>
  831 + <name>ic_card_code</name>
  832 + <rename>&#x4e00;&#x5361;&#x901a;&#x53f7;</rename>
  833 + <update>Y</update>
  834 + </value>
  835 + <value>
  836 + <name>papers_code</name>
  837 + <rename>&#x8fd0;&#x8425;&#x670d;&#x52a1;&#x8bc1;&#x53f7;</rename>
496 <update>Y</update> 838 <update>Y</update>
497 </value> 839 </value>
498 <value> 840 <value>
@@ -500,11 +842,78 @@ @@ -500,11 +842,78 @@
500 <rename>gh_calcu</rename> 842 <rename>gh_calcu</rename>
501 <update>Y</update> 843 <update>Y</update>
502 </value> 844 </value>
  845 + <value>
  846 + <name>job_codeori</name>
  847 + <rename>&#x5de5;&#x53f7;</rename>
  848 + <update>Y</update>
  849 + </value>
  850 + <value>
  851 + <name>personnel_name</name>
  852 + <rename>&#x59d3;&#x540d;</rename>
  853 + <update>Y</update>
  854 + </value>
  855 + <value>
  856 + <name>personnel_type</name>
  857 + <rename>sex</rename>
  858 + <update>Y</update>
  859 + </value>
  860 + <value>
  861 + <name>posts</name>
  862 + <rename>posts</rename>
  863 + <update>Y</update>
  864 + </value>
  865 + <value>
  866 + <name>remark</name>
  867 + <rename>&#x5907;&#x6ce8;</rename>
  868 + <update>Y</update>
  869 + </value>
503 </lookup> 870 </lookup>
504 <cluster_schema/> 871 <cluster_schema/>
505 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI> 872 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
506 - <xloc>576</xloc>  
507 - <yloc>56</yloc> 873 + <xloc>240</xloc>
  874 + <yloc>297</yloc>
  875 + <draw>Y</draw>
  876 + </GUI>
  877 + </step>
  878 +
  879 + <step>
  880 + <name>&#x6dfb;&#x52a0;&#x67e5;&#x8be2;&#x5e38;&#x91cf;</name>
  881 + <type>ScriptValueMod</type>
  882 + <description/>
  883 + <distribute>Y</distribute>
  884 + <custom_distribution/>
  885 + <copies>1</copies>
  886 + <partitioning>
  887 + <method>none</method>
  888 + <schema_name/>
  889 + </partitioning>
  890 + <compatible>N</compatible>
  891 + <optimizationLevel>9</optimizationLevel>
  892 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  893 + <jsScript_name>Script 1</jsScript_name>
  894 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var up_code &#x3d; &#x27;88&#x27;&#x3b;&#xa;var sexType &#x3d; &#x27;sexType&#x27;&#x3b;&#xa;var gzType &#x3d; &#x27;gzType&#x27;&#x3b;</jsScript_script>
  895 + </jsScript> </jsScripts> <fields> <field> <name>up_code</name>
  896 + <rename>up_code</rename>
  897 + <type>String</type>
  898 + <length>-1</length>
  899 + <precision>-1</precision>
  900 + <replace>N</replace>
  901 + </field> <field> <name>sexType</name>
  902 + <rename>sexType</rename>
  903 + <type>String</type>
  904 + <length>-1</length>
  905 + <precision>-1</precision>
  906 + <replace>N</replace>
  907 + </field> <field> <name>gzType</name>
  908 + <rename>gzType</rename>
  909 + <type>String</type>
  910 + <length>-1</length>
  911 + <precision>-1</precision>
  912 + <replace>N</replace>
  913 + </field> </fields> <cluster_schema/>
  914 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  915 + <xloc>414</xloc>
  916 + <yloc>85</yloc>
508 <draw>Y</draw> 917 <draw>Y</draw>
509 </GUI> 918 </GUI>
510 </step> 919 </step>
@@ -548,49 +957,8 @@ @@ -548,49 +957,8 @@
548 </fields> 957 </fields>
549 <cluster_schema/> 958 <cluster_schema/>
550 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI> 959 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
551 - <xloc>90</xloc>  
552 - <yloc>148</yloc>  
553 - <draw>Y</draw>  
554 - </GUI>  
555 - </step>  
556 -  
557 - <step>  
558 - <name>&#x8fc7;&#x6ee4;&#x8bb0;&#x5f55;</name>  
559 - <type>FilterRows</type>  
560 - <description/>  
561 - <distribute>Y</distribute>  
562 - <custom_distribution/>  
563 - <copies>1</copies>  
564 - <partitioning>  
565 - <method>none</method>  
566 - <schema_name/>  
567 - </partitioning>  
568 -<send_true_to/>  
569 -<send_false_to/>  
570 - <compare>  
571 -<condition>  
572 - <negated>N</negated>  
573 - <conditions>  
574 - <condition>  
575 - <negated>N</negated>  
576 - <leftvalue>&#x5de5;&#x53f7;</leftvalue>  
577 - <function>IS NOT NULL</function>  
578 - <rightvalue/>  
579 - </condition>  
580 - <condition>  
581 - <negated>N</negated>  
582 - <operator>AND</operator>  
583 - <leftvalue>&#x6240;&#x5c5e;&#x516c;&#x53f8;&#x4ee3;&#x7801;</leftvalue>  
584 - <function>IS NOT NULL</function>  
585 - <rightvalue/>  
586 - </condition>  
587 - </conditions>  
588 - </condition>  
589 - </compare>  
590 - <cluster_schema/>  
591 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
592 - <xloc>358</xloc>  
593 - <yloc>57</yloc> 960 + <xloc>70</xloc>
  961 + <yloc>85</yloc>
594 <draw>Y</draw> 962 <draw>Y</draw>
595 </GUI> 963 </GUI>
596 </step> 964 </step>
@@ -652,7 +1020,7 @@ @@ -652,7 +1020,7 @@
652 <format/> 1020 <format/>
653 </field> 1021 </field>
654 <field> 1022 <field>
655 - <name>&#x6240;&#x5c5e;&#x516c;&#x53f8;&#x4ee3;&#x7801;</name> 1023 + <name>gs_code</name>
656 <type>String</type> 1024 <type>String</type>
657 <format/> 1025 <format/>
658 </field> 1026 </field>
@@ -662,7 +1030,7 @@ @@ -662,7 +1030,7 @@
662 <format/> 1030 <format/>
663 </field> 1031 </field>
664 <field> 1032 <field>
665 - <name>&#x6240;&#x5c5e;&#x5206;&#x516c;&#x53f8;&#x4ee3;&#x7801;</name> 1033 + <name>fgs_code</name>
666 <type>String</type> 1034 <type>String</type>
667 <format/> 1035 <format/>
668 </field> 1036 </field>
@@ -711,8 +1079,8 @@ @@ -711,8 +1079,8 @@
711 </custom> 1079 </custom>
712 <cluster_schema/> 1080 <cluster_schema/>
713 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI> 1081 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
714 - <xloc>578</xloc>  
715 - <yloc>223</yloc> 1082 + <xloc>240</xloc>
  1083 + <yloc>442</yloc>
716 <draw>Y</draw> 1084 <draw>Y</draw>
717 </GUI> 1085 </GUI>
718 </step> 1086 </step>
src/main/resources/datatools/ktrs/employeesDataOutput.ktr
@@ -10,6 +10,11 @@ @@ -10,6 +10,11 @@
10 <directory>&#x2f;</directory> 10 <directory>&#x2f;</directory>
11 <parameters> 11 <parameters>
12 <parameter> 12 <parameter>
  13 + <name>cgsbm_in</name>
  14 + <default_value/>
  15 + <description>&#x5206;&#x516c;&#x53f8;&#x7f16;&#x7801;</description>
  16 + </parameter>
  17 + <parameter>
13 <name>filepath</name> 18 <name>filepath</name>
14 <default_value/> 19 <default_value/>
15 <description>excel&#x6587;&#x4ef6;&#x8def;&#x5f84;</description> 20 <description>excel&#x6587;&#x4ef6;&#x8def;&#x5f84;</description>
@@ -266,8 +271,14 @@ @@ -266,8 +271,14 @@
266 </attributes> 271 </attributes>
267 </connection> 272 </connection>
268 <order> 273 <order>
  274 + <hop> <from>&#x4eba;&#x5458;&#x4fe1;&#x606f;&#x8868;&#x8f93;&#x5165;</from><to>&#x6dfb;&#x52a0;&#x67e5;&#x8be2;&#x5e38;&#x91cf;</to><enabled>Y</enabled> </hop>
  275 + <hop> <from>&#x5c97;&#x4f4d;&#x6570;&#x636e;&#x67e5;&#x8be2;</from><to>&#x6027;&#x522b;&#x6570;&#x636e;&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>
269 <hop> <from>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</from><to>Excel&#x8f93;&#x51fa;</to><enabled>Y</enabled> </hop> 276 <hop> <from>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</from><to>Excel&#x8f93;&#x51fa;</to><enabled>Y</enabled> </hop>
270 - <hop> <from>&#x8868;&#x8f93;&#x5165;</from><to>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</to><enabled>Y</enabled> </hop> 277 + <hop> <from>&#x6027;&#x522b;&#x6570;&#x636e;&#x67e5;&#x8be2;</from><to>&#x5904;&#x7406;&#x5de5;&#x53f7;</to><enabled>Y</enabled> </hop>
  278 + <hop> <from>&#x5904;&#x7406;&#x5de5;&#x53f7;</from><to>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</to><enabled>Y</enabled> </hop>
  279 + <hop> <from>&#x6dfb;&#x52a0;&#x67e5;&#x8be2;&#x5e38;&#x91cf;</from><to>&#x516c;&#x53f8;&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>
  280 + <hop> <from>&#x516c;&#x53f8;&#x67e5;&#x8be2;</from><to>&#x5206;&#x516c;&#x53f8;&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>
  281 + <hop> <from>&#x5206;&#x516c;&#x53f8;&#x67e5;&#x8be2;</from><to>&#x5c97;&#x4f4d;&#x6570;&#x636e;&#x67e5;&#x8be2;</to><enabled>Y</enabled> </hop>
271 </order> 282 </order>
272 <step> 283 <step>
273 <name>Excel&#x8f93;&#x51fa;</name> 284 <name>Excel&#x8f93;&#x51fa;</name>
@@ -321,12 +332,12 @@ @@ -321,12 +332,12 @@
321 <format/> 332 <format/>
322 </field> 333 </field>
323 <field> 334 <field>
324 - <name>&#x6240;&#x5c5e;&#x516c;&#x53f8;</name> 335 + <name>&#x6027;&#x522b;</name>
325 <type>String</type> 336 <type>String</type>
326 <format/> 337 <format/>
327 </field> 338 </field>
328 <field> 339 <field>
329 - <name>&#x6240;&#x5c5e;&#x516c;&#x53f8;&#x4ee3;&#x7801;</name> 340 + <name>&#x6240;&#x5c5e;&#x516c;&#x53f8;</name>
330 <type>String</type> 341 <type>String</type>
331 <format/> 342 <format/>
332 </field> 343 </field>
@@ -336,7 +347,22 @@ @@ -336,7 +347,22 @@
336 <format/> 347 <format/>
337 </field> 348 </field>
338 <field> 349 <field>
339 - <name>&#x6240;&#x5c5e;&#x5206;&#x516c;&#x53f8;&#x4ee3;&#x7801;</name> 350 + <name>&#x4e00;&#x5361;&#x901a;&#x53f7;</name>
  351 + <type>String</type>
  352 + <format/>
  353 + </field>
  354 + <field>
  355 + <name>&#x8fd0;&#x8425;&#x670d;&#x52a1;&#x8bc1;&#x53f7;</name>
  356 + <type>String</type>
  357 + <format/>
  358 + </field>
  359 + <field>
  360 + <name>&#x5c97;&#x4f4d;</name>
  361 + <type>String</type>
  362 + <format/>
  363 + </field>
  364 + <field>
  365 + <name>&#x5907;&#x6ce8;</name>
340 <type>String</type> 366 <type>String</type>
341 <format/> 367 <format/>
342 </field> 368 </field>
@@ -360,13 +386,177 @@ @@ -360,13 +386,177 @@
360 </custom> 386 </custom>
361 <cluster_schema/> 387 <cluster_schema/>
362 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI> 388 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
363 - <xloc>346</xloc> 389 + <xloc>625</xloc>
  390 + <yloc>443</yloc>
  391 + <draw>Y</draw>
  392 + </GUI>
  393 + </step>
  394 +
  395 + <step>
  396 + <name>&#x4eba;&#x5458;&#x4fe1;&#x606f;&#x8868;&#x8f93;&#x5165;</name>
  397 + <type>TableInput</type>
  398 + <description/>
  399 + <distribute>Y</distribute>
  400 + <custom_distribution/>
  401 + <copies>1</copies>
  402 + <partitioning>
  403 + <method>none</method>
  404 + <schema_name/>
  405 + </partitioning>
  406 + <connection>bus_control_variable</connection>
  407 + <sql>SELECT &#x2a; FROM bsth_c_personnel&#xa;where concat&#x28;company_code, &#x27;_&#x27;, branche_company_code&#x29; in &#x28;&#x24;&#x7b;cgsbm_in&#x7d;&#x29;</sql>
  408 + <limit>0</limit>
  409 + <lookup/>
  410 + <execute_each_row>N</execute_each_row>
  411 + <variables_active>Y</variables_active>
  412 + <lazy_conversion_active>N</lazy_conversion_active>
  413 + <cluster_schema/>
  414 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  415 + <xloc>112</xloc>
364 <yloc>66</yloc> 416 <yloc>66</yloc>
365 <draw>Y</draw> 417 <draw>Y</draw>
366 </GUI> 418 </GUI>
367 </step> 419 </step>
368 420
369 <step> 421 <step>
  422 + <name>&#x6dfb;&#x52a0;&#x67e5;&#x8be2;&#x5e38;&#x91cf;</name>
  423 + <type>ScriptValueMod</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 + <compatible>N</compatible>
  433 + <optimizationLevel>9</optimizationLevel>
  434 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  435 + <jsScript_name>Script 1</jsScript_name>
  436 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var up_code &#x3d; &#x27;88&#x27;&#x3b;&#xa;var sexType &#x3d; &#x27;sexType&#x27;&#x3b;&#xa;var gzType &#x3d; &#x27;gzType&#x27;&#x3b;</jsScript_script>
  437 + </jsScript> </jsScripts> <fields> <field> <name>up_code</name>
  438 + <rename>up_code</rename>
  439 + <type>String</type>
  440 + <length>-1</length>
  441 + <precision>-1</precision>
  442 + <replace>N</replace>
  443 + </field> <field> <name>sexType</name>
  444 + <rename>sexType</rename>
  445 + <type>String</type>
  446 + <length>-1</length>
  447 + <precision>-1</precision>
  448 + <replace>N</replace>
  449 + </field> <field> <name>gzType</name>
  450 + <rename>gzType</rename>
  451 + <type>String</type>
  452 + <length>-1</length>
  453 + <precision>-1</precision>
  454 + <replace>N</replace>
  455 + </field> </fields> <cluster_schema/>
  456 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  457 + <xloc>235</xloc>
  458 + <yloc>65</yloc>
  459 + <draw>Y</draw>
  460 + </GUI>
  461 + </step>
  462 +
  463 + <step>
  464 + <name>&#x5c97;&#x4f4d;&#x6570;&#x636e;&#x67e5;&#x8be2;</name>
  465 + <type>DBLookup</type>
  466 + <description/>
  467 + <distribute>Y</distribute>
  468 + <custom_distribution/>
  469 + <copies>1</copies>
  470 + <partitioning>
  471 + <method>none</method>
  472 + <schema_name/>
  473 + </partitioning>
  474 + <connection>bus_control_variable</connection>
  475 + <cache>N</cache>
  476 + <cache_load_all>N</cache_load_all>
  477 + <cache_size>0</cache_size>
  478 + <lookup>
  479 + <schema/>
  480 + <table>bsth_c_sys_dictionary</table>
  481 + <orderby/>
  482 + <fail_on_multiple>N</fail_on_multiple>
  483 + <eat_row_on_failure>N</eat_row_on_failure>
  484 + <key>
  485 + <name>gzType</name>
  486 + <field>d_group</field>
  487 + <condition>&#x3d;</condition>
  488 + <name2/>
  489 + </key>
  490 + <key>
  491 + <name>posts</name>
  492 + <field>d_code</field>
  493 + <condition>&#x3d;</condition>
  494 + <name2/>
  495 + </key>
  496 + <value>
  497 + <name>d_name</name>
  498 + <rename>gz</rename>
  499 + <default/>
  500 + <type>String</type>
  501 + </value>
  502 + </lookup>
  503 + <cluster_schema/>
  504 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  505 + <xloc>423</xloc>
  506 + <yloc>235</yloc>
  507 + <draw>Y</draw>
  508 + </GUI>
  509 + </step>
  510 +
  511 + <step>
  512 + <name>&#x6027;&#x522b;&#x6570;&#x636e;&#x67e5;&#x8be2;</name>
  513 + <type>DBLookup</type>
  514 + <description/>
  515 + <distribute>Y</distribute>
  516 + <custom_distribution/>
  517 + <copies>1</copies>
  518 + <partitioning>
  519 + <method>none</method>
  520 + <schema_name/>
  521 + </partitioning>
  522 + <connection>bus_control_variable</connection>
  523 + <cache>N</cache>
  524 + <cache_load_all>N</cache_load_all>
  525 + <cache_size>0</cache_size>
  526 + <lookup>
  527 + <schema/>
  528 + <table>bsth_c_sys_dictionary</table>
  529 + <orderby/>
  530 + <fail_on_multiple>N</fail_on_multiple>
  531 + <eat_row_on_failure>N</eat_row_on_failure>
  532 + <key>
  533 + <name>sexType</name>
  534 + <field>d_group</field>
  535 + <condition>&#x3d;</condition>
  536 + <name2/>
  537 + </key>
  538 + <key>
  539 + <name>personnel_type</name>
  540 + <field>d_code</field>
  541 + <condition>&#x3d;</condition>
  542 + <name2/>
  543 + </key>
  544 + <value>
  545 + <name>d_name</name>
  546 + <rename>sex</rename>
  547 + <default/>
  548 + <type>String</type>
  549 + </value>
  550 + </lookup>
  551 + <cluster_schema/>
  552 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  553 + <xloc>423</xloc>
  554 + <yloc>339</yloc>
  555 + <draw>Y</draw>
  556 + </GUI>
  557 + </step>
  558 +
  559 + <step>
370 <name>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</name> 560 <name>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</name>
371 <type>SelectValues</type> 561 <type>SelectValues</type>
372 <description/> 562 <description/>
@@ -381,38 +571,80 @@ @@ -381,38 +571,80 @@
381 <rename>&#x59d3;&#x540d;</rename> 571 <rename>&#x59d3;&#x540d;</rename>
382 <length>-2</length> 572 <length>-2</length>
383 <precision>-2</precision> 573 <precision>-2</precision>
384 - </field> <field> <name>job_code</name> 574 + </field> <field> <name>jc</name>
385 <rename>&#x5de5;&#x53f7;</rename> 575 <rename>&#x5de5;&#x53f7;</rename>
386 <length>-2</length> 576 <length>-2</length>
387 <precision>-2</precision> 577 <precision>-2</precision>
388 - </field> <field> <name>company</name>  
389 - <rename>&#x6240;&#x5c5e;&#x516c;&#x53f8;</rename> 578 + </field> <field> <name>sex</name>
  579 + <rename>&#x6027;&#x522b;</rename>
390 <length>-2</length> 580 <length>-2</length>
391 <precision>-2</precision> 581 <precision>-2</precision>
392 - </field> <field> <name>company_code</name>  
393 - <rename>&#x6240;&#x5c5e;&#x516c;&#x53f8;&#x4ee3;&#x7801;</rename> 582 + </field> <field> <name>gs</name>
  583 + <rename>&#x6240;&#x5c5e;&#x516c;&#x53f8;</rename>
394 <length>-2</length> 584 <length>-2</length>
395 <precision>-2</precision> 585 <precision>-2</precision>
396 - </field> <field> <name>branche_company</name> 586 + </field> <field> <name>fgs</name>
397 <rename>&#x6240;&#x5c5e;&#x5206;&#x516c;&#x53f8;</rename> 587 <rename>&#x6240;&#x5c5e;&#x5206;&#x516c;&#x53f8;</rename>
398 <length>-2</length> 588 <length>-2</length>
399 <precision>-2</precision> 589 <precision>-2</precision>
400 - </field> <field> <name>branche_company_code</name>  
401 - <rename>&#x6240;&#x5c5e;&#x5206;&#x516c;&#x53f8;&#x4ee3;&#x7801;</rename> 590 + </field> <field> <name>ic_card_code</name>
  591 + <rename>&#x4e00;&#x5361;&#x901a;&#x53f7;</rename>
  592 + <length>-2</length>
  593 + <precision>-2</precision>
  594 + </field> <field> <name>papers_code</name>
  595 + <rename>&#x8fd0;&#x8425;&#x670d;&#x52a1;&#x8bc1;&#x53f7;</rename>
  596 + <length>-2</length>
  597 + <precision>-2</precision>
  598 + </field> <field> <name>gz</name>
  599 + <rename>&#x5c97;&#x4f4d;</rename>
  600 + <length>-2</length>
  601 + <precision>-2</precision>
  602 + </field> <field> <name>remark</name>
  603 + <rename>&#x5907;&#x6ce8;</rename>
402 <length>-2</length> 604 <length>-2</length>
403 <precision>-2</precision> 605 <precision>-2</precision>
404 </field> <select_unspecified>N</select_unspecified> 606 </field> <select_unspecified>N</select_unspecified>
405 </fields> <cluster_schema/> 607 </fields> <cluster_schema/>
406 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI> 608 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
407 - <xloc>221</xloc>  
408 - <yloc>66</yloc> 609 + <xloc>623</xloc>
  610 + <yloc>339</yloc>
409 <draw>Y</draw> 611 <draw>Y</draw>
410 </GUI> 612 </GUI>
411 </step> 613 </step>
412 614
413 <step> 615 <step>
414 - <name>&#x8868;&#x8f93;&#x5165;</name>  
415 - <type>TableInput</type> 616 + <name>&#x5904;&#x7406;&#x5de5;&#x53f7;</name>
  617 + <type>ScriptValueMod</type>
  618 + <description/>
  619 + <distribute>Y</distribute>
  620 + <custom_distribution/>
  621 + <copies>1</copies>
  622 + <partitioning>
  623 + <method>none</method>
  624 + <schema_name/>
  625 + </partitioning>
  626 + <compatible>N</compatible>
  627 + <optimizationLevel>9</optimizationLevel>
  628 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  629 + <jsScript_name>Script 1</jsScript_name>
  630 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var jc&#x3b;&#xa;jc &#x3d; job_code.split&#x28;&#x22;-&#x22;&#x29;&#x5b;1&#x5d;&#x3b;</jsScript_script>
  631 + </jsScript> </jsScripts> <fields> <field> <name>jc</name>
  632 + <rename>jc</rename>
  633 + <type>String</type>
  634 + <length>-1</length>
  635 + <precision>-1</precision>
  636 + <replace>N</replace>
  637 + </field> </fields> <cluster_schema/>
  638 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  639 + <xloc>423</xloc>
  640 + <yloc>444</yloc>
  641 + <draw>Y</draw>
  642 + </GUI>
  643 + </step>
  644 +
  645 + <step>
  646 + <name>&#x516c;&#x53f8;&#x67e5;&#x8be2;</name>
  647 + <type>DBLookup</type>
416 <description/> 648 <description/>
417 <distribute>Y</distribute> 649 <distribute>Y</distribute>
418 <custom_distribution/> 650 <custom_distribution/>
@@ -422,16 +654,86 @@ @@ -422,16 +654,86 @@
422 <schema_name/> 654 <schema_name/>
423 </partitioning> 655 </partitioning>
424 <connection>bus_control_variable</connection> 656 <connection>bus_control_variable</connection>
425 - <sql>SELECT &#x2a; FROM bsth_c_personnel&#x3b;</sql>  
426 - <limit>0</limit>  
427 - <lookup/>  
428 - <execute_each_row>N</execute_each_row>  
429 - <variables_active>N</variables_active>  
430 - <lazy_conversion_active>N</lazy_conversion_active> 657 + <cache>N</cache>
  658 + <cache_load_all>N</cache_load_all>
  659 + <cache_size>0</cache_size>
  660 + <lookup>
  661 + <schema/>
  662 + <table>bsth_c_business</table>
  663 + <orderby/>
  664 + <fail_on_multiple>N</fail_on_multiple>
  665 + <eat_row_on_failure>N</eat_row_on_failure>
  666 + <key>
  667 + <name>up_code</name>
  668 + <field>up_code</field>
  669 + <condition>&#x3d;</condition>
  670 + <name2/>
  671 + </key>
  672 + <key>
  673 + <name>company_code</name>
  674 + <field>business_code</field>
  675 + <condition>&#x3d;</condition>
  676 + <name2/>
  677 + </key>
  678 + <value>
  679 + <name>business_name</name>
  680 + <rename>gs</rename>
  681 + <default/>
  682 + <type>String</type>
  683 + </value>
  684 + </lookup>
431 <cluster_schema/> 685 <cluster_schema/>
432 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI> 686 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
433 - <xloc>112</xloc>  
434 - <yloc>66</yloc> 687 + <xloc>361</xloc>
  688 + <yloc>65</yloc>
  689 + <draw>Y</draw>
  690 + </GUI>
  691 + </step>
  692 +
  693 + <step>
  694 + <name>&#x5206;&#x516c;&#x53f8;&#x67e5;&#x8be2;</name>
  695 + <type>DBLookup</type>
  696 + <description/>
  697 + <distribute>Y</distribute>
  698 + <custom_distribution/>
  699 + <copies>1</copies>
  700 + <partitioning>
  701 + <method>none</method>
  702 + <schema_name/>
  703 + </partitioning>
  704 + <connection>bus_control_variable</connection>
  705 + <cache>N</cache>
  706 + <cache_load_all>N</cache_load_all>
  707 + <cache_size>0</cache_size>
  708 + <lookup>
  709 + <schema/>
  710 + <table>bsth_c_business</table>
  711 + <orderby/>
  712 + <fail_on_multiple>N</fail_on_multiple>
  713 + <eat_row_on_failure>N</eat_row_on_failure>
  714 + <key>
  715 + <name>company_code</name>
  716 + <field>up_code</field>
  717 + <condition>&#x3d;</condition>
  718 + <name2/>
  719 + </key>
  720 + <key>
  721 + <name>branche_company_code</name>
  722 + <field>business_code</field>
  723 + <condition>&#x3d;</condition>
  724 + <name2/>
  725 + </key>
  726 + <value>
  727 + <name>business_name</name>
  728 + <rename>fgs</rename>
  729 + <default/>
  730 + <type>String</type>
  731 + </value>
  732 + </lookup>
  733 + <cluster_schema/>
  734 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  735 + <xloc>479</xloc>
  736 + <yloc>67</yloc>
435 <draw>Y</draw> 737 <draw>Y</draw>
436 </GUI> 738 </GUI>
437 </step> 739 </step>
src/main/resources/static/pages/base/line/edit.html
@@ -46,6 +46,10 @@ @@ -46,6 +46,10 @@
46 46
47 <!-- 表单分组组件 form-group START --> 47 <!-- 表单分组组件 form-group START -->
48 <div class="form-group"> 48 <div class="form-group">
  49 + <!-- in_use字段 START -->
  50 + <input type="hidden" name="inUse" id="inUseInput" placeholder="隐藏字段" readonly="readonly">
  51 + <!-- in_use字段 END -->
  52 +
49 <!-- 线路编码 (* 必填项) START --> 53 <!-- 线路编码 (* 必填项) START -->
50 <div class="col-md-6"> 54 <div class="col-md-6">
51 <label class="control-label col-md-5"> 55 <label class="control-label col-md-5">
src/main/resources/static/pages/base/line/js/line-add-form.js
@@ -9,12 +9,12 @@ @@ -9,12 +9,12 @@
9 9
10 $(function(){ 10 $(function(){
11 /** 获取线路编码 @param cb <回调函数> */ 11 /** 获取线路编码 @param cb <回调函数> */
12 - function getLineCode(cb) {  
13 - /** get请求获取线路编码。返回线路编码值 */ 12 + /*function getLineCode(cb) {
  13 + *//** get请求获取线路编码。返回线路编码值 *//*
14 $.get('/line/getLineCode',function(lineCode){ 14 $.get('/line/getLineCode',function(lineCode){
15 return cb && cb(lineCode); 15 return cb && cb(lineCode);
16 }); 16 });
17 - } 17 + }*/
18 /** 填充分公司下拉框选择值 */ 18 /** 填充分公司下拉框选择值 */
19 function setbrancheCompanySelectOptions(){ 19 function setbrancheCompanySelectOptions(){
20 // 获取公司下拉框选择值 20 // 获取公司下拉框选择值
@@ -48,11 +48,11 @@ $(function(){ @@ -48,11 +48,11 @@ $(function(){
48 $('#shortNameInput').val(pinyin.getCamelChars(val)); 48 $('#shortNameInput').val(pinyin.getCamelChars(val));
49 } 49 }
50 50
51 - /** 获取线路编码元素并设值 @param 匿名函数 */ 51 + /** 获取线路编码元素并设值 @param 匿名函数 *//*
52 getLineCode(function(result){ 52 getLineCode(function(result){
53 // 设置线路编码值 53 // 设置线路编码值
54 $('#lineCodeInput').val(result); 54 $('#lineCodeInput').val(result);
55 - }) 55 + })*/
56 /** 输入线路名称,自动生成英文名称和线路简称 */ 56 /** 输入线路名称,自动生成英文名称和线路简称 */
57 $('#nameInput').on('keyup', setPinYin); 57 $('#nameInput').on('keyup', setPinYin);
58 /** 开辟日期 日期控件 <format:日期控件时间格式;locale:语言> */ 58 /** 开辟日期 日期控件 <format:日期控件时间格式;locale:语言> */
@@ -196,7 +196,7 @@ $(function(){ @@ -196,7 +196,7 @@ $(function(){
196 // 如果大于零,则已存在录入的线路编码;否则不存在 196 // 如果大于零,则已存在录入的线路编码;否则不存在
197 if(len > 0) { 197 if(len > 0) {
198 198
199 - // 定义已有的线路编码 199 + /*// 定义已有的线路编码
200 var oldCode = params.lineCode; 200 var oldCode = params.lineCode;
201 201
202 // 自动获取线路编码 202 // 自动获取线路编码
@@ -210,8 +210,11 @@ $(function(){ @@ -210,8 +210,11 @@ $(function(){
210 btn : [ '确认提示并提交', '取消' ] 210 btn : [ '确认提示并提交', '取消' ]
211 }, submit); 211 }, submit);
212 212
213 - });  
214 - 213 + });*/
  214 + layer.open({
  215 + title: '消息提示'
  216 + ,content: '线路编码【'+params.lineCode+'】已存在,请重新输入编码!'
  217 + });
215 } else { 218 } else {
216 219
217 // 提交 220 // 提交
src/main/resources/static/pages/base/line/js/line-edit-form.js
@@ -100,10 +100,13 @@ @@ -100,10 +100,13 @@
100 selectTemp(function(){ 100 selectTemp(function(){
101 /** 根据ID查询详细信息 */ 101 /** 根据ID查询详细信息 */
102 $get('/line/' + lineId ,null, function(result){ 102 $get('/line/' + lineId ,null, function(result){
  103 + debugger;
103 // 如果不为空 104 // 如果不为空
104 if(result) { 105 if(result) {
105 // 定义日期格式 106 // 定义日期格式
106 - var fs = 'YYYY-MM-DD' 107 + var fs = 'YYYY-MM-DD';
  108 + // 设置inUse
  109 + $('#inUseInput').val(result.inUse);
107 // 设置日期 110 // 设置日期
108 result.openDate = moment(result.openDate).format(fs); 111 result.openDate = moment(result.openDate).format(fs);
109 /** 填充修改线路表单元素值 @param:<result:数据结果集;line_edit_form:表单元素> */ 112 /** 填充修改线路表单元素值 @param:<result:数据结果集;line_edit_form:表单元素> */
@@ -242,7 +245,7 @@ @@ -242,7 +245,7 @@
242 // 提交 245 // 提交
243 submit(); 246 submit();
244 } else { 247 } else {
245 - // 定义已有的线路编码 248 + /*// 定义已有的线路编码
246 var oldCode = params.lineCode; 249 var oldCode = params.lineCode;
247 // 重新设置提交参数线路编码值 250 // 重新设置提交参数线路编码值
248 params.lineCode = lineId; 251 params.lineCode = lineId;
@@ -250,7 +253,11 @@ @@ -250,7 +253,11 @@
250 layer.confirm('线路编码【'+oldCode+'】已存在!自动顺延为如下:<br>线路编码:'+lineId, { 253 layer.confirm('线路编码【'+oldCode+'】已存在!自动顺延为如下:<br>线路编码:'+lineId, {
251 btn : [ '确认提示并提交', '取消' ] 254 btn : [ '确认提示并提交', '取消' ]
252 }, submit); 255 }, submit);
253 - 256 + */
  257 + layer.open({
  258 + title: '消息提示'
  259 + ,content: '线路编码【'+params.lineCode+'】已存在,请重新输入编码!'
  260 + });
254 } 261 }
255 } else { 262 } else {
256 // 提交 263 // 提交
src/main/resources/static/pages/base/line/js/line-list-table.js
@@ -336,7 +336,7 @@ @@ -336,7 +336,7 @@
336 var arrChk = $("input[type='checkbox']:checked"); 336 var arrChk = $("input[type='checkbox']:checked");
337 var len = arrChk.length; 337 var len = arrChk.length;
338 // 选中行ID与线路名称 338 // 选中行ID与线路名称
339 - var id = '', lineName = ''; 339 + var id = '';
340 if(len>1) { 340 if(len>1) {
341 // 弹出添加成功提示消息 341 // 弹出添加成功提示消息
342 layer.msg('存在多选,请只选中一行!'); 342 layer.msg('存在多选,请只选中一行!');
@@ -370,4 +370,37 @@ @@ -370,4 +370,37 @@
370 window.location.href = "/pages/base/line/map.html?no="+id; 370 window.location.href = "/pages/base/line/map.html?no="+id;
371 } 371 }
372 }); 372 });
  373 +
  374 + // 导出线路站点
  375 + $('#datatable_ajax_tools #exportStation').on('click', function() {
  376 + // 获取选中行.
  377 + var arrChk = $("input[type='checkbox']:checked");
  378 + var len = arrChk.length;
  379 + // 选中行ID与线路名称
  380 + var id = '';
  381 + if(len>1) {
  382 + // 弹出添加成功提示消息
  383 + layer.msg('存在多选,请只选中一行!');
  384 + return ;
  385 + }else if(len==0) {
  386 + // 弹出添加成功提示消息
  387 + layer.msg('请选中一条线路!');
  388 + return ;
  389 + }else {
  390 + id = arrChk.data('id');
  391 + var param = {};
  392 + param.id = id;
  393 + window.open('/stationroute/export?id='+id);
  394 +
  395 + /*$.get("/stationroute/export",param,function(result) {
  396 + if(result.status == "ERROR") {
  397 + layer.msg("导出文件失败!");
  398 + } else if(result.status == "ERROR") {
  399 + layer.msg("导出文件成功!");
  400 + } else {
  401 + layer.msg("未知异常!");
  402 + }
  403 + });*/
  404 + }
  405 + });
373 })(); 406 })();
374 \ No newline at end of file 407 \ No newline at end of file
src/main/resources/static/pages/base/line/list.html
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 <div class="page-title"> 5 <div class="page-title">
6 <h1>线路信息</h1> 6 <h1>线路信息</h1>
7 </div> 7 </div>
8 -</div> 8 +
9 <!-- 片段标题 END --> 9 <!-- 片段标题 END -->
10 10
11 <!-- 线路信息导航栏组件 START --> 11 <!-- 线路信息导航栏组件 START -->
@@ -40,6 +40,9 @@ @@ -40,6 +40,9 @@
40 <li> 40 <li>
41 <a href="javascript:;" data-action="1" id="editRoute" class="tool-action"> <i class="fa fa-level-up"></i>上传GPS生成路线</a> 41 <a href="javascript:;" data-action="1" id="editRoute" class="tool-action"> <i class="fa fa-level-up"></i>上传GPS生成路线</a>
42 </li> 42 </li>
  43 + <li>
  44 + <a href="javascript:;" data-action="2" id="exportStation" class="tool-action"> <i class="fa fa-level-up"></i>导出线路站点Excel</a>
  45 + </li>
43 <!-- <li><a href="javascript:;" data-action="0" class="tool-action"> <i class="fa fa-print"></i> 打印 46 <!-- <li><a href="javascript:;" data-action="0" class="tool-action"> <i class="fa fa-print"></i> 打印
44 </a></li> 47 </a></li>
45 <li><a href="javascript:;" data-action="1" class="tool-action"> <i class="fa fa-copy"></i> 复制 48 <li><a href="javascript:;" data-action="1" class="tool-action"> <i class="fa fa-copy"></i> 复制
@@ -151,6 +154,7 @@ @@ -151,6 +154,7 @@
151 </div> 154 </div>
152 </div> 155 </div>
153 </div> 156 </div>
  157 +</div>
154 <!-- 158 <!--
155 159
156 <td style="vertical-align: middle;"> 160 <td style="vertical-align: middle;">
src/main/resources/static/pages/base/stationroute/addstationstemplate.html
@@ -212,17 +212,25 @@ $(&#39;#add_station_template_mobal&#39;).on(&#39;AddStationTempMobal.show&#39;, function(e,map,a @@ -212,17 +212,25 @@ $(&#39;#add_station_template_mobal&#39;).on(&#39;AddStationTempMobal.show&#39;, function(e,map,a
212 // 定义路段信息字符串 212 // 定义路段信息字符串
213 var sectionJSON = JSON.stringify(jsonArray); 213 var sectionJSON = JSON.stringify(jsonArray);
214 // 路段信息JSON字符串 214 // 路段信息JSON字符串
215 - params.sectionJSON = sectionJSON;  
216 - addSave(params,addLine.id,directionData); 215 + // if(sectionJSON != null && sectionJSON != "") {
  216 + params.sectionJSON = sectionJSON;
  217 + addSave(params,addLine.id,directionData);
  218 + /* } else {
  219 + layer.msg('百度地图上没有此线路的相应路段,请更换方式规划!!!');
  220 + } */
217 }else { 221 }else {
218 // 根据坐标点获取两点之间的折线路段 222 // 根据坐标点获取两点之间的折线路段
219 map.getSectionListPlonly(stationdataList,function(sectiondata) { 223 map.getSectionListPlonly(stationdataList,function(sectiondata) {
220 // 定义路段信息字符串 224 // 定义路段信息字符串
221 var sectionJSON = JSON.stringify(sectiondata); 225 var sectionJSON = JSON.stringify(sectiondata);
222 // 路段信息JSON字符串 226 // 路段信息JSON字符串
223 - params.sectionJSON = sectionJSON;  
224 - addSave(params,addLine.id,directionData);  
225 - 227 + //if(sectionJSON != null && sectionJSON != "") {
  228 + params.sectionJSON = sectionJSON;
  229 + addSave(params,addLine.id,directionData);
  230 + /* } else {
  231 + layer.msg('无法生成路段,请重试!');
  232 + return;
  233 + } */
226 }); 234 });
227 } 235 }
228 }); 236 });
src/main/resources/static/pages/base/stationroute/deletesection.html
@@ -193,10 +193,24 @@ $(&#39;#delete_section_mobal&#39;).on(&#39;deleteSectionMobal.show&#39;,function(e, ajaxd, line, @@ -193,10 +193,24 @@ $(&#39;#delete_section_mobal&#39;).on(&#39;deleteSectionMobal.show&#39;,function(e, ajaxd, line,
193 page = 0; 193 page = 0;
194 loadTableDate(params, true); 194 loadTableDate(params, true);
195 } 195 }
  196 + function getLineCode(id) {
  197 + var lineCode;
  198 + $.ajax({
  199 + url: "/line/findById", //请求地址
  200 + type: "Get",
  201 + async:false,
  202 + //请求方式
  203 + data: { id : id}, //请求参数
  204 + success: function (result) {
  205 + lineCode = result.lineCode;
  206 + }
  207 + });
  208 + return lineCode;
  209 + }
196 function getParams() { 210 function getParams() {
197 // 搜索参数集合 211 // 搜索参数集合
198 params = {}; 212 params = {};
199 - params.lineCode_eq = line.id; 213 + params.lineCode_eq = getLineCode(line.id);
200 params.directions_eq = delBatch.dir; 214 params.directions_eq = delBatch.dir;
201 params.destroy_eq = "0"; //默认查没有撤销的路段 215 params.destroy_eq = "0"; //默认查没有撤销的路段
202 return params; 216 return params;
src/main/resources/static/pages/base/stationroute/deletestation.html
@@ -194,10 +194,24 @@ $(&#39;#delete_station_mobal&#39;).on(&#39;deleteStationMobal.show&#39;,function(e, ajaxd, line, @@ -194,10 +194,24 @@ $(&#39;#delete_station_mobal&#39;).on(&#39;deleteStationMobal.show&#39;,function(e, ajaxd, line,
194 page = 0; 194 page = 0;
195 loadTableDate(params, true); 195 loadTableDate(params, true);
196 } 196 }
  197 + function getLineCode(id) {
  198 + var lineCode;
  199 + $.ajax({
  200 + url: "/line/findById", //请求地址
  201 + type: "Get",
  202 + async:false,
  203 + //请求方式
  204 + data: { id : id}, //请求参数
  205 + success: function (result) {
  206 + lineCode = result.lineCode;
  207 + }
  208 + });
  209 + return lineCode;
  210 + }
197 function getParams() { 211 function getParams() {
198 // 搜索参数集合 212 // 搜索参数集合
199 params = {}; 213 params = {};
200 - params.lineCode_eq = line.id; 214 + params.lineCode_eq = getLineCode(line.id);
201 params.directions_eq = delBatch.dir; 215 params.directions_eq = delBatch.dir;
202 params.destroy_eq = "0"; //默认查没有撤销的站点 216 params.destroy_eq = "0"; //默认查没有撤销的站点
203 return params; 217 return params;
src/main/resources/static/pages/base/stationroute/js/stationroute-list-reload.js
@@ -58,13 +58,16 @@ $(function(){ @@ -58,13 +58,16 @@ $(function(){
58 /** 初始化下行树 @param:<Line.id:线路Id;1:下行> */ 58 /** 初始化下行树 @param:<Line.id:线路Id;1:下行> */
59 PublicFunctions.TreeUpOrDown(Line.id,'1'); 59 PublicFunctions.TreeUpOrDown(Line.id,'1');
60 60
  61 + var start =new Date();
  62 + console.log(start);
61 /** 查询路段信息 @param:<Line.id:线路Id;dir:方向> @return:data:路段数据 */ 63 /** 查询路段信息 @param:<Line.id:线路Id;dir:方向> @return:data:路段数据 */
62 GetAjaxData.getSectionRouteInfo(Line.id,dir,function(data) { 64 GetAjaxData.getSectionRouteInfo(Line.id,dir,function(data) {
63 /** 在地图上画出线路走向 @param:<Line.id:线路Id;0:上行;data:路段数据> */ 65 /** 在地图上画出线路走向 @param:<Line.id:线路Id;0:上行;data:路段数据> */
64 PublicFunctions.linePanlThree(Line.id,data,dir); 66 PublicFunctions.linePanlThree(Line.id,data,dir);
65 67
66 }); 68 });
67 - 69 + var finish =new Date();
  70 + console.log(finish);
68 },500); 71 },500);
69 72
70 }else { 73 }else {
src/main/resources/static/pages/base/timesmodel/js/add-form-wizard.js
@@ -505,6 +505,14 @@ var SKBFormWizard = function() { @@ -505,6 +505,14 @@ var SKBFormWizard = function() {
505 'bxrc' : {required : true},// 班型人次,必填项 505 'bxrc' : {required : true},// 班型人次,必填项
506 'linePlayType' : {required : true},// 线路规划类型,必填项 506 'linePlayType' : {required : true},// 线路规划类型,必填项
507 'zdzcrl' : {number : true,digits : true}, 507 'zdzcrl' : {number : true,digits : true},
  508 +
  509 +
  510 + 'gfupStopTime' : {required : true,number : true}, // 高峰上行停站时间,必填项、必须为整数.
  511 + 'gfdownStopTime' : {required : true,number : true}, // 高峰下行停站时间,必填项、必须为整数.
  512 + 'dgupStopTime' : {required : true,number : true}, // 低谷上行停站时间,必填项、必须为整数.
  513 + 'dgdownStopTime' : {required : true,number : true}, // 低谷下行停站时间,必填项、必须为整数.
  514 + 'dgmaxfcjx' : {required : true,number : true}, // 低谷最大发车间隙,必填项、必须为整数.
  515 + 'dgmaxtzsj' : {required : true,number : true}, // 低谷最大停站时间,必填项、必须为整数.
508 }, 516 },
509 517
510 /** 518 /**
src/main/resources/static/pages/base/timesmodel/js/base-fun.js
@@ -794,31 +794,36 @@ var BaseFun = function() { @@ -794,31 +794,36 @@ var BaseFun = function() {
794 794
795 // 第一步 根据表单中的参数得到所有路牌下的班次数[从各路牌下的第一个班次发车时间 到 营运结束时间点并且是连续的班次数]. 795 // 第一步 根据表单中的参数得到所有路牌下的班次数[从各路牌下的第一个班次发车时间 到 营运结束时间点并且是连续的班次数].
796 var allLMapBc = baseF.GetByArgusInitAllLpDownedBcCollections(saa , cara , map , seMap , dataMap); 796 var allLMapBc = baseF.GetByArgusInitAllLpDownedBcCollections(saa , cara , map , seMap , dataMap);
797 -  
798 - // 第二步 纵向调整 797 + //return {'json':allLMapBc,'bxrcgs':null};
  798 +
  799 + // 第二步 纵向调整
799 baseF.evenStartDepartSpace(allLMapBc , dataMap); 800 baseF.evenStartDepartSpace(allLMapBc , dataMap);
800 - 801 + //return {'json':allLMapBc,'bxrcgs':null};
  802 +
801 // 第三步 剔除首末班车以外的班次,并确认首末班车. 803 // 第三步 剔除首末班车以外的班次,并确认首末班车.
802 var markArray = baseF.markFirstAndLastBusAlsoDietNotInRangeBc(allLMapBc , dataMap); 804 var markArray = baseF.markFirstAndLastBusAlsoDietNotInRangeBc(allLMapBc , dataMap);
803 - // return {'json':markArray,'bxrcgs':null};  
804 - // 第四步 横向调整 805 + //return {'json':markArray,'bxrcgs':null};
  806 + // 第四步 横向调整
805 baseF.resizeByPitStopTime(cara , markArray , dataMap); 807 baseF.resizeByPitStopTime(cara , markArray , dataMap);
806 - // return {'json':markArray,'bxrcgs':null}; 808 + //return {'json':markArray,'bxrcgs':null};
807 /** 809 /**
808 * 第五步 把班型合理的分配到各个路牌上. 810 * 第五步 把班型合理的分配到各个路牌上.
809 - * 811 + *
810 * 切割班型/人次/配车数 字符串 为 数组对象. 812 * 切割班型/人次/配车数 字符串 为 数组对象.
811 - * 813 + *
812 * 把班型分配到对应的具体路牌上. 814 * 把班型分配到对应的具体路牌上.
813 */ 815 */
814 // 切割班型/人次/配车数 字符串 为 数组对象. 816 // 切割班型/人次/配车数 字符串 为 数组对象.
815 var list = baseF.getBxRcListCollection(map.bxrc); 817 var list = baseF.getBxRcListCollection(map.bxrc);
816 // 把班型分配到对应的具体路牌上. 818 // 把班型分配到对应的具体路牌上.
817 baseF.bxAlloTotLp(list,cara); 819 baseF.bxAlloTotLp(list,cara);
  820 + //return {'json':markArray,'bxrcgs':null};
  821 +
  822 +
818 // 第六步 抽车来满足工时. 823 // 第六步 抽车来满足工时.
819 var tempA = baseF.abstractCar(list , markArray , cara , saa , dataMap , map); 824 var tempA = baseF.abstractCar(list , markArray , cara , saa , dataMap , map);
820 // return {'json':tempA,'bxrcgs':null}; 825 // return {'json':tempA,'bxrcgs':null};
821 - // 第七步 确定吃饭时间. 826 + // 第七步 确定吃饭时间.
822 baseF.markeEatTime(list , tempA , cara , saa , dataMap ,map); 827 baseF.markeEatTime(list , tempA , cara , saa , dataMap ,map);
823 baseF.resizeByPitStopTime(cara , tempA , dataMap); 828 baseF.resizeByPitStopTime(cara , tempA , dataMap);
824 baseF.updfcno01(tempA,0); 829 baseF.updfcno01(tempA,0);
src/main/resources/static/pages/base/timesmodel/tepms/bctype_temp.html
@@ -635,7 +635,9 @@ @@ -635,7 +635,9 @@
635 <!-- 线路规划类型 (* 必填项) END --> 635 <!-- 线路规划类型 (* 必填项) END -->
636 <!-- 起始站首班时间 (* 必填项) START --> 636 <!-- 起始站首班时间 (* 必填项) START -->
637 <div class="col-md-6"> 637 <div class="col-md-6">
638 - <label class="control-label col-md-5"> 起始站首班时间 : </label> 638 + <label class="control-label col-md-5">
  639 + <span class="required"> * </span> 起始站首班时间 :
  640 + </label>
639 <div class="col-md-4"> 641 <div class="col-md-4">
640 <p class="form-control-static" data-display="startStationFirstTime"> </p> 642 <p class="form-control-static" data-display="startStationFirstTime"> </p>
641 </div> 643 </div>
@@ -643,7 +645,9 @@ @@ -643,7 +645,9 @@
643 <!-- 起始站首班时间 (* 必填项) END --> 645 <!-- 起始站首班时间 (* 必填项) END -->
644 <!-- 起始站末班时间 (* 必填项) START --> 646 <!-- 起始站末班时间 (* 必填项) START -->
645 <div class="col-md-6"> 647 <div class="col-md-6">
646 - <label class="control-label col-md-5"> 起始站末班时间 : </label> 648 + <label class="control-label col-md-5">
  649 + <span class="required"> * </span> 起始站末班时间 :
  650 + </label>
647 <div class="col-md-4"> 651 <div class="col-md-4">
648 <p class="form-control-static" data-display="startStationEndTime"> </p> 652 <p class="form-control-static" data-display="startStationEndTime"> </p>
649 </div> 653 </div>
@@ -656,7 +660,9 @@ @@ -656,7 +660,9 @@
656 <div class="form-group"> 660 <div class="form-group">
657 <!-- 终点站首班时间 (* 必填项) START --> 661 <!-- 终点站首班时间 (* 必填项) START -->
658 <div class="col-md-6"> 662 <div class="col-md-6">
659 - <label class="control-label col-md-5"> 终点站首班时间 : </label> 663 + <label class="control-label col-md-5">
  664 + <span class="required"> * </span> 终点站首班时间 :
  665 + </label>
660 <div class="col-md-4"> 666 <div class="col-md-4">
661 <p class="form-control-static" data-display="endStationFirstTime"> </p> 667 <p class="form-control-static" data-display="endStationFirstTime"> </p>
662 </div> 668 </div>
@@ -664,7 +670,9 @@ @@ -664,7 +670,9 @@
664 <!-- 终点站首班时间 (* 必填项) END --> 670 <!-- 终点站首班时间 (* 必填项) END -->
665 <!-- 终点站末班时间 (* 必填项) START --> 671 <!-- 终点站末班时间 (* 必填项) START -->
666 <div class="col-md-6"> 672 <div class="col-md-6">
667 - <label class="control-label col-md-5"> 终点站末班时间 : </label> 673 + <label class="control-label col-md-5">
  674 + <span class="required"> * </span> 终点站末班时间 :
  675 + </label>
668 <div class="col-md-4"> 676 <div class="col-md-4">
669 <p class="form-control-static" data-display="endStationEndTime"> </p> 677 <p class="form-control-static" data-display="endStationEndTime"> </p>
670 </div> 678 </div>
@@ -677,7 +685,9 @@ @@ -677,7 +685,9 @@
677 <div class="form-group"> 685 <div class="form-group">
678 <!-- 早高峰开始时间(* 必填项) START --> 686 <!-- 早高峰开始时间(* 必填项) START -->
679 <div class="col-md-6"> 687 <div class="col-md-6">
680 - <label class="control-label col-md-5"> 早高峰开始时间 : </label> 688 + <label class="control-label col-md-5">
  689 + <span class="required"> * </span> 早高峰开始时间 :
  690 + </label>
681 <div class="col-md-4"> 691 <div class="col-md-4">
682 <p class="form-control-static" data-display="earlyStartTime"> </p> 692 <p class="form-control-static" data-display="earlyStartTime"> </p>
683 </div> 693 </div>
@@ -685,7 +695,9 @@ @@ -685,7 +695,9 @@
685 <!-- 早高峰开始时间 (* 必填项) END --> 695 <!-- 早高峰开始时间 (* 必填项) END -->
686 <!-- 早高峰结束时间 (* 必填项) START --> 696 <!-- 早高峰结束时间 (* 必填项) START -->
687 <div class="col-md-6"> 697 <div class="col-md-6">
688 - <label class="control-label col-md-5"> 早高峰结束时间 : </label> 698 + <label class="control-label col-md-5">
  699 + <span class="required"> * </span> 早高峰结束时间 :
  700 + </label>
689 <div class="col-md-4"> 701 <div class="col-md-4">
690 <p class="form-control-static" data-display="earlyEndTime"> </p> 702 <p class="form-control-static" data-display="earlyEndTime"> </p>
691 </div> 703 </div>
@@ -698,7 +710,9 @@ @@ -698,7 +710,9 @@
698 <div class="form-group"> 710 <div class="form-group">
699 <!-- 晚高峰开始时间(* 必填项) START --> 711 <!-- 晚高峰开始时间(* 必填项) START -->
700 <div class="col-md-6"> 712 <div class="col-md-6">
701 - <label class="control-label col-md-5"> 晚高峰开始时间 : </label> 713 + <label class="control-label col-md-5">
  714 + <span class="required"> * </span> 晚高峰开始时间 :
  715 + </label>
702 <div class="col-md-4"> 716 <div class="col-md-4">
703 <p class="form-control-static" data-display="lateStartTime"> </p> 717 <p class="form-control-static" data-display="lateStartTime"> </p>
704 </div> 718 </div>
@@ -706,7 +720,9 @@ @@ -706,7 +720,9 @@
706 <!-- 晚高峰开始时间(* 必填项) END --> 720 <!-- 晚高峰开始时间(* 必填项) END -->
707 <!-- 晚高峰结束时间(* 必填项) START --> 721 <!-- 晚高峰结束时间(* 必填项) START -->
708 <div class="col-md-6"> 722 <div class="col-md-6">
709 - <label class="control-label col-md-5"> 晚高峰结束时间 : </label> 723 + <label class="control-label col-md-5">
  724 + <span class="required"> * </span> 晚高峰结束时间 :
  725 + </label>
710 <div class="col-md-4"> 726 <div class="col-md-4">
711 <p class="form-control-static" data-display="lateEndTime"> </p> 727 <p class="form-control-static" data-display="lateEndTime"> </p>
712 </div> 728 </div>
@@ -719,7 +735,9 @@ @@ -719,7 +735,9 @@
719 <div class="form-group"> 735 <div class="form-group">
720 <!-- 上行行驶时间(* 必填项) START --> 736 <!-- 上行行驶时间(* 必填项) START -->
721 <div class="col-md-6"> 737 <div class="col-md-6">
722 - <label class="control-label col-md-5"> 上行行驶时间  : </label> 738 + <label class="control-label col-md-5">
  739 + <span class="required"> * </span> 上行行驶时间  :
  740 + </label>
723 <div class="col-md-4"> 741 <div class="col-md-4">
724 <p class="form-control-static" data-display="upTravelTime"> </p> 742 <p class="form-control-static" data-display="upTravelTime"> </p>
725 </div> 743 </div>
@@ -727,7 +745,9 @@ @@ -727,7 +745,9 @@
727 <!-- 上行行驶时间(* 必填项) END --> 745 <!-- 上行行驶时间(* 必填项) END -->
728 <!-- 下行行驶时间(* 必填项) START --> 746 <!-- 下行行驶时间(* 必填项) START -->
729 <div class="col-md-6"> 747 <div class="col-md-6">
730 - <label class="control-label col-md-5"> 下行行驶时间  : </label> 748 + <label class="control-label col-md-5">
  749 + <span class="required"> * </span> 下行行驶时间  :
  750 + </label>
731 <div class="col-md-4"> 751 <div class="col-md-4">
732 <p class="form-control-static" data-display="downTravelTime"> </p> 752 <p class="form-control-static" data-display="downTravelTime"> </p>
733 </div> 753 </div>
@@ -740,7 +760,9 @@ @@ -740,7 +760,9 @@
740 <div class="form-group"> 760 <div class="form-group">
741 <!-- 上行行驶里程(* 必填项) START --> 761 <!-- 上行行驶里程(* 必填项) START -->
742 <div class="col-md-6"> 762 <div class="col-md-6">
743 - <label class="control-label col-md-5"> 上行行驶里程  : </label> 763 + <label class="control-label col-md-5">
  764 + <span class="required"> * </span> 上行行驶里程  :
  765 + </label>
744 <div class="col-md-4"> 766 <div class="col-md-4">
745 <p class="form-control-static" data-display="upMileage"> </p> 767 <p class="form-control-static" data-display="upMileage"> </p>
746 </div> 768 </div>
@@ -748,7 +770,9 @@ @@ -748,7 +770,9 @@
748 <!-- 上行行驶里程(* 必填项) END--> 770 <!-- 上行行驶里程(* 必填项) END-->
749 <!-- 下行行驶里程(* 必填项) START --> 771 <!-- 下行行驶里程(* 必填项) START -->
750 <div class="col-md-6"> 772 <div class="col-md-6">
751 - <label class="control-label col-md-5"> 下行行驶里程  : </label> 773 + <label class="control-label col-md-5">
  774 + <span class="required"> * </span> 下行行驶里程  :
  775 + </label>
752 <div class="col-md-4"> 776 <div class="col-md-4">
753 <p class="form-control-static" data-display="downMileage"> </p> 777 <p class="form-control-static" data-display="downMileage"> </p>
754 </div> 778 </div>
@@ -761,7 +785,9 @@ @@ -761,7 +785,9 @@
761 <div class="form-group"> 785 <div class="form-group">
762 <!-- 高峰上行停站时间(* 必填项) START --> 786 <!-- 高峰上行停站时间(* 必填项) START -->
763 <div class="col-md-6"> 787 <div class="col-md-6">
764 - <label class="control-label col-md-5"> 高峰上行停站时间: </label> 788 + <label class="control-label col-md-5">
  789 + <span class="required"> * </span> 高峰上行停站时间:
  790 + </label>
765 <div class="col-md-4"> 791 <div class="col-md-4">
766 <p class="form-control-static" data-display="gfupStopTime"> </p> 792 <p class="form-control-static" data-display="gfupStopTime"> </p>
767 </div> 793 </div>
@@ -769,7 +795,9 @@ @@ -769,7 +795,9 @@
769 <!-- 高峰上行停站时间(* 必填项) END --> 795 <!-- 高峰上行停站时间(* 必填项) END -->
770 <!-- 高峰下行停站时间(* 必填项) START --> 796 <!-- 高峰下行停站时间(* 必填项) START -->
771 <div class="col-md-6"> 797 <div class="col-md-6">
772 - <label class="control-label col-md-5"> 高峰下行停站时间: </label> 798 + <label class="control-label col-md-5">
  799 + <span class="required"> * </span> 高峰下行停站时间:
  800 + </label>
773 <div class="col-md-4"> 801 <div class="col-md-4">
774 <p class="form-control-static" data-display="gfdownStopTime"> </p> 802 <p class="form-control-static" data-display="gfdownStopTime"> </p>
775 </div> 803 </div>
@@ -782,7 +810,9 @@ @@ -782,7 +810,9 @@
782 <div class="form-group"> 810 <div class="form-group">
783 <!-- 低谷上行停站时间(* 必填项) START --> 811 <!-- 低谷上行停站时间(* 必填项) START -->
784 <div class="col-md-6"> 812 <div class="col-md-6">
785 - <label class="control-label col-md-5"> 低谷上行停站时间: </label> 813 + <label class="control-label col-md-5">
  814 + <span class="required"> * </span> 低谷上行停站时间:
  815 + </label>
786 <div class="col-md-4"> 816 <div class="col-md-4">
787 <p class="form-control-static" data-display="dgupStopTime"> </p> 817 <p class="form-control-static" data-display="dgupStopTime"> </p>
788 </div> 818 </div>
@@ -790,7 +820,9 @@ @@ -790,7 +820,9 @@
790 <!-- 低谷上行停站时间(* 必填项) END --> 820 <!-- 低谷上行停站时间(* 必填项) END -->
791 <!-- 低谷下行停站时间(* 必填项) START --> 821 <!-- 低谷下行停站时间(* 必填项) START -->
792 <div class="col-md-6"> 822 <div class="col-md-6">
793 - <label class="control-label col-md-5"> 低谷下行停站时间: </label> 823 + <label class="control-label col-md-5">
  824 + <span class="required"> * </span> 低谷下行停站时间:
  825 + </label>
794 <div class="col-md-4"> 826 <div class="col-md-4">
795 <p class="form-control-static" data-display="dgdownStopTime"> </p> 827 <p class="form-control-static" data-display="dgdownStopTime"> </p>
796 </div> 828 </div>
@@ -803,7 +835,9 @@ @@ -803,7 +835,9 @@
803 <div class="form-group"> 835 <div class="form-group">
804 <!-- 低谷最大发车间隙(* 必填项) START --> 836 <!-- 低谷最大发车间隙(* 必填项) START -->
805 <div class="col-md-6"> 837 <div class="col-md-6">
806 - <label class="control-label col-md-5"> 低谷最大发车间隙: </label> 838 + <label class="control-label col-md-5">
  839 + <span class="required"> * </span> 低谷最大发车间隙:
  840 + </label>
807 <div class="col-md-4"> 841 <div class="col-md-4">
808 <p class="form-control-static" data-display="dgmaxfcjx"> </p> 842 <p class="form-control-static" data-display="dgmaxfcjx"> </p>
809 </div> 843 </div>
@@ -812,7 +846,9 @@ @@ -812,7 +846,9 @@
812 846
813 <!-- 低谷最大停站时间(* 必填项) START --> 847 <!-- 低谷最大停站时间(* 必填项) START -->
814 <div class="col-md-6"> 848 <div class="col-md-6">
815 - <label class="control-label col-md-5"> 低谷最大停站时间: </label> 849 + <label class="control-label col-md-5">
  850 + <span class="required"> * </span> 低谷最大停站时间:
  851 + </label>
816 <div class="col-md-4"> 852 <div class="col-md-4">
817 <p class="form-control-static" data-display="dgmaxtzsj"> </p> 853 <p class="form-control-static" data-display="dgmaxtzsj"> </p>
818 </div> 854 </div>
@@ -825,7 +861,9 @@ @@ -825,7 +861,9 @@
825 <div class="form-group"> 861 <div class="form-group">
826 <!-- 线路规划类型 (* 必填项) START --> 862 <!-- 线路规划类型 (* 必填项) START -->
827 <div class="col-md-6"> 863 <div class="col-md-6">
828 - <label class="control-label col-md-5"> 线路规划类型  : </label> 864 + <label class="control-label col-md-5">
  865 + <span class="required"> * </span> 线路规划类型  :
  866 + </label>
829 <div class="col-md-4"> 867 <div class="col-md-4">
830 <p class="form-control-static" data-display="linePlayType"> </p> 868 <p class="form-control-static" data-display="linePlayType"> </p>
831 </div> 869 </div>
@@ -1076,7 +1114,9 @@ @@ -1076,7 +1114,9 @@
1076 <div class="form-group"> 1114 <div class="form-group">
1077 <!-- 班型与人次 START --> 1115 <!-- 班型与人次 START -->
1078 <div class="col-md-6"> 1116 <div class="col-md-6">
1079 - <label class="control-label col-md-5">班型/人次/车辆 :</label> 1117 + <label class="control-label col-md-5">
  1118 + <span class="required"> * </span> 班型/人次/车辆 :
  1119 + </label>
1080 <div class="col-md-4"> 1120 <div class="col-md-4">
1081 <p class="form-control-static" data-display="bxrc"> </p> 1121 <p class="form-control-static" data-display="bxrc"> </p>
1082 </div> 1122 </div>
@@ -1084,7 +1124,9 @@ @@ -1084,7 +1124,9 @@
1084 <!-- 班型与人次 END --> 1124 <!-- 班型与人次 END -->
1085 <!-- 车辆总数 START --> 1125 <!-- 车辆总数 START -->
1086 <div class="col-md-6"> 1126 <div class="col-md-6">
1087 - <label class="control-label col-md-5"> 车辆总数    :</label> 1127 + <label class="control-label col-md-5">
  1128 + <span class="required"> * </span> 车辆总数    :
  1129 + </label>
1088 <div class="col-md-4"> 1130 <div class="col-md-4">
1089 <p class="form-control-static" data-display="clzs"> </p> 1131 <p class="form-control-static" data-display="clzs"> </p>
1090 </div> 1132 </div>
src/main/resources/static/pages/excep/mhspeedingList.html
@@ -263,7 +263,7 @@ $(function(){ @@ -263,7 +263,7 @@ $(function(){
263 return; 263 return;
264 } 264 }
265 var result = listResult[index]; 265 var result = listResult[index];
266 - new BMap.Geocoder().getLocation(new BMap.Point(result.lon,result.lat), function(rs){ 266 + new BMap.Geocoder().getLocation(new BMap.Point(result.lon,result.lat), function(rs){ //根据坐标点查询文字位置。
267 var addComp = rs.addressComponents; 267 var addComp = rs.addressComponents;
268 result.address = addComp.district+addComp.street+addComp.streetNumber; 268 result.address = addComp.district+addComp.street+addComp.streetNumber;
269 f(); 269 f();
src/main/resources/static/pages/excep/speedingCount.html
@@ -142,8 +142,6 @@ @@ -142,8 +142,6 @@
142 {{/if}} 142 {{/if}}
143 </script> 143 </script>
144 144
145 -<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=IGGrr4UjwIYzatoCRFKEL8sT"></script>  
146 -  
147 <script> 145 <script>
148 $(function(){ 146 $(function(){
149 var page = 0, initPagination; 147 var page = 0, initPagination;
src/main/resources/static/pages/excep/speedingList.html
@@ -142,8 +142,6 @@ @@ -142,8 +142,6 @@
142 {{/if}} 142 {{/if}}
143 </script> 143 </script>
144 144
145 -<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=IGGrr4UjwIYzatoCRFKEL8sT"></script>  
146 -  
147 <script> 145 <script>
148 $(function(){ 146 $(function(){
149 var page = 0, initPagination; 147 var page = 0, initPagination;
src/main/resources/static/pages/excep/speedingMap.html
@@ -26,15 +26,15 @@ @@ -26,15 +26,15 @@
26 $(function(){ 26 $(function(){
27 var dataArr = window.localStorage.zbhAndDate.split(",");//获取页面传递过来的车辆自编号以及超速起始时间和超速结束时间 27 var dataArr = window.localStorage.zbhAndDate.split(",");//获取页面传递过来的车辆自编号以及超速起始时间和超速结束时间
28 localStorage.clear();//清楚前端缓存 28 localStorage.clear();//清楚前端缓存
29 - var vehicle = dataArr[0];  
30 - var startdate = dataArr[1];  
31 - var enddate = dataArr[2]; 29 + var vehicle = dataArr[0];//内部编码
  30 + var startdate = dataArr[1];//开始时间
  31 + var enddate = dataArr[2];//结束时间
32 var lon = dataArr[3];//起点经度 32 var lon = dataArr[3];//起点经度
33 var lat = dataArr[4];//起点纬度 33 var lat = dataArr[4];//起点纬度
34 var endLon = dataArr[5];//终点经度 34 var endLon = dataArr[5];//终点经度
35 var endLat = dataArr[6];//终点纬度 35 var endLat = dataArr[6];//终点纬度
36 - var lineid = dataArr[7];  
37 - var directionData = dataArr[8]; 36 + var lineid = dataArr[7];//线路ID
  37 + var directionData = dataArr[8];//线路方向
38 var pointObj;//坐标和速度组成的对象 38 var pointObj;//坐标和速度组成的对象
39 var Points = [];//坐标和速度对象的集合 39 var Points = [];//坐标和速度对象的集合
40 var coordinateArr = [];//坐标点数组 40 var coordinateArr = [];//坐标点数组
@@ -57,7 +57,6 @@ $(function(){ @@ -57,7 +57,6 @@ $(function(){
57 }); 57 });
58 setTimeout(function(){ 58 setTimeout(function(){
59 var map = BasicMap.init();//创建地图 59 var map = BasicMap.init();//创建地图
60 - debugger;  
61 $get('/sectionroute/findSection',{'line.id_eq' : lineid , 'directions_eq' :directionData},function(data) { 60 $get('/sectionroute/findSection',{'line.id_eq' : lineid , 'directions_eq' :directionData},function(data) {
62 // 在地图上画出线路走向 61 // 在地图上画出线路走向
63 PublicFunctions.linePanlThree(lineid,data,directionData); 62 PublicFunctions.linePanlThree(lineid,data,directionData);
src/main/resources/static/pages/permission/authorize_all/user_auth.html
@@ -136,13 +136,13 @@ @@ -136,13 +136,13 @@
136 <script> 136 <script>
137 (function () { 137 (function () {
138 var wrap = '#user_authorize_wrap', user, xd_auth, all_lines,companyData; 138 var wrap = '#user_authorize_wrap', user, xd_auth, all_lines,companyData;
139 - //分公司名称映射(只用于分组展示,就写死浦东的,其他区域不用分公司 139 + //分公司名称映射(只用于分组展示,就写死
140 var fgs_name_mapp={ 140 var fgs_name_mapp={
141 '55_3': '上南公司(六分公司)', '55_1': '上南公司(二分公司)', '55_2': '上南公司(三分公司)', '55_4': '上南公司(一分公司)', '55_5': '上南公司(培训部)', 141 '55_3': '上南公司(六分公司)', '55_1': '上南公司(二分公司)', '55_2': '上南公司(三分公司)', '55_4': '上南公司(一分公司)', '55_5': '上南公司(培训部)',
142 '22_2': '金高公司(二分公司)', '22_1': '金高公司(四分公司)', '22_3': '金高公司(三分公司)', '22_5': '金高公司(一分公司)', 142 '22_2': '金高公司(二分公司)', '22_1': '金高公司(四分公司)', '22_3': '金高公司(三分公司)', '22_5': '金高公司(一分公司)',
143 '26_3': '南汇公司(三分公司)', '26_2': '南汇公司(南汇二分)', '26_1': '南汇公司(南汇一分)', '26_4': '南汇公司(南汇维修公司)', '26_6': '南汇公司(航头枢纽站)', 143 '26_3': '南汇公司(三分公司)', '26_2': '南汇公司(南汇二分)', '26_1': '南汇公司(南汇一分)', '26_4': '南汇公司(南汇维修公司)', '26_6': '南汇公司(航头枢纽站)',
144 '05_5': '杨高公司(杨高分公司)', '05_6': '杨高公司(周浦分公司)', '05_3': '杨高公司(芦潮港分公司)', '05_1': '杨高公司(川沙分公司)', '05_2': '杨高公司(金桥分公司)', 144 '05_5': '杨高公司(杨高分公司)', '05_6': '杨高公司(周浦分公司)', '05_3': '杨高公司(芦潮港分公司)', '05_1': '杨高公司(川沙分公司)', '05_2': '杨高公司(金桥分公司)',
145 - '77_78': '闵行公司', '99_100': '青浦公交' 145 + '77_78': '闵行公司', '99_100': '青浦公交','24_1': '一车队', '24_2': '二车队', '24_3': '三车队'
146 }; 146 };
147 147
148 var defauleConfig; 148 var defauleConfig;
src/main/resources/static/pages/scheduleApp/module/basicInfo/busInfoManage/edit.html
@@ -68,15 +68,16 @@ @@ -68,15 +68,16 @@
68 <div class="col-md-3"> 68 <div class="col-md-3">
69 <sa-Select5 name="gs" 69 <sa-Select5 name="gs"
70 model="ctrl.busInfoForSave" 70 model="ctrl.busInfoForSave"
71 - cmaps="{'businessCode': 'code', 'company': 'name'}" 71 + cmaps="{'businessCode': 'businessCode', 'company': 'businessName'}"
72 dcname="businessCode" 72 dcname="businessCode"
73 - icname="code"  
74 - dsparams="{{ {type: 'dic', param: 'gsType' } | json }}" 73 + icname="businessCode"
  74 + dsparams="{{ {type: 'ajax', param:{'upCode_eq': '88' }, atype:'gs' } | json }}"
75 iterobjname="item" 75 iterobjname="item"
76 - iterobjexp="item.name"  
77 - searchph="请选择所属公司..."  
78 - searchexp="this.name"  
79 - required > 76 + iterobjexp="item.businessName"
  77 + searchph="请选择所属分公司..."
  78 + searchexp="this.businessName"
  79 + required
  80 + >
80 </sa-Select5> 81 </sa-Select5>
81 82
82 </div> 83 </div>
@@ -86,8 +87,8 @@ @@ -86,8 +87,8 @@
86 </div> 87 </div>
87 </div> 88 </div>
88 89
89 - <div class="form-group">  
90 - <label class="col-md-2 control-label">分公司:</label> 90 + <div class="form-group has-success has-feedback">
  91 + <label class="col-md-2 control-label">分公司*:</label>
91 <div class="col-md-3"> 92 <div class="col-md-3">
92 <sa-Select5 name="fgs" 93 <sa-Select5 name="fgs"
93 model="ctrl.busInfoForSave" 94 model="ctrl.busInfoForSave"
@@ -99,9 +100,14 @@ @@ -99,9 +100,14 @@
99 iterobjexp="item.businessName" 100 iterobjexp="item.businessName"
100 searchph="请选择所属分公司..." 101 searchph="请选择所属分公司..."
101 searchexp="this.businessName" 102 searchexp="this.businessName"
  103 + required
102 > 104 >
103 </sa-Select5> 105 </sa-Select5>
104 </div> 106 </div>
  107 + <!-- 隐藏块,显示验证信息 -->
  108 + <div class="alert alert-danger well-sm" ng-show="myForm.fgs.$error.required">
  109 + 分公司也必须选择
  110 + </div>
105 </div> 111 </div>
106 112
107 <div class="form-group has-success has-feedback"> 113 <div class="form-group has-success has-feedback">
src/main/resources/static/pages/scheduleApp/module/basicInfo/busInfoManage/form.html
@@ -68,15 +68,16 @@ @@ -68,15 +68,16 @@
68 <div class="col-md-3"> 68 <div class="col-md-3">
69 <sa-Select5 name="gs" 69 <sa-Select5 name="gs"
70 model="ctrl.busInfoForSave" 70 model="ctrl.busInfoForSave"
71 - cmaps="{'businessCode': 'code', 'company': 'name'}" 71 + cmaps="{'businessCode': 'businessCode', 'company': 'businessName'}"
72 dcname="businessCode" 72 dcname="businessCode"
73 - icname="code"  
74 - dsparams="{{ {type: 'dic', param: 'gsType' } | json }}" 73 + icname="businessCode"
  74 + dsparams="{{ {type: 'ajax', param:{'upCode_eq': '88' }, atype:'gs' } | json }}"
75 iterobjname="item" 75 iterobjname="item"
76 - iterobjexp="item.name"  
77 - searchph="请选择所属公司..."  
78 - searchexp="this.name"  
79 - required > 76 + iterobjexp="item.businessName"
  77 + searchph="请选择所属分公司..."
  78 + searchexp="this.businessName"
  79 + required
  80 + >
80 </sa-Select5> 81 </sa-Select5>
81 82
82 </div> 83 </div>
@@ -86,8 +87,8 @@ @@ -86,8 +87,8 @@
86 </div> 87 </div>
87 </div> 88 </div>
88 89
89 - <div class="form-group">  
90 - <label class="col-md-2 control-label">分公司:</label> 90 + <div class="form-group has-success has-feedback">
  91 + <label class="col-md-2 control-label">分公司*:</label>
91 <div class="col-md-3"> 92 <div class="col-md-3">
92 <sa-Select5 name="fgs" 93 <sa-Select5 name="fgs"
93 model="ctrl.busInfoForSave" 94 model="ctrl.busInfoForSave"
@@ -99,10 +100,15 @@ @@ -99,10 +100,15 @@
99 iterobjexp="item.businessName" 100 iterobjexp="item.businessName"
100 searchph="请选择所属分公司..." 101 searchph="请选择所属分公司..."
101 searchexp="this.businessName" 102 searchexp="this.businessName"
  103 + required
102 > 104 >
103 </sa-Select5> 105 </sa-Select5>
104 106
105 </div> 107 </div>
  108 + <!-- 隐藏块,显示验证信息 -->
  109 + <div class="alert alert-danger well-sm" ng-show="myForm.fgs.$error.required">
  110 + 分公司也必须选择
  111 + </div>
106 </div> 112 </div>
107 113
108 <div class="form-group has-success has-feedback"> 114 <div class="form-group has-success has-feedback">
src/main/resources/static/pages/scheduleApp/module/basicInfo/busInfoManage/list.html
1 <!-- ui-route busInfoManage.list --> 1 <!-- ui-route busInfoManage.list -->
2 <div ng-controller="BusInfoManageListCtrl as ctrl"> 2 <div ng-controller="BusInfoManageListCtrl as ctrl">
3 <div class="fixDiv"> 3 <div class="fixDiv">
4 - <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column"> 4 + <table class="table fixTable table-striped table-bordered table-hover table-checkable order-column">
5 <thead> 5 <thead>
6 <tr role="row" class="heading"> 6 <tr role="row" class="heading">
7 - <th style="width: 50px;">序号</th>  
8 - <th style="width: 130px;">车辆编号</th>  
9 - <th style="width: 130px;">内部编号</th>  
10 - <th style="width: 130px;">设备编号</th>  
11 - <th style="width: 130px;">车牌号</th> 7 + <th style="width:70px;">序号</th>
  8 + <th style="width: 120px;">车辆编号</th>
  9 + <th style="width: 120px;">内部编号</th>
  10 + <th style="width: 120px;">设备编号</th>
  11 + <th style="width: 120px;">车牌号</th>
12 <th style="width: 150px;">所在公司</th> 12 <th style="width: 150px;">所在公司</th>
13 - <th style="width: 100px;">所在分公司</th>  
14 - <th style="width: 80px">是否电车</th> 13 + <th style="width: 160px;">所在分公司</th>
  14 + <th style="width: 60px">电车</th>
15 <th style="width: 100%">操作</th> 15 <th style="width: 100%">操作</th>
16 </tr> 16 </tr>
17 <tr role="row" class="filter"> 17 <tr role="row" class="filter">
@@ -29,23 +29,34 @@ @@ -29,23 +29,34 @@
29 <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition().carPlate_like" placeholder="输入车牌号..."/> 29 <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition().carPlate_like" placeholder="输入车牌号..."/>
30 </td> 30 </td>
31 <td> 31 <td>
32 - <div>  
33 - <sa-Select5 name="gs"  
34 - model="ctrl.searchCondition()"  
35 - cmaps="{'businessCode_eq': 'code'}"  
36 - dcname="businessCode_eq"  
37 - icname="code"  
38 - dsparams="{{ {type: 'dic', param: 'gsType' } | json }}"  
39 - iterobjname="item"  
40 - iterobjexp="item.name"  
41 - searchph="选择公司..."  
42 - searchexp="this.name"  
43 - >  
44 - </sa-Select5>  
45 - </div>  
46 - </td>  
47 - <td>  
48 - 32 + <sa-Select5 name="gs"
  33 + model="ctrl.searchCondition()"
  34 + cmaps="{'businessCode_eq': 'businessCode'}"
  35 + dcname="businessCode_eq"
  36 + icname="businessCode"
  37 + dsparams="{{ {type: 'ajax', param:{'upCode_eq': '88' }, atype:'gs' } | json }}"
  38 + iterobjname="item"
  39 + iterobjexp="item.businessName"
  40 + searchph="请输拼音..."
  41 + searchexp="this.businessName"
  42 + required
  43 + >
  44 + </sa-Select5>
  45 + </td>
  46 + <td>
  47 + <sa-Select5 name="fgs"
  48 + model="ctrl.searchCondition()"
  49 + cmaps="{'brancheCompanyCode_eq': 'businessCode'}"
  50 + dcname="brancheCompanyCode_eq"
  51 + icname="businessCode"
  52 + dsparams="{{ {type: 'ajax', param:{'upCode_eq': ctrl.searchCondition().businessCode_eq }, atype:'gs' } | json }}"
  53 + iterobjname="item"
  54 + iterobjexp="item.businessName"
  55 + searchph="请输拼音..."
  56 + searchexp="this.businessName"
  57 + required
  58 + >
  59 + </sa-Select5>
49 </td> 60 </td>
50 <td> 61 <td>
51 62
@@ -65,7 +76,17 @@ @@ -65,7 +76,17 @@
65 <tbody> 76 <tbody>
66 <tr ng-repeat="info in ctrl.page()['content']" class="odd gradeX"> 77 <tr ng-repeat="info in ctrl.page()['content']" class="odd gradeX">
67 <td> 78 <td>
68 - <span ng-bind="$index + 1"></span> 79 + <div>
  80 + <a href="#"
  81 + tooltip-animation="false"
  82 + tooltip-placement="top"
  83 + uib-tooltip="{{'公司/编号:' + info.company + '/' + info.insideCode}}"
  84 + tooltip-class="headClass">
  85 +
  86 + <i class="fa fa-list-ol" aria-hidden="true"></i>
  87 + {{$index + ctrl.page().number * 10 + 1}}
  88 + </a>
  89 + </div>
69 </td> 90 </td>
70 <td> 91 <td>
71 <span ng-bind="info.carCode"></span> 92 <span ng-bind="info.carCode"></span>
@@ -93,24 +114,34 @@ @@ -93,24 +114,34 @@
93 <!--<a href="edit.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 修改 </a>--> 114 <!--<a href="edit.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 修改 </a>-->
94 <a ui-sref="busInfoManage_detail({id: info.id})" class="btn btn-info btn-sm"> 详细 </a> 115 <a ui-sref="busInfoManage_detail({id: info.id})" class="btn btn-info btn-sm"> 详细 </a>
95 <a ui-sref="busInfoManage_edit({id: info.id})" class="btn btn-info btn-sm"> 修改 </a> 116 <a ui-sref="busInfoManage_edit({id: info.id})" class="btn btn-info btn-sm"> 修改 </a>
  117 + <a sweetalert
  118 + sweet-options="{title: '是否删除车辆信息?',text: '内部编码:' + info.insideCode + '</br>如果有车辆配置信息关联,会报错,建议不要随便删除!', html: true,type: 'warning',showCancelButton: true,confirmButtonColor: '#DD6B55',confirmButtonText: '是',cancelButtonText: '取消'}"
  119 + sweet-on-confirm="ctrl.deleteCar(info.id)"
  120 + class="btn btn-danger btn-sm">删除</a>
96 </td> 121 </td>
97 </tr> 122 </tr>
98 </tbody> 123 </tbody>
99 -  
100 </table> 124 </table>
101 </div> 125 </div>
102 126
103 - <div style="text-align: right;">  
104 - <uib-pagination total-items="ctrl.page()['totalElements']"  
105 - ng-model="ctrl.page()['uiNumber']"  
106 - ng-change="ctrl.doPage()"  
107 - rotate="false"  
108 - max-size="10"  
109 - boundary-links="true"  
110 - first-text="首页"  
111 - previous-text="上一页"  
112 - next-text="下一页"  
113 - last-text="尾页">  
114 - </uib-pagination> 127 + <div class="pageBar">
  128 + <div class="pageBarLeft">
  129 + {{'显示从' + ctrl.page()['uiFromRecord'] + '到' + ctrl.page()['uiToRecord'] + ' 共' + ctrl.page()['totalElements'] + '条' + ' 每页显示10条'}}
  130 + </div>
  131 +
  132 + <div class="pageBarRight">
  133 + <uib-pagination total-items="ctrl.page()['totalElements']"
  134 + ng-model="ctrl.page()['uiNumber']"
  135 + ng-change="ctrl.doPage()"
  136 + rotate="false"
  137 + max-size="10"
  138 + boundary-links="true"
  139 + first-text="首页"
  140 + previous-text="上一页"
  141 + next-text="下一页"
  142 + last-text="尾页">
  143 + </uib-pagination>
  144 + </div>
115 </div> 145 </div>
  146 +
116 </div> 147 </div>
src/main/resources/static/pages/scheduleApp/module/basicInfo/busInfoManage/module.js
@@ -21,7 +21,9 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -21,7 +21,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
21 number: 0, // 后台返回的页码,spring返回从0开始 21 number: 0, // 后台返回的页码,spring返回从0开始
22 content: [], 22 content: [],
23 23
24 - uiNumber: 1 // 页面绑定的页码 24 + uiNumber: 1, // 页面绑定的页码
  25 + uiFromRecord: 0, // 页面绑定,当前页第几条记录
  26 + uiToRecord: 0 // 页面绑定,当前页到第几条记录
25 }; 27 };
26 28
27 // 查询对象 29 // 查询对象
@@ -54,6 +56,12 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -54,6 +56,12 @@ angular.module(&#39;ScheduleApp&#39;).factory(
54 currentPage.totalElements = page.totalElements; 56 currentPage.totalElements = page.totalElements;
55 currentPage.number = page.number; 57 currentPage.number = page.number;
56 currentPage.content = page.content; 58 currentPage.content = page.content;
  59 +
  60 + // 计算当前页开始记录,结束记录
  61 + if (page.numberOfElements && page.numberOfElements > 0) {
  62 + currentPage.uiFromRecord = page.number * 10 + 1;
  63 + currentPage.uiToRecord = page.number * 10 + page.numberOfElements;
  64 + }
57 } 65 }
58 return currentPage; 66 return currentPage;
59 }, 67 },
@@ -63,7 +71,9 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -63,7 +71,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
63 totalElements: 0, 71 totalElements: 0,
64 number: 0, 72 number: 0,
65 content: [], 73 content: [],
66 - uiNumber: 1 74 + uiNumber: 1,
  75 + uiFromRecord: 0,
  76 + uiToRecord: 0
67 }; 77 };
68 }, 78 },
69 79
@@ -72,7 +82,13 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -72,7 +82,13 @@ angular.module(&#39;ScheduleApp&#39;).factory(
72 * @returns {*|Function|promise|n} 82 * @returns {*|Function|promise|n}
73 */ 83 */
74 dataExport: function() { 84 dataExport: function() {
75 - return service.dataTools.dataExport().$promise; 85 + if (UserPrincipal.getGsStrsQuery().length > 0) {
  86 + return service.dataTools.dataExport(
  87 + {'cgsbm_in': UserPrincipal.getGsStrsQuery().join(",")}
  88 + ).$promise;
  89 + } else {
  90 + return null;
  91 + }
76 } 92 }
77 }; 93 };
78 94
@@ -125,14 +141,18 @@ angular.module(&#39;ScheduleApp&#39;).controller( @@ -125,14 +141,18 @@ angular.module(&#39;ScheduleApp&#39;).controller(
125 141
126 // 导出excel 142 // 导出excel
127 self.exportData = function() { 143 self.exportData = function() {
128 - busInfoManageService.dataExport().then(  
129 - function(result) {  
130 - fileDownload.downloadFile(result.data, "application/octet-stream", "车辆基础信息.xls");  
131 - },  
132 - function(result) {  
133 - console.log("exportData failed:" + result);  
134 - }  
135 - ); 144 + var p = busInfoManageService.dataExport();
  145 + if (p) {
  146 + p.then(
  147 + function(result) {
  148 + fileDownload.downloadFile(result.data, "application/octet-stream", "车辆基础信息.xls");
  149 + },
  150 + function(result) {
  151 + console.log("exportData failed:" + result);
  152 + }
  153 + );
  154 + }
  155 +
136 }; 156 };
137 } 157 }
138 ] 158 ]
@@ -217,6 +237,16 @@ angular.module(&#39;ScheduleApp&#39;).controller( @@ -217,6 +237,16 @@ angular.module(&#39;ScheduleApp&#39;).controller(
217 }); 237 });
218 }; 238 };
219 239
  240 + self.deleteCar = function(id) {
  241 + Cars.delete({id: id}, function(result) {
  242 + if (result.msg) { // 暂时这样做,之后全局拦截
  243 + alert("失败:" + result.msg);
  244 + } else {
  245 + self.doPage();
  246 + }
  247 + });
  248 + };
  249 +
220 self.doPage(); 250 self.doPage();
221 } 251 }
222 ] 252 ]
src/main/resources/static/pages/scheduleApp/module/basicInfo/deviceInfoManage/list.html
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column"> 4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column">
5 <thead> 5 <thead>
6 <tr role="row" class="heading"> 6 <tr role="row" class="heading">
7 - <th style="width: 40pt;">序号</th> 7 + <th style="width: 70px;">序号</th>
8 <th style="width: 15%;">线路名称</th> 8 <th style="width: 15%;">线路名称</th>
9 <th style="width: 10%;">内部编号</th> 9 <th style="width: 10%;">内部编号</th>
10 <th style="width: 100px;">启用日期</th> 10 <th style="width: 100px;">启用日期</th>
@@ -57,7 +57,12 @@ @@ -57,7 +57,12 @@
57 <tbody> 57 <tbody>
58 <tr ng-repeat="info in ctrl.page()['content']" ng-class="{odd: true, gradeX: true, danger: info.isCancel}"> 58 <tr ng-repeat="info in ctrl.page()['content']" ng-class="{odd: true, gradeX: true, danger: info.isCancel}">
59 <td> 59 <td>
60 - <span ng-bind="$index + 1"></span> 60 + <div>
  61 + <a href="#">
  62 + <i class="fa fa-list-ol" aria-hidden="true"></i>
  63 + {{$index + ctrl.page().number * 10 + 1}}
  64 + </a>
  65 + </div>
61 </td> 66 </td>
62 <td> 67 <td>
63 <span ng-bind="info.xlName"></span> 68 <span ng-bind="info.xlName"></span>
@@ -110,17 +115,23 @@ @@ -110,17 +115,23 @@
110 </table> 115 </table>
111 </div> 116 </div>
112 117
113 - <div style="text-align: right;">  
114 - <uib-pagination total-items="ctrl.page()['totalElements']"  
115 - ng-model="ctrl.page()['uiNumber']"  
116 - ng-change="ctrl.doPage()"  
117 - rotate="false"  
118 - max-size="10"  
119 - boundary-links="true"  
120 - first-text="首页"  
121 - previous-text="上一页"  
122 - next-text="下一页"  
123 - last-text="尾页">  
124 - </uib-pagination> 118 + <div class="pageBar">
  119 + <div class="pageBarLeft">
  120 + {{'显示从' + ctrl.page()['uiFromRecord'] + '到' + ctrl.page()['uiToRecord'] + ' 共' + ctrl.page()['totalElements'] + '条' + ' 每页显示10条'}}
  121 + </div>
  122 +
  123 + <div class="pageBarRight">
  124 + <uib-pagination total-items="ctrl.page()['totalElements']"
  125 + ng-model="ctrl.page()['uiNumber']"
  126 + ng-change="ctrl.doPage()"
  127 + rotate="false"
  128 + max-size="10"
  129 + boundary-links="true"
  130 + first-text="首页"
  131 + previous-text="上一页"
  132 + next-text="下一页"
  133 + last-text="尾页">
  134 + </uib-pagination>
  135 + </div>
125 </div> 136 </div>
126 </div> 137 </div>
src/main/resources/static/pages/scheduleApp/module/basicInfo/deviceInfoManage/module.js
@@ -15,7 +15,9 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -15,7 +15,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
15 number: 0, // 后台返回的页码,spring返回从0开始 15 number: 0, // 后台返回的页码,spring返回从0开始
16 content: [], 16 content: [],
17 17
18 - uiNumber: 1 // 页面绑定的页码 18 + uiNumber: 1, // 页面绑定的页码
  19 + uiFromRecord: 0, // 页面绑定,当前页第几条记录
  20 + uiToRecord: 0 // 页面绑定,当前页到第几条记录
19 }; 21 };
20 22
21 // 查询对象 23 // 查询对象
@@ -39,6 +41,12 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -39,6 +41,12 @@ angular.module(&#39;ScheduleApp&#39;).factory(
39 currentPage.totalElements = page.totalElements; 41 currentPage.totalElements = page.totalElements;
40 currentPage.number = page.number; 42 currentPage.number = page.number;
41 currentPage.content = page.content; 43 currentPage.content = page.content;
  44 +
  45 + // 计算当前页开始记录,结束记录
  46 + if (page.numberOfElements && page.numberOfElements > 0) {
  47 + currentPage.uiFromRecord = page.number * 10 + 1;
  48 + currentPage.uiToRecord = page.number * 10 + page.numberOfElements;
  49 + }
42 } 50 }
43 return currentPage; 51 return currentPage;
44 }, 52 },
@@ -48,7 +56,9 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -48,7 +56,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
48 totalElements: 0, 56 totalElements: 0,
49 number: 0, 57 number: 0,
50 content: [], 58 content: [],
51 - uiNumber: 1 59 + uiNumber: 1,
  60 + uiFromRecord: 0,
  61 + uiToRecord: 0
52 }; 62 };
53 } 63 }
54 64
src/main/resources/static/pages/scheduleApp/module/basicInfo/employeeInfoManage/edit.html
@@ -38,15 +38,16 @@ @@ -38,15 +38,16 @@
38 <div class="col-md-3"> 38 <div class="col-md-3">
39 <sa-Select5 name="gs" 39 <sa-Select5 name="gs"
40 model="ctrl.employeeInfoForSave" 40 model="ctrl.employeeInfoForSave"
41 - cmaps="{'companyCode': 'code', 'company': 'name'}" 41 + cmaps="{'companyCode': 'businessCode', 'brancheCompany': 'businessName'}"
42 dcname="companyCode" 42 dcname="companyCode"
43 - icname="code"  
44 - dsparams="{{ {type: 'dic', param: 'gsType' } | json }}" 43 + icname="businessCode"
  44 + dsparams="{{ {type: 'ajax', param:{'upCode_eq': '88' }, atype:'gs' } | json }}"
45 iterobjname="item" 45 iterobjname="item"
46 - iterobjexp="item.name"  
47 - searchph="请输拼音..."  
48 - searchexp="this.name"  
49 - required > 46 + iterobjexp="item.businessName"
  47 + searchph="请选择所属分公司..."
  48 + searchexp="this.businessName"
  49 + required
  50 + >
50 </sa-Select5> 51 </sa-Select5>
51 </div> 52 </div>
52 <!-- 隐藏块,显示验证信息 --> 53 <!-- 隐藏块,显示验证信息 -->
@@ -55,8 +56,8 @@ @@ -55,8 +56,8 @@
55 </div> 56 </div>
56 </div> 57 </div>
57 58
58 - <div class="form-group">  
59 - <label class="col-md-2 control-label">分公司:</label> 59 + <div class="form-group has-success has-feedback">
  60 + <label class="col-md-2 control-label">分公司*:</label>
60 <div class="col-md-3"> 61 <div class="col-md-3">
61 <sa-Select5 name="fgs" 62 <sa-Select5 name="fgs"
62 model="ctrl.employeeInfoForSave" 63 model="ctrl.employeeInfoForSave"
@@ -68,17 +69,23 @@ @@ -68,17 +69,23 @@
68 iterobjexp="item.businessName" 69 iterobjexp="item.businessName"
69 searchph="请选择所属分公司..." 70 searchph="请选择所属分公司..."
70 searchexp="this.businessName" 71 searchexp="this.businessName"
  72 + required
71 > 73 >
72 </sa-Select5> 74 </sa-Select5>
73 75
74 </div> 76 </div>
  77 +
  78 + <!-- 隐藏块,显示验证信息 -->
  79 + <div class="alert alert-danger well-sm" ng-show="myForm.fgs.$error.required">
  80 + 分公司也必须选择
  81 + </div>
75 </div> 82 </div>
76 83
77 <div class="form-group has-success has-feedback"> 84 <div class="form-group has-success has-feedback">
78 <label class="col-md-2 control-label">工号*:</label> 85 <label class="col-md-2 control-label">工号*:</label>
79 <div class="col-md-3"> 86 <div class="col-md-3">
80 <input type="text" class="form-control" 87 <input type="text" class="form-control"
81 - name="jobCode" ng-model="ctrl.employeeInfoForSave.jobCode" 88 + name="jobCode" ng-model="ctrl.employeeInfoForSave.jobCodeori"
82 required placeholder="请输入工号" 89 required placeholder="请输入工号"
83 remote-Validation 90 remote-Validation
84 remotevtype="ee_gh" 91 remotevtype="ee_gh"
@@ -147,6 +154,17 @@ @@ -147,6 +154,17 @@
147 </div> 154 </div>
148 </div> 155 </div>
149 156
  157 + <div class="form-group">
  158 + <label class="col-md-2 control-label">备注:</label>
  159 + <div class="col-md-3">
  160 + <textarea class="form-control"
  161 + ng-model="ctrl.employeeInfoForSave.remark"
  162 + >
  163 + </textarea>
  164 + </div>
  165 +
  166 + </div>
  167 +
150 <!-- 其他form-group --> 168 <!-- 其他form-group -->
151 169
152 </div> 170 </div>
src/main/resources/static/pages/scheduleApp/module/basicInfo/employeeInfoManage/form.html
@@ -38,15 +38,16 @@ @@ -38,15 +38,16 @@
38 <div class="col-md-3"> 38 <div class="col-md-3">
39 <sa-Select5 name="gs" 39 <sa-Select5 name="gs"
40 model="ctrl.employeeInfoForSave" 40 model="ctrl.employeeInfoForSave"
41 - cmaps="{'companyCode': 'code', 'company': 'name'}" 41 + cmaps="{'companyCode': 'businessCode', 'brancheCompany': 'businessName'}"
42 dcname="companyCode" 42 dcname="companyCode"
43 - icname="code"  
44 - dsparams="{{ {type: 'dic', param: 'gsType' } | json }}" 43 + icname="businessCode"
  44 + dsparams="{{ {type: 'ajax', param:{'upCode_eq': '88' }, atype:'gs' } | json }}"
45 iterobjname="item" 45 iterobjname="item"
46 - iterobjexp="item.name"  
47 - searchph="请输拼音..."  
48 - searchexp="this.name"  
49 - required > 46 + iterobjexp="item.businessName"
  47 + searchph="请选择所属分公司..."
  48 + searchexp="this.businessName"
  49 + required
  50 + >
50 </sa-Select5> 51 </sa-Select5>
51 </div> 52 </div>
52 <!-- 隐藏块,显示验证信息 --> 53 <!-- 隐藏块,显示验证信息 -->
@@ -55,8 +56,8 @@ @@ -55,8 +56,8 @@
55 </div> 56 </div>
56 </div> 57 </div>
57 58
58 - <div class="form-group">  
59 - <label class="col-md-2 control-label">分公司:</label> 59 + <div class="form-group has-success has-feedback">
  60 + <label class="col-md-2 control-label">分公司*:</label>
60 <div class="col-md-3"> 61 <div class="col-md-3">
61 <sa-Select5 name="fgs" 62 <sa-Select5 name="fgs"
62 model="ctrl.employeeInfoForSave" 63 model="ctrl.employeeInfoForSave"
@@ -68,17 +69,22 @@ @@ -68,17 +69,22 @@
68 iterobjexp="item.businessName" 69 iterobjexp="item.businessName"
69 searchph="请选择所属分公司..." 70 searchph="请选择所属分公司..."
70 searchexp="this.businessName" 71 searchexp="this.businessName"
  72 + required
71 > 73 >
72 </sa-Select5> 74 </sa-Select5>
73 75
74 </div> 76 </div>
  77 + <!-- 隐藏块,显示验证信息 -->
  78 + <div class="alert alert-danger well-sm" ng-show="myForm.fgs.$error.required">
  79 + 分公司也必须选择
  80 + </div>
75 </div> 81 </div>
76 82
77 <div class="form-group has-success has-feedback"> 83 <div class="form-group has-success has-feedback">
78 <label class="col-md-2 control-label">工号*:</label> 84 <label class="col-md-2 control-label">工号*:</label>
79 <div class="col-md-3"> 85 <div class="col-md-3">
80 <input type="text" class="form-control" 86 <input type="text" class="form-control"
81 - name="jobCode" ng-model="ctrl.employeeInfoForSave.jobCode" 87 + name="jobCode" ng-model="ctrl.employeeInfoForSave.jobCodeori"
82 required placeholder="请输入工号" 88 required placeholder="请输入工号"
83 remote-Validation 89 remote-Validation
84 remotevtype="ee_gh" 90 remotevtype="ee_gh"
@@ -147,6 +153,17 @@ @@ -147,6 +153,17 @@
147 </div> 153 </div>
148 </div> 154 </div>
149 155
  156 + <div class="form-group">
  157 + <label class="col-md-2 control-label">备注:</label>
  158 + <div class="col-md-3">
  159 + <textarea class="form-control"
  160 + ng-model="ctrl.employeeInfoForSave.remark"
  161 + >
  162 + </textarea>
  163 + </div>
  164 +
  165 + </div>
  166 +
150 <!-- 其他form-group --> 167 <!-- 其他form-group -->
151 168
152 </div> 169 </div>
src/main/resources/static/pages/scheduleApp/module/basicInfo/employeeInfoManage/list.html
@@ -4,9 +4,9 @@ @@ -4,9 +4,9 @@
4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column"> 4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column">
5 <thead> 5 <thead>
6 <tr role="row" class="heading"> 6 <tr role="row" class="heading">
7 - <th style="width: 50px;">序号</th> 7 + <th style="width:70px;">序号</th>
8 <th style="width: 130px;">姓名</th> 8 <th style="width: 130px;">姓名</th>
9 - <th style="width: 130px;">号</th> 9 + <th style="width: 130px;">员工编号</th>
10 <th style="width: 5%;">性别</th> 10 <th style="width: 5%;">性别</th>
11 <th style="width: 15%;">所在公司</th> 11 <th style="width: 15%;">所在公司</th>
12 <th >分公司</th> 12 <th >分公司</th>
@@ -25,22 +25,34 @@ @@ -25,22 +25,34 @@
25 <td> 25 <td>
26 </td> 26 </td>
27 <td> 27 <td>
28 - <div>  
29 - <sa-Select5 name="gs"  
30 - model="ctrl.searchCondition()"  
31 - cmaps="{'companyCode_eq': 'code'}"  
32 - dcname="companyCode_eq"  
33 - icname="code"  
34 - dsparams="{{ {type: 'dic', param: 'gsType' } | json }}"  
35 - iterobjname="item"  
36 - iterobjexp="item.name"  
37 - searchph="请输拼音..."  
38 - searchexp="this.name"  
39 - >  
40 - </sa-Select5>  
41 - </div> 28 + <sa-Select5 name="gs"
  29 + model="ctrl.searchCondition()"
  30 + cmaps="{'companyCode_eq': 'businessCode'}"
  31 + dcname="companyCode_eq"
  32 + icname="businessCode"
  33 + dsparams="{{ {type: 'ajax', param:{'upCode_eq': '88' }, atype:'gs' } | json }}"
  34 + iterobjname="item"
  35 + iterobjexp="item.businessName"
  36 + searchph="请输拼音..."
  37 + searchexp="this.businessName"
  38 + required
  39 + >
  40 + </sa-Select5>
42 </td> 41 </td>
43 <td> 42 <td>
  43 + <sa-Select5 name="fgs"
  44 + model="ctrl.searchCondition()"
  45 + cmaps="{'brancheCompanyCode_eq': 'businessCode'}"
  46 + dcname="brancheCompanyCode_eq"
  47 + icname="businessCode"
  48 + dsparams="{{ {type: 'ajax', param:{'upCode_eq': ctrl.searchCondition().companyCode_eq }, atype:'gs' } | json }}"
  49 + iterobjname="item"
  50 + iterobjexp="item.businessName"
  51 + searchph="请输拼音..."
  52 + searchexp="this.businessName"
  53 + required
  54 + >
  55 + </sa-Select5>
44 </td> 56 </td>
45 <td> 57 <td>
46 <div> 58 <div>
@@ -76,7 +88,18 @@ @@ -76,7 +88,18 @@
76 <tbody> 88 <tbody>
77 <tr ng-repeat="info in ctrl.page()['content']" class="odd gradeX"> 89 <tr ng-repeat="info in ctrl.page()['content']" class="odd gradeX">
78 <td> 90 <td>
79 - <span ng-bind="$index + 1"></span> 91 + <div>
  92 + <a href="#"
  93 + tooltip-animation="false"
  94 + tooltip-placement="top"
  95 + uib-tooltip="{{'姓名/工号:' + info.personnelName + '/' + info.jobCodeori}}"
  96 + tooltip-class="headClass">
  97 +
  98 + <i class="fa fa-list-ol" aria-hidden="true"></i>
  99 + {{$index + ctrl.page().number * 10 + 1}}
  100 + </a>
  101 + </div>
  102 +
80 </td> 103 </td>
81 <td> 104 <td>
82 <span ng-bind="info.personnelName"></span> 105 <span ng-bind="info.personnelName"></span>
@@ -123,18 +146,23 @@ @@ -123,18 +146,23 @@
123 </table> 146 </table>
124 </div> 147 </div>
125 148
  149 + <div class="pageBar">
  150 + <div class="pageBarLeft">
  151 + {{'显示从' + ctrl.page()['uiFromRecord'] + '到' + ctrl.page()['uiToRecord'] + ' 共' + ctrl.page()['totalElements'] + '条' + ' 每页显示10条'}}
  152 + </div>
126 153
127 - <div style="text-align: right;">  
128 - <uib-pagination total-items="ctrl.page()['totalElements']"  
129 - ng-model="ctrl.page()['uiNumber']"  
130 - ng-change="ctrl.doPage()"  
131 - rotate="false"  
132 - max-size="10"  
133 - boundary-links="true"  
134 - first-text="首页"  
135 - previous-text="上一页"  
136 - next-text="下一页"  
137 - last-text="尾页">  
138 - </uib-pagination> 154 + <div class="pageBarRight">
  155 + <uib-pagination total-items="ctrl.page()['totalElements']"
  156 + ng-model="ctrl.page()['uiNumber']"
  157 + ng-change="ctrl.doPage()"
  158 + rotate="false"
  159 + max-size="10"
  160 + boundary-links="true"
  161 + first-text="首页"
  162 + previous-text="上一页"
  163 + next-text="下一页"
  164 + last-text="尾页">
  165 + </uib-pagination>
  166 + </div>
139 </div> 167 </div>
140 </div> 168 </div>
141 \ No newline at end of file 169 \ No newline at end of file
src/main/resources/static/pages/scheduleApp/module/basicInfo/employeeInfoManage/module.js
@@ -21,7 +21,9 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -21,7 +21,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
21 number: 0, // 后台返回的页码,spring返回从0开始 21 number: 0, // 后台返回的页码,spring返回从0开始
22 content: [], 22 content: [],
23 23
24 - uiNumber: 1 // 页面绑定的页码 24 + uiNumber: 1, // 页面绑定的页码
  25 + uiFromRecord: 0, // 页面绑定,当前页第几条记录
  26 + uiToRecord: 0 // 页面绑定,当前页到第几条记录
25 }; 27 };
26 28
27 // 查询对象 29 // 查询对象
@@ -54,7 +56,14 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -54,7 +56,14 @@ angular.module(&#39;ScheduleApp&#39;).factory(
54 currentPage.totalElements = page.totalElements; 56 currentPage.totalElements = page.totalElements;
55 currentPage.number = page.number; 57 currentPage.number = page.number;
56 currentPage.content = page.content; 58 currentPage.content = page.content;
  59 +
  60 + // 计算当前页开始记录,结束记录
  61 + if (page.numberOfElements && page.numberOfElements > 0) {
  62 + currentPage.uiFromRecord = page.number * 10 + 1;
  63 + currentPage.uiToRecord = page.number * 10 + page.numberOfElements;
  64 + }
57 } 65 }
  66 +
58 return currentPage; 67 return currentPage;
59 }, 68 },
60 resetStatus: function() { 69 resetStatus: function() {
@@ -63,7 +72,9 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -63,7 +72,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
63 totalElements: 0, 72 totalElements: 0,
64 number: 0, 73 number: 0,
65 content: [], 74 content: [],
66 - uiNumber: 1 75 + uiNumber: 1,
  76 + uiFromRecord: 0,
  77 + uiToRecord: 0
67 }; 78 };
68 }, 79 },
69 80
@@ -72,7 +83,13 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -72,7 +83,13 @@ angular.module(&#39;ScheduleApp&#39;).factory(
72 * @returns {*|Function|promise|n} 83 * @returns {*|Function|promise|n}
73 */ 84 */
74 dataExport: function() { 85 dataExport: function() {
75 - return service.dataTools.dataExport().$promise; 86 + if (UserPrincipal.getGsStrsQuery().length > 0) {
  87 + return service.dataTools.dataExport(
  88 + {'cgsbm_in': UserPrincipal.getGsStrsQuery().join(",")}
  89 + ).$promise;
  90 + } else {
  91 + return null;
  92 + }
76 } 93 }
77 } 94 }
78 } 95 }
@@ -124,14 +141,17 @@ angular.module(&#39;ScheduleApp&#39;).controller( @@ -124,14 +141,17 @@ angular.module(&#39;ScheduleApp&#39;).controller(
124 141
125 // 导出excel 142 // 导出excel
126 self.exportData = function() { 143 self.exportData = function() {
127 - employeeInfoManageService.dataExport().then(  
128 - function(result) {  
129 - fileDownload.downloadFile(result.data, "application/octet-stream", "人员基础信息.xls");  
130 - },  
131 - function(result) {  
132 - console.log("exportData failed:" + result);  
133 - }  
134 - ); 144 + var p = employeeInfoManageService.dataExport();
  145 + if (p) {
  146 + p.then(
  147 + function(result) {
  148 + fileDownload.downloadFile(result.data, "application/octet-stream", "人员基础信息.xls");
  149 + },
  150 + function(result) {
  151 + console.log("exportData failed:" + result);
  152 + }
  153 + );
  154 + }
135 }; 155 };
136 156
137 } 157 }
@@ -256,17 +276,20 @@ angular.module(&#39;ScheduleApp&#39;).controller( @@ -256,17 +276,20 @@ angular.module(&#39;ScheduleApp&#39;).controller(
256 // 获取传过来的id,有的话就是修改,获取一遍数据 276 // 获取传过来的id,有的话就是修改,获取一遍数据
257 var id = $stateParams.id; 277 var id = $stateParams.id;
258 if (id) { 278 if (id) {
259 - self.employeeInfoForSave = Employee.get({id: id}, function() {}); 279 + self.employeeInfoForSave = Employee.get({id: id}, function() {
  280 + // 员工编号=公司编码_工号
  281 + if (!self.employeeInfoForSave.jobCodeori) {
  282 + self.employeeInfoForSave.jobCodeori = self.employeeInfoForSave.jobCode.split("-")[1];
  283 + }
  284 + });
  285 +
260 } 286 }
261 287
262 // 提交方法 288 // 提交方法
263 self.submit = function() { 289 self.submit = function() {
264 - // 在工号前添加公司编码  
265 - var gh = self.employeeInfoForSave.jobCode;  
266 - if (gh.indexOf("-") < 0) {  
267 - gh = self.employeeInfoForSave.companyCode + "-" + gh;  
268 - self.employeeInfoForSave.jobCode = gh;  
269 - } 290 + // 员工编号=公司编码_工号
  291 + var gh = self.employeeInfoForSave.jobCodeori;
  292 + self.employeeInfoForSave.jobCode = self.employeeInfoForSave.companyCode + "-" + gh;
270 293
271 console.log(self.employeeInfoForSave); 294 console.log(self.employeeInfoForSave);
272 295
src/main/resources/static/pages/scheduleApp/module/common/main.css
@@ -40,6 +40,7 @@ form input.ng-valid.ng-dirty.ng-valid-required { @@ -40,6 +40,7 @@ form input.ng-valid.ng-dirty.ng-valid-required {
40 /* 固定表格,防止内容撑出表格 */ 40 /* 固定表格,防止内容撑出表格 */
41 .fixTable { 41 .fixTable {
42 table-layout: fixed; 42 table-layout: fixed;
  43 + margin-bottom: 10px;
43 } 44 }
44 45
45 /** 内容不换行,多余的用...表示 */ 46 /** 内容不换行,多余的用...表示 */
@@ -83,4 +84,22 @@ form input.ng-valid.ng-dirty.ng-valid-required { @@ -83,4 +84,22 @@ form input.ng-valid.ng-dirty.ng-valid-required {
83 /* 结束时的样式 */ 84 /* 结束时的样式 */
84 .uv.ng-enter.ng-enter-active { 85 .uv.ng-enter.ng-enter-active {
85 opacity: 1; 86 opacity: 1;
  87 +}
  88 +
  89 +/* 分页条样式 */
  90 +.pageBar {
  91 + height: 55px;
  92 + border: solid 1px #ddd;
  93 + background-color: #fafafa;
  94 +
  95 +}
  96 +.pageBar > .pageBarLeft {
  97 + float: left;
  98 + margin-top: 15px;
  99 + margin-left: 5px;
  100 + color: #337ab7;
  101 +}
  102 +.pageBar > .pageBarRight {
  103 + float: right;
  104 + margin-right: 5px;
86 } 105 }
87 \ No newline at end of file 106 \ No newline at end of file
src/main/resources/static/pages/scheduleApp/module/common/main.js
@@ -19,6 +19,7 @@ ScheduleApp.factory(&#39;UserPrincipal&#39;, [ @@ -19,6 +19,7 @@ ScheduleApp.factory(&#39;UserPrincipal&#39;, [
19 var gsinfos = []; // 原始返回的对象数据 19 var gsinfos = []; // 原始返回的对象数据
20 var gsinfo_strs = []; // 拼装以后的(公司代码_分公司代码) 20 var gsinfo_strs = []; // 拼装以后的(公司代码_分公司代码)
21 var gsinfo_strs_u = []; // 拼装以后的(分公司代码_公司代码) 21 var gsinfo_strs_u = []; // 拼装以后的(分公司代码_公司代码)
  22 + var gsinfo_strs_query = []; // 拼装以后的(公司代码_分公司代码),带单引号
22 23
23 $http({ 24 $http({
24 method: 'GET', 25 method: 'GET',
@@ -32,6 +33,7 @@ ScheduleApp.factory(&#39;UserPrincipal&#39;, [ @@ -32,6 +33,7 @@ ScheduleApp.factory(&#39;UserPrincipal&#39;, [
32 var fgsbm = obj2.code; 33 var fgsbm = obj2.code;
33 gsinfo_strs.push(gsbm + "_" + fgsbm); 34 gsinfo_strs.push(gsbm + "_" + fgsbm);
34 gsinfo_strs_u.push(fgsbm + "_" + gsbm); 35 gsinfo_strs_u.push(fgsbm + "_" + gsbm);
  36 + gsinfo_strs_query.push("'" + gsbm + "_" + fgsbm + "'");
35 }); 37 });
36 }); 38 });
37 39
@@ -46,6 +48,9 @@ ScheduleApp.factory(&#39;UserPrincipal&#39;, [ @@ -46,6 +48,9 @@ ScheduleApp.factory(&#39;UserPrincipal&#39;, [
46 }, 48 },
47 getGsStrsU: function() { 49 getGsStrsU: function() {
48 return gsinfo_strs_u; 50 return gsinfo_strs_u;
  51 + },
  52 + getGsStrsQuery: function() {
  53 + return gsinfo_strs_query;
49 } 54 }
50 }; 55 };
51 } 56 }
src/main/resources/static/pages/scheduleApp/module/core/busConfig/list.html
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column"> 4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column">
5 <thead> 5 <thead>
6 <tr role="row" class="heading"> 6 <tr role="row" class="heading">
7 - <th style="width: 50px;">序号</th> 7 + <th style="width: 70px;">序号</th>
8 <th style="width: 150px;">线路</th> 8 <th style="width: 150px;">线路</th>
9 <th style="width: 150px;">内部编号</th> 9 <th style="width: 150px;">内部编号</th>
10 <th style="width: 150px;">设备编号</th> 10 <th style="width: 150px;">设备编号</th>
@@ -58,7 +58,12 @@ @@ -58,7 +58,12 @@
58 <tbody> 58 <tbody>
59 <tr ng-repeat="info in ctrl.page()['content']" ng-class="{odd: true, gradeX: true, danger: info.isCancel}"> 59 <tr ng-repeat="info in ctrl.page()['content']" ng-class="{odd: true, gradeX: true, danger: info.isCancel}">
60 <td> 60 <td>
61 - <span ng-bind="$index + 1"></span> 61 + <div>
  62 + <a href="#">
  63 + <i class="fa fa-list-ol" aria-hidden="true"></i>
  64 + {{$index + ctrl.page().number * 10 + 1}}
  65 + </a>
  66 + </div>
62 </td> 67 </td>
63 <td> 68 <td>
64 <span ng-bind="info.xl.name"></span> 69 <span ng-bind="info.xl.name"></span>
@@ -96,17 +101,24 @@ @@ -96,17 +101,24 @@
96 </table> 101 </table>
97 </div> 102 </div>
98 103
99 - <div style="text-align: right;">  
100 - <uib-pagination total-items="ctrl.page()['totalElements']"  
101 - ng-model="ctrl.page()['uiNumber']"  
102 - ng-change="ctrl.doPage()"  
103 - rotate="false"  
104 - max-size="10"  
105 - boundary-links="true"  
106 - first-text="首页"  
107 - previous-text="上一页"  
108 - next-text="下一页"  
109 - last-text="尾页">  
110 - </uib-pagination> 104 + <div class="pageBar">
  105 + <div class="pageBarLeft">
  106 + {{'显示从' + ctrl.page()['uiFromRecord'] + '到' + ctrl.page()['uiToRecord'] + ' 共' + ctrl.page()['totalElements'] + '条' + ' 每页显示10条'}}
  107 + </div>
  108 +
  109 + <div class="pageBarRight">
  110 + <uib-pagination total-items="ctrl.page()['totalElements']"
  111 + ng-model="ctrl.page()['uiNumber']"
  112 + ng-change="ctrl.doPage()"
  113 + rotate="false"
  114 + max-size="10"
  115 + boundary-links="true"
  116 + first-text="首页"
  117 + previous-text="上一页"
  118 + next-text="下一页"
  119 + last-text="尾页">
  120 + </uib-pagination>
  121 + </div>
111 </div> 122 </div>
  123 +
112 </div> 124 </div>
113 \ No newline at end of file 125 \ No newline at end of file
src/main/resources/static/pages/scheduleApp/module/core/busConfig/module.js
@@ -14,7 +14,9 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -14,7 +14,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
14 number: 0, // 后台返回的页码,spring返回从0开始 14 number: 0, // 后台返回的页码,spring返回从0开始
15 content: [], 15 content: [],
16 16
17 - uiNumber: 1 // 页面绑定的页码 17 + uiNumber: 1, // 页面绑定的页码
  18 + uiFromRecord: 0, // 页面绑定,当前页第几条记录
  19 + uiToRecord: 0 // 页面绑定,当前页到第几条记录
18 }; 20 };
19 21
20 // 查询对象 22 // 查询对象
@@ -48,6 +50,12 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -48,6 +50,12 @@ angular.module(&#39;ScheduleApp&#39;).factory(
48 currentPage.totalElements = page.totalElements; 50 currentPage.totalElements = page.totalElements;
49 currentPage.number = page.number; 51 currentPage.number = page.number;
50 currentPage.content = page.content; 52 currentPage.content = page.content;
  53 +
  54 + // 计算当前页开始记录,结束记录
  55 + if (page.numberOfElements && page.numberOfElements > 0) {
  56 + currentPage.uiFromRecord = page.number * 10 + 1;
  57 + currentPage.uiToRecord = page.number * 10 + page.numberOfElements;
  58 + }
51 } 59 }
52 return currentPage; 60 return currentPage;
53 }, 61 },
@@ -57,7 +65,9 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -57,7 +65,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
57 totalElements: 0, 65 totalElements: 0,
58 number: 0, 66 number: 0,
59 content: [], 67 content: [],
60 - uiNumber: 1 68 + uiNumber: 1,
  69 + uiFromRecord: 0,
  70 + uiToRecord: 0
61 }; 71 };
62 }, 72 },
63 73
src/main/resources/static/pages/scheduleApp/module/core/employeeConfig/list.html
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column"> 4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column">
5 <thead> 5 <thead>
6 <tr role="row" class="heading"> 6 <tr role="row" class="heading">
7 - <th style="width: 50px;">序号</th> 7 + <th style="width: 70px;">序号</th>
8 <th style="width: 150px;">线路</th> 8 <th style="width: 150px;">线路</th>
9 <th style="width: 80px;">搭班编码</th> 9 <th style="width: 80px;">搭班编码</th>
10 <th >驾驶员工号</th> 10 <th >驾驶员工号</th>
@@ -66,7 +66,12 @@ @@ -66,7 +66,12 @@
66 <tbody> 66 <tbody>
67 <tr ng-repeat="info in ctrl.page()['content']" ng-class="{odd: true, gradeX: true, danger: info.isCancel}"> 67 <tr ng-repeat="info in ctrl.page()['content']" ng-class="{odd: true, gradeX: true, danger: info.isCancel}">
68 <td> 68 <td>
69 - <span ng-bind="$index + 1"></span> 69 + <div>
  70 + <a href="#">
  71 + <i class="fa fa-list-ol" aria-hidden="true"></i>
  72 + {{$index + ctrl.page().number * 10 + 1}}
  73 + </a>
  74 + </div>
70 </td> 75 </td>
71 <td> 76 <td>
72 <span ng-bind="info.xl.name"></span> 77 <span ng-bind="info.xl.name"></span>
@@ -107,17 +112,24 @@ @@ -107,17 +112,24 @@
107 </table> 112 </table>
108 </div> 113 </div>
109 114
110 - <div style="text-align: right;">  
111 - <uib-pagination total-items="ctrl.page()['totalElements']"  
112 - ng-model="ctrl.page()['uiNumber']"  
113 - ng-change="ctrl.doPage()"  
114 - rotate="false"  
115 - max-size="10"  
116 - boundary-links="true"  
117 - first-text="首页"  
118 - previous-text="上一页"  
119 - next-text="下一页"  
120 - last-text="尾页">  
121 - </uib-pagination> 115 + <div class="pageBar">
  116 + <div class="pageBarLeft">
  117 + {{'显示从' + ctrl.page()['uiFromRecord'] + '到' + ctrl.page()['uiToRecord'] + ' 共' + ctrl.page()['totalElements'] + '条' + ' 每页显示10条'}}
  118 + </div>
  119 +
  120 + <div class="pageBarRight">
  121 + <uib-pagination total-items="ctrl.page()['totalElements']"
  122 + ng-model="ctrl.page()['uiNumber']"
  123 + ng-change="ctrl.doPage()"
  124 + rotate="false"
  125 + max-size="10"
  126 + boundary-links="true"
  127 + first-text="首页"
  128 + previous-text="上一页"
  129 + next-text="下一页"
  130 + last-text="尾页">
  131 + </uib-pagination>
  132 + </div>
122 </div> 133 </div>
  134 +
123 </div> 135 </div>
124 \ No newline at end of file 136 \ No newline at end of file
src/main/resources/static/pages/scheduleApp/module/core/employeeConfig/module.js
@@ -14,7 +14,9 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -14,7 +14,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
14 number: 0, // 后台返回的页码,spring返回从0开始 14 number: 0, // 后台返回的页码,spring返回从0开始
15 content: [], 15 content: [],
16 16
17 - uiNumber: 1 // 页面绑定的页码 17 + uiNumber: 1, // 页面绑定的页码
  18 + uiFromRecord: 0, // 页面绑定,当前页第几条记录
  19 + uiToRecord: 0 // 页面绑定,当前页到第几条记录
18 }; 20 };
19 21
20 // 查询对象类 22 // 查询对象类
@@ -48,6 +50,12 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -48,6 +50,12 @@ angular.module(&#39;ScheduleApp&#39;).factory(
48 currentPage.totalElements = page.totalElements; 50 currentPage.totalElements = page.totalElements;
49 currentPage.number = page.number; 51 currentPage.number = page.number;
50 currentPage.content = page.content; 52 currentPage.content = page.content;
  53 +
  54 + // 计算当前页开始记录,结束记录
  55 + if (page.numberOfElements && page.numberOfElements > 0) {
  56 + currentPage.uiFromRecord = page.number * 10 + 1;
  57 + currentPage.uiToRecord = page.number * 10 + page.numberOfElements;
  58 + }
51 } 59 }
52 return currentPage; 60 return currentPage;
53 }, 61 },
@@ -57,7 +65,9 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -57,7 +65,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
57 totalElements: 0, 65 totalElements: 0,
58 number: 0, 66 number: 0,
59 content: [], 67 content: [],
60 - uiNumber: 1 68 + uiNumber: 1,
  69 + uiFromRecord: 0,
  70 + uiToRecord: 0
61 }; 71 };
62 }, 72 },
63 73
src/main/resources/static/pages/scheduleApp/module/core/guideboardManage/list.html
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column"> 4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column">
5 <thead> 5 <thead>
6 <tr role="row" class="heading"> 6 <tr role="row" class="heading">
7 - <th style="width: 50px">序号</th> 7 + <th style="width: 70px">序号</th>
8 <th style="width: 150px;">线路</th> 8 <th style="width: 150px;">线路</th>
9 <th style="width: 100px;">路牌编号</th> 9 <th style="width: 100px;">路牌编号</th>
10 <th >路牌名称</th> 10 <th >路牌名称</th>
@@ -54,7 +54,12 @@ @@ -54,7 +54,12 @@
54 <tbody> 54 <tbody>
55 <tr ng-repeat="info in ctrl.page()['content']" ng-class="{odd: true, gradeX: true, danger: info.isCancel}"> 55 <tr ng-repeat="info in ctrl.page()['content']" ng-class="{odd: true, gradeX: true, danger: info.isCancel}">
56 <td> 56 <td>
57 - <span ng-bind="$index + 1"></span> 57 + <div>
  58 + <a href="#">
  59 + <i class="fa fa-list-ol" aria-hidden="true"></i>
  60 + {{$index + ctrl.page().number * 10 + 1}}
  61 + </a>
  62 + </div>
58 </td> 63 </td>
59 <td> 64 <td>
60 <span ng-bind="info.xl.name"></span> 65 <span ng-bind="info.xl.name"></span>
@@ -90,17 +95,24 @@ @@ -90,17 +95,24 @@
90 </table> 95 </table>
91 </div> 96 </div>
92 97
93 - <div style="text-align: right;">  
94 - <uib-pagination total-items="ctrl.page()['totalElements']"  
95 - ng-model="ctrl.page()['uiNumber']"  
96 - ng-change="ctrl.doPage()"  
97 - rotate="false"  
98 - max-size="10"  
99 - boundary-links="true"  
100 - first-text="首页"  
101 - previous-text="上一页"  
102 - next-text="下一页"  
103 - last-text="尾页">  
104 - </uib-pagination> 98 + <div class="pageBar">
  99 + <div class="pageBarLeft">
  100 + {{'显示从' + ctrl.page()['uiFromRecord'] + '到' + ctrl.page()['uiToRecord'] + ' 共' + ctrl.page()['totalElements'] + '条' + ' 每页显示10条'}}
  101 + </div>
  102 +
  103 + <div class="pageBarRight">
  104 + <uib-pagination total-items="ctrl.page()['totalElements']"
  105 + ng-model="ctrl.page()['uiNumber']"
  106 + ng-change="ctrl.doPage()"
  107 + rotate="false"
  108 + max-size="10"
  109 + boundary-links="true"
  110 + first-text="首页"
  111 + previous-text="上一页"
  112 + next-text="下一页"
  113 + last-text="尾页">
  114 + </uib-pagination>
  115 + </div>
105 </div> 116 </div>
  117 +
106 </div> 118 </div>
107 \ No newline at end of file 119 \ No newline at end of file
src/main/resources/static/pages/scheduleApp/module/core/guideboardManage/module.js
@@ -15,7 +15,9 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -15,7 +15,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
15 number: 0, // 后台返回的页码,spring返回从0开始 15 number: 0, // 后台返回的页码,spring返回从0开始
16 content: [], 16 content: [],
17 17
18 - uiNumber: 1 // 页面绑定的页码 18 + uiNumber: 1, // 页面绑定的页码
  19 + uiFromRecord: 0, // 页面绑定,当前页第几条记录
  20 + uiToRecord: 0 // 页面绑定,当前页到第几条记录
19 }; 21 };
20 22
21 // 查询对象类 23 // 查询对象类
@@ -49,7 +51,9 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -49,7 +51,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
49 totalElements: 0, 51 totalElements: 0,
50 number: 0, 52 number: 0,
51 content: [], 53 content: [],
52 - uiNumber: 1 54 + uiNumber: 1,
  55 + uiFromRecord: 0,
  56 + uiToRecord: 0
53 }; 57 };
54 }, 58 },
55 /** 59 /**
@@ -62,6 +66,12 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -62,6 +66,12 @@ angular.module(&#39;ScheduleApp&#39;).factory(
62 currentPage.totalElements = page.totalElements; 66 currentPage.totalElements = page.totalElements;
63 currentPage.number = page.number; 67 currentPage.number = page.number;
64 currentPage.content = page.content; 68 currentPage.content = page.content;
  69 +
  70 + // 计算当前页开始记录,结束记录
  71 + if (page.numberOfElements && page.numberOfElements > 0) {
  72 + currentPage.uiFromRecord = page.number * 10 + 1;
  73 + currentPage.uiToRecord = page.number * 10 + page.numberOfElements;
  74 + }
65 } 75 }
66 return currentPage; 76 return currentPage;
67 }, 77 },
src/main/resources/static/pages/scheduleApp/module/core/rerunManage/list.html
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column"> 3 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column">
4 <thead> 4 <thead>
5 <tr role="row" class="heading"> 5 <tr role="row" class="heading">
6 - <th style="width: 50px;">序号</th> 6 + <th style="width: 70px;">序号</th>
7 <th style="width: 150px;">套跑线路</th> 7 <th style="width: 150px;">套跑线路</th>
8 <th style="width: 180px">套跑时刻表/路牌</th> 8 <th style="width: 180px">套跑时刻表/路牌</th>
9 <th style="width: 100px">套跑类型</th> 9 <th style="width: 100px">套跑类型</th>
@@ -54,7 +54,12 @@ @@ -54,7 +54,12 @@
54 <tbody> 54 <tbody>
55 <tr ng-repeat="info in ctrl.page()['content']" ng-class="{odd: true, gradeX: true, danger: info.isCancel}"> 55 <tr ng-repeat="info in ctrl.page()['content']" ng-class="{odd: true, gradeX: true, danger: info.isCancel}">
56 <td> 56 <td>
57 - <span ng-bind="$index + 1"></span> 57 + <div>
  58 + <a href="#">
  59 + <i class="fa fa-list-ol" aria-hidden="true"></i>
  60 + {{$index + ctrl.page().number * 10 + 1}}
  61 + </a>
  62 + </div>
58 </td> 63 </td>
59 <td> 64 <td>
60 <span ng-bind="info.rerunXl.name"></span> 65 <span ng-bind="info.rerunXl.name"></span>
@@ -113,18 +118,24 @@ @@ -113,18 +118,24 @@
113 </table> 118 </table>
114 </div> 119 </div>
115 120
  121 + <div class="pageBar">
  122 + <div class="pageBarLeft">
  123 + {{'显示从' + ctrl.page()['uiFromRecord'] + '到' + ctrl.page()['uiToRecord'] + ' 共' + ctrl.page()['totalElements'] + '条' + ' 每页显示10条'}}
  124 + </div>
116 125
117 - <div style="text-align: right;">  
118 - <uib-pagination total-items="ctrl.page()['totalElements']"  
119 - ng-model="ctrl.page()['uiNumber']"  
120 - ng-change="ctrl.doPage()"  
121 - rotate="false"  
122 - max-size="10"  
123 - boundary-links="true"  
124 - first-text="首页"  
125 - previous-text="上一页"  
126 - next-text="下一页"  
127 - last-text="尾页">  
128 - </uib-pagination> 126 + <div class="pageBarRight">
  127 + <uib-pagination total-items="ctrl.page()['totalElements']"
  128 + ng-model="ctrl.page()['uiNumber']"
  129 + ng-change="ctrl.doPage()"
  130 + rotate="false"
  131 + max-size="10"
  132 + boundary-links="true"
  133 + first-text="首页"
  134 + previous-text="上一页"
  135 + next-text="下一页"
  136 + last-text="尾页">
  137 + </uib-pagination>
  138 + </div>
129 </div> 139 </div>
  140 +
130 </div> 141 </div>
131 \ No newline at end of file 142 \ No newline at end of file
src/main/resources/static/pages/scheduleApp/module/core/rerunManage/module.js
@@ -14,7 +14,9 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -14,7 +14,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
14 number: 0, // 后台返回的页码,spring返回从0开始 14 number: 0, // 后台返回的页码,spring返回从0开始
15 content: [], 15 content: [],
16 16
17 - uiNumber: 1 // 页面绑定的页码 17 + uiNumber: 1, // 页面绑定的页码
  18 + uiFromRecord: 0, // 页面绑定,当前页第几条记录
  19 + uiToRecord: 0 // 页面绑定,当前页到第几条记录
18 }; 20 };
19 21
20 // 查询对象 22 // 查询对象
@@ -39,6 +41,12 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -39,6 +41,12 @@ angular.module(&#39;ScheduleApp&#39;).factory(
39 currentPage.totalElements = page.totalElements; 41 currentPage.totalElements = page.totalElements;
40 currentPage.number = page.number; 42 currentPage.number = page.number;
41 currentPage.content = page.content; 43 currentPage.content = page.content;
  44 +
  45 + // 计算当前页开始记录,结束记录
  46 + if (page.numberOfElements && page.numberOfElements > 0) {
  47 + currentPage.uiFromRecord = page.number * 10 + 1;
  48 + currentPage.uiToRecord = page.number * 10 + page.numberOfElements;
  49 + }
42 } 50 }
43 return currentPage; 51 return currentPage;
44 }, 52 },
@@ -48,7 +56,9 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -48,7 +56,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
48 totalElements: 0, 56 totalElements: 0,
49 number: 0, 57 number: 0,
50 content: [], 58 content: [],
51 - uiNumber: 1 59 + uiNumber: 1,
  60 + uiFromRecord: 0,
  61 + uiToRecord: 0
52 }; 62 };
53 } 63 }
54 }; 64 };
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/info/list_info.html
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column"> 4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column">
5 <thead> 5 <thead>
6 <tr role="row" class="heading"> 6 <tr role="row" class="heading">
7 - <th style="width: 50px;">序号</th> 7 + <th style="width: 70px;">序号</th>
8 <th style="width: 80px;">线路</th> 8 <th style="width: 80px;">线路</th>
9 <th style="width: 150px;">日期</th> 9 <th style="width: 150px;">日期</th>
10 <th style="width: 50px;">路牌</th> 10 <th style="width: 50px;">路牌</th>
@@ -58,7 +58,12 @@ @@ -58,7 +58,12 @@
58 <tbody> 58 <tbody>
59 <tr ng-repeat="info in ctrl.page()['content']" class="odd gradeX"> 59 <tr ng-repeat="info in ctrl.page()['content']" class="odd gradeX">
60 <td> 60 <td>
61 - <span ng-bind="$index + 1"></span> 61 + <div>
  62 + <a href="#">
  63 + <i class="fa fa-list-ol" aria-hidden="true"></i>
  64 + {{$index + ctrl.page().number * 10 + 1}}
  65 + </a>
  66 + </div>
62 </td> 67 </td>
63 68
64 <td> 69 <td>
@@ -161,17 +166,24 @@ @@ -161,17 +166,24 @@
161 </table> 166 </table>
162 </div> 167 </div>
163 168
164 - <div style="text-align: right;">  
165 - <uib-pagination total-items="ctrl.page()['totalElements']"  
166 - ng-model="ctrl.page()['uiNumber']"  
167 - ng-change="ctrl.doPage()"  
168 - rotate="false"  
169 - max-size="10"  
170 - boundary-links="true"  
171 - first-text="首页"  
172 - previous-text="上一页"  
173 - next-text="下一页"  
174 - last-text="尾页">  
175 - </uib-pagination> 169 + <div class="pageBar">
  170 + <div class="pageBarLeft">
  171 + {{'显示从' + ctrl.page()['uiFromRecord'] + '到' + ctrl.page()['uiToRecord'] + ' 共' + ctrl.page()['totalElements'] + '条' + ' 每页显示10条'}}
  172 + </div>
  173 +
  174 + <div class="pageBarRight">
  175 + <uib-pagination total-items="ctrl.page()['totalElements']"
  176 + ng-model="ctrl.page()['uiNumber']"
  177 + ng-change="ctrl.doPage()"
  178 + rotate="false"
  179 + max-size="10"
  180 + boundary-links="true"
  181 + first-text="首页"
  182 + previous-text="上一页"
  183 + next-text="下一页"
  184 + last-text="尾页">
  185 + </uib-pagination>
  186 + </div>
176 </div> 187 </div>
  188 +
177 </div> 189 </div>
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/info/module.js
@@ -13,7 +13,9 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -13,7 +13,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
13 number: 0, // 后台返回的页码,spring返回从0开始 13 number: 0, // 后台返回的页码,spring返回从0开始
14 content: [], 14 content: [],
15 15
16 - uiNumber: 1 // 页面绑定的页码 16 + uiNumber: 1, // 页面绑定的页码
  17 + uiFromRecord: 0, // 页面绑定,当前页第几条记录
  18 + uiToRecord: 0 // 页面绑定,当前页到第几条记录
17 }; 19 };
18 20
19 // 查询对象 21 // 查询对象
@@ -32,6 +34,12 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -32,6 +34,12 @@ angular.module(&#39;ScheduleApp&#39;).factory(
32 currentPage.totalElements = page.totalElements; 34 currentPage.totalElements = page.totalElements;
33 currentPage.number = page.number; 35 currentPage.number = page.number;
34 currentPage.content = page.content; 36 currentPage.content = page.content;
  37 +
  38 + // 计算当前页开始记录,结束记录
  39 + if (page.numberOfElements && page.numberOfElements > 0) {
  40 + currentPage.uiFromRecord = page.number * 10 + 1;
  41 + currentPage.uiToRecord = page.number * 10 + page.numberOfElements;
  42 + }
35 } 43 }
36 return currentPage; 44 return currentPage;
37 }, 45 },
@@ -41,7 +49,9 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -41,7 +49,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
41 totalElements: 0, 49 totalElements: 0,
42 number: 0, 50 number: 0,
43 content: [], 51 content: [],
44 - uiNumber: 1 52 + uiNumber: 1,
  53 + uiFromRecord: 0,
  54 + uiToRecord: 0
45 }; 55 };
46 } 56 }
47 }; 57 };
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/list.html
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column"> 4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column">
5 <thead> 5 <thead>
6 <tr role="row" class="heading"> 6 <tr role="row" class="heading">
7 - <th style="width: 50px;">序号</th> 7 + <th style="width: 70px;">序号</th>
8 <th style="width: 150px;">线路</th> 8 <th style="width: 150px;">线路</th>
9 <th style="width: 100%;">关联时刻表</th> 9 <th style="width: 100%;">关联时刻表</th>
10 <th style="width: 150px;">排班开始日期</th> 10 <th style="width: 150px;">排班开始日期</th>
@@ -30,7 +30,7 @@ @@ -30,7 +30,7 @@
30 </sa-Select5> 30 </sa-Select5>
31 </td> 31 </td>
32 <td> 32 <td>
33 - <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition().name_like" placeholder="输入时刻表名称..."/> 33 + <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition().ttInfoNames_like" placeholder="输入时刻表名称..."/>
34 </td> 34 </td>
35 <td> 35 <td>
36 <div class="input-group"> 36 <div class="input-group">
@@ -77,14 +77,23 @@ @@ -77,14 +77,23 @@
77 <tbody> 77 <tbody>
78 <tr ng-repeat="info in ctrl.page()['content']" class="odd gradeX"> 78 <tr ng-repeat="info in ctrl.page()['content']" class="odd gradeX">
79 <td> 79 <td>
80 - <span ng-bind="$index + 1"></span> 80 + <div>
  81 + <a href="#">
  82 + <i class="fa fa-list-ol" aria-hidden="true"></i>
  83 + {{$index + ctrl.page().number * 10 + 1}}
  84 + </a>
  85 + </div>
81 </td> 86 </td>
82 <td> 87 <td>
83 <span ng-bind="info.xl.name"></span> 88 <span ng-bind="info.xl.name"></span>
84 </td> 89 </td>
85 <td> 90 <td>
86 <div ng-repeat="tinfo in info.rst"> 91 <div ng-repeat="tinfo in info.rst">
87 - <a ui-sref="ttInfoDetailManage_edit3({xlid: info.xl.id, ttid : tinfo.ttInfoId, xlname: info.xl.name, ttname : tinfo.ttInfoName, rflag : true})"> 92 + <a tooltip-animation="false"
  93 + tooltip-placement="top"
  94 + uib-tooltip="{{tinfo.ttInfoName}}"
  95 + tooltip-class="headClass"
  96 + ui-sref="ttInfoDetailManage_edit3({xlid: info.xl.id, ttid : tinfo.ttInfoId, xlname: info.xl.name, ttname : tinfo.ttInfoName, rflag : true})">
88 <i class="fa fa-table" aria-hidden="true"></i> 97 <i class="fa fa-table" aria-hidden="true"></i>
89 {{tinfo.ttInfoName}} 98 {{tinfo.ttInfoName}}
90 </a> 99 </a>
@@ -135,18 +144,24 @@ @@ -135,18 +144,24 @@
135 </table> 144 </table>
136 </div> 145 </div>
137 146
  147 + <div class="pageBar">
  148 + <div class="pageBarLeft">
  149 + {{'显示从' + ctrl.page()['uiFromRecord'] + '到' + ctrl.page()['uiToRecord'] + ' 共' + ctrl.page()['totalElements'] + '条' + ' 每页显示10条'}}
  150 + </div>
138 151
139 - <div style="text-align: right;">  
140 - <uib-pagination total-items="ctrl.page()['totalElements']"  
141 - ng-model="ctrl.page()['uiNumber']"  
142 - ng-change="ctrl.doPage()"  
143 - rotate="false"  
144 - max-size="10"  
145 - boundary-links="true"  
146 - first-text="首页"  
147 - previous-text="上一页"  
148 - next-text="下一页"  
149 - last-text="尾页">  
150 - </uib-pagination> 152 + <div class="pageBarRight">
  153 + <uib-pagination total-items="ctrl.page()['totalElements']"
  154 + ng-model="ctrl.page()['uiNumber']"
  155 + ng-change="ctrl.doPage()"
  156 + rotate="false"
  157 + max-size="10"
  158 + boundary-links="true"
  159 + first-text="首页"
  160 + previous-text="上一页"
  161 + next-text="下一页"
  162 + last-text="尾页">
  163 + </uib-pagination>
  164 + </div>
151 </div> 165 </div>
  166 +
152 </div> 167 </div>
153 \ No newline at end of file 168 \ No newline at end of file
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/module.js
@@ -14,7 +14,9 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -14,7 +14,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
14 number: 0, // 后台返回的页码,spring返回从0开始 14 number: 0, // 后台返回的页码,spring返回从0开始
15 content: [], 15 content: [],
16 16
17 - uiNumber: 1 // 页面绑定的页码 17 + uiNumber: 1, // 页面绑定的页码
  18 + uiFromRecord: 0, // 页面绑定,当前页第几条记录
  19 + uiToRecord: 0 // 页面绑定,当前页到第几条记录
18 }; 20 };
19 21
20 // 查询对象 22 // 查询对象
@@ -39,6 +41,12 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -39,6 +41,12 @@ angular.module(&#39;ScheduleApp&#39;).factory(
39 currentPage.totalElements = page.totalElements; 41 currentPage.totalElements = page.totalElements;
40 currentPage.number = page.number; 42 currentPage.number = page.number;
41 currentPage.content = page.content; 43 currentPage.content = page.content;
  44 +
  45 + // 计算当前页开始记录,结束记录
  46 + if (page.numberOfElements && page.numberOfElements > 0) {
  47 + currentPage.uiFromRecord = page.number * 10 + 1;
  48 + currentPage.uiToRecord = page.number * 10 + page.numberOfElements;
  49 + }
42 } 50 }
43 return currentPage; 51 return currentPage;
44 }, 52 },
@@ -48,7 +56,9 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -48,7 +56,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
48 totalElements: 0, 56 totalElements: 0,
49 number: 0, 57 number: 0,
50 content: [], 58 content: [],
51 - uiNumber: 1 59 + uiNumber: 1,
  60 + uiFromRecord: 0,
  61 + uiToRecord: 0
52 }; 62 };
53 } 63 }
54 64
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/report/ext/list.html
@@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
16 style="width: 1600px; min-height: 500px;"> 16 style="width: 1600px; min-height: 500px;">
17 <thead> 17 <thead>
18 <tr role="row" class="heading"> 18 <tr role="row" class="heading">
19 - <th style="width: 50px;">序号</th> 19 + <th style="width: 70px;">序号</th>
20 <th style="width: 80px;">操作</th> 20 <th style="width: 80px;">操作</th>
21 <th style="width: 180px;">线路</th> 21 <th style="width: 180px;">线路</th>
22 <th style="width: 180px">日期</th> 22 <th style="width: 180px">日期</th>
@@ -75,7 +75,12 @@ @@ -75,7 +75,12 @@
75 <tbody> 75 <tbody>
76 <tr ng-repeat="info in ctrl.pageInfo.infos" class="odd gradeX"> 76 <tr ng-repeat="info in ctrl.pageInfo.infos" class="odd gradeX">
77 <td> 77 <td>
78 - <span ng-bind="$index + 1"></span> 78 + <div>
  79 + <a href="#">
  80 + <i class="fa fa-list-ol" aria-hidden="true"></i>
  81 + {{$index + 1}}
  82 + </a>
  83 + </div>
79 </td> 84 </td>
80 <td> 85 <td>
81 <a ui-sref="schedulePlanInfoExtFormManage_edit({xlId: info.xlId, xlName: info.xlName, sd: info.scheduleDate, lpId: info.lpId, lpName: info.lpName})" class="btn btn-info btn-sm" > 修改 </a> 86 <a ui-sref="schedulePlanInfoExtFormManage_edit({xlId: info.xlId, xlName: info.xlName, sd: info.scheduleDate, lpId: info.lpId, lpName: info.lpName})" class="btn btn-info btn-sm" > 修改 </a>
src/main/resources/static/pages/scheduleApp/module/core/scheduleRuleManage/list.html
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column"> 3 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column">
4 <thead> 4 <thead>
5 <tr role="row" class="heading"> 5 <tr role="row" class="heading">
6 - <th style="width: 5%;">序号</th> 6 + <th style="width: 70px;">序号</th>
7 <th style="width: 15%;">线路</th> 7 <th style="width: 15%;">线路</th>
8 <th style="width: 15%;">修改人/修改时间</th> 8 <th style="width: 15%;">修改人/修改时间</th>
9 <th style="width: 10%;">启用日期</th> 9 <th style="width: 10%;">启用日期</th>
@@ -58,7 +58,12 @@ @@ -58,7 +58,12 @@
58 <tbody> 58 <tbody>
59 <tr ng-repeat="info in ctrl.page()['content']" class="odd gradeX"> 59 <tr ng-repeat="info in ctrl.page()['content']" class="odd gradeX">
60 <td> 60 <td>
61 - <span ng-bind="$index + 1"></span> 61 + <div>
  62 + <a href="#">
  63 + <i class="fa fa-list-ol" aria-hidden="true"></i>
  64 + {{$index + ctrl.page().number * 10 + 1}}
  65 + </a>
  66 + </div>
62 </td> 67 </td>
63 <td> 68 <td>
64 <span ng-bind="info.xl.name"></span> 69 <span ng-bind="info.xl.name"></span>
@@ -132,18 +137,24 @@ @@ -132,18 +137,24 @@
132 </table> 137 </table>
133 </div> 138 </div>
134 139
  140 + <div class="pageBar">
  141 + <div class="pageBarLeft">
  142 + {{'显示从' + ctrl.page()['uiFromRecord'] + '到' + ctrl.page()['uiToRecord'] + ' 共' + ctrl.page()['totalElements'] + '条' + ' 每页显示10条'}}
  143 + </div>
135 144
136 - <div style="text-align: right;">  
137 - <uib-pagination total-items="ctrl.page()['totalElements']"  
138 - ng-model="ctrl.page()['uiNumber']"  
139 - ng-change="ctrl.doPage()"  
140 - rotate="false"  
141 - max-size="10"  
142 - boundary-links="true"  
143 - first-text="首页"  
144 - previous-text="上一页"  
145 - next-text="下一页"  
146 - last-text="尾页">  
147 - </uib-pagination> 145 + <div class="pageBarRight">
  146 + <uib-pagination total-items="ctrl.page()['totalElements']"
  147 + ng-model="ctrl.page()['uiNumber']"
  148 + ng-change="ctrl.doPage()"
  149 + rotate="false"
  150 + max-size="10"
  151 + boundary-links="true"
  152 + first-text="首页"
  153 + previous-text="上一页"
  154 + next-text="下一页"
  155 + last-text="尾页">
  156 + </uib-pagination>
  157 + </div>
148 </div> 158 </div>
  159 +
149 </div> 160 </div>
150 \ No newline at end of file 161 \ No newline at end of file
src/main/resources/static/pages/scheduleApp/module/core/scheduleRuleManage/module.js
@@ -14,7 +14,9 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -14,7 +14,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
14 number: 0, // 后台返回的页码,spring返回从0开始 14 number: 0, // 后台返回的页码,spring返回从0开始
15 content: [], 15 content: [],
16 16
17 - uiNumber: 1 // 页面绑定的页码 17 + uiNumber: 1, // 页面绑定的页码
  18 + uiFromRecord: 0, // 页面绑定,当前页第几条记录
  19 + uiToRecord: 0 // 页面绑定,当前页到第几条记录
18 }; 20 };
19 21
20 // 查询对象 22 // 查询对象
@@ -44,6 +46,12 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -44,6 +46,12 @@ angular.module(&#39;ScheduleApp&#39;).factory(
44 currentPage.totalElements = page.totalElements; 46 currentPage.totalElements = page.totalElements;
45 currentPage.number = page.number; 47 currentPage.number = page.number;
46 currentPage.content = page.content; 48 currentPage.content = page.content;
  49 +
  50 + // 计算当前页开始记录,结束记录
  51 + if (page.numberOfElements && page.numberOfElements > 0) {
  52 + currentPage.uiFromRecord = page.number * 10 + 1;
  53 + currentPage.uiToRecord = page.number * 10 + page.numberOfElements;
  54 + }
47 } 55 }
48 return currentPage; 56 return currentPage;
49 }, 57 },
@@ -53,7 +61,9 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -53,7 +61,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
53 totalElements: 0, 61 totalElements: 0,
54 number: 0, 62 number: 0,
55 content: [], 63 content: [],
56 - uiNumber: 1 64 + uiNumber: 1,
  65 + uiFromRecord: 0,
  66 + uiToRecord: 0
57 }; 67 };
58 }, 68 },
59 69
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/list.html
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column"> 4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column">
5 <thead> 5 <thead>
6 <tr role="row" class="heading"> 6 <tr role="row" class="heading">
7 - <th style="width: 50px;">序号</th> 7 + <th style="width: 70px;">序号</th>
8 <th style="width: 150px;">线路</th> 8 <th style="width: 150px;">线路</th>
9 <th style="width: 180px;">时刻表名称</th> 9 <th style="width: 180px;">时刻表名称</th>
10 <th style="width: 80px">上下行</th> 10 <th style="width: 80px">上下行</th>
@@ -61,13 +61,26 @@ @@ -61,13 +61,26 @@
61 <tbody> 61 <tbody>
62 <tr ng-repeat="info in ctrl.page()['content']" ng-class="{odd: true, gradeX: true, danger: info.isCancel}"> 62 <tr ng-repeat="info in ctrl.page()['content']" ng-class="{odd: true, gradeX: true, danger: info.isCancel}">
63 <td> 63 <td>
64 - <span ng-bind="$index + 1"></span> 64 + <div>
  65 + <a href="#">
  66 + <i class="fa fa-list-ol" aria-hidden="true"></i>
  67 + {{$index + ctrl.page().number * 10 + 1}}
  68 + </a>
  69 + </div>
65 </td> 70 </td>
66 <td> 71 <td>
67 <span ng-bind="info.xl.name"></span> 72 <span ng-bind="info.xl.name"></span>
68 </td> 73 </td>
69 <td> 74 <td>
70 - <span ng-bind="info.name" title="{{info.name}}"></span> 75 + <div>
  76 + <a href="#"
  77 + tooltip-animation="false"
  78 + tooltip-placement="top"
  79 + uib-tooltip="{{info.name}}"
  80 + tooltip-class="headClass">
  81 + {{info.name}}
  82 + </a>
  83 + </div>
71 </td> 84 </td>
72 <td> 85 <td>
73 <span ng-bind="info.xlDir | dict:'LineTrend2':'未知' "></span> 86 <span ng-bind="info.xlDir | dict:'LineTrend2':'未知' "></span>
@@ -134,17 +147,24 @@ @@ -134,17 +147,24 @@
134 </table> 147 </table>
135 </div> 148 </div>
136 149
137 - <div style="text-align: right;">  
138 - <uib-pagination total-items="ctrl.page()['totalElements']"  
139 - ng-model="ctrl.page()['uiNumber']"  
140 - ng-change="ctrl.doPage()"  
141 - rotate="false"  
142 - max-size="10"  
143 - boundary-links="true"  
144 - first-text="首页"  
145 - previous-text="上一页"  
146 - next-text="下一页"  
147 - last-text="尾页">  
148 - </uib-pagination> 150 + <div class="pageBar">
  151 + <div class="pageBarLeft">
  152 + {{'显示从' + ctrl.page()['uiFromRecord'] + '到' + ctrl.page()['uiToRecord'] + ' 共' + ctrl.page()['totalElements'] + '条' + ' 每页显示10条'}}
  153 + </div>
  154 +
  155 + <div class="pageBarRight">
  156 + <uib-pagination total-items="ctrl.page()['totalElements']"
  157 + ng-model="ctrl.page()['uiNumber']"
  158 + ng-change="ctrl.doPage()"
  159 + rotate="false"
  160 + max-size="10"
  161 + boundary-links="true"
  162 + first-text="首页"
  163 + previous-text="上一页"
  164 + next-text="下一页"
  165 + last-text="尾页">
  166 + </uib-pagination>
  167 + </div>
149 </div> 168 </div>
  169 +
150 </div> 170 </div>
151 \ No newline at end of file 171 \ No newline at end of file
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/module.js
@@ -14,7 +14,9 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -14,7 +14,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
14 number: 0, // 后台返回的页码,spring返回从0开始 14 number: 0, // 后台返回的页码,spring返回从0开始
15 content: [], 15 content: [],
16 16
17 - uiNumber: 1 // 页面绑定的页码 17 + uiNumber: 1, // 页面绑定的页码
  18 + uiFromRecord: 0, // 页面绑定,当前页第几条记录
  19 + uiToRecord: 0 // 页面绑定,当前页到第几条记录
18 }; 20 };
19 21
20 // 查询对象类 22 // 查询对象类
@@ -39,6 +41,12 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -39,6 +41,12 @@ angular.module(&#39;ScheduleApp&#39;).factory(
39 currentPage.totalElements = page.totalElements; 41 currentPage.totalElements = page.totalElements;
40 currentPage.number = page.number; 42 currentPage.number = page.number;
41 currentPage.content = page.content; 43 currentPage.content = page.content;
  44 +
  45 + // 计算当前页开始记录,结束记录
  46 + if (page.numberOfElements && page.numberOfElements > 0) {
  47 + currentPage.uiFromRecord = page.number * 10 + 1;
  48 + currentPage.uiToRecord = page.number * 10 + page.numberOfElements;
  49 + }
42 } 50 }
43 return currentPage; 51 return currentPage;
44 }, 52 },
@@ -48,7 +56,9 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -48,7 +56,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
48 totalElements: 0, 56 totalElements: 0,
49 number: 0, 57 number: 0,
50 content: [], 58 content: [],
51 - uiNumber: 1 59 + uiNumber: 1,
  60 + uiFromRecord: 0,
  61 + uiToRecord: 0
52 }; 62 };
53 }, 63 },
54 /** 64 /**
src/main/resources/static/pages/summary/work_hours/list.html
@@ -263,8 +263,8 @@ @@ -263,8 +263,8 @@
263 } 263 }
264 264
265 //日期选择器 265 //日期选择器
266 - $('[name=rq_eq]', f).val('2017-07-31');  
267 - flatpickr('.ct_search_form_wrap [name=rq_eq]', {"locale": "zh", maxDate: '2017-07-31', minDate: '2017-07-01'}); 266 + $('[name=rq_eq]', f).val('2017-08-03');
  267 + flatpickr('.ct_search_form_wrap [name=rq_eq]', {"locale": "zh", maxDate: '2017-08-03', minDate: '2017-07-01'});
268 268
269 var comps; 269 var comps;
270 //构建公司级联下拉框 270 //构建公司级联下拉框
src/main/resources/static/real_control_v2/css/ct_table.css
@@ -33,7 +33,7 @@ @@ -33,7 +33,7 @@
33 .ct_table>.ct_table_body { 33 .ct_table>.ct_table_body {
34 width: 100%; 34 width: 100%;
35 border-bottom: 1px solid #dedede; 35 border-bottom: 1px solid #dedede;
36 - color: #000; 36 + /*color: #000;*/
37 } 37 }
38 38
39 .ct_table dl { 39 .ct_table dl {
src/main/resources/static/real_control_v2/css/line_schedule.css
@@ -771,27 +771,30 @@ input.i-cbox[type=checkbox]{ @@ -771,27 +771,30 @@ input.i-cbox[type=checkbox]{
771 771
772 772
773 .sch-tzrc-table dl dt:nth-of-type(1), .sch-tzrc-table dl dd:nth-of-type(1) { 773 .sch-tzrc-table dl dt:nth-of-type(1), .sch-tzrc-table dl dd:nth-of-type(1) {
774 - width: 30%; 774 + width: 25%;
775 } 775 }
776 .sch-tzrc-table dl dt:nth-of-type(2), .sch-tzrc-table dl dd:nth-of-type(2) { 776 .sch-tzrc-table dl dt:nth-of-type(2), .sch-tzrc-table dl dd:nth-of-type(2) {
777 - width: 25%; 777 + width: 18%;
778 } 778 }
779 .sch-tzrc-table dl dt:nth-of-type(3), .sch-tzrc-table dl dd:nth-of-type(3) { 779 .sch-tzrc-table dl dt:nth-of-type(3), .sch-tzrc-table dl dd:nth-of-type(3) {
780 - width: 25%; 780 + width: 21%;
781 } 781 }
782 .sch-tzrc-table dl dt:nth-of-type(4), .sch-tzrc-table dl dd:nth-of-type(4) { 782 .sch-tzrc-table dl dt:nth-of-type(4), .sch-tzrc-table dl dd:nth-of-type(4) {
783 - width: 20%; 783 + width: 21%;
  784 +}
  785 +.sch-tzrc-table dl dt:nth-of-type(5), .sch-tzrc-table dl dd:nth-of-type(5) {
  786 + width: 15%;
784 } 787 }
785 788
786 .ct-form-modal .uk-autocomplete{ 789 .ct-form-modal .uk-autocomplete{
787 width: 100%; 790 width: 100%;
788 } 791 }
789 792
790 -.sch-tzrc-table.ct_table dl.active, 793 +/*.sch-tzrc-table.ct_table dl.active,
791 .sch-tzrc-table.ct_table>.ct_table_body dl.active:hover, 794 .sch-tzrc-table.ct_table>.ct_table_body dl.active:hover,
792 .sch-tzrc-table.ct_table>.ct_table_body dl.context-menu-active{ 795 .sch-tzrc-table.ct_table>.ct_table_body dl.context-menu-active{
793 background: #e6e6e6; 796 background: #e6e6e6;
794 -} 797 +}*/
795 798
796 .search_sch_panel{ 799 .search_sch_panel{
797 float: right; 800 float: right;
src/main/resources/static/real_control_v2/css/main.css
@@ -1597,3 +1597,62 @@ ul.left_tabs_lg li{ @@ -1597,3 +1597,62 @@ ul.left_tabs_lg li{
1597 text-decoration: underline; 1597 text-decoration: underline;
1598 font-size: 13px; 1598 font-size: 13px;
1599 } 1599 }
  1600 +
  1601 +#schedule-tzrc-modal input[type=checkbox]{
  1602 + margin-right: 9px;
  1603 +}
  1604 +
  1605 +#schedule-tzrc-modal span.ct_zt_yzx{
  1606 + color: #2196F3;
  1607 + font-size: 12px;
  1608 +}
  1609 +
  1610 +#schedule-tzrc-modal span.ct_zt_lb{
  1611 + color: red;
  1612 + font-size: 12px;
  1613 +}
  1614 +
  1615 +#schedule-tzrc-modal span.ct_zt_zzzx{
  1616 + font-size: 12px;
  1617 + color: #38ad3c;
  1618 +}
  1619 +
  1620 +#schedule-tzrc-modal .tzrc_form{
  1621 + padding: 20px;
  1622 + border: 1px solid #f0eded;
  1623 + box-shadow: 0px -3px 15px rgba(0,0,0,0.08);
  1624 + background: #f9f9f9;
  1625 +}
  1626 +
  1627 +.uk-panel.ct_search_panel{
  1628 + padding: 15px;
  1629 + border: 1px solid #f0eded;
  1630 + box-shadow: 0px 3px 15px rgba(0,0,0,0.08);
  1631 + background: #f9f9f9;
  1632 +}
  1633 +
  1634 +.sch-tzrc-table.ct_table dl.active,
  1635 +.sch-tzrc-table.ct_table>.ct_table_body dl.active:hover{
  1636 + background: #5bd460;
  1637 + color: white;
  1638 +}
  1639 +
  1640 +#schedule-tzrc-modal dl.active span.ct_zt_yzx{
  1641 + color: #545252;
  1642 +}
  1643 +
  1644 +#schedule-tzrc-modal dl.active span.ct_zt_lb{
  1645 + color: #d64949;
  1646 +}
  1647 +
  1648 +#schedule-tzrc-modal dl.active span.ct_zt_zzzx{
  1649 + color: white;
  1650 +}
  1651 +
  1652 +#schedule-tzrc-modal dl.active input[type=checkbox]{
  1653 + border: 0;
  1654 +}
  1655 +
  1656 +#schedule-tzrc-modal dl.active input[type=checkbox]:before{
  1657 + color: #ffffff;
  1658 +}
1600 \ No newline at end of file 1659 \ No newline at end of file
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/add_in_out.html
@@ -100,7 +100,7 @@ @@ -100,7 +100,7 @@
100 else if (sch.status == 2) { 100 else if (sch.status == 2) {
101 $f('destroy', f).parents('label').remove(); 101 $f('destroy', f).parents('label').remove();
102 $f('endDate', f).val(sch.zdsjActual); 102 $f('endDate', f).val(sch.zdsjActual);
103 - $('input,select', f).attr('disabled', 'disabled'); 103 + //$('input,select', f).attr('disabled', 'disabled');
104 } 104 }
105 } 105 }
106 106
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/add_range_turn.html
@@ -85,10 +85,13 @@ @@ -85,10 +85,13 @@
85 }); 85 });
86 86
87 87
88 - function addTaskForm() { 88 + function addTaskForm(upDownInput) {
89 var htmlStr = template('sub-task-v2-form-temp', {sch: sch}); 89 var htmlStr = template('sub-task-v2-form-temp', {sch: sch});
90 var f = $(htmlStr); 90 var f = $(htmlStr);
91 $('.forms', wrap).append(f); 91 $('.forms', wrap).append(f);
  92 +
  93 + if(upDownInput)
  94 + f.append(upDownInput);
92 //字典转换 95 //字典转换
93 dictionaryUtils.transformDom($('.nt-dictionary', f)); 96 dictionaryUtils.transformDom($('.nt-dictionary', f));
94 97
@@ -110,8 +113,8 @@ @@ -110,8 +113,8 @@
110 function disabled_form(f) { 113 function disabled_form(f) {
111 //$('input,select',f).attr('disabled', 'disabled'); 114 //$('input,select',f).attr('disabled', 'disabled');
112 $f('type2', f).attr('disabled', 'disabled'); 115 $f('type2', f).attr('disabled', 'disabled');
113 - $f('startStation', f).attr('disabled', 'disabled');  
114 - $f('endStation', f).attr('disabled', 'disabled'); 116 + //$f('startStation', f).attr('disabled', 'disabled');
  117 + //$f('endStation', f).attr('disabled', 'disabled');
115 $f('mileageType', f).attr('disabled', 'disabled'); 118 $f('mileageType', f).attr('disabled', 'disabled');
116 $f('destroy', f).attr('disabled', 'disabled'); 119 $f('destroy', f).attr('disabled', 'disabled');
117 return f; 120 return f;
@@ -138,10 +141,12 @@ @@ -138,10 +141,12 @@
138 141
139 //烂班1 142 //烂班1
140 df1 = destroyForm(disabled_form(addTaskForm())); 143 df1 = destroyForm(disabled_form(addTaskForm()));
  144 +
  145 + var u_d_input = '<input name="upDown" type="hidden" value="'+nextSch.xlDir+'">';
141 //烂班2 146 //烂班2
142 - df2 = destroyForm(disabled_form(addTaskForm())); 147 + df2 = destroyForm(disabled_form(addTaskForm(u_d_input)));
143 //营运2 148 //营运2
144 - f2 = disabled_form(addTaskForm()); 149 + f2 = disabled_form(addTaskForm(u_d_input));
145 $('.domains', f2).empty(); 150 $('.domains', f2).empty();
146 151
147 152
@@ -149,16 +154,19 @@ @@ -149,16 +154,19 @@
149 $f('endStation', f1).val(eCode).trigger('change'); 154 $f('endStation', f1).val(eCode).trigger('change');
150 //烂班1起点 155 //烂班1起点
151 $f('startStation', df1).val(eCode).trigger('change'); 156 $f('startStation', df1).val(eCode).trigger('change');
  157 +
  158 + //nextSch
  159 + var d_code = searchParallelStation($('#turnStationSelect>option:selected', topf).text());
152 //烂班2 160 //烂班2
153 - $f('startStation', df2).val(sch.zdzCode);  
154 - $f('endStation', df2).val(eCode);  
155 - $f('mileage', df2).val($f('mileage', df1).val()).trigger('input'); 161 + $f('startStation', df2).val(nextSch.qdzCode);
  162 + $f('endStation', df2).val(d_code).trigger('change');
  163 + //$f('mileage', df2).val($f('mileage', df1).val()).trigger('input');
156 $('[sch_id_inp]', df2).val(nextSch.id); 164 $('[sch_id_inp]', df2).val(nextSch.id);
157 //营运2 165 //营运2
158 - $f('startStation', f2).val(eCode);  
159 - $f('endStation', f2).val(sch.qdzCode);  
160 - $f('startDate',f2).val($f('endDate',f1).val());  
161 - $f('mileage', f2).val($f('mileage', f1).val()).trigger('input'); 166 + $f('startStation', f2).val(d_code).trigger('change');
  167 + $f('endStation', f2).val(nextSch.zdzCode);
  168 + //$f('startDate',f2).val($f('endDate',f1).val());
  169 + //$f('mileage', f2).val($f('mileage', f1).val()).trigger('input');
162 $('[sch_id_inp]', f2).val(nextSch.id); 170 $('[sch_id_inp]', f2).val(nextSch.id);
163 171
164 //set css 172 //set css
@@ -285,6 +293,18 @@ @@ -285,6 +293,18 @@
285 }); 293 });
286 return flag; 294 return flag;
287 } 295 }
  296 +
  297 +
  298 + //返回另一个走向对应的站点
  299 + function searchParallelStation(stationName) {
  300 + var routes = stationRoutes[nextSch.xlDir]
  301 + , len = routes.length;
  302 +
  303 + for (var i = 0; i < len; i++) {
  304 + if (routes[i].stationName == stationName)
  305 + return routes[i].stationCode;
  306 + }
  307 + }
288 })(); 308 })();
289 </script> 309 </script>
290 </div> 310 </div>
291 \ No newline at end of file 311 \ No newline at end of file
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/main.html
@@ -59,7 +59,7 @@ @@ -59,7 +59,7 @@
59 <div class="uk-form-row"> 59 <div class="uk-form-row">
60 <label class="uk-form-label">起点 </label> 60 <label class="uk-form-label">起点 </label>
61 <div class="uk-form-controls"> 61 <div class="uk-form-controls">
62 - <select name="startStation" ></select> 62 + <select name="startStation" required></select>
63 </div> 63 </div>
64 </div> 64 </div>
65 </div> 65 </div>
@@ -67,7 +67,7 @@ @@ -67,7 +67,7 @@
67 <div class="uk-form-row"> 67 <div class="uk-form-row">
68 <label class="uk-form-label">终点</label> 68 <label class="uk-form-label">终点</label>
69 <div class="uk-form-controls"> 69 <div class="uk-form-controls">
70 - <select name="endStation" ></select> 70 + <select name="endStation" required></select>
71 </div> 71 </div>
72 </div> 72 </div>
73 </div> 73 </div>
@@ -300,8 +300,10 @@ @@ -300,8 +300,10 @@
300 */ 300 */
301 function reCalcInputs_type() { 301 function reCalcInputs_type() {
302 var f = $(this).parents('.sub_task_form_v2'); 302 var f = $(this).parents('.sub_task_form_v2');
303 -  
304 - var routes = stationRoutes[sch.xlDir] 303 + var upDown = sch.xlDir;
  304 + if($('[name=upDown]', f).length>0)
  305 + upDown = $('[name=upDown]', f).val();
  306 + var routes = stationRoutes[upDown]
305 , lastCode = routes[routes.length - 1].stationCode 307 , lastCode = routes[routes.length - 1].stationCode
306 , opts = '', park_opts = ''; 308 , opts = '', park_opts = '';
307 //station options 309 //station options
@@ -374,7 +376,9 @@ @@ -374,7 +376,9 @@
374 upDown = inout_updown(zdzCode, sch); 376 upDown = inout_updown(zdzCode, sch);
375 break; 377 break;
376 default: 378 default:
377 - upDown = sch.xlDir 379 + upDown = sch.xlDir;
  380 + if($('[name=upDown]',f).length>0)
  381 + upDown = $('[name=upDown]',f).val();
378 } 382 }
379 383
380 //从站到场里获取数据 384 //从站到场里获取数据
@@ -572,22 +576,25 @@ @@ -572,22 +576,25 @@
572 if(!st_park_data) 576 if(!st_park_data)
573 return; 577 return;
574 var stp; 578 var stp;
575 - var qdSelect=$f('startStation', f)[0],zdSelect=$f('endStation', f)[0]; 579 + try{
  580 + var qdSelect=$f('startStation', f)[0],zdSelect=$f('endStation', f)[0];
576 581
577 - var qdzName=qdSelect.options[qdSelect.options.selectedIndex].text,  
578 - zdzName=zdSelect.options[zdSelect.options.selectedIndex].text,  
579 - type2 = $f('type2', f).val(); 582 + var qdzName=qdSelect.options[qdSelect.options.selectedIndex].text,
  583 + zdzName=zdSelect.options[zdSelect.options.selectedIndex].text,
  584 + type2 = $f('type2', f).val();
580 585
581 - if(type2!=2 && type2!=3)  
582 - return; 586 + if(type2!=2 && type2!=3)
  587 + return;
583 588
584 - $.each(st_park_data, function () {  
585 - if((type2==2 && this.stationName==qdzName && this.parkName==zdzName)  
586 - || (type2==3 && this.stationName==zdzName && this.parkName==qdzName)){  
587 - stp = this;  
588 - return false;  
589 - }  
590 - }); 589 + $.each(st_park_data, function () {
  590 + if((type2==2 && this.stationName==qdzName && this.parkName==zdzName)
  591 + || (type2==3 && this.stationName==zdzName && this.parkName==qdzName)){
  592 + stp = this;
  593 + return false;
  594 + }
  595 + });
  596 + }catch (e){
  597 + console.log(e);}
591 598
592 return stp; 599 return stp;
593 } 600 }
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/tzrc.html
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 <a href="" class="uk-modal-close uk-close"></a> 3 <a href="" class="uk-modal-close uk-close"></a>
4 <div class="uk-modal-header"> 4 <div class="uk-modal-header">
5 <h2>调整人车</h2></div> 5 <h2>调整人车</h2></div>
6 - <div class="uk-panel uk-panel-box uk-panel-box-primary"> 6 + <div class="uk-panel ct_search_panel">
7 <form class="uk-form uk-form-horizontal search-form"> 7 <form class="uk-form uk-form-horizontal search-form">
8 <div class="uk-grid"> 8 <div class="uk-grid">
9 <div class="uk-width-1-3"> 9 <div class="uk-width-1-3">
@@ -26,21 +26,23 @@ @@ -26,21 +26,23 @@
26 </form> 26 </form>
27 </div> 27 </div>
28 28
29 - <div class="ct_table_wrap ct_table_no_border tzrc-table-wrap" style="height: 300px;">  
30 - <div class="ct_table sch-tzrc-table">  
31 - <div class="ct_table_head">  
32 - <dl>  
33 - <dt><input type="checkbox" id="globalCheckBox" class="i-cbox" style="margin-top: 0px;">时间</dt>  
34 - <dt>车辆</dt>  
35 - <dt>驾驶员</dt>  
36 - <dt>售票员</dt>  
37 - </dl> 29 + <form class="uk-form">
  30 + <div class="ct_table_wrap ct_table_no_border tzrc-table-wrap" style="height: 340px;">
  31 + <div class="ct_table sch-tzrc-table">
  32 + <div class="ct_table_head">
  33 + <dl>
  34 + <dt><input type="checkbox" id="globalCheckBox" class="i-cbox" >时间</dt>
  35 + <dt>车辆</dt>
  36 + <dt>驾驶员</dt>
  37 + <dt>售票员</dt>
  38 + <dt>状态</dt>
  39 + </dl>
  40 + </div>
  41 + <div class="ct_table_body"></div>
38 </div> 42 </div>
39 - <div class="ct_table_body"></div>  
40 </div> 43 </div>
41 - </div>  
42 -  
43 - <form class="uk-form uk-form-horizontal tzrc_form" style="padding-top: 20px;border-top: 1px solid whitesmoke;"> 44 + </form>
  45 + <form class="uk-form uk-form-horizontal tzrc_form">
44 <div class="uk-grid"> 46 <div class="uk-grid">
45 <div class="uk-width-1-2"> 47 <div class="uk-width-1-2">
46 <div class="uk-form-row"> 48 <div class="uk-form-row">
@@ -77,7 +79,7 @@ @@ -77,7 +79,7 @@
77 </div> 79 </div>
78 <div class="uk-modal-footer uk-text-right" style="margin-bottom: -20px;"> 80 <div class="uk-modal-footer uk-text-right" style="margin-bottom: -20px;">
79 <button type="button" class="uk-button uk-modal-close">取消</button> 81 <button type="button" class="uk-button uk-modal-close">取消</button>
80 - <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> &nbsp;保存 82 + <button type="submit" class="uk-button uk-button-primary" ><i class="uk-icon-check"></i> &nbsp;保存
81 </button> 83 </button>
82 </div> 84 </div>
83 </form> 85 </form>
@@ -85,31 +87,38 @@ @@ -85,31 +87,38 @@
85 87
86 <script id="schedule-tzrc-table-temp" type="text/html"> 88 <script id="schedule-tzrc-table-temp" type="text/html">
87 {{each list as sch i}} 89 {{each list as sch i}}
88 - <dl data-id="{{sch.id}}"> 90 + <dl data-id="{{sch.id}}" {{if sch.status==0}}class="no_exec_sch_row"{{/if}}>
89 <dd> 91 <dd>
90 - <label>  
91 - <input type="checkbox" value=1 name="schCBox" class="i-cbox" style="margin-top: 0px;">  
92 - {{sch.dfsj}}  
93 - {{if sch.bcType == "out"}}  
94 - <span class="uk-badge uk-badge-success">出场</span>  
95 - {{else if sch.bcType == "in"}}  
96 - <span class="uk-badge uk-badge-warning">进场</span>  
97 - {{else if sch.bcType == "venting"}}  
98 - <span class="uk-badge uk-badge-danger">直放</span>  
99 - {{else if sch.bcType == "major"}}  
100 - <span class="uk-badge uk-badge-danger">放站</span>  
101 - {{/if}}  
102 - {{if sch.sflj}}  
103 - <span class="uk-badge uk-badge-danger">临加</span>  
104 - {{/if}}  
105 - {{if sch.cTasks.length > 0}}  
106 - <span class="uk-badge uk-badge-notification">{{sch.cTasks.length}}</span>  
107 - {{/if}}  
108 - </label> 92 + <input type="checkbox" value=1 name="schCBox" class="i-cbox" >
  93 + {{sch.dfsj}}
  94 + {{if sch.bcType == "out"}}
  95 + <span class="uk-badge uk-badge-success">出场</span>
  96 + {{else if sch.bcType == "in"}}
  97 + <span class="uk-badge uk-badge-warning">进场</span>
  98 + {{else if sch.bcType == "venting"}}
  99 + <span class="uk-badge uk-badge-danger">直放</span>
  100 + {{else if sch.bcType == "major"}}
  101 + <span class="uk-badge uk-badge-danger">放站</span>
  102 + {{/if}}
  103 + {{if sch.sflj}}
  104 + <span class="uk-badge uk-badge-danger">临加</span>
  105 + {{/if}}
  106 + {{if sch.cTasks.length > 0}}
  107 + <span class="uk-badge uk-badge-notification">{{sch.cTasks.length}}</span>
  108 + {{/if}}
109 </dd> 109 </dd>
110 <dd>{{sch.clZbh}}</dd> 110 <dd>{{sch.clZbh}}</dd>
111 <dd>{{sch.jGh}}/{{sch.jName}}</dd> 111 <dd>{{sch.jGh}}/{{sch.jName}}</dd>
112 <dd>{{sch.sGh}}/{{sch.sName}}</dd> 112 <dd>{{sch.sGh}}/{{sch.sName}}</dd>
  113 + <dd>
  114 + {{if sch.status==2}}
  115 + <span class="ct_zt_yzx">已执行</span>
  116 + {{else if sch.status==1}}
  117 + <span class="ct_zt_zzzx">正在执行</span>
  118 + {{else if sch.status==-1}}
  119 + <span class="ct_zt_lb">烂班</span>
  120 + {{/if}}
  121 + </dd>
113 </dl> 122 </dl>
114 {{/each}} 123 {{/each}}
115 </script> 124 </script>
@@ -151,17 +160,21 @@ @@ -151,17 +160,21 @@
151 $('.tzrc-table-wrap', modal).perfectScrollbar('update'); 160 $('.tzrc-table-wrap', modal).perfectScrollbar('update');
152 }); 161 });
153 162
154 - $(modal).on('click', '.sch-tzrc-table .ct_table_body dl input[type=checkbox]', function () {  
155 - if ($(this).attr('disabled')) return;  
156 - var dl = $(this).parents('dl');  
157 - if (this.checked) {  
158 - dl.addClass('active'); 163 + $(modal).on('click', '.sch-tzrc-table .ct_table_body dl', function () {
  164 + var cbox = $('input[type=checkbox]',this)[0];
  165 + //var active = $();
  166 + if(!$(this).hasClass('active')){
  167 + $(this).addClass('active');
  168 + cbox.checked = true;
159 var lineCode = $('[name=lineSelect]', modal).val(); 169 var lineCode = $('[name=lineSelect]', modal).val();
160 - var sch = gb_schedule_table.findScheduleByLine(lineCode)[dl.data('id')]; 170 + var sch = gb_schedule_table.findScheduleByLine(lineCode)[$(this).data('id')];
161 171
162 writeSch2Form(sch); 172 writeSch2Form(sch);
163 - } else  
164 - dl.removeClass('active'); 173 + }
  174 + else{
  175 + $(this).removeClass('active');
  176 + cbox.checked = false;
  177 + }
165 }); 178 });
166 179
167 //默认选中项 180 //默认选中项
@@ -191,18 +204,16 @@ @@ -191,18 +204,16 @@
191 //}); 204 //});
192 205
193 //submit 206 //submit
194 - var f = $('form.tzrc_form', modal).formValidation({  
195 - framework: 'uikit',  
196 - locale: 'zh_CN'  
197 - });  
198 - f.on('success.form.fv', function (e) {  
199 - e.preventDefault();  
200 - var param = $(this).serializeJSON();  
201 - var data = []; 207 + var f = $('form.tzrc_form', modal);
  208 + f.on('submit', function (e) {
  209 + e.stopPropagation();
  210 +
202 var checkeds = $('.sch-tzrc-table .ct_table_body input[type=checkbox]:checked', modal); 211 var checkeds = $('.sch-tzrc-table .ct_table_body input[type=checkbox]:checked', modal);
203 if (checkeds.length == 0) 212 if (checkeds.length == 0)
204 return notify_err('请选中要调整的班次'); 213 return notify_err('请选中要调整的班次');
205 214
  215 + var param = $(this).serializeJSON();
  216 + var data = [];
206 var schId; 217 var schId;
207 $.each(checkeds, function () { 218 $.each(checkeds, function () {
208 schId = $(this).parents('dl').data('id'); 219 schId = $(this).parents('dl').data('id');
@@ -213,6 +224,7 @@ @@ -213,6 +224,7 @@
213 clZbh: param.clZbh 224 clZbh: param.clZbh
214 }); 225 });
215 }); 226 });
  227 +
216 gb_common.$post('/realSchedule/multi_tzrc', { 228 gb_common.$post('/realSchedule/multi_tzrc', {
217 cpcsJson: JSON.stringify(data) 229 cpcsJson: JSON.stringify(data)
218 }, function (rs) { 230 }, function (rs) {
@@ -222,6 +234,7 @@ @@ -222,6 +234,7 @@
222 notify_succ('调整人车成功'); 234 notify_succ('调整人车成功');
223 } 235 }
224 }); 236 });
  237 + return false;
225 }); 238 });
226 }); 239 });
227 240
@@ -235,11 +248,28 @@ @@ -235,11 +248,28 @@
235 248
236 //全选 249 //全选
237 $('#globalCheckBox', modal).on('click', function () { 250 $('#globalCheckBox', modal).on('click', function () {
  251 + clearCheckAll();
238 var status = this.checked; 252 var status = this.checked;
239 - $('input[name=schCBox]', modal).each(function () {  
240 - this.checked = status;  
241 - }); 253 + if(status){
  254 + var id;
  255 + $('.no_exec_sch_row', modal).each(function () {
  256 + $(this).addClass('active');
  257 + $('input[type=checkbox]',this)[0].checked = true;
  258 + id = $(this).data('id');
  259 + });
  260 +
  261 + var lineCode = $('[name=lineSelect]', modal).val();
  262 + var sch = gb_schedule_table.findScheduleByLine(lineCode)[id];
  263 + writeSch2Form(sch);
  264 + }
242 }); 265 });
  266 +
  267 + function clearCheckAll() {
  268 + $('.sch-tzrc-table .ct_table_body>dl', modal).each(function () {
  269 + $(this).removeClass('active');
  270 + $('input[type=checkbox]',this)[0].checked = false;
  271 + });
  272 + }
243 })(); 273 })();
244 </script> 274 </script>
245 </div> 275 </div>
src/main/resources/static/real_control_v2/js/common.js
@@ -112,7 +112,7 @@ var gb_common = (function () { @@ -112,7 +112,7 @@ var gb_common = (function () {
112 }); 112 });
113 }; 113 };
114 114
115 - var errorHead = '<span style="color:red;">服务器出现异常:</span>'; 115 + var errorHead = '<span style="color:red;">异常:</span>';
116 116
117 function successHandle(json, handle) { 117 function successHandle(json, handle) {
118 var status = json.status; 118 var status = json.status;
src/main/resources/static/real_control_v2/js/main.js
@@ -169,8 +169,8 @@ var disabled_submit_btn = function (form) { @@ -169,8 +169,8 @@ var disabled_submit_btn = function (form) {
169 function showUpdateDescription() { 169 function showUpdateDescription() {
170 //更新说明 170 //更新说明
171 var updateDescription = { 171 var updateDescription = {
172 - date: '2017-07-26',  
173 - text: '<h5>1、修复一个临时性的小问题,这个问题导致26号上午,起点站和第2站缓冲区重叠的几条线路发不出去!</h5>' 172 + date: '2017-08-13',
  173 + text: '<h5>1、修复了 “子任务-区间调头” 当上下行里程不等时,站间距公里提示错误的问题!</h5>'
174 }; 174 };
175 175
176 var storage = window.localStorage 176 var storage = window.localStorage
src/main/resources/static/real_control_v2/js/utils/svg_chart.js
@@ -19,6 +19,12 @@ var gb_svg_chart = (function () { @@ -19,6 +19,12 @@ var gb_svg_chart = (function () {
19 'svg-wrap': 'line' 19 'svg-wrap': 'line'
20 } 20 }
21 21
  22 + //站点间隔 线路编码 -> space
  23 + var circle_spaces={};
  24 + //var circle_space;
  25 + //是否启用动画
  26 + var animation = true;
  27 +
22 var calc_text_y = function (t) { 28 var calc_text_y = function (t) {
23 return (chart_height - (chart_height / t_max_size * t.length)) / 2 + 5; 29 return (chart_height - (chart_height / t_max_size * t.length)) / 2 + 5;
24 }, 30 },
@@ -43,7 +49,8 @@ var gb_svg_chart = (function () { @@ -43,7 +49,8 @@ var gb_svg_chart = (function () {
43 * @param enableAttr 是否启用配置 49 * @param enableAttr 是否启用配置
44 */ 50 */
45 var draw_line = function (lineCode, wrap, enableAttr) { 51 var draw_line = function (lineCode, wrap, enableAttr) {
46 - wraps[lineCode+'_'+suffixs[wrap.attr('class')]]=wrap; 52 + var wrapId = lineCode+'_'+suffixs[wrap.attr('class')];
  53 + wraps[wrapId]=wrap;
47 //环线 54 //环线
48 var loopLine = gb_data_basic.isLoopLine(lineCode); 55 var loopLine = gb_data_basic.isLoopLine(lineCode);
49 56
@@ -84,6 +91,7 @@ var gb_svg_chart = (function () { @@ -84,6 +91,7 @@ var gb_svg_chart = (function () {
84 return cx(d, i) - 8; 91 return cx(d, i) - 8;
85 }; 92 };
86 93
  94 + circle_spaces[wrapId] = (w - (x_padd * 2)) / len;
87 //add svg dom 95 //add svg dom
88 var svg = d3.select(wrap[0]).append('svg') 96 var svg = d3.select(wrap[0]).append('svg')
89 .classed({ 97 .classed({
@@ -189,11 +197,17 @@ var gb_svg_chart = (function () { @@ -189,11 +197,17 @@ var gb_svg_chart = (function () {
189 } 197 }
190 return circle; 198 return circle;
191 }, 199 },
192 - gx = function (gps, svg) { 200 + gx = function (gps, svg, wrapId) {
193 var circle = get_circle(gps.stopNo + '_' + gps.upDown, svg); 201 var circle = get_circle(gps.stopNo + '_' + gps.upDown, svg);
194 if (!circle) return -100; 202 if (!circle) return -100;
195 203
196 - return circle.attr('cx') - 16.5; 204 + var x = circle.attr('cx') - 16.5,
  205 + s = circle_spaces[wrapId] / 2;
  206 + // console.log('ss', gps.lineId + '=' + s);
  207 + //s = 5;
  208 + if(gps['instation']==0)
  209 + x = (gps['upDown']==0?x+s:x-s);
  210 + return x;
197 }, 211 },
198 gy = function (gps, svg) { 212 gy = function (gps, svg) {
199 var circle = get_circle(gps.stopNo + '_' + gps.upDown, svg); 213 var circle = get_circle(gps.stopNo + '_' + gps.upDown, svg);
@@ -233,10 +247,13 @@ var gb_svg_chart = (function () { @@ -233,10 +247,13 @@ var gb_svg_chart = (function () {
233 gps_key = function (d) { 247 gps_key = function (d) {
234 return d.deviceId; 248 return d.deviceId;
235 }, 249 },
236 - gps_update_point = function (e, svg) {  
237 - var x;  
238 - e.transition().attr('x', function (d) {  
239 - x = gx(d, svg); 250 + gps_update_point = function (e, svg, wrapId) {
  251 + var x,e1;
  252 + e1 = e;
  253 + if(animation)
  254 + e1 = e.transition();
  255 + e1.attr('x', function (d) {
  256 + x = gx(d, svg, wrapId);
240 if(x == -100) 257 if(x == -100)
241 $(this).css('transition-duration', 0).hide(); 258 $(this).css('transition-duration', 0).hide();
242 else 259 else
@@ -319,12 +336,15 @@ var gb_svg_chart = (function () { @@ -319,12 +336,15 @@ var gb_svg_chart = (function () {
319 //rect 336 //rect
320 var rects = gps_cont.selectAll('rect').data(data, gps_key); 337 var rects = gps_cont.selectAll('rect').data(data, gps_key);
321 rects.enter().append('rect').attr('_id', rct_id); 338 rects.enter().append('rect').attr('_id', rct_id);
322 - gps_update_point(rects, svg); 339 +
  340 + //lineCode+'_'+suffixs[wrap.attr('class')]
  341 + var wrapId = $(svg).data('code') + '_' + suffixs[$(svg).parent().attr('class')];
  342 + gps_update_point(rects, svg, wrapId);
323 //text 343 //text
324 var ts = gps_cont.selectAll('text').data(data, gps_key); 344 var ts = gps_cont.selectAll('text').data(data, gps_key);
325 ts.enter().append('text').attr('_id', tx_id); 345 ts.enter().append('text').attr('_id', tx_id);
326 ts.text(g_text) 346 ts.text(g_text)
327 - gps_update_point(ts, svg); 347 + gps_update_point(ts, svg, wrapId);
328 }; 348 };
329 349
330 var marker_clusterer = function (svg, lineCode) { 350 var marker_clusterer = function (svg, lineCode) {
@@ -405,6 +425,12 @@ var gb_svg_chart = (function () { @@ -405,6 +425,12 @@ var gb_svg_chart = (function () {
405 draw_line: draw_line, 425 draw_line: draw_line,
406 setGps: setGps, 426 setGps: setGps,
407 deviceOffline: deviceOffline, 427 deviceOffline: deviceOffline,
408 - refreshByVisible: refreshByVisible 428 + refreshByVisible: refreshByVisible,
  429 + disabledAnimation: function () {
  430 + animation = false;
  431 + },
  432 + enabledAnimation: function () {
  433 + animation = true;
  434 + }
409 }; 435 };
410 })(); 436 })();