Commit 6ef6d97e6bb29b0f15ba3fabbbc1460af8fe01d9

Authored by 徐烜
1 parent 8ed2f6f3

PSM-7

Too many changes to show.

To preserve performance only 6 of 14 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
... ... @@ -29,7 +29,26 @@ public class PredicatesBuilder {
29 29 }
30 30  
31 31 public static Predicate eq(CriteriaBuilder cb,Path<?> expression, Object object){
32   - 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 +
33 52 }
34 53  
35 54 public static Predicate ne(CriteriaBuilder cb,Path<?> expression, Object object){
... ... @@ -49,17 +68,17 @@ public class PredicatesBuilder {
49 68 Class<?> leftType = expression.getJavaType();
50 69 Class<?> rightType = object.getClass();
51 70  
52   - if (leftType.isAssignableFrom(Number.class) &&
53   - rightType.isAssignableFrom(Number.class)) { // 判定是否是Number类型的子类
  71 + if (Number.class.isAssignableFrom(leftType) &&
  72 + (Number.class.isAssignableFrom(rightType) || String.class.isAssignableFrom(rightType))) { // Number >= Number/String
54 73 return cb.ge((Path<Number>) expression, (Number) object);
55   - } else if (leftType.isAssignableFrom(String.class) &&
56   - rightType.isAssignableFrom(String.class)) { // 判定是否是String类型的子类
  74 + } else if (String.class.isAssignableFrom(leftType) &&
  75 + (String.class.isAssignableFrom(rightType) || Number.class.isAssignableFrom(rightType))) { // String >= String/Number
57 76 return cb.greaterThanOrEqualTo((Path<String>) expression, (String) object);
58   - } else if (leftType.isAssignableFrom(Date.class) &&
59   - rightType.isAssignableFrom(Date.class)) { // 判定是否是Date类型的子类
  77 + } else if (Date.class.isAssignableFrom(leftType) &&
  78 + Date.class.isAssignableFrom(rightType)) { // Date >= Date
60 79 return cb.greaterThanOrEqualTo((Path<Date>) expression, (Date) object);
61   - } else if (leftType.isAssignableFrom(Date.class) &&
62   - rightType.isAssignableFrom(String.class)) { // 左边是日期,右边是字符串,尝试转换字符串到日期
  80 + } else if (Date.class.isAssignableFrom(leftType) &&
  81 + String.class.isAssignableFrom(rightType)) { // Date >= String
63 82 DateTime dateTime = new DateTime(object);
64 83 return cb.greaterThanOrEqualTo((Path<Date>) expression, dateTime.toDate());
65 84 } else {
... ... @@ -80,21 +99,22 @@ public class PredicatesBuilder {
80 99 Class<?> leftType = expression.getJavaType();
81 100 Class<?> rightType = object.getClass();
82 101  
83   - if (leftType.isAssignableFrom(Number.class) &&
84   - rightType.isAssignableFrom(Number.class)) { // 判定是否是Number类型的子类
  102 +
  103 + if (Number.class.isAssignableFrom(leftType) &&
  104 + (Number.class.isAssignableFrom(rightType) || String.class.isAssignableFrom(rightType))) { // Number <= Number/String
85 105 return cb.le((Path<Number>) expression, (Number) object);
86   - } else if (leftType.isAssignableFrom(String.class) &&
87   - rightType.isAssignableFrom(String.class)) { // 判定是否是String类型的子类
  106 + } else if (String.class.isAssignableFrom(leftType) &&
  107 + (String.class.isAssignableFrom(rightType) || Number.class.isAssignableFrom(rightType))) { // String <= String/Number
88 108 return cb.lessThanOrEqualTo((Path<String>) expression, (String) object);
89   - } else if (leftType.isAssignableFrom(Date.class) &&
90   - rightType.isAssignableFrom(Date.class)) { // 判定是否是Date类型的子类
  109 + } else if (Date.class.isAssignableFrom(leftType) &&
  110 + Date.class.isAssignableFrom(rightType)) { // Date <= Date
91 111 return cb.lessThanOrEqualTo((Path<Date>) expression, (Date) object);
92   - } else if (leftType.isAssignableFrom(Date.class) &&
93   - rightType.isAssignableFrom(String.class)) { // 左边是日期,右边是字符串,尝试转换字符串到日期
  112 + } else if (Date.class.isAssignableFrom(leftType) &&
  113 + String.class.isAssignableFrom(rightType)) { // Date <= String
94 114 DateTime dateTime = new DateTime(object);
95 115 return cb.lessThanOrEqualTo((Path<Date>) expression, dateTime.toDate());
96 116 } else {
97   - throw new RuntimeException("ge 不支持类型组合:" + expression.getJavaType() + ">=" + object.getClass());
  117 + throw new RuntimeException("le 不支持类型组合:" + expression.getJavaType() + "<=" + object.getClass());
98 118 }
99 119 }
100 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); // 时刻表名称
... ...