Commit c66ee69bf74d60263550536ac414d66fce9a3b13

Authored by 徐烜
1 parent 62bddf13

时刻表数据带线路版本

1、上一次更新已经让时刻表导入选择线路版本
2、ttinfo及ttinfodetail实体类中添加线路版本字段
3、修改时刻表编辑,明细编辑里的线路站点路由全部关联版本字段
4、在时刻表列表页面,明细页面都会显示版本描述信息
5、TODO,导入的时候就确定了线路版本,后续不能改变,以后也许能让改吧
6、TODO,自动生成时刻表目前还不带版本,需要iss-noDate-timetable_automatic分支解决
Showing 22 changed files with 550 additions and 106 deletions
src/main/java/com/bsth/controller/schedule/core/TTInfoController.java
... ... @@ -2,16 +2,14 @@ package com.bsth.controller.schedule.core;
2 2  
3 3 import com.bsth.common.ResponseCode;
4 4 import com.bsth.controller.schedule.BController;
5   -import com.bsth.entity.LineVersions;
6 5 import com.bsth.entity.schedule.TTInfo;
7   -import com.bsth.service.LineVersionsService;
8 6 import com.bsth.service.schedule.TTInfoService;
9 7 import com.bsth.service.schedule.exception.ScheduleException;
10   -import org.joda.time.DateTime;
11 8 import org.springframework.beans.factory.annotation.Autowired;
12 9 import org.springframework.web.bind.annotation.*;
13 10  
14   -import java.util.*;
  11 +import java.util.HashMap;
  12 +import java.util.Map;
15 13  
16 14 /**
17 15 * Created by xu on 16/12/20.
... ... @@ -21,47 +19,13 @@ import java.util.*;
21 19 public class TTInfoController extends BController<TTInfo, Long> {
22 20 @Autowired
23 21 private TTInfoService ttInfoService;
24   - @Autowired
25   - private LineVersionsService lineVersionsService;
26 22  
27 23 @RequestMapping(value = "/stationroute/{lineid}", method = RequestMethod.GET)
28 24 public Map<String, Object> getLineStationRouteVersions(@PathVariable(value = "lineid") Integer lineid) {
29 25 Map<String, Object> rtn = new HashMap<>();
30 26 try {
31   - List<LineVersions> lineVersionses = lineVersionsService.findByLineCode(lineid);
32   - Collections.sort(lineVersionses, new Comparator<LineVersions>() {
33   - @Override
34   - public int compare(LineVersions o1, LineVersions o2) {
35   - if (o1.getVersions() > o2.getVersions()) {
36   - return -1;
37   - } else if (o1.getVersions() < o2.getVersions()) {
38   - return 1;
39   - } else {
40   - return 0;
41   - }
42   - }
43   - });
44   -
45   - // 取最近2条记录
46   - List<Map<String, Object>> mapList = new ArrayList<>();
47   - for (LineVersions lv: lineVersionses) {
48   - String vname = lv.getName();
49   - String rq = lv.getStartDate() == null ? "未知启用日期" : new DateTime(lv.getStartDate()).toString("YYYY年MM月dd日");
50   - String sdesc = lv.getStatus() == 0 ? "历史" : (lv.getStatus() == 1 ? "当前" : "待更新");
51   -
52   - Map<String, Object> value = new HashMap<>();
53   - value.put("desc", vname + "-" + rq + "-" + sdesc);
54   - value.put("version", lv.getVersions());
55   -
56   - mapList.add(value);
57   -
58   - if (mapList.size() == 2) {
59   - break;
60   - }
61   - }
62   -
63 27 rtn.put("status", ResponseCode.SUCCESS);
64   - rtn.put("data", mapList);
  28 + rtn.put("data", ttInfoService.getLineStationRouteVersions(lineid));
65 29  
66 30 } catch (Exception exp) {
67 31 rtn.put("status", ResponseCode.ERROR);
... ... @@ -72,6 +36,25 @@ public class TTInfoController extends BController&lt;TTInfo, Long&gt; {
72 36  
73 37 }
74 38  
  39 + @RequestMapping(value = "/versiondesc/{lineid}/{version}")
  40 + public Map<String, Object> getLineVersionDesc(
  41 + @PathVariable(value = "lineid") Integer lineid,
  42 + @PathVariable(value = "version") Integer version) {
  43 + Map<String, Object> rtn = new HashMap<>();
  44 + try {
  45 + Map<String, String> desc = new HashMap<>();
  46 + desc.put("desc", ttInfoService.getLineVersionDesc(lineid, version));
  47 + rtn.put("status", ResponseCode.SUCCESS);
  48 + rtn.put("data", desc);
  49 +
  50 + } catch (Exception exp) {
  51 + rtn.put("status", ResponseCode.ERROR);
  52 + rtn.put("msg", exp.getMessage());
  53 + }
  54 +
  55 + return rtn;
  56 + }
  57 +
75 58 @RequestMapping(value = "/validate_name", method = RequestMethod.GET)
76 59 public Map<String, Object> validate_name(@RequestParam Map<String, Object> param) {
77 60 Map<String, Object> rtn = new HashMap<>();
... ...
src/main/java/com/bsth/controller/schedule/core/TTInfoDetailController.java
... ... @@ -108,10 +108,10 @@ public class TTInfoDetailController extends BController&lt;TTInfoDetail, Long&gt; {
108 108 }
109 109  
110 110 @RequestMapping(value = "/zd_tcc", method = RequestMethod.GET)
111   - public Map<String, Object> getZdAndTccInfo(Integer lineid, Integer xldir) {
  111 + public Map<String, Object> getZdAndTccInfo(Integer lineid, Integer xldir, Integer lineversion) {
112 112 Map<String, Object> rtn = new HashMap<>();
113 113 try {
114   - List<Map<String, Object>> list = ttInfoDetailService.findZdAndTcc(lineid, xldir);
  114 + List<Map<String, Object>> list = ttInfoDetailService.findZdAndTcc(lineid, xldir, lineversion);
115 115 rtn.put("status", ResponseCode.SUCCESS);
116 116 rtn.put("data", list);
117 117 } catch (Exception exp) {
... ...
src/main/java/com/bsth/entity/schedule/TTInfo.java
... ... @@ -67,6 +67,10 @@ public class TTInfo extends BEntity {
67 67 /** 最近备份日期 */
68 68 private Date lastBackUpDate;
69 69  
  70 + /** 线路版本(bsth_c_line_versions表对应字段) */
  71 + @Column(nullable = false)
  72 + private int lineVersion;
  73 +
70 74 public TTInfo() {}
71 75 public TTInfo(Object id, Object xlid, Object name, Object nds, Object sds) {
72 76 if (id != null) {
... ... @@ -109,7 +113,9 @@ public class TTInfo extends BEntity {
109 113 .setUpdateUser(getUpdateBy() == null ? 0 : getUpdateBy().getId())
110 114 .setUpdateUserName(getUpdateBy() == null ? "" : getUpdateBy().getUserName())
111 115 .setCreateDate(getCreateDate() == null ? 0l : getCreateDate().getTime())
112   - .setUpdateDate(getUpdateDate() == null ? 0l : getUpdateDate().getTime());
  116 + .setUpdateDate(getUpdateDate() == null ? 0l : getUpdateDate().getTime())
  117 + .setLineVersion(lineVersion)
  118 + ;
113 119  
114 120 }
115 121  
... ... @@ -216,4 +222,12 @@ public class TTInfo extends BEntity {
216 222 public void setLastBackUpDate(Date lastBackUpDate) {
217 223 this.lastBackUpDate = lastBackUpDate;
218 224 }
  225 +
  226 + public int getLineVersion() {
  227 + return lineVersion;
  228 + }
  229 +
  230 + public void setLineVersion(int lineVersion) {
  231 + this.lineVersion = lineVersion;
  232 + }
219 233 }
... ...
src/main/java/com/bsth/entity/schedule/TTInfoBackup.java
... ... @@ -36,6 +36,10 @@ public class TTInfoBackup {
36 36 @Lob
37 37 private byte[] backUpInfo;
38 38  
  39 + /** 线路版本(bsth_c_line_versions表对应字段) */
  40 + @Column(nullable = false)
  41 + private int lineVersion;
  42 +
39 43 public Long getId() {
40 44 return id;
41 45 }
... ... @@ -91,4 +95,12 @@ public class TTInfoBackup {
91 95 public void setBackUpInfo(byte[] backUpInfo) {
92 96 this.backUpInfo = backUpInfo;
93 97 }
  98 +
  99 + public int getLineVersion() {
  100 + return lineVersion;
  101 + }
  102 +
  103 + public void setLineVersion(int lineVersion) {
  104 + this.lineVersion = lineVersion;
  105 + }
94 106 }
... ...
src/main/java/com/bsth/entity/schedule/TTInfoDetail.java
... ... @@ -100,6 +100,10 @@ public class TTInfoDetail extends BEntity {
100 100 /** 备注 */
101 101 private String remark;
102 102  
  103 + /** 线路版本(bsth_c_line_versions表对应字段) */
  104 + @Column(nullable = false)
  105 + private int lineVersion;
  106 +
103 107 /**
104 108 * 输出proto生成的builder
105 109 * @return
... ... @@ -126,6 +130,7 @@ public class TTInfoDetail extends BEntity {
126 130 .setIsFB(isFB == null ? false : isFB)
127 131 .setIsTS(isTS == null ? false : isTS)
128 132 .setRemark(remark == null ? "" : remark)
  133 + .setLineVersion(lineVersion)
129 134 ;
130 135 }
131 136  
... ... @@ -320,4 +325,12 @@ public class TTInfoDetail extends BEntity {
320 325 public void setIsTS(Boolean isTS) {
321 326 this.isTS = isTS;
322 327 }
  328 +
  329 + public int getLineVersion() {
  330 + return lineVersion;
  331 + }
  332 +
  333 + public void setLineVersion(int lineVersion) {
  334 + this.lineVersion = lineVersion;
  335 + }
323 336 }
... ...
src/main/java/com/bsth/service/schedule/TTInfoDetailService.java
... ... @@ -54,5 +54,5 @@ public interface TTInfoDetailService extends BService&lt;TTInfoDetail, Long&gt; {
54 54  
55 55 Map<String, Object> skbDetailMxSave(Map<String, Object> map);
56 56  
57   - List<Map<String, Object>> findZdAndTcc(int lineid, int xldir);
  57 + List<Map<String, Object>> findZdAndTcc(int lineid, int xldir, int lineversion);
58 58 }
... ...
src/main/java/com/bsth/service/schedule/TTInfoService.java
... ... @@ -3,6 +3,9 @@ package com.bsth.service.schedule;
3 3 import com.bsth.entity.schedule.TTInfo;
4 4 import com.bsth.service.schedule.exception.ScheduleException;
5 5  
  6 +import java.util.List;
  7 +import java.util.Map;
  8 +
6 9 /**
7 10 * Created by xu on 16/5/12.
8 11 */
... ... @@ -14,4 +17,8 @@ public interface TTInfoService extends BService&lt;TTInfo, Long&gt; {
14 17  
15 18 void backUp(Long ttInfoId) throws ScheduleException;
16 19  
  20 + List<Map<String, Object>> getLineStationRouteVersions(Integer lineId);
  21 +
  22 + String getLineVersionDesc(Integer lineId, Integer version);
  23 +
17 24 }
... ...
src/main/java/com/bsth/service/schedule/impl/TTInfoDetailServiceImpl.java
... ... @@ -94,17 +94,17 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im
94 94 * @param xldir 线路上下行
95 95 * @return
96 96 */
97   - public List<Map<String, Object>> findZdAndTcc(int lineid, int xldir) {
  97 + public List<Map<String, Object>> findZdAndTcc(int lineid, int xldir, int lineversion) {
98 98 String sql = "select * from " +
99 99 "(" +
100   - "select station_code as zcode, station_name as zname, concat(station_name, '(站点)') as aname from bsth_c_stationroute " +
101   - "where destroy = 0 and line = ? and directions = ? " +
  100 + "select station_code as zcode, station_name as zname, concat(station_name, '(站点)') as aname from bsth_c_ls_stationroute " +
  101 + "where destroy = 0 and line = ? and directions = ? and versions = ? " +
102 102 "union all " +
103 103 "select park_code as zcode, park_name as zname, concat(park_name, '(停车场)') as aname from bsth_c_car_park " +
104 104 "where destroy = 0 " +
105 105 ") a ";
106 106  
107   - return jdbcTemplate.queryForList(sql, lineid, xldir);
  107 + return jdbcTemplate.queryForList(sql, lineid, xldir, lineversion);
108 108 }
109 109  
110 110 @Override
... ...
src/main/java/com/bsth/service/schedule/impl/TTInfoServiceImpl.java
1 1 package com.bsth.service.schedule.impl;
2 2  
  3 +import com.bsth.entity.LineVersions;
3 4 import com.bsth.entity.schedule.TTInfo;
4 5 import com.bsth.entity.schedule.TTInfoBackup;
5 6 import com.bsth.entity.schedule.TTInfoDetail;
6 7 import com.bsth.repository.schedule.TTInfoBackupRepository;
7 8 import com.bsth.repository.schedule.TTInfoDetailRepository;
8 9 import com.bsth.repository.schedule.TTInfoRepository;
  10 +import com.bsth.service.LineVersionsService;
9 11 import com.bsth.service.schedule.TTInfoService;
10 12 import com.bsth.service.schedule.exception.ScheduleException;
11 13 import com.bsth.service.schedule.utils.TimeTableProto;
12 14 import org.apache.commons.lang3.StringUtils;
  15 +import org.joda.time.DateTime;
13 16 import org.slf4j.Logger;
14 17 import org.slf4j.LoggerFactory;
15 18 import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -21,10 +24,7 @@ import org.springframework.util.CollectionUtils;
21 24  
22 25 import java.io.PrintWriter;
23 26 import java.io.StringWriter;
24   -import java.util.Date;
25   -import java.util.HashMap;
26   -import java.util.List;
27   -import java.util.Map;
  27 +import java.util.*;
28 28  
29 29 /**
30 30 * Created by xu on 16/12/20.
... ... @@ -40,6 +40,8 @@ public class TTInfoServiceImpl extends BServiceImpl&lt;TTInfo, Long&gt; implements TTI
40 40 private TTInfoDetailRepository ttInfoDetailRepository;
41 41 @Autowired
42 42 private TTInfoBackupRepository ttInfoBackupRepository;
  43 + @Autowired
  44 + private LineVersionsService lineVersionsService;
43 45  
44 46 @Override
45 47 public void validate_name(TTInfo ttInfo) throws ScheduleException {
... ... @@ -137,7 +139,70 @@ public class TTInfoServiceImpl extends BServiceImpl&lt;TTInfo, Long&gt; implements TTI
137 139 }
138 140  
139 141 @Override
140   - @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
  142 + public List<Map<String, Object>> getLineStationRouteVersions(Integer lineId) {
  143 + // 获取线路版本
  144 + List<LineVersions> lineVersionsList = lineVersionsService.findByLineCode(lineId);
  145 + // 按照version版本降序排序
  146 + Collections.sort(lineVersionsList, new Comparator<LineVersions>() {
  147 + @Override
  148 + public int compare(LineVersions o1, LineVersions o2) {
  149 + if (o1.getVersions() > o2.getVersions()) {
  150 + return -1;
  151 + } else if (o1.getVersions() < o2.getVersions()) {
  152 + return 1;
  153 + } else {
  154 + return 0;
  155 + }
  156 + }
  157 + });
  158 +
  159 + // 取最开始的2条记录
  160 + List<Map<String, Object>> mapList = new ArrayList<>();
  161 + for (LineVersions lv: lineVersionsList) {
  162 + String vname = lv.getName();
  163 + String rq = lv.getStartDate() == null ? "未知启用日期" : new DateTime(lv.getStartDate()).toString("YYYY年MM月dd日");
  164 + String sdesc = lv.getStatus() == 0 ? "历史" : (lv.getStatus() == 1 ? "当前" : "待更新");
  165 +
  166 + Map<String, Object> value = new HashMap<>();
  167 + value.put("desc", vname + "-" + rq + "-" + sdesc);
  168 + value.put("version", lv.getVersions());
  169 +
  170 + mapList.add(value);
  171 +
  172 + if (mapList.size() == 2) {
  173 + break;
  174 + }
  175 + }
  176 +
  177 + return mapList;
  178 + }
  179 +
  180 + @Override
  181 + public String getLineVersionDesc(Integer lineId, Integer version) {
  182 + // 查找指定版本,并判定
  183 + Map<String, Object> param = new HashMap<>();
  184 + param.put("line_eq", lineId);
  185 + param.put("versions_eq", version);
  186 + List<LineVersions> lineVersionsList = (List<LineVersions>) lineVersionsService.list(param);
  187 +
  188 + LineVersions lv;
  189 + if (CollectionUtils.isEmpty(lineVersionsList)) {
  190 + return "未知版本";
  191 + } else if (lineVersionsList.size() > 1) {
  192 + return "重复版本";
  193 + } else {
  194 + lv = lineVersionsList.get(0);
  195 + }
  196 +
  197 + String vname = lv.getName();
  198 + String rq = lv.getStartDate() == null ? "未知启用日期" : new DateTime(lv.getStartDate()).toString("YYYY年MM月dd日");
  199 + String sdesc = lv.getStatus() == 0 ? "历史" : (lv.getStatus() == 1 ? "当前" : "待更新");
  200 +
  201 + return String.format("%s-%s-%s", vname, rq, sdesc);
  202 + }
  203 +
  204 + @Override
  205 + @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.REPEATABLE_READ)
141 206 public void backUp(Long ttInfoId) throws ScheduleException {
142 207 LOG.info(">>>>>>开始备份时刻表<<<<<<");
143 208  
... ... @@ -165,6 +230,7 @@ public class TTInfoServiceImpl extends BServiceImpl&lt;TTInfo, Long&gt; implements TTI
165 230 ttInfoBackup.setXlName(ttInfo.getXl().getName());
166 231 ttInfoBackup.setTtInfo(ttInfoId);
167 232 ttInfoBackup.setTtInfoName(ttInfo.getName());
  233 + ttInfoBackup.setLineVersion(ttInfo.getLineVersion());
168 234 ttInfoBackup.setBackUpDate(backupdate);
169 235 ttInfoBackup.setBackUpInfo(backupbytes);
170 236  
... ...
src/main/java/com/bsth/service/schedule/utils/TimeTableProto.java
... ... @@ -268,6 +268,15 @@ public final class TimeTableProto {
268 268 */
269 269 com.bsth.service.schedule.utils.TimeTableProto.TTInfoDetailOrBuilder getBcInfoOrBuilder(
270 270 int index);
  271 +
  272 + /**
  273 + * <pre>
  274 + * 线路版本
  275 + * </pre>
  276 + *
  277 + * <code>uint32 lineVersion = 18;</code>
  278 + */
  279 + int getLineVersion();
271 280 }
272 281 /**
273 282 * Protobuf type {@code timetable.TTInfo}
... ... @@ -298,6 +307,7 @@ public final class TimeTableProto {
298 307 createDate_ = 0L;
299 308 updateDate_ = 0L;
300 309 bcInfo_ = java.util.Collections.emptyList();
  310 + lineVersion_ = 0;
301 311 }
302 312  
303 313 @java.lang.Override
... ... @@ -421,6 +431,11 @@ public final class TimeTableProto {
421 431 input.readMessage(com.bsth.service.schedule.utils.TimeTableProto.TTInfoDetail.parser(), extensionRegistry));
422 432 break;
423 433 }
  434 + case 144: {
  435 +
  436 + lineVersion_ = input.readUInt32();
  437 + break;
  438 + }
424 439 }
425 440 }
426 441 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
... ... @@ -914,6 +929,19 @@ public final class TimeTableProto {
914 929 return bcInfo_.get(index);
915 930 }
916 931  
  932 + public static final int LINEVERSION_FIELD_NUMBER = 18;
  933 + private int lineVersion_;
  934 + /**
  935 + * <pre>
  936 + * 线路版本
  937 + * </pre>
  938 + *
  939 + * <code>uint32 lineVersion = 18;</code>
  940 + */
  941 + public int getLineVersion() {
  942 + return lineVersion_;
  943 + }
  944 +
917 945 private byte memoizedIsInitialized = -1;
918 946 public final boolean isInitialized() {
919 947 byte isInitialized = memoizedIsInitialized;
... ... @@ -977,6 +1005,9 @@ public final class TimeTableProto {
977 1005 for (int i = 0; i < bcInfo_.size(); i++) {
978 1006 output.writeMessage(17, bcInfo_.get(i));
979 1007 }
  1008 + if (lineVersion_ != 0) {
  1009 + output.writeUInt32(18, lineVersion_);
  1010 + }
980 1011 }
981 1012  
982 1013 public int getSerializedSize() {
... ... @@ -1045,6 +1076,10 @@ public final class TimeTableProto {
1045 1076 size += com.google.protobuf.CodedOutputStream
1046 1077 .computeMessageSize(17, bcInfo_.get(i));
1047 1078 }
  1079 + if (lineVersion_ != 0) {
  1080 + size += com.google.protobuf.CodedOutputStream
  1081 + .computeUInt32Size(18, lineVersion_);
  1082 + }
1048 1083 memoizedSize = size;
1049 1084 return size;
1050 1085 }
... ... @@ -1095,6 +1130,8 @@ public final class TimeTableProto {
1095 1130 == other.getUpdateDate());
1096 1131 result = result && getBcInfoList()
1097 1132 .equals(other.getBcInfoList());
  1133 + result = result && (getLineVersion()
  1134 + == other.getLineVersion());
1098 1135 return result;
1099 1136 }
1100 1137  
... ... @@ -1147,6 +1184,8 @@ public final class TimeTableProto {
1147 1184 hash = (37 * hash) + BCINFO_FIELD_NUMBER;
1148 1185 hash = (53 * hash) + getBcInfoList().hashCode();
1149 1186 }
  1187 + hash = (37 * hash) + LINEVERSION_FIELD_NUMBER;
  1188 + hash = (53 * hash) + getLineVersion();
1150 1189 hash = (29 * hash) + unknownFields.hashCode();
1151 1190 memoizedHashCode = hash;
1152 1191 return hash;
... ... @@ -1315,6 +1354,8 @@ public final class TimeTableProto {
1315 1354 } else {
1316 1355 bcInfoBuilder_.clear();
1317 1356 }
  1357 + lineVersion_ = 0;
  1358 +
1318 1359 return this;
1319 1360 }
1320 1361  
... ... @@ -1364,6 +1405,7 @@ public final class TimeTableProto {
1364 1405 } else {
1365 1406 result.bcInfo_ = bcInfoBuilder_.build();
1366 1407 }
  1408 + result.lineVersion_ = lineVersion_;
1367 1409 result.bitField0_ = to_bitField0_;
1368 1410 onBuilt();
1369 1411 return result;
... ... @@ -1487,6 +1529,9 @@ public final class TimeTableProto {
1487 1529 }
1488 1530 }
1489 1531 }
  1532 + if (other.getLineVersion() != 0) {
  1533 + setLineVersion(other.getLineVersion());
  1534 + }
1490 1535 onChanged();
1491 1536 return this;
1492 1537 }
... ... @@ -2790,6 +2835,44 @@ public final class TimeTableProto {
2790 2835 }
2791 2836 return bcInfoBuilder_;
2792 2837 }
  2838 +
  2839 + private int lineVersion_ ;
  2840 + /**
  2841 + * <pre>
  2842 + * 线路版本
  2843 + * </pre>
  2844 + *
  2845 + * <code>uint32 lineVersion = 18;</code>
  2846 + */
  2847 + public int getLineVersion() {
  2848 + return lineVersion_;
  2849 + }
  2850 + /**
  2851 + * <pre>
  2852 + * 线路版本
  2853 + * </pre>
  2854 + *
  2855 + * <code>uint32 lineVersion = 18;</code>
  2856 + */
  2857 + public Builder setLineVersion(int value) {
  2858 +
  2859 + lineVersion_ = value;
  2860 + onChanged();
  2861 + return this;
  2862 + }
  2863 + /**
  2864 + * <pre>
  2865 + * 线路版本
  2866 + * </pre>
  2867 + *
  2868 + * <code>uint32 lineVersion = 18;</code>
  2869 + */
  2870 + public Builder clearLineVersion() {
  2871 +
  2872 + lineVersion_ = 0;
  2873 + onChanged();
  2874 + return this;
  2875 + }
2793 2876 public final Builder setUnknownFields(
2794 2877 final com.google.protobuf.UnknownFieldSet unknownFields) {
2795 2878 return this;
... ... @@ -3103,6 +3186,15 @@ public final class TimeTableProto {
3103 3186 */
3104 3187 com.google.protobuf.ByteString
3105 3188 getRemarkBytes();
  3189 +
  3190 + /**
  3191 + * <pre>
  3192 + * 线路版本
  3193 + * </pre>
  3194 + *
  3195 + * <code>uint32 lineVersion = 20;</code>
  3196 + */
  3197 + int getLineVersion();
3106 3198 }
3107 3199 /**
3108 3200 * Protobuf type {@code timetable.TTInfoDetail}
... ... @@ -3135,6 +3227,7 @@ public final class TimeTableProto {
3135 3227 isFB_ = false;
3136 3228 isTS_ = false;
3137 3229 remark_ = "";
  3230 + lineVersion_ = 0;
3138 3231 }
3139 3232  
3140 3233 @java.lang.Override
... ... @@ -3267,6 +3360,11 @@ public final class TimeTableProto {
3267 3360 remark_ = s;
3268 3361 break;
3269 3362 }
  3363 + case 160: {
  3364 +
  3365 + lineVersion_ = input.readUInt32();
  3366 + break;
  3367 + }
3270 3368 }
3271 3369 }
3272 3370 } catch (com.google.protobuf.InvalidProtocolBufferException e) {
... ... @@ -3827,6 +3925,19 @@ public final class TimeTableProto {
3827 3925 }
3828 3926 }
3829 3927  
  3928 + public static final int LINEVERSION_FIELD_NUMBER = 20;
  3929 + private int lineVersion_;
  3930 + /**
  3931 + * <pre>
  3932 + * 线路版本
  3933 + * </pre>
  3934 + *
  3935 + * <code>uint32 lineVersion = 20;</code>
  3936 + */
  3937 + public int getLineVersion() {
  3938 + return lineVersion_;
  3939 + }
  3940 +
3830 3941 private byte memoizedIsInitialized = -1;
3831 3942 public final boolean isInitialized() {
3832 3943 byte isInitialized = memoizedIsInitialized;
... ... @@ -3896,6 +4007,9 @@ public final class TimeTableProto {
3896 4007 if (!getRemarkBytes().isEmpty()) {
3897 4008 com.google.protobuf.GeneratedMessageV3.writeString(output, 19, remark_);
3898 4009 }
  4010 + if (lineVersion_ != 0) {
  4011 + output.writeUInt32(20, lineVersion_);
  4012 + }
3899 4013 }
3900 4014  
3901 4015 public int getSerializedSize() {
... ... @@ -3969,6 +4083,10 @@ public final class TimeTableProto {
3969 4083 if (!getRemarkBytes().isEmpty()) {
3970 4084 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(19, remark_);
3971 4085 }
  4086 + if (lineVersion_ != 0) {
  4087 + size += com.google.protobuf.CodedOutputStream
  4088 + .computeUInt32Size(20, lineVersion_);
  4089 + }
3972 4090 memoizedSize = size;
3973 4091 return size;
3974 4092 }
... ... @@ -4025,6 +4143,8 @@ public final class TimeTableProto {
4025 4143 == other.getIsTS());
4026 4144 result = result && getRemark()
4027 4145 .equals(other.getRemark());
  4146 + result = result && (getLineVersion()
  4147 + == other.getLineVersion());
4028 4148 return result;
4029 4149 }
4030 4150  
... ... @@ -4078,6 +4198,8 @@ public final class TimeTableProto {
4078 4198 getIsTS());
4079 4199 hash = (37 * hash) + REMARK_FIELD_NUMBER;
4080 4200 hash = (53 * hash) + getRemark().hashCode();
  4201 + hash = (37 * hash) + LINEVERSION_FIELD_NUMBER;
  4202 + hash = (53 * hash) + getLineVersion();
4081 4203 hash = (29 * hash) + unknownFields.hashCode();
4082 4204 memoizedHashCode = hash;
4083 4205 return hash;
... ... @@ -4245,6 +4367,8 @@ public final class TimeTableProto {
4245 4367  
4246 4368 remark_ = "";
4247 4369  
  4370 + lineVersion_ = 0;
  4371 +
4248 4372 return this;
4249 4373 }
4250 4374  
... ... @@ -4286,6 +4410,7 @@ public final class TimeTableProto {
4286 4410 result.isFB_ = isFB_;
4287 4411 result.isTS_ = isTS_;
4288 4412 result.remark_ = remark_;
  4413 + result.lineVersion_ = lineVersion_;
4289 4414 onBuilt();
4290 4415 return result;
4291 4416 }
... ... @@ -4394,6 +4519,9 @@ public final class TimeTableProto {
4394 4519 remark_ = other.remark_;
4395 4520 onChanged();
4396 4521 }
  4522 + if (other.getLineVersion() != 0) {
  4523 + setLineVersion(other.getLineVersion());
  4524 + }
4397 4525 onChanged();
4398 4526 return this;
4399 4527 }
... ... @@ -5651,6 +5779,44 @@ public final class TimeTableProto {
5651 5779 onChanged();
5652 5780 return this;
5653 5781 }
  5782 +
  5783 + private int lineVersion_ ;
  5784 + /**
  5785 + * <pre>
  5786 + * 线路版本
  5787 + * </pre>
  5788 + *
  5789 + * <code>uint32 lineVersion = 20;</code>
  5790 + */
  5791 + public int getLineVersion() {
  5792 + return lineVersion_;
  5793 + }
  5794 + /**
  5795 + * <pre>
  5796 + * 线路版本
  5797 + * </pre>
  5798 + *
  5799 + * <code>uint32 lineVersion = 20;</code>
  5800 + */
  5801 + public Builder setLineVersion(int value) {
  5802 +
  5803 + lineVersion_ = value;
  5804 + onChanged();
  5805 + return this;
  5806 + }
  5807 + /**
  5808 + * <pre>
  5809 + * 线路版本
  5810 + * </pre>
  5811 + *
  5812 + * <code>uint32 lineVersion = 20;</code>
  5813 + */
  5814 + public Builder clearLineVersion() {
  5815 +
  5816 + lineVersion_ = 0;
  5817 + onChanged();
  5818 + return this;
  5819 + }
5654 5820 public final Builder setUnknownFields(
5655 5821 final com.google.protobuf.UnknownFieldSet unknownFields) {
5656 5822 return this;
... ... @@ -5719,7 +5885,7 @@ public final class TimeTableProto {
5719 5885 descriptor;
5720 5886 static {
5721 5887 java.lang.String[] descriptorData = {
5722   - "\n\017timetable.proto\022\ttimetable\"\332\002\n\006TTInfo\022" +
  5888 + "\n\017timetable.proto\022\ttimetable\"\357\002\n\006TTInfo\022" +
5723 5889 "\n\n\002id\030\001 \001(\004\022\014\n\004name\030\002 \001(\t\022\n\n\002xl\030\003 \001(\r\022\016\n" +
5724 5890 "\006xlName\030\004 \001(\t\022\r\n\005xlDir\030\005 \001(\t\022\014\n\004qyrq\030\006 \001" +
5725 5891 "(\004\022\033\n\023isEnableDisTemplate\030\007 \001(\010\022\020\n\010isCan" +
... ... @@ -5728,16 +5894,17 @@ public final class TimeTableProto {
5728 5894 "erName\030\014 \001(\t\022\022\n\nupdateUser\030\r \001(\r\022\026\n\016upda" +
5729 5895 "teUserName\030\016 \001(\t\022\022\n\ncreateDate\030\017 \001(\004\022\022\n\n" +
5730 5896 "updateDate\030\020 \001(\004\022\'\n\006bcInfo\030\021 \003(\0132\027.timet" +
5731   - "able.TTInfoDetail\"\246\002\n\014TTInfoDetail\022\n\n\002id",
5732   - "\030\001 \001(\004\022\n\n\002xl\030\002 \001(\r\022\016\n\006xlName\030\003 \001(\t\022\n\n\002lp" +
5733   - "\030\004 \001(\004\022\016\n\006lpName\030\005 \001(\t\022\014\n\004fcno\030\006 \001(\r\022\r\n\005" +
5734   - "xlDir\030\007 \001(\t\022\017\n\007qdzCode\030\010 \001(\t\022\017\n\007qdzName\030" +
5735   - "\t \001(\t\022\017\n\007zdzCode\030\n \001(\t\022\017\n\007zdzName\030\013 \001(\t\022" +
5736   - "\014\n\004fcsj\030\014 \001(\t\022\013\n\003bcs\030\r \001(\r\022\014\n\004jhlc\030\016 \001(\001" +
5737   - "\022\014\n\004bcsj\030\017 \001(\r\022\016\n\006bcType\030\020 \001(\t\022\014\n\004isFB\030\021" +
5738   - " \001(\010\022\014\n\004isTS\030\022 \001(\010\022\016\n\006remark\030\023 \001(\tB1\n\037co" +
5739   - "m.bsth.service.schedule.utilsB\016TimeTable" +
5740   - "Protob\006proto3"
  5897 + "able.TTInfoDetail\022\023\n\013lineVersion\030\022 \001(\r\"\273",
  5898 + "\002\n\014TTInfoDetail\022\n\n\002id\030\001 \001(\004\022\n\n\002xl\030\002 \001(\r\022" +
  5899 + "\016\n\006xlName\030\003 \001(\t\022\n\n\002lp\030\004 \001(\004\022\016\n\006lpName\030\005 " +
  5900 + "\001(\t\022\014\n\004fcno\030\006 \001(\r\022\r\n\005xlDir\030\007 \001(\t\022\017\n\007qdzC" +
  5901 + "ode\030\010 \001(\t\022\017\n\007qdzName\030\t \001(\t\022\017\n\007zdzCode\030\n " +
  5902 + "\001(\t\022\017\n\007zdzName\030\013 \001(\t\022\014\n\004fcsj\030\014 \001(\t\022\013\n\003bc" +
  5903 + "s\030\r \001(\r\022\014\n\004jhlc\030\016 \001(\001\022\014\n\004bcsj\030\017 \001(\r\022\016\n\006b" +
  5904 + "cType\030\020 \001(\t\022\014\n\004isFB\030\021 \001(\010\022\014\n\004isTS\030\022 \001(\010\022" +
  5905 + "\016\n\006remark\030\023 \001(\t\022\023\n\013lineVersion\030\024 \001(\rB1\n\037" +
  5906 + "com.bsth.service.schedule.utilsB\016TimeTab" +
  5907 + "leProtob\006proto3"
5741 5908 };
5742 5909 com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
5743 5910 new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() {
... ... @@ -5756,13 +5923,13 @@ public final class TimeTableProto {
5756 5923 internal_static_timetable_TTInfo_fieldAccessorTable = new
5757 5924 com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
5758 5925 internal_static_timetable_TTInfo_descriptor,
5759   - new java.lang.String[] { "Id", "Name", "Xl", "XlName", "XlDir", "Qyrq", "IsEnableDisTemplate", "IsCancel", "RuleDays", "SpecialDays", "CreateUser", "CreateUserName", "UpdateUser", "UpdateUserName", "CreateDate", "UpdateDate", "BcInfo", });
  5926 + new java.lang.String[] { "Id", "Name", "Xl", "XlName", "XlDir", "Qyrq", "IsEnableDisTemplate", "IsCancel", "RuleDays", "SpecialDays", "CreateUser", "CreateUserName", "UpdateUser", "UpdateUserName", "CreateDate", "UpdateDate", "BcInfo", "LineVersion", });
5760 5927 internal_static_timetable_TTInfoDetail_descriptor =
5761 5928 getDescriptor().getMessageTypes().get(1);
5762 5929 internal_static_timetable_TTInfoDetail_fieldAccessorTable = new
5763 5930 com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
5764 5931 internal_static_timetable_TTInfoDetail_descriptor,
5765   - new java.lang.String[] { "Id", "Xl", "XlName", "Lp", "LpName", "Fcno", "XlDir", "QdzCode", "QdzName", "ZdzCode", "ZdzName", "Fcsj", "Bcs", "Jhlc", "Bcsj", "BcType", "IsFB", "IsTS", "Remark", });
  5932 + new java.lang.String[] { "Id", "Xl", "XlName", "Lp", "LpName", "Fcno", "XlDir", "QdzCode", "QdzName", "ZdzCode", "ZdzName", "Fcsj", "Bcs", "Jhlc", "Bcsj", "BcType", "IsFB", "IsTS", "Remark", "LineVersion", });
5766 5933 }
5767 5934  
5768 5935 // @@protoc_insertion_point(outer_class_scope)
... ...
src/main/resources/static/pages/scheduleApp/module/common/prj-common-globalservice.js
... ... @@ -727,6 +727,24 @@ angular.module(&#39;ScheduleApp&#39;).factory(
727 727 }
728 728 }
729 729 }
  730 + ),
  731 +
  732 + versiondesc: $resource(
  733 + '/tic_ec/versiondesc/:lineId/:version',
  734 + {},
  735 + {
  736 + do: {
  737 + method: 'GET',
  738 + transformResponse: function(rs) {
  739 + var dst = angular.fromJson(rs);
  740 + if (dst.status == 'SUCCESS') {
  741 + return dst.data;
  742 + } else {
  743 + return dst; // 业务错误留给控制器处理
  744 + }
  745 + }
  746 + }
  747 + }
730 748 )
731 749 };
732 750  
... ...
src/main/resources/static/pages/scheduleApp/module/common/prj-common-ui-route-state.js
... ... @@ -1207,7 +1207,7 @@ ScheduleApp.config([
1207 1207 }
1208 1208 })
1209 1209 .state("ttInfoDetailManage_edit3", { // 时刻表详细信息编辑
1210   - url: '/ttInfoDetailManage_edit3/:xlid/:ttid/:xlname/:ttname/:rflag',
  1210 + url: '/ttInfoDetailManage_edit3/:xlid/:ttid/:xlname/:ttname/:rflag/:lineversion',
1211 1211 views: {
1212 1212 "": {templateUrl: 'pages/scheduleApp/module/core/ttInfoManage/detailedit/edit3.html'}
1213 1213 },
... ... @@ -1225,7 +1225,7 @@ ScheduleApp.config([
1225 1225 }
1226 1226 })
1227 1227 .state("ttInfoDetailManage_detail_edit", { // 时刻表详细信息单元格编辑
1228   - url: '/ttInfoDetailManage_detail_edit/:id/:xlid/:ttid/:xlname/:ttname/:rowindex/:colindex',
  1228 + url: '/ttInfoDetailManage_detail_edit/:id/:xlid/:ttid/:xlname/:ttname/:rowindex/:colindex/:lineversion',
1229 1229 views: {
1230 1230 "": {templateUrl: 'pages/scheduleApp/module/core/ttInfoManage/detailedit/edit-detail.html'}
1231 1231 },
... ... @@ -1244,7 +1244,7 @@ ScheduleApp.config([
1244 1244 }
1245 1245 })
1246 1246 .state("ttInfoDetailManage_detail_edit2", { // 时刻表详细信息批量单元格修改
1247   - url: '/ttInfoDetailManage_detail_edit/:xlid/:ttid/:xlname/:ttname',
  1247 + url: '/ttInfoDetailManage_detail_edit/:xlid/:ttid/:xlname/:ttname/:lineversion',
1248 1248 views: {
1249 1249 "": {templateUrl: 'pages/scheduleApp/module/core/ttInfoManage/detailedit/edit-detail2.html'}
1250 1250 },
... ... @@ -1263,7 +1263,7 @@ ScheduleApp.config([
1263 1263 }
1264 1264 })
1265 1265 .state("ttInfoDetailManage_detail_edit_mulselect", { // 时刻表详细信息批量单元格修改
1266   - url: '/ttInfoDetailManage_detail_edit_mulselect/:xlid/:ttid/:xlname/:ttname',
  1266 + url: '/ttInfoDetailManage_detail_edit_mulselect/:xlid/:ttid/:xlname/:ttname/:lineversion',
1267 1267 views: {
1268 1268 "": {templateUrl: 'pages/scheduleApp/module/core/ttInfoManage/detailedit/edit-mulselect.html'}
1269 1269 },
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/detailedit/edit-detail.html
... ... @@ -30,8 +30,14 @@
30 30 <div class="portlet light bordered">
31 31 <div class="portlet-title">
32 32 <div class="caption">
33   - <i class="icon-equalizer font-red-sunglo"></i> <span
34   - class="caption-subject font-red-sunglo bold uppercase" ng-bind="ctrl.title2"></span>
  33 + <div>
  34 + <i class="icon-equalizer font-red-sunglo"></i>
  35 + <span class="caption-subject font-red-sunglo bold uppercase" ng-bind="ctrl.title2"></span>
  36 + </div>
  37 + <div style="padding-top: 10px;">
  38 + <i class="icon-equalizer font-red-sunglo"></i>
  39 + <span class="caption-subject font-red-sunglo bold uppercase" ng-bind="ctrl.title_tip"></span>
  40 + </div>
35 41 </div>
36 42 </div>
37 43  
... ... @@ -93,7 +99,7 @@
93 99 cmaps="{'qdzCode' : 'zcode', 'qdzName': 'zname'}"
94 100 dcname="qdzCode"
95 101 icname="zcode"
96   - dsparams="{{ {type: 'ajax', param:{'lineid': ctrl.TimeTableDetailForSave.xl.id, 'xldir': ctrl.TimeTableDetailForSave.xlDir}, atype:'zd_tcc' } | json }}"
  102 + dsparams="{{ {type: 'ajax', param: {'lineid': ctrl.TimeTableDetailForSave.xl.id, 'xldir': ctrl.TimeTableDetailForSave.xlDir, 'lineversion': ctrl.TimeTableDetailForSave.lineVersion}, atype:'zd_tcc' } | json }}"
97 103 iterobjname="item"
98 104 iterobjexp="item.aname"
99 105 searchph="请输拼音..."
... ... @@ -114,7 +120,7 @@
114 120 cmaps="{'zdzCode' : 'zcode', 'zdzName': 'zname'}"
115 121 dcname="zdzCode"
116 122 icname="zcode"
117   - dsparams="{{ {type: 'ajax', param:{'lineid': ctrl.TimeTableDetailForSave.xl.id, 'xldir': ctrl.TimeTableDetailForSave.xlDir}, atype:'zd_tcc' } | json }}"
  123 + dsparams="{{ {type: 'ajax', param:{'lineid': ctrl.TimeTableDetailForSave.xl.id, 'xldir': ctrl.TimeTableDetailForSave.xlDir, 'lineversion': ctrl.TimeTableDetailForSave.lineVersion}, atype:'zd_tcc' } | json }}"
118 124 iterobjname="item"
119 125 iterobjexp="item.aname"
120 126 searchph="请输拼音..."
... ... @@ -244,7 +250,7 @@
244 250 <button type="submit" class="btn green"
245 251 ng-disabled="!myForm.$valid"><i class="fa fa-check"></i> 提交</button>
246 252 <a type="button" class="btn default"
247   - ui-sref="ttInfoDetailManage_edit3({xlid: ctrl.xlid, ttid : ctrl.ttid, xlname: ctrl.xlname, ttname : ctrl.ttname})" ><i class="fa fa-times"></i> 取消</a>
  253 + ui-sref="ttInfoDetailManage_edit3({xlid: ctrl.xlid, ttid : ctrl.ttid, xlname: ctrl.xlname, ttname : ctrl.ttname, lineversion : ctrl.lineversion})" ><i class="fa fa-times"></i> 取消</a>
248 254 </div>
249 255 </div>
250 256 </div>
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/detailedit/edit-detail2.html
... ... @@ -30,8 +30,14 @@
30 30 <div class="portlet light bordered">
31 31 <div class="portlet-title">
32 32 <div class="caption">
33   - <i class="icon-equalizer font-red-sunglo"></i> <span
34   - class="caption-subject font-red-sunglo bold uppercase" ng-bind="ctrl.title1"></span>
  33 + <div>
  34 + <i class="icon-equalizer font-red-sunglo"></i>
  35 + <span class="caption-subject font-red-sunglo bold uppercase" ng-bind="ctrl.title1"></span>
  36 + </div>
  37 + <div style="padding-top: 10px;">
  38 + <i class="icon-equalizer font-red-sunglo"></i>
  39 + <span class="caption-subject font-red-sunglo bold uppercase" ng-bind="ctrl.title_tip"></span>
  40 + </div>
35 41 </div>
36 42 </div>
37 43  
... ... @@ -74,7 +80,7 @@
74 80 cmaps="{'qdzCode' : 'zcode', 'qdzName': 'zname'}"
75 81 dcname="qdzCode"
76 82 icname="zcode"
77   - dsparams="{{ {type: 'ajax', param:{'lineid': ctrl.xlid, 'xldir': ctrl.tt.xlDir}, atype:'zd_tcc' } | json }}"
  83 + dsparams="{{ {type: 'ajax', param:{'lineid': ctrl.xlid, 'xldir': ctrl.tt.xlDir, 'lineversion': ctrl.lineversion}, atype:'zd_tcc' } | json }}"
78 84 iterobjname="item"
79 85 iterobjexp="item.aname"
80 86 searchph="请输拼音..."
... ... @@ -91,7 +97,7 @@
91 97 cmaps="{'zdzCode' : 'zcode', 'zdzName': 'zname'}"
92 98 dcname="zdzCode"
93 99 icname="zcode"
94   - dsparams="{{ {type: 'ajax', param:{'lineid': ctrl.xlid, 'xldir': ctrl.tt.xlDir}, atype:'zd_tcc' } | json }}"
  100 + dsparams="{{ {type: 'ajax', param:{'lineid': ctrl.xlid, 'xldir': ctrl.tt.xlDir, 'lineversion': ctrl.lineversion}, atype:'zd_tcc' } | json }}"
95 101 iterobjname="item"
96 102 iterobjexp="item.aname"
97 103 searchph="请输拼音..."
... ... @@ -198,7 +204,7 @@
198 204 <button type="submit" class="btn green"
199 205 ng-disabled="!myForm.$valid"><i class="fa fa-check"></i> 提交</button>
200 206 <a type="button" class="btn default"
201   - ui-sref="ttInfoDetailManage_edit3({xlid: ctrl.xlid, ttid : ctrl.ttid, xlname: ctrl.xlname, ttname : ctrl.ttname})" ><i class="fa fa-times"></i> 取消</a>
  207 + ui-sref="ttInfoDetailManage_edit3({xlid: ctrl.xlid, ttid : ctrl.ttid, xlname: ctrl.xlname, ttname : ctrl.ttname, lineversion : ctrl.lineversion})" ><i class="fa fa-times"></i> 取消</a>
202 208 </div>
203 209 </div>
204 210 </div>
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/detailedit/edit-mulselect.html
... ... @@ -90,7 +90,7 @@
90 90 <button type="submit" class="btn green"
91 91 ng-disabled="!myForm.$valid"><i class="fa fa-check"></i> 提交</button>
92 92 <a type="button" class="btn default"
93   - ui-sref="ttInfoDetailManage_edit3({xlid: ctrl.xlid, ttid : ctrl.ttid, xlname: ctrl.xlname, ttname : ctrl.ttname})" ><i class="fa fa-times"></i> 取消</a>
  93 + ui-sref="ttInfoDetailManage_edit3({xlid: ctrl.xlid, ttid : ctrl.ttid, xlname: ctrl.xlname, ttname : ctrl.ttname, lineversion : ctrl.lineversion})" ><i class="fa fa-times"></i> 取消</a>
94 94 </div>
95 95 </div>
96 96 </div>
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/detailedit/edit3.html
... ... @@ -29,6 +29,7 @@
29 29 <div class="caption font-dark">
30 30 <i class="fa fa-database font-dark"></i>
31 31 <span class="caption-subject bold uppercase" ng-bind="ctrl.title"></span>
  32 + <span class="caption-subject bold uppercase" ng-bind="ctrl.title2"></span>
32 33 </div>
33 34 <div class="actions">
34 35 <!--<i class="fa fa-arrow-up" aria-hidden="true"></i>-->
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/detailedit/route.js
... ... @@ -64,7 +64,7 @@ ScheduleApp.config([
64 64 }
65 65 })
66 66 .state("ttInfoDetailManage_edit3", { // 时刻表详细信息编辑
67   - url: '/ttInfoDetailManage_edit3/:xlid/:ttid/:xlname/:ttname/:rflag',
  67 + url: '/ttInfoDetailManage_edit3/:xlid/:ttid/:xlname/:ttname/:rflag/:lineversion',
68 68 views: {
69 69 "": {templateUrl: 'pages/scheduleApp/module/core/ttInfoManage/detailedit/edit3.html'}
70 70 },
... ... @@ -82,7 +82,7 @@ ScheduleApp.config([
82 82 }
83 83 })
84 84 .state("ttInfoDetailManage_detail_edit", { // 时刻表详细信息单元格编辑
85   - url: '/ttInfoDetailManage_detail_edit/:id/:xlid/:ttid/:xlname/:ttname/:rowindex/:colindex',
  85 + url: '/ttInfoDetailManage_detail_edit/:id/:xlid/:ttid/:xlname/:ttname/:rowindex/:colindex/:lineversion',
86 86 views: {
87 87 "": {templateUrl: 'pages/scheduleApp/module/core/ttInfoManage/detailedit/edit-detail.html'}
88 88 },
... ... @@ -101,7 +101,7 @@ ScheduleApp.config([
101 101 }
102 102 })
103 103 .state("ttInfoDetailManage_detail_edit2", { // 时刻表详细信息批量单元格修改
104   - url: '/ttInfoDetailManage_detail_edit/:xlid/:ttid/:xlname/:ttname',
  104 + url: '/ttInfoDetailManage_detail_edit/:xlid/:ttid/:xlname/:ttname/:lineversion',
105 105 views: {
106 106 "": {templateUrl: 'pages/scheduleApp/module/core/ttInfoManage/detailedit/edit-detail2.html'}
107 107 },
... ... @@ -120,7 +120,7 @@ ScheduleApp.config([
120 120 }
121 121 })
122 122 .state("ttInfoDetailManage_detail_edit_mulselect", { // 时刻表详细信息批量单元格修改
123   - url: '/ttInfoDetailManage_detail_edit_mulselect/:xlid/:ttid/:xlname/:ttname',
  123 + url: '/ttInfoDetailManage_detail_edit_mulselect/:xlid/:ttid/:xlname/:ttname/:lineversion',
124 124 views: {
125 125 "": {templateUrl: 'pages/scheduleApp/module/core/ttInfoManage/detailedit/edit-mulselect.html'}
126 126 },
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/detailedit/timeTableDetailManage_old.js
... ... @@ -3,10 +3,11 @@ angular.module(&#39;ScheduleApp&#39;).factory(
3 3 'TimeTableDetailManageService_old',
4 4 [
5 5 'TimeTableDetailManageService_g',
  6 + 'TTInfoManageService_g',
6 7 '$state',
7 8 '$q',
8 9 'SaTimeTableUtils',
9   - function(service, $state, $q, SaTimeTableUtils) {
  10 + function(service, service2, $state, $q, SaTimeTableUtils) {
10 11  
11 12 // 查询对象类
12 13 var queryClass = service.rest;
... ... @@ -206,8 +207,20 @@ angular.module(&#39;ScheduleApp&#39;).factory(
206 207 }
207 208  
208 209 return deferred.promise;
209   - }
  210 + },
210 211  
  212 + /**
  213 + * 获取线路版本描述。
  214 + * @param lineId
  215 + * @param version
  216 + * @returns {*|Function|promise|n}
  217 + */
  218 + versiondesc: function(lineId, version) {
  219 + var param = {};
  220 + param.lineId = lineId;
  221 + param.version = version;
  222 + return service2.versiondesc.do(param).$promise;
  223 + }
211 224  
212 225 };
213 226 }
... ... @@ -215,7 +228,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(
215 228 ]
216 229 );
217 230  
218   -// edit.html 时刻表编辑界面
  231 +// edit.html 时刻表表格编辑界面
219 232 angular.module('ScheduleApp').controller(
220 233 'TimeTableDetailManageCtrl_old',
221 234 [
... ... @@ -232,8 +245,17 @@ angular.module(&#39;ScheduleApp&#39;).controller(
232 245 self.xlname = $stateParams.xlname; // 获取传过来的线路名字
233 246 self.ttname = $stateParams.ttname; // 获取传过来的时刻表名字
234 247 self.rflag = $stateParams.rflag; // 刷新标志
  248 + self.lineversion = $stateParams.lineversion; // 线路版本
235 249  
236 250 self.title = self.xlname + "(" + self.ttname + ")" + "时刻表明细信息";
  251 + self.title2 = "--->版本加载中...";
  252 + service.versiondesc(self.xlid, self.lineversion).then(
  253 + function(result) {
  254 + self.title2 = "--->线路版本(" + result.desc + ")";
  255 + }
  256 + );
  257 +
  258 + // TODO:线路版本
237 259  
238 260 // 获取时刻表明细数据(内部保存)
239 261 self.getDetailHeads = function() {
... ... @@ -304,7 +326,8 @@ angular.module(&#39;ScheduleApp&#39;).controller(
304 326 xlname: self.xlname,
305 327 ttname: self.ttname,
306 328 rowindex: r,
307   - colindex: c
  329 + colindex: c,
  330 + lineversion: self.lineversion
308 331 }
309 332 );
310 333 };
... ... @@ -313,13 +336,13 @@ angular.module(&#39;ScheduleApp&#39;).controller(
313 336 self.editInfos = function() {
314 337 if (!service.editIsSel()) {
315 338 alert("请选择班次信息");
316   - return;
317 339 } else {
318 340 $state.go("ttInfoDetailManage_detail_edit2", {
319 341 xlid: self.xlid,
320 342 ttid: self.ttid,
321 343 xlname: self.xlname,
322   - ttname: self.ttname
  344 + ttname: self.ttname,
  345 + lineversion: self.lineversion
323 346 });
324 347 }
325 348  
... ... @@ -331,7 +354,8 @@ angular.module(&#39;ScheduleApp&#39;).controller(
331 354 xlid: self.xlid,
332 355 ttid: self.ttid,
333 356 xlname: self.xlname,
334   - ttname: self.ttname
  357 + ttname: self.ttname,
  358 + lineversion: self.lineversion
335 359 });
336 360 };
337 361  
... ... @@ -346,7 +370,8 @@ angular.module(&#39;ScheduleApp&#39;).controller(
346 370 xlid: self.xlid,
347 371 ttid: self.ttid,
348 372 xlname: self.xlname,
349   - ttname: self.ttname
  373 + ttname: self.ttname,
  374 + lineversion: self.lineversion
350 375 });
351 376 }, function() {
352 377 alert("批量删除失败!");
... ... @@ -354,7 +379,8 @@ angular.module(&#39;ScheduleApp&#39;).controller(
354 379 xlid: self.xlid,
355 380 ttid: self.ttid,
356 381 xlname: self.xlname,
357   - ttname: self.ttname
  382 + ttname: self.ttname,
  383 + lineversion: self.lineversion
358 384 });
359 385 });
360 386 };
... ... @@ -467,8 +493,15 @@ angular.module(&#39;ScheduleApp&#39;).controller(
467 493 self.ttname = $stateParams.ttname; // 获取传过来的时刻表名字
468 494 self.rowindex = $stateParams.rowindex; // 修改的第几行
469 495 self.colindex = $stateParams.colindex; // 修改的第几列
  496 + self.lineversion = $stateParams.lineversion; // 线路版本
470 497  
471 498 self.title1 = self.xlname + "(" + self.ttname + ")" + "时刻表明细信息";
  499 + self.title_tip = "版本加载中...";
  500 + service.versiondesc(self.xlid, self.lineversion).then(
  501 + function(result) {
  502 + self.title_tip = "线路版本(" + result.desc + ")";
  503 + }
  504 + );
472 505  
473 506 if (id) {
474 507 TTInfoDetail.get({id: id}, function(value) {
... ... @@ -491,6 +524,7 @@ angular.module(&#39;ScheduleApp&#39;).controller(
491 524 self.ttname
492 525 );
493 526  
  527 + self.TimeTableDetailForSave.lineVersion = self.lineversion;
494 528 self.TimeTableDetailForSave.isTS = 0;
495 529 self.title2 =
496 530 self.xlname + "(" + self.ttname + ")" + "时刻表明细信息" +
... ... @@ -531,7 +565,8 @@ angular.module(&#39;ScheduleApp&#39;).controller(
531 565 xlid: self.xlid,
532 566 ttid: self.ttid,
533 567 xlname: self.xlname,
534   - ttname: self.ttname
  568 + ttname: self.ttname,
  569 + lineversion: self.lineversion
535 570 });
536 571 });
537 572  
... ... @@ -555,8 +590,15 @@ angular.module(&#39;ScheduleApp&#39;).controller(
555 590 self.ttid = $stateParams.ttid; // 获取传过来的时刻表id
556 591 self.xlname = $stateParams.xlname; // 获取传过来的线路名字
557 592 self.ttname = $stateParams.ttname; // 获取传过来的时刻表名字
  593 + self.lineversion = $stateParams.lineversion; // 线路版本
558 594  
559 595 self.title1 = self.xlname + "(" + self.ttname + ")" + "时刻表明细信息 批量修改班次信息";
  596 + self.title_tip = "版本加载中...";
  597 + service.versiondesc(self.xlid, self.lineversion).then(
  598 + function(result) {
  599 + self.title_tip = "线路版本(" + result.desc + ")";
  600 + }
  601 + );
560 602  
561 603 //var TTInfoDetail = service.getQueryClass();
562 604  
... ... @@ -663,7 +705,8 @@ angular.module(&#39;ScheduleApp&#39;).controller(
663 705 xlid: self.xlid,
664 706 ttid: self.ttid,
665 707 xlname: self.xlname,
666   - ttname: self.ttname
  708 + ttname: self.ttname,
  709 + lineversion: self.lineversion
667 710 });
668 711 }, function() {
669 712 alert("批量更新失败!");
... ... @@ -671,7 +714,8 @@ angular.module(&#39;ScheduleApp&#39;).controller(
671 714 xlid: self.xlid,
672 715 ttid: self.ttid,
673 716 xlname: self.xlname,
674   - ttname: self.ttname
  717 + ttname: self.ttname,
  718 + lineversion: self.lineversion
675 719 });
676 720 });
677 721  
... ... @@ -681,7 +725,7 @@ angular.module(&#39;ScheduleApp&#39;).controller(
681 725 ]
682 726 );
683 727  
684   -// edit-mulselect.html 具体班次明细修改页面
  728 +// edit-mulselect.html 班次批量选择页面
685 729 angular.module('ScheduleApp').controller(
686 730 'TimeTableDetailManageFormCtrl_mulselect',
687 731 [
... ... @@ -696,6 +740,7 @@ angular.module(&#39;ScheduleApp&#39;).controller(
696 740 self.ttid = $stateParams.ttid; // 获取传过来的时刻表id
697 741 self.xlname = $stateParams.xlname; // 获取传过来的线路名字
698 742 self.ttname = $stateParams.ttname; // 获取传过来的时刻表名字
  743 + self.lineversion = $stateParams.lineversion; // 线路版本
699 744  
700 745 self.title1 = self.xlname + "(" + self.ttname + ")" + "时刻表明细信息";
701 746  
... ... @@ -744,7 +789,8 @@ angular.module(&#39;ScheduleApp&#39;).controller(
744 789 xlid: self.xlid,
745 790 ttid: self.ttid,
746 791 xlname: self.xlname,
747   - ttname: self.ttname
  792 + ttname: self.ttname,
  793 + lineversion: self.lineversion
748 794 });
749 795  
750 796 };
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/list.html
... ... @@ -9,7 +9,7 @@
9 9 <th style="width: 180px;">时刻表名称</th>
10 10 <th style="width: 80px">上下行</th>
11 11 <th style="width: 50px;">启用</th>
12   - <th style="width: 120px">启用/备份日期</th>
  12 + <th style="width: 130px">操作日期</th>
13 13 <th style="width: 80px">状态</th>
14 14 <th style="width: 60%">时刻表明细</th>
15 15 <th style="width: 40%">操作</th>
... ... @@ -69,7 +69,25 @@
69 69 </div>
70 70 </td>
71 71 <td>
72   - <span ng-bind="info.xl.name"></span>
  72 + <div>
  73 + <a href="#">
  74 + <span ng-bind="info.xl.name"></span>
  75 + </a>
  76 + </div>
  77 + <div>
  78 + <a href="#"
  79 + ng-mouseenter="ctrl.getLineVersionTip(info)"
  80 + tooltip-animation="false"
  81 + tooltip-placement="top"
  82 + uib-tooltip="{{ctrl.lineVersionTip}}"
  83 + tooltip-class="headClass">
  84 +
  85 + <span ng-bind="'线路版本:' + info.lineVersion"></span>
  86 + </a>
  87 +
  88 + </div>
  89 +
  90 +
73 91 </td>
74 92 <td>
75 93 <div>
... ... @@ -90,23 +108,62 @@
90 108 </td>
91 109 <td>
92 110 <div>
93   - <a href="#">
94   - <span ng-bind="info.qyrq | date: 'yyyy-MM-dd'"></span>
  111 + <a href="#"
  112 + tooltip-animation="false"
  113 + tooltip-placement="top"
  114 + uib-tooltip="启用时间:{{info.qyrq | date: 'yyyy-MM-dd HH:mm:ss' }}"
  115 + tooltip-class="headClass">
  116 + 启用
  117 + <span ng-bind="(info.qyrq | date: 'yyyy-MM-dd')"></span>
95 118 </a>
96 119 </div>
  120 +
97 121 <div>
98 122 <a href="#"
99 123 tooltip-animation="false"
100 124 tooltip-placement="top"
101 125 uib-tooltip="备份时间:{{info.lastBackUpDate | date: 'yyyy-MM-dd HH:mm:ss' }}"
102 126 tooltip-class="headClass">
  127 + 备份
  128 + <span ng-bind="(info.lastBackUpDate | date: 'yyyy-MM-dd')"></span>
  129 + </a>
  130 + </div>
103 131  
104   - <i class="fa fa-hdd-o" aria-hidden="true"></i>
105   - <span ng-bind="info.lastBackUpDate | date: 'yyyy-MM-dd'"></span>
  132 + <div>
  133 + <a href="#"
  134 + tooltip-animation="false"
  135 + tooltip-placement="top"
  136 + uib-tooltip="创建时间:{{info.createDate | date: 'yyyy-MM-dd HH:mm:ss' }}"
  137 + tooltip-class="headClass">
  138 + 创建
  139 + <span ng-bind="(info.createDate | date: 'yyyy-MM-dd')"></span>
106 140 </a>
  141 + </div>
107 142  
  143 + <div>
  144 + <a href="#"
  145 + tooltip-animation="false"
  146 + tooltip-placement="top"
  147 + uib-tooltip="更新时间:{{info.updateDate | date: 'yyyy-MM-dd HH:mm:ss' }}"
  148 + tooltip-class="headClass">
  149 + 更新
  150 + <span ng-bind="(info.updateDate | date: 'yyyy-MM-dd')"></span>
  151 + </a>
108 152 </div>
109 153  
  154 + <!--<div>-->
  155 + <!--<a href="#"-->
  156 + <!--tooltip-animation="false"-->
  157 + <!--tooltip-placement="top"-->
  158 + <!--uib-tooltip="备份时间:{{info.lastBackUpDate | date: 'yyyy-MM-dd HH:mm:ss' }}"-->
  159 + <!--tooltip-class="headClass">-->
  160 +
  161 + <!--<i class="fa fa-hdd-o" aria-hidden="true"></i>-->
  162 + <!--<span ng-bind="info.lastBackUpDate | date: 'yyyy-MM-dd'"></span>-->
  163 + <!--</a>-->
  164 +
  165 + <!--</div>-->
  166 +
110 167 </td>
111 168 <td>
112 169 <span class="glyphicon glyphicon-ok" ng-if="info.isCancel == '0'"></span>
... ... @@ -117,7 +174,7 @@
117 174 <!--class="btn btn-info btn-sm" ng-if="info.isCancel == '0'"> 编辑 </a>-->
118 175 <!--<a ui-sref="ttInfoDetailManage_edit2({xlid: info.xl.id, ttid : info.id, xlname: info.xl.name, ttname : info.name})"-->
119 176 <!--class="btn btn-info btn-sm" ng-if="info.isCancel == '0'"> 编辑2 </a>-->
120   - <a ui-sref="ttInfoDetailManage_edit3({xlid: info.xl.id, ttid : info.id, xlname: info.xl.name, ttname : info.name, rflag : true})"
  177 + <a ui-sref="ttInfoDetailManage_edit3({xlid: info.xl.id, ttid : info.id, xlname: info.xl.name, ttname : info.name, rflag : true, lineversion : info.lineVersion})"
121 178 class="btn btn-info btn-sm" ng-if="info.isCancel == '0'"> 编辑 </a>
122 179 <a ng-click="ctrl.toTtInfoDetailAuto(info.id)"
123 180 class="btn btn-info btn-sm" ng-if="info.isCancel == '0'"> 生成 </a>
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/module.js
... ... @@ -80,6 +80,19 @@ angular.module(&#39;ScheduleApp&#39;).factory(
80 80 var param = {};
81 81 param.ttinfoid = ttinfoid;
82 82 return service.backup.do(param).$promise;
  83 + },
  84 +
  85 + /**
  86 + * 获取线路版本描述。
  87 + * @param lineId
  88 + * @param version
  89 + * @returns {*|Function|promise|n}
  90 + */
  91 + versiondesc: function(lineId, version) {
  92 + var param = {};
  93 + param.lineId = lineId;
  94 + param.version = version;
  95 + return service.versiondesc.do(param).$promise;
83 96 }
84 97  
85 98  
... ... @@ -171,12 +184,26 @@ angular.module(&#39;ScheduleApp&#39;).controller(
171 184  
172 185 self.doPage();
173 186  
174   - // 自动生成时刻表
  187 + // TODO:跳转到自动生成时刻表页面(jquery页面),之后会替换为Angularjs版本
175 188 self.toTtInfoDetailAuto = function(ttinfoid) {
176 189 showPjax();
177 190 $.pjax({url: 'pages/base/timesmodel/add.html?no=' + ttinfoid, container: pjaxContainer});
178 191 };
179 192  
  193 + self.lineVersionTip = "载入中...";
  194 + var currentTTInfoForLineVersion;
  195 + self.getLineVersionTip = function(info) {
  196 + if (currentTTInfoForLineVersion != info) {
  197 + service.versiondesc(info.xl.id, info.lineVersion).then(
  198 + function(result) {
  199 + self.lineVersionTip = result.desc;
  200 + currentTTInfoForLineVersion = info;
  201 + }
  202 + );
  203 + }
  204 +
  205 + };
  206 +
180 207 // TODO:
181 208 }
182 209 ]
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/service.js
... ... @@ -53,6 +53,24 @@ angular.module(&#39;ScheduleApp&#39;).factory(
53 53 }
54 54 }
55 55 }
  56 + ),
  57 +
  58 + versiondesc: $resource(
  59 + '/tic_ec/versiondesc/:lineId/:version',
  60 + {},
  61 + {
  62 + do: {
  63 + method: 'GET',
  64 + transformResponse: function(rs) {
  65 + var dst = angular.fromJson(rs);
  66 + if (dst.status == 'SUCCESS') {
  67 + return dst.data;
  68 + } else {
  69 + return dst; // 业务错误留给控制器处理
  70 + }
  71 + }
  72 + }
  73 + }
56 74 )
57 75 };
58 76  
... ...
src/main/resources/timetable.proto
... ... @@ -34,6 +34,8 @@ message TTInfo {
34 34  
35 35 // list
36 36 repeated TTInfoDetail bcInfo = 17;
  37 +
  38 + uint32 lineVersion = 18; // 线路版本
37 39 }
38 40  
39 41 message TTInfoDetail {
... ... @@ -64,6 +66,7 @@ message TTInfoDetail {
64 66 bool isTS = 18; // 是否停驶(表示此班次执行完成,停在终点站,不进场)
65 67 string remark = 19; // 备注
66 68  
  69 + uint32 lineVersion = 20; // 线路版本
67 70 }
68 71  
69 72  
... ...