Commit b6957fefdddceb84e6fd39f490560b1b3102c38a

Authored by 徐烜
2 parents 01456244 6ef6d97e

Merge branch 'PSM-7' into qingpu

Too many changes to show.

To preserve performance only 6 of 17 files are displayed.

src/main/java/com/bsth/controller/schedule/TTInfoDetailController.java
... ... @@ -116,6 +116,7 @@ public class TTInfoDetailController extends BaseController<TTInfoDetail, Long> {
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/entity/schedule/SchedulePlan.java
... ... @@ -38,6 +38,15 @@ public class SchedulePlan {
38 38 @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
39 39 private ScheduleRule1 scheduleRule1;
40 40  
  41 + // TODO: 新字段,测试完后删除旧的字段
  42 +
  43 + /** 使用的时刻表名字列表(用逗号连接) */
  44 + private String ttInfoNames;
  45 + /** 使用的时刻表id列表(用逗号连接) */
  46 + private String ttInfoId;
  47 + /** 使用的规则1列表(用逗号连接) */
  48 + private String rule1Ids;
  49 +
41 50 /** 排班计划的开始时间 */
42 51 @Column(nullable = false)
43 52 private Date scheduleFromTime;
... ... @@ -150,4 +159,28 @@ public class SchedulePlan {
150 159 public void setUpdateDate(Date updateDate) {
151 160 this.updateDate = updateDate;
152 161 }
  162 +
  163 + public String getTtInfoNames() {
  164 + return ttInfoNames;
  165 + }
  166 +
  167 + public void setTtInfoNames(String ttInfoNames) {
  168 + this.ttInfoNames = ttInfoNames;
  169 + }
  170 +
  171 + public String getTtInfoId() {
  172 + return ttInfoId;
  173 + }
  174 +
  175 + public void setTtInfoId(String ttInfoId) {
  176 + this.ttInfoId = ttInfoId;
  177 + }
  178 +
  179 + public String getRule1Ids() {
  180 + return rule1Ids;
  181 + }
  182 +
  183 + public void setRule1Ids(String rule1Ids) {
  184 + this.rule1Ids = rule1Ids;
  185 + }
153 186 }
... ...
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;
... ... @@ -555,4 +562,20 @@ public class SchedulePlanInfo {
555 562 public void setSchedulePlan(SchedulePlan schedulePlan) {
556 563 this.schedulePlan = schedulePlan;
557 564 }
  565 +
  566 + public Long getTtInfo() {
  567 + return ttInfo;
  568 + }
  569 +
  570 + public void setTtInfo(Long ttInfo) {
  571 + this.ttInfo = ttInfo;
  572 + }
  573 +
  574 + public String getTtInfoName() {
  575 + return ttInfoName;
  576 + }
  577 +
  578 + public void setTtInfoName(String ttInfoName) {
  579 + this.ttInfoName = ttInfoName;
  580 + }
558 581 }
... ...
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,26 @@ 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 (Date.class.isAssignableFrom(leftType) &&
  42 + Date.class.isAssignableFrom(rightType)) { // Date == Date
  43 + return cb.equal(expression, object);
  44 + } else if (Date.class.isAssignableFrom(leftType) &&
  45 + String.class.isAssignableFrom(rightType)) { // Date == String
  46 + DateTime dateTime = new DateTime(object);
  47 + return cb.equal(expression, dateTime.toDate());
  48 + } else {
  49 + throw new RuntimeException("eq 不支持类型组合:" + expression.getJavaType() + "==" + object.getClass());
  50 + }
  51 +
31 52 }
32 53  
33 54 public static Predicate ne(CriteriaBuilder cb,Path<?> expression, Object object){
... ... @@ -47,15 +68,19 @@ public class PredicatesBuilder {
47 68 Class<?> leftType = expression.getJavaType();
48 69 Class<?> rightType = object.getClass();
49 70  
50   - if (leftType.isAssignableFrom(Number.class) &&
51   - rightType.isAssignableFrom(Number.class)) { // 判定是否是Number类型的子类
  71 + if (Number.class.isAssignableFrom(leftType) &&
  72 + (Number.class.isAssignableFrom(rightType) || String.class.isAssignableFrom(rightType))) { // Number >= Number/String
52 73 return cb.ge((Path<Number>) expression, (Number) object);
53   - } else if (leftType.isAssignableFrom(String.class) &&
54   - rightType.isAssignableFrom(String.class)) { // 判定是否是String类型的子类
  74 + } else if (String.class.isAssignableFrom(leftType) &&
  75 + (String.class.isAssignableFrom(rightType) || Number.class.isAssignableFrom(rightType))) { // String >= String/Number
55 76 return cb.greaterThanOrEqualTo((Path<String>) expression, (String) object);
56   - } else if (leftType.isAssignableFrom(Date.class) &&
57   - rightType.isAssignableFrom(Date.class)) { // 判定是否是Date类型的子类
  77 + } else if (Date.class.isAssignableFrom(leftType) &&
  78 + Date.class.isAssignableFrom(rightType)) { // Date >= Date
58 79 return cb.greaterThanOrEqualTo((Path<Date>) expression, (Date) object);
  80 + } else if (Date.class.isAssignableFrom(leftType) &&
  81 + String.class.isAssignableFrom(rightType)) { // Date >= String
  82 + DateTime dateTime = new DateTime(object);
  83 + return cb.greaterThanOrEqualTo((Path<Date>) expression, dateTime.toDate());
59 84 } else {
60 85 throw new RuntimeException("ge 不支持类型组合:" + expression.getJavaType() + ">=" + object.getClass());
61 86 }
... ... @@ -74,17 +99,22 @@ public class PredicatesBuilder {
74 99 Class<?> leftType = expression.getJavaType();
75 100 Class<?> rightType = object.getClass();
76 101  
77   - if (leftType.isAssignableFrom(Number.class) &&
78   - rightType.isAssignableFrom(Number.class)) { // 判定是否是Number类型的子类
  102 +
  103 + if (Number.class.isAssignableFrom(leftType) &&
  104 + (Number.class.isAssignableFrom(rightType) || String.class.isAssignableFrom(rightType))) { // Number <= Number/String
79 105 return cb.le((Path<Number>) expression, (Number) object);
80   - } else if (leftType.isAssignableFrom(String.class) &&
81   - rightType.isAssignableFrom(String.class)) { // 判定是否是String类型的子类
  106 + } else if (String.class.isAssignableFrom(leftType) &&
  107 + (String.class.isAssignableFrom(rightType) || Number.class.isAssignableFrom(rightType))) { // String <= String/Number
82 108 return cb.lessThanOrEqualTo((Path<String>) expression, (String) object);
83   - } else if (leftType.isAssignableFrom(Date.class) &&
84   - rightType.isAssignableFrom(Date.class)) { // 判定是否是Date类型的子类
  109 + } else if (Date.class.isAssignableFrom(leftType) &&
  110 + Date.class.isAssignableFrom(rightType)) { // Date <= Date
85 111 return cb.lessThanOrEqualTo((Path<Date>) expression, (Date) object);
  112 + } else if (Date.class.isAssignableFrom(leftType) &&
  113 + String.class.isAssignableFrom(rightType)) { // Date <= String
  114 + DateTime dateTime = new DateTime(object);
  115 + return cb.lessThanOrEqualTo((Path<Date>) expression, dateTime.toDate());
86 116 } else {
87   - throw new RuntimeException("ge 不支持类型组合:" + expression.getJavaType() + ">=" + object.getClass());
  117 + throw new RuntimeException("le 不支持类型组合:" + expression.getJavaType() + "<=" + object.getClass());
88 118 }
89 119 }
90 120  
... ...
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); // 时刻表名称
... ...