Commit 3d521c543cbf9a5f889e44f15c8d69c149e12f06

Authored by 徐烜
1 parent d6584abe

1、国际化改造,时刻表管理后端国际化改造

Too many changes to show.

To preserve performance only 13 of 31 files are displayed.

src/main/java/com/bsth/controller/schedule/core/legacy/TTInfoDetailController.java
... ... @@ -11,6 +11,7 @@ import com.bsth.service.schedule.timetable.TimetableExcelFormatType;
11 11 import com.bsth.service.schedule.utils.DataToolsFile;
12 12 import com.bsth.service.schedule.utils.DataToolsFileType;
13 13 import com.bsth.service.schedule.utils.MyHttpUtils;
  14 +import com.bsth.util.I18n;
14 15 import org.springframework.beans.factory.annotation.Autowired;
15 16 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
16 17 import org.springframework.web.bind.annotation.*;
... ... @@ -51,7 +52,7 @@ public class TTInfoDetailController extends BController<TTInfoDetail, Long> {
51 52 Map<String, Object> rtn = new HashMap<>();
52 53 try {
53 54 if (lineversion == null) {
54   - throw new Exception("线路版本未知");
  55 + throw new Exception(I18n.getInstance().getMessage("tTInfoDetailController-line54"));
55 56 }
56 57 ttInfoDetailService.validateExcelSheet(filename, sheetname, lineid, linename, lineversion,
57 58 TimetableExcelFormatType.fromDesc(excelFormatType));
... ... @@ -145,11 +146,11 @@ public class TTInfoDetailController extends BController&lt;TTInfoDetail, Long&gt; {
145 146 try {
146 147 this.ttInfoDetailService.addLp(ttInfoId, lpId);
147 148 rtn.put("status", ResponseCode.SUCCESS);
148   - rtn.put("data", "添加路牌成功!");
  149 + rtn.put("data", "ok!");
149 150 } catch (Exception exp) {
150 151 exp.printStackTrace();
151 152 rtn.put("status", ResponseCode.ERROR);
152   - rtn.put("msg", "添加路牌失败:" + exp.getMessage());
  153 + rtn.put("msg", "Failure:" + exp.getMessage());
153 154 }
154 155 return rtn;
155 156 }
... ... @@ -160,11 +161,11 @@ public class TTInfoDetailController extends BController&lt;TTInfoDetail, Long&gt; {
160 161 try {
161 162 this.ttInfoDetailService.removeBcByLp(ttInfoId, lpId);
162 163 rtn.put("status", ResponseCode.SUCCESS);
163   - rtn.put("data", "删除路牌成功!");
  164 + rtn.put("data", "ok!");
164 165 } catch (Exception exp) {
165 166 exp.printStackTrace();
166 167 rtn.put("status", ResponseCode.ERROR);
167   - rtn.put("msg", "删除路牌失败:" + exp.getMessage());
  168 + rtn.put("msg", "Failure:" + exp.getMessage());
168 169 }
169 170 return rtn;
170 171 }
... ... @@ -177,11 +178,11 @@ public class TTInfoDetailController extends BController&lt;TTInfoDetail, Long&gt; {
177 178 try {
178 179 this.ttInfoDetailService.switchBcByLp(ttInfoId, lpAId, lpBId);
179 180 rtn.put("status", ResponseCode.SUCCESS);
180   - rtn.put("data", "调换路牌成功!");
  181 + rtn.put("data", "ok!");
181 182 } catch (Exception exp) {
182 183 exp.printStackTrace();
183 184 rtn.put("status", ResponseCode.ERROR);
184   - rtn.put("msg", "调换路牌失败:" + exp.getMessage());
  185 + rtn.put("msg", "Failure:" + exp.getMessage());
185 186 }
186 187 return rtn;
187 188 }
... ... @@ -197,7 +198,7 @@ public class TTInfoDetailController extends BController&lt;TTInfoDetail, Long&gt; {
197 198 } else if ("xlsx".equals(type)) {
198 199 dataToolsFile = ttInfoDetailService.exportDynamicTTinfo(dtInfos, DataToolsFileType.XLSX);
199 200 } else {
200   - throw new Exception("未知的导出格式==>" + type);
  201 + throw new Exception("unknown export type==>" + type);
201 202 }
202 203  
203 204 // 流输出导出文件
... ...
src/main/java/com/bsth/service/schedule/datatools/TTInfoDetailDataToolsImpl.java
... ... @@ -7,6 +7,8 @@ import com.bsth.service.schedule.timetable.TimetableExcelData;
7 7 import com.bsth.service.schedule.timetable.TimetableExcelFormatType;
8 8 import com.bsth.service.schedule.timetable.strategy.impl.TimetableExcelDataImportStrategyImpl;
9 9 import com.bsth.service.schedule.utils.*;
  10 +import com.bsth.util.I18n;
  11 +import com.google.common.io.Files;
10 12 import jxl.Sheet;
11 13 import jxl.Workbook;
12 14 import jxl.write.Label;
... ... @@ -53,26 +55,43 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
53 55 @Override
54 56 public DataToolsFile uploadFile(String filename, byte[] filedata) throws ScheduleException {
55 57 try {
56   - // 对上传的excel文件做处理,将第一个sheet名字设定为工作表1
57   - DataToolsFile file = dataToolsService.uploadFile(filename, filedata);
58   -// Workbook workbook = Workbook.getWorkbook(file);
59   -// Sheet sheet = workbook.getSheet(0);
60   -//
61   -// File fileCal = new File(file.getAbsolutePath() + "_sheetChange.xls");
62   -// WritableWorkbook writableWorkbook = Workbook.createWorkbook(fileCal);
63   -// WritableSheet writableSheet = writableWorkbook.createSheet("工作表1", 0);
64   -// for (int i = 0; i < sheet.getRows(); i++) {
65   -// Cell[] cells = sheet.getRow(i);
66   -// for (int j = 0; j < cells.length; j++) {
67   -// writableSheet.addCell(new Label(j, i, cells[j].getContents()));
68   -// }
69   -// }
70   -// writableWorkbook.write();
71   -// writableWorkbook.close();
72   -//
73   -// return fileCal;
  58 + LOGGER.info("start uploadFile...originalFilename={}", filename);
74 59  
75   - return file;
  60 + // 1、上传文件到指定目录
  61 +
  62 + DataToolsFile dataToolsFile = new DataToolsFile();
  63 + // 判定文件类型(目前只支持xls,xlsx文件)
  64 + if (DataToolsFileType.XLS.isThisType(filedata)) {
  65 + // xls文件
  66 + dataToolsFile.setFileType(DataToolsFileType.XLS);
  67 + dataToolsFile.setFile(new File(DataToolsFileType.XLS.getNewFileName(
  68 + dataToolsProperties.getFileuploadDir(),
  69 + File.separator,
  70 + filename,
  71 + "-upload-",
  72 + new DateTime().toString("yyyyMMddHHmmss")
  73 + )));
  74 + Files.write(filedata, dataToolsFile.getFile());
  75 + } else if (DataToolsFileType.XLSX.isThisType(filedata)) {
  76 + // xlsx文件
  77 + dataToolsFile.setFileType(DataToolsFileType.XLSX);
  78 + dataToolsFile.setFile(new File(DataToolsFileType.XLSX.getNewFileName(
  79 + dataToolsProperties.getFileuploadDir(),
  80 + File.separator,
  81 + filename,
  82 + "-upload-",
  83 + new DateTime().toString("yyyyMMddHHmmss")
  84 + )));
  85 + Files.write(filedata, dataToolsFile.getFile());
  86 + } else {
  87 + // 非excel文件
  88 + throw new Exception(I18n.getInstance().getMessage("dataToolsServiceImpl-line132"));
  89 + }
  90 +
  91 + LOGGER.info("uploadFile success...newFilename={}", dataToolsFile.getFile().getAbsolutePath());
  92 +
  93 +
  94 + return dataToolsFile;
76 95  
77 96 } catch (Exception exp) {
78 97 throw new ScheduleException(exp);
... ... @@ -242,14 +261,26 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
242 261  
243 262 // 创建ktr转换所需参数
244 263 Map<String, Object> ktrParms = new HashMap<>();
245   - File ktrFile = new File(this.getClass().getResource(
246   - dataToolsProperties.getTtinfodetailMetaoutput()).toURI());
247   - File ktrFile2 = new File(this.getClass().getResource(
248   - dataToolsProperties.getTtinfodetailOutput()).toURI());
  264 + String country = Locale.getDefault().getLanguage();
  265 + File ktrFile = null;
  266 + File ktrFile2 = null;
  267 + if ("zh".equals(country)) {
  268 + ktrFile = new File(this.getClass().getResource(
  269 + dataToolsProperties.getZhTtinfoDetailMetaDataForExport()).toURI());
  270 + ktrFile2 = new File(this.getClass().getResource(
  271 + dataToolsProperties.getZhTtinfoDetailDataExport()).toURI());
  272 + } else if ("en".equals(country)) {
  273 + ktrFile = new File(this.getClass().getResource(
  274 + dataToolsProperties.getEnTtinfoDetailMetaDataForExport()).toURI());
  275 + ktrFile2 = new File(this.getClass().getResource(
  276 + dataToolsProperties.getEnTtinfoDetailDataExport()).toURI());
  277 + } else {
  278 + throw new Exception("not found Local[" + country + "] corresponding ktr.");
  279 + }
249 280  
250 281 // 通用参数,转换文件路径,excel输出文件名
251 282 ktrParms.put("transpath", ktrFile.getAbsolutePath());
252   - ktrParms.put("filename", String.format("时刻表_(id=%s)_download-", String.valueOf(params.get("ttinfoid"))));
  283 + ktrParms.put("filename", String.format(I18n.getInstance().getMessage("tTInfoDetailDataToolsImpl-line264") + "_(id=%s)_download-", String.valueOf(params.get("ttinfoid"))));
253 284  
254 285 // 附加参数
255 286 ktrParms.put("injectktrfile", ktrFile2.getAbsolutePath()); // 注入元数据的ktr文件
... ... @@ -267,9 +298,9 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
267 298 } else if (DataToolsFileType.XLSX.isThisType(file.getFile())) {
268 299 poi_workbook = DataToolsFileType.XLSX.getWorkBook(file.getFile());
269 300 } else {
270   - throw new Exception("不是xls xlsx文件!");
  301 + throw new Exception(I18n.getInstance().getMessage("tTInfoDetailDataToolsImpl-line283"));
271 302 }
272   - poi_sheet = poi_workbook.getSheet("Sheet1");
  303 + poi_sheet = poi_workbook.getSheetAt(0); // 获取第一个sheet,前提ktr输出的第一个sheet就是导出内容
273 304 List<String> colList = new ArrayList<>();
274 305 int rownums = poi_sheet.getLastRowNum() + 1;
275 306 int colnums = poi_sheet.getRow(0).getLastCellNum();
... ... @@ -322,8 +353,17 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
322 353  
323 354 // 创建ktr转换所需参数
324 355 Map<String, Object> ktrParms = new HashMap<>();
325   - File ktrFile = new File(this.getClass().getResource(
326   - dataToolsProperties.getTtinfodetailForeditktr()).toURI());
  356 + String country = Locale.getDefault().getLanguage();
  357 + File ktrFile;
  358 + if ("zh".equals(country)) {
  359 + ktrFile = new File(this.getClass().getResource(
  360 + dataToolsProperties.getZhTtinfoDetailDataExportForEdit()).toURI());
  361 + } else if ("en".equals(country)) {
  362 + ktrFile = new File(this.getClass().getResource(
  363 + dataToolsProperties.getEnTtinfoDetailDataExportForEdit()).toURI());
  364 + } else {
  365 + throw new Exception("not found Local[" + country + "] corresponding ktr.");
  366 + }
327 367  
328 368 // 通用参数,转换文件路径,excel输出文件名,错误输出文件路径
329 369 ktrParms.put("transpath", ktrFile.getAbsolutePath());
... ... @@ -358,9 +398,9 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
358 398 double all_lc_yy = 0; // 总营运里程
359 399  
360 400 String[] headarrays = new String[maxfcno.intValue() + 3];
361   - headarrays[0] = "$$$$$${txt-4022}";
362   - headarrays[maxfcno.intValue() + 1] = "$$$$$${txt-4376}";
363   - headarrays[maxfcno.intValue() + 2] = "$$$$$${txt-2804}";
  401 + headarrays[0] = I18n.getInstance().getMessage("tTInfoDetailDataToolsImpl-line383");
  402 + headarrays[maxfcno.intValue() + 1] = I18n.getInstance().getMessage("tTInfoDetailDataToolsImpl-line384");
  403 + headarrays[maxfcno.intValue() + 2] = I18n.getInstance().getMessage("tTInfoDetailDataToolsImpl-line385");
364 404  
365 405 for (int r = 1; r < sheet.getRows(); r++) {
366 406 List<FcInfo> fcInfos = new ArrayList<>();
... ... @@ -435,7 +475,7 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
435 475 }
436 476 editInfo.getHeader().addAll(Arrays.asList(headarrays));
437 477  
438   - editInfo.setYy_desc(String.format("$$$$$${txt-2914}", all_bc_ks, all_bc_yy, all_lc_ks, all_lc_yy, all_lc_ks + all_lc_yy));
  478 + editInfo.setYy_desc(String.format(I18n.getInstance().getMessage("tTInfoDetailDataToolsImpl-line460"), all_bc_ks, all_bc_yy, all_lc_ks, all_lc_yy, all_lc_ks + all_lc_yy));
439 479 }
440 480  
441 481 LOGGER.info("//---------------- 时刻表编辑用数据输出 success... ----------------//");
... ...
src/main/java/com/bsth/service/schedule/impl/TTInfoDetailServiceImpl.java
... ... @@ -33,6 +33,7 @@ import com.bsth.service.schedule.timetable.TimetableExcelFormatType;
33 33 import com.bsth.service.schedule.timetable.strategy.impl.TimetableExcelDataValidateStrategyImpl;
34 34 import com.bsth.service.schedule.timetable.strategy.impl.TimetableExcelPVDataExportStrategyImpl;
35 35 import com.bsth.service.schedule.utils.*;
  36 +import com.bsth.util.I18n;
36 37 import org.apache.commons.lang3.StringUtils;
37 38 import org.apache.commons.lang3.time.DateFormatUtils;
38 39 import org.apache.poi.ss.usermodel.*;
... ... @@ -114,7 +115,7 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im
114 115 "select station_code as zcode, station_name as zname, concat(station_name, '(站点)') as aname from bsth_c_ls_stationroute " +
115 116 "where destroy = 0 and line = ? and directions = ? and versions = ? " +
116 117 "union all " +
117   - "select park_code as zcode, park_name as zname, concat(park_name, '(停车场)') as aname from bsth_c_car_park " +
  118 + "select park_code as zcode, park_name as zname, concat(park_name, '(" + I18n.getInstance().getMessage("tTInfoDetailServiceImpl-line118") + ")') as aname from bsth_c_car_park " +
118 119 "where destroy = 0 " +
119 120 ") a ";
120 121  
... ... @@ -174,11 +175,11 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im
174 175 public void addLp(Long ttInfoId, Long lpId) {
175 176 List<TTInfoDetail> bcList = this.ttInfoDetailRepository.findBcdetails(ttInfoId, lpId);
176 177 if (!CollectionUtils.isEmpty(bcList)) {
177   - throw new RuntimeException("路牌已经存在!");
  178 + throw new RuntimeException(I18n.getInstance().getMessage("tTInfoDetailServiceImpl-line178"));
178 179 }
179 180 List<TTInfoDetail> allBcList = this.ttInfoDetailRepository.findByTtinfoId(ttInfoId);
180 181 if (CollectionUtils.isEmpty(allBcList)) {
181   - throw new RuntimeException("时刻表没有班次(添加路牌至少需要一个班次)!");
  182 + throw new RuntimeException(I18n.getInstance().getMessage("tTInfoDetailServiceImpl-line182"));
182 183 }
183 184  
184 185 Integer maxBcs = this.ttInfoDetailRepository.findMaxBcs(ttInfoId).intValue();
... ... @@ -262,31 +263,31 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im
262 263 public void validateAssoLineInfo(Integer lineinfoid) throws ScheduleException {
263 264 LineInformation lineInformation = lineInformationService.findById(lineinfoid);
264 265 if (lineInformation.getUpInMileage() == null) {
265   - throw new ScheduleException("上行进场里程为空");
  266 + throw new ScheduleException(I18n.getInstance().getMessage("tTInfoDetailServiceImpl-line266"));
266 267 } else if (lineInformation.getUpInTimer() == null) {
267   - throw new ScheduleException("上行进场时间为空");
  268 + throw new ScheduleException(I18n.getInstance().getMessage("tTInfoDetailServiceImpl-line268"));
268 269 } else if (lineInformation.getUpOutMileage() == null) {
269   - throw new ScheduleException("上行出场里程为空");
  270 + throw new ScheduleException(I18n.getInstance().getMessage("tTInfoDetailServiceImpl-line270"));
270 271 } else if (lineInformation.getUpOutTimer() == null) {
271   - throw new ScheduleException("上行出场时间为空");
  272 + throw new ScheduleException(I18n.getInstance().getMessage("tTInfoDetailServiceImpl-line272"));
272 273 } else if (lineInformation.getUpMileage() == null) {
273   - throw new ScheduleException("上行班次里程为空");
  274 + throw new ScheduleException(I18n.getInstance().getMessage("tTInfoDetailServiceImpl-line274"));
274 275 } else if (lineInformation.getUpTravelTime() == null) {
275   - throw new ScheduleException("上行班次时间为空");
  276 + throw new ScheduleException(I18n.getInstance().getMessage("tTInfoDetailServiceImpl-line276"));
276 277 } else if (lineInformation.getDownInMileage() == null) {
277   - throw new ScheduleException("下行进场里程为空");
  278 + throw new ScheduleException(I18n.getInstance().getMessage("tTInfoDetailServiceImpl-line278"));
278 279 } else if (lineInformation.getDownInTimer() == null) {
279   - throw new ScheduleException("下行进场时间为空");
  280 + throw new ScheduleException(I18n.getInstance().getMessage("tTInfoDetailServiceImpl-line280"));
280 281 } else if (lineInformation.getDownOutMileage() == null) {
281   - throw new ScheduleException("下行出场里程为空");
  282 + throw new ScheduleException(I18n.getInstance().getMessage("tTInfoDetailServiceImpl-line282"));
282 283 } else if (lineInformation.getDownOutTimer() == null) {
283   - throw new ScheduleException("下行出场时间为空");
  284 + throw new ScheduleException(I18n.getInstance().getMessage("tTInfoDetailServiceImpl-line284"));
284 285 } else if (lineInformation.getDownMileage() == null) {
285   - throw new ScheduleException("下行班次里程为空");
  286 + throw new ScheduleException(I18n.getInstance().getMessage("tTInfoDetailServiceImpl-line286"));
286 287 } else if (lineInformation.getDownTravelTime() == null) {
287   - throw new ScheduleException("下行班次时间为空");
  288 + throw new ScheduleException(I18n.getInstance().getMessage("tTInfoDetailServiceImpl-line288"));
288 289 } else if (StringUtils.isEmpty(lineInformation.getCarPark())) {
289   - throw new ScheduleException("停车场必须选择");
  290 + throw new ScheduleException(I18n.getInstance().getMessage("tTInfoDetailServiceImpl-line290"));
290 291 }
291 292  
292 293 // 单独验证停车场信息
... ... @@ -295,13 +296,13 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im
295 296 p1.put("parkCode_eq", tcccode);
296 297 List<CarPark> carParkList = (List<CarPark>) carParkService.list(p1);
297 298 if (CollectionUtils.isEmpty(carParkList)) {
298   - throw new ScheduleException(String.format("线路标准里的停车场code=%s,在停车场信息中未找到", tcccode));
  299 + throw new ScheduleException(String.format(I18n.getInstance().getMessage("tTInfoDetailServiceImpl-line299"), tcccode));
299 300 } else if (carParkList.size() > 1) {
300   - throw new ScheduleException(String.format("线路标准里的停车场code=%s,在停车场信息中有重复数据", tcccode));
  301 + throw new ScheduleException(String.format(I18n.getInstance().getMessage("tTInfoDetailServiceImpl-line301"), tcccode));
301 302 } else {
302 303 CarPark carPark = carParkList.get(0);
303 304 if (StringUtils.isEmpty(carPark.getParkName())) {
304   - throw new ScheduleException(String.format("线路标准里的停车场code=%s,在停车场信息中没有停车场名字", tcccode));
  305 + throw new ScheduleException(String.format(I18n.getInstance().getMessage("tTInfoDetailServiceImpl-line305"), tcccode));
305 306 }
306 307 }
307 308  
... ...
src/main/java/com/bsth/service/schedule/impl/TTInfoServiceImpl.java
... ... @@ -9,6 +9,7 @@ import com.bsth.repository.schedule.TTInfoRepository;
9 9 import com.bsth.service.schedule.TTInfoService;
10 10 import com.bsth.service.schedule.exception.ScheduleException;
11 11 import com.bsth.service.schedule.utils.TimeTableProto;
  12 +import com.bsth.util.I18n;
12 13 import org.apache.commons.lang3.StringUtils;
13 14 import org.joda.time.DateTime;
14 15 import org.slf4j.Logger;
... ... @@ -51,7 +52,7 @@ public class TTInfoServiceImpl extends BServiceImpl&lt;TTInfo, Long&gt; implements TTI
51 52 param.put("name_eq", ttInfo.getName());
52 53  
53 54 if (!CollectionUtils.isEmpty(list(param))) {
54   - throw new ScheduleException("名字重复");
  55 + throw new ScheduleException(I18n.getInstance().getMessage("tTInfoServiceImpl-line54"));
55 56 }
56 57 }
57 58  
... ... @@ -68,7 +69,7 @@ public class TTInfoServiceImpl extends BServiceImpl&lt;TTInfo, Long&gt; implements TTI
68 69 param.put("isEnableDisTemplate_eq", true);
69 70 List<TTInfo> ttInfos = list(param);
70 71 if (StringUtils.isEmpty(ttInfo.getRule_days())) {
71   - throw new ScheduleException("常规有效日为空");
  72 + throw new ScheduleException(I18n.getInstance().getMessage("tTInfoServiceImpl-line72"));
72 73 } else {
73 74 String[] nds = ttInfo.getRule_days().split(",");
74 75 for (TTInfo t : ttInfos) {
... ... @@ -78,7 +79,7 @@ public class TTInfoServiceImpl extends BServiceImpl&lt;TTInfo, Long&gt; implements TTI
78 79 //
79 80 } else {
80 81 if (nds[i].equals(nds_e[i])) {
81   - throw new ScheduleException("当前常规有效日期已经使用");
  82 + throw new ScheduleException(I18n.getInstance().getMessage("tTInfoServiceImpl-line82"));
82 83 }
83 84 }
84 85 }
... ... @@ -109,7 +110,7 @@ public class TTInfoServiceImpl extends BServiceImpl&lt;TTInfo, Long&gt; implements TTI
109 110 } else {
110 111 for (String sd : sds) {
111 112 if (t.getSpecial_days().indexOf(sd) != -1) {
112   - throw new ScheduleException("当前特殊日期已经使用");
  113 + throw new ScheduleException(I18n.getInstance().getMessage("tTInfoServiceImpl-line113"));
113 114 }
114 115 }
115 116 }
... ... @@ -165,8 +166,8 @@ public class TTInfoServiceImpl extends BServiceImpl&lt;TTInfo, Long&gt; implements TTI
165 166 int version = Integer.parseInt(lv.get("version").toString());
166 167  
167 168 String vname = t_name;
168   - String rq = t_sd == null ? "未知启用日期" : new DateTime(t_sd).toString("YYYY年MM月dd日");
169   - String sdesc = status == 0 ? "$$$$$${txt-4010}" : (status == 1 ? "当前" : "待更新");
  169 + String rq = t_sd == null ? I18n.getInstance().getMessage("tTInfoServiceImpl-line169") : new DateTime(t_sd).toString("YYYY-MM-dd");
  170 + String sdesc = status == 0 ? I18n.getInstance().getMessage("tTInfoServiceImpl-line170") : (status == 1 ? I18n.getInstance().getMessage("tTInfoServiceImpl-line170-1") : I18n.getInstance().getMessage("tTInfoServiceImpl-line170-2"));
170 171  
171 172 Map<String, Object> value = new HashMap<>();
172 173 value.put("desc", vname + "-" + rq + "-" + sdesc);
... ... @@ -189,9 +190,9 @@ public class TTInfoServiceImpl extends BServiceImpl&lt;TTInfo, Long&gt; implements TTI
189 190  
190 191 Map<String, Object> lv;
191 192 if (CollectionUtils.isEmpty(lineVersionDescs)) {
192   - return "未知版本";
  193 + return I18n.getInstance().getMessage("tTInfoServiceImpl-line193");
193 194 } else if (lineVersionDescs.size() > 1) {
194   - return "重复版本";
  195 + return I18n.getInstance().getMessage("tTInfoServiceImpl-line195");
195 196 } else {
196 197 lv = lineVersionDescs.get(0);
197 198 }
... ... @@ -201,8 +202,8 @@ public class TTInfoServiceImpl extends BServiceImpl&lt;TTInfo, Long&gt; implements TTI
201 202 int status = Integer.parseInt(lv.get("status").toString());
202 203  
203 204 String vname = t_name;
204   - String rq = t_sd == null ? "未知启用日期" : new DateTime(t_sd).toString("YYYY年MM月dd日");
205   - String sdesc = status == 0 ? "$$$$$${txt-4010}" : (status == 1 ? "当前" : "待更新");
  205 + String rq = t_sd == null ? I18n.getInstance().getMessage("tTInfoServiceImpl-line205") : new DateTime(t_sd).toString("YYYY-MM-dd");
  206 + String sdesc = status == 0 ? I18n.getInstance().getMessage("tTInfoServiceImpl-line206") : (status == 1 ? I18n.getInstance().getMessage("tTInfoServiceImpl-line206-1") : I18n.getInstance().getMessage("tTInfoServiceImpl-line206-2"));
206 207  
207 208 return String.format("%s-%s-%s", vname, rq, sdesc);
208 209 }
... ...
src/main/java/com/bsth/service/schedule/timetable/TimetableExcelData.java
... ... @@ -15,6 +15,7 @@ import com.bsth.service.schedule.timetable.strategy.TimetableExcelDataImportStra
15 15 import com.bsth.service.schedule.timetable.strategy.TimetableExcelDataValidateStrategy;
16 16 import com.bsth.service.schedule.timetable.strategy.TimetableExcelPVDataExportStrategy;
17 17 import com.bsth.service.schedule.utils.*;
  18 +import com.bsth.util.I18n;
18 19 import org.apache.commons.lang3.StringUtils;
19 20 import org.apache.poi.ss.usermodel.Sheet;
20 21 import org.apache.poi.ss.usermodel.Workbook;
... ... @@ -75,17 +76,17 @@ public class TimetableExcelData {
75 76 // 初始化内部标识excel单元格
76 77 private void initInternalExcelCells() {
77 78 int rowCount = this.excelWorkBookSheet.getLastRowNum() + 1; // 基于0 base的,长度加1
78   - Assert.isTrue(rowCount > 1, String.format("%s 工作区没有数据!", this.excelWorkBookSheet.getSheetName()));
  79 + Assert.isTrue(rowCount > 1, String.format(I18n.getInstance().getMessage("timetableExcelData-line79"), this.excelWorkBookSheet.getSheetName()));
79 80 int colCount = this.excelWorkBookSheet.getRow(0).getLastCellNum(); // 不需要加1,就是长度
80   - Assert.isTrue(colCount > 0, String.format("%s 工作区第一行没有数据!", this.excelWorkBookSheet.getSheetName()));
  81 + Assert.isTrue(colCount > 0, String.format(I18n.getInstance().getMessage("timetableExcelData-line81"), this.excelWorkBookSheet.getSheetName()));
81 82  
82 83 this.internalExcelCells = new TimetableExcelInternalCell[rowCount][colCount];
83 84 for (int rowNum = 0; rowNum < rowCount; rowNum ++) {
84 85 for (int colNum = 0; colNum < colCount; colNum ++) {
85 86 TimetableExcelInternalCell cell = new TimetableExcelInternalCell();
86 87 String cell_con = StringUtils.trimToEmpty(PoiUtils.getStringValueFromCell(
87   - this.excelWorkBookSheet.getRow(rowNum).getCell(colNum))
88   - .replaceAll("\\s*", "")); // trimToEmpty
  88 + this.excelWorkBookSheet.getRow(rowNum).getCell(colNum)));
  89 +// .replaceAll("\\s*", "")); // 去除所有空格(由于英文版中空格有业务意义,所以不用replace)
89 90  
90 91 // 如果站名中有类似->{数字},使用正则表达式过滤掉
91 92 cell_con = cell_con.replaceAll("(->\\d+)", "");
... ... @@ -300,15 +301,15 @@ public class TimetableExcelData {
300 301 public TimetableExcelData build() throws ScheduleException {
301 302 // 0、检测时刻表excel业务格式
302 303 if (this.timetableExcelFormatType == null) {
303   - throw new ScheduleException("导入的Excel类型为空!");
  304 + throw new ScheduleException(I18n.getInstance().getMessage("timetableExcelData-line304"));
304 305 }
305 306  
306 307 // 1、检测excel文件,创建excel workbook对象
307 308 // 1-1、检测文件是否存在
308   - Assert.hasText(this.excelFilePath, "导入的Excel文件路径为空!");
  309 + Assert.hasText(this.excelFilePath, I18n.getInstance().getMessage("timetableExcelData-line309"));
309 310 File file = new File(this.excelFilePath);
310 311 if (!file.exists()) {
311   - throw new ScheduleException("导入的Excel文件[" + this.excelFilePath + "]不存在!");
  312 + throw new ScheduleException(I18n.getInstance().getMessage("timetableExcelData-line312", this.excelFilePath));
312 313 }
313 314 // 1-2、检测文件类型
314 315 DataToolsFile dataToolsFile = new DataToolsFile();
... ... @@ -318,28 +319,28 @@ public class TimetableExcelData {
318 319 } else if (DataToolsFileType.XLSX.isThisType(file)) {
319 320 dataToolsFile.setFileType(DataToolsFileType.XLSX);
320 321 } else {
321   - throw new ScheduleException("导入的Excel文件[" + this.excelFilePath + "]内部不是xls,xlsx文件!");
  322 + throw new ScheduleException(I18n.getInstance().getMessage("timetableExcelData-line322", this.excelFilePath));
322 323 }
323 324 // 1-3、创建workbook
324 325 this.excelWorkBook = dataToolsFile.getFileType().getWorkBook(dataToolsFile.getFile());
325 326 // 1-4、检测sheet名字
326   - Assert.hasText(this.excelSheetName, "导入的Excel sheet名字为空!");
  327 + Assert.hasText(this.excelSheetName, I18n.getInstance().getMessage("timetableExcelData-line327"));
327 328 this.excelWorkBookSheet = this.excelWorkBook.getSheet(this.excelSheetName);
328 329 if (this.excelWorkBookSheet == null) {
329   - throw new ScheduleException("导入的Excel文件sheet[" + this.excelSheetName + "]不存在!");
  330 + throw new ScheduleException(I18n.getInstance().getMessage("timetableExcelData-line330", this.excelSheetName));
330 331 }
331 332  
332 333 // 2、获取线路信息,站点路由信息
333 334 // 2-1、线路信息
334   - Assert.notNull(this.lineService, "线路信息service为空!");
335   - Assert.notNull(this.lineId, "线路Id为空!");
  335 + Assert.notNull(this.lineService, I18n.getInstance().getMessage("timetableExcelData-line335"));
  336 + Assert.notNull(this.lineId, I18n.getInstance().getMessage("timetableExcelData-line336"));
336 337 this.line = this.lineService.findById(this.lineId);
337 338 if (this.line == null) {
338   - throw new ScheduleException("线路[id=" + this.lineId + "]不存在!");
  339 + throw new ScheduleException(I18n.getInstance().getMessage("timetableExcelData-line339", String.valueOf(this.lineId)));
339 340 }
340 341 // 2-2、站点路由信息
341   - Assert.notNull(this.lsStationRouteService, "站点路由信息service为空!");
342   - Assert.notNull(this.lineRouteVersion, "线路站点路由版本为空!");
  342 + Assert.notNull(this.lsStationRouteService, I18n.getInstance().getMessage("timetableExcelData-line342"));
  343 + Assert.notNull(this.lineRouteVersion, I18n.getInstance().getMessage("timetableExcelData-line343"));
343 344 Map<String, Object> p1 = new HashMap<>();
344 345 p1.put("line.id_eq", this.lineId);
345 346 p1.put("stationMark_in", "B,E"); // 起点站
... ... @@ -347,21 +348,21 @@ public class TimetableExcelData {
347 348 p1.put("versions_eq", this.lineRouteVersion); // 带线路版本
348 349 this.lsStationRouteList = (List<LsStationRoute>) this.lsStationRouteService.findAllByParams(p1);
349 350 if (CollectionUtils.isEmpty(this.lsStationRouteList)) {
350   - throw new ScheduleException("线路[" + this.line.getName() + "],站点路由[版本=" + this.lineRouteVersion + "]信息为空");
  351 + throw new ScheduleException(I18n.getInstance().getMessage("timetableExcelData-line351", this.line.getName(), String.valueOf(this.lineRouteVersion)));
351 352 }
352 353  
353 354 // 3、获取路牌信息
354   - Assert.notNull(this.guideboardInfoService, "路牌信息service为空!");
  355 + Assert.notNull(this.guideboardInfoService, I18n.getInstance().getMessage("timetableExcelData-line355"));
355 356 p1.clear();
356 357 p1.put("xl.id_eq", this.lineId);
357 358 p1.put("isCancel_eq", false);
358 359 this.guideboardInfoList = guideboardInfoService.list(p1);
359 360 if (CollectionUtils.isEmpty(this.guideboardInfoList)) {
360   - throw new ScheduleException("线路[" + this.line.getName() + "]路牌信息为空!");
  361 + throw new ScheduleException(I18n.getInstance().getMessage("timetableExcelData-line361", this.line.getName()));
361 362 }
362 363  
363 364 // 4、验证策略类
364   - Assert.notNull(this.timetableExcelDataValidateStrategy, "时刻表excel验证策略类为空!");
  365 + Assert.notNull(this.timetableExcelDataValidateStrategy, I18n.getInstance().getMessage("timetableExcelData-line365"));
365 366  
366 367 return new TimetableExcelData(this);
367 368 }
... ... @@ -468,7 +469,7 @@ public class TimetableExcelData {
468 469  
469 470 public TimetableExcelData build() throws ScheduleException {
470 471 // 0、验证策略类
471   - Assert.notNull(this.timetableExcelDataImportStrategy, "时刻表excel导入策略类为空!");
  472 + Assert.notNull(this.timetableExcelDataImportStrategy, I18n.getInstance().getMessage("timetableExcelData-line472"));
472 473  
473 474 // 注意:这里不做其他验证,业务上导入前必须验证的(调用验证用的builder)
474 475 File file = new File(this.excelFilePath);
... ... @@ -548,20 +549,20 @@ public class TimetableExcelData {
548 549  
549 550 public TimetableExcelData build() {
550 551 // 1、参数验证
551   - Assert.notNull(this.ttInfoId, "时刻表Id为空!");
552   - Assert.notNull(ttInfoRepository, "时刻表repo为空!");
553   - Assert.notNull(ttInfoDetailRepository, "时刻表明细repo为空!");
554   - Assert.notNull(timetableExcelPVDataExportStrategy, "时刻表预览excel数据导出策略为空!");
  552 + Assert.notNull(this.ttInfoId, I18n.getInstance().getMessage("timetableExcelData-line552"));
  553 + Assert.notNull(ttInfoRepository, I18n.getInstance().getMessage("timetableExcelData-line553"));
  554 + Assert.notNull(ttInfoDetailRepository, I18n.getInstance().getMessage("timetableExcelData-line554"));
  555 + Assert.notNull(timetableExcelPVDataExportStrategy, I18n.getInstance().getMessage("timetableExcelData-line555"));
555 556  
556 557 // 2、获取时刻表数据
557 558 this.ttInfo = this.ttInfoRepository.findOneExtend(this.ttInfoId);
558   - Assert.notNull(this.ttInfo, "时刻表[id=" + this.ttInfoId + "]未找到!");
  559 + Assert.notNull(this.ttInfo, I18n.getInstance().getMessage("timetableExcelData-line559", String.valueOf(this.ttInfoId)));
559 560  
560 561 // 3、获取时刻表明细数据
561 562 this.ttInfoDetailList = this.ttInfoDetailRepository.findByTtinfoId(this.ttInfoId);
562 563  
563 564 // 4、计算导出文件路径
564   - Assert.notNull(this.dataToolsProperties, "dataTools配置文件类为空!");
  565 + Assert.notNull(this.dataToolsProperties, I18n.getInstance().getMessage("timetableExcelData-line565"));
565 566 this.pvExportFilePath = dataToolsProperties.getFileoutputDir() +
566 567 File.separator +
567 568 ttInfo.getName() + "预览信息-" +
... ...
src/main/java/com/bsth/service/schedule/timetable/strategy/impl/TimetableExcelDataImportStrategyImpl.java
... ... @@ -6,6 +6,7 @@ import com.bsth.service.schedule.timetable.TimetableExcelFormatType;
6 6 import com.bsth.service.schedule.timetable.strategy.TimetableExcelDataImportStrategy;
7 7 import com.bsth.service.schedule.utils.DataToolsProperties;
8 8 import com.bsth.service.schedule.utils.DataToolsService;
  9 +import com.bsth.util.I18n;
9 10 import jxl.write.Label;
10 11 import jxl.write.WritableSheet;
11 12 import jxl.write.WritableWorkbook;
... ... @@ -17,6 +18,7 @@ import org.slf4j.LoggerFactory;
17 18 import java.io.File;
18 19 import java.util.ArrayList;
19 20 import java.util.List;
  21 +import java.util.Locale;
20 22 import java.util.Map;
21 23  
22 24 /**
... ... @@ -58,14 +60,14 @@ public class TimetableExcelDataImportStrategyImpl implements TimetableExcelDataI
58 60 // 2-1-2、如果导入格式是Dynamic,忽略指定列
59 61 if (timetableExcelFormatType == TimetableExcelFormatType.Dynamic) {
60 62 if ("报到".equals(cell.cellContent) ||
61   - "$$$$$${txt-4502}".equals(cell.cellContent) ||
62   - "$$$$$${txt-4501}".equals(cell.cellContent) ||
63   - "$$$$$${txt-3536}".equals(cell.cellContent) ||
64   - "$$$$$${txt-4405}".equals(cell.cellContent) ||
65   - "$$$$$${txt-2437}".equals(cell.cellContent) ||
66   - "$$$$$${txt-4496}".equals(cell.cellContent) ||
67   - "$$$$$${txt-4406}".equals(cell.cellContent) ||
68   - "$$$$$${txt-2783}".equals(cell.cellContent)) {
  63 + I18n.getInstance().getMessage("timetableExcelDataImportStrategyImpl_line62_txt-4502").equals(cell.cellContent) ||
  64 + I18n.getInstance().getMessage("timetableExcelDataImportStrategyImpl_line63_txt-4501").equals(cell.cellContent) ||
  65 + I18n.getInstance().getMessage("timetableExcelDataImportStrategyImpl_line64_txt-3536").equals(cell.cellContent) ||
  66 + I18n.getInstance().getMessage("timetableExcelDataImportStrategyImpl_line65_txt-4405").equals(cell.cellContent) ||
  67 + I18n.getInstance().getMessage("timetableExcelDataImportStrategyImpl_line66_txt-2437").equals(cell.cellContent) ||
  68 + I18n.getInstance().getMessage("timetableExcelDataImportStrategyImpl_line67_txt-4496").equals(cell.cellContent) ||
  69 + I18n.getInstance().getMessage("timetableExcelDataImportStrategyImpl_line68_txt-4406").equals(cell.cellContent) ||
  70 + I18n.getInstance().getMessage("timetableExcelDataImportStrategyImpl_line69_txt-2783").equals(cell.cellContent)) {
69 71 // 这些列都忽略,不参与计算
70 72 cell.isEnable = false;
71 73 }
... ... @@ -141,36 +143,69 @@ public class TimetableExcelDataImportStrategyImpl implements TimetableExcelDataI
141 143 ktrParams.put("filepath", fileCal.getAbsolutePath());
142 144 } catch (Exception exp) {
143 145 exp.printStackTrace();
144   - throw new ScheduleException("$$$$$${txt-2115}异常!");
  146 + throw new ScheduleException(I18n.getInstance().getMessage("timetableExcelDataImportStrategyImpl_line145_txt-2115"));
145 147 }
146 148  
147 149 // 3-3、计算ktr路径相关参数
148 150 try {
  151 + String country = Locale.getDefault().getLanguage();
149 152 // 元数据ktr
150   - File mktrFile = new File(this.getClass().getResource(
151   - dataToolsProperties.getTtinfodetailMetadatainputktr()).toURI());
  153 + File mktrFile;
  154 + if ("zh".equals(country)) {
  155 + mktrFile = new File(this.getClass().getResource(
  156 + dataToolsProperties.getZhTtinfoDetailMetaDataForImport()).toURI());
  157 + } else if ("en".equals(country)) {
  158 + mktrFile = new File(this.getClass().getResource(
  159 + dataToolsProperties.getEnTtinfoDetailMetaDataForImport()).toURI());
  160 + } else {
  161 + throw new Exception("not found Local[" + country + "] corresponding ktr.");
  162 + }
152 163 ktrParams.put("transpath", mktrFile.getAbsolutePath());
153 164  
154 165 // 实际数据ktr
155 166 if (timetableExcelFormatType == TimetableExcelFormatType.Normal) {
156   - File normal_ktrFile = new File(this.getClass().getResource(
157   - dataToolsProperties.getTtinfodetailDatainputktr2version()).toURI());
  167 + File normal_ktrFile;
  168 + if ("zh".equals(country)) {
  169 + normal_ktrFile = new File(this.getClass().getResource(
  170 + dataToolsProperties.getZhTtinfoDetailDataImportOfNormal()).toURI());
  171 + } else if ("en".equals(country)) {
  172 + normal_ktrFile = new File(this.getClass().getResource(
  173 + dataToolsProperties.getEnTtinfoDetailDataImportOfNormal()).toURI());
  174 + } else {
  175 + throw new Exception("not found Local[" + country + "] corresponding ktr.");
  176 + }
158 177 ktrParams.put("injectktrfile", normal_ktrFile.getAbsolutePath());
159 178 } else if (timetableExcelFormatType == TimetableExcelFormatType.NormalWithGs) {
160   - File noramlwithgs_ktrFile = new File(this.getClass().getResource(
161   - dataToolsProperties.getTtinfodetailDatainputktr2normalwithgs()).toURI());
162   - ktrParams.put("injectktrfile", noramlwithgs_ktrFile.getAbsolutePath());
  179 + File normalwithgs_ktrFile;
  180 + if ("zh".equals(country)) {
  181 + normalwithgs_ktrFile = new File(this.getClass().getResource(
  182 + dataToolsProperties.getZhTtinfoDetailDataImportOfNormalWithGs()).toURI());
  183 + } else if ("en".equals(country)) {
  184 + normalwithgs_ktrFile = new File(this.getClass().getResource(
  185 + dataToolsProperties.getEnTtinfoDetailDataImportOfNormalWithGs()).toURI());
  186 + } else {
  187 + throw new Exception("not found Local[" + country + "] corresponding ktr.");
  188 + }
  189 + ktrParams.put("injectktrfile", normalwithgs_ktrFile.getAbsolutePath());
163 190 } else if (timetableExcelFormatType == TimetableExcelFormatType.Dynamic) {
164   - File dynamic_ktrFile = new File(this.getClass().getResource(
165   - dataToolsProperties.getTtinfodetailDatainputktr2version2()).toURI());
  191 + File dynamic_ktrFile;
  192 + if ("zh".equals(country)) {
  193 + dynamic_ktrFile = new File(this.getClass().getResource(
  194 + dataToolsProperties.getZhTtinfoDetailDataImportOfDynamic()).toURI());
  195 + } else if ("en".equals(country)) {
  196 + dynamic_ktrFile = new File(this.getClass().getResource(
  197 + dataToolsProperties.getEnTtinfoDetailDataImportOfDynamic()).toURI());
  198 + } else {
  199 + throw new Exception("not found Local[" + country + "] corresponding ktr.");
  200 + }
166 201 ktrParams.put("injectktrfile", dynamic_ktrFile.getAbsolutePath());
167 202 } else {
168   - throw new ScheduleException("未知的TimetableExcelFormatType格式[" + timetableExcelFormatType + "]");
  203 + throw new ScheduleException(I18n.getInstance().getMessage("timetableExcelDataImportStrategyImpl_line203", timetableExcelFormatType.getDesc()));
169 204 }
170 205  
171 206 } catch (Exception exp) {
172 207 exp.printStackTrace();
173   - throw new ScheduleException("$$$$$${txt-2115}异常!");
  208 + throw new ScheduleException(I18n.getInstance().getMessage("timetableExcelDataImportStrategyImpl_line208_txt-2115"));
174 209 }
175 210  
176 211 // 3-4、执行ktr
... ...
src/main/java/com/bsth/service/schedule/timetable/strategy/impl/TimetableExcelDataValidateStrategyImpl.java
... ... @@ -7,6 +7,7 @@ import com.bsth.service.schedule.exception.ScheduleException;
7 7 import com.bsth.service.schedule.timetable.TimetableExcelFormatType;
8 8 import com.bsth.service.schedule.timetable.TimetableExcelData.TimetableExcelInternalCell;
9 9 import com.bsth.service.schedule.timetable.strategy.TimetableExcelDataValidateStrategy;
  10 +import com.bsth.util.I18n;
10 11 import org.apache.commons.lang3.StringUtils;
11 12 import org.springframework.util.CollectionUtils;
12 13  
... ... @@ -47,7 +48,7 @@ public class TimetableExcelDataValidateStrategyImpl implements TimetableExcelDat
47 48 Line line,
48 49 List<LsStationRoute> lsStationRouteList) throws ScheduleException {
49 50 if (StringUtils.isEmpty(routeName)) {
50   - throw new ScheduleException(String.format("第1行,第%d列数据不能为空", colNum + 1));
  51 + throw new ScheduleException(String.format(I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line51"), colNum + 1));
51 52 }
52 53  
53 54 List<LsStationRoute> lsStationRoutes = new ArrayList<>();
... ... @@ -58,13 +59,13 @@ public class TimetableExcelDataValidateStrategyImpl implements TimetableExcelDat
58 59 }
59 60  
60 61 if (CollectionUtils.isEmpty(lsStationRoutes)) {
61   - throw new ScheduleException(String.format("第1行,第%d列数据%s在%s站点路由中不是起点站",
  62 + throw new ScheduleException(String.format(I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line62"),
62 63 colNum + 1, routeName, line.getName()));
63 64 } else if (lsStationRoutes.size() > 1) {
64   - throw new ScheduleException(String.format("第1行,第%d列数据%s在%s站点路由中上下行都是起点站",
  65 + throw new ScheduleException(String.format(I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line65"),
65 66 colNum + 1, routeName, line.getName()));
66 67 } else if (StringUtils.isEmpty(lsStationRoutes.get(0).getStationCode())) {
67   - throw new ScheduleException(String.format("第1行,第%d列数据%s在%s站点路由中没有站点编码",
  68 + throw new ScheduleException(String.format(I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line68"),
68 69 colNum + 1, routeName, line.getName()));
69 70 }
70 71  
... ... @@ -77,7 +78,7 @@ public class TimetableExcelDataValidateStrategyImpl implements TimetableExcelDat
77 78 Line line,
78 79 List<GuideboardInfo> guideboardInfoList) throws ScheduleException {
79 80 if (StringUtils.isEmpty(guideboardName)) {
80   - throw new ScheduleException(String.format("第%d行,第1列路牌无数据", rowNum + 1));
  81 + throw new ScheduleException(String.format(I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line81"), rowNum + 1));
81 82 }
82 83  
83 84 List<GuideboardInfo> guideboardInfos = new ArrayList<>();
... ... @@ -88,10 +89,10 @@ public class TimetableExcelDataValidateStrategyImpl implements TimetableExcelDat
88 89 }
89 90  
90 91 if (CollectionUtils.isEmpty(guideboardInfos)) {
91   - throw new ScheduleException(String.format("第%d行,第1列的路牌在%s中不存在",
  92 + throw new ScheduleException(String.format(I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line92"),
92 93 rowNum + 1, line.getName()));
93 94 } else if (guideboardInfos.size() > 1) {
94   - throw new ScheduleException(String.format("第%d行,第1列的路牌在%s中重复",
  95 + throw new ScheduleException(String.format(I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line95"),
95 96 rowNum + 1, line.getName()));
96 97 }
97 98 }
... ... @@ -115,7 +116,7 @@ public class TimetableExcelDataValidateStrategyImpl implements TimetableExcelDat
115 116 Matcher m3 = p3.matcher(fcsjContent.trim());
116 117 boolean expected = m1.matches() || m2.matches() || m3.matches();
117 118 if (!expected) {
118   - throw new ScheduleException(String.format("第%d行,第%d列的发车时间格式不正确,格式应为hh:mm或hh,mm或hhmm",
  119 + throw new ScheduleException(String.format(I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line119"),
119 120 rowNum + 1, colNum + 1));
120 121 }
121 122 } else if (timetableExcelFormatType == TimetableExcelFormatType.Dynamic) {
... ... @@ -124,11 +125,11 @@ public class TimetableExcelDataValidateStrategyImpl implements TimetableExcelDat
124 125 boolean expected = m1.matches() || m2.matches();
125 126 if (!expected) {
126 127 throw new ScheduleException(String.format(
127   - "第%d行,第%d列的发车时间格式不正确,格式应为(报|出)hh:mm或hh:mm(X|※)",
  128 + I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line128"),
128 129 rowNum + 1, colNum + 1));
129 130 }
130 131 } else {
131   - throw new ScheduleException(String.format("未知的导入格式[%s]", timetableExcelFormatType.getDesc()));
  132 + throw new ScheduleException(String.format(I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line132"), timetableExcelFormatType.getDesc()));
132 133 }
133 134 }
134 135  
... ... @@ -138,12 +139,12 @@ public class TimetableExcelDataValidateStrategyImpl implements TimetableExcelDat
138 139 Matcher m1 = p5.matcher(gsContent.trim());
139 140 boolean expected = m1.matches();
140 141 if (!expected) {
141   - throw new ScheduleException(String.format("第%d行,第%d列的工时格式不正确,格式应为整数或浮点数",
  142 + throw new ScheduleException(String.format(I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line142"),
142 143 rowNum + 1, colNum + 1));
143 144 }
144 145 Double gs = new Double(gsContent.trim());
145 146 if (gs < 0) {
146   - throw new ScheduleException(String.format("第%d行,第%d列的工时值必须大于0",
  147 + throw new ScheduleException(String.format(I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line147"),
147 148 rowNum + 1, colNum + 1));
148 149 }
149 150 }
... ... @@ -168,7 +169,7 @@ public class TimetableExcelDataValidateStrategyImpl implements TimetableExcelDat
168 169 int rowCount = internalExcelCells.length;
169 170 int colCount = internalExcelCells[0].length;
170 171 if (rowCount <= 1 || colCount <= 1) {
171   - throw new ScheduleException("工作区至少包含2行2列的数据");
  172 + throw new ScheduleException(I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line172"));
172 173 }
173 174  
174 175 // 2、验证单元格信息
... ... @@ -179,16 +180,16 @@ public class TimetableExcelDataValidateStrategyImpl implements TimetableExcelDat
179 180  
180 181 // 2-1-1、第一行,第一列必须路牌2个字
181 182 if (colNum == 0) {
182   - if (!"$$$$$${txt-4022}".equals(cell.cellContent)) {
183   - throw new ScheduleException("第1行,第1列数据必须是路牌2个字");
  183 + if (!I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line183").equals(cell.cellContent)) {
  184 + throw new ScheduleException(I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line184"));
184 185 }
185 186 cell.isLpNameCell = true;
186 187 continue;
187 188 }
188 189 // 2-1-1-1、如果导入格式是NormalWithGs,第一行,第二列必须工时2个字
189 190 if (colNum == 1 && timetableExcelFormatType == TimetableExcelFormatType.NormalWithGs) {
190   - if (!"$$$$$${txt-4214}".equals(cell.cellContent)) {
191   - throw new ScheduleException("第1行,第2列数据必须是工时2个字");
  191 + if (!I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line191").equals(cell.cellContent)) {
  192 + throw new ScheduleException(I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line192"));
192 193 }
193 194 cell.isGsCell = true;
194 195 continue;
... ... @@ -196,15 +197,15 @@ public class TimetableExcelDataValidateStrategyImpl implements TimetableExcelDat
196 197  
197 198 // 2-1-2、如果导入格式是Dynamic,忽略指定列
198 199 if (timetableExcelFormatType == TimetableExcelFormatType.Dynamic) {
199   - if ("报到".equals(cell.cellContent) ||
200   - "$$$$$${txt-4502}".equals(cell.cellContent) ||
201   - "$$$$$${txt-4501}".equals(cell.cellContent) ||
202   - "$$$$$${txt-3536}".equals(cell.cellContent) ||
203   - "$$$$$${txt-4405}".equals(cell.cellContent) ||
204   - "$$$$$${txt-2437}".equals(cell.cellContent) ||
205   - "$$$$$${txt-4496}".equals(cell.cellContent) ||
206   - "$$$$$${txt-4406}".equals(cell.cellContent) ||
207   - "$$$$$${txt-2783}".equals(cell.cellContent)) {
  200 + if (I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line200").equals(cell.cellContent) ||
  201 + I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line201").equals(cell.cellContent) ||
  202 + I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line202").equals(cell.cellContent) ||
  203 + I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line203").equals(cell.cellContent) ||
  204 + I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line204").equals(cell.cellContent) ||
  205 + I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line205").equals(cell.cellContent) ||
  206 + I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line206").equals(cell.cellContent) ||
  207 + I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line207").equals(cell.cellContent) ||
  208 + I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line208").equals(cell.cellContent)) {
208 209 // 这些列都忽略,不参与计算
209 210 cell.isEnable = false;
210 211 continue;
... ... @@ -212,12 +213,12 @@ public class TimetableExcelDataValidateStrategyImpl implements TimetableExcelDat
212 213 }
213 214  
214 215 // 2-1-3、出场,进场班次,不验证路由
215   - if ("$$$$$${txt-3989}".equals(cell.cellContent)) {
  216 + if (I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line216").equals(cell.cellContent)) {
216 217 cell.isBc = true;
217 218 cell.isOutBc = true;
218 219 continue;
219 220 }
220   - if ("$$$$$${txt-3990}".equals(cell.cellContent)) {
  221 + if (I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line221").equals(cell.cellContent)) {
221 222 cell.isBc = true;
222 223 cell.isInBc = true;
223 224 continue;
... ... @@ -238,9 +239,9 @@ public class TimetableExcelDataValidateStrategyImpl implements TimetableExcelDat
238 239 for (int rowNum = 1; rowNum < rowCount; rowNum ++) {
239 240 TimetableExcelInternalCell cell = internalExcelCells[rowNum][0];
240 241 if (StringUtils.isEmpty(cell.cellContent)) {
241   - throw new ScheduleException(String.format("第%d行,第1列路牌无数据", rowNum + 1));
  242 + throw new ScheduleException(String.format(I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line242"), rowNum + 1));
242 243 } else if (gbIndexMap.get(cell.cellContent) != null) {
243   - throw new ScheduleException(String.format("第%d行,第1列的路牌数据与第%d行,第1列数据重复",
  244 + throw new ScheduleException(String.format(I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line244"),
244 245 rowNum + 1,
245 246 gbIndexMap.get(cell.cellContent)));
246 247 } else {
... ... @@ -267,7 +268,7 @@ public class TimetableExcelDataValidateStrategyImpl implements TimetableExcelDat
267 268 this.validateGsContentCell(rowNum, colNum, cell.cellContent);
268 269 }
269 270 } else {
270   - throw new ScheduleException(String.format("第%d行,第%d列的单元格内容既不是发车时间,也不是工时!",
  271 + throw new ScheduleException(String.format(I18n.getInstance().getMessage("timetableExcelDataValidateStrategyImpl-line271"),
271 272 rowNum + 1, colNum + 1));
272 273 }
273 274 }
... ...
src/main/java/com/bsth/service/schedule/utils/DataToolsProperties.java
... ... @@ -39,6 +39,164 @@ public class DataToolsProperties {
39 39 @NotNull
40 40 private String kettleProperties;
41 41  
  42 + //---------------------------- 时刻表数据相关ktr(以下)----------------------------//
  43 + /** 时刻表数据导出用于编辑(英文) */
  44 + @NotNull
  45 + private String enTtinfoDetailDataExportForEdit;
  46 + /** 时刻表数据导出用于编辑(中文) */
  47 + @NotNull
  48 + private String zhTtinfoDetailDataExportForEdit;
  49 +
  50 + /** 时刻表数据导出用元数据(英文) */
  51 + @NotNull
  52 + private String enTtinfoDetailMetaDataForExport;
  53 + /** 时刻表数据导出(英文) */
  54 + @NotNull
  55 + private String enTtinfoDetailDataExport;
  56 + /** 时刻表数据导出用元数据(中文) */
  57 + @NotNull
  58 + private String zhTtinfoDetailMetaDataForExport;
  59 + /** 时刻表数据导出(中文) */
  60 + @NotNull
  61 + private String zhTtinfoDetailDataExport;
  62 + /** 时刻表数据导入用元数据(英文) */
  63 + @NotNull
  64 + private String enTtinfoDetailMetaDataForImport;
  65 + /** 时刻表数据导入用元数据(中文) */
  66 + @NotNull
  67 + private String zhTtinfoDetailMetaDataForImport;
  68 + /** 时刻表数据导入-动态导入格式(英文) */
  69 + @NotNull
  70 + private String enTtinfoDetailDataImportOfDynamic;
  71 + /** 时刻表数据导入-动态导入格式(中文) */
  72 + @NotNull
  73 + private String zhTtinfoDetailDataImportOfDynamic;
  74 + /** 时刻表数据导入-普通导入格式(英文) */
  75 + @NotNull
  76 + private String enTtinfoDetailDataImportOfNormal;
  77 + /** 时刻表数据导入-普通导入格式(中文) */
  78 + @NotNull
  79 + private String zhTtinfoDetailDataImportOfNormal;
  80 + /** 时刻表数据导入-普通带工时导入格式(英文) */
  81 + @NotNull
  82 + private String enTtinfoDetailDataImportOfNormalWithGs;
  83 + /** 时刻表数据导入-普通带工时导入格式(中文) */
  84 + @NotNull
  85 + private String zhTtinfoDetailDataImportOfNormalWithGs;
  86 +
  87 + public String getEnTtinfoDetailMetaDataForImport() {
  88 + return enTtinfoDetailMetaDataForImport;
  89 + }
  90 +
  91 + public void setEnTtinfoDetailMetaDataForImport(String enTtinfoDetailMetaDataForImport) {
  92 + this.enTtinfoDetailMetaDataForImport = enTtinfoDetailMetaDataForImport;
  93 + }
  94 +
  95 + public String getZhTtinfoDetailMetaDataForImport() {
  96 + return zhTtinfoDetailMetaDataForImport;
  97 + }
  98 +
  99 + public void setZhTtinfoDetailMetaDataForImport(String zhTtinfoDetailMetaDataForImport) {
  100 + this.zhTtinfoDetailMetaDataForImport = zhTtinfoDetailMetaDataForImport;
  101 + }
  102 +
  103 + public String getEnTtinfoDetailDataImportOfDynamic() {
  104 + return enTtinfoDetailDataImportOfDynamic;
  105 + }
  106 +
  107 + public void setEnTtinfoDetailDataImportOfDynamic(String enTtinfoDetailDataImportOfDynamic) {
  108 + this.enTtinfoDetailDataImportOfDynamic = enTtinfoDetailDataImportOfDynamic;
  109 + }
  110 +
  111 + public String getZhTtinfoDetailDataImportOfDynamic() {
  112 + return zhTtinfoDetailDataImportOfDynamic;
  113 + }
  114 +
  115 + public void setZhTtinfoDetailDataImportOfDynamic(String zhTtinfoDetailDataImportOfDynamic) {
  116 + this.zhTtinfoDetailDataImportOfDynamic = zhTtinfoDetailDataImportOfDynamic;
  117 + }
  118 +
  119 + public String getEnTtinfoDetailDataImportOfNormal() {
  120 + return enTtinfoDetailDataImportOfNormal;
  121 + }
  122 +
  123 + public void setEnTtinfoDetailDataImportOfNormal(String enTtinfoDetailDataImportOfNormal) {
  124 + this.enTtinfoDetailDataImportOfNormal = enTtinfoDetailDataImportOfNormal;
  125 + }
  126 +
  127 + public String getZhTtinfoDetailDataImportOfNormal() {
  128 + return zhTtinfoDetailDataImportOfNormal;
  129 + }
  130 +
  131 + public void setZhTtinfoDetailDataImportOfNormal(String zhTtinfoDetailDataImportOfNormal) {
  132 + this.zhTtinfoDetailDataImportOfNormal = zhTtinfoDetailDataImportOfNormal;
  133 + }
  134 +
  135 + public String getEnTtinfoDetailDataImportOfNormalWithGs() {
  136 + return enTtinfoDetailDataImportOfNormalWithGs;
  137 + }
  138 +
  139 + public void setEnTtinfoDetailDataImportOfNormalWithGs(String enTtinfoDetailDataImportOfNormalWithGs) {
  140 + this.enTtinfoDetailDataImportOfNormalWithGs = enTtinfoDetailDataImportOfNormalWithGs;
  141 + }
  142 +
  143 + public String getZhTtinfoDetailDataImportOfNormalWithGs() {
  144 + return zhTtinfoDetailDataImportOfNormalWithGs;
  145 + }
  146 +
  147 + public void setZhTtinfoDetailDataImportOfNormalWithGs(String zhTtinfoDetailDataImportOfNormalWithGs) {
  148 + this.zhTtinfoDetailDataImportOfNormalWithGs = zhTtinfoDetailDataImportOfNormalWithGs;
  149 + }
  150 +
  151 + public String getEnTtinfoDetailMetaDataForExport() {
  152 + return enTtinfoDetailMetaDataForExport;
  153 + }
  154 +
  155 + public void setEnTtinfoDetailMetaDataForExport(String enTtinfoDetailMetaDataForExport) {
  156 + this.enTtinfoDetailMetaDataForExport = enTtinfoDetailMetaDataForExport;
  157 + }
  158 +
  159 + public String getEnTtinfoDetailDataExport() {
  160 + return enTtinfoDetailDataExport;
  161 + }
  162 +
  163 + public void setEnTtinfoDetailDataExport(String enTtinfoDetailDataExport) {
  164 + this.enTtinfoDetailDataExport = enTtinfoDetailDataExport;
  165 + }
  166 +
  167 + public String getZhTtinfoDetailMetaDataForExport() {
  168 + return zhTtinfoDetailMetaDataForExport;
  169 + }
  170 +
  171 + public void setZhTtinfoDetailMetaDataForExport(String zhTtinfoDetailMetaDataForExport) {
  172 + this.zhTtinfoDetailMetaDataForExport = zhTtinfoDetailMetaDataForExport;
  173 + }
  174 +
  175 + public String getZhTtinfoDetailDataExport() {
  176 + return zhTtinfoDetailDataExport;
  177 + }
  178 +
  179 + public void setZhTtinfoDetailDataExport(String zhTtinfoDetailDataExport) {
  180 + this.zhTtinfoDetailDataExport = zhTtinfoDetailDataExport;
  181 + }
  182 +
  183 + public String getEnTtinfoDetailDataExportForEdit() {
  184 + return enTtinfoDetailDataExportForEdit;
  185 + }
  186 +
  187 + public void setEnTtinfoDetailDataExportForEdit(String enTtinfoDetailDataExportForEdit) {
  188 + this.enTtinfoDetailDataExportForEdit = enTtinfoDetailDataExportForEdit;
  189 + }
  190 +
  191 + public String getZhTtinfoDetailDataExportForEdit() {
  192 + return zhTtinfoDetailDataExportForEdit;
  193 + }
  194 +
  195 + public void setZhTtinfoDetailDataExportForEdit(String zhTtinfoDetailDataExportForEdit) {
  196 + this.zhTtinfoDetailDataExportForEdit = zhTtinfoDetailDataExportForEdit;
  197 + }
  198 + //---------------------------- 时刻表数据相关ktr(以上)----------------------------//
  199 +
42 200 //---------------------------- 排班规则数据相关ktr(以下)----------------------------//
43 201 /** 排班规则数据导入(英文)*/
44 202 @NotNull
... ... @@ -133,7 +291,7 @@ public class DataToolsProperties {
133 291 this.zhEmployeeConfigDataExport = zhEmployeeConfigDataExport;
134 292 }
135 293  
136   -//---------------------------- 人员配置数据相关ktr(以上)----------------------------//
  294 + //---------------------------- 人员配置数据相关ktr(以上)----------------------------//
137 295  
138 296 //---------------------------- 车辆配置数据相关ktr(以下)----------------------------//
139 297 /** 车辆配置数据导入(英文)*/
... ... @@ -231,7 +389,6 @@ public class DataToolsProperties {
231 389  
232 390 //---------------------------- 路牌信息相关ktr(以上)----------------------------//
233 391  
234   -
235 392 //---------------------------- 车辆基础数据相关ktr(以下)----------------------------//
236 393 /** 车辆基础信息导入(英文) */
237 394 @NotNull
... ... @@ -328,42 +485,6 @@ public class DataToolsProperties {
328 485  
329 486 //---------------------------- 人员基础数据相关ktr(以上)----------------------------//
330 487  
331   -
332   - //------------------------- 导入数据ktr --------------------------//
333   - /** 时刻表基础信息导入 */
334   - @NotNull
335   - private String ttinfoDatainputktr;
336   - /** 时刻表明细信息导入(元数据) */
337   - @NotNull
338   - private String ttinfodetailMetadatainputktr;
339   - /** 时刻表明细编辑用数据 */
340   - @NotNull
341   - private String ttinfodetailForeditktr;
342   - /** 时刻表明细信息导入 */
343   - @NotNull
344   - private String ttinfodetailDatainputktr;
345   - /** 时刻表明细信息导入2 */
346   - @NotNull
347   - private String ttinfodetailDatainputktr2;
348   - /** 时刻表明细信息导入2(带版本) */
349   - @NotNull
350   - private String ttinfodetailDatainputktr2version;
351   - /** 时刻表明细信息导入2(带版本),使用生成时刻表格式 */
352   - @NotNull
353   - private String ttinfodetailDatainputktr2version2;
354   - /** 时刻表明细信息导入2,一般格式(路牌列后加一列工时列)参看 TimetableExcelFormatType */
355   - @NotNull
356   - private String ttinfodetailDatainputktr2normalwithgs;
357   -
358   -
359   - //------------------------- 导出数据ktr --------------------------//
360   - /** 时刻表导出元数据ktr转换 */
361   - @NotNull
362   - private String ttinfodetailMetaoutput;
363   - /** 时刻表导出数据ktr转换 */
364   - @NotNull
365   - private String ttinfodetailOutput;
366   -
367 488 //------------------------ 数据同步ktr -----------------------//
368 489 @NotNull
369 490 /** 车辆信息同步 */
... ... @@ -390,26 +511,6 @@ public class DataToolsProperties {
390 511 this.transErrordir = transErrordir;
391 512 }
392 513  
393   - public String getTtinfodetailMetadatainputktr() {
394   - return ttinfodetailMetadatainputktr;
395   - }
396   -
397   - public void setTtinfodetailMetadatainputktr(String ttinfodetailMetadatainputktr) {
398   - this.ttinfodetailMetadatainputktr = ttinfodetailMetadatainputktr;
399   - }
400   -
401   - public void setTtinfoDatainputktr(String ttinfoDatainputktr) {
402   - this.ttinfoDatainputktr = ttinfoDatainputktr;
403   - }
404   -
405   - public String getTtinfodetailDatainputktr() {
406   - return ttinfodetailDatainputktr;
407   - }
408   -
409   - public void setTtinfodetailDatainputktr(String ttinfodetailDatainputktr) {
410   - this.ttinfodetailDatainputktr = ttinfodetailDatainputktr;
411   - }
412   -
413 514 public String getKettleProperties() {
414 515 return kettleProperties;
415 516 }
... ... @@ -426,14 +527,6 @@ public class DataToolsProperties {
426 527 this.transTempdir = transTempdir;
427 528 }
428 529  
429   - public String getTtinfodetailForeditktr() {
430   - return ttinfodetailForeditktr;
431   - }
432   -
433   - public void setTtinfodetailForeditktr(String ttinfodetailForeditktr) {
434   - this.ttinfodetailForeditktr = ttinfodetailForeditktr;
435   - }
436   -
437 530 public String getFileoutputDir() {
438 531 return fileoutputDir;
439 532 }
... ... @@ -442,38 +535,6 @@ public class DataToolsProperties {
442 535 this.fileoutputDir = fileoutputDir;
443 536 }
444 537  
445   - public String getTtinfodetailMetaoutput() {
446   - return ttinfodetailMetaoutput;
447   - }
448   -
449   - public void setTtinfodetailMetaoutput(String ttinfodetailMetaoutput) {
450   - this.ttinfodetailMetaoutput = ttinfodetailMetaoutput;
451   - }
452   -
453   - public String getTtinfodetailOutput() {
454   - return ttinfodetailOutput;
455   - }
456   -
457   - public void setTtinfodetailOutput(String ttinfodetailOutput) {
458   - this.ttinfodetailOutput = ttinfodetailOutput;
459   - }
460   -
461   - public String getTtinfodetailDatainputktr2version() {
462   - return ttinfodetailDatainputktr2version;
463   - }
464   -
465   - public void setTtinfodetailDatainputktr2version(String ttinfodetailDatainputktr2version) {
466   - this.ttinfodetailDatainputktr2version = ttinfodetailDatainputktr2version;
467   - }
468   -
469   - public String getTtinfodetailDatainputktr2() {
470   - return ttinfodetailDatainputktr2;
471   - }
472   -
473   - public void setTtinfodetailDatainputktr2(String ttinfodetailDatainputktr2) {
474   - this.ttinfodetailDatainputktr2 = ttinfodetailDatainputktr2;
475   - }
476   -
477 538 public String getTransTemplatedir() {
478 539 return transTemplatedir;
479 540 }
... ... @@ -482,22 +543,6 @@ public class DataToolsProperties {
482 543 this.transTemplatedir = transTemplatedir;
483 544 }
484 545  
485   - public String getTtinfodetailDatainputktr2version2() {
486   - return ttinfodetailDatainputktr2version2;
487   - }
488   -
489   - public void setTtinfodetailDatainputktr2version2(String ttinfodetailDatainputktr2version2) {
490   - this.ttinfodetailDatainputktr2version2 = ttinfodetailDatainputktr2version2;
491   - }
492   -
493   - public String getTtinfodetailDatainputktr2normalwithgs() {
494   - return ttinfodetailDatainputktr2normalwithgs;
495   - }
496   -
497   - public void setTtinfodetailDatainputktr2normalwithgs(String ttinfodetailDatainputktr2normalwithgs) {
498   - this.ttinfodetailDatainputktr2normalwithgs = ttinfodetailDatainputktr2normalwithgs;
499   - }
500   -
501 546 public String getVehicleDatasyncktr() {
502 547 return vehicleDatasyncktr;
503 548 }
... ...
src/main/resources/datatools/config-cloud.properties
... ... @@ -17,6 +17,22 @@ datatools.trans_templatedir=/home/bsth_control_u_d_files/template
17 17 # 导出数据文件目录配置(根据不同的环境需要修正)
18 18 datatools.fileoutput_dir=/home/bsth_control_u_d_files
19 19  
  20 +##---------------------------- 时刻表数据相关ktr(以下)----------------------------##
  21 +datatools.en_ttinfo_detail_meta_data_for_export=/datatools/ktrs/en/ttinfo-detail-metadata_for_export.ktr
  22 +datatools.en_ttinfo_detail_data_export=/datatools/ktrs/en/ttinfo-detail-data_export.ktr
  23 +datatools.zh_ttinfo_detail_meta_data_for_export=/datatools/ktrs/zh/ttinfo-detail-metadata_for_export.ktr
  24 +datatools.zh_ttinfo_detail_data_export=/datatools/ktrs/zh/ttinfo-detail-data_export.ktr
  25 +datatools.en_ttinfo_detail_data_export_for_edit=/datatools/ktrs/en/ttinfo-detail-data_export_for_edit.ktr
  26 +datatools.zh_ttinfo_detail_data_export_for_edit=/datatools/ktrs/zh/ttinfo-detail-data_export_for_edit.ktr
  27 +datatools.en_ttinfo_detail_meta_data_for_import=/datatools/ktrs/en/ttinfo-detail-metadata_for_import.ktr
  28 +datatools.zh_ttinfo_detail_meta_data_for_import=/datatools/ktrs/zh/ttinfo-detail-metadata_for_import.ktr
  29 +datatools.en_ttinfo_detail_data_import_of_dynamic=/datatools/ktrs/en/ttinfo-detail-data_import_of_dynamic.ktr
  30 +datatools.zh_ttinfo_detail_data_import_of_dynamic=/datatools/ktrs/zh/ttinfo-detail-data_import_of_dynamic.ktr
  31 +datatools.en_ttinfo_detail_data_import_of_normal=/datatools/ktrs/en/ttinfo-detail-data_import_of_normal.ktr
  32 +datatools.zh_ttinfo_detail_data_import_of_normal=/datatools/ktrs/zh/ttinfo-detail-data_import_of_normal.ktr
  33 +datatools.en_ttinfo_detail_data_import_of_normal_with_gs=/datatools/ktrs/en/ttinfo-detail-data_import_of_normalWithGs.ktr
  34 +datatools.zh_ttinfo_detail_data_import_of_normal_with_gs=/datatools/ktrs/zh/ttinfo-detail-data_import_of_normalWithGs.ktr
  35 +##---------------------------- 时刻表数据相关ktr(以下)----------------------------##
20 36  
21 37 ##---------------------------- 车辆基础数据相关ktr(以下)----------------------------##
22 38 datatools.en_vehicle_basic_data_import=/datatools/ktrs/en/vehicle-basic-data_import.ktr
... ... @@ -60,32 +76,6 @@ datatools.zh_schedule_rule_data_import=/datatools/ktrs/zh/schedule-rule-data_imp
60 76 datatools.zh_schedule_rule_data_export=/datatools/ktrs/zh/schedule-rule-data_export.ktr
61 77 ##---------------------------- 排班规则数据相关ktr(以上)----------------------------##
62 78  
63   -
64   -##---------------------------- 导入数据ktr ----------------------------##
65   -# 时刻表基础信息导入
66   -datatools.ttinfo_datainputktr=/datatools/ktrs/ttinfoDataInput.ktr
67   -# 时刻表明细信息导入(元数据)
68   -datatools.ttinfodetail_metadatainputktr=/datatools/ktrs/ttinfodetailDataInputMetaData.ktr
69   -# 时刻表明细编辑用数据
70   -datatools.ttinfodetail_foreditktr=/datatools/ktrs/ttinfodetailoutputforedit.ktr
71   -# 时刻表明细信息导入
72   -datatools.ttinfodetail_datainputktr=/datatools/ktrs/ttinfodetailDataInput.ktr
73   -# 时刻表明细信息导入2
74   -datatools.ttinfodetail_datainputktr2=/datatools/ktrs/ttinfodetailDataInput2.ktr
75   -# 时刻表明细信息导入2(版本化)
76   -datatools.ttinfodetail_datainputktr2version=/datatools/ktrs/ttinfodetailDataInput2_version.ktr
77   -# 时刻表明细信息导入2(版本化),使用生成时刻表格式
78   -datatools.ttinfodetail_datainputktr2version2=/datatools/ktrs/ttinfodetailDataInput2_version_2.ktr
79   -# 时刻表明细信息导入2,一般格式(路牌列后加一列工时列)
80   -datatools.ttinfodetail_datainputktr2normalwithgs=/datatools/ktrs/ttinfodetailDataInput2_normalwithgs.ktr
81   -
82   -
83   -##---------------------------- 导出数据ktr -----------------------------##
84   -# 时刻表导出元数据ktr转换
85   -datatools.ttinfodetail_metaoutput=/datatools/ktrs/ttinfodetailDataOutputMetaData.ktr
86   -# 时刻表导出数据ktr转换
87   -datatools.ttinfodetail_output=/datatools/ktrs/ttinfodetailDataOutput.ktr
88   -
89 79 ##--------------------------- 数据同步ktr ------------------------##
90 80 datatools.vehicle_datasyncktr=/datatools/ktrs/vehicleDataSync.ktr
91 81  
... ...
src/main/resources/datatools/config-dev.properties
... ... @@ -17,6 +17,23 @@ datatools.trans_templatedir=/Users/xu/resource/project_code/runtime_temp/bsth_co
17 17 # 导出数据文件目录配置(根据不同的环境需要修正)
18 18 datatools.fileoutput_dir=/Users/xu/resource/project_code/runtime_temp/bsth_control_u_d_files
19 19  
  20 +##---------------------------- 时刻表数据相关ktr(以下)----------------------------##
  21 +datatools.en_ttinfo_detail_meta_data_for_export=/datatools/ktrs/en/ttinfo-detail-metadata_for_export.ktr
  22 +datatools.en_ttinfo_detail_data_export=/datatools/ktrs/en/ttinfo-detail-data_export.ktr
  23 +datatools.zh_ttinfo_detail_meta_data_for_export=/datatools/ktrs/zh/ttinfo-detail-metadata_for_export.ktr
  24 +datatools.zh_ttinfo_detail_data_export=/datatools/ktrs/zh/ttinfo-detail-data_export.ktr
  25 +datatools.en_ttinfo_detail_data_export_for_edit=/datatools/ktrs/en/ttinfo-detail-data_export_for_edit.ktr
  26 +datatools.zh_ttinfo_detail_data_export_for_edit=/datatools/ktrs/zh/ttinfo-detail-data_export_for_edit.ktr
  27 +datatools.en_ttinfo_detail_meta_data_for_import=/datatools/ktrs/en/ttinfo-detail-metadata_for_import.ktr
  28 +datatools.zh_ttinfo_detail_meta_data_for_import=/datatools/ktrs/zh/ttinfo-detail-metadata_for_import.ktr
  29 +datatools.en_ttinfo_detail_data_import_of_dynamic=/datatools/ktrs/en/ttinfo-detail-data_import_of_dynamic.ktr
  30 +datatools.zh_ttinfo_detail_data_import_of_dynamic=/datatools/ktrs/zh/ttinfo-detail-data_import_of_dynamic.ktr
  31 +datatools.en_ttinfo_detail_data_import_of_normal=/datatools/ktrs/en/ttinfo-detail-data_import_of_normal.ktr
  32 +datatools.zh_ttinfo_detail_data_import_of_normal=/datatools/ktrs/zh/ttinfo-detail-data_import_of_normal.ktr
  33 +datatools.en_ttinfo_detail_data_import_of_normal_with_gs=/datatools/ktrs/en/ttinfo-detail-data_import_of_normalWithGs.ktr
  34 +datatools.zh_ttinfo_detail_data_import_of_normal_with_gs=/datatools/ktrs/zh/ttinfo-detail-data_import_of_normalWithGs.ktr
  35 +##---------------------------- 时刻表数据相关ktr(以下)----------------------------##
  36 +
20 37 ##---------------------------- 车辆基础数据相关ktr(以下)----------------------------##
21 38 datatools.en_vehicle_basic_data_import=/datatools/ktrs/en/vehicle-basic-data_import.ktr
22 39 datatools.en_vehicle_basic_data_export=/datatools/ktrs/en/vehicle-basic-data_export.ktr
... ... @@ -59,32 +76,6 @@ datatools.zh_schedule_rule_data_import=/datatools/ktrs/zh/schedule-rule-data_imp
59 76 datatools.zh_schedule_rule_data_export=/datatools/ktrs/zh/schedule-rule-data_export.ktr
60 77 ##---------------------------- 排班规则数据相关ktr(以上)----------------------------##
61 78  
62   -
63   -##---------------------------- 导入数据ktr ----------------------------##
64   -# 时刻表基础信息导入
65   -datatools.ttinfo_datainputktr=/datatools/ktrs/ttinfoDataInput.ktr
66   -# 时刻表明细信息导入(元数据)
67   -datatools.ttinfodetail_metadatainputktr=/datatools/ktrs/ttinfodetailDataInputMetaData.ktr
68   -# 时刻表明细编辑用数据
69   -datatools.ttinfodetail_foreditktr=/datatools/ktrs/ttinfodetailoutputforedit.ktr
70   -# 时刻表明细信息导入
71   -datatools.ttinfodetail_datainputktr=/datatools/ktrs/ttinfodetailDataInput.ktr
72   -# 时刻表明细信息导入2
73   -datatools.ttinfodetail_datainputktr2=/datatools/ktrs/ttinfodetailDataInput2.ktr
74   -# 时刻表明细信息导入2(版本化)
75   -datatools.ttinfodetail_datainputktr2version=/datatools/ktrs/ttinfodetailDataInput2_version.ktr
76   -# 时刻表明细信息导入2(版本化),使用生成时刻表格式
77   -datatools.ttinfodetail_datainputktr2version2=/datatools/ktrs/ttinfodetailDataInput2_version_2.ktr
78   -# 时刻表明细信息导入2,一般格式(路牌列后加一列工时列)
79   -datatools.ttinfodetail_datainputktr2normalwithgs=/datatools/ktrs/ttinfodetailDataInput2_normalwithgs.ktr
80   -
81   -##---------------------------- 导出数据ktr -----------------------------##
82   -# 时刻表导出元数据ktr转换
83   -datatools.ttinfodetail_metaoutput=/datatools/ktrs/ttinfodetailDataOutputMetaData.ktr
84   -# 时刻表导出数据ktr转换
85   -datatools.ttinfodetail_output=/datatools/ktrs/ttinfodetailDataOutput.ktr
86   -
87   -
88 79 ##--------------------------- 数据同步ktr ------------------------##
89 80 datatools.vehicle_datasyncktr=/datatools/ktrs/vehicleDataSync.ktr
90 81  
... ...
src/main/resources/datatools/config-prod.properties
... ... @@ -17,6 +17,22 @@ datatools.trans_templatedir=/home/bsth_control_u_d_files/template
17 17 # 导出数据文件目录配置(根据不同的环境需要修正)
18 18 datatools.fileoutput_dir=/home/bsth_control_u_d_files
19 19  
  20 +##---------------------------- 时刻表数据相关ktr(以下)----------------------------##
  21 +datatools.en_ttinfo_detail_meta_data_for_export=/datatools/ktrs/en/ttinfo-detail-metadata_for_export.ktr
  22 +datatools.en_ttinfo_detail_data_export=/datatools/ktrs/en/ttinfo-detail-data_export.ktr
  23 +datatools.zh_ttinfo_detail_meta_data_for_export=/datatools/ktrs/zh/ttinfo-detail-metadata_for_export.ktr
  24 +datatools.zh_ttinfo_detail_data_export=/datatools/ktrs/zh/ttinfo-detail-data_export.ktr
  25 +datatools.en_ttinfo_detail_data_export_for_edit=/datatools/ktrs/en/ttinfo-detail-data_export_for_edit.ktr
  26 +datatools.zh_ttinfo_detail_data_export_for_edit=/datatools/ktrs/zh/ttinfo-detail-data_export_for_edit.ktr
  27 +datatools.en_ttinfo_detail_meta_data_for_import=/datatools/ktrs/en/ttinfo-detail-metadata_for_import.ktr
  28 +datatools.zh_ttinfo_detail_meta_data_for_import=/datatools/ktrs/zh/ttinfo-detail-metadata_for_import.ktr
  29 +datatools.en_ttinfo_detail_data_import_of_dynamic=/datatools/ktrs/en/ttinfo-detail-data_import_of_dynamic.ktr
  30 +datatools.zh_ttinfo_detail_data_import_of_dynamic=/datatools/ktrs/zh/ttinfo-detail-data_import_of_dynamic.ktr
  31 +datatools.en_ttinfo_detail_data_import_of_normal=/datatools/ktrs/en/ttinfo-detail-data_import_of_normal.ktr
  32 +datatools.zh_ttinfo_detail_data_import_of_normal=/datatools/ktrs/zh/ttinfo-detail-data_import_of_normal.ktr
  33 +datatools.en_ttinfo_detail_data_import_of_normal_with_gs=/datatools/ktrs/en/ttinfo-detail-data_import_of_normalWithGs.ktr
  34 +datatools.zh_ttinfo_detail_data_import_of_normal_with_gs=/datatools/ktrs/zh/ttinfo-detail-data_import_of_normalWithGs.ktr
  35 +##---------------------------- 时刻表数据相关ktr(以下)----------------------------##
20 36  
21 37 ##---------------------------- 车辆基础数据相关ktr(以下)----------------------------##
22 38 datatools.en_vehicle_basic_data_import=/datatools/ktrs/en/vehicle-basic-data_import.ktr
... ... @@ -60,32 +76,6 @@ datatools.zh_schedule_rule_data_import=/datatools/ktrs/zh/schedule-rule-data_imp
60 76 datatools.zh_schedule_rule_data_export=/datatools/ktrs/zh/schedule-rule-data_export.ktr
61 77 ##---------------------------- 排班规则数据相关ktr(以上)----------------------------##
62 78  
63   -
64   -##---------------------------- 导入数据ktr ----------------------------##
65   -# 时刻表基础信息导入
66   -datatools.ttinfo_datainputktr=/datatools/ktrs/ttinfoDataInput.ktr
67   -# 时刻表明细信息导入(元数据)
68   -datatools.ttinfodetail_metadatainputktr=/datatools/ktrs/ttinfodetailDataInputMetaData.ktr
69   -# 时刻表明细编辑用数据
70   -datatools.ttinfodetail_foreditktr=/datatools/ktrs/ttinfodetailoutputforedit.ktr
71   -# 时刻表明细信息导入
72   -datatools.ttinfodetail_datainputktr=/datatools/ktrs/ttinfodetailDataInput.ktr
73   -# 时刻表明细信息导入2
74   -datatools.ttinfodetail_datainputktr2=/datatools/ktrs/ttinfodetailDataInput2.ktr
75   -# 时刻表明细信息导入2(版本化)
76   -datatools.ttinfodetail_datainputktr2version=/datatools/ktrs/ttinfodetailDataInput2_version.ktr
77   -# 时刻表明细信息导入2(版本化),使用生成时刻表格式
78   -datatools.ttinfodetail_datainputktr2version2=/datatools/ktrs/ttinfodetailDataInput2_version_2.ktr
79   -# 时刻表明细信息导入2,一般格式(路牌列后加一列工时列)
80   -datatools.ttinfodetail_datainputktr2normalwithgs=/datatools/ktrs/ttinfodetailDataInput2_normalwithgs.ktr
81   -
82   -
83   -##---------------------------- 导出数据ktr -----------------------------##
84   -# 时刻表导出元数据ktr转换
85   -datatools.ttinfodetail_metaoutput=/datatools/ktrs/ttinfodetailDataOutputMetaData.ktr
86   -# 时刻表导出数据ktr转换
87   -datatools.ttinfodetail_output=/datatools/ktrs/ttinfodetailDataOutput.ktr
88   -
89 79 ##--------------------------- 数据同步ktr ------------------------##
90 80 datatools.vehicle_datasyncktr=/datatools/ktrs/vehicleDataSync.ktr
91 81  
... ...
src/main/resources/datatools/config-test.properties
... ... @@ -17,7 +17,22 @@ datatools.trans_templatedir=/Users/xu/resource/project_code/runtime_temp/bsth_co
17 17 # 导出数据文件目录配置(根据不同的环境需要修正)
18 18 datatools.fileoutput_dir=/Users/xu/resource/project_code/runtime_temp/bsth_control_u_d_files
19 19  
20   -
  20 +##---------------------------- 时刻表数据相关ktr(以下)----------------------------##
  21 +datatools.en_ttinfo_detail_meta_data_for_export=/datatools/ktrs/en/ttinfo-detail-metadata_for_export.ktr
  22 +datatools.en_ttinfo_detail_data_export=/datatools/ktrs/en/ttinfo-detail-data_export.ktr
  23 +datatools.zh_ttinfo_detail_meta_data_for_export=/datatools/ktrs/zh/ttinfo-detail-metadata_for_export.ktr
  24 +datatools.zh_ttinfo_detail_data_export=/datatools/ktrs/zh/ttinfo-detail-data_export.ktr
  25 +datatools.en_ttinfo_detail_data_export_for_edit=/datatools/ktrs/en/ttinfo-detail-data_export_for_edit.ktr
  26 +datatools.zh_ttinfo_detail_data_export_for_edit=/datatools/ktrs/zh/ttinfo-detail-data_export_for_edit.ktr
  27 +datatools.en_ttinfo_detail_meta_data_for_import=/datatools/ktrs/en/ttinfo-detail-metadata_for_import.ktr
  28 +datatools.zh_ttinfo_detail_meta_data_for_import=/datatools/ktrs/zh/ttinfo-detail-metadata_for_import.ktr
  29 +datatools.en_ttinfo_detail_data_import_of_dynamic=/datatools/ktrs/en/ttinfo-detail-data_import_of_dynamic.ktr
  30 +datatools.zh_ttinfo_detail_data_import_of_dynamic=/datatools/ktrs/zh/ttinfo-detail-data_import_of_dynamic.ktr
  31 +datatools.en_ttinfo_detail_data_import_of_normal=/datatools/ktrs/en/ttinfo-detail-data_import_of_normal.ktr
  32 +datatools.zh_ttinfo_detail_data_import_of_normal=/datatools/ktrs/zh/ttinfo-detail-data_import_of_normal.ktr
  33 +datatools.en_ttinfo_detail_data_import_of_normal_with_gs=/datatools/ktrs/en/ttinfo-detail-data_import_of_normalWithGs.ktr
  34 +datatools.zh_ttinfo_detail_data_import_of_normal_with_gs=/datatools/ktrs/zh/ttinfo-detail-data_import_of_normalWithGs.ktr
  35 +##---------------------------- 时刻表数据相关ktr(以下)----------------------------##
21 36  
22 37 ##---------------------------- 车辆基础数据相关ktr(以下)----------------------------##
23 38 datatools.en_vehicle_basic_data_import=/datatools/ktrs/en/vehicle-basic-data_import.ktr
... ... @@ -62,30 +77,6 @@ datatools.zh_schedule_rule_data_export=/datatools/ktrs/zh/schedule-rule-data_exp
62 77 ##---------------------------- 排班规则数据相关ktr(以上)----------------------------##
63 78  
64 79  
65   -##---------------------------- 导入数据ktr ----------------------------##
66   -# 时刻表基础信息导入
67   -datatools.ttinfo_datainputktr=/datatools/ktrs/ttinfoDataInput.ktr
68   -# 时刻表明细信息导入(元数据)
69   -datatools.ttinfodetail_metadatainputktr=/datatools/ktrs/ttinfodetailDataInputMetaData.ktr
70   -# 时刻表明细编辑用数据
71   -datatools.ttinfodetail_foreditktr=/datatools/ktrs/ttinfodetailoutputforedit.ktr
72   -# 时刻表明细信息导入
73   -datatools.ttinfodetail_datainputktr=/datatools/ktrs/ttinfodetailDataInput.ktr
74   -# 时刻表明细信息导入2
75   -datatools.ttinfodetail_datainputktr2=/datatools/ktrs/ttinfodetailDataInput2.ktr
76   -# 时刻表明细信息导入2(版本化)
77   -datatools.ttinfodetail_datainputktr2version=/datatools/ktrs/ttinfodetailDataInput2_version.ktr
78   -# 时刻表明细信息导入2(版本化),使用生成时刻表格式
79   -datatools.ttinfodetail_datainputktr2version2=/datatools/ktrs/ttinfodetailDataInput2_version_2.ktr
80   -# 时刻表明细信息导入2,一般格式(路牌列后加一列工时列)
81   -datatools.ttinfodetail_datainputktr2normalwithgs=/datatools/ktrs/ttinfodetailDataInput2_normalwithgs.ktr
82   -
83   -##---------------------------- 导出数据ktr -----------------------------##
84   -# 时刻表导出元数据ktr转换
85   -datatools.ttinfodetail_metaoutput=/datatools/ktrs/ttinfodetailDataOutputMetaData.ktr
86   -# 时刻表导出数据ktr转换
87   -datatools.ttinfodetail_output=/datatools/ktrs/ttinfodetailDataOutput.ktr
88   -
89 80 ##--------------------------- 数据同步ktr ------------------------##
90 81 datatools.vehicle_datasyncktr=/datatools/ktrs/vehicleDataSync.ktr
91 82  
... ...
src/main/resources/datatools/ktrs/en/ttinfo-detail-data_export.ktr 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<transformation>
  3 + <info>
  4 + <name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x5bfc;&#x51fa;_en</name>
  5 + <description/>
  6 + <extended_description/>
  7 + <trans_version/>
  8 + <trans_type>Normal</trans_type>
  9 + <trans_status>0</trans_status>
  10 + <directory>&#x2f;</directory>
  11 + <parameters>
  12 + </parameters>
  13 + <log>
  14 +<trans-log-table><connection/>
  15 +<schema/>
  16 +<table/>
  17 +<size_limit_lines/>
  18 +<interval/>
  19 +<timeout_days/>
  20 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STATUS</id><enabled>Y</enabled><name>STATUS</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name><subject/></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name><subject/></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name><subject/></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name><subject/></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name><subject/></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name><subject/></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>STARTDATE</id><enabled>Y</enabled><name>STARTDATE</name></field><field><id>ENDDATE</id><enabled>Y</enabled><name>ENDDATE</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>DEPDATE</id><enabled>Y</enabled><name>DEPDATE</name></field><field><id>REPLAYDATE</id><enabled>Y</enabled><name>REPLAYDATE</name></field><field><id>LOG_FIELD</id><enabled>Y</enabled><name>LOG_FIELD</name></field><field><id>EXECUTING_SERVER</id><enabled>N</enabled><name>EXECUTING_SERVER</name></field><field><id>EXECUTING_USER</id><enabled>N</enabled><name>EXECUTING_USER</name></field><field><id>CLIENT</id><enabled>N</enabled><name>CLIENT</name></field></trans-log-table>
  21 +<perf-log-table><connection/>
  22 +<schema/>
  23 +<table/>
  24 +<interval/>
  25 +<timeout_days/>
  26 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>SEQ_NR</id><enabled>Y</enabled><name>SEQ_NR</name></field><field><id>LOGDATE</id><enabled>Y</enabled><name>LOGDATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>INPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>INPUT_BUFFER_ROWS</name></field><field><id>OUTPUT_BUFFER_ROWS</id><enabled>Y</enabled><name>OUTPUT_BUFFER_ROWS</name></field></perf-log-table>
  27 +<channel-log-table><connection/>
  28 +<schema/>
  29 +<table/>
  30 +<timeout_days/>
  31 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>LOGGING_OBJECT_TYPE</id><enabled>Y</enabled><name>LOGGING_OBJECT_TYPE</name></field><field><id>OBJECT_NAME</id><enabled>Y</enabled><name>OBJECT_NAME</name></field><field><id>OBJECT_COPY</id><enabled>Y</enabled><name>OBJECT_COPY</name></field><field><id>REPOSITORY_DIRECTORY</id><enabled>Y</enabled><name>REPOSITORY_DIRECTORY</name></field><field><id>FILENAME</id><enabled>Y</enabled><name>FILENAME</name></field><field><id>OBJECT_ID</id><enabled>Y</enabled><name>OBJECT_ID</name></field><field><id>OBJECT_REVISION</id><enabled>Y</enabled><name>OBJECT_REVISION</name></field><field><id>PARENT_CHANNEL_ID</id><enabled>Y</enabled><name>PARENT_CHANNEL_ID</name></field><field><id>ROOT_CHANNEL_ID</id><enabled>Y</enabled><name>ROOT_CHANNEL_ID</name></field></channel-log-table>
  32 +<step-log-table><connection/>
  33 +<schema/>
  34 +<table/>
  35 +<timeout_days/>
  36 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>TRANSNAME</id><enabled>Y</enabled><name>TRANSNAME</name></field><field><id>STEPNAME</id><enabled>Y</enabled><name>STEPNAME</name></field><field><id>STEP_COPY</id><enabled>Y</enabled><name>STEP_COPY</name></field><field><id>LINES_READ</id><enabled>Y</enabled><name>LINES_READ</name></field><field><id>LINES_WRITTEN</id><enabled>Y</enabled><name>LINES_WRITTEN</name></field><field><id>LINES_UPDATED</id><enabled>Y</enabled><name>LINES_UPDATED</name></field><field><id>LINES_INPUT</id><enabled>Y</enabled><name>LINES_INPUT</name></field><field><id>LINES_OUTPUT</id><enabled>Y</enabled><name>LINES_OUTPUT</name></field><field><id>LINES_REJECTED</id><enabled>Y</enabled><name>LINES_REJECTED</name></field><field><id>ERRORS</id><enabled>Y</enabled><name>ERRORS</name></field><field><id>LOG_FIELD</id><enabled>N</enabled><name>LOG_FIELD</name></field></step-log-table>
  37 +<metrics-log-table><connection/>
  38 +<schema/>
  39 +<table/>
  40 +<timeout_days/>
  41 +<field><id>ID_BATCH</id><enabled>Y</enabled><name>ID_BATCH</name></field><field><id>CHANNEL_ID</id><enabled>Y</enabled><name>CHANNEL_ID</name></field><field><id>LOG_DATE</id><enabled>Y</enabled><name>LOG_DATE</name></field><field><id>METRICS_DATE</id><enabled>Y</enabled><name>METRICS_DATE</name></field><field><id>METRICS_CODE</id><enabled>Y</enabled><name>METRICS_CODE</name></field><field><id>METRICS_DESCRIPTION</id><enabled>Y</enabled><name>METRICS_DESCRIPTION</name></field><field><id>METRICS_SUBJECT</id><enabled>Y</enabled><name>METRICS_SUBJECT</name></field><field><id>METRICS_TYPE</id><enabled>Y</enabled><name>METRICS_TYPE</name></field><field><id>METRICS_VALUE</id><enabled>Y</enabled><name>METRICS_VALUE</name></field></metrics-log-table>
  42 + </log>
  43 + <maxdate>
  44 + <connection/>
  45 + <table/>
  46 + <field/>
  47 + <offset>0.0</offset>
  48 + <maxdiff>0.0</maxdiff>
  49 + </maxdate>
  50 + <size_rowset>10000</size_rowset>
  51 + <sleep_time_empty>50</sleep_time_empty>
  52 + <sleep_time_full>50</sleep_time_full>
  53 + <unique_connections>N</unique_connections>
  54 + <feedback_shown>Y</feedback_shown>
  55 + <feedback_size>50000</feedback_size>
  56 + <using_thread_priorities>Y</using_thread_priorities>
  57 + <shared_objects_file/>
  58 + <capture_step_performance>N</capture_step_performance>
  59 + <step_performance_capturing_delay>1000</step_performance_capturing_delay>
  60 + <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
  61 + <dependencies>
  62 + </dependencies>
  63 + <partitionschemas>
  64 + </partitionschemas>
  65 + <slaveservers>
  66 + </slaveservers>
  67 + <clusterschemas>
  68 + </clusterschemas>
  69 + <created_user>-</created_user>
  70 + <created_date>2016&#x2f;11&#x2f;15 13&#x3a;00&#x3a;52.076</created_date>
  71 + <modified_user>-</modified_user>
  72 + <modified_date>2016&#x2f;11&#x2f;15 13&#x3a;00&#x3a;52.076</modified_date>
  73 + <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA&#x3d;</key_for_session_key>
  74 + <is_key_private>N</is_key_private>
  75 + </info>
  76 + <notepads>
  77 + <notepad>
  78 + <note>&#x8fd9;&#x91cc;&#x6709;&#x4e9b;&#x95ee;&#x9898;&#xa;&#x5728;window2012&#x7684;&#x73af;&#x5883;&#x4e0b;&#xff0c;&#xa;MySql&#x6570;&#x636e;&#x5e93;&#x67e5;&#x8be2;&#x4e2d;&#x5982;&#x679c;&#x8fd4;&#x56de;&#x4e2d;&#x6587;&#x5185;&#x5bb9;&#x7684;&#x5b57;&#x6bb5;&#xff0c;&#x8fd9;&#x4e2a;&#x5185;&#x5bb9;&#x4e71;&#x7801;&#xa;&#x89e3;&#x51b3;&#x529e;&#x6cd5;&#xff0c;&#x5c31;&#x662f;&#x6570;&#x636e;&#x5e93;&#x67e5;&#x8be2;&#x5168;&#x90e8;&#x7f13;&#x5b58;&#xff0c;&#x5c31;&#x4e0d;&#x4e71;&#x7801;&#xa;linux&#x73af;&#x5883;&#x4e0b;&#x6ca1;&#x95ee;&#x9898;</note>
  79 + <xloc>114</xloc>
  80 + <yloc>227</yloc>
  81 + <width>333</width>
  82 + <heigth>90</heigth>
  83 + <fontname>YaHei Consolas Hybrid</fontname>
  84 + <fontsize>12</fontsize>
  85 + <fontbold>N</fontbold>
  86 + <fontitalic>N</fontitalic>
  87 + <fontcolorred>0</fontcolorred>
  88 + <fontcolorgreen>0</fontcolorgreen>
  89 + <fontcolorblue>0</fontcolorblue>
  90 + <backgroundcolorred>255</backgroundcolorred>
  91 + <backgroundcolorgreen>205</backgroundcolorgreen>
  92 + <backgroundcolorblue>112</backgroundcolorblue>
  93 + <bordercolorred>100</bordercolorred>
  94 + <bordercolorgreen>100</bordercolorgreen>
  95 + <bordercolorblue>100</bordercolorblue>
  96 + <drawshadow>Y</drawshadow>
  97 + </notepad>
  98 + </notepads>
  99 + <connection>
  100 + <name>192.168.168.1_jwgl_dw</name>
  101 + <server>192.168.168.1</server>
  102 + <type>ORACLE</type>
  103 + <access>Native</access>
  104 + <database>orcl</database>
  105 + <port>1521</port>
  106 + <username>jwgl_dw</username>
  107 + <password>Encrypted 2be98afc86aa7f2e4cb13b977d2adabcd</password>
  108 + <servername/>
  109 + <data_tablespace/>
  110 + <index_tablespace/>
  111 + <attributes>
  112 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  113 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  114 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  115 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  116 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  117 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  118 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  119 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  120 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  121 + </attributes>
  122 + </connection>
  123 + <connection>
  124 + <name>bus_control_variable</name>
  125 + <server>&#x24;&#x7b;v_db_ip&#x7d;</server>
  126 + <type>MYSQL</type>
  127 + <access>Native</access>
  128 + <database>&#x24;&#x7b;v_db_dname&#x7d;</database>
  129 + <port>3306</port>
  130 + <username>&#x24;&#x7b;v_db_uname&#x7d;</username>
  131 + <password>&#x24;&#x7b;v_db_pwd&#x7d;</password>
  132 + <servername/>
  133 + <data_tablespace/>
  134 + <index_tablespace/>
  135 + <attributes>
  136 + <attribute><code>EXTRA_OPTION_MYSQL.characterEncoding</code><attribute>utf8</attribute></attribute>
  137 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  138 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  139 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  140 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  141 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  142 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  143 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  144 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  145 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  146 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  147 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  148 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  149 + </attributes>
  150 + </connection>
  151 + <connection>
  152 + <name>bus_control_&#x516c;&#x53f8;_201</name>
  153 + <server>localhost</server>
  154 + <type>MYSQL</type>
  155 + <access>Native</access>
  156 + <database>control</database>
  157 + <port>3306</port>
  158 + <username>root</username>
  159 + <password>Encrypted </password>
  160 + <servername/>
  161 + <data_tablespace/>
  162 + <index_tablespace/>
  163 + <attributes>
  164 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  165 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  166 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  167 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  168 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  169 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  170 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  171 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  172 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  173 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  174 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  175 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  176 + </attributes>
  177 + </connection>
  178 + <connection>
  179 + <name>bus_control_&#x672c;&#x673a;</name>
  180 + <server>localhost</server>
  181 + <type>MYSQL</type>
  182 + <access>Native</access>
  183 + <database>control</database>
  184 + <port>3306</port>
  185 + <username>root</username>
  186 + <password>Encrypted </password>
  187 + <servername/>
  188 + <data_tablespace/>
  189 + <index_tablespace/>
  190 + <attributes>
  191 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  192 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  193 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  194 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  195 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  196 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  197 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  198 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  199 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  200 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  201 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  202 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  203 + </attributes>
  204 + </connection>
  205 + <connection>
  206 + <name>control_jndi</name>
  207 + <server/>
  208 + <type>MYSQL</type>
  209 + <access>JNDI</access>
  210 + <database>control_jndi</database>
  211 + <port>1521</port>
  212 + <username/>
  213 + <password>Encrypted </password>
  214 + <servername/>
  215 + <data_tablespace/>
  216 + <index_tablespace/>
  217 + <attributes>
  218 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  219 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  220 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  221 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  222 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  223 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  224 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  225 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  226 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  227 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  228 + </attributes>
  229 + </connection>
  230 + <connection>
  231 + <name>JGJW_VM</name>
  232 + <server>192.168.198.240</server>
  233 + <type>ORACLE</type>
  234 + <access>Native</access>
  235 + <database>orcl</database>
  236 + <port>1521</port>
  237 + <username>jwgl</username>
  238 + <password>Encrypted 2be98afc86aa7f2e4cb79ce10d485a8d6</password>
  239 + <servername/>
  240 + <data_tablespace/>
  241 + <index_tablespace/>
  242 + <attributes>
  243 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  244 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  245 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  246 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  247 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  248 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  249 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  250 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  251 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  252 + </attributes>
  253 + </connection>
  254 + <connection>
  255 + <name>NHJW_VM</name>
  256 + <server>192.168.198.240</server>
  257 + <type>ORACLE</type>
  258 + <access>Native</access>
  259 + <database>orcl</database>
  260 + <port>1521</port>
  261 + <username>nhjw</username>
  262 + <password>Encrypted 2be98afc86aa7f2e4cb79ce10d09aa5cd</password>
  263 + <servername/>
  264 + <data_tablespace/>
  265 + <index_tablespace/>
  266 + <attributes>
  267 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  268 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  269 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  270 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  271 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  272 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  273 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  274 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  275 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  276 + </attributes>
  277 + </connection>
  278 + <connection>
  279 + <name>PDGJ_VM</name>
  280 + <server>192.168.198.240</server>
  281 + <type>ORACLE</type>
  282 + <access>Native</access>
  283 + <database>orcl</database>
  284 + <port>1521</port>
  285 + <username>pdgj</username>
  286 + <password>Encrypted 2be98afc86aa7f2e4cb79ce10ce96a8d0</password>
  287 + <servername/>
  288 + <data_tablespace/>
  289 + <index_tablespace/>
  290 + <attributes>
  291 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  292 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  293 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  294 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  295 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  296 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  297 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  298 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  299 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  300 + </attributes>
  301 + </connection>
  302 + <connection>
  303 + <name>repair_dw_mysql_jndi</name>
  304 + <server/>
  305 + <type>MYSQL</type>
  306 + <access>JNDI</access>
  307 + <database>repair_dw_mysql</database>
  308 + <port>1521</port>
  309 + <username/>
  310 + <password>Encrypted </password>
  311 + <servername/>
  312 + <data_tablespace/>
  313 + <index_tablespace/>
  314 + <attributes>
  315 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  316 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  317 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  318 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  319 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  320 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  321 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  322 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  323 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  324 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  325 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  326 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  327 + </attributes>
  328 + </connection>
  329 + <connection>
  330 + <name>repair_dw&#xff08;&#x672c;&#x673a;&#xff09;</name>
  331 + <server>localhost</server>
  332 + <type>MYSQL</type>
  333 + <access>Native</access>
  334 + <database>ruoyi-vue-3.5</database>
  335 + <port>3306</port>
  336 + <username>root</username>
  337 + <password>Encrypted </password>
  338 + <servername/>
  339 + <data_tablespace/>
  340 + <index_tablespace/>
  341 + <attributes>
  342 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  343 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  344 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  345 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  346 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  347 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  348 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  349 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  350 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  351 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  352 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  353 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  354 + </attributes>
  355 + </connection>
  356 + <connection>
  357 + <name>repair_real_h2</name>
  358 + <server/>
  359 + <type>H2</type>
  360 + <access>JNDI</access>
  361 + <database>repair_real_h2</database>
  362 + <port>1521</port>
  363 + <username/>
  364 + <password>Encrypted </password>
  365 + <servername/>
  366 + <data_tablespace/>
  367 + <index_tablespace/>
  368 + <attributes>
  369 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  370 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  371 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  372 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  373 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  374 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  375 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  376 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  377 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  378 + </attributes>
  379 + </connection>
  380 + <connection>
  381 + <name>SNJW_VM</name>
  382 + <server>192.168.198.240</server>
  383 + <type>ORACLE</type>
  384 + <access>Native</access>
  385 + <database>orcl</database>
  386 + <port>1521</port>
  387 + <username>snjw</username>
  388 + <password>Encrypted 2be98afc86aa7f2e4cb79ce10cd9ca5cd</password>
  389 + <servername/>
  390 + <data_tablespace/>
  391 + <index_tablespace/>
  392 + <attributes>
  393 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  394 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  395 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  396 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  397 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  398 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  399 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  400 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  401 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  402 + </attributes>
  403 + </connection>
  404 + <connection>
  405 + <name>test_control_local</name>
  406 + <server>localhost</server>
  407 + <type>MYSQL</type>
  408 + <access>Native</access>
  409 + <database>test_control</database>
  410 + <port>3306</port>
  411 + <username>root</username>
  412 + <password>Encrypted </password>
  413 + <servername/>
  414 + <data_tablespace/>
  415 + <index_tablespace/>
  416 + <attributes>
  417 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  418 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  419 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  420 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  421 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  422 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  423 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  424 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  425 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  426 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  427 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  428 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  429 + </attributes>
  430 + </connection>
  431 + <connection>
  432 + <name>test_control&#xff08;&#x672c;&#x673a;&#xff09;</name>
  433 + <server>127.0.0.1</server>
  434 + <type>MYSQL</type>
  435 + <access>Native</access>
  436 + <database>test_control</database>
  437 + <port>3306</port>
  438 + <username>root</username>
  439 + <password>Encrypted </password>
  440 + <servername/>
  441 + <data_tablespace/>
  442 + <index_tablespace/>
  443 + <attributes>
  444 + <attribute><code>EXTRA_OPTION_MYSQL.characterEncoding</code><attribute>utf8</attribute></attribute>
  445 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  446 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  447 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  448 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  449 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  450 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  451 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  452 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  453 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  454 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  455 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  456 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  457 + </attributes>
  458 + </connection>
  459 + <connection>
  460 + <name>wzk_mysql_jndi</name>
  461 + <server/>
  462 + <type>MYSQL</type>
  463 + <access>JNDI</access>
  464 + <database>wzk_mysql</database>
  465 + <port>1521</port>
  466 + <username/>
  467 + <password>Encrypted </password>
  468 + <servername/>
  469 + <data_tablespace/>
  470 + <index_tablespace/>
  471 + <attributes>
  472 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  473 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  474 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  475 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  476 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  477 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  478 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  479 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  480 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  481 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  482 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  483 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  484 + </attributes>
  485 + </connection>
  486 + <connection>
  487 + <name>wzk&#xff08;&#x672c;&#x673a;&#xff09;</name>
  488 + <server>localhost</server>
  489 + <type>MYSQL</type>
  490 + <access>Native</access>
  491 + <database>pdgj_wzk_sys</database>
  492 + <port>3306</port>
  493 + <username>root</username>
  494 + <password>Encrypted </password>
  495 + <servername/>
  496 + <data_tablespace/>
  497 + <index_tablespace/>
  498 + <attributes>
  499 + <attribute><code>EXTRA_OPTION_MYSQL.characterEncoding</code><attribute>utf8</attribute></attribute>
  500 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  501 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  502 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  503 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  504 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  505 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  506 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  507 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  508 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  509 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  510 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  511 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  512 + </attributes>
  513 + </connection>
  514 + <connection>
  515 + <name>xlab_mysql_youle</name>
  516 + <server>101.231.124.8</server>
  517 + <type>MYSQL</type>
  518 + <access>Native</access>
  519 + <database>xlab_youle</database>
  520 + <port>45687</port>
  521 + <username>xlab-youle</username>
  522 + <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>
  523 + <servername/>
  524 + <data_tablespace/>
  525 + <index_tablespace/>
  526 + <attributes>
  527 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  528 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  529 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  530 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  531 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  532 + <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>
  533 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  534 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  535 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  536 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  537 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  538 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  539 + </attributes>
  540 + </connection>
  541 + <connection>
  542 + <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>
  543 + <server>localhost</server>
  544 + <type>MYSQL</type>
  545 + <access>Native</access>
  546 + <database>xlab_youle</database>
  547 + <port>3306</port>
  548 + <username>root</username>
  549 + <password>Encrypted </password>
  550 + <servername/>
  551 + <data_tablespace/>
  552 + <index_tablespace/>
  553 + <attributes>
  554 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  555 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  556 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  557 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  558 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  559 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  560 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  561 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  562 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  563 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  564 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  565 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  566 + </attributes>
  567 + </connection>
  568 + <connection>
  569 + <name>xlab_youle</name>
  570 + <server/>
  571 + <type>MYSQL</type>
  572 + <access>JNDI</access>
  573 + <database>xlab_youle</database>
  574 + <port>1521</port>
  575 + <username/>
  576 + <password>Encrypted </password>
  577 + <servername/>
  578 + <data_tablespace/>
  579 + <index_tablespace/>
  580 + <attributes>
  581 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  582 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  583 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  584 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  585 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  586 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  587 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  588 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  589 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  590 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  591 + </attributes>
  592 + </connection>
  593 + <connection>
  594 + <name>YGJW_VM</name>
  595 + <server>192.168.198.240</server>
  596 + <type>ORACLE</type>
  597 + <access>Native</access>
  598 + <database>orcl</database>
  599 + <port>1521</port>
  600 + <username>ygjw</username>
  601 + <password>Encrypted 2be98afc86aa7f2e4cb79ce10c795a5cd</password>
  602 + <servername/>
  603 + <data_tablespace/>
  604 + <index_tablespace/>
  605 + <attributes>
  606 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  607 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  608 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  609 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  610 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  611 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  612 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  613 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  614 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  615 + </attributes>
  616 + </connection>
  617 + <connection>
  618 + <name>&#x516c;&#x53f8;jgjw</name>
  619 + <server>192.168.168.1</server>
  620 + <type>ORACLE</type>
  621 + <access>Native</access>
  622 + <database>orcl</database>
  623 + <port>1521</port>
  624 + <username>jwgl</username>
  625 + <password>Encrypted 2be98afc86aa7f2e4cb79ce10d485a8d6</password>
  626 + <servername/>
  627 + <data_tablespace/>
  628 + <index_tablespace/>
  629 + <attributes>
  630 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  631 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  632 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  633 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  634 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  635 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  636 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  637 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  638 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  639 + </attributes>
  640 + </connection>
  641 + <connection>
  642 + <name>&#x516c;&#x53f8;snjw</name>
  643 + <server>192.168.168.1</server>
  644 + <type>ORACLE</type>
  645 + <access>Native</access>
  646 + <database>orcl</database>
  647 + <port>1521</port>
  648 + <username>snjw</username>
  649 + <password>Encrypted 2be98afc86aa7f2e4cb79ce10cd9ca5cd</password>
  650 + <servername/>
  651 + <data_tablespace/>
  652 + <index_tablespace/>
  653 + <attributes>
  654 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  655 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  656 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  657 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  658 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  659 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  660 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  661 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  662 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  663 + </attributes>
  664 + </connection>
  665 + <connection>
  666 + <name>&#x516c;&#x53f8;ygjw</name>
  667 + <server>192.168.168.178</server>
  668 + <type>ORACLE</type>
  669 + <access>Native</access>
  670 + <database>orcl</database>
  671 + <port>1521</port>
  672 + <username>ygjw</username>
  673 + <password>Encrypted 2be98afc86aa7f2e4cb79ce10c795a5cd</password>
  674 + <servername/>
  675 + <data_tablespace/>
  676 + <index_tablespace/>
  677 + <attributes>
  678 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  679 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  680 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  681 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  682 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  683 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  684 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  685 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  686 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  687 + </attributes>
  688 + </connection>
  689 + <connection>
  690 + <name>&#x516c;&#x53f8;&#x673a;&#x52a1;_pdgj</name>
  691 + <server>192.168.168.178</server>
  692 + <type>ORACLE</type>
  693 + <access>Native</access>
  694 + <database>orcl</database>
  695 + <port>1521</port>
  696 + <username>pdgj</username>
  697 + <password>Encrypted 2be98afc86aa7f2e4cb79ce10ce96a8d0</password>
  698 + <servername/>
  699 + <data_tablespace/>
  700 + <index_tablespace/>
  701 + <attributes>
  702 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  703 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  704 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  705 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  706 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  707 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  708 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  709 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  710 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  711 + </attributes>
  712 + </connection>
  713 + <connection>
  714 + <name>&#x5916;&#x7f51;vpn&#x4e34;&#x6e2f;&#x673a;&#x52a1;oracle</name>
  715 + <server>10.10.150.114</server>
  716 + <type>ORACLE</type>
  717 + <access>Native</access>
  718 + <database>helowin</database>
  719 + <port>1521</port>
  720 + <username>lgjw</username>
  721 + <password>Encrypted 2be98afc86aa7f2e4cb79ce10d295a5cd</password>
  722 + <servername/>
  723 + <data_tablespace/>
  724 + <index_tablespace/>
  725 + <attributes>
  726 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  727 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  728 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  729 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  730 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  731 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  732 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  733 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  734 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  735 + </attributes>
  736 + </connection>
  737 + <connection>
  738 + <name>&#x5916;&#x7f51;&#x5357;&#x6c47;&#x673a;&#x52a1;oracle</name>
  739 + <server>58.247.254.118</server>
  740 + <type>ORACLE</type>
  741 + <access>Native</access>
  742 + <database>orcl</database>
  743 + <port>15211</port>
  744 + <username>nhjw</username>
  745 + <password>Encrypted 2be98afc86aa7f2e4cb79ce10d09aa5cd</password>
  746 + <servername/>
  747 + <data_tablespace/>
  748 + <index_tablespace/>
  749 + <attributes>
  750 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  751 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  752 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  753 + <attribute><code>PORT_NUMBER</code><attribute>15211</attribute></attribute>
  754 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  755 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  756 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  757 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  758 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  759 + </attributes>
  760 + </connection>
  761 + <connection>
  762 + <name>&#x5916;&#x7f51;&#x6768;&#x9ad8;&#x673a;&#x52a1;oracle</name>
  763 + <server>58.247.254.118</server>
  764 + <type>ORACLE</type>
  765 + <access>Native</access>
  766 + <database>orcl</database>
  767 + <port>15211</port>
  768 + <username>ygjw</username>
  769 + <password>Encrypted 2be98afc86aa7f2e4cb79ce10c795a5cd</password>
  770 + <servername/>
  771 + <data_tablespace/>
  772 + <index_tablespace/>
  773 + <attributes>
  774 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  775 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  776 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  777 + <attribute><code>PORT_NUMBER</code><attribute>15211</attribute></attribute>
  778 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  779 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  780 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  781 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  782 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  783 + </attributes>
  784 + </connection>
  785 + <connection>
  786 + <name>&#x5916;&#x7f51;&#x91d1;&#x9ad8;&#x673a;&#x52a1;oracle</name>
  787 + <server>58.247.254.118</server>
  788 + <type>ORACLE</type>
  789 + <access>Native</access>
  790 + <database>orcl</database>
  791 + <port>15211</port>
  792 + <username>jwgl</username>
  793 + <password>Encrypted 2be98afc86aa7f2e4cb79ce10d485a8d6</password>
  794 + <servername/>
  795 + <data_tablespace/>
  796 + <index_tablespace/>
  797 + <attributes>
  798 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  799 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  800 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  801 + <attribute><code>PORT_NUMBER</code><attribute>15211</attribute></attribute>
  802 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  803 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  804 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  805 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  806 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  807 + </attributes>
  808 + </connection>
  809 + <order>
  810 + <hop> <from>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</from><to>&#x5217;&#x8f6c;&#x884c;</to><enabled>Y</enabled> </hop>
  811 + <hop> <from>&#x5217;&#x8f6c;&#x884c;</from><to>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</to><enabled>Y</enabled> </hop>
  812 + <hop> <from>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</from><to>Excel&#x8f93;&#x51fa;</to><enabled>Y</enabled> </hop>
  813 + <hop> <from>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x6570;&#x636e;&#x8868;</from><to>&#x8def;&#x724c;&#x540d;&#x5b57;&#x67e5;&#x627e;</to><enabled>Y</enabled> </hop>
  814 + <hop> <from>&#x8def;&#x724c;&#x540d;&#x5b57;&#x67e5;&#x627e;</from><to>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
  815 + </order>
  816 + <step>
  817 + <name>Excel&#x8f93;&#x51fa;</name>
  818 + <type>ExcelOutput</type>
  819 + <description/>
  820 + <distribute>Y</distribute>
  821 + <custom_distribution/>
  822 + <copies>1</copies>
  823 + <partitioning>
  824 + <method>none</method>
  825 + <schema_name/>
  826 + </partitioning>
  827 + <header>Y</header>
  828 + <footer>N</footer>
  829 + <encoding/>
  830 + <append>N</append>
  831 + <add_to_result_filenames>Y</add_to_result_filenames>
  832 + <file>
  833 + <name>&#x24;&#x7b;filepath&#x7d;</name>
  834 + <extention>xls</extention>
  835 + <do_not_open_newfile_init>N</do_not_open_newfile_init>
  836 + <create_parent_folder>N</create_parent_folder>
  837 + <split>N</split>
  838 + <add_date>N</add_date>
  839 + <add_time>N</add_time>
  840 + <SpecifyFormat>N</SpecifyFormat>
  841 + <date_time_format/>
  842 + <sheetname>sheet1</sheetname>
  843 + <autosizecolums>N</autosizecolums>
  844 + <nullisblank>N</nullisblank>
  845 + <protect_sheet>N</protect_sheet>
  846 + <password>Encrypted </password>
  847 + <splitevery>0</splitevery>
  848 + <usetempfiles>N</usetempfiles>
  849 + <tempdirectory/>
  850 + </file>
  851 + <template>
  852 + <enabled>N</enabled>
  853 + <append>N</append>
  854 + <filename>template.xls</filename>
  855 + </template>
  856 + <fields>
  857 + </fields>
  858 + <custom>
  859 + <header_font_name>arial</header_font_name>
  860 + <header_font_size>10</header_font_size>
  861 + <header_font_bold>N</header_font_bold>
  862 + <header_font_italic>N</header_font_italic>
  863 + <header_font_underline>no</header_font_underline>
  864 + <header_font_orientation>horizontal</header_font_orientation>
  865 + <header_font_color>black</header_font_color>
  866 + <header_background_color>none</header_background_color>
  867 + <header_row_height>255</header_row_height>
  868 + <header_alignment>left</header_alignment>
  869 + <header_image/>
  870 + <row_font_name>arial</row_font_name>
  871 + <row_font_size>10</row_font_size>
  872 + <row_font_color>black</row_font_color>
  873 + <row_background_color>none</row_background_color>
  874 + </custom>
  875 + <cluster_schema/>
  876 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  877 + <xloc>731</xloc>
  878 + <yloc>65</yloc>
  879 + <draw>Y</draw>
  880 + </GUI>
  881 + </step>
  882 +
  883 + <step>
  884 + <name>&#x5217;&#x8f6c;&#x884c;</name>
  885 + <type>Denormaliser</type>
  886 + <description/>
  887 + <distribute>Y</distribute>
  888 + <custom_distribution/>
  889 + <copies>1</copies>
  890 + <partitioning>
  891 + <method>none</method>
  892 + <schema_name/>
  893 + </partitioning>
  894 + <key_field>fcno</key_field>
  895 + <group>
  896 + <field>
  897 + <name>lp</name>
  898 + </field>
  899 + </group>
  900 + <fields>
  901 + <field>
  902 + <field_name>fcsj</field_name>
  903 + <key_value>1</key_value>
  904 + <target_name>&#x51fa;&#x573a;1</target_name>
  905 + <target_type>String</target_type>
  906 + <target_format/>
  907 + <target_length>-1</target_length>
  908 + <target_precision>-1</target_precision>
  909 + <target_decimal_symbol/>
  910 + <target_grouping_symbol/>
  911 + <target_currency_symbol/>
  912 + <target_null_string/>
  913 + <target_aggregation_type>-</target_aggregation_type>
  914 + </field>
  915 + <field>
  916 + <field_name>fcsj</field_name>
  917 + <key_value>2</key_value>
  918 + <target_name>&#x9752;&#x5b89;&#x8def;&#x6c7d;&#x8f66;&#x7ad9;2</target_name>
  919 + <target_type>String</target_type>
  920 + <target_format/>
  921 + <target_length>-1</target_length>
  922 + <target_precision>-1</target_precision>
  923 + <target_decimal_symbol/>
  924 + <target_grouping_symbol/>
  925 + <target_currency_symbol/>
  926 + <target_null_string/>
  927 + <target_aggregation_type>-</target_aggregation_type>
  928 + </field>
  929 + <field>
  930 + <field_name>fcsj</field_name>
  931 + <key_value>3</key_value>
  932 + <target_name>&#x9752;&#x5b89;&#x8def;&#x6c7d;&#x8f66;&#x7ad9;3</target_name>
  933 + <target_type>String</target_type>
  934 + <target_format/>
  935 + <target_length>-1</target_length>
  936 + <target_precision>-1</target_precision>
  937 + <target_decimal_symbol/>
  938 + <target_grouping_symbol/>
  939 + <target_currency_symbol/>
  940 + <target_null_string/>
  941 + <target_aggregation_type>-</target_aggregation_type>
  942 + </field>
  943 + <field>
  944 + <field_name>fcsj</field_name>
  945 + <key_value>4</key_value>
  946 + <target_name>&#x9752;&#x5b89;&#x8def;&#x6c7d;&#x8f66;&#x7ad9;4</target_name>
  947 + <target_type>String</target_type>
  948 + <target_format/>
  949 + <target_length>-1</target_length>
  950 + <target_precision>-1</target_precision>
  951 + <target_decimal_symbol/>
  952 + <target_grouping_symbol/>
  953 + <target_currency_symbol/>
  954 + <target_null_string/>
  955 + <target_aggregation_type>-</target_aggregation_type>
  956 + </field>
  957 + <field>
  958 + <field_name>fcsj</field_name>
  959 + <key_value>5</key_value>
  960 + <target_name>&#x9752;&#x5b89;&#x8def;&#x6c7d;&#x8f66;&#x7ad9;5</target_name>
  961 + <target_type>String</target_type>
  962 + <target_format/>
  963 + <target_length>-1</target_length>
  964 + <target_precision>-1</target_precision>
  965 + <target_decimal_symbol/>
  966 + <target_grouping_symbol/>
  967 + <target_currency_symbol/>
  968 + <target_null_string/>
  969 + <target_aggregation_type>-</target_aggregation_type>
  970 + </field>
  971 + <field>
  972 + <field_name>fcsj</field_name>
  973 + <key_value>6</key_value>
  974 + <target_name>&#x9752;&#x5b89;&#x8def;&#x6c7d;&#x8f66;&#x7ad9;6</target_name>
  975 + <target_type>String</target_type>
  976 + <target_format/>
  977 + <target_length>-1</target_length>
  978 + <target_precision>-1</target_precision>
  979 + <target_decimal_symbol/>
  980 + <target_grouping_symbol/>
  981 + <target_currency_symbol/>
  982 + <target_null_string/>
  983 + <target_aggregation_type>-</target_aggregation_type>
  984 + </field>
  985 + <field>
  986 + <field_name>fcsj</field_name>
  987 + <key_value>7</key_value>
  988 + <target_name>&#x8fdb;&#x573a;7</target_name>
  989 + <target_type>String</target_type>
  990 + <target_format/>
  991 + <target_length>-1</target_length>
  992 + <target_precision>-1</target_precision>
  993 + <target_decimal_symbol/>
  994 + <target_grouping_symbol/>
  995 + <target_currency_symbol/>
  996 + <target_null_string/>
  997 + <target_aggregation_type>-</target_aggregation_type>
  998 + </field>
  999 + </fields>
  1000 + <cluster_schema/>
  1001 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1002 + <xloc>531</xloc>
  1003 + <yloc>65</yloc>
  1004 + <draw>Y</draw>
  1005 + </GUI>
  1006 + </step>
  1007 +
  1008 + <step>
  1009 + <name>&#x5b57;&#x6bb5;&#x9009;&#x62e9;</name>
  1010 + <type>SelectValues</type>
  1011 + <description/>
  1012 + <distribute>Y</distribute>
  1013 + <custom_distribution/>
  1014 + <copies>1</copies>
  1015 + <partitioning>
  1016 + <method>none</method>
  1017 + <schema_name/>
  1018 + </partitioning>
  1019 + <fields> <field> <name>lp_name</name>
  1020 + <rename>Road sign</rename>
  1021 + <length>-2</length>
  1022 + <precision>-2</precision>
  1023 + </field> <select_unspecified>Y</select_unspecified>
  1024 + </fields> <cluster_schema/>
  1025 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1026 + <xloc>534</xloc>
  1027 + <yloc>243</yloc>
  1028 + <draw>Y</draw>
  1029 + </GUI>
  1030 + </step>
  1031 +
  1032 + <step>
  1033 + <name>&#x6392;&#x5e8f;&#x8bb0;&#x5f55;</name>
  1034 + <type>SortRows</type>
  1035 + <description/>
  1036 + <distribute>Y</distribute>
  1037 + <custom_distribution/>
  1038 + <copies>1</copies>
  1039 + <partitioning>
  1040 + <method>none</method>
  1041 + <schema_name/>
  1042 + </partitioning>
  1043 + <directory>&#x25;&#x25;java.io.tmpdir&#x25;&#x25;</directory>
  1044 + <prefix>out</prefix>
  1045 + <sort_size>1000000</sort_size>
  1046 + <free_memory/>
  1047 + <compress>N</compress>
  1048 + <compress_variable/>
  1049 + <unique_rows>N</unique_rows>
  1050 + <fields>
  1051 + <field>
  1052 + <name>lp</name>
  1053 + <ascending>Y</ascending>
  1054 + <case_sensitive>N</case_sensitive>
  1055 + <presorted>N</presorted>
  1056 + </field>
  1057 + <field>
  1058 + <name>fcno</name>
  1059 + <ascending>Y</ascending>
  1060 + <case_sensitive>N</case_sensitive>
  1061 + <presorted>N</presorted>
  1062 + </field>
  1063 + </fields>
  1064 + <cluster_schema/>
  1065 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1066 + <xloc>331</xloc>
  1067 + <yloc>65</yloc>
  1068 + <draw>Y</draw>
  1069 + </GUI>
  1070 + </step>
  1071 +
  1072 + <step>
  1073 + <name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x6570;&#x636e;&#x8868;</name>
  1074 + <type>TableInput</type>
  1075 + <description/>
  1076 + <distribute>Y</distribute>
  1077 + <custom_distribution/>
  1078 + <copies>1</copies>
  1079 + <partitioning>
  1080 + <method>none</method>
  1081 + <schema_name/>
  1082 + </partitioning>
  1083 + <connection>control_jndi</connection>
  1084 + <sql>select &#x2a; from bsth_c_s_ttinfo_detail&#xa;where ttinfo &#x3d; &#x24;&#x7b;ttinfoid&#x7d;</sql>
  1085 + <limit>0</limit>
  1086 + <lookup/>
  1087 + <execute_each_row>N</execute_each_row>
  1088 + <variables_active>Y</variables_active>
  1089 + <lazy_conversion_active>N</lazy_conversion_active>
  1090 + <cluster_schema/>
  1091 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1092 + <xloc>131</xloc>
  1093 + <yloc>65</yloc>
  1094 + <draw>Y</draw>
  1095 + </GUI>
  1096 + </step>
  1097 +
  1098 + <step>
  1099 + <name>&#x8def;&#x724c;&#x540d;&#x5b57;&#x67e5;&#x627e;</name>
  1100 + <type>DBLookup</type>
  1101 + <description/>
  1102 + <distribute>Y</distribute>
  1103 + <custom_distribution/>
  1104 + <copies>1</copies>
  1105 + <partitioning>
  1106 + <method>none</method>
  1107 + <schema_name/>
  1108 + </partitioning>
  1109 + <connection>control_jndi</connection>
  1110 + <cache>Y</cache>
  1111 + <cache_load_all>Y</cache_load_all>
  1112 + <cache_size>0</cache_size>
  1113 + <lookup>
  1114 + <schema/>
  1115 + <table>bsth_c_s_gbi</table>
  1116 + <orderby/>
  1117 + <fail_on_multiple>N</fail_on_multiple>
  1118 + <eat_row_on_failure>N</eat_row_on_failure>
  1119 + <key>
  1120 + <name>lp</name>
  1121 + <field>id</field>
  1122 + <condition>&#x3d;</condition>
  1123 + <name2/>
  1124 + </key>
  1125 + <value>
  1126 + <name>lp_name</name>
  1127 + <rename>lp_name</rename>
  1128 + <default/>
  1129 + <type>String</type>
  1130 + </value>
  1131 + </lookup>
  1132 + <cluster_schema/>
  1133 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1134 + <xloc>237</xloc>
  1135 + <yloc>156</yloc>
  1136 + <draw>Y</draw>
  1137 + </GUI>
  1138 + </step>
  1139 +
  1140 + <step_error_handling>
  1141 + </step_error_handling>
  1142 + <slave-step-copy-partition-distribution>
  1143 +</slave-step-copy-partition-distribution>
  1144 + <slave_transformation>N</slave_transformation>
  1145 +
  1146 +</transformation>
... ...