Commit 6ef6d97e6bb29b0f15ba3fabbbc1460af8fe01d9
1 parent
8ed2f6f3
PSM-7
Showing
6 changed files
with
103 additions
and
23 deletions
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<TTInfoDetail, Long> { |
| 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<TTInfoDetail, Long> { |
| 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<TTInfoDetail, Long> { |
| 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<TTInfoDetail, Long> |
| 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<TTInfoDetail, Long> |
| 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<TTInfoDetail, Long> |
| 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); // 时刻表名称 | ... | ... |