Commit 60d9da6bada4ceae9e34e8100e30f4d42997970b

Authored by 廖磊
2 parents c980ab0c 1b849a09

Merge branch 'minhang' of 192.168.168.201:panzhaov5/bsth_control into

minhang
Showing 72 changed files with 1374 additions and 796 deletions
src/main/java/com/bsth/controller/realcontrol/RealChartsController.java
... ... @@ -3,6 +3,7 @@ package com.bsth.controller.realcontrol;
3 3 import com.bsth.service.realcontrol.RealChartsService;
4 4 import com.bsth.service.realcontrol.dto.CarOutRate;
5 5 import com.bsth.service.realcontrol.dto.DeviceOnlineRate;
  6 +import com.bsth.service.realcontrol.dto.ScheduleExecRate;
6 7 import com.bsth.service.realcontrol.dto.StratEndPunctualityRate;
7 8 import org.springframework.beans.factory.annotation.Autowired;
8 9 import org.springframework.web.bind.annotation.RequestMapping;
... ... @@ -32,13 +33,18 @@ public class RealChartsController {
32 33 return realChartsService.carOutRate(month, idx);
33 34 }
34 35  
35   - @RequestMapping("stratEndPunctualityRate")
  36 +/* @RequestMapping("stratEndPunctualityRate")
36 37 public List<StratEndPunctualityRate> stratEndPunctualityRate(@RequestParam String idx, @RequestParam String month){
37 38 return realChartsService.stratEndPunctualityRate(month, idx);
38   - }
  39 + }*/
39 40  
40 41 @RequestMapping("sePunctualityRateLine")
41 42 public List<StratEndPunctualityRate> sePunctualityRateLine(@RequestParam String idx, @RequestParam String month){
42 43 return realChartsService.sePunctualityRateLine(month, idx);
43 44 }
  45 +
  46 + @RequestMapping("scheduleExecRates")
  47 + public List<ScheduleExecRate> scheduleExecRates(@RequestParam String idx, @RequestParam String date){
  48 + return realChartsService.scheduleExecRates(date, idx);
  49 + }
44 50 }
... ...
src/main/java/com/bsth/controller/schedule/TTInfoDetailController.java
... ... @@ -116,6 +116,7 @@ public class TTInfoDetailController extends BaseController&lt;TTInfoDetail, Long&gt; {
116 116 if (sheet.getRows() == 0 || sheet.getColumns() == 0) { // 工作区是否为空
117 117 rtn.put("status", ResponseCode.ERROR);
118 118 rtn.put("msg", String.format("%s 工作区没有数据!", sheetname));
  119 + return rtn;
119 120 } else {
120 121 if (sheet.getRows() <= 1 || sheet.getColumns() <= 1) {
121 122 rtn.put("status", ResponseCode.ERROR);
... ... @@ -147,11 +148,11 @@ public class TTInfoDetailController extends BaseController&lt;TTInfoDetail, Long&gt; {
147 148 List<StationRoute> stationRouteList = (List<StationRoute>) stationRouteService.list(p1);
148 149 if (CollectionUtils.isEmpty(stationRouteList)) {
149 150 rtn.put("status", ResponseCode.ERROR);
150   - rtn.put("msg", String.format("第1行,第%d列数据在%s站点路由中不是起点站", i + 1, linename));
  151 + rtn.put("msg", String.format("第1行,第%d列数据%s在%s站点路由中不是起点站", i + 1, cell_con.trim(), linename));
151 152 return rtn;
152 153 } else if (stationRouteList.size() > 1) {
153 154 rtn.put("status", ResponseCode.ERROR);
154   - rtn.put("msg", String.format("第1行,第%d列数据在%s站点路由中上下行都是起点站", i + 1, linename));
  155 + rtn.put("msg", String.format("第1行,第%d列数据%s在%s站点路由中上下行都是起点站", i + 1, cell_con.trim(), linename));
155 156 return rtn;
156 157 }
157 158 }
... ... @@ -363,6 +364,7 @@ public class TTInfoDetailController extends BaseController&lt;TTInfoDetail, Long&gt; {
363 364  
364 365 ttInfoDetailService.fileDataImport(
365 366 new File(filename + "_temp.xls"),
  367 + (String) form.get("sheetname"),
366 368 (String) form.get("xlname"),
367 369 (String) form.get("ttname"),
368 370 tccname
... ...
src/main/java/com/bsth/data/arrival/ArrivalData_GPS.java
... ... @@ -50,8 +50,8 @@ public class ArrivalData_GPS implements CommandLineRunner{
50 50  
51 51 @Override
52 52 public void run(String... arg0) throws Exception {
53   - logger.info("ArrivalData_GPS,50,10 @11-11");
54   - //Application.mainServices.scheduleWithFixedDelay(dataLoaderThread, 50, 10, TimeUnit.SECONDS);
  53 + logger.info("ArrivalData_GPS,30,10");
  54 + //Application.mainServices.scheduleWithFixedDelay(dataLoaderThread, 40, 10, TimeUnit.SECONDS);
55 55 }
56 56  
57 57 @Component
... ...
src/main/java/com/bsth/data/schedule/SchAttrCalculator.java
... ... @@ -51,7 +51,7 @@ public class SchAttrCalculator {
51 51  
52 52  
53 53 if(sch.getFcsj().compareTo(conf.getStartOpt()) < 0){
54   - sch.setFcsjAll(sch.getFcsjT() + DAY_TIME);
  54 + sch.setFcsjAll(fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr()+sch.getFcsj()) + DAY_TIME);
55 55 }
56 56  
57 57 sch.setRealExecDate(fmtyyyyMMdd.print(sch.getFcsjT()));
... ...
src/main/java/com/bsth/entity/schedule/SchedulePlan.java
... ... @@ -32,12 +32,22 @@ public class SchedulePlan {
32 32 @ManyToOne(optional = false, cascade = CascadeType.DETACH, fetch = FetchType.LAZY)
33 33 private Line xl;
34 34 /** 关联的时刻表/模版 */
  35 + // TODO:这个字段之后就不用了
35 36 @ManyToOne(optional = false, cascade = CascadeType.DETACH, fetch = FetchType.LAZY)
36 37 private TTInfo ttInfo;
37 38 /** TODO:关联的排班规则(这里暂时改成可以不关联规则,直接生成排班) */
38 39 @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
39 40 private ScheduleRule1 scheduleRule1;
40 41  
  42 + // TODO: 新字段,测试完后删除旧的字段
  43 +
  44 + /** 使用的时刻表名字列表(用逗号连接) */
  45 + private String ttInfoNames;
  46 + /** 使用的时刻表id列表(用逗号连接) */
  47 + private String ttInfoId;
  48 + /** 使用的规则1列表(用逗号连接) */
  49 + private String rule1Ids;
  50 +
41 51 /** 排班计划的开始时间 */
42 52 @Column(nullable = false)
43 53 private Date scheduleFromTime;
... ... @@ -150,4 +160,28 @@ public class SchedulePlan {
150 160 public void setUpdateDate(Date updateDate) {
151 161 this.updateDate = updateDate;
152 162 }
  163 +
  164 + public String getTtInfoNames() {
  165 + return ttInfoNames;
  166 + }
  167 +
  168 + public void setTtInfoNames(String ttInfoNames) {
  169 + this.ttInfoNames = ttInfoNames;
  170 + }
  171 +
  172 + public String getTtInfoId() {
  173 + return ttInfoId;
  174 + }
  175 +
  176 + public void setTtInfoId(String ttInfoId) {
  177 + this.ttInfoId = ttInfoId;
  178 + }
  179 +
  180 + public String getRule1Ids() {
  181 + return rule1Ids;
  182 + }
  183 +
  184 + public void setRule1Ids(String rule1Ids) {
  185 + this.rule1Ids = rule1Ids;
  186 + }
153 187 }
... ...
src/main/java/com/bsth/entity/schedule/SchedulePlanInfo.java
... ... @@ -121,6 +121,13 @@ public class SchedulePlanInfo {
121 121 @Column(nullable = false)
122 122 private String bcType;
123 123  
  124 + // 重要的新增字段
  125 + /** 关联的时刻表id */
  126 + private Long ttInfo;
  127 + /** 关联的时刻表名字 */
  128 + private String ttInfoName;
  129 +
  130 +
124 131 /** 创建人 */
125 132 @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
126 133 private SysUser createBy;
... ... @@ -233,6 +240,11 @@ public class SchedulePlanInfo {
233 240 this.jhlc = ttInfoDetail.getJhlc(); // 计划里程
234 241 this.bcsj = ttInfoDetail.getBcsj(); // 班次时间
235 242  
  243 + // 使用的时刻表id
  244 + this.ttInfo = ttInfoDetail.getTtinfo().getId();
  245 + // 使用的时刻表名字
  246 + this.ttInfoName = ttInfoDetail.getTtinfo().getName();
  247 +
236 248 }
237 249  
238 250  
... ... @@ -555,4 +567,20 @@ public class SchedulePlanInfo {
555 567 public void setSchedulePlan(SchedulePlan schedulePlan) {
556 568 this.schedulePlan = schedulePlan;
557 569 }
  570 +
  571 + public Long getTtInfo() {
  572 + return ttInfo;
  573 + }
  574 +
  575 + public void setTtInfo(Long ttInfo) {
  576 + this.ttInfo = ttInfo;
  577 + }
  578 +
  579 + public String getTtInfoName() {
  580 + return ttInfoName;
  581 + }
  582 +
  583 + public void setTtInfoName(String ttInfoName) {
  584 + this.ttInfoName = ttInfoName;
  585 + }
558 586 }
... ...
src/main/java/com/bsth/entity/search/PredicatesBuilder.java
1 1 package com.bsth.entity.search;
2 2  
  3 +import org.joda.time.DateTime;
  4 +
3 5 import javax.persistence.criteria.CriteriaBuilder;
4 6 import javax.persistence.criteria.Path;
5 7 import javax.persistence.criteria.Predicate;
... ... @@ -27,7 +29,29 @@ public class PredicatesBuilder {
27 29 }
28 30  
29 31 public static Predicate eq(CriteriaBuilder cb,Path<?> expression, Object object){
30   - return cb.equal(expression, object);
  32 + Class<?> leftType = expression.getJavaType();
  33 + Class<?> rightType = object.getClass();
  34 +
  35 + if (Number.class.isAssignableFrom(leftType) &&
  36 + (Number.class.isAssignableFrom(rightType) || String.class.isAssignableFrom(rightType))) { // Number == Number/String
  37 + return cb.equal(expression, object);
  38 + } else if (String.class.isAssignableFrom(leftType) &&
  39 + (String.class.isAssignableFrom(rightType) || Number.class.isAssignableFrom(rightType))) { // String == String/Number
  40 + return cb.equal(expression, object);
  41 + } else if (Boolean.class.isAssignableFrom(leftType) &&
  42 + Boolean.class.isAssignableFrom(rightType)) {
  43 + return cb.equal(expression, object);
  44 + } else if (Date.class.isAssignableFrom(leftType) &&
  45 + Date.class.isAssignableFrom(rightType)) { // Date == Date
  46 + return cb.equal(expression, object);
  47 + } else if (Date.class.isAssignableFrom(leftType) &&
  48 + String.class.isAssignableFrom(rightType)) { // Date == String
  49 + DateTime dateTime = new DateTime(object);
  50 + return cb.equal(expression, dateTime.toDate());
  51 + } else {
  52 + throw new RuntimeException("eq 不支持类型组合:" + expression.getJavaType() + "==" + object.getClass());
  53 + }
  54 +
31 55 }
32 56  
33 57 public static Predicate ne(CriteriaBuilder cb,Path<?> expression, Object object){
... ... @@ -47,15 +71,19 @@ public class PredicatesBuilder {
47 71 Class<?> leftType = expression.getJavaType();
48 72 Class<?> rightType = object.getClass();
49 73  
50   - if (leftType.isAssignableFrom(Number.class) &&
51   - rightType.isAssignableFrom(Number.class)) { // 判定是否是Number类型的子类
  74 + if (Number.class.isAssignableFrom(leftType) &&
  75 + (Number.class.isAssignableFrom(rightType) || String.class.isAssignableFrom(rightType))) { // Number >= Number/String
52 76 return cb.ge((Path<Number>) expression, (Number) object);
53   - } else if (leftType.isAssignableFrom(String.class) &&
54   - rightType.isAssignableFrom(String.class)) { // 判定是否是String类型的子类
  77 + } else if (String.class.isAssignableFrom(leftType) &&
  78 + (String.class.isAssignableFrom(rightType) || Number.class.isAssignableFrom(rightType))) { // String >= String/Number
55 79 return cb.greaterThanOrEqualTo((Path<String>) expression, (String) object);
56   - } else if (leftType.isAssignableFrom(Date.class) &&
57   - rightType.isAssignableFrom(Date.class)) { // 判定是否是Date类型的子类
  80 + } else if (Date.class.isAssignableFrom(leftType) &&
  81 + Date.class.isAssignableFrom(rightType)) { // Date >= Date
58 82 return cb.greaterThanOrEqualTo((Path<Date>) expression, (Date) object);
  83 + } else if (Date.class.isAssignableFrom(leftType) &&
  84 + String.class.isAssignableFrom(rightType)) { // Date >= String
  85 + DateTime dateTime = new DateTime(object);
  86 + return cb.greaterThanOrEqualTo((Path<Date>) expression, dateTime.toDate());
59 87 } else {
60 88 throw new RuntimeException("ge 不支持类型组合:" + expression.getJavaType() + ">=" + object.getClass());
61 89 }
... ... @@ -74,17 +102,22 @@ public class PredicatesBuilder {
74 102 Class<?> leftType = expression.getJavaType();
75 103 Class<?> rightType = object.getClass();
76 104  
77   - if (leftType.isAssignableFrom(Number.class) &&
78   - rightType.isAssignableFrom(Number.class)) { // 判定是否是Number类型的子类
  105 +
  106 + if (Number.class.isAssignableFrom(leftType) &&
  107 + (Number.class.isAssignableFrom(rightType) || String.class.isAssignableFrom(rightType))) { // Number <= Number/String
79 108 return cb.le((Path<Number>) expression, (Number) object);
80   - } else if (leftType.isAssignableFrom(String.class) &&
81   - rightType.isAssignableFrom(String.class)) { // 判定是否是String类型的子类
  109 + } else if (String.class.isAssignableFrom(leftType) &&
  110 + (String.class.isAssignableFrom(rightType) || Number.class.isAssignableFrom(rightType))) { // String <= String/Number
82 111 return cb.lessThanOrEqualTo((Path<String>) expression, (String) object);
83   - } else if (leftType.isAssignableFrom(Date.class) &&
84   - rightType.isAssignableFrom(Date.class)) { // 判定是否是Date类型的子类
  112 + } else if (Date.class.isAssignableFrom(leftType) &&
  113 + Date.class.isAssignableFrom(rightType)) { // Date <= Date
85 114 return cb.lessThanOrEqualTo((Path<Date>) expression, (Date) object);
  115 + } else if (Date.class.isAssignableFrom(leftType) &&
  116 + String.class.isAssignableFrom(rightType)) { // Date <= String
  117 + DateTime dateTime = new DateTime(object);
  118 + return cb.lessThanOrEqualTo((Path<Date>) expression, dateTime.toDate());
86 119 } else {
87   - throw new RuntimeException("ge 不支持类型组合:" + expression.getJavaType() + ">=" + object.getClass());
  120 + throw new RuntimeException("le 不支持类型组合:" + expression.getJavaType() + "<=" + object.getClass());
88 121 }
89 122 }
90 123  
... ...
src/main/java/com/bsth/service/realcontrol/RealChartsService.java
... ... @@ -2,6 +2,7 @@ package com.bsth.service.realcontrol;
2 2  
3 3 import com.bsth.service.realcontrol.dto.CarOutRate;
4 4 import com.bsth.service.realcontrol.dto.DeviceOnlineRate;
  5 +import com.bsth.service.realcontrol.dto.ScheduleExecRate;
5 6 import com.bsth.service.realcontrol.dto.StratEndPunctualityRate;
6 7  
7 8 import java.util.List;
... ... @@ -15,7 +16,9 @@ public interface RealChartsService {
15 16  
16 17 List<CarOutRate> carOutRate(String month, String idx);
17 18  
18   - List<StratEndPunctualityRate> stratEndPunctualityRate(String month, String idx);
  19 + /*List<StratEndPunctualityRate> stratEndPunctualityRate(String month, String idx);*/
19 20  
20 21 List<StratEndPunctualityRate> sePunctualityRateLine(String month, String idx);
  22 +
  23 + List<ScheduleExecRate> scheduleExecRates(String date, String idx);
21 24 }
... ...
src/main/java/com/bsth/service/realcontrol/dto/ScheduleExecRate.java 0 → 100644
  1 +package com.bsth.service.realcontrol.dto;
  2 +
  3 +/**
  4 + * 班次执行率DTO
  5 + * Created by panzhao on 2016/11/14.
  6 + */
  7 +public class ScheduleExecRate {
  8 +
  9 + private long id;
  10 + private String dfsj;
  11 + private String fcsjActual;
  12 + private String zdsj;
  13 + private String zdsjActual;
  14 + private int status;
  15 + private String lineCode;
  16 +
  17 + public long getId() {
  18 + return id;
  19 + }
  20 +
  21 + public void setId(long id) {
  22 + this.id = id;
  23 + }
  24 +
  25 + public String getDfsj() {
  26 + return dfsj;
  27 + }
  28 +
  29 + public void setDfsj(String dfsj) {
  30 + this.dfsj = dfsj;
  31 + }
  32 +
  33 + public String getFcsjActual() {
  34 + return fcsjActual;
  35 + }
  36 +
  37 + public void setFcsjActual(String fcsjActual) {
  38 + this.fcsjActual = fcsjActual;
  39 + }
  40 +
  41 + public String getZdsj() {
  42 + return zdsj;
  43 + }
  44 +
  45 + public void setZdsj(String zdsj) {
  46 + this.zdsj = zdsj;
  47 + }
  48 +
  49 + public String getZdsjActual() {
  50 + return zdsjActual;
  51 + }
  52 +
  53 + public void setZdsjActual(String zdsjActual) {
  54 + this.zdsjActual = zdsjActual;
  55 + }
  56 +
  57 + public int getStatus() {
  58 + return status;
  59 + }
  60 +
  61 + public void setStatus(int status) {
  62 + this.status = status;
  63 + }
  64 +
  65 + public String getLineCode() {
  66 + return lineCode;
  67 + }
  68 +
  69 + public void setLineCode(String lineCode) {
  70 + this.lineCode = lineCode;
  71 + }
  72 +}
... ...
src/main/java/com/bsth/service/realcontrol/dto/StratEndPunctualityRate.java
... ... @@ -10,17 +10,17 @@ public class StratEndPunctualityRate {
10 10  
11 11 private String lineCode;
12 12  
13   - private String nbbm;
14   -
15 13 //首班时间 06:00/06:01
16 14 private String startTime;
17 15  
18 16 //末班时间 20:30/20:31
19 17 private String endTime;
20 18  
21   - //末班真实执行日期
22   - private String etRealExecDate;
  19 + //上下行
  20 + private int updown;
23 21  
  22 + //真实执行日期
  23 + private String etRealExecDate;
24 24  
25 25 public String getDateStr() {
26 26 return dateStr;
... ... @@ -38,14 +38,6 @@ public class StratEndPunctualityRate {
38 38 this.lineCode = lineCode;
39 39 }
40 40  
41   - public String getNbbm() {
42   - return nbbm;
43   - }
44   -
45   - public void setNbbm(String nbbm) {
46   - this.nbbm = nbbm;
47   - }
48   -
49 41 public String getStartTime() {
50 42 return startTime;
51 43 }
... ... @@ -62,6 +54,14 @@ public class StratEndPunctualityRate {
62 54 this.endTime = endTime;
63 55 }
64 56  
  57 + public int getUpdown() {
  58 + return updown;
  59 + }
  60 +
  61 + public void setUpdown(int updown) {
  62 + this.updown = updown;
  63 + }
  64 +
65 65 public String getEtRealExecDate() {
66 66 return etRealExecDate;
67 67 }
... ...
src/main/java/com/bsth/service/realcontrol/impl/RealChartsServiceImpl.java
... ... @@ -4,10 +4,7 @@ import com.bsth.data.BasicData;
4 4 import com.bsth.data.LineConfigData;
5 5 import com.bsth.entity.realcontrol.LineConfig;
6 6 import com.bsth.service.realcontrol.RealChartsService;
7   -import com.bsth.service.realcontrol.dto.CarOutRate;
8   -import com.bsth.service.realcontrol.dto.DeviceOnlineRate;
9   -import com.bsth.service.realcontrol.dto.RealOnline;
10   -import com.bsth.service.realcontrol.dto.StratEndPunctualityRate;
  7 +import com.bsth.service.realcontrol.dto.*;
11 8 import com.bsth.util.db.DBUtils_MS;
12 9 import com.google.common.base.Splitter;
13 10 import org.apache.commons.lang3.StringUtils;
... ... @@ -37,7 +34,8 @@ public class RealChartsServiceImpl implements RealChartsService {
37 34 LineConfigData lineConfigData;
38 35  
39 36  
40   - private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd");
  37 + private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd")
  38 + ,fmtyyyyMMddHHmm = DateTimeFormat.forPattern("yyyy-MM-ddHH:mm");
41 39  
42 40 private final static long DAY_TIME = 1000 * 60 * 60 * 24L;
43 41 /**
... ... @@ -164,7 +162,7 @@ public class RealChartsServiceImpl implements RealChartsService {
164 162 * @param idx
165 163 * @return
166 164 */
167   - @Override
  165 +/* @Override
168 166 public List<StratEndPunctualityRate> stratEndPunctualityRate(String month, String idx) {
169 167 List<String> idArray = Splitter.on(",").splitToList(idx);
170 168 //拼接in语句
... ... @@ -208,7 +206,7 @@ public class RealChartsServiceImpl implements RealChartsService {
208 206 }
209 207 });
210 208 return list;
211   - }
  209 + }*/
212 210  
213 211 @Override
214 212 public List<StratEndPunctualityRate> sePunctualityRateLine(String month, String idx) {
... ... @@ -220,10 +218,7 @@ public class RealChartsServiceImpl implements RealChartsService {
220 218 }
221 219 inStr = " (" + inStr.substring(1) + ")";
222 220  
223   - String sql = "select SCHEDULE_DATE_STR,XL_BM, min(sj) as STARTDATE, max(sj) as ENDDATE " +
224   - "from (select SCHEDULE_DATE_STR,dfsj, concat_ws('/',dfsj, fcsj_actual) as sj,XL_BM from bsth_c_s_sp_info_real " +
225   - "where schedule_date_str like :month and bc_type='normal' and dfsj is not null and xl_bm in "+inStr+") t group by SCHEDULE_DATE_STR,XL_BM";
226   -
  221 + String sql = "select min(DFSJ) as STARTDATE,max(DFSJ) as ENDDATE,SCHEDULE_DATE_STR,XL_BM,XL_DIR,REAL_EXEC_DATE from (SELECT SCHEDULE_DATE_STR,concat_ws('_',concat_ws('/', dfsj, fcsj_actual),fcno) AS DFSJ,XL_BM,XL_DIR,REAL_EXEC_DATE FROM bsth_c_s_sp_info_real WHERE schedule_date_str LIKE :month AND bc_type = 'normal' AND dfsj IS NOT NULL AND xl_bm IN "+inStr+") t group by SCHEDULE_DATE_STR,XL_BM,XL_DIR,REAL_EXEC_DATE";
227 222 MapSqlParameterSource parameters = new MapSqlParameterSource();
228 223 parameters.addValue("month", month+"-%");
229 224  
... ... @@ -235,10 +230,11 @@ public class RealChartsServiceImpl implements RealChartsService {
235 230 obj.setDateStr(rs.getString("SCHEDULE_DATE_STR"));
236 231 obj.setStartTime(rs.getString("STARTDATE"));
237 232 obj.setEndTime(rs.getString("ENDDATE"));
238   - obj.setEtRealExecDate(obj.getDateStr());
  233 + obj.setUpdown(rs.getInt("XL_DIR"));
  234 + obj.setEtRealExecDate(rs.getString("REAL_EXEC_DATE"));
239 235  
240   - if(obj.getEndTime().length() == 11){
241   - //末班真实执行日期
  236 + if(obj.getEndTime().length() >= 11){
  237 + //末班真实执行日期,末班可能跨过12点。
242 238 LineConfig conf =lineConfigData.get(obj.getLineCode());
243 239 String fcsjActual=obj.getEndTime().split("/")[1];
244 240  
... ... @@ -247,7 +243,40 @@ public class RealChartsServiceImpl implements RealChartsService {
247 243 obj.setEtRealExecDate(fmtyyyyMMdd.print(fmtyyyyMMdd.parseMillis(obj.getEtRealExecDate()) + DAY_TIME));
248 244 }
249 245 }
  246 + return obj;
  247 + }
  248 + });
  249 + return list;
  250 + }
  251 +
  252 + @Override
  253 + public List<ScheduleExecRate> scheduleExecRates(String date, String idx) {
  254 + List<String> idArray = Splitter.on(",").splitToList(idx);
  255 + //拼接in语句
  256 + String inStr = "";
  257 + for (String code : idArray) {
  258 + inStr += (",'" + code+"'");
  259 + }
  260 + inStr = " (" + inStr.substring(1) + ")";
250 261  
  262 + String sql = "SELECT ID,DFSJ,FCSJ_ACTUAL,ZDSJ,ZDSJ_ACTUAL,`STATUS`,XL_BM FROM bsth_c_s_sp_info_real WHERE schedule_date_str=:date AND concat_ws('', real_exec_date, dfsj)<:cdate and xl_bm in "+inStr+" ORDER BY dfsj";
  263 +
  264 + MapSqlParameterSource parameters = new MapSqlParameterSource();
  265 + parameters.addValue("date", date);
  266 + parameters.addValue("cdate", fmtyyyyMMddHHmm.print(new Date().getTime()));
  267 +
  268 +
  269 + List<ScheduleExecRate> list = jdbcTemplate.query(sql, parameters, new RowMapper<ScheduleExecRate>() {
  270 + @Override
  271 + public ScheduleExecRate mapRow(ResultSet rs, int rowNum) throws SQLException {
  272 + ScheduleExecRate obj = new ScheduleExecRate();
  273 + obj.setId(rs.getLong("ID"));
  274 + obj.setDfsj(rs.getString("DFSJ"));
  275 + obj.setFcsjActual(rs.getString("FCSJ_ACTUAL"));
  276 + obj.setZdsj(rs.getString("ZDSJ"));
  277 + obj.setZdsjActual(rs.getString("ZDSJ_ACTUAL"));
  278 + obj.setStatus(rs.getInt("STATUS"));
  279 + obj.setLineCode(rs.getString("XL_BM"));
251 280 return obj;
252 281 }
253 282 });
... ...
src/main/java/com/bsth/service/schedule/SchedulePlanServiceImpl.java
... ... @@ -12,6 +12,7 @@ import com.bsth.service.schedule.rules.shiftloop.ScheduleResults_output;
12 12 import com.bsth.service.schedule.rules.shiftloop.ScheduleRule_input;
13 13 import com.bsth.service.schedule.rules.strategy.IStrategy;
14 14 import com.google.common.collect.Multimap;
  15 +import org.apache.commons.lang3.StringUtils;
15 16 import org.joda.time.DateTime;
16 17 import org.kie.api.KieBase;
17 18 import org.kie.api.runtime.KieSession;
... ... @@ -65,6 +66,7 @@ public class SchedulePlanServiceImpl extends BaseServiceImpl&lt;SchedulePlan, Long&gt;
65 66 KieSession session = kieBase.newKieSession();
66 67 // 设置gloable对象,在drl中通过别名使用
67 68 session.setGlobal("scheduleResult", scheduleResults_output);
  69 +
68 70 // 载入数据
69 71 session.insert(scheduleCalcuParam_input);
70 72 for (ScheduleRule_input scheduleRule_input : scheduleRule_inputs) {
... ... @@ -92,6 +94,7 @@ public class SchedulePlanServiceImpl extends BaseServiceImpl&lt;SchedulePlan, Long&gt;
92 94 Map<Long, EmployeeConfigInfo> employeeConfigMaps = strategy.getEmployeeConfigMaps(xl.getId()); // 人员配置对应的人员信息
93 95  
94 96 // 3-2、循环规则输出
  97 + Map<Long, String> ttInfoMap = new HashMap<>(); // 时刻表映射,id和名字
95 98 List<SchedulePlanInfo> schedulePlanInfos = new ArrayList<>();
96 99 for (ScheduleResult_output scheduleResult_output : scheduleResults_output.getResults()) {
97 100 // 车辆配置对应的车辆
... ... @@ -114,9 +117,13 @@ public class SchedulePlanServiceImpl extends BaseServiceImpl&lt;SchedulePlan, Long&gt;
114 117 employeeConfigInfoList,
115 118 schedulePlan);
116 119 schedulePlanInfos.add(schedulePlanInfo);
  120 + ttInfoMap.put(ttInfoDetail.getTtinfo().getId(), ttInfoDetail.getTtinfo().getName());
117 121 }
118 122 }
119 123  
  124 + schedulePlan.setTtInfoId(StringUtils.join(ttInfoMap.keySet(), ","));
  125 + schedulePlan.setTtInfoNames(StringUtils.join(ttInfoMap.values(), ","));
  126 +
120 127 // 3-2、保存生成的排班和明细
121 128 schedulePlan.getSchedulePlanInfoList().addAll(schedulePlanInfos); // 关联的排班明细信息
122 129 return super.save(schedulePlan);
... ...
src/main/java/com/bsth/service/schedule/TTInfoDetailService.java
... ... @@ -136,7 +136,7 @@ public interface TTInfoDetailService extends BaseService&lt;TTInfoDetail, Long&gt; {
136 136 String ttinfoname,
137 137 String tccname) throws Exception;
138 138  
139   - void fileDataImport(File file, String xlmc, String ttinfoname, String tccname) throws Exception;
  139 + void fileDataImport(File file, String sheetname, String xlmc, String ttinfoname, String tccname) throws Exception;
140 140  
141 141  
142 142 }
... ...
src/main/java/com/bsth/service/schedule/TTInfoDetailServiceImpl.java
... ... @@ -114,6 +114,7 @@ public class TTInfoDetailServiceImpl extends BaseServiceImpl&lt;TTInfoDetail, Long&gt;
114 114 return editInfo;
115 115 }
116 116  
  117 + @Override
117 118 /**
118 119 * 上传并导入数据,和DataImportExportService的同名方法有差别。
119 120 * @param datafile form上传文件
... ... @@ -128,12 +129,12 @@ public class TTInfoDetailServiceImpl extends BaseServiceImpl&lt;TTInfoDetail, Long&gt;
128 129 String tccname) throws Exception {
129 130 // 上传数据文件
130 131 File uploadFile = dataImportExportService.uploadFile(datafile);
131   - fileDataImport(uploadFile, xlmc, ttinfoname, tccname);
  132 + fileDataImport(uploadFile, "工作表1", xlmc, ttinfoname, tccname);
132 133  
133 134 }
134 135  
135 136 @Override
136   - public void fileDataImport(File uploadFile, String xlmc, String ttinfoname, String tccname) throws Exception {
  137 + public void fileDataImport(File uploadFile, String sheetname, String xlmc, String ttinfoname, String tccname) throws Exception {
137 138 // 1、上传数据文件
138 139 System.out.println("线路名称:" + xlmc);
139 140 System.out.println("时刻表名称:" + ttinfoname);
... ... @@ -162,6 +163,7 @@ public class TTInfoDetailServiceImpl extends BaseServiceImpl&lt;TTInfoDetail, Long&gt;
162 163 // 2.3、设定命名参数,用于指定数据文件,注意每个ktr必须都有以下指定的命名参数
163 164 trans.setParameterValue("injectktrfile", ktrFile2.getAbsolutePath()); // 注入元数据的ktr文件
164 165 trans.setParameterValue("filepath", uploadFile.getAbsolutePath()); // 指定导入数据文件的位置
  166 + trans.setParameterValue("sheetname", sheetname); // sheet工作区的名字
165 167 trans.setParameterValue("erroroutputdir", dataToolsProperties.getTransErrordir()); // ktr转换错误输出目录
166 168 trans.setParameterValue("xlname", xlmc); // 线路名称
167 169 trans.setParameterValue("ttinfoname", ttinfoname); // 时刻表名称
... ...
src/main/java/com/bsth/service/schedule/rules/strategy/IStrategyImpl.java
... ... @@ -21,6 +21,7 @@ import org.slf4j.Logger;
21 21 import org.slf4j.LoggerFactory;
22 22 import org.springframework.beans.factory.annotation.Autowired;
23 23 import org.springframework.stereotype.Service;
  24 +import org.springframework.util.CollectionUtils;
24 25  
25 26 import java.util.*;
26 27  
... ... @@ -50,8 +51,14 @@ public class IStrategyImpl implements IStrategy {
50 51  
51 52 @Override
52 53 public Line getLine(Integer xlId) {
53   - Line xl = lineService.findById(xlId); // 查找线路具体信息
54   - return xl;
  54 + Map<String, Object> param = new HashMap<>();
  55 + param.put("id_eq", xlId);
  56 + param.put("destroy_eq", 0); // 未撤销
  57 + List<Line> lines = (List<Line>) lineService.list(param);
  58 + if (CollectionUtils.isEmpty(lines)) {
  59 + throw new RuntimeException("线路找不到,可能已经撤销!");
  60 + }
  61 + return lines.get(0);
55 62 }
56 63  
57 64 @Override
... ...
src/main/resources/application-prod.properties
... ... @@ -6,7 +6,7 @@ spring.jpa.hibernate.ddl-auto= update
6 6 spring.jpa.hibernate.naming_strategy= org.hibernate.cfg.ImprovedNamingStrategy
7 7 #DATABASE
8 8 spring.jpa.database= MYSQL
9   -spring.jpa.show-sql= true
  9 +spring.jpa.show-sql= false
10 10 spring.datasource.driver-class-name= com.mysql.jdbc.Driver
11 11 spring.datasource.url= jdbc:mysql://192.168.168.171:3306/control?useUnicode=true&characterEncoding=utf-8&useSSL=false
12 12 spring.datasource.username= root
... ...
src/main/resources/datatools/ktrs/ttinfodetailDataInput.ktr
... ... @@ -554,6 +554,78 @@
554 554 </step>
555 555  
556 556 <step>
  557 + <name>&#x5339;&#x914d;&#x51fa;&#x573a;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</name>
  558 + <type>ScriptValueMod</type>
  559 + <description/>
  560 + <distribute>Y</distribute>
  561 + <custom_distribution/>
  562 + <copies>1</copies>
  563 + <partitioning>
  564 + <method>none</method>
  565 + <schema_name/>
  566 + </partitioning>
  567 + <compatible>N</compatible>
  568 + <optimizationLevel>9</optimizationLevel>
  569 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  570 + <jsScript_name>Script 1</jsScript_name>
  571 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var out_mileage&#x3b; &#x2f;&#x2f; &#x51fa;&#x573a;&#x8ba1;&#x5212;&#x91cc;&#x7a0b;&#xa;var out_time&#x3b; &#x2f;&#x2f; &#x51fa;&#x573a;&#x8ba1;&#x5212;&#x65f6;&#x95f4;&#xa;&#xa;if &#x28;sxx &#x3d;&#x3d; 0&#x29; &#x7b; &#x2f;&#x2f; &#x4e0a;&#x884c;&#xa; out_mileage &#x3d; up_out_mileage&#x3b;&#xa; out_time &#x3d; up_out_timer&#x3b;&#xa;&#x7d; else &#x7b; &#x2f;&#x2f; sxx &#x3d;&#x3d; 1 &#x4e0b;&#x884c;&#xa; out_mileage &#x3d; down_out_mileage&#x3b;&#xa; out_time &#x3d; down_out_timer&#x3b;&#xa;&#x7d;&#xa;&#xa;&#xa;&#xa;</jsScript_script>
  572 + </jsScript> </jsScripts> <fields> <field> <name>out_mileage</name>
  573 + <rename>out_mileage</rename>
  574 + <type>String</type>
  575 + <length>-1</length>
  576 + <precision>-1</precision>
  577 + <replace>N</replace>
  578 + </field> <field> <name>out_time</name>
  579 + <rename>out_time</rename>
  580 + <type>String</type>
  581 + <length>-1</length>
  582 + <precision>-1</precision>
  583 + <replace>N</replace>
  584 + </field> </fields> <cluster_schema/>
  585 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  586 + <xloc>336</xloc>
  587 + <yloc>862</yloc>
  588 + <draw>Y</draw>
  589 + </GUI>
  590 + </step>
  591 +
  592 + <step>
  593 + <name>&#x5339;&#x914d;&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</name>
  594 + <type>ScriptValueMod</type>
  595 + <description/>
  596 + <distribute>Y</distribute>
  597 + <custom_distribution/>
  598 + <copies>1</copies>
  599 + <partitioning>
  600 + <method>none</method>
  601 + <schema_name/>
  602 + </partitioning>
  603 + <compatible>N</compatible>
  604 + <optimizationLevel>9</optimizationLevel>
  605 + <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
  606 + <jsScript_name>Script 1</jsScript_name>
  607 + <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var parade_mileage&#x3b; &#x2f;&#x2f; &#x8fdb;&#x573a;&#x8ba1;&#x5212;&#x91cc;&#x7a0b;&#xa;var parade_time&#x3b; &#x2f;&#x2f; &#x8fdb;&#x573a;&#x8ba1;&#x5212;&#x65f6;&#x95f4;&#xa;&#xa;if &#x28;sxx2 &#x3d;&#x3d; 0&#x29; &#x7b; &#x2f;&#x2f; &#x4e0a;&#x884c;&#xa; parade_mileage &#x3d; up_in_mileage&#x3b;&#xa; parade_time &#x3d; up_in_timer&#x3b;&#xa;&#x7d; else &#x7b; &#x2f;&#x2f; sxx &#x3d;&#x3d; 1 &#x4e0b;&#x884c;&#xa; parade_mileage &#x3d; down_in_mileage&#x3b;&#xa; parade_time &#x3d; down_in_timer&#x3b;&#xa;&#x7d;&#xa;&#xa;&#xa;&#xa;</jsScript_script>
  608 + </jsScript> </jsScripts> <fields> <field> <name>parade_mileage</name>
  609 + <rename>parade_mileage</rename>
  610 + <type>String</type>
  611 + <length>-1</length>
  612 + <precision>-1</precision>
  613 + <replace>N</replace>
  614 + </field> <field> <name>parade_time</name>
  615 + <rename>parade_time</rename>
  616 + <type>String</type>
  617 + <length>-1</length>
  618 + <precision>-1</precision>
  619 + <replace>N</replace>
  620 + </field> </fields> <cluster_schema/>
  621 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  622 + <xloc>726</xloc>
  623 + <yloc>1005</yloc>
  624 + <draw>Y</draw>
  625 + </GUI>
  626 + </step>
  627 +
  628 + <step>
557 629 <name>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;&#xff0c;&#x7ebf;&#x8def;&#x540d;&#x5b57;&#xff0c;&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</name>
558 630 <type>DataGrid</type>
559 631 <description/>
... ... @@ -1115,7 +1187,7 @@
1115 1187 </fields>
1116 1188 <sheets>
1117 1189 <sheet>
1118   - <name>&#x5de5;&#x4f5c;&#x8868;1</name>
  1190 + <name/>
1119 1191 <startrow>0</startrow>
1120 1192 <startcol>0</startcol>
1121 1193 </sheet>
... ... @@ -1843,6 +1915,66 @@
1843 1915 </step>
1844 1916  
1845 1917 <step>
  1918 + <name>&#x67e5;&#x627e;&#x8fdb;&#x573a;&#x8d77;&#x70b9;&#x7ad9;&#x5173;&#x8054;&#x786e;&#x5b9a;&#x4e0a;&#x4e0b;&#x884c;</name>
  1919 + <type>DBLookup</type>
  1920 + <description/>
  1921 + <distribute>Y</distribute>
  1922 + <custom_distribution/>
  1923 + <copies>1</copies>
  1924 + <partitioning>
  1925 + <method>none</method>
  1926 + <schema_name/>
  1927 + </partitioning>
  1928 + <connection>bus_control_variable</connection>
  1929 + <cache>N</cache>
  1930 + <cache_load_all>N</cache_load_all>
  1931 + <cache_size>0</cache_size>
  1932 + <lookup>
  1933 + <schema/>
  1934 + <table>bsth_c_stationroute</table>
  1935 + <orderby/>
  1936 + <fail_on_multiple>N</fail_on_multiple>
  1937 + <eat_row_on_failure>N</eat_row_on_failure>
  1938 + <key>
  1939 + <name>xlid</name>
  1940 + <field>line</field>
  1941 + <condition>&#x3d;</condition>
  1942 + <name2/>
  1943 + </key>
  1944 + <key>
  1945 + <name>zdzname_calcu</name>
  1946 + <field>station_name</field>
  1947 + <condition>&#x3d;</condition>
  1948 + <name2/>
  1949 + </key>
  1950 + <key>
  1951 + <name>startZdtype_calcu</name>
  1952 + <field>station_mark</field>
  1953 + <condition>&#x3d;</condition>
  1954 + <name2/>
  1955 + </key>
  1956 + <value>
  1957 + <name>directions</name>
  1958 + <rename>sxx2</rename>
  1959 + <default/>
  1960 + <type>Integer</type>
  1961 + </value>
  1962 + <value>
  1963 + <name>station</name>
  1964 + <rename>qdzid</rename>
  1965 + <default/>
  1966 + <type>Integer</type>
  1967 + </value>
  1968 + </lookup>
  1969 + <cluster_schema/>
  1970 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1971 + <xloc>551</xloc>
  1972 + <yloc>782</yloc>
  1973 + <draw>Y</draw>
  1974 + </GUI>
  1975 + </step>
  1976 +
  1977 + <step>
1846 1978 <name>&#x6b63;&#x5e38;&#x73ed;&#x6b21;_&#x5904;&#x7406;&#x6570;&#x636e;</name>
1847 1979 <type>ScriptValueMod</type>
1848 1980 <description/>
... ... @@ -2201,6 +2333,106 @@
2201 2333 </step>
2202 2334  
2203 2335 <step>
  2336 + <name>&#x7c7b;&#x578b;&#x4fee;&#x6b63; 2</name>
  2337 + <type>SelectValues</type>
  2338 + <description/>
  2339 + <distribute>Y</distribute>
  2340 + <custom_distribution/>
  2341 + <copies>1</copies>
  2342 + <partitioning>
  2343 + <method>none</method>
  2344 + <schema_name/>
  2345 + </partitioning>
  2346 + <fields> <select_unspecified>N</select_unspecified>
  2347 + <meta> <name>out_mileage</name>
  2348 + <rename>out_mileage</rename>
  2349 + <type>Number</type>
  2350 + <length>-2</length>
  2351 + <precision>-2</precision>
  2352 + <conversion_mask/>
  2353 + <date_format_lenient>false</date_format_lenient>
  2354 + <date_format_locale/>
  2355 + <date_format_timezone/>
  2356 + <lenient_string_to_number>false</lenient_string_to_number>
  2357 + <encoding/>
  2358 + <decimal_symbol/>
  2359 + <grouping_symbol/>
  2360 + <currency_symbol/>
  2361 + <storage_type/>
  2362 + </meta> <meta> <name>out_time</name>
  2363 + <rename>out_time</rename>
  2364 + <type>Integer</type>
  2365 + <length>-2</length>
  2366 + <precision>-2</precision>
  2367 + <conversion_mask/>
  2368 + <date_format_lenient>false</date_format_lenient>
  2369 + <date_format_locale/>
  2370 + <date_format_timezone/>
  2371 + <lenient_string_to_number>false</lenient_string_to_number>
  2372 + <encoding/>
  2373 + <decimal_symbol/>
  2374 + <grouping_symbol/>
  2375 + <currency_symbol/>
  2376 + <storage_type/>
  2377 + </meta> </fields> <cluster_schema/>
  2378 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2379 + <xloc>338</xloc>
  2380 + <yloc>949</yloc>
  2381 + <draw>Y</draw>
  2382 + </GUI>
  2383 + </step>
  2384 +
  2385 + <step>
  2386 + <name>&#x7c7b;&#x578b;&#x4fee;&#x6b63; 3</name>
  2387 + <type>SelectValues</type>
  2388 + <description/>
  2389 + <distribute>Y</distribute>
  2390 + <custom_distribution/>
  2391 + <copies>1</copies>
  2392 + <partitioning>
  2393 + <method>none</method>
  2394 + <schema_name/>
  2395 + </partitioning>
  2396 + <fields> <select_unspecified>N</select_unspecified>
  2397 + <meta> <name>parade_mileage</name>
  2398 + <rename>parade_mileage</rename>
  2399 + <type>Number</type>
  2400 + <length>-2</length>
  2401 + <precision>-2</precision>
  2402 + <conversion_mask/>
  2403 + <date_format_lenient>false</date_format_lenient>
  2404 + <date_format_locale/>
  2405 + <date_format_timezone/>
  2406 + <lenient_string_to_number>false</lenient_string_to_number>
  2407 + <encoding/>
  2408 + <decimal_symbol/>
  2409 + <grouping_symbol/>
  2410 + <currency_symbol/>
  2411 + <storage_type/>
  2412 + </meta> <meta> <name>parade_time</name>
  2413 + <rename>parade_time</rename>
  2414 + <type>Integer</type>
  2415 + <length>-2</length>
  2416 + <precision>-2</precision>
  2417 + <conversion_mask/>
  2418 + <date_format_lenient>false</date_format_lenient>
  2419 + <date_format_locale/>
  2420 + <date_format_timezone/>
  2421 + <lenient_string_to_number>false</lenient_string_to_number>
  2422 + <encoding/>
  2423 + <decimal_symbol/>
  2424 + <grouping_symbol/>
  2425 + <currency_symbol/>
  2426 + <storage_type/>
  2427 + </meta> </fields> <cluster_schema/>
  2428 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  2429 + <xloc>875</xloc>
  2430 + <yloc>1001</yloc>
  2431 + <draw>Y</draw>
  2432 + </GUI>
  2433 + </step>
  2434 +
  2435 + <step>
2204 2436 <name>&#x8ba1;&#x7b97;&#x73ed;&#x6b21;&#x7c7b;&#x578b;</name>
2205 2437 <type>ValueMapper</type>
2206 2438 <description/>
... ... @@ -2353,242 +2585,10 @@
2353 2585 </GUI>
2354 2586 </step>
2355 2587  
2356   - <step>
2357   - <name>&#x67e5;&#x627e;&#x8fdb;&#x573a;&#x8d77;&#x70b9;&#x7ad9;&#x5173;&#x8054;&#x786e;&#x5b9a;&#x4e0a;&#x4e0b;&#x884c;</name>
2358   - <type>DBLookup</type>
2359   - <description/>
2360   - <distribute>Y</distribute>
2361   - <custom_distribution/>
2362   - <copies>1</copies>
2363   - <partitioning>
2364   - <method>none</method>
2365   - <schema_name/>
2366   - </partitioning>
2367   - <connection>bus_control_variable</connection>
2368   - <cache>N</cache>
2369   - <cache_load_all>N</cache_load_all>
2370   - <cache_size>0</cache_size>
2371   - <lookup>
2372   - <schema/>
2373   - <table>bsth_c_stationroute</table>
2374   - <orderby/>
2375   - <fail_on_multiple>N</fail_on_multiple>
2376   - <eat_row_on_failure>N</eat_row_on_failure>
2377   - <key>
2378   - <name>xlid</name>
2379   - <field>line</field>
2380   - <condition>&#x3d;</condition>
2381   - <name2/>
2382   - </key>
2383   - <key>
2384   - <name>zdzname_calcu</name>
2385   - <field>station_name</field>
2386   - <condition>&#x3d;</condition>
2387   - <name2/>
2388   - </key>
2389   - <key>
2390   - <name>startZdtype_calcu</name>
2391   - <field>station_mark</field>
2392   - <condition>&#x3d;</condition>
2393   - <name2/>
2394   - </key>
2395   - <value>
2396   - <name>directions</name>
2397   - <rename>sxx2</rename>
2398   - <default/>
2399   - <type>Integer</type>
2400   - </value>
2401   - <value>
2402   - <name>station</name>
2403   - <rename>qdzid</rename>
2404   - <default/>
2405   - <type>Integer</type>
2406   - </value>
2407   - </lookup>
2408   - <cluster_schema/>
2409   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
2410   - <xloc>551</xloc>
2411   - <yloc>782</yloc>
2412   - <draw>Y</draw>
2413   - </GUI>
2414   - </step>
2415   -
2416   - <step>
2417   - <name>&#x5339;&#x914d;&#x51fa;&#x573a;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</name>
2418   - <type>ScriptValueMod</type>
2419   - <description/>
2420   - <distribute>Y</distribute>
2421   - <custom_distribution/>
2422   - <copies>1</copies>
2423   - <partitioning>
2424   - <method>none</method>
2425   - <schema_name/>
2426   - </partitioning>
2427   - <compatible>N</compatible>
2428   - <optimizationLevel>9</optimizationLevel>
2429   - <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
2430   - <jsScript_name>Script 1</jsScript_name>
2431   - <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var out_mileage&#x3b; &#x2f;&#x2f; &#x51fa;&#x573a;&#x8ba1;&#x5212;&#x91cc;&#x7a0b;&#xa;var out_time&#x3b; &#x2f;&#x2f; &#x51fa;&#x573a;&#x8ba1;&#x5212;&#x65f6;&#x95f4;&#xa;&#xa;if &#x28;sxx &#x3d;&#x3d; 0&#x29; &#x7b; &#x2f;&#x2f; &#x4e0a;&#x884c;&#xa; out_mileage &#x3d; up_out_mileage&#x3b;&#xa; out_time &#x3d; up_out_timer&#x3b;&#xa;&#x7d; else &#x7b; &#x2f;&#x2f; sxx &#x3d;&#x3d; 1 &#x4e0b;&#x884c;&#xa; out_mileage &#x3d; down_out_mileage&#x3b;&#xa; out_time &#x3d; down_out_timer&#x3b;&#xa;&#x7d;&#xa;&#xa;&#xa;&#xa;</jsScript_script>
2432   - </jsScript> </jsScripts> <fields> <field> <name>out_mileage</name>
2433   - <rename>out_mileage</rename>
2434   - <type>String</type>
2435   - <length>-1</length>
2436   - <precision>-1</precision>
2437   - <replace>N</replace>
2438   - </field> <field> <name>out_time</name>
2439   - <rename>out_time</rename>
2440   - <type>String</type>
2441   - <length>-1</length>
2442   - <precision>-1</precision>
2443   - <replace>N</replace>
2444   - </field> </fields> <cluster_schema/>
2445   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
2446   - <xloc>336</xloc>
2447   - <yloc>862</yloc>
2448   - <draw>Y</draw>
2449   - </GUI>
2450   - </step>
2451   -
2452   - <step>
2453   - <name>&#x7c7b;&#x578b;&#x4fee;&#x6b63; 2</name>
2454   - <type>SelectValues</type>
2455   - <description/>
2456   - <distribute>Y</distribute>
2457   - <custom_distribution/>
2458   - <copies>1</copies>
2459   - <partitioning>
2460   - <method>none</method>
2461   - <schema_name/>
2462   - </partitioning>
2463   - <fields> <select_unspecified>N</select_unspecified>
2464   - <meta> <name>out_mileage</name>
2465   - <rename>out_mileage</rename>
2466   - <type>Number</type>
2467   - <length>-2</length>
2468   - <precision>-2</precision>
2469   - <conversion_mask/>
2470   - <date_format_lenient>false</date_format_lenient>
2471   - <date_format_locale/>
2472   - <date_format_timezone/>
2473   - <lenient_string_to_number>false</lenient_string_to_number>
2474   - <encoding/>
2475   - <decimal_symbol/>
2476   - <grouping_symbol/>
2477   - <currency_symbol/>
2478   - <storage_type/>
2479   - </meta> <meta> <name>out_time</name>
2480   - <rename>out_time</rename>
2481   - <type>Integer</type>
2482   - <length>-2</length>
2483   - <precision>-2</precision>
2484   - <conversion_mask/>
2485   - <date_format_lenient>false</date_format_lenient>
2486   - <date_format_locale/>
2487   - <date_format_timezone/>
2488   - <lenient_string_to_number>false</lenient_string_to_number>
2489   - <encoding/>
2490   - <decimal_symbol/>
2491   - <grouping_symbol/>
2492   - <currency_symbol/>
2493   - <storage_type/>
2494   - </meta> </fields> <cluster_schema/>
2495   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
2496   - <xloc>338</xloc>
2497   - <yloc>949</yloc>
2498   - <draw>Y</draw>
2499   - </GUI>
2500   - </step>
2501   -
2502   - <step>
2503   - <name>&#x5339;&#x914d;&#x8fdb;&#x573a;&#x73ed;&#x6b21;&#x91cc;&#x7a0b;&#x65f6;&#x95f4;</name>
2504   - <type>ScriptValueMod</type>
2505   - <description/>
2506   - <distribute>Y</distribute>
2507   - <custom_distribution/>
2508   - <copies>1</copies>
2509   - <partitioning>
2510   - <method>none</method>
2511   - <schema_name/>
2512   - </partitioning>
2513   - <compatible>N</compatible>
2514   - <optimizationLevel>9</optimizationLevel>
2515   - <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
2516   - <jsScript_name>Script 1</jsScript_name>
2517   - <jsScript_script>&#x2f;&#x2f;Script here&#xa;&#xa;var parade_mileage&#x3b; &#x2f;&#x2f; &#x8fdb;&#x573a;&#x8ba1;&#x5212;&#x91cc;&#x7a0b;&#xa;var parade_time&#x3b; &#x2f;&#x2f; &#x8fdb;&#x573a;&#x8ba1;&#x5212;&#x65f6;&#x95f4;&#xa;&#xa;if &#x28;sxx2 &#x3d;&#x3d; 0&#x29; &#x7b; &#x2f;&#x2f; &#x4e0a;&#x884c;&#xa; parade_mileage &#x3d; up_in_mileage&#x3b;&#xa; parade_time &#x3d; up_in_timer&#x3b;&#xa;&#x7d; else &#x7b; &#x2f;&#x2f; sxx &#x3d;&#x3d; 1 &#x4e0b;&#x884c;&#xa; parade_mileage &#x3d; down_in_mileage&#x3b;&#xa; parade_time &#x3d; down_in_timer&#x3b;&#xa;&#x7d;&#xa;&#xa;&#xa;&#xa;</jsScript_script>
2518   - </jsScript> </jsScripts> <fields> <field> <name>parade_mileage</name>
2519   - <rename>parade_mileage</rename>
2520   - <type>String</type>
2521   - <length>-1</length>
2522   - <precision>-1</precision>
2523   - <replace>N</replace>
2524   - </field> <field> <name>parade_time</name>
2525   - <rename>parade_time</rename>
2526   - <type>String</type>
2527   - <length>-1</length>
2528   - <precision>-1</precision>
2529   - <replace>N</replace>
2530   - </field> </fields> <cluster_schema/>
2531   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
2532   - <xloc>726</xloc>
2533   - <yloc>1005</yloc>
2534   - <draw>Y</draw>
2535   - </GUI>
2536   - </step>
2537   -
2538   - <step>
2539   - <name>&#x7c7b;&#x578b;&#x4fee;&#x6b63; 3</name>
2540   - <type>SelectValues</type>
2541   - <description/>
2542   - <distribute>Y</distribute>
2543   - <custom_distribution/>
2544   - <copies>1</copies>
2545   - <partitioning>
2546   - <method>none</method>
2547   - <schema_name/>
2548   - </partitioning>
2549   - <fields> <select_unspecified>N</select_unspecified>
2550   - <meta> <name>parade_mileage</name>
2551   - <rename>parade_mileage</rename>
2552   - <type>Number</type>
2553   - <length>-2</length>
2554   - <precision>-2</precision>
2555   - <conversion_mask/>
2556   - <date_format_lenient>false</date_format_lenient>
2557   - <date_format_locale/>
2558   - <date_format_timezone/>
2559   - <lenient_string_to_number>false</lenient_string_to_number>
2560   - <encoding/>
2561   - <decimal_symbol/>
2562   - <grouping_symbol/>
2563   - <currency_symbol/>
2564   - <storage_type/>
2565   - </meta> <meta> <name>parade_time</name>
2566   - <rename>parade_time</rename>
2567   - <type>Integer</type>
2568   - <length>-2</length>
2569   - <precision>-2</precision>
2570   - <conversion_mask/>
2571   - <date_format_lenient>false</date_format_lenient>
2572   - <date_format_locale/>
2573   - <date_format_timezone/>
2574   - <lenient_string_to_number>false</lenient_string_to_number>
2575   - <encoding/>
2576   - <decimal_symbol/>
2577   - <grouping_symbol/>
2578   - <currency_symbol/>
2579   - <storage_type/>
2580   - </meta> </fields> <cluster_schema/>
2581   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
2582   - <xloc>875</xloc>
2583   - <yloc>1001</yloc>
2584   - <draw>Y</draw>
2585   - </GUI>
2586   - </step>
2587   -
2588 2588 <step_error_handling>
2589 2589 </step_error_handling>
2590 2590 <slave-step-copy-partition-distribution>
2591 2591 </slave-step-copy-partition-distribution>
2592 2592 <slave_transformation>N</slave_transformation>
2593 2593  
2594   -</transformation>
2595 2594 \ No newline at end of file
  2595 +</transformation>
... ...
src/main/resources/datatools/ktrs/ttinfodetailMetaData.ktr
... ... @@ -11,7 +11,7 @@
11 11 <parameters>
12 12 <parameter>
13 13 <name>erroroutputdir</name>
14   - <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project&#x2f;bsth_control_u_d_files&#x2f;erroroutput</default_value>
  14 + <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;runtime_temp&#x2f;bsth_control_u_d_files&#x2f;erroroutput</default_value>
15 15 <description>ktr step&#x914d;&#x7f6e;&#x7684;&#x9519;&#x8bef;&#x8f93;&#x51fa;&#x76ee;&#x5f55;</description>
16 16 </parameter>
17 17 <parameter>
... ... @@ -21,12 +21,12 @@
21 21 </parameter>
22 22 <parameter>
23 23 <name>filepath</name>
24   - <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project&#x2f;bsth_control_etl&#x2f;&#x95f5;&#x884c;&#x516c;&#x4ea4;&#x2f;&#x95f5;&#x884c;26&#x8def;&#x65f6;&#x523b;&#x8868;160630&#x65f6;&#x523b;&#x8868;.xls</default_value>
  24 + <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;bsth_project&#x2f;bsth_control_etl&#x2f;&#x95f5;&#x884c;&#x516c;&#x4ea4;&#x2f;&#x95f5;&#x884c;26&#x8def;&#x65f6;&#x523b;&#x8868;160630&#x65f6;&#x523b;&#x8868;.xls</default_value>
25 25 <description>&#x5f85;&#x5904;&#x7406;&#x5bfc;&#x5165;&#x7684;excel&#x6587;&#x4ef6;</description>
26 26 </parameter>
27 27 <parameter>
28 28 <name>injectktrfile</name>
29   - <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project&#x2f;bsth_control&#x2f;src&#x2f;main&#x2f;resources&#x2f;datatools&#x2f;ktrs&#x2f;ttinfodetailDataInput.ktr</default_value>
  29 + <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;bsth_project&#x2f;bsth_control&#x2f;src&#x2f;main&#x2f;resources&#x2f;datatools&#x2f;ktrs&#x2f;ttinfodetailDataInput.ktr</default_value>
30 30 <description>&#x6ce8;&#x5165;&#x5143;&#x6570;&#x636e;&#x7684;ktr&#x6587;&#x4ef6;</description>
31 31 </parameter>
32 32 <parameter>
... ... @@ -35,6 +35,11 @@
35 35 <description>&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;&#x5b57;&#x6bb5;&#x540d;&#xff0c;&#x4ee5;&#x9017;&#x53f7;&#x8fde;&#x63a5;</description>
36 36 </parameter>
37 37 <parameter>
  38 + <name>sheetname</name>
  39 + <default_value>&#x5de5;&#x4f5c;&#x8868;1</default_value>
  40 + <description/>
  41 + </parameter>
  42 + <parameter>
38 43 <name>tccname</name>
39 44 <default_value>&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;&#x505c;&#x8f66;&#x573a;</default_value>
40 45 <description>&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</description>
... ... @@ -338,6 +343,56 @@
338 343 <target_detail>Y</target_detail>
339 344 <source_step>&#x83b7;&#x53d6;excel&#x6587;&#x4ef6;&#x540d;</source_step>
340 345 <source_field>filepath_</source_field>
  346 + </mapping> <mapping> <target_step_name>&#x884c;&#x8f6c;&#x5217;</target_step_name>
  347 + <target_attribute_key>NAME</target_attribute_key>
  348 + <target_detail>Y</target_detail>
  349 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c; 2</source_step>
  350 + <source_field>fieldName</source_field>
  351 + </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
  352 + <target_attribute_key>NAME</target_attribute_key>
  353 + <target_detail>Y</target_detail>
  354 + <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>
  355 + <source_field>fieldname</source_field>
  356 + </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
  357 + <target_attribute_key>SHEET_NAME</target_attribute_key>
  358 + <target_detail>Y</target_detail>
  359 + <source_step>&#x83b7;&#x53d6;excel&#x6587;&#x4ef6;&#x540d;</source_step>
  360 + <source_field>sheetname_</source_field>
  361 + </mapping> <mapping> <target_step_name>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;&#xff0c;&#x7ebf;&#x8def;&#x540d;&#x5b57;&#xff0c;&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</target_step_name>
  362 + <target_attribute_key>NAME</target_attribute_key>
  363 + <target_detail>Y</target_detail>
  364 + <source_step>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</source_step>
  365 + <source_field>col_name</source_field>
  366 + </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>
  367 + <target_attribute_key>NAME</target_attribute_key>
  368 + <target_detail>Y</target_detail>
  369 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>
  370 + <source_field>fieldName</source_field>
  371 + </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>
  372 + <target_attribute_key>TRIM_TYPE</target_attribute_key>
  373 + <target_detail>Y</target_detail>
  374 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>
  375 + <source_field>trim_type</source_field>
  376 + </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
  377 + <target_attribute_key>REPEAT</target_attribute_key>
  378 + <target_detail>Y</target_detail>
  379 + <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>
  380 + <source_field>repeat</source_field>
  381 + </mapping> <mapping> <target_step_name>&#x73ed;&#x6b21;&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;</target_step_name>
  382 + <target_attribute_key>NORMALISED</target_attribute_key>
  383 + <target_detail>Y</target_detail>
  384 + <source_step>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</source_step>
  385 + <source_field>valuefield</source_field>
  386 + </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
  387 + <target_attribute_key>FORMAT</target_attribute_key>
  388 + <target_detail>Y</target_detail>
  389 + <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>
  390 + <source_field>format</source_field>
  391 + </mapping> <mapping> <target_step_name>&#x73ed;&#x6b21;&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;</target_step_name>
  392 + <target_attribute_key>VALUE</target_attribute_key>
  393 + <target_detail>Y</target_detail>
  394 + <source_step>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</source_step>
  395 + <source_field>nfieldname</source_field>
341 396 </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
342 397 <target_attribute_key>PRECISION</target_attribute_key>
343 398 <target_detail>Y</target_detail>
... ... @@ -363,16 +418,6 @@
363 418 <target_detail>Y</target_detail>
364 419 <source_step>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</source_step>
365 420 <source_field>col_type</source_field>
366   - </mapping> <mapping> <target_step_name>&#x884c;&#x8f6c;&#x5217;</target_step_name>
367   - <target_attribute_key>NAME</target_attribute_key>
368   - <target_detail>Y</target_detail>
369   - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c; 2</source_step>
370   - <source_field>fieldName</source_field>
371   - </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
372   - <target_attribute_key>NAME</target_attribute_key>
373   - <target_detail>Y</target_detail>
374   - <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>
375   - <source_field>fieldname</source_field>
376 421 </mapping> <mapping> <target_step_name>&#x73ed;&#x6b21;&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;</target_step_name>
377 422 <target_attribute_key>NAME</target_attribute_key>
378 423 <target_detail>Y</target_detail>
... ... @@ -383,56 +428,21 @@
383 428 <target_detail>Y</target_detail>
384 429 <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>
385 430 <source_field>length</source_field>
386   - </mapping> <mapping> <target_step_name>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;&#xff0c;&#x7ebf;&#x8def;&#x540d;&#x5b57;&#xff0c;&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</target_step_name>
387   - <target_attribute_key>NAME</target_attribute_key>
388   - <target_detail>Y</target_detail>
389   - <source_step>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</source_step>
390   - <source_field>col_name</source_field>
391 431 </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
392 432 <target_attribute_key>TYPE</target_attribute_key>
393 433 <target_detail>Y</target_detail>
394 434 <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>
395 435 <source_field>fieldtype</source_field>
396   - </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>
397   - <target_attribute_key>NAME</target_attribute_key>
398   - <target_detail>Y</target_detail>
399   - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>
400   - <source_field>fieldName</source_field>
401 436 </mapping> <mapping> <target_step_name>&#x884c;&#x8f6c;&#x5217;</target_step_name>
402 437 <target_attribute_key>VALUE</target_attribute_key>
403 438 <target_detail>Y</target_detail>
404 439 <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c; 2</source_step>
405 440 <source_field>fieldName</source_field>
406   - </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>
407   - <target_attribute_key>TRIM_TYPE</target_attribute_key>
408   - <target_detail>Y</target_detail>
409   - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>
410   - <source_field>trim_type</source_field>
411 441 </mapping> <mapping> <target_step_name>&#x884c;&#x8f6c;&#x5217;</target_step_name>
412 442 <target_attribute_key>NORMALISED</target_attribute_key>
413 443 <target_detail>Y</target_detail>
414 444 <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c; 2</source_step>
415 445 <source_field>value</source_field>
416   - </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
417   - <target_attribute_key>REPEAT</target_attribute_key>
418   - <target_detail>Y</target_detail>
419   - <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>
420   - <source_field>repeat</source_field>
421   - </mapping> <mapping> <target_step_name>&#x73ed;&#x6b21;&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;</target_step_name>
422   - <target_attribute_key>NORMALISED</target_attribute_key>
423   - <target_detail>Y</target_detail>
424   - <source_step>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</source_step>
425   - <source_field>valuefield</source_field>
426   - </mapping> <mapping> <target_step_name>&#x73ed;&#x6b21;&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;</target_step_name>
427   - <target_attribute_key>VALUE</target_attribute_key>
428   - <target_detail>Y</target_detail>
429   - <source_step>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</source_step>
430   - <source_field>nfieldname</source_field>
431   - </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
432   - <target_attribute_key>FORMAT</target_attribute_key>
433   - <target_detail>Y</target_detail>
434   - <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>
435   - <source_field>format</source_field>
436 446 </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>
437 447 <target_attribute_key>PRECISION</target_attribute_key>
438 448 <target_detail>Y</target_detail>
... ... @@ -1002,10 +1012,22 @@
1002 1012 <precision>-1</precision>
1003 1013 <trim_type>none</trim_type>
1004 1014 </field>
  1015 + <field>
  1016 + <name>sheetname_</name>
  1017 + <variable>&#x24;&#x7b;sheetname&#x7d;</variable>
  1018 + <type>String</type>
  1019 + <format/>
  1020 + <currency/>
  1021 + <decimal/>
  1022 + <group/>
  1023 + <length>-1</length>
  1024 + <precision>-1</precision>
  1025 + <trim_type>none</trim_type>
  1026 + </field>
1005 1027 </fields>
1006 1028 <cluster_schema/>
1007 1029 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
1008   - <xloc>73</xloc>
  1030 + <xloc>120</xloc>
1009 1031 <yloc>62</yloc>
1010 1032 <draw>Y</draw>
1011 1033 </GUI>
... ...
src/main/resources/ms-jdbc.properties
... ... @@ -6,4 +6,4 @@ ms.mysql.password= 123456
6 6 #ms.mysql.driver= com.mysql.jdbc.Driver
7 7 #ms.mysql.url= jdbc:mysql://192.168.168.171:3306/ms?useUnicode=true&characterEncoding=utf-8
8 8 #ms.mysql.username= root
9   -#ms.mysql.password= root2jsp
  9 +#ms.mysql.password= root2jsp
10 10 \ No newline at end of file
... ...
src/main/resources/static/pages/control/lineallot/allot.html
... ... @@ -163,8 +163,8 @@
163 163 <a href="javascript:;" class="btn btn-lg blue gotoControl red" data-status=1>
164 164 <i class="fa fa-power-off"></i> 主调模式 </a>
165 165  
166   - <!-- <a href="javascript:;" id="monitor" class="btn btn-lg grey gotoControl" data-status=0>
167   - <i class="fa fa-tv"></i> 监控模式 </a> -->
  166 + <a href="javascript:;" id="monitor" class="btn btn-lg grey gotoControl" data-status=0>
  167 + <i class="fa fa-tv"></i> 监控模式 </a>
168 168 &nbsp;
169 169 <a href="javascript:;" id="resetBtn" style="left: 120px;color: #3598DC;">
170 170 <i class="fa fa-history"></i> 重置</a>
... ...
src/main/resources/static/pages/scheduleApp/module/basicInfo/busInfoManage/list.html
... ... @@ -4,9 +4,9 @@
4 4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column">
5 5 <thead>
6 6 <tr role="row" class="heading">
7   - <th style="width: 5%;">序号</th>
8   - <th >车辆编号</th>
9   - <th >内部编号</th>
  7 + <th style="width: 50px;">序号</th>
  8 + <th style="width: 130px;">车辆编号</th>
  9 + <th style="width: 130px;">内部编号</th>
10 10 <th >设备编号</th>
11 11 <th >车牌号</th>
12 12 <th style="width: 15%;">所在公司</th>
... ... @@ -17,16 +17,14 @@
17 17 <tr role="row" class="filter">
18 18 <td></td>
19 19 <td>
20   - <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition().carCode_like"/>
  20 + <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition().carCode_like" placeholder="输入车辆编号..."/>
21 21 </td>
22 22 <td>
23   - <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition().insideCode_like"/>
  23 + <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition().insideCode_like" placeholder="输入内部编号..."/>
24 24 </td>
25 25 <td>
26   - <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition().equipmentCode_like"/>
27 26 </td>
28 27 <td>
29   - <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition().carPlate_like"/>
30 28 </td>
31 29 <td>
32 30 <div>
... ...
src/main/resources/static/pages/scheduleApp/module/basicInfo/deviceInfoManage/edit.html
... ... @@ -42,7 +42,7 @@
42 42 cmaps="{'xl': 'id', 'xlName': 'name', 'xlBm': 'lineCode'}"
43 43 dcname="xl"
44 44 icname="id"
45   - dsparams="{{ {type: 'ajax', param:{type: 'all'}, atype:'xl' } | json }}"
  45 + dsparams="{{ {type: 'ajax', param:{type: 'all', 'destroy_eq': 0}, atype:'xl' } | json }}"
46 46 iterobjname="item"
47 47 iterobjexp="item.name"
48 48 searchph="请输拼音..."
... ... @@ -147,7 +147,7 @@
147 147 ng-model="ctrl.deviceInfoForSave.qyrq" readonly
148 148 remote-Validation
149 149 remotevtype="cde1"
150   - remotevparam="{{ {'qyrq': ctrl.deviceInfoForSave.qyrq} | json}}"/>
  150 + remotevparam="{{ {'qyrq': ctrl.deviceInfoForSave.qyrq, 'xl': ctrl.deviceInfoForSave.xl, 'cl': ctrl.deviceInfoForSave.cl} | json}}"/>
151 151 <span class="input-group-btn">
152 152 <button type="button" class="btn btn-default" ng-click="ctrl.qyrq_open()">
153 153 <i class="glyphicon glyphicon-calendar"></i>
... ... @@ -159,6 +159,9 @@
159 159 <div class="alert alert-danger well-sm" ng-show="myForm.qyrq.$error.required">
160 160 启用日期必须选择
161 161 </div>
  162 + <div class="alert alert-danger well-sm" ng-show="myForm.qyrq.$error.remote">
  163 + 启用日期必须比历史的启用日期大
  164 + </div>
162 165 </div>
163 166  
164 167 <!-- 其他form-group -->
... ...
src/main/resources/static/pages/scheduleApp/module/basicInfo/deviceInfoManage/form.html
... ... @@ -42,7 +42,7 @@
42 42 cmaps="{'xl': 'id', 'xlName': 'name', 'xlBm': 'lineCode'}"
43 43 dcname="xl"
44 44 icname="id"
45   - dsparams="{{ {type: 'ajax', param:{type: 'all'}, atype:'xl' } | json }}"
  45 + dsparams="{{ {type: 'ajax', param:{type: 'all', 'destroy_eq': 0}, atype:'xl' } | json }}"
46 46 iterobjname="item"
47 47 iterobjexp="item.name"
48 48 searchph="请输拼音..."
... ...
src/main/resources/static/pages/scheduleApp/module/basicInfo/deviceInfoManage/index.html
... ... @@ -32,21 +32,21 @@
32 32 添加设备信息
33 33 </a>
34 34  
35   - <div class="btn-group">
36   - <a href="javascript:" class="btn red btn-outline btn-circle" data-toggle="dropdown">
37   - <i class="fa fa-share"></i>
38   - <span>数据工具</span>
39   - <i class="fa fa-angle-down"></i>
40   - </a>
41   - <ul class="dropdown-menu pull-right">
42   - <li>
43   - <a href="javascript:" class="tool-action">
44   - <i class="fa fa-file-excel-o"></i>
45   - 导出excel
46   - </a>
47   - </li>
48   - </ul>
49   - </div>
  35 + <!--<div class="btn-group">-->
  36 + <!--<a href="javascript:" class="btn red btn-outline btn-circle" data-toggle="dropdown">-->
  37 + <!--<i class="fa fa-share"></i>-->
  38 + <!--<span>数据工具</span>-->
  39 + <!--<i class="fa fa-angle-down"></i>-->
  40 + <!--</a>-->
  41 + <!--<ul class="dropdown-menu pull-right">-->
  42 + <!--<li>-->
  43 + <!--<a href="javascript:" class="tool-action">-->
  44 + <!--<i class="fa fa-file-excel-o"></i>-->
  45 + <!--导出excel-->
  46 + <!--</a>-->
  47 + <!--</li>-->
  48 + <!--</ul>-->
  49 + <!--</div>-->
50 50 </div>
51 51 </div>
52 52  
... ...
src/main/resources/static/pages/scheduleApp/module/basicInfo/employeeInfoManage/list.html
... ... @@ -4,9 +4,9 @@
4 4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column">
5 5 <thead>
6 6 <tr role="row" class="heading">
7   - <th style="width: 5%;">序号</th>
8   - <th >姓名</th>
9   - <th >工号</th>
  7 + <th style="width: 50px;">序号</th>
  8 + <th style="width: 130px;">姓名</th>
  9 + <th style="width: 130px;">工号</th>
10 10 <th style="width: 5%;">性别</th>
11 11 <th style="width: 15%;">所在公司</th>
12 12 <th >分公司</th>
... ... @@ -17,10 +17,10 @@
17 17 <td>
18 18 </td>
19 19 <td>
20   - <input type="text" class="form-control input-sm" ng-model="ctrl.searchCondition().personnelName_like"/>
  20 + <input type="text" class="form-control input-sm" ng-model="ctrl.searchCondition().personnelName_like" placeholder="输入姓名..."/>
21 21 </td>
22 22 <td>
23   - <input type="text" class="form-control input-sm" ng-model="ctrl.searchCondition().jobCode_like"/>
  23 + <input type="text" class="form-control input-sm" ng-model="ctrl.searchCondition().jobCode_like" placeholder="输入工号..."/>
24 24 </td>
25 25 <td>
26 26 </td>
... ...
src/main/resources/static/pages/scheduleApp/module/common/main.js
... ... @@ -63,27 +63,60 @@ ScheduleApp.factory(&#39;requestNotificationChannel&#39;, [&#39;$rootScope&#39;, function($rootS
63 63 }]);
64 64  
65 65 // http 拦截器
66   -ScheduleApp.factory('myInterceptor', ['requestNotificationChannel', function(requestNotificationChannel) {
67   - return {
68   - request: function(config) {
69   - requestNotificationChannel.requestStarted();
70   - return config;
71   - },
72   - requestError: function(rejection) {
73   - requestNotificationChannel.requestEnded();
74   - return rejection;
75   - },
76   - response: function(response) {
77   - requestNotificationChannel.requestEnded();
78   - return response;
79   - },
80   - responseError: function(rejection) {
81   - requestNotificationChannel.requestEnded();
82   - return rejection;
83   - }
84   - };
  66 +ScheduleApp.factory(
  67 + 'myInterceptor',
  68 + [
  69 + 'requestNotificationChannel',
  70 + '$q',
  71 + function(requestNotificationChannel, $q) {
  72 + return {
  73 + request: function(config) {
  74 + requestNotificationChannel.requestStarted();
  75 + return config;
  76 + },
  77 + requestError: function(rejection) {
  78 + requestNotificationChannel.requestEnded();
  79 + alert("服务端无响应");
  80 + return rejection;
  81 + },
  82 + response: function(response) {
  83 + requestNotificationChannel.requestEnded();
85 84  
86   -}]);
  85 + return response;
  86 + },
  87 + responseError: function(rejection) {
  88 + requestNotificationChannel.requestEnded();
  89 +
  90 + // 处理错误,springboot会包装返回的错误数据
  91 + // 如:{"timestamp":1478674739246,"status":500,"error":"Internal Server Error","exception":"java.lang.ClassCastException","message":"java.lang.String cannot be cast to java.lang.Long","path":"/tidc/importfile"}
  92 +
  93 + var status = rejection.status;
  94 + var path = rejection.data.path;
  95 + var message = rejection.data.message;
  96 + var output = [];
  97 + output.push("状态编码:" + status);
  98 + output.push("访问路径:" + path);
  99 + output.push("错误消息:" + message);
  100 + if (status) {
  101 + if (status == 500) {
  102 + alert("服务端错误:" + "\n" + output.join("\n"));
  103 + } else if (status == 407) {
  104 + alert("请重新登录:" + "\n" + output.join("\n"));
  105 + } else if (status == -1) {
  106 + alert("貌似服务端连接不上");
  107 + } else {
  108 + alert("其他错误:" + "\n" + output.join("\n"));
  109 + }
  110 + } else {
  111 + alert("我擦,后台返回连个状态码都没返回,见鬼了!");
  112 + }
  113 +
  114 + return $q.reject(rejection);
  115 + }
  116 + };
  117 + }
  118 + ]
  119 +);
87 120  
88 121 ScheduleApp.config(['$httpProvider', function($httpProvider) {
89 122 $httpProvider.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest";
... ...
src/main/resources/static/pages/scheduleApp/module/common/prj-common-globalservice.js
... ... @@ -416,7 +416,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;SchedulePlanManageService_g&#39;, [&#39;$resource
416 416 return {
417 417 rest : $resource(
418 418 '/spc/:id',
419   - {order: 'createDate', direction: 'DESC', id: '@id_route'},
  419 + {order: 'xl.id,createDate', direction: 'DESC,DESC', id: '@id_route'},
420 420 {
421 421 list: {
422 422 method: 'GET',
... ... @@ -452,7 +452,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;SchedulePlanInfoManageService_g&#39;, [&#39;$reso
452 452 return {
453 453 rest : $resource(
454 454 '/spic/:id',
455   - {order: 'scheduleDate,lp,fcno', direction: 'ASC', id: '@id_route'},
  455 + {order: 'scheduleDate,lp,fcno', direction: 'ASC,ASC,ASC', id: '@id_route'},
456 456 {
457 457 list: {
458 458 method: 'GET',
... ...
src/main/resources/static/pages/scheduleApp/module/core/busConfig/edit.html
... ... @@ -43,17 +43,18 @@
43 43 <div class="form-group has-success has-feedback">
44 44 <label class="col-md-2 control-label">线路*:</label>
45 45 <div class="col-md-3">
46   - <sa-Select3 model="ctrl.busConfigForSave"
47   - name="xl"
48   - placeholder="请输拼音..."
49   - dcvalue="{{ctrl.busConfigForSave.xl.id}}"
  46 + <sa-Select5 name="xl"
  47 + model="ctrl.busConfigForSave"
  48 + cmaps="{'xl.id': 'id'}"
50 49 dcname="xl.id"
51 50 icname="id"
52   - icnames="name"
53   - datatype="xl"
54   - mlp="true"
  51 + dsparams="{{ {type: 'ajax', param:{type: 'all', 'destroy_eq': 0}, atype:'xl' } | json }}"
  52 + iterobjname="item"
  53 + iterobjexp="item.name"
  54 + searchph="请输拼音..."
  55 + searchexp="this.name"
55 56 required >
56   - </sa-Select3>
  57 + </sa-Select5>
57 58 </div>
58 59 <!-- 隐藏块,显示验证信息 -->
59 60 <div class="alert alert-danger well-sm" ng-show="myForm.xl.$error.required">
... ...
src/main/resources/static/pages/scheduleApp/module/core/busConfig/form.html
... ... @@ -43,19 +43,18 @@
43 43 <div class="form-group has-success has-feedback">
44 44 <label class="col-md-2 control-label">线路*:</label>
45 45 <div class="col-md-3">
46   - <sa-Select3 model="ctrl.busConfigForSave"
47   - name="xl"
48   - placeholder="请输拼音..."
49   - dcvalue="{{ctrl.busConfigForSave.xl.id}}"
  46 + <sa-Select5 name="xl"
  47 + model="ctrl.busConfigForSave"
  48 + cmaps="{'xl.id': 'id'}"
50 49 dcname="xl.id"
51 50 icname="id"
52   - dcname2="xl.company"
53   - icname2="company"
54   - icnames="name"
55   - datatype="xl"
56   - mlp="true"
  51 + dsparams="{{ {type: 'ajax', param:{type: 'all', 'destroy_eq': 0}, atype:'xl' } | json }}"
  52 + iterobjname="item"
  53 + iterobjexp="item.name"
  54 + searchph="请输拼音..."
  55 + searchexp="this.name"
57 56 required >
58   - </sa-Select3>
  57 + </sa-Select5>
59 58 </div>
60 59 <!-- 隐藏块,显示验证信息 -->
61 60 <div class="alert alert-danger well-sm" ng-show="myForm.xl.$error.required">
... ...
src/main/resources/static/pages/scheduleApp/module/core/busConfig/index.html
... ... @@ -45,19 +45,19 @@
45 45 导入excel
46 46 </a>
47 47 </li>
48   - <li>
49   - <a href="javascript:" class="tool-action">
50   - <i class="fa fa-file-excel-o"></i>
51   - 导出excel
52   - </a>
53   - </li>
54   - <li class="divider"></li>
55   - <li>
56   - <a href="javascript:" class="tool-action">
57   - <i class="fa fa-download"></i>
58   - excel模版
59   - </a>
60   - </li>
  48 + <!--<li>-->
  49 + <!--<a href="javascript:" class="tool-action">-->
  50 + <!--<i class="fa fa-file-excel-o"></i>-->
  51 + <!--导出excel-->
  52 + <!--</a>-->
  53 + <!--</li>-->
  54 + <!--<li class="divider"></li>-->
  55 + <!--<li>-->
  56 + <!--<a href="javascript:" class="tool-action">-->
  57 + <!--<i class="fa fa-download"></i>-->
  58 + <!--excel模版-->
  59 + <!--</a>-->
  60 + <!--</li>-->
61 61 </ul>
62 62 </div>
63 63 </div>
... ...
src/main/resources/static/pages/scheduleApp/module/core/busConfig/list.html
... ... @@ -4,11 +4,11 @@
4 4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column">
5 5 <thead>
6 6 <tr role="row" class="heading">
7   - <th style="width: 5%;">序号</th>
8   - <th style="width: 15%;">线路</th>
9   - <th >内部编号</th>
10   - <th >启用日期</th>
11   - <th >终止日期</th>
  7 + <th style="width: 50px;">序号</th>
  8 + <th style="width: 150px;">线路</th>
  9 + <th style="width: 150px;">内部编号</th>
  10 + <th style="width: 150px;">启用日期</th>
  11 + <th style="width: 150px;">终止日期</th>
12 12 <th >停车点</th>
13 13 <th style="width: 21%">操作</th>
14 14 </tr>
... ... @@ -58,10 +58,10 @@
58 58 <span ng-bind="info.cl.insideCode"></span>
59 59 </td>
60 60 <td>
61   - <span ng-bind="info.qyrq | date: 'yyyy-MM-dd HH:mm:ss'"></span>
  61 + <span ng-bind="info.qyrq | date: 'yyyy-MM-dd'"></span>
62 62 </td>
63 63 <td>
64   - <span ng-bind="info.zzrq | date: 'yyyy-MM-dd HH:mm:ss'"></span>
  64 + <span ng-bind="info.zzrq | date: 'yyyy-MM-dd'"></span>
65 65 </td>
66 66 <td>
67 67 <span ng-bind="info.tcd"></span>
... ...
src/main/resources/static/pages/scheduleApp/module/core/employeeConfig/edit.html
... ... @@ -43,17 +43,18 @@
43 43 <div class="form-group has-success has-feedback">
44 44 <label class="col-md-2 control-label">线路*:</label>
45 45 <div class="col-md-3">
46   - <sa-Select3 model="ctrl.employeeConfigForSave"
47   - name="xl"
48   - placeholder="请输拼音..."
49   - dcvalue="{{ctrl.employeeConfigForSave.xl.id}}"
  46 + <sa-Select5 name="xl"
  47 + model="ctrl.employeeConfigForSave"
  48 + cmaps="{'xl.id' : 'id'}"
50 49 dcname="xl.id"
51 50 icname="id"
52   - icnames="name"
53   - datatype="xl"
54   - mlp="true"
  51 + dsparams="{{ {type: 'ajax', param:{'type': 'all', 'destroy_eq': 0}, atype:'xl' } | json }}"
  52 + iterobjname="item"
  53 + iterobjexp="item.name"
  54 + searchph="请输拼音..."
  55 + searchexp="this.name"
55 56 required >
56   - </sa-Select3>
  57 + </sa-Select5>
57 58 </div>
58 59 <!-- 隐藏块,显示验证信息 -->
59 60 <div class="alert alert-danger well-sm" ng-show="myForm.xl.$error.required">
... ... @@ -76,19 +77,18 @@
76 77 <div class="form-group has-success has-feedback">
77 78 <label class="col-md-2 control-label">驾驶员*:</label>
78 79 <div class="col-md-3">
79   - <sa-Select3 model="ctrl.employeeConfigForSave"
80   - name="jsy"
81   - placeholder="请输拼音..."
82   - dcvalue="{{ctrl.employeeConfigForSave.jsy.id}}"
  80 + <sa-Select5 name="jsy"
  81 + model="ctrl.employeeConfigForSave"
  82 + cmaps="{'jsy.id' : 'id'}"
83 83 dcname="jsy.id"
84 84 icname="id"
85   - icnames="personnelName"
86   - datatype="ry"
87   - dataassociate="true"
88   - dataparam="{{ {'companyCode_eq': ctrl.employeeConfigForSave.xl.company} | json }}"
89   - mlp="true"
  85 + dsparams="{{ {type: 'ajax', param:{'type': 'all'}, atype:'ry' } | json }}"
  86 + iterobjname="item"
  87 + iterobjexp="item.personnelName + '<' + item.jobCode + '>'"
  88 + searchph="请输拼音..."
  89 + searchexp="this.personnelName + '<' + this.jobCode + '>'"
90 90 required >
91   - </sa-Select3>
  91 + </sa-Select5>
92 92 </div>
93 93 <!-- 隐藏块,显示验证信息 -->
94 94 <div class="alert alert-danger well-sm" ng-show="myForm.jsy.$error.required">
... ... @@ -99,18 +99,18 @@
99 99 <div class="form-group">
100 100 <label class="col-md-2 control-label">售票员:</label>
101 101 <div class="col-md-3">
102   - <sa-Select3 model="ctrl.employeeConfigForSave"
103   - name="spy"
104   - placeholder="请输拼音..."
105   - dcvalue="{{ctrl.employeeConfigForSave.spy.id}}"
  102 + <sa-Select5 name="spy"
  103 + model="ctrl.employeeConfigForSave"
  104 + cmaps="{'spy.id' : 'id'}"
106 105 dcname="spy.id"
107 106 icname="id"
108   - icnames="personnelName"
109   - datatype="ry"
110   - dataassociate="true"
111   - dataparam="{{ {'companyCode_eq': ctrl.employeeConfigForSave.xl.company} | json }}"
112   - mlp="true" >
113   - </sa-Select3>
  107 + dsparams="{{ {type: 'ajax', param:{'type': 'all'}, atype:'ry' } | json }}"
  108 + iterobjname="item"
  109 + iterobjexp="item.personnelName + '<' + item.jobCode + '>'"
  110 + searchph="请输拼音..."
  111 + searchexp="this.personnelName + '<' + this.jobCode + '>'"
  112 + >
  113 + </sa-Select5>
114 114 </div>
115 115 </div>
116 116  
... ...
src/main/resources/static/pages/scheduleApp/module/core/employeeConfig/employeeConfig.js
... ... @@ -279,6 +279,10 @@ angular.module(&#39;ScheduleApp&#39;).controller(&#39;EmployeeConfigFormCtrl&#39;, [&#39;EmployeeCon
279 279 self.employeeConfigForSave[key] = result[key];
280 280 }
281 281  
  282 + if (!self.employeeConfigForSave.spy) {
  283 + self.employeeConfigForSave.spy = {};
  284 + }
  285 +
282 286 },
283 287 function(result) {
284 288 alert("出错啦!");
... ...
src/main/resources/static/pages/scheduleApp/module/core/employeeConfig/form.html
... ... @@ -43,19 +43,18 @@
43 43 <div class="form-group has-success has-feedback">
44 44 <label class="col-md-2 control-label">线路*:</label>
45 45 <div class="col-md-3">
46   - <sa-Select3 model="ctrl.employeeConfigForSave"
47   - name="xl"
48   - placeholder="请输拼音..."
49   - dcvalue="{{ctrl.employeeConfigForSave.xl.id}}"
  46 + <sa-Select5 name="xl"
  47 + model="ctrl.employeeConfigForSave"
  48 + cmaps="{'xl.id' : 'id'}"
50 49 dcname="xl.id"
51 50 icname="id"
52   - dcname2="xl.company"
53   - icname2="company"
54   - icnames="name"
55   - datatype="xl"
56   - mlp="true"
  51 + dsparams="{{ {type: 'ajax', param:{'type': 'all', 'destroy_eq': 0}, atype:'xl' } | json }}"
  52 + iterobjname="item"
  53 + iterobjexp="item.name"
  54 + searchph="请输拼音..."
  55 + searchexp="this.name"
57 56 required >
58   - </sa-Select3>
  57 + </sa-Select5>
59 58 </div>
60 59 <!-- 隐藏块,显示验证信息 -->
61 60 <div class="alert alert-danger well-sm" ng-show="myForm.xl.$error.required">
... ... @@ -78,19 +77,18 @@
78 77 <div class="form-group has-success has-feedback">
79 78 <label class="col-md-2 control-label">驾驶员*:</label>
80 79 <div class="col-md-3">
81   - <sa-Select3 model="ctrl.employeeConfigForSave"
82   - name="jsy"
83   - placeholder="请输拼音..."
84   - dcvalue="{{ctrl.employeeConfigForSave.jsy.id}}"
  80 + <sa-Select5 name="jsy"
  81 + model="ctrl.employeeConfigForSave"
  82 + cmaps="{'jsy.id' : 'id'}"
85 83 dcname="jsy.id"
86 84 icname="id"
87   - icnames="personnelName"
88   - datatype="ry"
89   - dataassociate="true"
90   - dataparam="{{ {'companyCode_eq': ctrl.employeeConfigForSave.xl.company} | json }}"
91   - mlp="true"
  85 + dsparams="{{ {type: 'ajax', param:{'type': 'all'}, atype:'ry' } | json }}"
  86 + iterobjname="item"
  87 + iterobjexp="item.personnelName + '<' + item.jobCode + '>'"
  88 + searchph="请输拼音..."
  89 + searchexp="this.personnelName + '<' + this.jobCode + '>'"
92 90 required >
93   - </sa-Select3>
  91 + </sa-Select5>
94 92 </div>
95 93 <!-- 隐藏块,显示验证信息 -->
96 94 <div class="alert alert-danger well-sm" ng-show="myForm.jsy.$error.required">
... ... @@ -101,18 +99,18 @@
101 99 <div class="form-group">
102 100 <label class="col-md-2 control-label">售票员:</label>
103 101 <div class="col-md-3">
104   - <sa-Select3 model="ctrl.employeeConfigForSave"
105   - name="spy"
106   - placeholder="请输拼音..."
107   - dcvalue="{{ctrl.employeeConfigForSave.spy.id}}"
  102 + <sa-Select5 name="spy"
  103 + model="ctrl.employeeConfigForSave"
  104 + cmaps="{'spy.id' : 'id'}"
108 105 dcname="spy.id"
109 106 icname="id"
110   - icnames="personnelName"
111   - datatype="ry"
112   - dataassociate="true"
113   - dataparam="{{ {'companyCode_eq': ctrl.employeeConfigForSave.xl.company} | json }}"
114   - mlp="true" >
115   - </sa-Select3>
  107 + dsparams="{{ {type: 'ajax', param:{'type': 'all'}, atype:'ry' } | json }}"
  108 + iterobjname="item"
  109 + iterobjexp="item.personnelName + '<' + item.jobCode + '>'"
  110 + searchph="请输拼音..."
  111 + searchexp="this.personnelName + '<' + this.jobCode + '>'"
  112 + >
  113 + </sa-Select5>
116 114 </div>
117 115 </div>
118 116  
... ...
src/main/resources/static/pages/scheduleApp/module/core/employeeConfig/index.html
... ... @@ -45,19 +45,19 @@
45 45 导入excel
46 46 </a>
47 47 </li>
48   - <li>
49   - <a href="javascript:" class="tool-action">
50   - <i class="fa fa-file-excel-o"></i>
51   - 导出excel
52   - </a>
53   - </li>
54   - <li class="divider"></li>
55   - <li>
56   - <a href="javascript:" class="tool-action">
57   - <i class="fa fa-download"></i>
58   - excel模版
59   - </a>
60   - </li>
  48 + <!--<li>-->
  49 + <!--<a href="javascript:" class="tool-action">-->
  50 + <!--<i class="fa fa-file-excel-o"></i>-->
  51 + <!--导出excel-->
  52 + <!--</a>-->
  53 + <!--</li>-->
  54 + <!--<li class="divider"></li>-->
  55 + <!--<li>-->
  56 + <!--<a href="javascript:" class="tool-action">-->
  57 + <!--<i class="fa fa-download"></i>-->
  58 + <!--excel模版-->
  59 + <!--</a>-->
  60 + <!--</li>-->
61 61 </ul>
62 62 </div>
63 63 </div>
... ...
src/main/resources/static/pages/scheduleApp/module/core/employeeConfig/list.html
... ... @@ -4,9 +4,9 @@
4 4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column">
5 5 <thead>
6 6 <tr role="row" class="heading">
7   - <th style="width: 5%;">序号</th>
8   - <th style="width: 15%;">线路</th>
9   - <th style="width: 10%;">搭班编码</th>
  7 + <th style="width: 50px;">序号</th>
  8 + <th style="width: 150px;">线路</th>
  9 + <th style="width: 80px;">搭班编码</th>
10 10 <th >驾驶员工号</th>
11 11 <th style="width: 15%;">驾驶员</th>
12 12 <th >售票员工号</th>
... ...
src/main/resources/static/pages/scheduleApp/module/core/guideboardManage/index.html
... ... @@ -45,19 +45,19 @@
45 45 导入excel
46 46 </a>
47 47 </li>
48   - <li>
49   - <a href="javascript:" class="tool-action">
50   - <i class="fa fa-file-excel-o"></i>
51   - 导出excel
52   - </a>
53   - </li>
54   - <li class="divider"></li>
55   - <li>
56   - <a href="javascript:" class="tool-action">
57   - <i class="fa fa-download"></i>
58   - excel模版
59   - </a>
60   - </li>
  48 + <!--<li>-->
  49 + <!--<a href="javascript:" class="tool-action">-->
  50 + <!--<i class="fa fa-file-excel-o"></i>-->
  51 + <!--导出excel-->
  52 + <!--</a>-->
  53 + <!--</li>-->
  54 + <!--<li class="divider"></li>-->
  55 + <!--<li>-->
  56 + <!--<a href="javascript:" class="tool-action">-->
  57 + <!--<i class="fa fa-download"></i>-->
  58 + <!--excel模版-->
  59 + <!--</a>-->
  60 + <!--</li>-->
61 61 </ul>
62 62 </div>
63 63 </div>
... ...
src/main/resources/static/pages/scheduleApp/module/core/guideboardManage/list.html
... ... @@ -60,7 +60,7 @@
60 60 <td>
61 61 <!--<a href="details.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 详细 </a>-->
62 62 <!--<a href="edit.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 修改 </a>-->
63   - <a ui-sref="guideboardManage_detail({id : info.id})" class="btn default blue-stripe btn-sm"> 详细 </a>
  63 + <a ui-sref="guideboardManage_detail({id : info.id})" class="btn btn-info btn-sm"> 详细 </a>
64 64 <!--<a ui-sref="#" class="btn default blue-stripe btn-sm"> 修改 </a>-->
65 65 </td>
66 66 </tr>
... ...
src/main/resources/static/pages/scheduleApp/module/core/rerunManage/edit.html
... ... @@ -48,7 +48,7 @@
48 48 cmaps="{'rerunXl.id' : 'id'}"
49 49 dcname="rerunXl.id"
50 50 icname="id"
51   - dsparams="{{ {type: 'ajax', param:{type: 'all'}, atype:'xl' } | json }}"
  51 + dsparams="{{ {type: 'ajax', param:{type: 'all', 'destroy_eq': 0}, atype:'xl' } | json }}"
52 52 iterobjname="item"
53 53 iterobjexp="item.name"
54 54 searchph="请输拼音..."
... ...
src/main/resources/static/pages/scheduleApp/module/core/rerunManage/form.html
... ... @@ -48,7 +48,7 @@
48 48 cmaps="{'rerunXl.id' : 'id'}"
49 49 dcname="rerunXl.id"
50 50 icname="id"
51   - dsparams="{{ {type: 'ajax', param:{type: 'all'}, atype:'xl' } | json }}"
  51 + dsparams="{{ {type: 'ajax', param:{type: 'all', 'destroy_eq': 0}, atype:'xl' } | json }}"
52 52 iterobjname="item"
53 53 iterobjexp="item.name"
54 54 searchph="请输拼音..."
... ...
src/main/resources/static/pages/scheduleApp/module/core/rerunManage/index.html
... ... @@ -32,34 +32,34 @@
32 32 添加套跑
33 33 </a>
34 34  
35   - <div class="btn-group">
36   - <a href="javascript:" class="btn red btn-outline btn-circle" data-toggle="dropdown">
37   - <i class="fa fa-share"></i>
38   - <span>数据工具</span>
39   - <i class="fa fa-angle-down"></i>
40   - </a>
41   - <ul class="dropdown-menu pull-right">
42   - <li>
43   - <a href="javascript:" class="tool-action">
44   - <i class="fa fa-file-excel-o"></i>
45   - 导入excel
46   - </a>
47   - </li>
48   - <li>
49   - <a href="javascript:" class="tool-action">
50   - <i class="fa fa-file-excel-o"></i>
51   - 导出excel
52   - </a>
53   - </li>
54   - <li class="divider"></li>
55   - <li>
56   - <a href="javascript:" class="tool-action">
57   - <i class="fa fa-refresh"></i>
58   - 刷行数据
59   - </a>
60   - </li>
61   - </ul>
62   - </div>
  35 + <!--<div class="btn-group">-->
  36 + <!--<a href="javascript:" class="btn red btn-outline btn-circle" data-toggle="dropdown">-->
  37 + <!--<i class="fa fa-share"></i>-->
  38 + <!--<span>数据工具</span>-->
  39 + <!--<i class="fa fa-angle-down"></i>-->
  40 + <!--</a>-->
  41 + <!--<ul class="dropdown-menu pull-right">-->
  42 + <!--<li>-->
  43 + <!--<a href="javascript:" class="tool-action">-->
  44 + <!--<i class="fa fa-file-excel-o"></i>-->
  45 + <!--导入excel-->
  46 + <!--</a>-->
  47 + <!--</li>-->
  48 + <!--<li>-->
  49 + <!--<a href="javascript:" class="tool-action">-->
  50 + <!--<i class="fa fa-file-excel-o"></i>-->
  51 + <!--导出excel-->
  52 + <!--</a>-->
  53 + <!--</li>-->
  54 + <!--<li class="divider"></li>-->
  55 + <!--<li>-->
  56 + <!--<a href="javascript:" class="tool-action">-->
  57 + <!--<i class="fa fa-refresh"></i>-->
  58 + <!--刷行数据-->
  59 + <!--</a>-->
  60 + <!--</li>-->
  61 + <!--</ul>-->
  62 + <!--</div>-->
63 63 </div>
64 64 </div>
65 65  
... ...
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/index_info.html
... ... @@ -34,35 +34,35 @@
34 34 <span ng-bind="etime | date: 'yyyy-MM-dd ' + '排班明细列表'"></span>
35 35 </span>
36 36 </div>
37   - <div class="actions">
38   - <a href="javascirpt:" class="btn btn-circle blue" >
39   - <i class="fa fa-plus"></i>
40   - 添加
41   - </a>
  37 + <!--<div class="actions">-->
  38 + <!--<a href="javascirpt:" class="btn btn-circle blue" >-->
  39 + <!--<i class="fa fa-plus"></i>-->
  40 + <!--添加-->
  41 + <!--</a>-->
42 42  
43   - <div class="btn-group">
44   - <a href="javascript:" class="btn red btn-outline btn-circle" data-toggle="dropdown">
45   - <i class="fa fa-share"></i>
46   - <span>数据工具</span>
47   - <i class="fa fa-angle-down"></i>
48   - </a>
49   - <ul class="dropdown-menu pull-right">
50   - <li>
51   - <a href="javascript:" class="tool-action">
52   - <i class="fa fa-file-excel-o"></i>
53   - 导出excel
54   - </a>
55   - </li>
56   - <li class="divider"></li>
57   - <li>
58   - <a href="javascript:" class="tool-action">
59   - <i class="fa fa-refresh"></i>
60   - 刷行数据
61   - </a>
62   - </li>
63   - </ul>
64   - </div>
65   - </div>
  43 + <!--<div class="btn-group">-->
  44 + <!--<a href="javascript:" class="btn red btn-outline btn-circle" data-toggle="dropdown">-->
  45 + <!--<i class="fa fa-share"></i>-->
  46 + <!--<span>数据工具</span>-->
  47 + <!--<i class="fa fa-angle-down"></i>-->
  48 + <!--</a>-->
  49 + <!--<ul class="dropdown-menu pull-right">-->
  50 + <!--<li>-->
  51 + <!--<a href="javascript:" class="tool-action">-->
  52 + <!--<i class="fa fa-file-excel-o"></i>-->
  53 + <!--导出excel-->
  54 + <!--</a>-->
  55 + <!--</li>-->
  56 + <!--<li class="divider"></li>-->
  57 + <!--<li>-->
  58 + <!--<a href="javascript:" class="tool-action">-->
  59 + <!--<i class="fa fa-refresh"></i>-->
  60 + <!--刷行数据-->
  61 + <!--</a>-->
  62 + <!--</li>-->
  63 + <!--</ul>-->
  64 + <!--</div>-->
  65 + <!--</div>-->
66 66 </div>
67 67  
68 68 <div class="portlet-body">
... ...
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/index_report.html
... ... @@ -26,30 +26,30 @@
26 26 <i class="fa fa-database font-dark"></i>
27 27 <span class="caption-subject bold uppercase">排班计划</span>
28 28 </div>
29   - <div class="actions">
30   - <div class="btn-group">
31   - <a href="javascript:" class="btn red btn-outline btn-circle" data-toggle="dropdown">
32   - <i class="fa fa-share"></i>
33   - <span>数据工具</span>
34   - <i class="fa fa-angle-down"></i>
35   - </a>
36   - <ul class="dropdown-menu pull-right">
37   - <li>
38   - <a href="javascript:" class="tool-action">
39   - <i class="fa fa-file-excel-o"></i>
40   - 导出excel
41   - </a>
42   - </li>
43   - <li class="divider"></li>
44   - <li>
45   - <a href="javascript:" class="tool-action">
46   - <i class="fa fa-refresh"></i>
47   - 刷行数据
48   - </a>
49   - </li>
50   - </ul>
51   - </div>
52   - </div>
  29 + <!--<div class="actions">-->
  30 + <!--<div class="btn-group">-->
  31 + <!--<a href="javascript:" class="btn red btn-outline btn-circle" data-toggle="dropdown">-->
  32 + <!--<i class="fa fa-share"></i>-->
  33 + <!--<span>数据工具</span>-->
  34 + <!--<i class="fa fa-angle-down"></i>-->
  35 + <!--</a>-->
  36 + <!--<ul class="dropdown-menu pull-right">-->
  37 + <!--<li>-->
  38 + <!--<a href="javascript:" class="tool-action">-->
  39 + <!--<i class="fa fa-file-excel-o"></i>-->
  40 + <!--导出excel-->
  41 + <!--</a>-->
  42 + <!--</li>-->
  43 + <!--<li class="divider"></li>-->
  44 + <!--<li>-->
  45 + <!--<a href="javascript:" class="tool-action">-->
  46 + <!--<i class="fa fa-refresh"></i>-->
  47 + <!--刷行数据-->
  48 + <!--</a>-->
  49 + <!--</li>-->
  50 + <!--</ul>-->
  51 + <!--</div>-->
  52 + <!--</div>-->
53 53 </div>
54 54  
55 55 <div class="portlet-body">
... ...
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/list.html
... ... @@ -4,13 +4,13 @@
4 4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column">
5 5 <thead>
6 6 <tr role="row" class="heading">
7   - <th style="width: 5%;">序号</th>
8   - <th style="width: 15%;">线路</th>
9   - <th style="width: 20%;">时刻表</th>
10   - <th>排班开始时间</th>
11   - <th>排班结束时间</th>
12   - <th>修改时间</th>
13   - <th style="width: 21%">操作</th>
  7 + <th style="width: 50px;">序号</th>
  8 + <th style="width: 150px;">线路</th>
  9 + <th style="width: 100%;">关联时刻表</th>
  10 + <th style="width: 150px;">排班开始日期</th>
  11 + <th style="width: 150px;">排班结束日期</th>
  12 + <th style="width: 180px;">排班操作时间</th>
  13 + <th style="width: 180px;">操作</th>
14 14 </tr>
15 15 <tr role="row" class="filter">
16 16 <td></td>
... ... @@ -25,9 +25,37 @@
25 25 datatype="xl">
26 26 </sa-Select3>
27 27 </td>
28   - <td></td>
29   - <td></td>
30   - <td></td>
  28 + <td>
  29 + <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition().name_like" placeholder="输入时刻表名称..."/>
  30 + </td>
  31 + <td>
  32 + <div class="input-group">
  33 + <input type="text" class="form-control input-sm"
  34 + name="scheduleFromTime" placeholder="选择日期..."
  35 + uib-datepicker-popup="yyyy-MM-dd"
  36 + is-open="ctrl.scheduleFromTime"
  37 + ng-model="ctrl.searchCondition()['scheduleFromTime_ge']" readonly/>
  38 + <span class="input-group-btn">
  39 + <button type="button" class="btn btn-default btn-sm" ng-click="ctrl.scheduleFromTime_open()">
  40 + <i class="glyphicon glyphicon-calendar"></i>
  41 + </button>
  42 + </span>
  43 + </div>
  44 + </td>
  45 + <td>
  46 + <div class="input-group">
  47 + <input type="text" class="form-control input-sm"
  48 + name="scheduleToTime" placeholder="选择日期..."
  49 + uib-datepicker-popup="yyyy-MM-dd"
  50 + is-open="ctrl.scheduleToTime"
  51 + ng-model="ctrl.searchCondition()['scheduleToTime_le']" readonly/>
  52 + <span class="input-group-btn">
  53 + <button type="button" class="btn btn-default btn-sm" ng-click="ctrl.scheduleToTime_open()">
  54 + <i class="glyphicon glyphicon-calendar"></i>
  55 + </button>
  56 + </span>
  57 + </div>
  58 + </td>
31 59 <td></td>
32 60 <td>
33 61 <button class="btn btn-sm green btn-outline filter-submit margin-bottom"
... ... @@ -50,7 +78,7 @@
50 78 <span ng-bind="info.xl.name"></span>
51 79 </td>
52 80 <td>
53   - <span ng-bind="info.ttInfo.name"></span>
  81 + <span ng-bind="info.ttInfoNames"></span>
54 82 </td>
55 83 <td>
56 84 <span ng-bind="info.scheduleFromTime | date: 'yyyy-MM-dd '"></span>
... ... @@ -64,10 +92,10 @@
64 92 <td>
65 93 <!--<a href="details.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 详细 </a>-->
66 94 <!--<a href="edit.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 修改 </a>-->
67   - <a ui-sref="schedulePlanInfoManage({spid : info.id, xlname : info.xl.name, ttname : info.ttInfo.name, stime : info.scheduleFromTime, etime : info.scheduleToTime})"
68   - class="btn default blue-stripe btn-sm"> 排班明细 </a>
  95 + <a ui-sref="schedulePlanInfoManage({spid : info.id, xlname : info.xl.name, ttname : info.ttInfoNames, stime : info.scheduleFromTime, etime : info.scheduleToTime})"
  96 + class="btn btn-info btn-sm"> 明细 </a>
69 97 <a ng-click="ctrl.deletePlan(info.id)"
70   - class="btn default blue-stripe btn-sm"> 删除 </a>
  98 + class="btn btn-danger btn-sm"> 删除 </a>
71 99 </td>
72 100 </tr>
73 101 </tbody>
... ...
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/list_info.html
... ... @@ -4,28 +4,37 @@
4 4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column">
5 5 <thead>
6 6 <tr role="row" class="heading">
7   - <th style="width: 40pt;">序号</th>
8   - <th>线路</th>
9   - <th style="width: 80pt;">日期</th>
10   - <th>路牌</th>
11   - <th>车辆</th>
12   - <th>备注</th>
13   - <th>报道时间</th>
14   - <th>出场时间</th>
15   - <th>驾驶员</th>
16   - <th>工号</th>
17   - <th>售票员</th>
18   - <th>工号</th>
19   - <th>班次类型</th>
20   - <th>发车时间</th>
  7 + <th style="width: 50px;">序号</th>
  8 + <th style="width: 100px;">线路</th>
  9 + <th style="width: 150px;">日期</th>
  10 + <th style="width: 60px;">路牌</th>
  11 + <th style="width: 150px;">车辆</th>
  12 + <th style="width: 150px;">驾驶员(工号)</th>
  13 + <th style="width: 150px;">售票员(工号)</th>
  14 + <th style="width: 80px;">班次类型</th>
  15 + <th style="width: 80px;">发车时间</th>
  16 + <th style="width: 100%">时刻表</th>
21 17  
22 18 <!-- TODO:还有其他的 -->
23 19  
24   - <th style="width: 115pt;">操作</th>
25 20 </tr>
26 21 <tr role="row" class="filter">
27 22 <td></td>
28 23 <td></td>
  24 + <td>
  25 + <div class="input-group">
  26 + <input type="text" class="form-control input-sm"
  27 + name="scheduleDate" placeholder="选择日期..."
  28 + uib-datepicker-popup="yyyy-MM-dd"
  29 + is-open="ctrl.scheduleDate"
  30 + ng-model="ctrl.searchCondition()['scheduleDate_eq']" readonly/>
  31 + <span class="input-group-btn">
  32 + <button type="button" class="btn btn-default btn-sm" ng-click="ctrl.scheduleDate_open()">
  33 + <i class="glyphicon glyphicon-calendar"></i>
  34 + </button>
  35 + </span>
  36 + </div>
  37 + </td>
29 38 <td></td>
30 39 <td></td>
31 40 <td></td>
... ... @@ -33,21 +42,6 @@
33 42 <td></td>
34 43 <td></td>
35 44 <td></td>
36   - <td></td>
37   - <td></td>
38   - <td></td>
39   - <td></td>
40   - <td></td>
41   -
42   - <td>
43   - <button class="btn btn-sm green btn-outline filter-submit margin-bottom"
44   - ng-click="ctrl.pageChanaged()">
45   - <i class="fa fa-search"></i> 搜索</button>
46   -
47   - <button class="btn btn-sm red btn-outline filter-cancel"
48   - ng-click="ctrl.resetSearchCondition()">
49   - <i class="fa fa-times"></i> 重置</button>
50   - </td>
51 45  
52 46 </tr>
53 47 </thead>
... ... @@ -69,24 +63,12 @@
69 63 <td>
70 64 <span ng-bind="info.clZbh"></span>
71 65 </td>
72   - <td></td>
73 66 <td>
74   - <span ng-bind="info.bdTime"></span>
75   - </td>
76   - <td>
77   - <span ng-bind="info.ccTime"></span>
78   - </td>
79   - <td>
80   - <span ng-bind="info.jName"></span>
81   - </td>
82   - <td>
83   - <span ng-bind="info.jGh"></span>
84   - </td>
85   - <td>
86   - <span ng-bind="info.sName"></span>
  67 + <span>{{info.jName ? info.jName + '(' + info.jGh + ')' : ''}}</span>
  68 +
87 69 </td>
88 70 <td>
89   - <span ng-bind="info.sGh"></span>
  71 + <span>{{info.sGh ? info.sName + '(' + info.sGh + ')' : ''}}</span>
90 72 </td>
91 73 <td>
92 74 <span ng-bind="info.bcType | dict:'ScheduleType':'未知' "></span>
... ... @@ -94,13 +76,10 @@
94 76 <td>
95 77 <span ng-bind="info.fcsj"></span>
96 78 </td>
97   -
98 79 <td>
99   - <!--<a href="details.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 详细 </a>-->
100   - <!--<a href="edit.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 修改 </a>-->
101   - <a ui-sref="#" class="btn default blue-stripe btn-sm"> 详细 </a>
102   - <a ui-sref="#" class="btn default blue-stripe btn-sm"> 修改 </a>
  80 + <abbr title="info.ttInfoName">{{info.ttInfoName}}</abbr>
103 81 </td>
  82 +
104 83 </tr>
105 84 </tbody>
106 85  
... ...
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/schedulePlanInfoManage.js
... ... @@ -75,6 +75,12 @@ angular.module(&#39;ScheduleApp&#39;).controller(&#39;SchedulePlanInfoManageListCtrl&#39;, [&#39;Sch
75 75 infos: []
76 76 };
77 77  
  78 + // 日期 日期控件开关
  79 + self.scheduleDate = false;
  80 + self.scheduleDate_open = function() {
  81 + self.scheduleDate = true;
  82 + };
  83 +
78 84 var spid = $scope.spid;
79 85  
80 86 // 初始创建的时候,获取一次列表数据
... ... @@ -118,6 +124,18 @@ angular.module(&#39;ScheduleApp&#39;).controller(&#39;SchedulePlanInfoManageListCtrl&#39;, [&#39;Sch
118 124 return schedulePlanInfoManageService.resetSearchCondition();
119 125 };
120 126  
  127 + $scope.$watch(
  128 + function() {
  129 + return self.searchCondition()['scheduleDate_eq'];
  130 + },
  131 + function(newValue, oldValue) {
  132 + if (newValue == undefined && oldValue == undefined) {
  133 +
  134 + } else {
  135 + self.pageChanaged();
  136 + }
  137 + });
  138 +
121 139 }]);
122 140  
123 141  
... ...
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/schedulePlanManage.js
... ... @@ -78,6 +78,16 @@ angular.module(&#39;ScheduleApp&#39;).controller(&#39;SchedulePlanManageListCtrl&#39;, [&#39;Schedul
78 78 infos: []
79 79 };
80 80  
  81 + // 日期 日期控件开关
  82 + self.scheduleFromTime = false;
  83 + self.scheduleFromTime_open = function() {
  84 + self.scheduleFromTime = true;
  85 + };
  86 + self.scheduleToTime = false;
  87 + self.scheduleToTime_open = function() {
  88 + self.scheduleToTime = true;
  89 + };
  90 +
81 91 // 初始创建的时候,获取一次列表数据
82 92 schedulePlanManageService.getPage().then(
83 93 function(result) {
... ...
src/main/resources/static/pages/scheduleApp/module/core/scheduleRuleManage/edit.html
... ... @@ -43,17 +43,18 @@
43 43 <div class="form-group has-success has-feedback">
44 44 <label class="col-md-2 control-label">线路*:</label>
45 45 <div class="col-md-3">
46   - <sa-Select3 model="ctrl.scheduleRuleManageForSave"
47   - name="xl"
48   - placeholder="请输拼音..."
49   - dcvalue="{{ctrl.scheduleRuleManageForSave.xl.id}}"
  46 + <sa-Select5 name="xl"
  47 + model="ctrl.scheduleRuleManageForSave"
  48 + cmaps="{'xl.id' : 'id'}"
50 49 dcname="xl.id"
51 50 icname="id"
52   - icnames="name"
53   - datatype="xl"
54   - mlp="true"
  51 + dsparams="{{ {type: 'ajax', param:{type: 'all', 'destroy_eq': 0}, atype:'xl' } | json }}"
  52 + iterobjname="item"
  53 + iterobjexp="item.name"
  54 + searchph="请输拼音..."
  55 + searchexp="this.name"
55 56 required >
56   - </sa-Select3>
  57 + </sa-Select5>
57 58 </div>
58 59 <!-- 隐藏块,显示验证信息 -->
59 60 <div class="alert alert-danger well-sm" ng-show="myForm.xl.$error.required">
... ...
src/main/resources/static/pages/scheduleApp/module/core/scheduleRuleManage/form.html
... ... @@ -43,17 +43,18 @@
43 43 <div class="form-group has-success has-feedback">
44 44 <label class="col-md-2 control-label">线路*:</label>
45 45 <div class="col-md-3">
46   - <sa-Select3 model="ctrl.scheduleRuleManageForSave"
47   - name="xl"
48   - placeholder="请输拼音..."
49   - dcvalue="{{ctrl.scheduleRuleManageForSave.xl.id}}"
  46 + <sa-Select5 name="xl"
  47 + model="ctrl.scheduleRuleManageForSave"
  48 + cmaps="{'xl.id' : 'id'}"
50 49 dcname="xl.id"
51 50 icname="id"
52   - icnames="name"
53   - datatype="xl"
54   - mlp="true"
  51 + dsparams="{{ {type: 'ajax', param:{type: 'all', 'destroy_eq': 0}, atype:'xl' } | json }}"
  52 + iterobjname="item"
  53 + iterobjexp="item.name"
  54 + searchph="请输拼音..."
  55 + searchexp="this.name"
55 56 required >
56   - </sa-Select3>
  57 + </sa-Select5>
57 58 </div>
58 59 <!-- 隐藏块,显示验证信息 -->
59 60 <div class="alert alert-danger well-sm" ng-show="myForm.xl.$error.required">
... ...
src/main/resources/static/pages/scheduleApp/module/core/scheduleRuleManage/index.html
... ... @@ -32,34 +32,34 @@
32 32 添加规则
33 33 </a>
34 34  
35   - <div class="btn-group">
36   - <a href="javascript:" class="btn red btn-outline btn-circle" data-toggle="dropdown">
37   - <i class="fa fa-share"></i>
38   - <span>数据工具</span>
39   - <i class="fa fa-angle-down"></i>
40   - </a>
41   - <ul class="dropdown-menu pull-right">
42   - <li>
43   - <a href="javascript:" class="tool-action">
44   - <i class="fa fa-file-excel-o"></i>
45   - 规则类型
46   - </a>
47   - </li>
48   - <li>
49   - <a href="javascript:" class="tool-action">
50   - <i class="fa fa-file-excel-o"></i>
51   - 导出excel
52   - </a>
53   - </li>
54   - <li class="divider"></li>
55   - <li>
56   - <a href="javascript:" class="tool-action">
57   - <i class="fa fa-refresh"></i>
58   - 刷行数据
59   - </a>
60   - </li>
61   - </ul>
62   - </div>
  35 + <!--<div class="btn-group">-->
  36 + <!--<a href="javascript:" class="btn red btn-outline btn-circle" data-toggle="dropdown">-->
  37 + <!--<i class="fa fa-share"></i>-->
  38 + <!--<span>数据工具</span>-->
  39 + <!--<i class="fa fa-angle-down"></i>-->
  40 + <!--</a>-->
  41 + <!--<ul class="dropdown-menu pull-right">-->
  42 + <!--<li>-->
  43 + <!--<a href="javascript:" class="tool-action">-->
  44 + <!--<i class="fa fa-file-excel-o"></i>-->
  45 + <!--规则类型-->
  46 + <!--</a>-->
  47 + <!--</li>-->
  48 + <!--<li>-->
  49 + <!--<a href="javascript:" class="tool-action">-->
  50 + <!--<i class="fa fa-file-excel-o"></i>-->
  51 + <!--导出excel-->
  52 + <!--</a>-->
  53 + <!--</li>-->
  54 + <!--<li class="divider"></li>-->
  55 + <!--<li>-->
  56 + <!--<a href="javascript:" class="tool-action">-->
  57 + <!--<i class="fa fa-refresh"></i>-->
  58 + <!--刷行数据-->
  59 + <!--</a>-->
  60 + <!--</li>-->
  61 + <!--</ul>-->
  62 + <!--</div>-->
63 63 </div>
64 64 </div>
65 65  
... ...
src/main/resources/static/pages/scheduleApp/module/core/scheduleRuleManage/list.html
... ... @@ -83,9 +83,9 @@
83 83 <td>
84 84 <!--<a href="details.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 详细 </a>-->
85 85 <!--<a href="edit.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 修改 </a>-->
86   - <a ui-sref="scheduleRuleManage_detail({id : info.id})" class="btn default blue-stripe btn-sm"> 详细 </a>
87   - <a ui-sref="scheduleRuleManage_edit({id : info.id})" class="btn default blue-stripe btn-sm"> 修改 </a>
88   - <a ng-click="ctrl.deleteRule(info.id)" class="btn default blue-stripe btn-sm"> 删除 </a>
  86 + <a ui-sref="scheduleRuleManage_detail({id : info.id})" class="btn btn-info btn-sm"> 详细 </a>
  87 + <a ui-sref="scheduleRuleManage_edit({id : info.id})" class="btn btn-info btn-sm"> 修改 </a>
  88 + <a ng-click="ctrl.deleteRule(info.id)" class="btn btn-danger btn-sm"> 删除 </a>
89 89 </td>
90 90 </tr>
91 91 </tbody>
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoDetailManage/edit-detail.html
1 1 <div ng-controller="TimeTableDetailManageFormCtrl_old as ctrl">
2 2 <div class="page-head">
3 3 <div class="page-title">
4   - <h1>修改班次信息2</h1>
  4 + <h1>修改班次信息</h1>
5 5 </div>
6 6 </div>
7 7  
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoDetailManage/edit.html
1 1 <div class="page-head">
2 2 <div class="page-title">
3   - <h1>时刻表管理2</h1>
  3 + <h1>时刻表管理</h1>
4 4 </div>
5 5 </div>
6 6  
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoDetailManage/form.html
1 1 <div class="page-head">
2 2 <div class="page-title">
3   - <h1>时刻表管理2</h1>
  3 + <h1>时刻表管理</h1>
4 4 </div>
5 5 </div>
6 6  
... ... @@ -89,7 +89,7 @@
89 89 ng-disabled="!item.isUploading">
90 90 <span class="glyphicon glyphicon-ban-circle"></span> 取消
91 91 </button>
92   - <button type="button" class="btn btn-danger btn-xs" ng-click="item.remove()">
  92 + <button type="button" class="btn btn-danger btn-xs" ng-click="ctrl.removeItem(item)">
93 93 <span class="glyphicon glyphicon-trash"></span> 删除
94 94 </button>
95 95 </td>
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoDetailManage/main.js
... ... @@ -61,6 +61,11 @@ angular.module(&#39;ScheduleApp&#39;).controller(
61 61 self.clearInputFile = function() {
62 62 angular.element("input[type='file']").val(null);
63 63 };
  64 + self.removeItem = function(item) {
  65 + item.remove();
  66 + self.ttInfoDetailManageForForm.sheetname = undefined;
  67 + self.sheetnames = [];
  68 + };
64 69  
65 70 // 上传文件组件
66 71 self.uploader = new FileUploader({
... ... @@ -79,6 +84,8 @@ angular.module(&#39;ScheduleApp&#39;).controller(
79 84 console.log(self.uploader.queue.length);
80 85 if (self.uploader.queue.length > 1)
81 86 self.uploader.removeFromQueue(0);
  87 + self.ttInfoDetailManageForForm.sheetname = undefined;
  88 + self.sheetnames = [];
82 89 };
83 90 self.uploader.onSuccessItem = function(fileItem, response, status, headers)
84 91 {
... ... @@ -109,7 +116,7 @@ angular.module(&#39;ScheduleApp&#39;).controller(
109 116  
110 117 // TODO:edit操作暂时使用旧版本的js文件
111 118  
112   - // {"timestamp":1478674739246,"status":500,"error":"Internal Server Error","exception":"java.lang.ClassCastException","message":"java.lang.String cannot be cast to java.lang.Long","path":"/tidc/importfile"}
  119 +
113 120 }
114 121 ]
115 122 );
116 123 \ No newline at end of file
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/detail.html
1 1 <div class="page-head">
2 2 <div class="page-title">
3   - <h1>时刻表管理2</h1>
  3 + <h1>时刻表管理</h1>
4 4 </div>
5 5 </div>
6 6  
... ... @@ -175,4 +175,5 @@
175 175 </div>
176 176  
177 177  
  178 +>>>>>>> PSM-12
178 179 </div>
179 180 \ No newline at end of file
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/edit.html
1 1 <div class="page-head">
2 2 <div class="page-title">
3   - <h1>时刻表管理2</h1>
  3 + <h1>时刻表管理</h1>
4 4 </div>
5 5 </div>
6 6  
... ... @@ -48,7 +48,7 @@
48 48 cmaps="{'xl.id' : 'id'}"
49 49 dcname="xl.id"
50 50 icname="id"
51   - dsparams="{{ {type: 'ajax', param:{type: 'all'}, atype:'xl' } | json }}"
  51 + dsparams="{{ {type: 'ajax', param:{type: 'all', 'destroy_eq': 0}, atype:'xl' } | json }}"
52 52 iterobjname="item"
53 53 iterobjexp="item.name"
54 54 searchph="请输拼音..."
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/form.html
1 1 <div class="page-head">
2 2 <div class="page-title">
3   - <h1>时刻表管理2</h1>
  3 + <h1>时刻表管理</h1>
4 4 </div>
5 5 </div>
6 6  
... ... @@ -48,7 +48,7 @@
48 48 cmaps="{'xl.id' : 'id'}"
49 49 dcname="xl.id"
50 50 icname="id"
51   - dsparams="{{ {type: 'ajax', param:{type: 'all'}, atype:'xl' } | json }}"
  51 + dsparams="{{ {type: 'ajax', param:{type: 'all', 'destroy_eq': 0}, atype:'xl' } | json }}"
52 52 iterobjname="item"
53 53 iterobjexp="item.name"
54 54 searchph="请输拼音..."
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/index.html
1 1 <div class="page-head">
2 2 <div class="page-title">
3   - <h1>时刻表管理2</h1>
  3 + <h1>时刻表管理</h1>
4 4 </div>
5 5 </div>
6 6  
... ...
src/main/resources/static/real_control_v2/css/main.css
... ... @@ -302,4 +302,4 @@ canvas.crosshair-layer {
302 302 li.map-panel{
303 303 height: 100%;
304 304 position: relative;
305   -}
  305 +}
306 306 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/css/north.css
1 1 .north {
2   - background: linear-gradient(to right, #082F4A, #125688, #0a3f64);
  2 + background: linear-gradient(to right ,#595959, #7b7b7b,#595959);
3 3 height: 120px;
4 4 position: relative;
  5 + transition: all .3s ease;
  6 +}
  7 +
  8 +.north.main {
  9 + background: linear-gradient(to right, #082F4A, #125688, #0a3f64);
  10 +}
  11 +
  12 +.north.scok-colse {
  13 + background: linear-gradient(to right, #924040, #ce6262, #924040) !important;
  14 +}
  15 +
  16 +.north.scok-colse:before {
  17 + content: "长连接被断开,你将无法收到服务器推送的发车、到站信息。请刷新页面以重建连接!";
  18 + position: absolute;
  19 + padding: 5px 10px 5px 14px;
  20 + background: #414141;
  21 + color: #f9f9f9;
  22 + border-radius: 20px 0 0 20px;
  23 + z-index: 5;
  24 + left: 270px;
  25 + box-shadow: 0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);
  26 + border: 1px solid #caaaaa;
  27 + font-size: 13px;
5 28 }
6 29  
7 30 .north .north-logo {
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/sch_table.html
... ... @@ -13,7 +13,7 @@
13 13 <div class="uk-autocomplete sch-search-autocom">
14 14 <div class="uk-form-icon">
15 15 <i class="uk-icon-search"></i>
16   - <input type="text" placeholder="search">
  16 + <input type="text" placeholder="搜索">
17 17 <i class="cancel uk-icon-times-circle" data-uk-tooltip="{pos:'right'}" title="取消过滤"></i>
18 18 </div>
19 19 </div>
... ... @@ -111,8 +111,8 @@
111 111 </dd>
112 112 </script>
113 113  
114   - <script id="line-schedule-sfsj-temp" type="text/html">
115   - <dd class="
  114 +<script id="line-schedule-sfsj-temp" type="text/html">
  115 +<dd class="
116 116 {{if status==-1}}
117 117 tl-qrlb
118 118 {{else if status==2}}
... ...
src/main/resources/static/real_control_v2/fragments/north/nav/charts/s_e_punctuality_rate_line.html
... ... @@ -61,56 +61,46 @@
61 61 //实发准点率 -dfsj 待发时间戳(秒),sfsj 实发时间戳(秒)
62 62 function calcPunctuality(dfsj, sfsj){
63 63 var diff=(dfsj-sfsj)/60;
64   - var rs=0;
65 64 if(diff > 0){
66 65 if(diff <= 1)
67   - rs=1;
68   - else
69   - rs=(10 - (diff - 1)) / 10;
  66 + return true;
70 67 }
71 68 else{
72   - if(Math.abs(diff) < 3)
73   - rs=1;
74   - else
75   - rs=(10 - (Math.abs(diff) - 3)) / 10;
  69 + if(Math.abs(diff) <= 3)
  70 + return true;
76 71 }
77 72  
78   - return rs<0?0:rs;
  73 + return false;
79 74 }
80 75  
81 76 //计算准点率
82 77 function calcPunctualityRate(data){
83   - var line2Reate={}, seff, eeff, fs="YYYY-MM-DDHH:mm";
  78 + var line2Reate={}, eff, fs="YYYY-MM-DDHH:mm";
84 79 for(var lineCode in data){
85   - seff=0;
86   - eeff=0;
  80 + eff=0;
87 81 $.each(data[lineCode], function(){
88 82 //首班时间
89   - if(this.startTime.length == 11){
  83 + if(this.startTime.length >= 11){
90 84 var arr=this.startTime.split('/');
91   - var sDfsj=moment(this.etRealExecDate+arr[0], fs).format('X'),
92   - sSfsj=moment(this.etRealExecDate+arr[1], fs).format('X');
  85 + var dfsj=moment(this.etRealExecDate+arr[0], fs).format('X'),
  86 + sfsj=moment(this.etRealExecDate+arr[1], fs).format('X');
93 87  
94   - seff=calcPunctuality(sDfsj, sSfsj);
  88 + if(calcPunctuality(dfsj, sfsj))
  89 + eff+=25;
95 90 }
96   - else
97   - this.s_isPunctuality=-1;
  91 +
98 92 //末班时间
99   - if(this.endTime.length == 11){
  93 + if(this.endTime.length >= 11){
100 94 var arr=this.endTime.split('/');
101   - var eDfsj=moment(this.etRealExecDate+arr[0], fs).format('X'),
102   - eSfsj=moment(this.etRealExecDate+arr[1], fs).format('X');
  95 + var dfsj=moment(this.etRealExecDate+arr[0], fs).format('X'),
  96 + sfsj=moment(this.etRealExecDate+arr[1], fs).format('X');
103 97  
104   - eeff=calcPunctuality(eDfsj, eSfsj);
  98 + if(calcPunctuality(dfsj, sfsj))
  99 + eff+=25;
105 100 }
106   - else
107   - this.e_isPunctuality=-1;
108 101 });
109 102  
110   - line2Reate[lineCode]={
111   - seff: (seff*100).toFixed(2),
112   - eeff: (eeff*100).toFixed(2)
113   - };
  103 + line2Reate[lineCode]={eff: eff};
114 104 }
115 105  
116 106 return line2Reate;
... ... @@ -165,26 +155,17 @@
165 155 //lineCode再次分组,计算准点率
166 156 var line2Reate=calcPunctualityRate(gb_common.groupBy(groupList[date],'lineCode'));
167 157  
168   - sData=[], eData=[];
  158 + sData=[];
169 159 //subData=[];
170 160 $.each(lineCodeArr, function(i, code){
171 161 sData.push({
172   - value: line2Reate[code]?line2Reate[code].seff:0,
173   - date:date,
174   - lineCode: code
175   - });
176   -
177   - eData.push({
178   - value: line2Reate[code]?line2Reate[code].eeff:0,
  162 + value: line2Reate[code]?line2Reate[code].eff:0,
179 163 date:date,
180 164 lineCode: code
181 165 });
182 166 });
183 167  
184 168 data.push({
185   - legend: {
186   - data: ['首班', '末班']
187   - },
188 169 grid: {x: 30, x2: 5, height: 390, y: 94, y2: 50},
189 170 tooltip: {
190 171 'trigger': 'axis',
... ... @@ -206,21 +187,16 @@
206 187 },
207 188 title: {
208 189 text: date + '首末班次准点率',
209   - subtext: '线路首末班发车数据(快1慢3准点,差值每分钟降10点)'
  190 + subtext: '线路上下行首末班,4个班次,每个班次25%(快1慢3准点)'
210 191 },
211   - text: date + '发车率',
212 192 series: [{
213   - name: '首班',
  193 + name: '准点率',
214 194 type: 'bar',
215 195 data: sData
216   - },
217   - {
218   - name: '末班',
219   - type: 'bar',
220   - data: eData
221   - }]
  196 + }]
222 197 });
223 198 }
  199 + console.log(data);
224 200  
225 201 $('.load-panel', modal).hide();
226 202 $('#countBtn', modal).removeAttr('disabled');
... ...
src/main/resources/static/real_control_v2/fragments/north/nav/charts/sch_exec_rate.html 0 → 100644
  1 +<div class="uk-modal" id="sch-exec-rate-modal">
  2 + <div class="uk-modal-dialog" style="width: 1200px;">
  3 + <a href="" class="uk-modal-close uk-close"></a>
  4 + <div class="uk-modal-header">
  5 + <h2>班次执行率</h2></div>
  6 +
  7 + <div class="uk-panel uk-panel-box uk-panel-box-primary" style="margin-bottom: 10px;">
  8 + <form class="uk-form search-form">
  9 + <fieldset data-uk-margin>
  10 + <div class="uk-form-icon">
  11 + <i class="uk-icon-calendar"></i>
  12 + <input type="date" id="dateInput">
  13 + </div>
  14 + <button class="uk-button" id="countBtn">统计</button>
  15 + </fieldset>
  16 + </form>
  17 + </div>
  18 +
  19 + <div class="chart-wrap" style="height: 570px;">
  20 +
  21 + </div>
  22 +
  23 + <div class="load-panel">
  24 + <i class="uk-icon-spinner uk-icon-spin"></i>
  25 + 正在汇总数据
  26 + </div>
  27 + </div>
  28 +
  29 + <script>
  30 + (function () {
  31 +
  32 + var modal = '#sch-exec-rate-modal';
  33 + var chartObj;
  34 +
  35 + var option = {
  36 + color: ['#3398DB'],
  37 + tooltip: {
  38 + trigger: 'axis',
  39 + axisPointer: {
  40 + type: 'shadow'
  41 + }
  42 + },
  43 + grid: {
  44 + left: '3%',
  45 + right: '4%',
  46 + bottom: '3%',
  47 + containLabel: true
  48 + },
  49 + xAxis: [
  50 + {
  51 + type: 'category',
  52 + axisTick: {
  53 + alignWithLabel: true
  54 + }
  55 + }
  56 + ],
  57 + yAxis: [
  58 + {
  59 + type: 'value',
  60 + min: 0,
  61 + max: 100,
  62 + name: '执行率'
  63 + }
  64 + ],
  65 + series: [
  66 + {
  67 + name: '班次执行率',
  68 + type: 'bar',
  69 + barWidth: '60%'
  70 + }
  71 + ]
  72 + };
  73 +
  74 +
  75 + $(modal).on('init', function (e, data) {
  76 + //默认当天
  77 + var m = moment().format('YYYY-MM-DD');
  78 + $('#dateInput', modal).val(m);
  79 +
  80 + chartObj = echarts.init($('.chart-wrap', modal)[0]);
  81 + chartObj.on('click', chartObjClickHandler);
  82 + renderChart();
  83 +
  84 + });
  85 +
  86 +
  87 + $('#countBtn', modal).on('click', function () {
  88 + try {
  89 + renderChart();
  90 + } catch (e) {
  91 + console.log(e);
  92 + }
  93 + return false;
  94 + });
  95 +
  96 + //计算执行率
  97 + function calcSchExecRate(list) {
  98 + if (!list)
  99 + return 0;
  100 + var eff = 0;
  101 + $.each(list, function () {
  102 + if (this.status >= 1)
  103 + eff++;
  104 + });
  105 + return (eff / list.length * 100).toFixed(2);
  106 + }
  107 +
  108 + var renderData;
  109 +
  110 + function renderChart() {
  111 + //xAxis data
  112 + var xAxisData = [], lineCodeArr = [];
  113 + $.each(gb_data_basic.activeLines, function () {
  114 + xAxisData.push(this.name);
  115 + lineCodeArr.push(this.lineCode);
  116 + });
  117 + option.xAxis[0].data = xAxisData;
  118 +
  119 + $.get('/realCharts/scheduleExecRates', {
  120 + idx: gb_data_basic.line_idx,
  121 + date: $('#dateInput', modal).val()
  122 + }, function (rs) {
  123 + //console.log(rs);
  124 + //按线路分组
  125 + var groupData = gb_common.groupBy(rs, 'lineCode');
  126 +
  127 + renderData = groupData;
  128 + var data = [];
  129 +
  130 + for (var i = 0, code; code = lineCodeArr[i++];) {
  131 + //计算执行率
  132 + var eff = calcSchExecRate(groupData[code]);
  133 + data.push({value: eff, lineCode: code});
  134 + }
  135 +
  136 + option.series[0].data = data;
  137 + chartObj.setOption(option);
  138 + });
  139 + }
  140 +
  141 + function chartObjClickHandler(obj) {
  142 + if (obj.componentType != 'series' || obj.componentSubType != 'bar')
  143 + return;
  144 +
  145 + var list = renderData[obj.data.lineCode];
  146 + list = list.filter(function (obj) {
  147 + if(obj.status<1)
  148 + return 1;
  149 + else
  150 + return 0;
  151 + });
  152 +
  153 + $.get('/real_control_v2/fragments/north/nav/charts/sch_exec_rate_detail.html', function (htmlStr) {
  154 + $(document.body).append(htmlStr);
  155 + var detailModal = '#sch-exec-rate-detail-modal';
  156 + var elem = UIkit.modal(detailModal, {bgclose: true, modal: false}).show();
  157 + $(detailModal).trigger('init', {list: list});
  158 + })
  159 + }
  160 + })();
  161 + </script>
  162 +</div>
... ...
src/main/resources/static/real_control_v2/fragments/north/nav/charts/sch_exec_rate_detail.html 0 → 100644
  1 +<div class="uk-modal" id="sch-exec-rate-detail-modal">
  2 + <div class="uk-modal-dialog" style="width: 350px;">
  3 + <a href="" class="uk-modal-close uk-close"></a>
  4 + <div style="margin:5px 0 -18px;">
  5 + <table class="ct-fixed-table uk-table uk-table-hover">
  6 + <thead>
  7 + <tr>
  8 + <th style="width: 40%;">线路</th>
  9 + <th style="width: 30%;">待发</th>
  10 + <th style="width: 30%;">状态</th>
  11 + </tr>
  12 + </thead>
  13 + <tbody>
  14 + </tbody>
  15 + </table>
  16 + </div>
  17 + </div>
  18 +
  19 + <script id="sch-exec-rate-detail-table-temp" type="text/html">
  20 + {{each list as obj i}}
  21 + <tr>
  22 + <td>{{obj.lineName}}</td>
  23 + <td>{{obj.dfsj}}</td>
  24 + <td>
  25 + {{if obj.status==-1}}
  26 + <span style="color: red;">烂班</span>
  27 + {{else if obj.status==1}}
  28 + 正在执行
  29 + {{else if obj.status==2}}
  30 + 已执行
  31 + {{/if}}
  32 + </td>
  33 + </tr>
  34 + {{/each}}
  35 + </script>
  36 +
  37 + <script>
  38 + (function() {
  39 + var modal = '#sch-exec-rate-detail-modal';
  40 +
  41 + $(modal).on('init', function(e, data) {
  42 + var code2Name = gb_data_basic.lineCode2NameAll();
  43 + $.each(data.list, function(){
  44 + this.lineName=code2Name[this.lineCode];
  45 + });
  46 +
  47 + var tbodys=template('sch-exec-rate-detail-table-temp', {list: data.list});
  48 + $('table tbody', modal).html(tbodys);
  49 + });
  50 + })();
  51 + </script>
  52 +</div>
... ...
src/main/resources/static/real_control_v2/fragments/north/nav/charts/strat_end_punctuality_rate_dateil.html
... ... @@ -7,7 +7,7 @@
7 7 <tr>
8 8 <th style="width: 14%;">日期</th>
9 9 <th style="width: 14%;">线路</th>
10   - <th style="width: 14%;">车辆</th>
  10 + <th style="width: 14%;">上下行</th>
11 11 <th style="width: 23%;">首班</th>
12 12 <th style="width: 23%;">末班</th>
13 13 </tr>
... ... @@ -23,7 +23,13 @@
23 23 <tr>
24 24 <td>{{obj.dateStr}}</td>
25 25 <td>{{obj.lineName}}</td>
26   - <td>{{obj.nbbm}}</td>
  26 + <td>
  27 + {{if obj.updown==0}}
  28 + 上行
  29 + {{else if obj.updown==1}}
  30 + 下行
  31 + {{/if}}
  32 + </td>
27 33 <td>
28 34 {{obj.startTime}}
29 35 </td>
... ... @@ -44,15 +50,13 @@
44 50 var code2Name = gb_data_basic.lineCode2NameAll();
45 51 $.each(data.list, function(){
46 52 this.lineName=code2Name[this.lineCode];
  53 + if(this.startTime.indexOf('_'))
  54 + this.startTime=this.startTime.split('_')[0];
  55 + if(this.endTime.indexOf('_'))
  56 + this.endTime=this.endTime.split('_')[0];
47 57 });
48 58  
49   - /*data.list.sort(function(a, b){
50   - if(!a.firstOut)
51   - return -1;
52   - if(!b.firstOut)
53   - return 1;
54   - return a.firstOut.localeCompare(b.firstOut);
55   - });*/
  59 +
56 60  
57 61 var tbodys=template('s-e-punctuality-rate-dateil-table-temp', {list: data.list});
58 62 $('table tbody', modal).html(tbodys);
... ...
src/main/resources/static/real_control_v2/fragments/north/nav/history_sch_maintain.html
... ... @@ -87,7 +87,12 @@
87 87 {{if sch.cTasks.length > 0}}
88 88 <span class="uk-badge uk-badge-notification">{{sch.cTasks.length}}</span>
89 89 {{/if}}</dd>
90   - <dd>{{sch.dfsj}}</dd>
  90 + <dd>
  91 + {{sch.dfsj}}
  92 + {{if sch.status==-1}}
  93 + <span class="uk-badge uk-badge-danger">烂班</span>
  94 + {{/if}}
  95 + </dd>
91 96 <dd>{{sch.fcsjActual}}</dd>
92 97 <dd>{{sch.zdsjActual}}</dd>
93 98 <dd title="{{sch.remarks}}">{{sch.remarks}}</dd>
... ... @@ -274,4 +279,4 @@
274 279 });
275 280 })();
276 281 </script>
277   -</div>
  282 +</div>
278 283 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/js/line_schedule/sch_table.js
... ... @@ -195,7 +195,7 @@ var gb_schedule_table = (function() {
195 195 }).on('mouseup', function() {
196 196 drag_strat = null;
197 197 }).on('mouseover', seq_nos, function() {
198   - if (drag_strat) {
  198 + if (drag_strat != null) {
199 199 var e = parseInt($(this).text()),
200 200 dls = $(this).parents('.ct_table_body').find('dl');
201 201  
... ... @@ -276,6 +276,8 @@ var gb_schedule_table = (function() {
276 276 cont.animate({
277 277 scrollTop: dl.offset().top - cont.offset().top + cont.scrollTop() - diff
278 278 }, 500);
  279 +
  280 + return dl;
279 281 }
280 282  
281 283 var reset_drag_active_all = function(dd) {
... ... @@ -322,6 +324,8 @@ var gb_schedule_table = (function() {
322 324 insertSchedule: insertSchedule,
323 325 schedule_sort: schedule_sort,
324 326 calc_yfwf_num: calc_yfwf_num,
325   - car_yfwf_map: function(lineCode){return car_yfwf_map[lineCode];}
  327 + car_yfwf_map: function(lineCode){return car_yfwf_map[lineCode];},
  328 + scroToDl: scroToDl,
  329 + reset_drag_active_all: reset_drag_active_all
326 330 };
327 331 })();
... ...
src/main/resources/static/real_control_v2/js/main.js
  1 +//主调和监控模式
  2 +var operationMode = window.localStorage.getItem('operationMode');
  3 +if(operationMode == 0){
  4 + $('body>.north').addClass('monitor');
  5 + $(document).on('ajaxSend', interceptPOST);
  6 +}
  7 +else
  8 + $('body>.north').addClass('main');
  9 +
  10 +//拦截POST请求
  11 +function interceptPOST(e, xhr, t){
  12 + if(t && (t.method == 'POST' || t.type == 'POST')){
  13 + console.log(e, xhr, t);
  14 + xhr.abort();
  15 + notify_err('监控模式!');
  16 + }
  17 +}
  18 +
1 19 /* main js */
2 20 var gb_main_ep = new EventProxy(),
3 21 res_load_ep = EventProxy.create('load_data_basic', 'load_tab', 'load_home_layout', 'load_home_line_panel', function() {
... ... @@ -159,4 +177,4 @@ var open_modal = function(pageUrl, data, opt) {
159 177 if (data)
160 178 $(id).trigger('init', data);
161 179 });
162   -}
  180 +};
... ...
src/main/resources/static/real_control_v2/js/north/toolbar.js
... ... @@ -65,6 +65,9 @@ var gb_northToolbar = (function() {
65 65 },
66 66 history_sch_maintain: function () {
67 67 open_modal('/real_control_v2/fragments/north/nav/history_sch_maintain.html', {}, {center: false,bgclose: false});
  68 + },
  69 + sch_exec_rate: function () {
  70 + open_modal('/real_control_v2/fragments/north/nav/charts/sch_exec_rate.html', {}, modal_opts);
68 71 }
69 72 }
70 73 })();
... ...
src/main/resources/static/real_control_v2/js/websocket/sch_websocket.js
... ... @@ -33,10 +33,9 @@ var gb_sch_websocket = (function () {
33 33  
34 34 //断开
35 35 schSock.onclose = function (e) {
36   - alert('和服务器连接断开....');
37   - console.log('和服务器连接断开....');
38   - regListen();
39   -
  36 + //alert('和服务器连接断开, code:' + e.code);
  37 + console.log('和服务器连接断开....', e);
  38 + $('body>.north').addClass('scok-colse');
40 39 };
41 40  
42 41  
... ... @@ -175,7 +174,13 @@ var gb_sch_websocket = (function () {
175 174  
176 175 //42消息点击
177 176 $(document).on('click', '.sys-mailbox .sys-note-42', function () {
178   - alert($(this).data('id'));
  177 + var lineCode=$(this).parents('li.line_schedule').data('id')
  178 + ,id=$(this).data('id');
  179 + var sch = gb_schedule_table.findScheduleByLine(lineCode)[id];
  180 + var dl = gb_schedule_table.scroToDl(sch);
  181 + //高亮
  182 + gb_schedule_table.reset_drag_active_all(dl);
  183 + dl.addClass('relevance-active intimity');
179 184 });
180 185  
181 186 //80同意
... ...
src/test/java/com/bsth/service/schedule/rules/DroolsRulesTest.java
... ... @@ -58,7 +58,7 @@ public class DroolsRulesTest {
58 58 session.dispose();
59 59 }
60 60  
61   - @Test
  61 +// @Test
62 62 public void ttinfoDrlTest() throws Exception {
63 63 logger.info("------------ttinfoDrlTest 测试---------------");
64 64  
... ... @@ -133,7 +133,7 @@ public class DroolsRulesTest {
133 133  
134 134 }
135 135  
136   -// @Test
  136 + @Test
137 137 public void shiftloopDrlTest() throws Exception {
138 138 // 1、创建session,内部配置的是stateful
139 139 KieSession session = kieBase.newKieSession();
... ...