Commit dd8b08bd52595d9513dc5852458021ac24fd8a51

Authored by 徐烜
1 parent 0a2f209c

Update

Showing 22 changed files with 2506 additions and 2126 deletions
src/main/java/com/bsth/controller/schedule/core/GuideboardInfoController.java
@@ -6,9 +6,7 @@ import com.bsth.entity.schedule.GuideboardInfo; @@ -6,9 +6,7 @@ import com.bsth.entity.schedule.GuideboardInfo;
6 import com.bsth.repository.schedule.GuideboardInfoRepository; 6 import com.bsth.repository.schedule.GuideboardInfoRepository;
7 import com.bsth.service.schedule.GuideboardInfoService; 7 import com.bsth.service.schedule.GuideboardInfoService;
8 import com.bsth.service.schedule.exception.ScheduleException; 8 import com.bsth.service.schedule.exception.ScheduleException;
9 -import com.bsth.service.schedule.utils.DataToolsProperties;  
10 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.beans.factory.annotation.Autowired;
11 -import org.springframework.boot.context.properties.EnableConfigurationProperties;  
12 import org.springframework.web.bind.annotation.RequestMapping; 10 import org.springframework.web.bind.annotation.RequestMapping;
13 import org.springframework.web.bind.annotation.RequestMethod; 11 import org.springframework.web.bind.annotation.RequestMethod;
14 import org.springframework.web.bind.annotation.RequestParam; 12 import org.springframework.web.bind.annotation.RequestParam;
@@ -23,7 +21,6 @@ import java.util.Map; @@ -23,7 +21,6 @@ import java.util.Map;
23 */ 21 */
24 @RestController 22 @RestController
25 @RequestMapping("gic") 23 @RequestMapping("gic")
26 -@EnableConfigurationProperties(DataToolsProperties.class)  
27 public class GuideboardInfoController extends BController<GuideboardInfo, Long> { 24 public class GuideboardInfoController extends BController<GuideboardInfo, Long> {
28 @Autowired 25 @Autowired
29 private GuideboardInfoService guideboardInfoService; 26 private GuideboardInfoService guideboardInfoService;
src/main/java/com/bsth/controller/schedule/core/TTInfoController.java
@@ -3,8 +3,8 @@ package com.bsth.controller.schedule.core; @@ -3,8 +3,8 @@ package com.bsth.controller.schedule.core;
3 import com.bsth.common.ResponseCode; 3 import com.bsth.common.ResponseCode;
4 import com.bsth.controller.schedule.BController; 4 import com.bsth.controller.schedule.BController;
5 import com.bsth.entity.schedule.TTInfo; 5 import com.bsth.entity.schedule.TTInfo;
6 -import com.bsth.service.schedule.exception.ScheduleException;  
7 import com.bsth.service.schedule.TTInfoService; 6 import com.bsth.service.schedule.TTInfoService;
  7 +import com.bsth.service.schedule.exception.ScheduleException;
8 import org.springframework.beans.factory.annotation.Autowired; 8 import org.springframework.beans.factory.annotation.Autowired;
9 import org.springframework.web.bind.annotation.RequestMapping; 9 import org.springframework.web.bind.annotation.RequestMapping;
10 import org.springframework.web.bind.annotation.RequestMethod; 10 import org.springframework.web.bind.annotation.RequestMethod;
src/main/java/com/bsth/service/schedule/datatools/CarConfigInfoDataToolsImpl.java
1 package com.bsth.service.schedule.datatools; 1 package com.bsth.service.schedule.datatools;
2 2
  3 +import com.bsth.service.schedule.exception.ScheduleException;
  4 +import com.bsth.service.schedule.utils.DataToolsProperties;
  5 +import com.bsth.service.schedule.utils.DataToolsService;
  6 +import jxl.Cell;
  7 +import jxl.Sheet;
  8 +import jxl.Workbook;
  9 +import jxl.write.Label;
  10 +import jxl.write.WritableSheet;
  11 +import jxl.write.WritableWorkbook;
  12 +import org.slf4j.Logger;
  13 +import org.slf4j.LoggerFactory;
  14 +import org.springframework.beans.factory.annotation.Autowired;
  15 +import org.springframework.beans.factory.annotation.Qualifier;
  16 +import org.springframework.boot.context.properties.EnableConfigurationProperties;
  17 +import org.springframework.stereotype.Service;
  18 +
  19 +import java.io.File;
  20 +import java.io.PrintWriter;
  21 +import java.io.StringWriter;
  22 +import java.util.HashMap;
  23 +import java.util.Map;
  24 +
3 /** 25 /**
4 * Created by xu on 17/5/16. 26 * Created by xu on 17/5/16.
5 */ 27 */
6 -public class CarConfigInfoDataToolsImpl { 28 +@EnableConfigurationProperties(DataToolsProperties.class)
  29 +@Service(value = "carConfig_dataTool")
  30 +public class CarConfigInfoDataToolsImpl implements DataToolsService {
  31 + /** 日志记录器 */
  32 + private final static Logger LOGGER = LoggerFactory.getLogger(CarConfigInfoDataToolsImpl.class);
  33 +
  34 + @Autowired
  35 + @Qualifier(value = "dataToolsServiceImpl")
  36 + private DataToolsService dataToolsService;
  37 +
  38 + @Autowired
  39 + private DataToolsProperties dataToolsProperties;
  40 +
  41 + @Override
  42 + public File uploadFile(String filename, byte[] filedata) throws ScheduleException {
  43 + try {
  44 + // 对上传的excel文件做处理,将第一个sheet名字设定为工作表1
  45 + File file = dataToolsService.uploadFile(filename, filedata);
  46 + Workbook workbook = Workbook.getWorkbook(file);
  47 + Sheet sheet = workbook.getSheet(0);
  48 +
  49 + File fileCal = new File(file.getAbsolutePath() + "_sheetChange.xls");
  50 + WritableWorkbook writableWorkbook = Workbook.createWorkbook(fileCal);
  51 + WritableSheet writableSheet = writableWorkbook.createSheet("工作表1", 0);
  52 + for (int i = 0; i < sheet.getRows(); i++) {
  53 + Cell[] cells = sheet.getRow(i);
  54 + for (int j = 0; j < cells.length; j++) {
  55 + writableSheet.addCell(new Label(j, i, cells[j].getContents()));
  56 + }
  57 + }
  58 + writableWorkbook.write();
  59 + writableWorkbook.close();
  60 +
  61 + return fileCal;
  62 +
  63 + } catch (Exception exp) {
  64 + throw new ScheduleException(exp);
  65 + }
  66 + }
  67 +
  68 + @Override
  69 + public void importData(File file, Map<String, Object> params) throws ScheduleException {
  70 + try {
  71 + LOGGER.info("//---------------- 导入车辆配置信息 start... ----------------//");
  72 + // 创建ktr转换所需参数
  73 + Map<String, Object> ktrParms = new HashMap<>();
  74 + File ktrFile = new File(this.getClass().getResource(
  75 + dataToolsProperties.getCarsconfigDatainputktr()).toURI());
  76 +
  77 + // 通用参数,转换文件路径,excel输入文件路径,错误输出文件路径
  78 + ktrParms.put("transpath", ktrFile.getAbsolutePath());
  79 + ktrParms.put("filepath", file.getAbsolutePath());
  80 + ktrParms.put("erroroutputdir", dataToolsProperties.getTransErrordir());
  81 +
  82 + ktrParms.putAll(params);
  83 +
  84 + dataToolsService.importData(file, ktrParms);
  85 +
  86 + LOGGER.info("//---------------- 导入车辆配置信息 success... ----------------//");
  87 + } catch (Exception exp) {
  88 + LOGGER.info("//---------------- 导入车辆配置信息 failed... ----------------//");
  89 +
  90 + StringWriter sw = new StringWriter();
  91 + exp.printStackTrace(new PrintWriter(sw));
  92 + LOGGER.info(sw.toString());
  93 +
  94 + throw new ScheduleException(exp.getMessage());
  95 + }
  96 + }
  97 +
  98 + @Override
  99 + public File exportData(Map<String, Object> params) throws ScheduleException {
  100 + try {
  101 + LOGGER.info("//---------------- 导出车辆配置信息 start... ----------------//");
  102 + // 创建ktr转换所需参数
  103 + Map<String, Object> ktrParms = new HashMap<>();
  104 + File ktrFile = new File(this.getClass().getResource(
  105 + dataToolsProperties.getCarsconfigDataoutputktr()).toURI());
  106 +
  107 + // 通用参数,转换文件路径,excel输出文件名
  108 + ktrParms.put("transpath", ktrFile.getAbsolutePath());
  109 + ktrParms.put("filename", "车辆配置信息_download-");
  110 +
  111 + ktrParms.putAll(params);
  112 +
  113 + File file = dataToolsService.exportData(ktrParms);
  114 +
  115 + LOGGER.info("//---------------- 导出车辆配置信息 success... ----------------//");
  116 +
  117 + return file;
  118 +
  119 + } catch (Exception exp) {
  120 + LOGGER.info("//---------------- 导出车辆配置信息 failed... ----------------//");
  121 +
  122 + StringWriter sw = new StringWriter();
  123 + exp.printStackTrace(new PrintWriter(sw));
  124 + LOGGER.info(sw.toString());
  125 +
  126 + throw new ScheduleException(exp.getMessage());
  127 + }
  128 + }
7 } 129 }
src/main/java/com/bsth/service/schedule/datatools/CarsDataToolsImpl.java
1 package com.bsth.service.schedule.datatools; 1 package com.bsth.service.schedule.datatools;
2 2
  3 +import com.bsth.service.schedule.exception.ScheduleException;
  4 +import com.bsth.service.schedule.utils.DataToolsProperties;
  5 +import com.bsth.service.schedule.utils.DataToolsService;
  6 +import jxl.Cell;
  7 +import jxl.Sheet;
  8 +import jxl.Workbook;
  9 +import jxl.write.Label;
  10 +import jxl.write.WritableSheet;
  11 +import jxl.write.WritableWorkbook;
  12 +import org.slf4j.Logger;
  13 +import org.slf4j.LoggerFactory;
  14 +import org.springframework.beans.factory.annotation.Autowired;
  15 +import org.springframework.beans.factory.annotation.Qualifier;
  16 +import org.springframework.boot.context.properties.EnableConfigurationProperties;
  17 +import org.springframework.stereotype.Service;
  18 +
  19 +import java.io.File;
  20 +import java.io.PrintWriter;
  21 +import java.io.StringWriter;
  22 +import java.util.HashMap;
  23 +import java.util.Map;
  24 +
3 /** 25 /**
4 * Created by xu on 17/5/16. 26 * Created by xu on 17/5/16.
5 */ 27 */
6 -public class CarsDataToolsImpl { 28 +@EnableConfigurationProperties(DataToolsProperties.class)
  29 +@Service(value = "cars_dataTool")
  30 +public class CarsDataToolsImpl implements DataToolsService {
  31 + /** 日志记录器 */
  32 + private final static Logger LOGGER = LoggerFactory.getLogger(CarsDataToolsImpl.class);
  33 +
  34 + @Autowired
  35 + @Qualifier(value = "dataToolsServiceImpl")
  36 + private DataToolsService dataToolsService;
  37 +
  38 + @Autowired
  39 + private DataToolsProperties dataToolsProperties;
  40 +
  41 + @Override
  42 + public File uploadFile(String filename, byte[] filedata) throws ScheduleException {
  43 + try {
  44 + // 对上传的excel文件做处理,将第一个sheet名字设定为工作表1
  45 + File file = dataToolsService.uploadFile(filename, filedata);
  46 + Workbook workbook = Workbook.getWorkbook(file);
  47 + Sheet sheet = workbook.getSheet(0);
  48 +
  49 + File fileCal = new File(file.getAbsolutePath() + "_sheetChange.xls");
  50 + WritableWorkbook writableWorkbook = Workbook.createWorkbook(fileCal);
  51 + WritableSheet writableSheet = writableWorkbook.createSheet("工作表1", 0);
  52 + for (int i = 0; i < sheet.getRows(); i++) {
  53 + Cell[] cells = sheet.getRow(i);
  54 + for (int j = 0; j < cells.length; j++) {
  55 + writableSheet.addCell(new Label(j, i, cells[j].getContents()));
  56 + }
  57 + }
  58 + writableWorkbook.write();
  59 + writableWorkbook.close();
  60 +
  61 + return fileCal;
  62 +
  63 + } catch (Exception exp) {
  64 + throw new ScheduleException(exp);
  65 + }
  66 + }
  67 +
  68 + @Override
  69 + public void importData(File file, Map<String, Object> params) throws ScheduleException {
  70 + try {
  71 + LOGGER.info("//---------------- 导入车辆基础信息 start... ----------------//");
  72 + // 创建ktr转换所需参数
  73 + Map<String, Object> ktrParms = new HashMap<>();
  74 + File ktrFile = new File(this.getClass().getResource(
  75 + dataToolsProperties.getCarsDatainputktr()).toURI());
  76 +
  77 + // 通用参数,转换文件路径,excel输入文件路径,错误输出文件路径
  78 + ktrParms.put("transpath", ktrFile.getAbsolutePath());
  79 + ktrParms.put("filepath", file.getAbsolutePath());
  80 + ktrParms.put("erroroutputdir", dataToolsProperties.getTransErrordir());
  81 +
  82 + dataToolsService.importData(file, ktrParms);
  83 +
  84 + LOGGER.info("//---------------- 导入车辆基础信息 success... ----------------//");
  85 + } catch (Exception exp) {
  86 + LOGGER.info("//---------------- 导入车辆基础信息 failed... ----------------//");
  87 +
  88 + StringWriter sw = new StringWriter();
  89 + exp.printStackTrace(new PrintWriter(sw));
  90 + LOGGER.info(sw.toString());
  91 +
  92 + throw new ScheduleException(exp.getMessage());
  93 + }
  94 + }
  95 +
  96 + @Override
  97 + public File exportData(Map<String, Object> params) throws ScheduleException {
  98 + try {
  99 + LOGGER.info("//---------------- 导出车辆基础信息 start... ----------------//");
  100 + // 创建ktr转换所需参数
  101 + Map<String, Object> ktrParms = new HashMap<>();
  102 + File ktrFile = new File(this.getClass().getResource(
  103 + dataToolsProperties.getCarsDataoutputktr()).toURI());
  104 +
  105 + // 通用参数,转换文件路径,excel输出文件名
  106 + ktrParms.put("transpath", ktrFile.getAbsolutePath());
  107 + ktrParms.put("filename", "车辆基础信息_download-");
  108 +
  109 + File file = dataToolsService.exportData(ktrParms);
  110 +
  111 + LOGGER.info("//---------------- 导出车辆基础信息 success... ----------------//");
  112 +
  113 + return file;
  114 +
  115 + } catch (Exception exp) {
  116 + LOGGER.info("//---------------- 导出车辆基础信息 failed... ----------------//");
  117 +
  118 + StringWriter sw = new StringWriter();
  119 + exp.printStackTrace(new PrintWriter(sw));
  120 + LOGGER.info(sw.toString());
  121 +
  122 + throw new ScheduleException(exp.getMessage());
  123 + }
  124 + }
7 } 125 }
src/main/java/com/bsth/service/schedule/datatools/EmployeeConfigInfoDataToolsImpl.java
1 package com.bsth.service.schedule.datatools; 1 package com.bsth.service.schedule.datatools;
2 2
  3 +import com.bsth.service.schedule.exception.ScheduleException;
  4 +import com.bsth.service.schedule.utils.DataToolsProperties;
  5 +import com.bsth.service.schedule.utils.DataToolsService;
  6 +import jxl.Cell;
  7 +import jxl.Sheet;
  8 +import jxl.Workbook;
  9 +import jxl.write.Label;
  10 +import jxl.write.WritableSheet;
  11 +import jxl.write.WritableWorkbook;
  12 +import org.slf4j.Logger;
  13 +import org.slf4j.LoggerFactory;
  14 +import org.springframework.beans.factory.annotation.Autowired;
  15 +import org.springframework.beans.factory.annotation.Qualifier;
  16 +import org.springframework.boot.context.properties.EnableConfigurationProperties;
  17 +import org.springframework.stereotype.Service;
  18 +
  19 +import java.io.File;
  20 +import java.io.PrintWriter;
  21 +import java.io.StringWriter;
  22 +import java.util.HashMap;
  23 +import java.util.Map;
  24 +
3 /** 25 /**
4 * Created by xu on 17/5/16. 26 * Created by xu on 17/5/16.
5 */ 27 */
6 -public class EmployeeConfigInfoDataToolsImpl { 28 +@EnableConfigurationProperties(DataToolsProperties.class)
  29 +@Service(value = "employeeConfig_dataTool")
  30 +public class EmployeeConfigInfoDataToolsImpl implements DataToolsService {
  31 + /** 日志记录器 */
  32 + private static final Logger LOGGER = LoggerFactory.getLogger(EmployeeConfigInfoDataToolsImpl.class);
  33 +
  34 + @Autowired
  35 + @Qualifier(value = "dataToolsServiceImpl")
  36 + private DataToolsService dataToolsService;
  37 +
  38 + @Autowired
  39 + private DataToolsProperties dataToolsProperties;
  40 +
  41 + @Override
  42 + public File uploadFile(String filename, byte[] filedata) throws ScheduleException {
  43 + try {
  44 + // 对上传的excel文件做处理,将第一个sheet名字设定为工作表1
  45 + File file = dataToolsService.uploadFile(filename, filedata);
  46 + Workbook workbook = Workbook.getWorkbook(file);
  47 + Sheet sheet = workbook.getSheet(0);
  48 +
  49 + File fileCal = new File(file.getAbsolutePath() + "_sheetChange.xls");
  50 + WritableWorkbook writableWorkbook = Workbook.createWorkbook(fileCal);
  51 + WritableSheet writableSheet = writableWorkbook.createSheet("工作表1", 0);
  52 + for (int i = 0; i < sheet.getRows(); i++) {
  53 + Cell[] cells = sheet.getRow(i);
  54 + for (int j = 0; j < cells.length; j++) {
  55 + writableSheet.addCell(new Label(j, i, cells[j].getContents()));
  56 + }
  57 + }
  58 + writableWorkbook.write();
  59 + writableWorkbook.close();
  60 +
  61 + return fileCal;
  62 +
  63 + } catch (Exception exp) {
  64 + throw new ScheduleException(exp);
  65 + }
  66 + }
  67 +
  68 + @Override
  69 + public void importData(File file, Map<String, Object> params) throws ScheduleException {
  70 + try {
  71 + LOGGER.info("//---------------- 导入人员配置信息 start... ----------------//");
  72 + // 创建ktr转换所需参数
  73 + Map<String, Object> ktrParms = new HashMap<>();
  74 + File ktrFile = new File(this.getClass().getResource(
  75 + dataToolsProperties.getEmployeesconfigDatainputktr()).toURI());
  76 +
  77 + // 通用参数,转换文件路径,excel输入文件路径,错误输出文件路径
  78 + ktrParms.put("transpath", ktrFile.getAbsolutePath());
  79 + ktrParms.put("filepath", file.getAbsolutePath());
  80 + ktrParms.put("erroroutputdir", dataToolsProperties.getTransErrordir());
  81 +
  82 + ktrParms.putAll(params);
  83 +
  84 + dataToolsService.importData(file, ktrParms);
  85 +
  86 + LOGGER.info("//---------------- 导入人员配置信息 success... ----------------//");
  87 + } catch (Exception exp) {
  88 + LOGGER.info("//---------------- 导入人员配置信息 failed... ----------------//");
  89 +
  90 + StringWriter sw = new StringWriter();
  91 + exp.printStackTrace(new PrintWriter(sw));
  92 + LOGGER.info(sw.toString());
  93 +
  94 + throw new ScheduleException(exp.getMessage());
  95 + }
  96 + }
  97 +
  98 + @Override
  99 + public File exportData(Map<String, Object> params) throws ScheduleException {
  100 + try {
  101 + LOGGER.info("//---------------- 导出人员配置信息 start... ----------------//");
  102 + // 创建ktr转换所需参数
  103 + Map<String, Object> ktrParms = new HashMap<>();
  104 + File ktrFile = new File(this.getClass().getResource(
  105 + dataToolsProperties.getEmployeesconfigDataoutputktr()).toURI());
  106 +
  107 + // 通用参数,转换文件路径,excel输出文件名
  108 + ktrParms.put("transpath", ktrFile.getAbsolutePath());
  109 + ktrParms.put("filename", "人员配置信息_download-");
  110 +
  111 + ktrParms.putAll(params);
  112 +
  113 + File file = dataToolsService.exportData(ktrParms);
  114 +
  115 + LOGGER.info("//---------------- 导出人员配置信息 success... ----------------//");
  116 +
  117 + return file;
  118 +
  119 + } catch (Exception exp) {
  120 + LOGGER.info("//---------------- 导出人员配置信息 failed... ----------------//");
  121 +
  122 + StringWriter sw = new StringWriter();
  123 + exp.printStackTrace(new PrintWriter(sw));
  124 + LOGGER.info(sw.toString());
  125 +
  126 + throw new ScheduleException(exp.getMessage());
  127 + }
  128 + }
7 } 129 }
src/main/java/com/bsth/service/schedule/datatools/EmployeeDataToolsImpl.java
1 package com.bsth.service.schedule.datatools; 1 package com.bsth.service.schedule.datatools;
2 2
  3 +import com.bsth.service.schedule.exception.ScheduleException;
  4 +import com.bsth.service.schedule.utils.DataToolsProperties;
  5 +import com.bsth.service.schedule.utils.DataToolsService;
  6 +import jxl.Cell;
  7 +import jxl.Sheet;
  8 +import jxl.Workbook;
  9 +import jxl.write.Label;
  10 +import jxl.write.WritableSheet;
  11 +import jxl.write.WritableWorkbook;
  12 +import org.slf4j.Logger;
  13 +import org.slf4j.LoggerFactory;
  14 +import org.springframework.beans.factory.annotation.Autowired;
  15 +import org.springframework.beans.factory.annotation.Qualifier;
  16 +import org.springframework.boot.context.properties.EnableConfigurationProperties;
  17 +import org.springframework.stereotype.Service;
  18 +
  19 +import java.io.File;
  20 +import java.io.PrintWriter;
  21 +import java.io.StringWriter;
  22 +import java.util.HashMap;
  23 +import java.util.Map;
  24 +
3 /** 25 /**
4 * Created by xu on 17/5/16. 26 * Created by xu on 17/5/16.
5 */ 27 */
6 -public class EmployeeDataToolsImpl { 28 +@EnableConfigurationProperties(DataToolsProperties.class)
  29 +@Service(value = "employee_dataTool")
  30 +public class EmployeeDataToolsImpl implements DataToolsService {
  31 + /** 日志记录器 */
  32 + private final static Logger LOGGER = LoggerFactory.getLogger(EmployeeDataToolsImpl.class);
  33 +
  34 + @Autowired
  35 + @Qualifier(value = "dataToolsServiceImpl")
  36 + private DataToolsService dataToolsService;
  37 +
  38 + @Autowired
  39 + private DataToolsProperties dataToolsProperties;
  40 +
  41 + @Override
  42 + public File uploadFile(String filename, byte[] filedata) throws ScheduleException {
  43 + try {
  44 + // 对上传的excel文件做处理,将第一个sheet名字设定为工作表1
  45 + File file = dataToolsService.uploadFile(filename, filedata);
  46 + Workbook workbook = Workbook.getWorkbook(file);
  47 + Sheet sheet = workbook.getSheet(0);
  48 +
  49 + File fileCal = new File(file.getAbsolutePath() + "_sheetChange.xls");
  50 + WritableWorkbook writableWorkbook = Workbook.createWorkbook(fileCal);
  51 + WritableSheet writableSheet = writableWorkbook.createSheet("工作表1", 0);
  52 + for (int i = 0; i < sheet.getRows(); i++) {
  53 + Cell[] cells = sheet.getRow(i);
  54 + for (int j = 0; j < cells.length; j++) {
  55 + writableSheet.addCell(new Label(j, i, cells[j].getContents()));
  56 + }
  57 + }
  58 + writableWorkbook.write();
  59 + writableWorkbook.close();
  60 +
  61 + return fileCal;
  62 +
  63 + } catch (Exception exp) {
  64 + throw new ScheduleException(exp);
  65 + }
  66 + }
  67 +
  68 + @Override
  69 + public void importData(File file, Map<String, Object> params) throws ScheduleException {
  70 + try {
  71 + LOGGER.info("//---------------- 导入人员基础信息 start... ----------------//");
  72 + // 创建ktr转换所需参数
  73 + Map<String, Object> ktrParms = new HashMap<>();
  74 + File ktrFile = new File(this.getClass().getResource(
  75 + dataToolsProperties.getEmployeesDatainputktr()).toURI());
  76 +
  77 + // 通用参数,转换文件路径,excel输入文件路径,错误输出文件路径
  78 + ktrParms.put("transpath", ktrFile.getAbsolutePath());
  79 + ktrParms.put("filepath", file.getAbsolutePath());
  80 + ktrParms.put("erroroutputdir", dataToolsProperties.getTransErrordir());
  81 +
  82 + dataToolsService.importData(file, ktrParms);
  83 +
  84 + LOGGER.info("//---------------- 导入人员基础信息 success... ----------------//");
  85 + } catch (Exception exp) {
  86 + LOGGER.info("//---------------- 导入人员基础信息 failed... ----------------//");
  87 +
  88 + StringWriter sw = new StringWriter();
  89 + exp.printStackTrace(new PrintWriter(sw));
  90 + LOGGER.info(sw.toString());
  91 +
  92 + throw new ScheduleException(exp.getMessage());
  93 + }
  94 + }
  95 +
  96 + @Override
  97 + public File exportData(Map<String, Object> params) throws ScheduleException {
  98 + try {
  99 + LOGGER.info("//---------------- 导出人员基础信息 start... ----------------//");
  100 + // 创建ktr转换所需参数
  101 + Map<String, Object> ktrParms = new HashMap<>();
  102 + File ktrFile = new File(this.getClass().getResource(
  103 + dataToolsProperties.getEmployeesDataoutputktr()).toURI());
  104 +
  105 + // 通用参数,转换文件路径,excel输出文件名
  106 + ktrParms.put("transpath", ktrFile.getAbsolutePath());
  107 + ktrParms.put("filename", "人员基础信息_download-");
  108 +
  109 + File file = dataToolsService.exportData(ktrParms);
  110 +
  111 + LOGGER.info("//---------------- 导出人员基础信息 success... ----------------//");
  112 +
  113 + return file;
  114 +
  115 + } catch (Exception exp) {
  116 + LOGGER.info("//---------------- 导出人员基础信息 failed... ----------------//");
  117 +
  118 + StringWriter sw = new StringWriter();
  119 + exp.printStackTrace(new PrintWriter(sw));
  120 + LOGGER.info(sw.toString());
  121 +
  122 + throw new ScheduleException(exp.getMessage());
  123 + }
  124 + }
7 } 125 }
src/main/java/com/bsth/service/schedule/datatools/GuideboardInfoDataToolsImpl.java
1 package com.bsth.service.schedule.datatools; 1 package com.bsth.service.schedule.datatools;
2 2
  3 +import com.bsth.service.schedule.exception.ScheduleException;
  4 +import com.bsth.service.schedule.utils.DataToolsProperties;
  5 +import com.bsth.service.schedule.utils.DataToolsService;
  6 +import jxl.Cell;
  7 +import jxl.Sheet;
  8 +import jxl.Workbook;
  9 +import jxl.write.Label;
  10 +import jxl.write.WritableSheet;
  11 +import jxl.write.WritableWorkbook;
  12 +import org.slf4j.Logger;
  13 +import org.slf4j.LoggerFactory;
  14 +import org.springframework.beans.factory.annotation.Autowired;
  15 +import org.springframework.beans.factory.annotation.Qualifier;
  16 +import org.springframework.boot.context.properties.EnableConfigurationProperties;
  17 +import org.springframework.stereotype.Service;
  18 +
  19 +import java.io.File;
  20 +import java.io.PrintWriter;
  21 +import java.io.StringWriter;
  22 +import java.util.HashMap;
  23 +import java.util.Map;
  24 +
3 /** 25 /**
4 * Created by xu on 17/5/16. 26 * Created by xu on 17/5/16.
5 */ 27 */
6 -public class GuideboardInfoDataToolsImpl { 28 +@EnableConfigurationProperties(DataToolsProperties.class)
  29 +@Service(value = "gbInfo_dataTool")
  30 +public class GuideboardInfoDataToolsImpl implements DataToolsService {
  31 + /** 日志记录器 */
  32 + private final static Logger LOGGER = LoggerFactory.getLogger(GuideboardInfoDataToolsImpl.class);
  33 +
  34 + @Autowired
  35 + @Qualifier(value = "dataToolsServiceImpl")
  36 + private DataToolsService dataToolsService;
  37 +
  38 + @Autowired
  39 + private DataToolsProperties dataToolsProperties;
  40 +
  41 + @Override
  42 + public File uploadFile(String filename, byte[] filedata) throws ScheduleException {
  43 + try {
  44 + // 对上传的excel文件做处理,将第一个sheet名字设定为工作表1
  45 + File file = dataToolsService.uploadFile(filename, filedata);
  46 + Workbook workbook = Workbook.getWorkbook(file);
  47 + Sheet sheet = workbook.getSheet(0);
  48 +
  49 + File fileCal = new File(file.getAbsolutePath() + "_sheetChange.xls");
  50 + WritableWorkbook writableWorkbook = Workbook.createWorkbook(fileCal);
  51 + WritableSheet writableSheet = writableWorkbook.createSheet("工作表1", 0);
  52 + for (int i = 0; i < sheet.getRows(); i++) {
  53 + Cell[] cells = sheet.getRow(i);
  54 + for (int j = 0; j < cells.length; j++) {
  55 + writableSheet.addCell(new Label(j, i, cells[j].getContents()));
  56 + }
  57 + }
  58 + writableWorkbook.write();
  59 + writableWorkbook.close();
  60 +
  61 + return fileCal;
  62 +
  63 + } catch (Exception exp) {
  64 + throw new ScheduleException(exp);
  65 + }
  66 + }
  67 +
  68 + @Override
  69 + public void importData(File file, Map<String, Object> params) throws ScheduleException {
  70 + try {
  71 + LOGGER.info("//---------------- 导入路牌信息 start... ----------------//");
  72 + // 创建ktr转换所需参数
  73 + Map<String, Object> ktrParms = new HashMap<>();
  74 + File ktrFile = new File(this.getClass().getResource(
  75 + dataToolsProperties.getGuideboardsDatainputktr()).toURI());
  76 +
  77 + // 通用参数,转换文件路径,excel输入文件路径,错误输出文件路径
  78 + ktrParms.put("transpath", ktrFile.getAbsolutePath());
  79 + ktrParms.put("filepath", file.getAbsolutePath());
  80 + ktrParms.put("erroroutputdir", dataToolsProperties.getTransErrordir());
  81 +
  82 + ktrParms.putAll(params);
  83 +
  84 + dataToolsService.importData(file, ktrParms);
  85 +
  86 + LOGGER.info("//---------------- 导入路牌信息 success... ----------------//");
  87 + } catch (Exception exp) {
  88 + LOGGER.info("//---------------- 导入路牌信息 failed... ----------------//");
  89 +
  90 + StringWriter sw = new StringWriter();
  91 + exp.printStackTrace(new PrintWriter(sw));
  92 + LOGGER.info(sw.toString());
  93 +
  94 + throw new ScheduleException(exp.getMessage());
  95 + }
  96 + }
  97 +
  98 + @Override
  99 + public File exportData(Map<String, Object> params) throws ScheduleException {
  100 + try {
  101 + LOGGER.info("//---------------- 导出路牌信息 start... ----------------//");
  102 + // 创建ktr转换所需参数
  103 + Map<String, Object> ktrParms = new HashMap<>();
  104 + File ktrFile = new File(this.getClass().getResource(
  105 + dataToolsProperties.getGuideboardsDataoutputktr()).toURI());
  106 +
  107 + // 通用参数,转换文件路径,excel输出文件名
  108 + ktrParms.put("transpath", ktrFile.getAbsolutePath());
  109 + ktrParms.put("filename", "路牌信息_download-");
  110 +
  111 + ktrParms.putAll(params);
  112 +
  113 + File file = dataToolsService.exportData(ktrParms);
  114 +
  115 + LOGGER.info("//---------------- 导出路牌信息 success... ----------------//");
  116 +
  117 + return file;
  118 +
  119 + } catch (Exception exp) {
  120 + LOGGER.info("//---------------- 导出路牌信息 failed... ----------------//");
  121 +
  122 + StringWriter sw = new StringWriter();
  123 + exp.printStackTrace(new PrintWriter(sw));
  124 + LOGGER.info(sw.toString());
  125 +
  126 + throw new ScheduleException(exp.getMessage());
  127 + }
  128 + }
7 } 129 }
src/main/java/com/bsth/service/schedule/datatools/ScheduleRule1FlatDataToolsImpl.java
1 package com.bsth.service.schedule.datatools; 1 package com.bsth.service.schedule.datatools;
2 2
  3 +import com.bsth.service.schedule.exception.ScheduleException;
  4 +import com.bsth.service.schedule.utils.DataToolsProperties;
  5 +import com.bsth.service.schedule.utils.DataToolsService;
  6 +import jxl.Cell;
  7 +import jxl.Sheet;
  8 +import jxl.Workbook;
  9 +import jxl.write.Label;
  10 +import jxl.write.WritableSheet;
  11 +import jxl.write.WritableWorkbook;
  12 +import org.slf4j.Logger;
  13 +import org.slf4j.LoggerFactory;
  14 +import org.springframework.beans.factory.annotation.Autowired;
  15 +import org.springframework.beans.factory.annotation.Qualifier;
  16 +import org.springframework.boot.context.properties.EnableConfigurationProperties;
  17 +import org.springframework.stereotype.Service;
  18 +
  19 +import java.io.File;
  20 +import java.io.PrintWriter;
  21 +import java.io.StringWriter;
  22 +import java.util.HashMap;
  23 +import java.util.Map;
  24 +
3 /** 25 /**
4 * Created by xu on 17/5/16. 26 * Created by xu on 17/5/16.
5 */ 27 */
6 -public class ScheduleRule1FlatDataToolsImpl { 28 +@EnableConfigurationProperties(DataToolsProperties.class)
  29 +@Service(value = "scheduleRule_dataTool")
  30 +public class ScheduleRule1FlatDataToolsImpl implements DataToolsService {
  31 + /** 日志记录器 */
  32 + private final static Logger LOGGER = LoggerFactory.getLogger(ScheduleRule1FlatDataToolsImpl.class);
  33 +
  34 + @Autowired
  35 + @Qualifier(value = "dataToolsServiceImpl")
  36 + private DataToolsService dataToolsService;
  37 +
  38 + @Autowired
  39 + private DataToolsProperties dataToolsProperties;
  40 +
  41 + @Override
  42 + public File uploadFile(String filename, byte[] filedata) throws ScheduleException {
  43 + try {
  44 + // 对上传的excel文件做处理,将第一个sheet名字设定为工作表1
  45 + File file = dataToolsService.uploadFile(filename, filedata);
  46 + Workbook workbook = Workbook.getWorkbook(file);
  47 + Sheet sheet = workbook.getSheet(0);
  48 +
  49 + File fileCal = new File(file.getAbsolutePath() + "_sheetChange.xls");
  50 + WritableWorkbook writableWorkbook = Workbook.createWorkbook(fileCal);
  51 + WritableSheet writableSheet = writableWorkbook.createSheet("工作表1", 0);
  52 + for (int i = 0; i < sheet.getRows(); i++) {
  53 + Cell[] cells = sheet.getRow(i);
  54 + for (int j = 0; j < cells.length; j++) {
  55 + writableSheet.addCell(new Label(j, i, cells[j].getContents()));
  56 + }
  57 + }
  58 + writableWorkbook.write();
  59 + writableWorkbook.close();
  60 +
  61 + return fileCal;
  62 +
  63 + } catch (Exception exp) {
  64 + throw new ScheduleException(exp);
  65 + }
  66 + }
  67 +
  68 + @Override
  69 + public void importData(File file, Map<String, Object> params) throws ScheduleException {
  70 + try {
  71 + LOGGER.info("//---------------- 导入排版规则信息 start... ----------------//");
  72 + // 创建ktr转换所需参数
  73 + Map<String, Object> ktrParms = new HashMap<>();
  74 + File ktrFile = new File(this.getClass().getResource(
  75 + dataToolsProperties.getScheduleruleDatainputktr()).toURI());
  76 +
  77 + // 通用参数,转换文件路径,excel输入文件路径,错误输出文件路径
  78 + ktrParms.put("transpath", ktrFile.getAbsolutePath());
  79 + ktrParms.put("filepath", file.getAbsolutePath());
  80 + ktrParms.put("erroroutputdir", dataToolsProperties.getTransErrordir());
  81 +
  82 + ktrParms.putAll(params);
  83 +
  84 + dataToolsService.importData(file, ktrParms);
  85 +
  86 + LOGGER.info("//---------------- 导入排版规则信息 success... ----------------//");
  87 + } catch (Exception exp) {
  88 + LOGGER.info("//---------------- 导入排版规则信息 failed... ----------------//");
  89 +
  90 + StringWriter sw = new StringWriter();
  91 + exp.printStackTrace(new PrintWriter(sw));
  92 + LOGGER.info(sw.toString());
  93 +
  94 + throw new ScheduleException(exp.getMessage());
  95 + }
  96 + }
  97 +
  98 + @Override
  99 + public File exportData(Map<String, Object> params) throws ScheduleException {
  100 + try {
  101 + LOGGER.info("//---------------- 导出排版规则信息 start... ----------------//");
  102 + // 创建ktr转换所需参数
  103 + Map<String, Object> ktrParms = new HashMap<>();
  104 + File ktrFile = new File(this.getClass().getResource(
  105 + dataToolsProperties.getScheduleruleOutput()).toURI());
  106 +
  107 + // 通用参数,转换文件路径,excel输出文件名
  108 + ktrParms.put("transpath", ktrFile.getAbsolutePath());
  109 + ktrParms.put("filename", "排版规则信息_download-");
  110 +
  111 + ktrParms.putAll(params);
  112 +
  113 + File file = dataToolsService.exportData(ktrParms);
  114 +
  115 + LOGGER.info("//---------------- 导出排版规则信息 success... ----------------//");
  116 +
  117 + return file;
  118 +
  119 + } catch (Exception exp) {
  120 + LOGGER.info("//---------------- 导出排版规则信息 failed... ----------------//");
  121 +
  122 + StringWriter sw = new StringWriter();
  123 + exp.printStackTrace(new PrintWriter(sw));
  124 + LOGGER.info(sw.toString());
  125 +
  126 + throw new ScheduleException(exp.getMessage());
  127 + }
  128 + }
7 } 129 }
src/main/java/com/bsth/service/schedule/datatools/TTInfoDetailDataToolsImpl.java
1 package com.bsth.service.schedule.datatools; 1 package com.bsth.service.schedule.datatools;
2 2
  3 +import com.bsth.service.schedule.exception.ScheduleException;
  4 +import com.bsth.service.schedule.utils.DataToolsProperties;
  5 +import com.bsth.service.schedule.utils.DataToolsService;
  6 +import jxl.Cell;
  7 +import jxl.Sheet;
  8 +import jxl.Workbook;
  9 +import jxl.write.Label;
  10 +import jxl.write.WritableSheet;
  11 +import jxl.write.WritableWorkbook;
  12 +import org.apache.commons.lang3.StringUtils;
  13 +import org.joda.time.DateTime;
  14 +import org.slf4j.Logger;
  15 +import org.slf4j.LoggerFactory;
  16 +import org.springframework.beans.factory.annotation.Autowired;
  17 +import org.springframework.beans.factory.annotation.Qualifier;
  18 +import org.springframework.boot.context.properties.EnableConfigurationProperties;
  19 +import org.springframework.stereotype.Service;
  20 +
  21 +import java.io.File;
  22 +import java.io.PrintWriter;
  23 +import java.io.StringWriter;
  24 +import java.util.ArrayList;
  25 +import java.util.HashMap;
  26 +import java.util.List;
  27 +import java.util.Map;
  28 +
3 /** 29 /**
4 * Created by xu on 17/5/16. 30 * Created by xu on 17/5/16.
5 */ 31 */
6 -public class TTInfoDetailDataToolsImpl { 32 +@EnableConfigurationProperties(DataToolsProperties.class)
  33 +@Service(value = "ttInfoDetail_dataTool")
  34 +public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetailForEdit {
  35 + /** 日志记录器 */
  36 + private final static Logger LOGGER = LoggerFactory.getLogger(TTInfoDetailDataToolsImpl.class);
  37 +
  38 + @Autowired
  39 + @Qualifier(value = "dataToolsServiceImpl")
  40 + private DataToolsService dataToolsService;
  41 +
  42 + @Autowired
  43 + private DataToolsProperties dataToolsProperties;
  44 +
  45 + @Override
  46 + public File uploadFile(String filename, byte[] filedata) throws ScheduleException {
  47 + try {
  48 + // 对上传的excel文件做处理,将第一个sheet名字设定为工作表1
  49 + File file = dataToolsService.uploadFile(filename, filedata);
  50 + Workbook workbook = Workbook.getWorkbook(file);
  51 + Sheet sheet = workbook.getSheet(0);
  52 +
  53 + File fileCal = new File(file.getAbsolutePath() + "_sheetChange.xls");
  54 + WritableWorkbook writableWorkbook = Workbook.createWorkbook(fileCal);
  55 + WritableSheet writableSheet = writableWorkbook.createSheet("工作表1", 0);
  56 + for (int i = 0; i < sheet.getRows(); i++) {
  57 + Cell[] cells = sheet.getRow(i);
  58 + for (int j = 0; j < cells.length; j++) {
  59 + writableSheet.addCell(new Label(j, i, cells[j].getContents()));
  60 + }
  61 + }
  62 + writableWorkbook.write();
  63 + writableWorkbook.close();
  64 +
  65 + return fileCal;
  66 +
  67 + } catch (Exception exp) {
  68 + throw new ScheduleException(exp);
  69 + }
  70 + }
  71 +
  72 + @Override
  73 + public void importData(File file, Map<String, Object> params) throws ScheduleException {
  74 + try {
  75 + LOGGER.info("//---------------- 导入时刻表明细 start... ----------------//");
  76 +
  77 + String filename = file.getAbsolutePath(); // xls文件名
  78 + String sheetname = String.valueOf(params.get("sheetname")); // sheet名字
  79 + Long ttid = Long.valueOf(String.valueOf(params.get("ttid"))); // 时刻表id
  80 + Long xlid = Long.valueOf(String.valueOf(params.get("xlid"))); // 线路id
  81 + Integer lineid = Integer.valueOf(String.valueOf(params.get("lineinfo"))); // 线路标准id
  82 + String xlname = String.valueOf(params.get("xlname")); // 线路名字
  83 + String ttname = String.valueOf(params.get("ttname")); // 时刻表名字
  84 +
  85 + LOGGER.info("参数1, xls文件名={},sheet名字={}", filename, sheetname);
  86 + LOGGER.info("参数2, 线路id={},线路名字={}", xlid, xlname);
  87 + LOGGER.info("参数3, 时刻表id={},时刻表名字={}", ttid, ttname);
  88 +
  89 + LOGGER.info("转换xls文件格式成文本格式...");
  90 + // 1、修改已经上传的excel文件,在每个起点站后标示数字,表示第几个班次
  91 + // 2、由于格式问题,需要把内容都转换成字符串
  92 + List<String> colList = new ArrayList<>();
  93 + Workbook workbook = Workbook.getWorkbook(new File(filename));
  94 + Sheet sheet = workbook.getSheet(sheetname);
  95 + Cell[] cells = sheet.getRow(0);
  96 + for (int i = 0; i < cells.length; i++) {
  97 + if (i == 0) {
  98 + colList.add(cells[i].getContents().trim());
  99 + } else {
  100 + colList.add(cells[i].getContents() + i);
  101 + }
  102 + }
  103 +
  104 + File fileCal = new File(filename + "_stringType.xls");
  105 + WritableWorkbook writableWorkbook = Workbook.createWorkbook(fileCal, workbook);
  106 + WritableSheet sheet1 = writableWorkbook.getSheet(sheetname);
  107 + for (int i = 0; i < sheet1.getColumns(); i++) { // 第一行数据
  108 + sheet1.addCell(new Label(i, 0, colList.get(i)));
  109 + }
  110 + for (int i = 1; i < sheet1.getRows(); i++) { // 第二行开始
  111 + Cell[] cells1 = sheet.getRow(i);
  112 + for (int j = 0; j < cells1.length; j++) {
  113 + sheet1.addCell(new Label(j, i, cells1[j].getContents()));
  114 + }
  115 + }
  116 + writableWorkbook.write();
  117 + writableWorkbook.close();
  118 +
  119 + // 2、删除原有数据
  120 + // 操作在ktr内部执行
  121 +
  122 + // 3、导入时刻表
  123 +
  124 + // 计算表头参数
  125 + Workbook book = Workbook.getWorkbook(fileCal);
  126 + Sheet sheet_exp = book.getSheet(sheetname);
  127 + List<String> columnames = new ArrayList<>();
  128 + for (int i = 0; i < sheet_exp.getColumns(); i++) { // 获取第一行,数据,作为列名
  129 + columnames.add(sheet_exp.getCell(i, 0).getContents());
  130 + }
  131 + LOGGER.info("表头={}", StringUtils.join(columnames.toArray(), ","));
  132 +
  133 + // 创建ktr转换所需参数
  134 + Map<String, Object> ktrParms = new HashMap<>();
  135 + File ktrFile = new File(this.getClass().getResource(
  136 + dataToolsProperties.getTtinfodetailMetadatainputktr()).toURI());
  137 +// File ktrFile2 = new File(this.getClass().getResource(
  138 +// dataToolsProperties.getTtinfodetailDatainputktr()).toURI());
  139 + File ktrFile2 = new File(this.getClass().getResource(
  140 + dataToolsProperties.getTtinfodetailDatainputktr2()).toURI());
  141 +
  142 + // 通用参数,转换文件路径,excel输入文件路径,错误输出文件路径
  143 + ktrParms.put("transpath", ktrFile.getAbsolutePath());
  144 + ktrParms.put("filepath", fileCal.getAbsolutePath());
  145 + ktrParms.put("erroroutputdir", dataToolsProperties.getTransErrordir());
  146 +
  147 + // 附加参数
  148 + ktrParms.put("injectktrfile", ktrFile2.getAbsolutePath()); // 注入元数据的ktr文件
  149 + ktrParms.put("sheetname", sheetname); // sheet工作区的名字
  150 + ktrParms.put("lineinfoid", lineid); // 线路标准id
  151 + ktrParms.put("xlname", xlname); // 线路名称
  152 + ktrParms.put("ttinfoname", ttname); // 时刻表名称
  153 + ktrParms.put("ttid", ttid.intValue()); // 时刻表id
  154 + ktrParms.put("excelfieldnames", StringUtils.join(columnames.toArray(), ",")); // 时刻表excel输入字段名,以逗号连接
  155 + columnames.remove(0);
  156 + ktrParms.put("normalizefieldnames", StringUtils.join(columnames.toArray(), ",")); // 数据范式化字段名,以逗号连接
  157 +
  158 + dataToolsService.importData(fileCal, ktrParms);
  159 +
  160 + LOGGER.info("//---------------- 导入时刻表明细 success... ----------------//");
  161 + } catch (Exception exp) {
  162 + LOGGER.info("//---------------- 导入时刻表明细 failed... ----------------//");
  163 +
  164 + StringWriter sw = new StringWriter();
  165 + exp.printStackTrace(new PrintWriter(sw));
  166 + LOGGER.info(sw.toString());
  167 +
  168 + throw new ScheduleException(exp.getMessage());
  169 + }
  170 + }
  171 +
  172 + @Override
  173 + public File exportData(Map<String, Object> params) throws ScheduleException {
  174 + try {
  175 + LOGGER.info("//---------------- 导出时刻表明细 start... ----------------//");
  176 +
  177 + // 创建ktr转换所需参数
  178 + Map<String, Object> ktrParms = new HashMap<>();
  179 + File ktrFile = new File(this.getClass().getResource(
  180 + dataToolsProperties.getTtinfodetailMetaoutput()).toURI());
  181 + File ktrFile2 = new File(this.getClass().getResource(
  182 + dataToolsProperties.getTtinfodetailOutput()).toURI());
  183 +
  184 + // 通用参数,转换文件路径,excel输出文件名
  185 + ktrParms.put("transpath", ktrFile.getAbsolutePath());
  186 + ktrParms.put("filename", String.format("时刻表_(id=%s)_download-", String.valueOf(params.get("ttinfoid"))));
  187 +
  188 + // 附加参数
  189 + ktrParms.put("injectktrfile", ktrFile2.getAbsolutePath()); // 注入元数据的ktr文件
  190 + ktrParms.put("ttinfoid", String.valueOf(params.get("ttinfoid")));
  191 +
  192 + File file = dataToolsService.exportData(ktrParms);
  193 +
  194 + LOGGER.info("//---------------- 导出时刻表明细 success... ----------------//");
  195 +
  196 + return file;
  197 + } catch (Exception exp) {
  198 + LOGGER.info("//---------------- 导出时刻表明细 failed... ----------------//");
  199 +
  200 + StringWriter sw = new StringWriter();
  201 + exp.printStackTrace(new PrintWriter(sw));
  202 + LOGGER.info(sw.toString());
  203 +
  204 + throw new ScheduleException(exp.getMessage());
  205 + }
  206 + }
  207 +
  208 + @Override
  209 + public File exportDataForEdit(Integer xlid, Long ttid) throws ScheduleException {
  210 + try {
  211 + // 创建ktr转换所需参数
  212 + Map<String, Object> ktrParms = new HashMap<>();
  213 + File ktrFile = new File(this.getClass().getResource(
  214 + dataToolsProperties.getTtinfodetailForeditktr()).toURI());
  215 +
  216 + // 通用参数,转换文件路径,excel输出文件名,错误输出文件路径
  217 + ktrParms.put("transpath", ktrFile.getAbsolutePath());
  218 + ktrParms.put("filename", "todo");
  219 +
  220 + // 附加参数
  221 + String outputFilePath = String.format("ttinfodetail_(id=%s)_foredit-%s",
  222 + String.valueOf(ttid), new DateTime().toString("yyyyMMddHHmmss"));
  223 +
  224 + ktrParms.put("tempfilepath", dataToolsProperties.getTransTempdir() + File.separator + outputFilePath); // 数据输出文件路径
  225 + ktrParms.put("xlid", String.valueOf(xlid));
  226 + ktrParms.put("ttid", String.valueOf(ttid));
  227 +
  228 + return dataToolsService.exportData(ktrParms);
  229 + } catch (Exception exp) {
  230 + throw new ScheduleException(exp);
  231 + }
  232 + }
7 } 233 }
src/main/java/com/bsth/service/schedule/datatools/TTInfoDetailForEdit.java
1 package com.bsth.service.schedule.datatools; 1 package com.bsth.service.schedule.datatools;
2 2
  3 +import com.bsth.service.schedule.exception.ScheduleException;
  4 +
  5 +import java.io.File;
  6 +
3 /** 7 /**
4 * Created by xu on 17/5/16. 8 * Created by xu on 17/5/16.
5 */ 9 */
6 public interface TTInfoDetailForEdit { 10 public interface TTInfoDetailForEdit {
  11 + File exportDataForEdit(Integer xlid, Long ttid) throws ScheduleException;
7 } 12 }
src/main/java/com/bsth/service/schedule/impl/BServiceImpl.java
@@ -5,12 +5,6 @@ import com.bsth.repository.BaseRepository; @@ -5,12 +5,6 @@ import com.bsth.repository.BaseRepository;
5 import com.bsth.service.schedule.BService; 5 import com.bsth.service.schedule.BService;
6 import com.bsth.service.schedule.exception.ScheduleException; 6 import com.bsth.service.schedule.exception.ScheduleException;
7 import com.bsth.service.schedule.utils.DataToolsService; 7 import com.bsth.service.schedule.utils.DataToolsService;
8 -import jxl.Cell;  
9 -import jxl.Sheet;  
10 -import jxl.Workbook;  
11 -import jxl.write.Label;  
12 -import jxl.write.WritableSheet;  
13 -import jxl.write.WritableWorkbook;  
14 import org.slf4j.Logger; 8 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory; 9 import org.slf4j.LoggerFactory;
16 import org.springframework.beans.factory.annotation.Autowired; 10 import org.springframework.beans.factory.annotation.Autowired;
@@ -124,39 +118,16 @@ public class BServiceImpl&lt;T, ID extends Serializable&gt; implements BService&lt;T, ID&gt; @@ -124,39 +118,16 @@ public class BServiceImpl&lt;T, ID extends Serializable&gt; implements BService&lt;T, ID&gt;
124 118
125 @Override 119 @Override
126 public File uploadFile(String filename, byte[] filedata) throws ScheduleException { 120 public File uploadFile(String filename, byte[] filedata) throws ScheduleException {
127 - try {  
128 - // 对上传的excel文件做处理,将第一个sheet名字设定为工作表1  
129 - File file = dataToolsService.uploadFile(filename, filedata);  
130 - Workbook workbook = Workbook.getWorkbook(file);  
131 - Sheet sheet = workbook.getSheet(0);  
132 -  
133 - File fileCal = new File(file.getAbsolutePath() + "_sheetChange.xls");  
134 - WritableWorkbook writableWorkbook = Workbook.createWorkbook(fileCal);  
135 - WritableSheet writableSheet = writableWorkbook.createSheet("工作表1", 0);  
136 - for (int i = 0; i < sheet.getRows(); i++) {  
137 - Cell[] cells = sheet.getRow(i);  
138 - for (int j = 0; j < cells.length; j++) {  
139 - writableSheet.addCell(new Label(j, i, cells[j].getContents()));  
140 - }  
141 - }  
142 - writableWorkbook.write();  
143 - writableWorkbook.close();  
144 -  
145 - return fileCal;  
146 -  
147 - } catch (Exception exp) {  
148 - throw new ScheduleException(exp);  
149 - }  
150 - 121 + throw new ScheduleException("子类自己复写此方法!");
151 } 122 }
152 123
153 @Override 124 @Override
154 public void importData(File file, Map<String, Object> params) throws ScheduleException { 125 public void importData(File file, Map<String, Object> params) throws ScheduleException {
155 - dataToolsService.importData(file, params); 126 + throw new ScheduleException("子类自己复写此方法!");
156 } 127 }
157 128
158 @Override 129 @Override
159 public File exportData(Map<String, Object> params) throws ScheduleException { 130 public File exportData(Map<String, Object> params) throws ScheduleException {
160 - return dataToolsService.exportData(params); 131 + throw new ScheduleException("子类自己复写此方法!");
161 } 132 }
162 } 133 }
src/main/java/com/bsth/service/schedule/impl/CarConfigInfoServiceImpl.java
@@ -3,20 +3,16 @@ package com.bsth.service.schedule.impl; @@ -3,20 +3,16 @@ package com.bsth.service.schedule.impl;
3 import com.bsth.entity.schedule.CarConfigInfo; 3 import com.bsth.entity.schedule.CarConfigInfo;
4 import com.bsth.entity.schedule.rule.ScheduleRule1Flat; 4 import com.bsth.entity.schedule.rule.ScheduleRule1Flat;
5 import com.bsth.service.schedule.CarConfigInfoService; 5 import com.bsth.service.schedule.CarConfigInfoService;
6 -import com.bsth.service.schedule.exception.ScheduleException;  
7 import com.bsth.service.schedule.ScheduleRule1FlatService; 6 import com.bsth.service.schedule.ScheduleRule1FlatService;
8 -import com.bsth.service.schedule.utils.DataToolsProperties;  
9 -import org.slf4j.Logger;  
10 -import org.slf4j.LoggerFactory; 7 +import com.bsth.service.schedule.exception.ScheduleException;
  8 +import com.bsth.service.schedule.utils.DataToolsService;
11 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.beans.factory.annotation.Autowired;
12 -import org.springframework.boot.context.properties.EnableConfigurationProperties; 10 +import org.springframework.beans.factory.annotation.Qualifier;
13 import org.springframework.stereotype.Service; 11 import org.springframework.stereotype.Service;
14 import org.springframework.transaction.annotation.Transactional; 12 import org.springframework.transaction.annotation.Transactional;
15 import org.springframework.util.CollectionUtils; 13 import org.springframework.util.CollectionUtils;
16 14
17 import java.io.File; 15 import java.io.File;
18 -import java.io.PrintWriter;  
19 -import java.io.StringWriter;  
20 import java.util.HashMap; 16 import java.util.HashMap;
21 import java.util.List; 17 import java.util.List;
22 import java.util.Map; 18 import java.util.Map;
@@ -24,78 +20,28 @@ import java.util.Map; @@ -24,78 +20,28 @@ import java.util.Map;
24 /** 20 /**
25 * Created by xu on 16/5/9. 21 * Created by xu on 16/5/9.
26 */ 22 */
27 -@EnableConfigurationProperties(DataToolsProperties.class)  
28 @Service 23 @Service
29 public class CarConfigInfoServiceImpl extends BServiceImpl<CarConfigInfo, Long> implements CarConfigInfoService { 24 public class CarConfigInfoServiceImpl extends BServiceImpl<CarConfigInfo, Long> implements CarConfigInfoService {
30 - /** 日志记录器 */  
31 - private static Logger LOGGER = LoggerFactory.getLogger(CarConfigInfoServiceImpl.class);  
32 -  
33 @Autowired 25 @Autowired
34 - private DataToolsProperties dataToolsProperties; 26 + private ScheduleRule1FlatService scheduleRule1FlatService;
35 27
36 @Autowired 28 @Autowired
37 - private ScheduleRule1FlatService scheduleRule1FlatService; 29 + @Qualifier(value = "carConfig_dataTool")
  30 + private DataToolsService dataToolsService;
38 31
39 @Override 32 @Override
40 - public void importData(File file, Map<String, Object> params) throws ScheduleException {  
41 - try {  
42 - LOGGER.info("//---------------- 导入车辆配置信息 start... ----------------//");  
43 - // 创建ktr转换所需参数  
44 - Map<String, Object> ktrParms = new HashMap<>();  
45 - File ktrFile = new File(this.getClass().getResource(  
46 - dataToolsProperties.getCarsconfigDatainputktr()).toURI());  
47 -  
48 - // 通用参数,转换文件路径,excel输入文件路径,错误输出文件路径  
49 - ktrParms.put("transpath", ktrFile.getAbsolutePath());  
50 - ktrParms.put("filepath", file.getAbsolutePath());  
51 - ktrParms.put("erroroutputdir", dataToolsProperties.getTransErrordir());  
52 -  
53 - ktrParms.putAll(params);  
54 -  
55 - super.importData(file, ktrParms);  
56 -  
57 - LOGGER.info("//---------------- 导入车辆配置信息 success... ----------------//");  
58 - } catch (Exception exp) {  
59 - LOGGER.info("//---------------- 导入车辆配置信息 failed... ----------------//");  
60 -  
61 - StringWriter sw = new StringWriter();  
62 - exp.printStackTrace(new PrintWriter(sw));  
63 - LOGGER.info(sw.toString()); 33 + public File uploadFile(String filename, byte[] filedata) throws ScheduleException {
  34 + return dataToolsService.uploadFile(filename, filedata);
  35 + }
64 36
65 - throw new ScheduleException(exp.getMessage());  
66 - } 37 + @Override
  38 + public void importData(File file, Map<String, Object> params) throws ScheduleException {
  39 + dataToolsService.importData(file, params);
67 } 40 }
68 41
69 @Override 42 @Override
70 public File exportData(Map<String, Object> params) throws ScheduleException { 43 public File exportData(Map<String, Object> params) throws ScheduleException {
71 - try {  
72 - LOGGER.info("//---------------- 导出车辆配置信息 start... ----------------//");  
73 - // 创建ktr转换所需参数  
74 - Map<String, Object> ktrParms = new HashMap<>();  
75 - File ktrFile = new File(this.getClass().getResource(  
76 - dataToolsProperties.getCarsconfigDataoutputktr()).toURI());  
77 -  
78 - // 通用参数,转换文件路径,excel输出文件名  
79 - ktrParms.put("transpath", ktrFile.getAbsolutePath());  
80 - ktrParms.put("filename", "车辆配置信息_download-");  
81 -  
82 - ktrParms.putAll(params);  
83 -  
84 - File file = super.exportData(ktrParms);  
85 -  
86 - LOGGER.info("//---------------- 导出车辆配置信息 success... ----------------//");  
87 -  
88 - return file;  
89 -  
90 - } catch (Exception exp) {  
91 - LOGGER.info("//---------------- 导出车辆配置信息 failed... ----------------//");  
92 -  
93 - StringWriter sw = new StringWriter();  
94 - exp.printStackTrace(new PrintWriter(sw));  
95 - LOGGER.info(sw.toString());  
96 -  
97 - throw new ScheduleException(exp.getMessage());  
98 - } 44 + return dataToolsService.exportData(params);
99 } 45 }
100 46
101 @Transactional 47 @Transactional
src/main/java/com/bsth/service/schedule/impl/CarsServiceImpl.java
@@ -3,89 +3,39 @@ package com.bsth.service.schedule.impl; @@ -3,89 +3,39 @@ package com.bsth.service.schedule.impl;
3 import com.bsth.entity.Cars; 3 import com.bsth.entity.Cars;
4 import com.bsth.service.schedule.CarsService; 4 import com.bsth.service.schedule.CarsService;
5 import com.bsth.service.schedule.exception.ScheduleException; 5 import com.bsth.service.schedule.exception.ScheduleException;
6 -import com.bsth.service.schedule.utils.DataToolsProperties;  
7 -import org.slf4j.Logger;  
8 -import org.slf4j.LoggerFactory; 6 +import com.bsth.service.schedule.utils.DataToolsService;
9 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.beans.factory.annotation.Autowired;
10 -import org.springframework.boot.context.properties.EnableConfigurationProperties; 8 +import org.springframework.beans.factory.annotation.Qualifier;
11 import org.springframework.stereotype.Service; 9 import org.springframework.stereotype.Service;
12 import org.springframework.transaction.annotation.Transactional; 10 import org.springframework.transaction.annotation.Transactional;
13 import org.springframework.util.CollectionUtils; 11 import org.springframework.util.CollectionUtils;
14 12
15 import java.io.File; 13 import java.io.File;
16 -import java.io.PrintWriter;  
17 -import java.io.StringWriter;  
18 import java.util.HashMap; 14 import java.util.HashMap;
19 import java.util.Map; 15 import java.util.Map;
20 16
21 /** 17 /**
22 * Created by xu on 16/12/8. 18 * Created by xu on 16/12/8.
23 */ 19 */
24 -@EnableConfigurationProperties(DataToolsProperties.class)  
25 @Service(value = "carsServiceImpl_sc") 20 @Service(value = "carsServiceImpl_sc")
26 public class CarsServiceImpl extends BServiceImpl<Cars, Integer> implements CarsService { 21 public class CarsServiceImpl extends BServiceImpl<Cars, Integer> implements CarsService {
27 - /** 日志记录器 */  
28 - private static final Logger LOGGER = LoggerFactory.getLogger(CarsServiceImpl.class);  
29 -  
30 @Autowired 22 @Autowired
31 - private DataToolsProperties dataToolsProperties; 23 + @Qualifier(value = "cars_dataTool")
  24 + private DataToolsService dataToolsService;
32 25
33 @Override 26 @Override
34 public void importData(File file, Map<String, Object> params) throws ScheduleException { 27 public void importData(File file, Map<String, Object> params) throws ScheduleException {
35 - try {  
36 - LOGGER.info("//---------------- 导入车辆基础信息 start... ----------------//");  
37 - // 创建ktr转换所需参数  
38 - Map<String, Object> ktrParms = new HashMap<>();  
39 - File ktrFile = new File(this.getClass().getResource(  
40 - dataToolsProperties.getCarsDatainputktr()).toURI());  
41 -  
42 - // 通用参数,转换文件路径,excel输入文件路径,错误输出文件路径  
43 - ktrParms.put("transpath", ktrFile.getAbsolutePath());  
44 - ktrParms.put("filepath", file.getAbsolutePath());  
45 - ktrParms.put("erroroutputdir", dataToolsProperties.getTransErrordir());  
46 -  
47 - super.importData(file, ktrParms);  
48 -  
49 - LOGGER.info("//---------------- 导入车辆基础信息 success... ----------------//");  
50 - } catch (Exception exp) {  
51 - LOGGER.info("//---------------- 导入车辆基础信息 failed... ----------------//");  
52 -  
53 - StringWriter sw = new StringWriter();  
54 - exp.printStackTrace(new PrintWriter(sw));  
55 - LOGGER.info(sw.toString());  
56 -  
57 - throw new ScheduleException(exp.getMessage());  
58 - } 28 + dataToolsService.importData(file, params);
59 } 29 }
60 30
61 @Override 31 @Override
62 public File exportData(Map<String, Object> params) throws ScheduleException { 32 public File exportData(Map<String, Object> params) throws ScheduleException {
63 - try {  
64 - LOGGER.info("//---------------- 导出车辆基础信息 start... ----------------//");  
65 - // 创建ktr转换所需参数  
66 - Map<String, Object> ktrParms = new HashMap<>();  
67 - File ktrFile = new File(this.getClass().getResource(  
68 - dataToolsProperties.getCarsDataoutputktr()).toURI());  
69 -  
70 - // 通用参数,转换文件路径,excel输出文件名  
71 - ktrParms.put("transpath", ktrFile.getAbsolutePath());  
72 - ktrParms.put("filename", "车辆基础信息_download-");  
73 -  
74 - File file = super.exportData(ktrParms);  
75 -  
76 - LOGGER.info("//---------------- 导出车辆基础信息 success... ----------------//");  
77 -  
78 - return file;  
79 -  
80 - } catch (Exception exp) {  
81 - LOGGER.info("//---------------- 导出车辆基础信息 failed... ----------------//");  
82 -  
83 - StringWriter sw = new StringWriter();  
84 - exp.printStackTrace(new PrintWriter(sw));  
85 - LOGGER.info(sw.toString()); 33 + return dataToolsService.exportData(params);
  34 + }
86 35
87 - throw new ScheduleException(exp.getMessage());  
88 - } 36 + @Override
  37 + public File uploadFile(String filename, byte[] filedata) throws ScheduleException {
  38 + return dataToolsService.uploadFile(filename, filedata);
89 } 39 }
90 40
91 @Override 41 @Override
src/main/java/com/bsth/service/schedule/impl/EmployeeConfigInfoServiceImpl.java
@@ -3,97 +3,43 @@ package com.bsth.service.schedule.impl; @@ -3,97 +3,43 @@ package com.bsth.service.schedule.impl;
3 import com.bsth.entity.schedule.EmployeeConfigInfo; 3 import com.bsth.entity.schedule.EmployeeConfigInfo;
4 import com.bsth.entity.schedule.rule.ScheduleRule1Flat; 4 import com.bsth.entity.schedule.rule.ScheduleRule1Flat;
5 import com.bsth.service.schedule.EmployeeConfigInfoService; 5 import com.bsth.service.schedule.EmployeeConfigInfoService;
6 -import com.bsth.service.schedule.exception.ScheduleException;  
7 import com.bsth.service.schedule.ScheduleRule1FlatService; 6 import com.bsth.service.schedule.ScheduleRule1FlatService;
8 -import com.bsth.service.schedule.utils.DataToolsProperties;  
9 -import org.slf4j.Logger;  
10 -import org.slf4j.LoggerFactory; 7 +import com.bsth.service.schedule.exception.ScheduleException;
  8 +import com.bsth.service.schedule.utils.DataToolsService;
11 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.beans.factory.annotation.Autowired;
12 -import org.springframework.boot.context.properties.EnableConfigurationProperties; 10 +import org.springframework.beans.factory.annotation.Qualifier;
13 import org.springframework.stereotype.Service; 11 import org.springframework.stereotype.Service;
14 import org.springframework.transaction.annotation.Transactional; 12 import org.springframework.transaction.annotation.Transactional;
15 import org.springframework.util.CollectionUtils; 13 import org.springframework.util.CollectionUtils;
16 14
17 import java.io.File; 15 import java.io.File;
18 -import java.io.PrintWriter;  
19 -import java.io.StringWriter;  
20 import java.util.*; 16 import java.util.*;
21 17
22 /** 18 /**
23 * Created by xu on 16/5/10. 19 * Created by xu on 16/5/10.
24 */ 20 */
25 -@EnableConfigurationProperties(DataToolsProperties.class)  
26 @Service 21 @Service
27 public class EmployeeConfigInfoServiceImpl extends BServiceImpl<EmployeeConfigInfo, Long> implements EmployeeConfigInfoService { 22 public class EmployeeConfigInfoServiceImpl extends BServiceImpl<EmployeeConfigInfo, Long> implements EmployeeConfigInfoService {
28 - /** 日志记录器 */  
29 - private static Logger LOGGER = LoggerFactory.getLogger(EmployeeConfigInfoServiceImpl.class);  
30 -  
31 @Autowired 23 @Autowired
32 - private DataToolsProperties dataToolsProperties; 24 + private ScheduleRule1FlatService scheduleRule1FlatService;
33 25
34 @Autowired 26 @Autowired
35 - private ScheduleRule1FlatService scheduleRule1FlatService; 27 + @Qualifier(value = "employeeConfig_dataTool")
  28 + private DataToolsService dataToolsService;
36 29
37 @Override 30 @Override
38 - public void importData(File file, Map<String, Object> params) throws ScheduleException {  
39 - try {  
40 - LOGGER.info("//---------------- 导入人员配置信息 start... ----------------//");  
41 - // 创建ktr转换所需参数  
42 - Map<String, Object> ktrParms = new HashMap<>();  
43 - File ktrFile = new File(this.getClass().getResource(  
44 - dataToolsProperties.getEmployeesconfigDatainputktr()).toURI());  
45 -  
46 - // 通用参数,转换文件路径,excel输入文件路径,错误输出文件路径  
47 - ktrParms.put("transpath", ktrFile.getAbsolutePath());  
48 - ktrParms.put("filepath", file.getAbsolutePath());  
49 - ktrParms.put("erroroutputdir", dataToolsProperties.getTransErrordir());  
50 -  
51 - ktrParms.putAll(params);  
52 -  
53 - super.importData(file, ktrParms);  
54 -  
55 - LOGGER.info("//---------------- 导入人员配置信息 success... ----------------//");  
56 - } catch (Exception exp) {  
57 - LOGGER.info("//---------------- 导入人员配置信息 failed... ----------------//");  
58 -  
59 - StringWriter sw = new StringWriter();  
60 - exp.printStackTrace(new PrintWriter(sw));  
61 - LOGGER.info(sw.toString()); 31 + public File uploadFile(String filename, byte[] filedata) throws ScheduleException {
  32 + return dataToolsService.uploadFile(filename, filedata);
  33 + }
62 34
63 - throw new ScheduleException(exp.getMessage());  
64 - } 35 + @Override
  36 + public void importData(File file, Map<String, Object> params) throws ScheduleException {
  37 + dataToolsService.importData(file, params);
65 } 38 }
66 39
67 @Override 40 @Override
68 public File exportData(Map<String, Object> params) throws ScheduleException { 41 public File exportData(Map<String, Object> params) throws ScheduleException {
69 - try {  
70 - LOGGER.info("//---------------- 导出人员配置信息 start... ----------------//");  
71 - // 创建ktr转换所需参数  
72 - Map<String, Object> ktrParms = new HashMap<>();  
73 - File ktrFile = new File(this.getClass().getResource(  
74 - dataToolsProperties.getEmployeesconfigDataoutputktr()).toURI());  
75 -  
76 - // 通用参数,转换文件路径,excel输出文件名  
77 - ktrParms.put("transpath", ktrFile.getAbsolutePath());  
78 - ktrParms.put("filename", "人员配置信息_download-");  
79 -  
80 - ktrParms.putAll(params);  
81 -  
82 - File file = super.exportData(ktrParms);  
83 -  
84 - LOGGER.info("//---------------- 导出人员配置信息 success... ----------------//");  
85 -  
86 - return file;  
87 -  
88 - } catch (Exception exp) {  
89 - LOGGER.info("//---------------- 导出人员配置信息 failed... ----------------//");  
90 -  
91 - StringWriter sw = new StringWriter();  
92 - exp.printStackTrace(new PrintWriter(sw));  
93 - LOGGER.info(sw.toString());  
94 -  
95 - throw new ScheduleException(exp.getMessage());  
96 - } 42 + return dataToolsService.exportData(params);
97 } 43 }
98 44
99 @Transactional 45 @Transactional
src/main/java/com/bsth/service/schedule/impl/EmployeeServiceImpl.java
@@ -3,89 +3,39 @@ package com.bsth.service.schedule.impl; @@ -3,89 +3,39 @@ package com.bsth.service.schedule.impl;
3 import com.bsth.entity.Personnel; 3 import com.bsth.entity.Personnel;
4 import com.bsth.service.schedule.EmployeeService; 4 import com.bsth.service.schedule.EmployeeService;
5 import com.bsth.service.schedule.exception.ScheduleException; 5 import com.bsth.service.schedule.exception.ScheduleException;
6 -import com.bsth.service.schedule.utils.DataToolsProperties;  
7 -import org.slf4j.Logger;  
8 -import org.slf4j.LoggerFactory; 6 +import com.bsth.service.schedule.utils.DataToolsService;
9 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.beans.factory.annotation.Autowired;
10 -import org.springframework.boot.context.properties.EnableConfigurationProperties; 8 +import org.springframework.beans.factory.annotation.Qualifier;
11 import org.springframework.stereotype.Service; 9 import org.springframework.stereotype.Service;
12 import org.springframework.transaction.annotation.Transactional; 10 import org.springframework.transaction.annotation.Transactional;
13 import org.springframework.util.CollectionUtils; 11 import org.springframework.util.CollectionUtils;
14 12
15 import java.io.File; 13 import java.io.File;
16 -import java.io.PrintWriter;  
17 -import java.io.StringWriter;  
18 import java.util.HashMap; 14 import java.util.HashMap;
19 import java.util.Map; 15 import java.util.Map;
20 16
21 /** 17 /**
22 * Created by xu on 16/12/15. 18 * Created by xu on 16/12/15.
23 */ 19 */
24 -@EnableConfigurationProperties(DataToolsProperties.class)  
25 @Service 20 @Service
26 public class EmployeeServiceImpl extends BServiceImpl<Personnel, Integer> implements EmployeeService { 21 public class EmployeeServiceImpl extends BServiceImpl<Personnel, Integer> implements EmployeeService {
27 - /** 日志记录器 */  
28 - private static final Logger LOGGER = LoggerFactory.getLogger(EmployeeServiceImpl.class);  
29 -  
30 @Autowired 22 @Autowired
31 - private DataToolsProperties dataToolsProperties; 23 + @Qualifier(value = "employee_dataTool")
  24 + private DataToolsService dataToolsService;
32 25
33 @Override 26 @Override
34 - public void importData(File file, Map<String, Object> params) throws ScheduleException {  
35 - try {  
36 - LOGGER.info("//---------------- 导入人员基础信息 start... ----------------//");  
37 - // 创建ktr转换所需参数  
38 - Map<String, Object> ktrParms = new HashMap<>();  
39 - File ktrFile = new File(this.getClass().getResource(  
40 - dataToolsProperties.getEmployeesDatainputktr()).toURI());  
41 -  
42 - // 通用参数,转换文件路径,excel输入文件路径,错误输出文件路径  
43 - ktrParms.put("transpath", ktrFile.getAbsolutePath());  
44 - ktrParms.put("filepath", file.getAbsolutePath());  
45 - ktrParms.put("erroroutputdir", dataToolsProperties.getTransErrordir());  
46 -  
47 - super.importData(file, ktrParms);  
48 -  
49 - LOGGER.info("//---------------- 导入人员基础信息 success... ----------------//");  
50 - } catch (Exception exp) {  
51 - LOGGER.info("//---------------- 导入人员基础信息 failed... ----------------//");  
52 -  
53 - StringWriter sw = new StringWriter();  
54 - exp.printStackTrace(new PrintWriter(sw));  
55 - LOGGER.info(sw.toString()); 27 + public File uploadFile(String filename, byte[] filedata) throws ScheduleException {
  28 + return dataToolsService.uploadFile(filename, filedata);
  29 + }
56 30
57 - throw new ScheduleException(exp.getMessage());  
58 - } 31 + @Override
  32 + public void importData(File file, Map<String, Object> params) throws ScheduleException {
  33 + dataToolsService.importData(file, params);
59 } 34 }
60 35
61 @Override 36 @Override
62 public File exportData(Map<String, Object> params) throws ScheduleException { 37 public File exportData(Map<String, Object> params) throws ScheduleException {
63 - try {  
64 - LOGGER.info("//---------------- 导出人员基础信息 start... ----------------//");  
65 - // 创建ktr转换所需参数  
66 - Map<String, Object> ktrParms = new HashMap<>();  
67 - File ktrFile = new File(this.getClass().getResource(  
68 - dataToolsProperties.getEmployeesDataoutputktr()).toURI());  
69 -  
70 - // 通用参数,转换文件路径,excel输出文件名  
71 - ktrParms.put("transpath", ktrFile.getAbsolutePath());  
72 - ktrParms.put("filename", "人员基础信息_download-");  
73 -  
74 - File file = super.exportData(ktrParms);  
75 -  
76 - LOGGER.info("//---------------- 导出人员基础信息 success... ----------------//");  
77 -  
78 - return file;  
79 -  
80 - } catch (Exception exp) {  
81 - LOGGER.info("//---------------- 导出人员基础信息 failed... ----------------//");  
82 -  
83 - StringWriter sw = new StringWriter();  
84 - exp.printStackTrace(new PrintWriter(sw));  
85 - LOGGER.info(sw.toString());  
86 -  
87 - throw new ScheduleException(exp.getMessage());  
88 - } 38 + return dataToolsService.exportData(params);
89 } 39 }
90 40
91 @Override 41 @Override
src/main/java/com/bsth/service/schedule/impl/GuideboardInfoServiceImpl.java
@@ -5,18 +5,14 @@ import com.bsth.entity.schedule.TTInfoDetail; @@ -5,18 +5,14 @@ import com.bsth.entity.schedule.TTInfoDetail;
5 import com.bsth.service.schedule.GuideboardInfoService; 5 import com.bsth.service.schedule.GuideboardInfoService;
6 import com.bsth.service.schedule.TTInfoDetailService; 6 import com.bsth.service.schedule.TTInfoDetailService;
7 import com.bsth.service.schedule.exception.ScheduleException; 7 import com.bsth.service.schedule.exception.ScheduleException;
8 -import com.bsth.service.schedule.utils.DataToolsProperties;  
9 -import org.slf4j.Logger;  
10 -import org.slf4j.LoggerFactory; 8 +import com.bsth.service.schedule.utils.DataToolsService;
11 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.beans.factory.annotation.Autowired;
12 -import org.springframework.boot.context.properties.EnableConfigurationProperties; 10 +import org.springframework.beans.factory.annotation.Qualifier;
13 import org.springframework.stereotype.Service; 11 import org.springframework.stereotype.Service;
14 import org.springframework.util.CollectionUtils; 12 import org.springframework.util.CollectionUtils;
15 13
16 import javax.transaction.Transactional; 14 import javax.transaction.Transactional;
17 import java.io.File; 15 import java.io.File;
18 -import java.io.PrintWriter;  
19 -import java.io.StringWriter;  
20 import java.util.HashMap; 16 import java.util.HashMap;
21 import java.util.List; 17 import java.util.List;
22 import java.util.Map; 18 import java.util.Map;
@@ -24,14 +20,11 @@ import java.util.Map; @@ -24,14 +20,11 @@ import java.util.Map;
24 /** 20 /**
25 * 路牌信息服务。 21 * 路牌信息服务。
26 */ 22 */
27 -@EnableConfigurationProperties(DataToolsProperties.class)  
28 @Service 23 @Service
29 public class GuideboardInfoServiceImpl extends BServiceImpl<GuideboardInfo, Long> implements GuideboardInfoService { 24 public class GuideboardInfoServiceImpl extends BServiceImpl<GuideboardInfo, Long> implements GuideboardInfoService {
30 - /** 日志记录器 */  
31 - private static final Logger LOGGER = LoggerFactory.getLogger(GuideboardInfoServiceImpl.class);  
32 -  
33 @Autowired 25 @Autowired
34 - private DataToolsProperties dataToolsProperties; 26 + @Qualifier(value = "gbInfo_dataTool")
  27 + private DataToolsService dataToolsService;
35 28
36 @Autowired 29 @Autowired
37 private TTInfoDetailService ttInfoDetailService; 30 private TTInfoDetailService ttInfoDetailService;
@@ -109,65 +102,18 @@ public class GuideboardInfoServiceImpl extends BServiceImpl&lt;GuideboardInfo, Long @@ -109,65 +102,18 @@ public class GuideboardInfoServiceImpl extends BServiceImpl&lt;GuideboardInfo, Long
109 } 102 }
110 103
111 @Override 104 @Override
112 - public void importData(File file, Map<String, Object> params) throws ScheduleException {  
113 - try {  
114 - LOGGER.info("//---------------- 导入路牌信息 start... ----------------//");  
115 - // 创建ktr转换所需参数  
116 - Map<String, Object> ktrParms = new HashMap<>();  
117 - File ktrFile = new File(this.getClass().getResource(  
118 - dataToolsProperties.getGuideboardsDatainputktr()).toURI());  
119 -  
120 - // 通用参数,转换文件路径,excel输入文件路径,错误输出文件路径  
121 - ktrParms.put("transpath", ktrFile.getAbsolutePath());  
122 - ktrParms.put("filepath", file.getAbsolutePath());  
123 - ktrParms.put("erroroutputdir", dataToolsProperties.getTransErrordir());  
124 -  
125 - ktrParms.putAll(params);  
126 -  
127 - super.importData(file, ktrParms);  
128 -  
129 - LOGGER.info("//---------------- 导入路牌信息 success... ----------------//");  
130 - } catch (Exception exp) {  
131 - LOGGER.info("//---------------- 导入路牌信息 failed... ----------------//");  
132 -  
133 - StringWriter sw = new StringWriter();  
134 - exp.printStackTrace(new PrintWriter(sw));  
135 - LOGGER.info(sw.toString()); 105 + public File uploadFile(String filename, byte[] filedata) throws ScheduleException {
  106 + return dataToolsService.uploadFile(filename, filedata);
  107 + }
136 108
137 - throw new ScheduleException(exp.getMessage());  
138 - } 109 + @Override
  110 + public void importData(File file, Map<String, Object> params) throws ScheduleException {
  111 + dataToolsService.importData(file, params);
139 } 112 }
140 113
141 @Override 114 @Override
142 public File exportData(Map<String, Object> params) throws ScheduleException { 115 public File exportData(Map<String, Object> params) throws ScheduleException {
143 - try {  
144 - LOGGER.info("//---------------- 导出路牌信息 start... ----------------//");  
145 - // 创建ktr转换所需参数  
146 - Map<String, Object> ktrParms = new HashMap<>();  
147 - File ktrFile = new File(this.getClass().getResource(  
148 - dataToolsProperties.getGuideboardsDataoutputktr()).toURI());  
149 -  
150 - // 通用参数,转换文件路径,excel输出文件名  
151 - ktrParms.put("transpath", ktrFile.getAbsolutePath());  
152 - ktrParms.put("filename", "路牌信息_download-");  
153 -  
154 - ktrParms.putAll(params);  
155 -  
156 - File file = super.exportData(ktrParms);  
157 -  
158 - LOGGER.info("//---------------- 导出路牌信息 success... ----------------//");  
159 -  
160 - return file;  
161 -  
162 - } catch (Exception exp) {  
163 - LOGGER.info("//---------------- 导出路牌信息 failed... ----------------//");  
164 -  
165 - StringWriter sw = new StringWriter();  
166 - exp.printStackTrace(new PrintWriter(sw));  
167 - LOGGER.info(sw.toString());  
168 -  
169 - throw new ScheduleException(exp.getMessage());  
170 - } 116 + return dataToolsService.exportData(params);
171 } 117 }
172 118
173 } 119 }
src/main/java/com/bsth/service/schedule/impl/ScheduleRule1FlatServiceImpl.java
@@ -3,90 +3,35 @@ package com.bsth.service.schedule.impl; @@ -3,90 +3,35 @@ package com.bsth.service.schedule.impl;
3 import com.bsth.entity.schedule.rule.ScheduleRule1Flat; 3 import com.bsth.entity.schedule.rule.ScheduleRule1Flat;
4 import com.bsth.service.schedule.ScheduleRule1FlatService; 4 import com.bsth.service.schedule.ScheduleRule1FlatService;
5 import com.bsth.service.schedule.exception.ScheduleException; 5 import com.bsth.service.schedule.exception.ScheduleException;
6 -import com.bsth.service.schedule.utils.DataToolsProperties;  
7 -import org.slf4j.Logger;  
8 -import org.slf4j.LoggerFactory; 6 +import com.bsth.service.schedule.utils.DataToolsService;
9 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.beans.factory.annotation.Autowired;
10 -import org.springframework.boot.context.properties.EnableConfigurationProperties; 8 +import org.springframework.beans.factory.annotation.Qualifier;
11 import org.springframework.stereotype.Service; 9 import org.springframework.stereotype.Service;
12 10
13 import java.io.File; 11 import java.io.File;
14 -import java.io.PrintWriter;  
15 -import java.io.StringWriter;  
16 -import java.util.HashMap;  
17 import java.util.Map; 12 import java.util.Map;
18 13
19 /** 14 /**
20 * Created by xu on 16/7/4. 15 * Created by xu on 16/7/4.
21 */ 16 */
22 -@EnableConfigurationProperties(DataToolsProperties.class)  
23 @Service 17 @Service
24 public class ScheduleRule1FlatServiceImpl extends BServiceImpl<ScheduleRule1Flat, Long> implements ScheduleRule1FlatService { 18 public class ScheduleRule1FlatServiceImpl extends BServiceImpl<ScheduleRule1Flat, Long> implements ScheduleRule1FlatService {
25 - /** 日志记录器 */  
26 - private static Logger LOGGER = LoggerFactory.getLogger(ScheduleRule1FlatServiceImpl.class);  
27 -  
28 @Autowired 19 @Autowired
29 - private DataToolsProperties dataToolsProperties; 20 + @Qualifier(value = "scheduleRule_dataTool")
  21 + private DataToolsService dataToolsService;
30 22
31 @Override 23 @Override
32 - public void importData(File file, Map<String, Object> params) throws ScheduleException {  
33 - try {  
34 - LOGGER.info("//---------------- 导入排版规则信息 start... ----------------//");  
35 - // 创建ktr转换所需参数  
36 - Map<String, Object> ktrParms = new HashMap<>();  
37 - File ktrFile = new File(this.getClass().getResource(  
38 - dataToolsProperties.getScheduleruleDatainputktr()).toURI());  
39 -  
40 - // 通用参数,转换文件路径,excel输入文件路径,错误输出文件路径  
41 - ktrParms.put("transpath", ktrFile.getAbsolutePath());  
42 - ktrParms.put("filepath", file.getAbsolutePath());  
43 - ktrParms.put("erroroutputdir", dataToolsProperties.getTransErrordir());  
44 -  
45 - ktrParms.putAll(params);  
46 -  
47 - super.importData(file, ktrParms);  
48 -  
49 - LOGGER.info("//---------------- 导入排版规则信息 success... ----------------//");  
50 - } catch (Exception exp) {  
51 - LOGGER.info("//---------------- 导入排版规则信息 failed... ----------------//");  
52 -  
53 - StringWriter sw = new StringWriter();  
54 - exp.printStackTrace(new PrintWriter(sw));  
55 - LOGGER.info(sw.toString()); 24 + public File uploadFile(String filename, byte[] filedata) throws ScheduleException {
  25 + return dataToolsService.uploadFile(filename, filedata);
  26 + }
56 27
57 - throw new ScheduleException(exp.getMessage());  
58 - } 28 + @Override
  29 + public void importData(File file, Map<String, Object> params) throws ScheduleException {
  30 + dataToolsService.importData(file, params);
59 } 31 }
60 32
61 @Override 33 @Override
62 public File exportData(Map<String, Object> params) throws ScheduleException { 34 public File exportData(Map<String, Object> params) throws ScheduleException {
63 - try {  
64 - LOGGER.info("//---------------- 导出排版规则信息 start... ----------------//");  
65 - // 创建ktr转换所需参数  
66 - Map<String, Object> ktrParms = new HashMap<>();  
67 - File ktrFile = new File(this.getClass().getResource(  
68 - dataToolsProperties.getScheduleruleOutput()).toURI());  
69 -  
70 - // 通用参数,转换文件路径,excel输出文件名  
71 - ktrParms.put("transpath", ktrFile.getAbsolutePath());  
72 - ktrParms.put("filename", "排版规则信息_download-");  
73 -  
74 - ktrParms.putAll(params);  
75 -  
76 - File file = super.exportData(ktrParms);  
77 -  
78 - LOGGER.info("//---------------- 导出排版规则信息 success... ----------------//");  
79 -  
80 - return file;  
81 -  
82 - } catch (Exception exp) {  
83 - LOGGER.info("//---------------- 导出排版规则信息 failed... ----------------//");  
84 -  
85 - StringWriter sw = new StringWriter();  
86 - exp.printStackTrace(new PrintWriter(sw));  
87 - LOGGER.info(sw.toString());  
88 -  
89 - throw new ScheduleException(exp.getMessage());  
90 - } 35 + return dataToolsService.exportData(params);
91 } 36 }
92 } 37 }
src/main/java/com/bsth/service/schedule/impl/TTInfoDetailServiceImpl.java
@@ -21,6 +21,7 @@ import com.bsth.service.LineInformationService; @@ -21,6 +21,7 @@ import com.bsth.service.LineInformationService;
21 import com.bsth.service.StationRouteService; 21 import com.bsth.service.StationRouteService;
22 import com.bsth.service.schedule.GuideboardInfoService; 22 import com.bsth.service.schedule.GuideboardInfoService;
23 import com.bsth.service.schedule.TTInfoDetailService; 23 import com.bsth.service.schedule.TTInfoDetailService;
  24 +import com.bsth.service.schedule.datatools.TTInfoDetailForEdit;
24 import com.bsth.service.schedule.exception.ScheduleException; 25 import com.bsth.service.schedule.exception.ScheduleException;
25 import com.bsth.service.schedule.utils.DataToolsProperties; 26 import com.bsth.service.schedule.utils.DataToolsProperties;
26 import com.bsth.service.schedule.utils.DataToolsService; 27 import com.bsth.service.schedule.utils.DataToolsService;
@@ -53,7 +54,6 @@ import java.util.regex.Pattern; @@ -53,7 +54,6 @@ import java.util.regex.Pattern;
53 * Created by xu on 17/1/3. 54 * Created by xu on 17/1/3.
54 */ 55 */
55 @Service 56 @Service
56 -@EnableConfigurationProperties(DataToolsProperties.class)  
57 public class TTInfoDetailServiceImpl extends BServiceImpl<TTInfoDetail, Long> implements TTInfoDetailService { 57 public class TTInfoDetailServiceImpl extends BServiceImpl<TTInfoDetail, Long> implements TTInfoDetailService {
58 /** 日志记录器 */ 58 /** 日志记录器 */
59 private static final Logger LOGGER = LoggerFactory.getLogger(TTInfoDetailServiceImpl.class); 59 private static final Logger LOGGER = LoggerFactory.getLogger(TTInfoDetailServiceImpl.class);
@@ -82,11 +82,16 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im @@ -82,11 +82,16 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im
82 private SysUserRepository sysUserRepository; 82 private SysUserRepository sysUserRepository;
83 @Autowired 83 @Autowired
84 private GuideboardInfoRepository guideboardInfoRepository; 84 private GuideboardInfoRepository guideboardInfoRepository;
  85 +
85 @Autowired 86 @Autowired
86 - @Qualifier(value = "dataToolsServiceImpl") 87 + @Qualifier(value = "ttInfoDetail_dataTool")
87 private DataToolsService dataToolsService; 88 private DataToolsService dataToolsService;
88 89
89 @Autowired 90 @Autowired
  91 + @Qualifier(value = "ttInfoDetail_dataTool")
  92 + private TTInfoDetailForEdit ttInfoDetailForEdit;
  93 +
  94 + @Autowired
90 private JdbcTemplate jdbcTemplate; 95 private JdbcTemplate jdbcTemplate;
91 96
92 /** 97 /**
@@ -115,7 +120,6 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im @@ -115,7 +120,6 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im
115 120
116 @Override 121 @Override
117 public File uploadFile(String filename, byte[] filedata) throws ScheduleException { 122 public File uploadFile(String filename, byte[] filedata) throws ScheduleException {
118 -  
119 return dataToolsService.uploadFile(filename, filedata); 123 return dataToolsService.uploadFile(filename, filedata);
120 } 124 }
121 125
@@ -123,175 +127,26 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im @@ -123,175 +127,26 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im
123 public void importData( 127 public void importData(
124 File file, 128 File file,
125 Map<String, Object> params) throws ScheduleException { 129 Map<String, Object> params) throws ScheduleException {
126 -  
127 - try {  
128 - LOGGER.info("//---------------- 导入时刻表明细 start... ----------------//");  
129 -  
130 - String filename = file.getAbsolutePath(); // xls文件名  
131 - String sheetname = String.valueOf(params.get("sheetname")); // sheet名字  
132 - Long ttid = Long.valueOf(String.valueOf(params.get("ttid"))); // 时刻表id  
133 - Long xlid = Long.valueOf(String.valueOf(params.get("xlid"))); // 线路id  
134 - Integer lineid = Integer.valueOf(String.valueOf(params.get("lineinfo"))); // 线路标准id  
135 - String xlname = String.valueOf(params.get("xlname")); // 线路名字  
136 - String ttname = String.valueOf(params.get("ttname")); // 时刻表名字  
137 -  
138 - LOGGER.info("参数1, xls文件名={},sheet名字={}", filename, sheetname);  
139 - LOGGER.info("参数2, 线路id={},线路名字={}", xlid, xlname);  
140 - LOGGER.info("参数3, 时刻表id={},时刻表名字={}", ttid, ttname);  
141 -  
142 - LOGGER.info("转换xls文件格式成文本格式...");  
143 - // 1、修改已经上传的excel文件,在每个起点站后标示数字,表示第几个班次  
144 - // 2、由于格式问题,需要把内容都转换成字符串  
145 - List<String> colList = new ArrayList<>();  
146 - Workbook workbook = Workbook.getWorkbook(new File(filename));  
147 - Sheet sheet = workbook.getSheet(sheetname);  
148 - Cell[] cells = sheet.getRow(0);  
149 - for (int i = 0; i < cells.length; i++) {  
150 - if (i == 0) {  
151 - colList.add(cells[i].getContents().trim());  
152 - } else {  
153 - colList.add(cells[i].getContents() + i);  
154 - }  
155 - }  
156 -  
157 - File fileCal = new File(filename + "_stringType.xls");  
158 - WritableWorkbook writableWorkbook = Workbook.createWorkbook(fileCal, workbook);  
159 - WritableSheet sheet1 = writableWorkbook.getSheet(sheetname);  
160 - for (int i = 0; i < sheet1.getColumns(); i++) { // 第一行数据  
161 - sheet1.addCell(new Label(i, 0, colList.get(i)));  
162 - }  
163 - for (int i = 1; i < sheet1.getRows(); i++) { // 第二行开始  
164 - Cell[] cells1 = sheet.getRow(i);  
165 - for (int j = 0; j < cells1.length; j++) {  
166 - sheet1.addCell(new Label(j, i, cells1[j].getContents()));  
167 - }  
168 - }  
169 - writableWorkbook.write();  
170 - writableWorkbook.close();  
171 -  
172 - // 2、删除原有数据  
173 - // 操作在ktr内部执行  
174 -  
175 - // 3、导入时刻表  
176 - // 获取停车场名字  
177 - LOGGER.info("获取停车场名字...");  
178 - LineInformation lineInformation = lineInformationService.findById(lineid);  
179 - Map<String, Object> p1 = new HashMap<>();  
180 - p1.put("parkCode_eq", lineInformation.getCarPark());  
181 - List<CarPark> carParkList = (List<CarPark>) carParkService.list(p1);  
182 - String tccname = carParkList.get(0).getParkName();  
183 - LOGGER.info("停车场名字={}", tccname);  
184 -  
185 -  
186 - // 计算表头参数  
187 - Workbook book = Workbook.getWorkbook(fileCal);  
188 - Sheet sheet_exp = book.getSheet(sheetname);  
189 - List<String> columnames = new ArrayList<>();  
190 - for (int i = 0; i < sheet_exp.getColumns(); i++) { // 获取第一行,数据,作为列名  
191 - columnames.add(sheet_exp.getCell(i, 0).getContents());  
192 - }  
193 - LOGGER.info("表头={}", StringUtils.join(columnames.toArray(), ","));  
194 -  
195 - // 创建ktr转换所需参数  
196 - Map<String, Object> ktrParms = new HashMap<>();  
197 - File ktrFile = new File(this.getClass().getResource(  
198 - dataToolsProperties.getTtinfodetailMetadatainputktr()).toURI());  
199 -// File ktrFile2 = new File(this.getClass().getResource(  
200 -// dataToolsProperties.getTtinfodetailDatainputktr()).toURI());  
201 - File ktrFile2 = new File(this.getClass().getResource(  
202 - dataToolsProperties.getTtinfodetailDatainputktr2()).toURI());  
203 -  
204 - // 通用参数,转换文件路径,excel输入文件路径,错误输出文件路径  
205 - ktrParms.put("transpath", ktrFile.getAbsolutePath());  
206 - ktrParms.put("filepath", fileCal.getAbsolutePath());  
207 - ktrParms.put("erroroutputdir", dataToolsProperties.getTransErrordir());  
208 -  
209 - // 附加参数  
210 - ktrParms.put("injectktrfile", ktrFile2.getAbsolutePath()); // 注入元数据的ktr文件  
211 - ktrParms.put("sheetname", sheetname); // sheet工作区的名字  
212 - ktrParms.put("xlname", xlname); // 线路名称  
213 - ktrParms.put("ttinfoname", ttname); // 时刻表名称  
214 - ktrParms.put("ttid", ttid.intValue()); // 时刻表id  
215 - ktrParms.put("tccname", tccname); // 停车场名字  
216 - ktrParms.put("excelfieldnames", StringUtils.join(columnames.toArray(), ",")); // 时刻表excel输入字段名,以逗号连接  
217 - columnames.remove(0);  
218 - ktrParms.put("normalizefieldnames", StringUtils.join(columnames.toArray(), ",")); // 数据范式化字段名,以逗号连接  
219 -  
220 - super.importData(fileCal, ktrParms);  
221 -  
222 - LOGGER.info("//---------------- 导入时刻表明细 success... ----------------//");  
223 - } catch (Exception exp) {  
224 - LOGGER.info("//---------------- 导入时刻表明细 failed... ----------------//");  
225 -  
226 - StringWriter sw = new StringWriter();  
227 - exp.printStackTrace(new PrintWriter(sw));  
228 - LOGGER.info(sw.toString());  
229 -  
230 - throw new ScheduleException(exp.getMessage());  
231 - } 130 + dataToolsService.importData(file, params);
232 } 131 }
233 132
234 @Override 133 @Override
235 public File exportData(Map<String, Object> params) throws ScheduleException { 134 public File exportData(Map<String, Object> params) throws ScheduleException {
236 - try {  
237 - LOGGER.info("//---------------- 导出时刻表明细 start... ----------------//");  
238 -  
239 - // 创建ktr转换所需参数  
240 - Map<String, Object> ktrParms = new HashMap<>();  
241 - File ktrFile = new File(this.getClass().getResource(  
242 - dataToolsProperties.getTtinfodetailMetaoutput()).toURI());  
243 - File ktrFile2 = new File(this.getClass().getResource(  
244 - dataToolsProperties.getTtinfodetailOutput()).toURI());  
245 -  
246 - // 通用参数,转换文件路径,excel输出文件名  
247 - ktrParms.put("transpath", ktrFile.getAbsolutePath());  
248 - ktrParms.put("filename", String.format("时刻表_(id=%s)_download-", String.valueOf(params.get("ttinfoid"))));  
249 -  
250 - // 附加参数  
251 - ktrParms.put("injectktrfile", ktrFile2.getAbsolutePath()); // 注入元数据的ktr文件  
252 - ktrParms.put("ttinfoid", String.valueOf(params.get("ttinfoid")));  
253 -  
254 - File file = super.exportData(ktrParms);  
255 -  
256 - LOGGER.info("//---------------- 导出时刻表明细 success... ----------------//");  
257 -  
258 - return file;  
259 - } catch (Exception exp) {  
260 - LOGGER.info("//---------------- 导出时刻表明细 failed... ----------------//");  
261 -  
262 - StringWriter sw = new StringWriter();  
263 - exp.printStackTrace(new PrintWriter(sw));  
264 - LOGGER.info(sw.toString());  
265 -  
266 - throw new ScheduleException(exp.getMessage());  
267 - } 135 + return dataToolsService.exportData(params);
268 } 136 }
269 137
270 @Override 138 @Override
271 - public EditInfo getEditInfo(Integer xlid, Long ttid) throws ScheduleException { 139 + public TTInfoDetailService.EditInfo getEditInfo(Integer xlid, Long ttid) throws ScheduleException {
272 try { 140 try {
273 LOGGER.info("//---------------- 时刻表编辑用数据输出 start... ----------------//"); 141 LOGGER.info("//---------------- 时刻表编辑用数据输出 start... ----------------//");
274 142
275 - // 创建ktr转换所需参数  
276 - Map<String, Object> ktrParms = new HashMap<>();  
277 - File ktrFile = new File(this.getClass().getResource(  
278 - dataToolsProperties.getTtinfodetailForeditktr()).toURI());  
279 -  
280 - // 通用参数,转换文件路径,excel输出文件名,错误输出文件路径  
281 - ktrParms.put("transpath", ktrFile.getAbsolutePath());  
282 - ktrParms.put("filename", "todo");  
283 -  
284 // 附加参数 143 // 附加参数
285 String outputFilePath = String.format("ttinfodetail_(id=%s)_foredit-%s", 144 String outputFilePath = String.format("ttinfodetail_(id=%s)_foredit-%s",
286 String.valueOf(ttid), new DateTime().toString("yyyyMMddHHmmss")); 145 String.valueOf(ttid), new DateTime().toString("yyyyMMddHHmmss"));
287 146
288 - ktrParms.put("tempfilepath", dataToolsProperties.getTransTempdir() + File.separator + outputFilePath); // 数据输出文件路径  
289 - ktrParms.put("xlid", String.valueOf(xlid));  
290 - ktrParms.put("ttid", String.valueOf(ttid));  
291 -  
292 - super.exportData(ktrParms); 147 + ttInfoDetailForEdit.exportDataForEdit(xlid, ttid);
293 148
294 - EditInfo editInfo = new EditInfo(); // 输出数据 149 + TTInfoDetailService.EditInfo editInfo = new TTInfoDetailService.EditInfo(); // 输出数据
295 150
296 // 1.6、获取最大的发车数,用于输出数据的数量 151 // 1.6、获取最大的发车数,用于输出数据的数量
297 Long maxfcno = ttInfoDetailRepository.findMaxFcno(xlid, ttid); 152 Long maxfcno = ttInfoDetailRepository.findMaxFcno(xlid, ttid);
@@ -315,9 +170,9 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im @@ -315,9 +170,9 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im
315 headarrays[maxfcno.intValue() + 2] = "运营班次/运营里程"; 170 headarrays[maxfcno.intValue() + 2] = "运营班次/运营里程";
316 171
317 for (int r = 1; r < sheet.getRows(); r++) { 172 for (int r = 1; r < sheet.getRows(); r++) {
318 - List<FcInfo> fcInfos = new ArrayList<>(); 173 + List<TTInfoDetailService.FcInfo> fcInfos = new ArrayList<>();
319 // 每行第一列都是路牌 174 // 每行第一列都是路牌
320 - fcInfos.add(new FcInfo(null, null, sheet.getCell(0, r).getContents(), null, null, null, null)); // 用fcsj放置路牌显示 175 + fcInfos.add(new TTInfoDetailService.FcInfo(null, null, sheet.getCell(0, r).getContents(), null, null, null, null)); // 用fcsj放置路牌显示
321 176
322 int bc_ks = 0; // 空驶班次 177 int bc_ks = 0; // 空驶班次
323 int bc_yy = 0; // 营运班次 178 int bc_yy = 0; // 营运班次
@@ -340,7 +195,7 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im @@ -340,7 +195,7 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im
340 String qdzCode = content == null ? "" : content[7]; // 起点站编码 195 String qdzCode = content == null ? "" : content[7]; // 起点站编码
341 String zdzCode = content == null ? "" : content[8]; // 终点站编码 196 String zdzCode = content == null ? "" : content[8]; // 终点站编码
342 197
343 - FcInfo fcInfo = new FcInfo(ttdid_str, bctype, fcsj, xldir, isfb, qdzCode, zdzCode); 198 + TTInfoDetailService.FcInfo fcInfo = new TTInfoDetailService.FcInfo(ttdid_str, bctype, fcsj, xldir, isfb, qdzCode, zdzCode);
344 199
345 if (StringUtils.isNotEmpty(fzdname)) 200 if (StringUtils.isNotEmpty(fzdname))
346 headarrays[c] = fzdname; 201 headarrays[c] = fzdname;
@@ -374,10 +229,10 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im @@ -374,10 +229,10 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im
374 } 229 }
375 230
376 // 添加一列 空驶班次/空驶里程,fcsj放置数据 231 // 添加一列 空驶班次/空驶里程,fcsj放置数据
377 - fcInfos.add(new FcInfo(null, null, String.format("%d/%.3f", bc_ks, lc_ks), null, null, null, null)); 232 + fcInfos.add(new TTInfoDetailService.FcInfo(null, null, String.format("%d/%.3f", bc_ks, lc_ks), null, null, null, null));
378 233
379 // 添加一列 营运班次/营运里程,fcsj放置数据 234 // 添加一列 营运班次/营运里程,fcsj放置数据
380 - fcInfos.add(new FcInfo(null, null, String.format("%d/%.3f", bc_yy, lc_yy), null, null, null, null)); 235 + fcInfos.add(new TTInfoDetailService.FcInfo(null, null, String.format("%d/%.3f", bc_yy, lc_yy), null, null, null, null));
381 236
382 editInfo.getContents().add(fcInfos); 237 editInfo.getContents().add(fcInfos);
383 } 238 }
src/main/java/com/bsth/service/schedule/rules/strategy/IStrategyImpl.java deleted 100644 → 0
1 -package com.bsth.service.schedule.rules.strategy;  
2 -  
3 -import com.bsth.entity.Line;  
4 -import com.bsth.entity.schedule.CarConfigInfo;  
5 -import com.bsth.entity.schedule.EmployeeConfigInfo;  
6 -import com.bsth.entity.schedule.TTInfo;  
7 -import com.bsth.entity.schedule.TTInfoDetail;  
8 -import com.bsth.entity.schedule.rule.ScheduleRule1Flat;  
9 -import com.bsth.service.LineService;  
10 -import com.bsth.service.schedule.*;  
11 -import com.bsth.service.schedule.rules.ttinfo.TTInfoCalcuParam_input;  
12 -import com.bsth.service.schedule.rules.ttinfo.TTInfoResult_output;  
13 -import com.bsth.service.schedule.rules.ttinfo.TTInfoResults_output;  
14 -import com.bsth.service.schedule.rules.ttinfo.TTInfo_input;  
15 -import com.google.common.collect.ArrayListMultimap;  
16 -import com.google.common.collect.Multimap;  
17 -import org.joda.time.DateTime;  
18 -import org.kie.api.KieBase;  
19 -import org.kie.api.runtime.KieSession;  
20 -import org.slf4j.Logger;  
21 -import org.slf4j.LoggerFactory;  
22 -import org.springframework.beans.factory.annotation.Autowired;  
23 -import org.springframework.stereotype.Service;  
24 -import org.springframework.util.CollectionUtils;  
25 -  
26 -import java.util.*;  
27 -  
28 -/**  
29 - * Created by xu on 16/7/10.  
30 - */  
31 -@Service  
32 -public class IStrategyImpl implements IStrategy {  
33 - @Autowired  
34 - private TTInfoService ttInfoService;  
35 - @Autowired  
36 - private CarConfigInfoService carConfigInfoService;  
37 - @Autowired  
38 - private EmployeeConfigInfoService employeeConfigInfoService;  
39 - @Autowired  
40 - private TTInfoDetailService ttInfoDetailService;  
41 - @Autowired  
42 - private LineService lineService;  
43 - @Autowired  
44 - private ScheduleRule1FlatService scheduleRule1FlatService;  
45 -  
46 - /** 日志记录器 */  
47 - private Logger logger = LoggerFactory.getLogger(IStrategyImpl.class);  
48 -  
49 - @Autowired  
50 - private KieBase kieBase;  
51 -  
52 - @Override  
53 - public Line getLine(Integer xlId) {  
54 - Map<String, Object> param = new HashMap<>();  
55 - param.put("id_eq", xlId);  
56 - param.put("destroy_eq", 0); // 未撤销  
57 - List<Line> lines = (List<Line>) lineService.list(param);  
58 - if (CollectionUtils.isEmpty(lines)) {  
59 - throw new RuntimeException("线路找不到,可能已经撤销!");  
60 - }  
61 - return lines.get(0);  
62 - }  
63 -  
64 - @Override  
65 - public List<TTInfo> getTTInfo(Integer xlId) {  
66 - // 查询参数  
67 - Map<String, Object> param = new HashMap<>();  
68 - param.put("xl.id_eq", xlId); // 线路Id  
69 - param.put("isCancel_eq", false); // 作废的过滤掉  
70 - Iterator<TTInfo> ttInfoIterator = ttInfoService.list(param).iterator();  
71 - if (!ttInfoIterator.hasNext()) {  
72 - throw new RuntimeException("线路id=" + xlId + " 没有时刻表!");  
73 - }  
74 - List<TTInfo> ttInfos = new ArrayList<>();  
75 - while (ttInfoIterator.hasNext()) {  
76 - TTInfo ttInfo = ttInfoIterator.next();  
77 - ttInfos.add(ttInfo);  
78 - }  
79 - return ttInfos;  
80 - }  
81 -  
82 - @Override  
83 - public List<TTInfoDetail> getTTInfoDetail(Integer xlId) {  
84 - List<TTInfoDetail> ttInfoDetails = new ArrayList<>();  
85 -  
86 - List<TTInfo> ttInfos = getTTInfo(xlId);  
87 - Map<String, Object> param = new HashMap<>();  
88 - for (TTInfo ttInfo : ttInfos) {  
89 - param.clear();  
90 - param.put("ttinfo.id_eq", ttInfo.getId());  
91 - Iterator<TTInfoDetail> ttInfoDetailIterator = ttInfoDetailService.list(param).iterator();  
92 - while (ttInfoDetailIterator.hasNext()) {  
93 - ttInfoDetails.add(ttInfoDetailIterator.next());  
94 - }  
95 - }  
96 -  
97 - return ttInfoDetails;  
98 - }  
99 -  
100 - @Override  
101 - public Iterable<ScheduleRule1Flat> getScheduleRule(Integer xlId) {  
102 - Map<String, Object> param = new HashMap<>(); // 查询参数  
103 - Line xl = lineService.findById(xlId); // 查找线路具体信息  
104 - param.clear();  
105 - param.put("xl.id_eq", xl.getId());  
106 - Iterable<ScheduleRule1Flat> scheduleRule1FlatIterable = scheduleRule1FlatService.list(param);  
107 - if (!scheduleRule1FlatIterable.iterator().hasNext())  
108 - throw new RuntimeException("线路:" + xl.getName() + " 没有配置规则!");  
109 -  
110 - return scheduleRule1FlatIterable;  
111 - }  
112 -  
113 - @Override  
114 - public Map<Date, Multimap<Long, TTInfoDetail>> getGuideboardXlTTInfoDetailMaps(  
115 - Integer xlId, Date fromDate, Date toDate) {  
116 - // 获取线路的所有时刻表  
117 - List<TTInfo> ttInfos = getTTInfo(xlId);  
118 -  
119 - // 执行规则,判定每天使用的时刻表  
120 - KieSession session = kieBase.newKieSession();  
121 -  
122 - session.setGlobal("log", logger);  
123 - TTInfoResults_output ttInfoResults_output = new TTInfoResults_output();  
124 - session.setGlobal("results", ttInfoResults_output);  
125 -  
126 - TTInfoCalcuParam_input ttInfoCalcuParam_input = new TTInfoCalcuParam_input(  
127 - new DateTime(fromDate), new DateTime(toDate), String.valueOf(xlId));  
128 - session.insert(ttInfoCalcuParam_input);  
129 - for (TTInfo ttInfo : ttInfos) {  
130 - TTInfo_input ttInfo_input = new TTInfo_input(ttInfo);  
131 - session.insert(ttInfo_input);  
132 - }  
133 -  
134 - session.fireAllRules();  
135 - session.dispose();  
136 -  
137 - // 获取ttinfoDetail  
138 - List<TTInfoDetail> ttInfoDetails = getTTInfoDetail(xlId);  
139 -  
140 - // 规则输出结果  
141 - Multimap<DateTime, TTInfoResult_output> outputMultimap =  
142 - ttInfoResults_output.getResults().get(String.valueOf(xlId));  
143 - // return结果输出  
144 - Map<Date, Multimap<Long, TTInfoDetail>> ttInfoDetailMultimap = new HashMap<>();  
145 -  
146 - for (DateTime dateTime : outputMultimap.keySet()) {  
147 - Collection<TTInfoResult_output> ttInfoResult_outputs = outputMultimap.get(dateTime);  
148 - // 如果有多个,使用第一个  
149 - Iterator<TTInfoResult_output> ttInfoResult_outputIterator = ttInfoResult_outputs.iterator();  
150 - if (ttInfoResult_outputIterator.hasNext()) {  
151 - // 同一天,多张时刻表只取第一张  
152 - TTInfoResult_output ttInfoResult_output = ttInfoResult_outputIterator.next();  
153 - // 查找时刻表明细  
154 - Multimap<Long, TTInfoDetail> ttinfodetailMap2 = ArrayListMultimap.create();  
155 - for (TTInfoDetail ttInfoDetail : ttInfoDetails) {  
156 - if (ttInfoDetail.getTtinfo().getId().equals(Long.valueOf(ttInfoResult_output.getTtInfoId()))) {  
157 - ttinfodetailMap2.put(ttInfoDetail.getLp().getId(), ttInfoDetail);  
158 - }  
159 - }  
160 -  
161 - ttInfoDetailMultimap.put(dateTime.toDate(), ttinfodetailMap2);  
162 - }  
163 - }  
164 -  
165 - return ttInfoDetailMultimap;  
166 - }  
167 -  
168 - @Override  
169 - public Map<Long, CarConfigInfo> getCarConfigMaps(Integer xlId) {  
170 - // 查询参数  
171 - Map<String, Object> param = new HashMap<>();  
172 - param.put("xl.id_eq", xlId);  
173 - Iterable<CarConfigInfo> carConfigInfoIterable = carConfigInfoService.list(param);  
174 - Iterator<CarConfigInfo> carConfigInfoIterator = carConfigInfoIterable.iterator();  
175 - if (!carConfigInfoIterator.hasNext())  
176 - throw new RuntimeException("线路id=" + xlId + ",下没有车辆配置信息!");  
177 -  
178 - Map<Long, CarConfigInfo> carConfigInfoMap = new HashMap<>();  
179 - while (carConfigInfoIterator.hasNext()) {  
180 - CarConfigInfo carConfigInfo = carConfigInfoIterator.next();  
181 - carConfigInfoMap.put(carConfigInfo.getId(), carConfigInfo);  
182 - }  
183 - return carConfigInfoMap;  
184 - }  
185 -  
186 - @Override  
187 - public Map<Long, EmployeeConfigInfo> getEmployeeConfigMaps(Integer xlId) {  
188 - // 查询参数  
189 - Map<String, Object> param = new HashMap<>();  
190 - param.put("xl.id_eq", xlId);  
191 - Iterable<EmployeeConfigInfo> employeeConfigInfoIterable = employeeConfigInfoService.list(param);  
192 - Iterator<EmployeeConfigInfo> employeeConfigInfoIterator = employeeConfigInfoIterable.iterator();  
193 - if (!employeeConfigInfoIterator.hasNext())  
194 - throw new RuntimeException("线路id=" + xlId + ",下没有人员配置信息!");  
195 -  
196 - Map<Long, EmployeeConfigInfo> employeeConfigInfoMap = new HashMap<>();  
197 - while (employeeConfigInfoIterator.hasNext()) {  
198 - EmployeeConfigInfo employeeConfigInfo = employeeConfigInfoIterator.next();  
199 - employeeConfigInfoMap.put(employeeConfigInfo.getId(), employeeConfigInfo);  
200 - }  
201 - return employeeConfigInfoMap;  
202 - }  
203 -}  
src/main/resources/datatools/ktrs/ttinfodetailDataInputMetaData.ktr
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<transformation>  
3 - <info>  
4 - <name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x5bfc;&#x5165;&#x5143;&#x6570;&#x636e;</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 - <parameter>  
13 - <name>erroroutputdir</name>  
14 - <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;runtime_temp&#x2f;bsth_control_u_d_files&#x2f;erroroutput</default_value>  
15 - <description>ktr step&#x914d;&#x7f6e;&#x7684;&#x9519;&#x8bef;&#x8f93;&#x51fa;&#x76ee;&#x5f55;</description>  
16 - </parameter>  
17 - <parameter>  
18 - <name>excelfieldnames</name>  
19 - <default_value>&#x8def;&#x724c;,&#x51fa;&#x573a;,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;1,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;1,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;2,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;2,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;3,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;3,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;4,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;4,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;5,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;5,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;6,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;6,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;7,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;7,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;8,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;8,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;9,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;9,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;10,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;10,&#x8fdb;&#x573a;</default_value>  
20 - <description>&#x65f6;&#x523b;&#x8868;excel&#x8f93;&#x5165;&#x5b57;&#x6bb5;&#x540d;&#xff0c;&#x4ee5;&#x9017;&#x53f7;&#x8fde;&#x63a5;</description>  
21 - </parameter>  
22 - <parameter>  
23 - <name>filepath</name>  
24 - <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;bsth_project&#x2f;bsth_control_etl&#x2f;&#x95f5;&#x884c;&#x516c;&#x4ea4;&#x2f;&#x95f5;&#x884c;26&#x8def;&#x65f6;&#x523b;&#x8868;160630&#x65f6;&#x523b;&#x8868;.xls</default_value>  
25 - <description>&#x5f85;&#x5904;&#x7406;&#x5bfc;&#x5165;&#x7684;excel&#x6587;&#x4ef6;</description>  
26 - </parameter>  
27 - <parameter>  
28 - <name>injectktrfile</name>  
29 - <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;bsth_project&#x2f;bsth_control&#x2f;src&#x2f;main&#x2f;resources&#x2f;datatools&#x2f;ktrs&#x2f;ttinfodetailDataInput.ktr</default_value>  
30 - <description>&#x6ce8;&#x5165;&#x5143;&#x6570;&#x636e;&#x7684;ktr&#x6587;&#x4ef6;</description>  
31 - </parameter>  
32 - <parameter>  
33 - <name>normalizefieldnames</name>  
34 - <default_value>&#x51fa;&#x573a;,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;1,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;1,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;2,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;2,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;3,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;3,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;4,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;4,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;5,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;5,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;6,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;6,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;7,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;7,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;8,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;8,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;9,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;9,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;10,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;10,&#x8fdb;&#x573a;</default_value>  
35 - <description>&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;&#x5b57;&#x6bb5;&#x540d;&#xff0c;&#x4ee5;&#x9017;&#x53f7;&#x8fde;&#x63a5;</description>  
36 - </parameter>  
37 - <parameter>  
38 - <name>sheetname</name>  
39 - <default_value>&#x5de5;&#x4f5c;&#x8868;1</default_value>  
40 - <description>xls sheet&#x540d;&#x5b57;</description>  
41 - </parameter>  
42 - <parameter>  
43 - <name>tccname</name>  
44 - <default_value>&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;&#x505c;&#x8f66;&#x573a;</default_value>  
45 - <description>&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</description>  
46 - </parameter>  
47 - <parameter>  
48 - <name>ttid</name>  
49 - <default_value>1</default_value>  
50 - <description>&#x65f6;&#x523b;&#x8868;id</description>  
51 - </parameter>  
52 - <parameter>  
53 - <name>ttinfoname</name>  
54 - <default_value>&#x8868;2</default_value>  
55 - <description>&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;</description>  
56 - </parameter>  
57 - <parameter>  
58 - <name>xlname</name>  
59 - <default_value>&#x95f5;&#x884c;26&#x8def;</default_value>  
60 - <description>&#x7ebf;&#x8def;&#x540d;&#x79f0;</description>  
61 - </parameter>  
62 - </parameters>  
63 - <log>  
64 -<trans-log-table><connection/>  
65 -<schema/>  
66 -<table/>  
67 -<size_limit_lines/>  
68 -<interval/>  
69 -<timeout_days/>  
70 -<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>  
71 -<perf-log-table><connection/>  
72 -<schema/>  
73 -<table/>  
74 -<interval/>  
75 -<timeout_days/>  
76 -<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>  
77 -<channel-log-table><connection/>  
78 -<schema/>  
79 -<table/>  
80 -<timeout_days/>  
81 -<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>  
82 -<step-log-table><connection/>  
83 -<schema/>  
84 -<table/>  
85 -<timeout_days/>  
86 -<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>  
87 -<metrics-log-table><connection/>  
88 -<schema/>  
89 -<table/>  
90 -<timeout_days/>  
91 -<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>  
92 - </log>  
93 - <maxdate>  
94 - <connection/>  
95 - <table/>  
96 - <field/>  
97 - <offset>0.0</offset>  
98 - <maxdiff>0.0</maxdiff>  
99 - </maxdate>  
100 - <size_rowset>10000</size_rowset>  
101 - <sleep_time_empty>50</sleep_time_empty>  
102 - <sleep_time_full>50</sleep_time_full>  
103 - <unique_connections>N</unique_connections>  
104 - <feedback_shown>Y</feedback_shown>  
105 - <feedback_size>50000</feedback_size>  
106 - <using_thread_priorities>Y</using_thread_priorities>  
107 - <shared_objects_file/>  
108 - <capture_step_performance>N</capture_step_performance>  
109 - <step_performance_capturing_delay>1000</step_performance_capturing_delay>  
110 - <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>  
111 - <dependencies>  
112 - </dependencies>  
113 - <partitionschemas>  
114 - </partitionschemas>  
115 - <slaveservers>  
116 - </slaveservers>  
117 - <clusterschemas>  
118 - </clusterschemas>  
119 - <created_user>-</created_user>  
120 - <created_date>2016&#x2f;07&#x2f;01 09&#x3a;55&#x3a;32.649</created_date>  
121 - <modified_user>-</modified_user>  
122 - <modified_date>2016&#x2f;07&#x2f;01 09&#x3a;55&#x3a;32.649</modified_date>  
123 - <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA&#x3d;</key_for_session_key>  
124 - <is_key_private>N</is_key_private>  
125 - </info>  
126 - <notepads>  
127 - </notepads>  
128 - <connection>  
129 - <name>bus_control_variable</name>  
130 - <server>&#x24;&#x7b;v_db_ip&#x7d;</server>  
131 - <type>MYSQL</type>  
132 - <access>Native</access>  
133 - <database>&#x24;&#x7b;v_db_dname&#x7d;</database>  
134 - <port>3306</port>  
135 - <username>&#x24;&#x7b;v_db_uname&#x7d;</username>  
136 - <password>&#x24;&#x7b;v_db_pwd&#x7d;</password>  
137 - <servername/>  
138 - <data_tablespace/>  
139 - <index_tablespace/>  
140 - <attributes>  
141 - <attribute><code>EXTRA_OPTION_MYSQL.characterEncoding</code><attribute>utf8</attribute></attribute>  
142 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
143 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
144 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
145 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
146 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
147 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
148 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
149 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
150 - <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>  
151 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
152 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
153 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
154 - </attributes>  
155 - </connection>  
156 - <connection>  
157 - <name>bus_control_&#x516c;&#x53f8;_201</name>  
158 - <server>localhost</server>  
159 - <type>MYSQL</type>  
160 - <access>Native</access>  
161 - <database>control</database>  
162 - <port>3306</port>  
163 - <username>root</username>  
164 - <password>Encrypted </password>  
165 - <servername/>  
166 - <data_tablespace/>  
167 - <index_tablespace/>  
168 - <attributes>  
169 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
170 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
171 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
172 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
173 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
174 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
175 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
176 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
177 - <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>  
178 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
179 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
180 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
181 - </attributes>  
182 - </connection>  
183 - <connection>  
184 - <name>bus_control_&#x672c;&#x673a;</name>  
185 - <server>localhost</server>  
186 - <type>MYSQL</type>  
187 - <access>Native</access>  
188 - <database>control</database>  
189 - <port>3306</port>  
190 - <username>root</username>  
191 - <password>Encrypted </password>  
192 - <servername/>  
193 - <data_tablespace/>  
194 - <index_tablespace/>  
195 - <attributes>  
196 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
197 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
198 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
199 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
200 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
201 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
202 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
203 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
204 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
205 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
206 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
207 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
208 - </attributes>  
209 - </connection>  
210 - <connection>  
211 - <name>xlab_mysql_youle</name>  
212 - <server>101.231.124.8</server>  
213 - <type>MYSQL</type>  
214 - <access>Native</access>  
215 - <database>xlab_youle</database>  
216 - <port>45687</port>  
217 - <username>xlab-youle</username>  
218 - <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>  
219 - <servername/>  
220 - <data_tablespace/>  
221 - <index_tablespace/>  
222 - <attributes>  
223 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
224 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
225 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
226 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
227 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
228 - <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>  
229 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
230 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
231 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
232 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>  
233 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>  
234 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
235 - </attributes>  
236 - </connection>  
237 - <connection>  
238 - <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>  
239 - <server>localhost</server>  
240 - <type>MYSQL</type>  
241 - <access>Native</access>  
242 - <database>xlab_youle</database>  
243 - <port>3306</port>  
244 - <username>root</username>  
245 - <password>Encrypted </password>  
246 - <servername/>  
247 - <data_tablespace/>  
248 - <index_tablespace/>  
249 - <attributes>  
250 - <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>  
251 - <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>  
252 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
253 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
254 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
255 - <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>  
256 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
257 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
258 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
259 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>  
260 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>  
261 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
262 - </attributes>  
263 - </connection>  
264 - <connection>  
265 - <name>xlab_youle</name>  
266 - <server/>  
267 - <type>MYSQL</type>  
268 - <access>JNDI</access>  
269 - <database>xlab_youle</database>  
270 - <port>1521</port>  
271 - <username/>  
272 - <password>Encrypted </password>  
273 - <servername/>  
274 - <data_tablespace/>  
275 - <index_tablespace/>  
276 - <attributes>  
277 - <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>  
278 - <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>  
279 - <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>  
280 - <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>  
281 - <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>  
282 - <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>  
283 - <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>  
284 - <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>  
285 - <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>  
286 - <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>  
287 - </attributes>  
288 - </connection>  
289 - <order>  
290 - <hop> <from>&#x83b7;&#x53d6;excel&#x6587;&#x4ef6;&#x540d;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>  
291 - <hop> <from>&#x83b7;&#x53d6;excel&#x5b57;&#x6bb5;&#x540d;&#x5b57;&#x7b26;&#x4e32;</from><to>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d;</to><enabled>Y</enabled> </hop>  
292 - <hop> <from>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d;</from><to>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>  
293 - <hop> <from>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>  
294 - <hop> <from>&#x83b7;&#x53d6;normalize&#x5b57;&#x6bb5;&#x540d;&#x5b57;&#x7b26;&#x4e32;</from><to>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d; 2</to><enabled>Y</enabled> </hop>  
295 - <hop> <from>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d; 2</from><to>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>  
296 - <hop> <from>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>  
297 - <hop> <from>&#x83b7;&#x53d6;&#x7ebf;&#x8def;&#x540d;&#x79f0;</from><to>&#x589e;&#x52a0;&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata</to><enabled>Y</enabled> </hop>  
298 - <hop> <from>&#x589e;&#x52a0;&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata</from><to>&#x66ff;&#x6362;&#x7ebf;&#x8def;&#x540d;&#x79f0;</to><enabled>Y</enabled> </hop>  
299 - <hop> <from>&#x66ff;&#x6362;&#x7ebf;&#x8def;&#x540d;&#x79f0;</from><to>&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</to><enabled>Y</enabled> </hop>  
300 - <hop> <from>&#x83b7;&#x53d6;&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;</from><to>&#x589e;&#x52a0;&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata</to><enabled>Y</enabled> </hop>  
301 - <hop> <from>&#x589e;&#x52a0;&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata</from><to>&#x66ff;&#x6362;&#x505c;&#x8f66;&#x5382;&#x540d;&#x5b57; </to><enabled>Y</enabled> </hop>  
302 - <hop> <from>&#x66ff;&#x6362;&#x505c;&#x8f66;&#x5382;&#x540d;&#x5b57; </from><to>&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</to><enabled>Y</enabled> </hop>  
303 - <hop> <from>&#x83b7;&#x53d6;&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;</from><to>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata</to><enabled>Y</enabled> </hop>  
304 - <hop> <from>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata</from><to>&#x66ff;&#x6362;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;</to><enabled>Y</enabled> </hop>  
305 - <hop> <from>&#x66ff;&#x6362;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;</from><to>&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</to><enabled>Y</enabled> </hop>  
306 - <hop> <from>&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</from><to>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</to><enabled>Y</enabled> </hop>  
307 - <hop> <from>&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</from><to>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</to><enabled>Y</enabled> </hop>  
308 - <hop> <from>&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</from><to>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</to><enabled>Y</enabled> </hop>  
309 - <hop> <from>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>  
310 - <hop> <from>&#x83b7;&#x53d6;&#x65f6;&#x523b;&#x8868;id</from><to>&#x5220;&#x9664;&#x4e4b;&#x524d;&#x7684;&#x660e;&#x7ec6;&#x4fe1;&#x606f;</to><enabled>Y</enabled> </hop>  
311 - </order>  
312 - <step>  
313 - <name>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</name>  
314 - <type>MetaInject</type>  
315 - <description/>  
316 - <distribute>Y</distribute>  
317 - <custom_distribution/>  
318 - <copies>1</copies>  
319 - <partitioning>  
320 - <method>none</method>  
321 - <schema_name/>  
322 - </partitioning>  
323 - <specification_method>filename</specification_method>  
324 - <trans_object_id/>  
325 - <trans_name/>  
326 - <filename>&#x24;&#x7b;injectktrfile&#x7d;</filename>  
327 - <directory_path/>  
328 - <source_step/>  
329 - <source_output_fields> </source_output_fields> <target_file/>  
330 - <no_execution>N</no_execution>  
331 - <stream_source_step/>  
332 - <stream_target_step/>  
333 - <mappings> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>  
334 - <target_attribute_key>FORMAT</target_attribute_key>  
335 - <target_detail>Y</target_detail>  
336 - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>  
337 - <source_field>format</source_field>  
338 - </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>  
339 - <target_attribute_key>REPEAT</target_attribute_key>  
340 - <target_detail>Y</target_detail>  
341 - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>  
342 - <source_field>repeat</source_field>  
343 - </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>  
344 - <target_attribute_key>TRIM_TYPE</target_attribute_key>  
345 - <target_detail>Y</target_detail>  
346 - <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>  
347 - <source_field>trim_type</source_field>  
348 - </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>  
349 - <target_attribute_key>FILENAME</target_attribute_key>  
350 - <target_detail>Y</target_detail>  
351 - <source_step>&#x83b7;&#x53d6;excel&#x6587;&#x4ef6;&#x540d;</source_step>  
352 - <source_field>filepath_</source_field>  
353 - </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>  
354 - <target_attribute_key>PRECISION</target_attribute_key>  
355 - <target_detail>Y</target_detail>  
356 - <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>  
357 - <source_field>precision</source_field>  
358 - </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>  
359 - <target_attribute_key>TYPE</target_attribute_key>  
360 - <target_detail>Y</target_detail>  
361 - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>  
362 - <source_field>type</source_field>  
363 - </mapping> <mapping> <target_step_name>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;&#xff0c;&#x7ebf;&#x8def;&#x540d;&#x5b57;&#xff0c;&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</target_step_name>  
364 - <target_attribute_key>DATA_VALUE</target_attribute_key>  
365 - <target_detail>Y</target_detail>  
366 - <source_step>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</source_step>  
367 - <source_field>col_value</source_field>  
368 - </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>  
369 - <target_attribute_key>LENGTH</target_attribute_key>  
370 - <target_detail>Y</target_detail>  
371 - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>  
372 - <source_field>length</source_field>  
373 - </mapping> <mapping> <target_step_name>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;&#xff0c;&#x7ebf;&#x8def;&#x540d;&#x5b57;&#xff0c;&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</target_step_name>  
374 - <target_attribute_key>TYPE</target_attribute_key>  
375 - <target_detail>Y</target_detail>  
376 - <source_step>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</source_step>  
377 - <source_field>col_type</source_field>  
378 - </mapping> <mapping> <target_step_name>&#x884c;&#x8f6c;&#x5217;</target_step_name>  
379 - <target_attribute_key>NAME</target_attribute_key>  
380 - <target_detail>Y</target_detail>  
381 - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c; 2</source_step>  
382 - <source_field>fieldName</source_field>  
383 - </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>  
384 - <target_attribute_key>NAME</target_attribute_key>  
385 - <target_detail>Y</target_detail>  
386 - <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>  
387 - <source_field>fieldname</source_field>  
388 - </mapping> <mapping> <target_step_name>&#x73ed;&#x6b21;&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;</target_step_name>  
389 - <target_attribute_key>NAME</target_attribute_key>  
390 - <target_detail>Y</target_detail>  
391 - <source_step>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</source_step>  
392 - <source_field>nfieldname</source_field>  
393 - </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>  
394 - <target_attribute_key>SHEET_NAME</target_attribute_key>  
395 - <target_detail>Y</target_detail>  
396 - <source_step>&#x83b7;&#x53d6;excel&#x6587;&#x4ef6;&#x540d;</source_step>  
397 - <source_field>sheetname_</source_field>  
398 - </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>  
399 - <target_attribute_key>LENGTH</target_attribute_key>  
400 - <target_detail>Y</target_detail>  
401 - <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>  
402 - <source_field>length</source_field>  
403 - </mapping> <mapping> <target_step_name>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;&#xff0c;&#x7ebf;&#x8def;&#x540d;&#x5b57;&#xff0c;&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</target_step_name>  
404 - <target_attribute_key>NAME</target_attribute_key>  
405 - <target_detail>Y</target_detail>  
406 - <source_step>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</source_step>  
407 - <source_field>col_name</source_field>  
408 - </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>  
409 - <target_attribute_key>TYPE</target_attribute_key>  
410 - <target_detail>Y</target_detail>  
411 - <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>  
412 - <source_field>fieldtype</source_field>  
413 - </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>  
414 - <target_attribute_key>NAME</target_attribute_key>  
415 - <target_detail>Y</target_detail>  
416 - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>  
417 - <source_field>fieldName</source_field>  
418 - </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>  
419 - <target_attribute_key>TRIM_TYPE</target_attribute_key>  
420 - <target_detail>Y</target_detail>  
421 - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>  
422 - <source_field>trim_type</source_field>  
423 - </mapping> <mapping> <target_step_name>&#x884c;&#x8f6c;&#x5217;</target_step_name>  
424 - <target_attribute_key>VALUE</target_attribute_key>  
425 - <target_detail>Y</target_detail>  
426 - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c; 2</source_step>  
427 - <source_field>fieldName</source_field>  
428 - </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>  
429 - <target_attribute_key>REPEAT</target_attribute_key>  
430 - <target_detail>Y</target_detail>  
431 - <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>  
432 - <source_field>repeat</source_field>  
433 - </mapping> <mapping> <target_step_name>&#x884c;&#x8f6c;&#x5217;</target_step_name>  
434 - <target_attribute_key>NORMALISED</target_attribute_key>  
435 - <target_detail>Y</target_detail>  
436 - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c; 2</source_step>  
437 - <source_field>value</source_field>  
438 - </mapping> <mapping> <target_step_name>&#x73ed;&#x6b21;&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;</target_step_name>  
439 - <target_attribute_key>NORMALISED</target_attribute_key>  
440 - <target_detail>Y</target_detail>  
441 - <source_step>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</source_step>  
442 - <source_field>valuefield</source_field>  
443 - </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>  
444 - <target_attribute_key>FORMAT</target_attribute_key>  
445 - <target_detail>Y</target_detail>  
446 - <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>  
447 - <source_field>format</source_field>  
448 - </mapping> <mapping> <target_step_name>&#x73ed;&#x6b21;&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;</target_step_name>  
449 - <target_attribute_key>VALUE</target_attribute_key>  
450 - <target_detail>Y</target_detail>  
451 - <source_step>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</source_step>  
452 - <source_field>nfieldname</source_field>  
453 - </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>  
454 - <target_attribute_key>PRECISION</target_attribute_key>  
455 - <target_detail>Y</target_detail>  
456 - <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>  
457 - <source_field>precision</source_field>  
458 - </mapping> </mappings> <cluster_schema/>  
459 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
460 - <xloc>695</xloc>  
461 - <yloc>177</yloc>  
462 - <draw>Y</draw>  
463 - </GUI>  
464 - </step>  
465 -  
466 - <step>  
467 - <name>&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</name>  
468 - <type>SelectValues</type>  
469 - <description/>  
470 - <distribute>Y</distribute>  
471 - <custom_distribution/>  
472 - <copies>1</copies>  
473 - <partitioning>  
474 - <method>none</method>  
475 - <schema_name/>  
476 - </partitioning>  
477 - <fields> <field> <name>col_name</name>  
478 - <rename/>  
479 - <length>-2</length>  
480 - <precision>-2</precision>  
481 - </field> <field> <name>col_type</name>  
482 - <rename/>  
483 - <length>-2</length>  
484 - <precision>-2</precision>  
485 - </field> <field> <name>col_value</name>  
486 - <rename/>  
487 - <length>-2</length>  
488 - <precision>-2</precision>  
489 - </field> <select_unspecified>N</select_unspecified>  
490 - </fields> <cluster_schema/>  
491 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
492 - <xloc>490</xloc>  
493 - <yloc>429</yloc>  
494 - <draw>Y</draw>  
495 - </GUI>  
496 - </step>  
497 -  
498 - <step>  
499 - <name>&#x5220;&#x9664;&#x4e4b;&#x524d;&#x7684;&#x660e;&#x7ec6;&#x4fe1;&#x606f;</name>  
500 - <type>ExecSQL</type>  
501 - <description/>  
502 - <distribute>Y</distribute>  
503 - <custom_distribution/>  
504 - <copies>1</copies>  
505 - <partitioning>  
506 - <method>none</method>  
507 - <schema_name/>  
508 - </partitioning>  
509 - <connection>bus_control_variable</connection>  
510 - <execute_each_row>Y</execute_each_row>  
511 - <single_statement>N</single_statement>  
512 - <replace_variables>N</replace_variables>  
513 - <quoteString>N</quoteString>  
514 - <sql>delete from bsth_c_s_ttinfo_detail where ttinfo &#x3d; &#x3f;</sql>  
515 - <set_params>N</set_params>  
516 - <insert_field/>  
517 - <update_field/>  
518 - <delete_field/>  
519 - <read_field/>  
520 - <arguments>  
521 - <argument><name>ttid_</name></argument>  
522 - </arguments>  
523 - <cluster_schema/>  
524 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
525 - <xloc>627</xloc>  
526 - <yloc>26</yloc>  
527 - <draw>Y</draw>  
528 - </GUI>  
529 - </step>  
530 -  
531 - <step>  
532 - <name>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</name>  
533 - <type>Dummy</type>  
534 - <description/>  
535 - <distribute>Y</distribute>  
536 - <custom_distribution/>  
537 - <copies>1</copies>  
538 - <partitioning>  
539 - <method>none</method>  
540 - <schema_name/>  
541 - </partitioning>  
542 - <cluster_schema/>  
543 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
544 - <xloc>702</xloc>  
545 - <yloc>383</yloc>  
546 - <draw>Y</draw>  
547 - </GUI>  
548 - </step>  
549 -  
550 - <step>  
551 - <name>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</name>  
552 - <type>Constant</type>  
553 - <description/>  
554 - <distribute>Y</distribute>  
555 - <custom_distribution/>  
556 - <copies>1</copies>  
557 - <partitioning>  
558 - <method>none</method>  
559 - <schema_name/>  
560 - </partitioning>  
561 - <fields>  
562 - <field>  
563 - <name>fieldtype</name>  
564 - <type>String</type>  
565 - <format/>  
566 - <currency/>  
567 - <decimal/>  
568 - <group/>  
569 - <nullif>String</nullif>  
570 - <length>-1</length>  
571 - <precision>-1</precision>  
572 - <set_empty_string>N</set_empty_string>  
573 - </field>  
574 - <field>  
575 - <name>length</name>  
576 - <type>String</type>  
577 - <format/>  
578 - <currency/>  
579 - <decimal/>  
580 - <group/>  
581 - <nullif>-1</nullif>  
582 - <length>-1</length>  
583 - <precision>-1</precision>  
584 - <set_empty_string>N</set_empty_string>  
585 - </field>  
586 - <field>  
587 - <name>precision</name>  
588 - <type>String</type>  
589 - <format/>  
590 - <currency/>  
591 - <decimal/>  
592 - <group/>  
593 - <nullif>-1</nullif>  
594 - <length>-1</length>  
595 - <precision>-1</precision>  
596 - <set_empty_string>N</set_empty_string>  
597 - </field>  
598 - <field>  
599 - <name>trim_type</name>  
600 - <type>String</type>  
601 - <format/>  
602 - <currency/>  
603 - <decimal/>  
604 - <group/>  
605 - <nullif>none</nullif>  
606 - <length>-1</length>  
607 - <precision>-1</precision>  
608 - <set_empty_string>N</set_empty_string>  
609 - </field>  
610 - <field>  
611 - <name>repeat</name>  
612 - <type>String</type>  
613 - <format/>  
614 - <currency/>  
615 - <decimal/>  
616 - <group/>  
617 - <nullif>N</nullif>  
618 - <length>-1</length>  
619 - <precision>-1</precision>  
620 - <set_empty_string>N</set_empty_string>  
621 - </field>  
622 - <field>  
623 - <name>format</name>  
624 - <type>String</type>  
625 - <format/>  
626 - <currency/>  
627 - <decimal/>  
628 - <group/>  
629 - <nullif>&#x23;</nullif>  
630 - <length>-1</length>  
631 - <precision>-1</precision>  
632 - <set_empty_string>N</set_empty_string>  
633 - </field>  
634 - </fields>  
635 - <cluster_schema/>  
636 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
637 - <xloc>441</xloc>  
638 - <yloc>172</yloc>  
639 - <draw>Y</draw>  
640 - </GUI>  
641 - </step>  
642 -  
643 - <step>  
644 - <name>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</name>  
645 - <type>Constant</type>  
646 - <description/>  
647 - <distribute>Y</distribute>  
648 - <custom_distribution/>  
649 - <copies>1</copies>  
650 - <partitioning>  
651 - <method>none</method>  
652 - <schema_name/>  
653 - </partitioning>  
654 - <fields>  
655 - <field>  
656 - <name>valuefield</name>  
657 - <type>String</type>  
658 - <format/>  
659 - <currency/>  
660 - <decimal/>  
661 - <group/>  
662 - <nullif>&#x53d1;&#x8f66;&#x65f6;&#x95f4;</nullif>  
663 - <length>-1</length>  
664 - <precision>-1</precision>  
665 - <set_empty_string>N</set_empty_string>  
666 - </field>  
667 - </fields>  
668 - <cluster_schema/>  
669 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
670 - <xloc>447</xloc>  
671 - <yloc>257</yloc>  
672 - <draw>Y</draw>  
673 - </GUI>  
674 - </step>  
675 -  
676 - <step>  
677 - <name>&#x589e;&#x52a0;&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata</name>  
678 - <type>Constant</type>  
679 - <description/>  
680 - <distribute>Y</distribute>  
681 - <custom_distribution/>  
682 - <copies>1</copies>  
683 - <partitioning>  
684 - <method>none</method>  
685 - <schema_name/>  
686 - </partitioning>  
687 - <fields>  
688 - <field>  
689 - <name>col_name</name>  
690 - <type>String</type>  
691 - <format/>  
692 - <currency/>  
693 - <decimal/>  
694 - <group/>  
695 - <nullif>tccname_</nullif>  
696 - <length>-1</length>  
697 - <precision>-1</precision>  
698 - <set_empty_string>N</set_empty_string>  
699 - </field>  
700 - <field>  
701 - <name>col_type</name>  
702 - <type>String</type>  
703 - <format/>  
704 - <currency/>  
705 - <decimal/>  
706 - <group/>  
707 - <nullif>String</nullif>  
708 - <length>-1</length>  
709 - <precision>-1</precision>  
710 - <set_empty_string>N</set_empty_string>  
711 - </field>  
712 - <field>  
713 - <name>col_value</name>  
714 - <type>String</type>  
715 - <format/>  
716 - <currency/>  
717 - <decimal/>  
718 - <group/>  
719 - <nullif>replace</nullif>  
720 - <length>-1</length>  
721 - <precision>-1</precision>  
722 - <set_empty_string>N</set_empty_string>  
723 - </field>  
724 - </fields>  
725 - <cluster_schema/>  
726 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
727 - <xloc>208</xloc>  
728 - <yloc>428</yloc>  
729 - <draw>Y</draw>  
730 - </GUI>  
731 - </step>  
732 -  
733 - <step>  
734 - <name>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata</name>  
735 - <type>Constant</type>  
736 - <description/>  
737 - <distribute>Y</distribute>  
738 - <custom_distribution/>  
739 - <copies>1</copies>  
740 - <partitioning>  
741 - <method>none</method>  
742 - <schema_name/>  
743 - </partitioning>  
744 - <fields>  
745 - <field>  
746 - <name>col_name</name>  
747 - <type>String</type>  
748 - <format/>  
749 - <currency/>  
750 - <decimal/>  
751 - <group/>  
752 - <nullif>ttinfoname_</nullif>  
753 - <length>-1</length>  
754 - <precision>-1</precision>  
755 - <set_empty_string>N</set_empty_string>  
756 - </field>  
757 - <field>  
758 - <name>col_type</name>  
759 - <type>String</type>  
760 - <format/>  
761 - <currency/>  
762 - <decimal/>  
763 - <group/>  
764 - <nullif>String</nullif>  
765 - <length>-1</length>  
766 - <precision>-1</precision>  
767 - <set_empty_string>N</set_empty_string>  
768 - </field>  
769 - <field>  
770 - <name>col_value</name>  
771 - <type>String</type>  
772 - <format/>  
773 - <currency/>  
774 - <decimal/>  
775 - <group/>  
776 - <nullif>replace</nullif>  
777 - <length>-1</length>  
778 - <precision>-1</precision>  
779 - <set_empty_string>N</set_empty_string>  
780 - </field>  
781 - </fields>  
782 - <cluster_schema/>  
783 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
784 - <xloc>216</xloc>  
785 - <yloc>508</yloc>  
786 - <draw>Y</draw>  
787 - </GUI>  
788 - </step>  
789 -  
790 - <step>  
791 - <name>&#x589e;&#x52a0;&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata</name>  
792 - <type>Constant</type>  
793 - <description/>  
794 - <distribute>Y</distribute>  
795 - <custom_distribution/>  
796 - <copies>1</copies>  
797 - <partitioning>  
798 - <method>none</method>  
799 - <schema_name/>  
800 - </partitioning>  
801 - <fields>  
802 - <field>  
803 - <name>col_name</name>  
804 - <type>String</type>  
805 - <format/>  
806 - <currency/>  
807 - <decimal/>  
808 - <group/>  
809 - <nullif>xlname_</nullif>  
810 - <length>-1</length>  
811 - <precision>-1</precision>  
812 - <set_empty_string>N</set_empty_string>  
813 - </field>  
814 - <field>  
815 - <name>col_type</name>  
816 - <type>String</type>  
817 - <format/>  
818 - <currency/>  
819 - <decimal/>  
820 - <group/>  
821 - <nullif>String</nullif>  
822 - <length>-1</length>  
823 - <precision>-1</precision>  
824 - <set_empty_string>N</set_empty_string>  
825 - </field>  
826 - <field>  
827 - <name>col_value</name>  
828 - <type>String</type>  
829 - <format/>  
830 - <currency/>  
831 - <decimal/>  
832 - <group/>  
833 - <nullif>replace</nullif>  
834 - <length>-1</length>  
835 - <precision>-1</precision>  
836 - <set_empty_string>N</set_empty_string>  
837 - </field>  
838 - </fields>  
839 - <cluster_schema/>  
840 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
841 - <xloc>202</xloc>  
842 - <yloc>351</yloc>  
843 - <draw>Y</draw>  
844 - </GUI>  
845 - </step>  
846 -  
847 - <step>  
848 - <name>&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</name>  
849 - <type>SelectValues</type>  
850 - <description/>  
851 - <distribute>Y</distribute>  
852 - <custom_distribution/>  
853 - <copies>1</copies>  
854 - <partitioning>  
855 - <method>none</method>  
856 - <schema_name/>  
857 - </partitioning>  
858 - <fields> <field> <name>col_name</name>  
859 - <rename/>  
860 - <length>-2</length>  
861 - <precision>-2</precision>  
862 - </field> <field> <name>col_type</name>  
863 - <rename/>  
864 - <length>-2</length>  
865 - <precision>-2</precision>  
866 - </field> <field> <name>col_value</name>  
867 - <rename/>  
868 - <length>-2</length>  
869 - <precision>-2</precision>  
870 - </field> <select_unspecified>N</select_unspecified>  
871 - </fields> <cluster_schema/>  
872 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
873 - <xloc>496</xloc>  
874 - <yloc>508</yloc>  
875 - <draw>Y</draw>  
876 - </GUI>  
877 - </step>  
878 -  
879 - <step>  
880 - <name>&#x66ff;&#x6362;&#x505c;&#x8f66;&#x5382;&#x540d;&#x5b57; </name>  
881 - <type>SetValueField</type>  
882 - <description/>  
883 - <distribute>Y</distribute>  
884 - <custom_distribution/>  
885 - <copies>1</copies>  
886 - <partitioning>  
887 - <method>none</method>  
888 - <schema_name/>  
889 - </partitioning>  
890 - <fields>  
891 - <field>  
892 - <name>col_value</name>  
893 - <replaceby>tccname_</replaceby>  
894 - </field>  
895 - </fields>  
896 - <cluster_schema/>  
897 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
898 - <xloc>345</xloc>  
899 - <yloc>430</yloc>  
900 - <draw>Y</draw>  
901 - </GUI>  
902 - </step>  
903 -  
904 - <step>  
905 - <name>&#x66ff;&#x6362;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;</name>  
906 - <type>SetValueField</type>  
907 - <description/>  
908 - <distribute>Y</distribute>  
909 - <custom_distribution/>  
910 - <copies>1</copies>  
911 - <partitioning>  
912 - <method>none</method>  
913 - <schema_name/>  
914 - </partitioning>  
915 - <fields>  
916 - <field>  
917 - <name>col_value</name>  
918 - <replaceby>ttinfoname_</replaceby>  
919 - </field>  
920 - </fields>  
921 - <cluster_schema/>  
922 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
923 - <xloc>354</xloc>  
924 - <yloc>509</yloc>  
925 - <draw>Y</draw>  
926 - </GUI>  
927 - </step>  
928 -  
929 - <step>  
930 - <name>&#x66ff;&#x6362;&#x7ebf;&#x8def;&#x540d;&#x79f0;</name>  
931 - <type>SetValueField</type>  
932 - <description/>  
933 - <distribute>Y</distribute>  
934 - <custom_distribution/>  
935 - <copies>1</copies>  
936 - <partitioning>  
937 - <method>none</method>  
938 - <schema_name/>  
939 - </partitioning>  
940 - <fields>  
941 - <field>  
942 - <name>col_value</name>  
943 - <replaceby>xlname_</replaceby>  
944 - </field>  
945 - </fields>  
946 - <cluster_schema/>  
947 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
948 - <xloc>340</xloc>  
949 - <yloc>352</yloc>  
950 - <draw>Y</draw>  
951 - </GUI>  
952 - </step>  
953 -  
954 - <step>  
955 - <name>&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</name>  
956 - <type>SelectValues</type>  
957 - <description/>  
958 - <distribute>Y</distribute>  
959 - <custom_distribution/>  
960 - <copies>1</copies>  
961 - <partitioning>  
962 - <method>none</method>  
963 - <schema_name/>  
964 - </partitioning>  
965 - <fields> <field> <name>col_name</name>  
966 - <rename/>  
967 - <length>-2</length>  
968 - <precision>-2</precision>  
969 - </field> <field> <name>col_type</name>  
970 - <rename/>  
971 - <length>-2</length>  
972 - <precision>-2</precision>  
973 - </field> <field> <name>col_value</name>  
974 - <rename/>  
975 - <length>-2</length>  
976 - <precision>-2</precision>  
977 - </field> <select_unspecified>N</select_unspecified>  
978 - </fields> <cluster_schema/>  
979 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
980 - <xloc>487</xloc>  
981 - <yloc>353</yloc>  
982 - <draw>Y</draw>  
983 - </GUI>  
984 - </step>  
985 -  
986 - <step>  
987 - <name>&#x83b7;&#x53d6;excel&#x5b57;&#x6bb5;&#x540d;&#x5b57;&#x7b26;&#x4e32;</name>  
988 - <type>GetVariable</type>  
989 - <description/>  
990 - <distribute>Y</distribute>  
991 - <custom_distribution/>  
992 - <copies>1</copies>  
993 - <partitioning>  
994 - <method>none</method>  
995 - <schema_name/>  
996 - </partitioning>  
997 - <fields>  
998 - <field>  
999 - <name>fieldnames</name>  
1000 - <variable>&#x24;&#x7b;excelfieldnames&#x7d;</variable>  
1001 - <type>String</type>  
1002 - <format/>  
1003 - <currency/>  
1004 - <decimal/>  
1005 - <group/>  
1006 - <length>-1</length>  
1007 - <precision>-1</precision>  
1008 - <trim_type>none</trim_type>  
1009 - </field>  
1010 - </fields>  
1011 - <cluster_schema/>  
1012 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1013 - <xloc>71</xloc>  
1014 - <yloc>163</yloc>  
1015 - <draw>Y</draw>  
1016 - </GUI>  
1017 - </step>  
1018 -  
1019 - <step>  
1020 - <name>&#x83b7;&#x53d6;excel&#x6587;&#x4ef6;&#x540d;</name>  
1021 - <type>GetVariable</type>  
1022 - <description/>  
1023 - <distribute>Y</distribute>  
1024 - <custom_distribution/>  
1025 - <copies>1</copies>  
1026 - <partitioning>  
1027 - <method>none</method>  
1028 - <schema_name/>  
1029 - </partitioning>  
1030 - <fields>  
1031 - <field>  
1032 - <name>filepath_</name>  
1033 - <variable>&#x24;&#x7b;filepath&#x7d;</variable>  
1034 - <type>String</type>  
1035 - <format/>  
1036 - <currency/>  
1037 - <decimal/>  
1038 - <group/>  
1039 - <length>-1</length>  
1040 - <precision>-1</precision>  
1041 - <trim_type>none</trim_type>  
1042 - </field>  
1043 - <field>  
1044 - <name>erroroutputdir_</name>  
1045 - <variable>&#x24;&#x7b;erroroutputdir&#x7d;</variable>  
1046 - <type>String</type>  
1047 - <format/>  
1048 - <currency/>  
1049 - <decimal/>  
1050 - <group/>  
1051 - <length>-1</length>  
1052 - <precision>-1</precision>  
1053 - <trim_type>none</trim_type>  
1054 - </field>  
1055 - <field>  
1056 - <name>sheetname_</name>  
1057 - <variable>&#x24;&#x7b;sheetname&#x7d;</variable>  
1058 - <type>String</type>  
1059 - <format/>  
1060 - <currency/>  
1061 - <decimal/>  
1062 - <group/>  
1063 - <length>-1</length>  
1064 - <precision>-1</precision>  
1065 - <trim_type>none</trim_type>  
1066 - </field>  
1067 - </fields>  
1068 - <cluster_schema/>  
1069 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1070 - <xloc>120</xloc>  
1071 - <yloc>62</yloc>  
1072 - <draw>Y</draw>  
1073 - </GUI>  
1074 - </step>  
1075 -  
1076 - <step>  
1077 - <name>&#x83b7;&#x53d6;normalize&#x5b57;&#x6bb5;&#x540d;&#x5b57;&#x7b26;&#x4e32;</name>  
1078 - <type>GetVariable</type>  
1079 - <description/>  
1080 - <distribute>Y</distribute>  
1081 - <custom_distribution/>  
1082 - <copies>1</copies>  
1083 - <partitioning>  
1084 - <method>none</method>  
1085 - <schema_name/>  
1086 - </partitioning>  
1087 - <fields>  
1088 - <field>  
1089 - <name>normalizefieldnames_</name>  
1090 - <variable>&#x24;&#x7b;normalizefieldnames&#x7d;</variable>  
1091 - <type>String</type>  
1092 - <format/>  
1093 - <currency/>  
1094 - <decimal/>  
1095 - <group/>  
1096 - <length>-1</length>  
1097 - <precision>-1</precision>  
1098 - <trim_type>none</trim_type>  
1099 - </field>  
1100 - </fields>  
1101 - <cluster_schema/>  
1102 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1103 - <xloc>80</xloc>  
1104 - <yloc>261</yloc>  
1105 - <draw>Y</draw>  
1106 - </GUI>  
1107 - </step>  
1108 -  
1109 - <step>  
1110 - <name>&#x83b7;&#x53d6;&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;</name>  
1111 - <type>GetVariable</type>  
1112 - <description/>  
1113 - <distribute>Y</distribute>  
1114 - <custom_distribution/>  
1115 - <copies>1</copies>  
1116 - <partitioning>  
1117 - <method>none</method>  
1118 - <schema_name/>  
1119 - </partitioning>  
1120 - <fields>  
1121 - <field>  
1122 - <name>tccname_</name>  
1123 - <variable>&#x24;&#x7b;tccname&#x7d;</variable>  
1124 - <type>String</type>  
1125 - <format/>  
1126 - <currency/>  
1127 - <decimal/>  
1128 - <group/>  
1129 - <length>-1</length>  
1130 - <precision>-1</precision>  
1131 - <trim_type>none</trim_type>  
1132 - </field>  
1133 - </fields>  
1134 - <cluster_schema/>  
1135 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1136 - <xloc>80</xloc>  
1137 - <yloc>430</yloc>  
1138 - <draw>Y</draw>  
1139 - </GUI>  
1140 - </step>  
1141 -  
1142 - <step>  
1143 - <name>&#x83b7;&#x53d6;&#x65f6;&#x523b;&#x8868;id</name>  
1144 - <type>GetVariable</type>  
1145 - <description/>  
1146 - <distribute>Y</distribute>  
1147 - <custom_distribution/>  
1148 - <copies>1</copies>  
1149 - <partitioning>  
1150 - <method>none</method>  
1151 - <schema_name/>  
1152 - </partitioning>  
1153 - <fields>  
1154 - <field>  
1155 - <name>ttid_</name>  
1156 - <variable>&#x24;&#x7b;ttid&#x7d;</variable>  
1157 - <type>Integer</type>  
1158 - <format/>  
1159 - <currency/>  
1160 - <decimal/>  
1161 - <group/>  
1162 - <length>-1</length>  
1163 - <precision>-1</precision>  
1164 - <trim_type>none</trim_type>  
1165 - </field>  
1166 - </fields>  
1167 - <cluster_schema/>  
1168 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1169 - <xloc>427</xloc>  
1170 - <yloc>26</yloc>  
1171 - <draw>Y</draw>  
1172 - </GUI>  
1173 - </step>  
1174 -  
1175 - <step>  
1176 - <name>&#x83b7;&#x53d6;&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;</name>  
1177 - <type>GetVariable</type>  
1178 - <description/>  
1179 - <distribute>Y</distribute>  
1180 - <custom_distribution/>  
1181 - <copies>1</copies>  
1182 - <partitioning>  
1183 - <method>none</method>  
1184 - <schema_name/>  
1185 - </partitioning>  
1186 - <fields>  
1187 - <field>  
1188 - <name>ttinfoname_</name>  
1189 - <variable>&#x24;&#x7b;ttinfoname&#x7d;</variable>  
1190 - <type>String</type>  
1191 - <format/>  
1192 - <currency/>  
1193 - <decimal/>  
1194 - <group/>  
1195 - <length>-1</length>  
1196 - <precision>-1</precision>  
1197 - <trim_type>none</trim_type>  
1198 - </field>  
1199 - </fields>  
1200 - <cluster_schema/>  
1201 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1202 - <xloc>82</xloc>  
1203 - <yloc>508</yloc>  
1204 - <draw>Y</draw>  
1205 - </GUI>  
1206 - </step>  
1207 -  
1208 - <step>  
1209 - <name>&#x83b7;&#x53d6;&#x7ebf;&#x8def;&#x540d;&#x79f0;</name>  
1210 - <type>GetVariable</type>  
1211 - <description/>  
1212 - <distribute>Y</distribute>  
1213 - <custom_distribution/>  
1214 - <copies>1</copies>  
1215 - <partitioning>  
1216 - <method>none</method>  
1217 - <schema_name/>  
1218 - </partitioning>  
1219 - <fields>  
1220 - <field>  
1221 - <name>xlname_</name>  
1222 - <variable>&#x24;&#x7b;xlname&#x7d;</variable>  
1223 - <type>String</type>  
1224 - <format/>  
1225 - <currency/>  
1226 - <decimal/>  
1227 - <group/>  
1228 - <length>-1</length>  
1229 - <precision>-1</precision>  
1230 - <trim_type>none</trim_type>  
1231 - </field>  
1232 - </fields>  
1233 - <cluster_schema/>  
1234 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1235 - <xloc>78</xloc>  
1236 - <yloc>351</yloc>  
1237 - <draw>Y</draw>  
1238 - </GUI>  
1239 - </step>  
1240 -  
1241 - <step>  
1242 - <name>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d;</name>  
1243 - <type>SplitFieldToRows3</type>  
1244 - <description/>  
1245 - <distribute>Y</distribute>  
1246 - <custom_distribution/>  
1247 - <copies>1</copies>  
1248 - <partitioning>  
1249 - <method>none</method>  
1250 - <schema_name/>  
1251 - </partitioning>  
1252 - <splitfield>fieldnames</splitfield>  
1253 - <delimiter>,</delimiter>  
1254 - <newfield>fieldname</newfield>  
1255 - <rownum>N</rownum>  
1256 - <rownum_field/>  
1257 - <resetrownumber>Y</resetrownumber>  
1258 - <delimiter_is_regex>N</delimiter_is_regex>  
1259 - <cluster_schema/>  
1260 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1261 - <xloc>261</xloc>  
1262 - <yloc>163</yloc>  
1263 - <draw>Y</draw>  
1264 - </GUI>  
1265 - </step>  
1266 -  
1267 - <step>  
1268 - <name>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d; 2</name>  
1269 - <type>SplitFieldToRows3</type>  
1270 - <description/>  
1271 - <distribute>Y</distribute>  
1272 - <custom_distribution/>  
1273 - <copies>1</copies>  
1274 - <partitioning>  
1275 - <method>none</method>  
1276 - <schema_name/>  
1277 - </partitioning>  
1278 - <splitfield>normalizefieldnames_</splitfield>  
1279 - <delimiter>,</delimiter>  
1280 - <newfield>nfieldname</newfield>  
1281 - <rownum>N</rownum>  
1282 - <rownum_field/>  
1283 - <resetrownumber>Y</resetrownumber>  
1284 - <delimiter_is_regex>N</delimiter_is_regex>  
1285 - <cluster_schema/>  
1286 - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>  
1287 - <xloc>263</xloc>  
1288 - <yloc>257</yloc>  
1289 - <draw>Y</draw>  
1290 - </GUI>  
1291 - </step>  
1292 -  
1293 - <step_error_handling>  
1294 - </step_error_handling>  
1295 - <slave-step-copy-partition-distribution>  
1296 -</slave-step-copy-partition-distribution>  
1297 - <slave_transformation>N</slave_transformation>  
1298 -  
1299 -</transformation> 1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<transformation>
  3 + <info>
  4 + <name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x5bfc;&#x5165;&#x5143;&#x6570;&#x636e;</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 + <parameter>
  13 + <name>erroroutputdir</name>
  14 + <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;runtime_temp&#x2f;bsth_control_u_d_files&#x2f;erroroutput</default_value>
  15 + <description>ktr step&#x914d;&#x7f6e;&#x7684;&#x9519;&#x8bef;&#x8f93;&#x51fa;&#x76ee;&#x5f55;</description>
  16 + </parameter>
  17 + <parameter>
  18 + <name>excelfieldnames</name>
  19 + <default_value>&#x8def;&#x724c;,&#x51fa;&#x573a;,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;1,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;1,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;2,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;2,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;3,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;3,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;4,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;4,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;5,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;5,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;6,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;6,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;7,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;7,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;8,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;8,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;9,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;9,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;10,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;10,&#x8fdb;&#x573a;</default_value>
  20 + <description>&#x65f6;&#x523b;&#x8868;excel&#x8f93;&#x5165;&#x5b57;&#x6bb5;&#x540d;&#xff0c;&#x4ee5;&#x9017;&#x53f7;&#x8fde;&#x63a5;</description>
  21 + </parameter>
  22 + <parameter>
  23 + <name>filepath</name>
  24 + <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;bsth_project&#x2f;bsth_control_etl&#x2f;&#x95f5;&#x884c;&#x516c;&#x4ea4;&#x2f;&#x95f5;&#x884c;26&#x8def;&#x65f6;&#x523b;&#x8868;160630&#x65f6;&#x523b;&#x8868;.xls</default_value>
  25 + <description>&#x5f85;&#x5904;&#x7406;&#x5bfc;&#x5165;&#x7684;excel&#x6587;&#x4ef6;</description>
  26 + </parameter>
  27 + <parameter>
  28 + <name>injectktrfile</name>
  29 + <default_value>&#x2f;Users&#x2f;xu&#x2f;resource&#x2f;project_code&#x2f;bsth_project&#x2f;bsth_control&#x2f;src&#x2f;main&#x2f;resources&#x2f;datatools&#x2f;ktrs&#x2f;ttinfodetailDataInput.ktr</default_value>
  30 + <description>&#x6ce8;&#x5165;&#x5143;&#x6570;&#x636e;&#x7684;ktr&#x6587;&#x4ef6;</description>
  31 + </parameter>
  32 + <parameter>
  33 + <name>lineinfoid</name>
  34 + <default_value>1000</default_value>
  35 + <description>&#x7ebf;&#x8def;&#x6807;&#x51c6;id</description>
  36 + </parameter>
  37 + <parameter>
  38 + <name>normalizefieldnames</name>
  39 + <default_value>&#x51fa;&#x573a;,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;1,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;1,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;2,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;2,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;3,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;3,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;4,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;4,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;5,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;5,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;6,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;6,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;7,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;7,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;8,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;8,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;9,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;9,&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;10,&#x5858;&#x6cfe;&#x8def;&#x5c1a;&#x4e49;&#x8def;10,&#x8fdb;&#x573a;</default_value>
  40 + <description>&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;&#x5b57;&#x6bb5;&#x540d;&#xff0c;&#x4ee5;&#x9017;&#x53f7;&#x8fde;&#x63a5;</description>
  41 + </parameter>
  42 + <parameter>
  43 + <name>sheetname</name>
  44 + <default_value>&#x5de5;&#x4f5c;&#x8868;1</default_value>
  45 + <description>xls sheet&#x540d;&#x5b57;</description>
  46 + </parameter>
  47 + <parameter>
  48 + <name>tccname</name>
  49 + <default_value>&#x4e1c;&#x5ddd;&#x8def;&#x5730;&#x94c1;&#x7ad9;&#x505c;&#x8f66;&#x573a;</default_value>
  50 + <description>&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</description>
  51 + </parameter>
  52 + <parameter>
  53 + <name>ttid</name>
  54 + <default_value>1</default_value>
  55 + <description>&#x65f6;&#x523b;&#x8868;id</description>
  56 + </parameter>
  57 + <parameter>
  58 + <name>ttinfoname</name>
  59 + <default_value>&#x8868;2</default_value>
  60 + <description>&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;</description>
  61 + </parameter>
  62 + <parameter>
  63 + <name>xlname</name>
  64 + <default_value>&#x95f5;&#x884c;26&#x8def;</default_value>
  65 + <description>&#x7ebf;&#x8def;&#x540d;&#x79f0;</description>
  66 + </parameter>
  67 + </parameters>
  68 + <log>
  69 +<trans-log-table><connection/>
  70 +<schema/>
  71 +<table/>
  72 +<size_limit_lines/>
  73 +<interval/>
  74 +<timeout_days/>
  75 +<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>
  76 +<perf-log-table><connection/>
  77 +<schema/>
  78 +<table/>
  79 +<interval/>
  80 +<timeout_days/>
  81 +<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>
  82 +<channel-log-table><connection/>
  83 +<schema/>
  84 +<table/>
  85 +<timeout_days/>
  86 +<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>
  87 +<step-log-table><connection/>
  88 +<schema/>
  89 +<table/>
  90 +<timeout_days/>
  91 +<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>
  92 +<metrics-log-table><connection/>
  93 +<schema/>
  94 +<table/>
  95 +<timeout_days/>
  96 +<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>
  97 + </log>
  98 + <maxdate>
  99 + <connection/>
  100 + <table/>
  101 + <field/>
  102 + <offset>0.0</offset>
  103 + <maxdiff>0.0</maxdiff>
  104 + </maxdate>
  105 + <size_rowset>10000</size_rowset>
  106 + <sleep_time_empty>50</sleep_time_empty>
  107 + <sleep_time_full>50</sleep_time_full>
  108 + <unique_connections>N</unique_connections>
  109 + <feedback_shown>Y</feedback_shown>
  110 + <feedback_size>50000</feedback_size>
  111 + <using_thread_priorities>Y</using_thread_priorities>
  112 + <shared_objects_file/>
  113 + <capture_step_performance>N</capture_step_performance>
  114 + <step_performance_capturing_delay>1000</step_performance_capturing_delay>
  115 + <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
  116 + <dependencies>
  117 + </dependencies>
  118 + <partitionschemas>
  119 + </partitionschemas>
  120 + <slaveservers>
  121 + </slaveservers>
  122 + <clusterschemas>
  123 + </clusterschemas>
  124 + <created_user>-</created_user>
  125 + <created_date>2016&#x2f;07&#x2f;01 09&#x3a;55&#x3a;32.649</created_date>
  126 + <modified_user>-</modified_user>
  127 + <modified_date>2016&#x2f;07&#x2f;01 09&#x3a;55&#x3a;32.649</modified_date>
  128 + <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA&#x3d;</key_for_session_key>
  129 + <is_key_private>N</is_key_private>
  130 + </info>
  131 + <notepads>
  132 + </notepads>
  133 + <connection>
  134 + <name>192.168.168.1_jwgl_dw</name>
  135 + <server>192.168.168.1</server>
  136 + <type>ORACLE</type>
  137 + <access>Native</access>
  138 + <database>orcl</database>
  139 + <port>1521</port>
  140 + <username>jwgl_dw</username>
  141 + <password>Encrypted 2be98afc86aa7f2e4cb13b977d2adabcd</password>
  142 + <servername/>
  143 + <data_tablespace/>
  144 + <index_tablespace/>
  145 + <attributes>
  146 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  147 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  148 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  149 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  150 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  151 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  152 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  153 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  154 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  155 + </attributes>
  156 + </connection>
  157 + <connection>
  158 + <name>bus_control_variable</name>
  159 + <server>&#x24;&#x7b;v_db_ip&#x7d;</server>
  160 + <type>MYSQL</type>
  161 + <access>Native</access>
  162 + <database>&#x24;&#x7b;v_db_dname&#x7d;</database>
  163 + <port>3306</port>
  164 + <username>&#x24;&#x7b;v_db_uname&#x7d;</username>
  165 + <password>&#x24;&#x7b;v_db_pwd&#x7d;</password>
  166 + <servername/>
  167 + <data_tablespace/>
  168 + <index_tablespace/>
  169 + <attributes>
  170 + <attribute><code>EXTRA_OPTION_MYSQL.characterEncoding</code><attribute>utf8</attribute></attribute>
  171 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  172 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  173 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  174 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  175 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  176 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  177 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  178 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  179 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  180 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  181 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  182 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  183 + </attributes>
  184 + </connection>
  185 + <connection>
  186 + <name>bus_control_&#x516c;&#x53f8;_201</name>
  187 + <server>localhost</server>
  188 + <type>MYSQL</type>
  189 + <access>Native</access>
  190 + <database>control</database>
  191 + <port>3306</port>
  192 + <username>root</username>
  193 + <password>Encrypted </password>
  194 + <servername/>
  195 + <data_tablespace/>
  196 + <index_tablespace/>
  197 + <attributes>
  198 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  199 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  200 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  201 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  202 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  203 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  204 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  205 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  206 + <attribute><code>STREAM_RESULTS</code><attribute>N</attribute></attribute>
  207 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  208 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  209 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  210 + </attributes>
  211 + </connection>
  212 + <connection>
  213 + <name>bus_control_&#x672c;&#x673a;</name>
  214 + <server>localhost</server>
  215 + <type>MYSQL</type>
  216 + <access>Native</access>
  217 + <database>control</database>
  218 + <port>3306</port>
  219 + <username>root</username>
  220 + <password>Encrypted </password>
  221 + <servername/>
  222 + <data_tablespace/>
  223 + <index_tablespace/>
  224 + <attributes>
  225 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  226 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  227 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  228 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  229 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  230 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  231 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  232 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  233 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  234 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  235 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  236 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  237 + </attributes>
  238 + </connection>
  239 + <connection>
  240 + <name>xlab_mysql_youle</name>
  241 + <server>101.231.124.8</server>
  242 + <type>MYSQL</type>
  243 + <access>Native</access>
  244 + <database>xlab_youle</database>
  245 + <port>45687</port>
  246 + <username>xlab-youle</username>
  247 + <password>Encrypted 2be98afc86aa78a88aa1be369d187a3df</password>
  248 + <servername/>
  249 + <data_tablespace/>
  250 + <index_tablespace/>
  251 + <attributes>
  252 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  253 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  254 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  255 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  256 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  257 + <attribute><code>PORT_NUMBER</code><attribute>45687</attribute></attribute>
  258 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  259 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  260 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  261 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  262 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  263 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  264 + </attributes>
  265 + </connection>
  266 + <connection>
  267 + <name>xlab_mysql_youle&#xff08;&#x672c;&#x673a;&#xff09;</name>
  268 + <server>localhost</server>
  269 + <type>MYSQL</type>
  270 + <access>Native</access>
  271 + <database>xlab_youle</database>
  272 + <port>3306</port>
  273 + <username>root</username>
  274 + <password>Encrypted </password>
  275 + <servername/>
  276 + <data_tablespace/>
  277 + <index_tablespace/>
  278 + <attributes>
  279 + <attribute><code>EXTRA_OPTION_MYSQL.defaultFetchSize</code><attribute>500</attribute></attribute>
  280 + <attribute><code>EXTRA_OPTION_MYSQL.useCursorFetch</code><attribute>true</attribute></attribute>
  281 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  282 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  283 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  284 + <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
  285 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  286 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  287 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  288 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>N</attribute></attribute>
  289 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>N</attribute></attribute>
  290 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  291 + </attributes>
  292 + </connection>
  293 + <connection>
  294 + <name>xlab_youle</name>
  295 + <server/>
  296 + <type>MYSQL</type>
  297 + <access>JNDI</access>
  298 + <database>xlab_youle</database>
  299 + <port>1521</port>
  300 + <username/>
  301 + <password>Encrypted </password>
  302 + <servername/>
  303 + <data_tablespace/>
  304 + <index_tablespace/>
  305 + <attributes>
  306 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  307 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  308 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  309 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  310 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  311 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  312 + <attribute><code>STREAM_RESULTS</code><attribute>Y</attribute></attribute>
  313 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  314 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  315 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  316 + </attributes>
  317 + </connection>
  318 + <order>
  319 + <hop> <from>&#x83b7;&#x53d6;excel&#x6587;&#x4ef6;&#x540d;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>
  320 + <hop> <from>&#x83b7;&#x53d6;excel&#x5b57;&#x6bb5;&#x540d;&#x5b57;&#x7b26;&#x4e32;</from><to>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d;</to><enabled>Y</enabled> </hop>
  321 + <hop> <from>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d;</from><to>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>
  322 + <hop> <from>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>
  323 + <hop> <from>&#x83b7;&#x53d6;normalize&#x5b57;&#x6bb5;&#x540d;&#x5b57;&#x7b26;&#x4e32;</from><to>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d; 2</to><enabled>Y</enabled> </hop>
  324 + <hop> <from>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d; 2</from><to>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</to><enabled>Y</enabled> </hop>
  325 + <hop> <from>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>
  326 + <hop> <from>&#x83b7;&#x53d6;&#x7ebf;&#x8def;&#x540d;&#x79f0;</from><to>&#x589e;&#x52a0;&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata</to><enabled>Y</enabled> </hop>
  327 + <hop> <from>&#x589e;&#x52a0;&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata</from><to>&#x66ff;&#x6362;&#x7ebf;&#x8def;&#x540d;&#x79f0;</to><enabled>Y</enabled> </hop>
  328 + <hop> <from>&#x66ff;&#x6362;&#x7ebf;&#x8def;&#x540d;&#x79f0;</from><to>&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</to><enabled>Y</enabled> </hop>
  329 + <hop> <from>&#x589e;&#x52a0;&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata</from><to>&#x66ff;&#x6362;&#x505c;&#x8f66;&#x5382;&#x540d;&#x5b57; </to><enabled>Y</enabled> </hop>
  330 + <hop> <from>&#x66ff;&#x6362;&#x505c;&#x8f66;&#x5382;&#x540d;&#x5b57; </from><to>&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</to><enabled>Y</enabled> </hop>
  331 + <hop> <from>&#x83b7;&#x53d6;&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;</from><to>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata</to><enabled>Y</enabled> </hop>
  332 + <hop> <from>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata</from><to>&#x66ff;&#x6362;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;</to><enabled>Y</enabled> </hop>
  333 + <hop> <from>&#x66ff;&#x6362;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;</from><to>&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</to><enabled>Y</enabled> </hop>
  334 + <hop> <from>&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</from><to>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</to><enabled>Y</enabled> </hop>
  335 + <hop> <from>&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</from><to>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</to><enabled>Y</enabled> </hop>
  336 + <hop> <from>&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</from><to>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</to><enabled>Y</enabled> </hop>
  337 + <hop> <from>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</from><to>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</to><enabled>Y</enabled> </hop>
  338 + <hop> <from>&#x83b7;&#x53d6;&#x65f6;&#x523b;&#x8868;id</from><to>&#x5220;&#x9664;&#x4e4b;&#x524d;&#x7684;&#x660e;&#x7ec6;&#x4fe1;&#x606f;</to><enabled>Y</enabled> </hop>
  339 + <hop> <from>&#x83b7;&#x53d6;&#x7ebf;&#x8def;&#x6807;&#x51c6;id</from><to>&#x505c;&#x8f66;&#x573a;&#x7f16;&#x7801;</to><enabled>Y</enabled> </hop>
  340 + <hop> <from>&#x505c;&#x8f66;&#x573a;&#x7f16;&#x7801;</from><to>&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;</to><enabled>Y</enabled> </hop>
  341 + <hop> <from>&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;</from><to>&#x589e;&#x52a0;&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata</to><enabled>Y</enabled> </hop>
  342 + </order>
  343 + <step>
  344 + <name>ETL&#x5143;&#x6570;&#x636e;&#x6ce8;&#x5165;</name>
  345 + <type>MetaInject</type>
  346 + <description/>
  347 + <distribute>Y</distribute>
  348 + <custom_distribution/>
  349 + <copies>1</copies>
  350 + <partitioning>
  351 + <method>none</method>
  352 + <schema_name/>
  353 + </partitioning>
  354 + <specification_method>filename</specification_method>
  355 + <trans_object_id/>
  356 + <trans_name/>
  357 + <filename>&#x24;&#x7b;injectktrfile&#x7d;</filename>
  358 + <directory_path/>
  359 + <source_step/>
  360 + <source_output_fields> </source_output_fields> <target_file/>
  361 + <no_execution>N</no_execution>
  362 + <stream_source_step/>
  363 + <stream_target_step/>
  364 + <mappings> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>
  365 + <target_attribute_key>FORMAT</target_attribute_key>
  366 + <target_detail>Y</target_detail>
  367 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>
  368 + <source_field>format</source_field>
  369 + </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>
  370 + <target_attribute_key>REPEAT</target_attribute_key>
  371 + <target_detail>Y</target_detail>
  372 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>
  373 + <source_field>repeat</source_field>
  374 + </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
  375 + <target_attribute_key>TRIM_TYPE</target_attribute_key>
  376 + <target_detail>Y</target_detail>
  377 + <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>
  378 + <source_field>trim_type</source_field>
  379 + </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
  380 + <target_attribute_key>FILENAME</target_attribute_key>
  381 + <target_detail>Y</target_detail>
  382 + <source_step>&#x83b7;&#x53d6;excel&#x6587;&#x4ef6;&#x540d;</source_step>
  383 + <source_field>filepath_</source_field>
  384 + </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
  385 + <target_attribute_key>PRECISION</target_attribute_key>
  386 + <target_detail>Y</target_detail>
  387 + <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>
  388 + <source_field>precision</source_field>
  389 + </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>
  390 + <target_attribute_key>TYPE</target_attribute_key>
  391 + <target_detail>Y</target_detail>
  392 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>
  393 + <source_field>type</source_field>
  394 + </mapping> <mapping> <target_step_name>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;&#xff0c;&#x7ebf;&#x8def;&#x540d;&#x5b57;&#xff0c;&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</target_step_name>
  395 + <target_attribute_key>DATA_VALUE</target_attribute_key>
  396 + <target_detail>Y</target_detail>
  397 + <source_step>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</source_step>
  398 + <source_field>col_value</source_field>
  399 + </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>
  400 + <target_attribute_key>LENGTH</target_attribute_key>
  401 + <target_detail>Y</target_detail>
  402 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>
  403 + <source_field>length</source_field>
  404 + </mapping> <mapping> <target_step_name>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;&#xff0c;&#x7ebf;&#x8def;&#x540d;&#x5b57;&#xff0c;&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</target_step_name>
  405 + <target_attribute_key>TYPE</target_attribute_key>
  406 + <target_detail>Y</target_detail>
  407 + <source_step>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</source_step>
  408 + <source_field>col_type</source_field>
  409 + </mapping> <mapping> <target_step_name>&#x884c;&#x8f6c;&#x5217;</target_step_name>
  410 + <target_attribute_key>NAME</target_attribute_key>
  411 + <target_detail>Y</target_detail>
  412 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c; 2</source_step>
  413 + <source_field>fieldName</source_field>
  414 + </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
  415 + <target_attribute_key>NAME</target_attribute_key>
  416 + <target_detail>Y</target_detail>
  417 + <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>
  418 + <source_field>fieldname</source_field>
  419 + </mapping> <mapping> <target_step_name>&#x73ed;&#x6b21;&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;</target_step_name>
  420 + <target_attribute_key>NAME</target_attribute_key>
  421 + <target_detail>Y</target_detail>
  422 + <source_step>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</source_step>
  423 + <source_field>nfieldname</source_field>
  424 + </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
  425 + <target_attribute_key>LENGTH</target_attribute_key>
  426 + <target_detail>Y</target_detail>
  427 + <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>
  428 + <source_field>length</source_field>
  429 + </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
  430 + <target_attribute_key>SHEET_NAME</target_attribute_key>
  431 + <target_detail>Y</target_detail>
  432 + <source_step>&#x83b7;&#x53d6;excel&#x6587;&#x4ef6;&#x540d;</source_step>
  433 + <source_field>sheetname_</source_field>
  434 + </mapping> <mapping> <target_step_name>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;&#xff0c;&#x7ebf;&#x8def;&#x540d;&#x5b57;&#xff0c;&#x505c;&#x8f66;&#x573a;&#x540d;&#x5b57;</target_step_name>
  435 + <target_attribute_key>NAME</target_attribute_key>
  436 + <target_detail>Y</target_detail>
  437 + <source_step>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</source_step>
  438 + <source_field>col_name</source_field>
  439 + </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
  440 + <target_attribute_key>TYPE</target_attribute_key>
  441 + <target_detail>Y</target_detail>
  442 + <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>
  443 + <source_field>fieldtype</source_field>
  444 + </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>
  445 + <target_attribute_key>NAME</target_attribute_key>
  446 + <target_detail>Y</target_detail>
  447 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>
  448 + <source_field>fieldName</source_field>
  449 + </mapping> <mapping> <target_step_name>&#x884c;&#x8f6c;&#x5217;</target_step_name>
  450 + <target_attribute_key>VALUE</target_attribute_key>
  451 + <target_detail>Y</target_detail>
  452 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c; 2</source_step>
  453 + <source_field>fieldName</source_field>
  454 + </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>
  455 + <target_attribute_key>TRIM_TYPE</target_attribute_key>
  456 + <target_detail>Y</target_detail>
  457 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>
  458 + <source_field>trim_type</source_field>
  459 + </mapping> <mapping> <target_step_name>&#x884c;&#x8f6c;&#x5217;</target_step_name>
  460 + <target_attribute_key>NORMALISED</target_attribute_key>
  461 + <target_detail>Y</target_detail>
  462 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c; 2</source_step>
  463 + <source_field>value</source_field>
  464 + </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
  465 + <target_attribute_key>REPEAT</target_attribute_key>
  466 + <target_detail>Y</target_detail>
  467 + <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>
  468 + <source_field>repeat</source_field>
  469 + </mapping> <mapping> <target_step_name>&#x73ed;&#x6b21;&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;</target_step_name>
  470 + <target_attribute_key>NORMALISED</target_attribute_key>
  471 + <target_detail>Y</target_detail>
  472 + <source_step>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</source_step>
  473 + <source_field>valuefield</source_field>
  474 + </mapping> <mapping> <target_step_name>&#x73ed;&#x6b21;&#x6570;&#x636e;&#x8303;&#x5f0f;&#x5316;</target_step_name>
  475 + <target_attribute_key>VALUE</target_attribute_key>
  476 + <target_detail>Y</target_detail>
  477 + <source_step>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</source_step>
  478 + <source_field>nfieldname</source_field>
  479 + </mapping> <mapping> <target_step_name>&#x65f6;&#x523b;&#x8868;&#x660e;&#x7ec6;&#x4fe1;&#x606f;Excel&#x8f93;&#x5165;</target_step_name>
  480 + <target_attribute_key>FORMAT</target_attribute_key>
  481 + <target_detail>Y</target_detail>
  482 + <source_step>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</source_step>
  483 + <source_field>format</source_field>
  484 + </mapping> <mapping> <target_step_name>Excel&#x8f93;&#x5165;</target_step_name>
  485 + <target_attribute_key>PRECISION</target_attribute_key>
  486 + <target_detail>Y</target_detail>
  487 + <source_step>&#x5217;&#x62c6;&#x5206;&#x4e3a;&#x591a;&#x884c;</source_step>
  488 + <source_field>precision</source_field>
  489 + </mapping> </mappings> <cluster_schema/>
  490 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  491 + <xloc>876</xloc>
  492 + <yloc>167</yloc>
  493 + <draw>Y</draw>
  494 + </GUI>
  495 + </step>
  496 +
  497 + <step>
  498 + <name>&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</name>
  499 + <type>SelectValues</type>
  500 + <description/>
  501 + <distribute>Y</distribute>
  502 + <custom_distribution/>
  503 + <copies>1</copies>
  504 + <partitioning>
  505 + <method>none</method>
  506 + <schema_name/>
  507 + </partitioning>
  508 + <fields> <field> <name>col_name</name>
  509 + <rename/>
  510 + <length>-2</length>
  511 + <precision>-2</precision>
  512 + </field> <field> <name>col_type</name>
  513 + <rename/>
  514 + <length>-2</length>
  515 + <precision>-2</precision>
  516 + </field> <field> <name>col_value</name>
  517 + <rename/>
  518 + <length>-2</length>
  519 + <precision>-2</precision>
  520 + </field> <select_unspecified>N</select_unspecified>
  521 + </fields> <cluster_schema/>
  522 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  523 + <xloc>743</xloc>
  524 + <yloc>470</yloc>
  525 + <draw>Y</draw>
  526 + </GUI>
  527 + </step>
  528 +
  529 + <step>
  530 + <name>&#x5220;&#x9664;&#x4e4b;&#x524d;&#x7684;&#x660e;&#x7ec6;&#x4fe1;&#x606f;</name>
  531 + <type>ExecSQL</type>
  532 + <description/>
  533 + <distribute>Y</distribute>
  534 + <custom_distribution/>
  535 + <copies>1</copies>
  536 + <partitioning>
  537 + <method>none</method>
  538 + <schema_name/>
  539 + </partitioning>
  540 + <connection>bus_control_variable</connection>
  541 + <execute_each_row>Y</execute_each_row>
  542 + <single_statement>N</single_statement>
  543 + <replace_variables>N</replace_variables>
  544 + <quoteString>N</quoteString>
  545 + <sql>delete from bsth_c_s_ttinfo_detail where ttinfo &#x3d; &#x3f;</sql>
  546 + <set_params>N</set_params>
  547 + <insert_field/>
  548 + <update_field/>
  549 + <delete_field/>
  550 + <read_field/>
  551 + <arguments>
  552 + <argument><name>ttid_</name></argument>
  553 + </arguments>
  554 + <cluster_schema/>
  555 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  556 + <xloc>808</xloc>
  557 + <yloc>16</yloc>
  558 + <draw>Y</draw>
  559 + </GUI>
  560 + </step>
  561 +
  562 + <step>
  563 + <name>&#x5408;&#x5e76;&#x589e;&#x52a0;&#x5e38;&#x91cf;&#x6570;&#x636e;metadata</name>
  564 + <type>Dummy</type>
  565 + <description/>
  566 + <distribute>Y</distribute>
  567 + <custom_distribution/>
  568 + <copies>1</copies>
  569 + <partitioning>
  570 + <method>none</method>
  571 + <schema_name/>
  572 + </partitioning>
  573 + <cluster_schema/>
  574 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  575 + <xloc>883</xloc>
  576 + <yloc>373</yloc>
  577 + <draw>Y</draw>
  578 + </GUI>
  579 + </step>
  580 +
  581 + <step>
  582 + <name>&#x589e;&#x52a0;excel&#x5b57;&#x6bb5;&#x5176;&#x4ed6;&#x5143;&#x6570;&#x636e;</name>
  583 + <type>Constant</type>
  584 + <description/>
  585 + <distribute>Y</distribute>
  586 + <custom_distribution/>
  587 + <copies>1</copies>
  588 + <partitioning>
  589 + <method>none</method>
  590 + <schema_name/>
  591 + </partitioning>
  592 + <fields>
  593 + <field>
  594 + <name>fieldtype</name>
  595 + <type>String</type>
  596 + <format/>
  597 + <currency/>
  598 + <decimal/>
  599 + <group/>
  600 + <nullif>String</nullif>
  601 + <length>-1</length>
  602 + <precision>-1</precision>
  603 + <set_empty_string>N</set_empty_string>
  604 + </field>
  605 + <field>
  606 + <name>length</name>
  607 + <type>String</type>
  608 + <format/>
  609 + <currency/>
  610 + <decimal/>
  611 + <group/>
  612 + <nullif>-1</nullif>
  613 + <length>-1</length>
  614 + <precision>-1</precision>
  615 + <set_empty_string>N</set_empty_string>
  616 + </field>
  617 + <field>
  618 + <name>precision</name>
  619 + <type>String</type>
  620 + <format/>
  621 + <currency/>
  622 + <decimal/>
  623 + <group/>
  624 + <nullif>-1</nullif>
  625 + <length>-1</length>
  626 + <precision>-1</precision>
  627 + <set_empty_string>N</set_empty_string>
  628 + </field>
  629 + <field>
  630 + <name>trim_type</name>
  631 + <type>String</type>
  632 + <format/>
  633 + <currency/>
  634 + <decimal/>
  635 + <group/>
  636 + <nullif>none</nullif>
  637 + <length>-1</length>
  638 + <precision>-1</precision>
  639 + <set_empty_string>N</set_empty_string>
  640 + </field>
  641 + <field>
  642 + <name>repeat</name>
  643 + <type>String</type>
  644 + <format/>
  645 + <currency/>
  646 + <decimal/>
  647 + <group/>
  648 + <nullif>N</nullif>
  649 + <length>-1</length>
  650 + <precision>-1</precision>
  651 + <set_empty_string>N</set_empty_string>
  652 + </field>
  653 + <field>
  654 + <name>format</name>
  655 + <type>String</type>
  656 + <format/>
  657 + <currency/>
  658 + <decimal/>
  659 + <group/>
  660 + <nullif>&#x23;</nullif>
  661 + <length>-1</length>
  662 + <precision>-1</precision>
  663 + <set_empty_string>N</set_empty_string>
  664 + </field>
  665 + </fields>
  666 + <cluster_schema/>
  667 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  668 + <xloc>622</xloc>
  669 + <yloc>162</yloc>
  670 + <draw>Y</draw>
  671 + </GUI>
  672 + </step>
  673 +
  674 + <step>
  675 + <name>&#x589e;&#x52a0;normalize&#x5143;&#x6570;&#x636e;</name>
  676 + <type>Constant</type>
  677 + <description/>
  678 + <distribute>Y</distribute>
  679 + <custom_distribution/>
  680 + <copies>1</copies>
  681 + <partitioning>
  682 + <method>none</method>
  683 + <schema_name/>
  684 + </partitioning>
  685 + <fields>
  686 + <field>
  687 + <name>valuefield</name>
  688 + <type>String</type>
  689 + <format/>
  690 + <currency/>
  691 + <decimal/>
  692 + <group/>
  693 + <nullif>&#x53d1;&#x8f66;&#x65f6;&#x95f4;</nullif>
  694 + <length>-1</length>
  695 + <precision>-1</precision>
  696 + <set_empty_string>N</set_empty_string>
  697 + </field>
  698 + </fields>
  699 + <cluster_schema/>
  700 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  701 + <xloc>628</xloc>
  702 + <yloc>247</yloc>
  703 + <draw>Y</draw>
  704 + </GUI>
  705 + </step>
  706 +
  707 + <step>
  708 + <name>&#x589e;&#x52a0;&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;metadata</name>
  709 + <type>Constant</type>
  710 + <description/>
  711 + <distribute>Y</distribute>
  712 + <custom_distribution/>
  713 + <copies>1</copies>
  714 + <partitioning>
  715 + <method>none</method>
  716 + <schema_name/>
  717 + </partitioning>
  718 + <fields>
  719 + <field>
  720 + <name>col_name</name>
  721 + <type>String</type>
  722 + <format/>
  723 + <currency/>
  724 + <decimal/>
  725 + <group/>
  726 + <nullif>tccname_</nullif>
  727 + <length>-1</length>
  728 + <precision>-1</precision>
  729 + <set_empty_string>N</set_empty_string>
  730 + </field>
  731 + <field>
  732 + <name>col_type</name>
  733 + <type>String</type>
  734 + <format/>
  735 + <currency/>
  736 + <decimal/>
  737 + <group/>
  738 + <nullif>String</nullif>
  739 + <length>-1</length>
  740 + <precision>-1</precision>
  741 + <set_empty_string>N</set_empty_string>
  742 + </field>
  743 + <field>
  744 + <name>col_value</name>
  745 + <type>String</type>
  746 + <format/>
  747 + <currency/>
  748 + <decimal/>
  749 + <group/>
  750 + <nullif>replace</nullif>
  751 + <length>-1</length>
  752 + <precision>-1</precision>
  753 + <set_empty_string>N</set_empty_string>
  754 + </field>
  755 + </fields>
  756 + <cluster_schema/>
  757 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  758 + <xloc>461</xloc>
  759 + <yloc>469</yloc>
  760 + <draw>Y</draw>
  761 + </GUI>
  762 + </step>
  763 +
  764 + <step>
  765 + <name>&#x589e;&#x52a0;&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata</name>
  766 + <type>Constant</type>
  767 + <description/>
  768 + <distribute>Y</distribute>
  769 + <custom_distribution/>
  770 + <copies>1</copies>
  771 + <partitioning>
  772 + <method>none</method>
  773 + <schema_name/>
  774 + </partitioning>
  775 + <fields>
  776 + <field>
  777 + <name>col_name</name>
  778 + <type>String</type>
  779 + <format/>
  780 + <currency/>
  781 + <decimal/>
  782 + <group/>
  783 + <nullif>ttinfoname_</nullif>
  784 + <length>-1</length>
  785 + <precision>-1</precision>
  786 + <set_empty_string>N</set_empty_string>
  787 + </field>
  788 + <field>
  789 + <name>col_type</name>
  790 + <type>String</type>
  791 + <format/>
  792 + <currency/>
  793 + <decimal/>
  794 + <group/>
  795 + <nullif>String</nullif>
  796 + <length>-1</length>
  797 + <precision>-1</precision>
  798 + <set_empty_string>N</set_empty_string>
  799 + </field>
  800 + <field>
  801 + <name>col_value</name>
  802 + <type>String</type>
  803 + <format/>
  804 + <currency/>
  805 + <decimal/>
  806 + <group/>
  807 + <nullif>replace</nullif>
  808 + <length>-1</length>
  809 + <precision>-1</precision>
  810 + <set_empty_string>N</set_empty_string>
  811 + </field>
  812 + </fields>
  813 + <cluster_schema/>
  814 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  815 + <xloc>608</xloc>
  816 + <yloc>601</yloc>
  817 + <draw>Y</draw>
  818 + </GUI>
  819 + </step>
  820 +
  821 + <step>
  822 + <name>&#x589e;&#x52a0;&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata</name>
  823 + <type>Constant</type>
  824 + <description/>
  825 + <distribute>Y</distribute>
  826 + <custom_distribution/>
  827 + <copies>1</copies>
  828 + <partitioning>
  829 + <method>none</method>
  830 + <schema_name/>
  831 + </partitioning>
  832 + <fields>
  833 + <field>
  834 + <name>col_name</name>
  835 + <type>String</type>
  836 + <format/>
  837 + <currency/>
  838 + <decimal/>
  839 + <group/>
  840 + <nullif>xlname_</nullif>
  841 + <length>-1</length>
  842 + <precision>-1</precision>
  843 + <set_empty_string>N</set_empty_string>
  844 + </field>
  845 + <field>
  846 + <name>col_type</name>
  847 + <type>String</type>
  848 + <format/>
  849 + <currency/>
  850 + <decimal/>
  851 + <group/>
  852 + <nullif>String</nullif>
  853 + <length>-1</length>
  854 + <precision>-1</precision>
  855 + <set_empty_string>N</set_empty_string>
  856 + </field>
  857 + <field>
  858 + <name>col_value</name>
  859 + <type>String</type>
  860 + <format/>
  861 + <currency/>
  862 + <decimal/>
  863 + <group/>
  864 + <nullif>replace</nullif>
  865 + <length>-1</length>
  866 + <precision>-1</precision>
  867 + <set_empty_string>N</set_empty_string>
  868 + </field>
  869 + </fields>
  870 + <cluster_schema/>
  871 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  872 + <xloc>383</xloc>
  873 + <yloc>341</yloc>
  874 + <draw>Y</draw>
  875 + </GUI>
  876 + </step>
  877 +
  878 + <step>
  879 + <name>&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</name>
  880 + <type>SelectValues</type>
  881 + <description/>
  882 + <distribute>Y</distribute>
  883 + <custom_distribution/>
  884 + <copies>1</copies>
  885 + <partitioning>
  886 + <method>none</method>
  887 + <schema_name/>
  888 + </partitioning>
  889 + <fields> <field> <name>col_name</name>
  890 + <rename/>
  891 + <length>-2</length>
  892 + <precision>-2</precision>
  893 + </field> <field> <name>col_type</name>
  894 + <rename/>
  895 + <length>-2</length>
  896 + <precision>-2</precision>
  897 + </field> <field> <name>col_value</name>
  898 + <rename/>
  899 + <length>-2</length>
  900 + <precision>-2</precision>
  901 + </field> <select_unspecified>N</select_unspecified>
  902 + </fields> <cluster_schema/>
  903 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  904 + <xloc>888</xloc>
  905 + <yloc>601</yloc>
  906 + <draw>Y</draw>
  907 + </GUI>
  908 + </step>
  909 +
  910 + <step>
  911 + <name>&#x66ff;&#x6362;&#x505c;&#x8f66;&#x5382;&#x540d;&#x5b57; </name>
  912 + <type>SetValueField</type>
  913 + <description/>
  914 + <distribute>Y</distribute>
  915 + <custom_distribution/>
  916 + <copies>1</copies>
  917 + <partitioning>
  918 + <method>none</method>
  919 + <schema_name/>
  920 + </partitioning>
  921 + <fields>
  922 + <field>
  923 + <name>col_value</name>
  924 + <replaceby>tccname_</replaceby>
  925 + </field>
  926 + </fields>
  927 + <cluster_schema/>
  928 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  929 + <xloc>598</xloc>
  930 + <yloc>471</yloc>
  931 + <draw>Y</draw>
  932 + </GUI>
  933 + </step>
  934 +
  935 + <step>
  936 + <name>&#x66ff;&#x6362;&#x65f6;&#x523b;&#x8868;&#x540d;&#x5b57;</name>
  937 + <type>SetValueField</type>
  938 + <description/>
  939 + <distribute>Y</distribute>
  940 + <custom_distribution/>
  941 + <copies>1</copies>
  942 + <partitioning>
  943 + <method>none</method>
  944 + <schema_name/>
  945 + </partitioning>
  946 + <fields>
  947 + <field>
  948 + <name>col_value</name>
  949 + <replaceby>ttinfoname_</replaceby>
  950 + </field>
  951 + </fields>
  952 + <cluster_schema/>
  953 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  954 + <xloc>746</xloc>
  955 + <yloc>602</yloc>
  956 + <draw>Y</draw>
  957 + </GUI>
  958 + </step>
  959 +
  960 + <step>
  961 + <name>&#x66ff;&#x6362;&#x7ebf;&#x8def;&#x540d;&#x79f0;</name>
  962 + <type>SetValueField</type>
  963 + <description/>
  964 + <distribute>Y</distribute>
  965 + <custom_distribution/>
  966 + <copies>1</copies>
  967 + <partitioning>
  968 + <method>none</method>
  969 + <schema_name/>
  970 + </partitioning>
  971 + <fields>
  972 + <field>
  973 + <name>col_value</name>
  974 + <replaceby>xlname_</replaceby>
  975 + </field>
  976 + </fields>
  977 + <cluster_schema/>
  978 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  979 + <xloc>521</xloc>
  980 + <yloc>342</yloc>
  981 + <draw>Y</draw>
  982 + </GUI>
  983 + </step>
  984 +
  985 + <step>
  986 + <name>&#x7ebf;&#x8def;&#x540d;&#x79f0;metadata&#x5b57;&#x6bb5;</name>
  987 + <type>SelectValues</type>
  988 + <description/>
  989 + <distribute>Y</distribute>
  990 + <custom_distribution/>
  991 + <copies>1</copies>
  992 + <partitioning>
  993 + <method>none</method>
  994 + <schema_name/>
  995 + </partitioning>
  996 + <fields> <field> <name>col_name</name>
  997 + <rename/>
  998 + <length>-2</length>
  999 + <precision>-2</precision>
  1000 + </field> <field> <name>col_type</name>
  1001 + <rename/>
  1002 + <length>-2</length>
  1003 + <precision>-2</precision>
  1004 + </field> <field> <name>col_value</name>
  1005 + <rename/>
  1006 + <length>-2</length>
  1007 + <precision>-2</precision>
  1008 + </field> <select_unspecified>N</select_unspecified>
  1009 + </fields> <cluster_schema/>
  1010 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1011 + <xloc>668</xloc>
  1012 + <yloc>343</yloc>
  1013 + <draw>Y</draw>
  1014 + </GUI>
  1015 + </step>
  1016 +
  1017 + <step>
  1018 + <name>&#x83b7;&#x53d6;excel&#x5b57;&#x6bb5;&#x540d;&#x5b57;&#x7b26;&#x4e32;</name>
  1019 + <type>GetVariable</type>
  1020 + <description/>
  1021 + <distribute>Y</distribute>
  1022 + <custom_distribution/>
  1023 + <copies>1</copies>
  1024 + <partitioning>
  1025 + <method>none</method>
  1026 + <schema_name/>
  1027 + </partitioning>
  1028 + <fields>
  1029 + <field>
  1030 + <name>fieldnames</name>
  1031 + <variable>&#x24;&#x7b;excelfieldnames&#x7d;</variable>
  1032 + <type>String</type>
  1033 + <format/>
  1034 + <currency/>
  1035 + <decimal/>
  1036 + <group/>
  1037 + <length>-1</length>
  1038 + <precision>-1</precision>
  1039 + <trim_type>none</trim_type>
  1040 + </field>
  1041 + </fields>
  1042 + <cluster_schema/>
  1043 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1044 + <xloc>252</xloc>
  1045 + <yloc>153</yloc>
  1046 + <draw>Y</draw>
  1047 + </GUI>
  1048 + </step>
  1049 +
  1050 + <step>
  1051 + <name>&#x83b7;&#x53d6;excel&#x6587;&#x4ef6;&#x540d;</name>
  1052 + <type>GetVariable</type>
  1053 + <description/>
  1054 + <distribute>Y</distribute>
  1055 + <custom_distribution/>
  1056 + <copies>1</copies>
  1057 + <partitioning>
  1058 + <method>none</method>
  1059 + <schema_name/>
  1060 + </partitioning>
  1061 + <fields>
  1062 + <field>
  1063 + <name>filepath_</name>
  1064 + <variable>&#x24;&#x7b;filepath&#x7d;</variable>
  1065 + <type>String</type>
  1066 + <format/>
  1067 + <currency/>
  1068 + <decimal/>
  1069 + <group/>
  1070 + <length>-1</length>
  1071 + <precision>-1</precision>
  1072 + <trim_type>none</trim_type>
  1073 + </field>
  1074 + <field>
  1075 + <name>erroroutputdir_</name>
  1076 + <variable>&#x24;&#x7b;erroroutputdir&#x7d;</variable>
  1077 + <type>String</type>
  1078 + <format/>
  1079 + <currency/>
  1080 + <decimal/>
  1081 + <group/>
  1082 + <length>-1</length>
  1083 + <precision>-1</precision>
  1084 + <trim_type>none</trim_type>
  1085 + </field>
  1086 + <field>
  1087 + <name>sheetname_</name>
  1088 + <variable>&#x24;&#x7b;sheetname&#x7d;</variable>
  1089 + <type>String</type>
  1090 + <format/>
  1091 + <currency/>
  1092 + <decimal/>
  1093 + <group/>
  1094 + <length>-1</length>
  1095 + <precision>-1</precision>
  1096 + <trim_type>none</trim_type>
  1097 + </field>
  1098 + </fields>
  1099 + <cluster_schema/>
  1100 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1101 + <xloc>301</xloc>
  1102 + <yloc>52</yloc>
  1103 + <draw>Y</draw>
  1104 + </GUI>
  1105 + </step>
  1106 +
  1107 + <step>
  1108 + <name>&#x83b7;&#x53d6;normalize&#x5b57;&#x6bb5;&#x540d;&#x5b57;&#x7b26;&#x4e32;</name>
  1109 + <type>GetVariable</type>
  1110 + <description/>
  1111 + <distribute>Y</distribute>
  1112 + <custom_distribution/>
  1113 + <copies>1</copies>
  1114 + <partitioning>
  1115 + <method>none</method>
  1116 + <schema_name/>
  1117 + </partitioning>
  1118 + <fields>
  1119 + <field>
  1120 + <name>normalizefieldnames_</name>
  1121 + <variable>&#x24;&#x7b;normalizefieldnames&#x7d;</variable>
  1122 + <type>String</type>
  1123 + <format/>
  1124 + <currency/>
  1125 + <decimal/>
  1126 + <group/>
  1127 + <length>-1</length>
  1128 + <precision>-1</precision>
  1129 + <trim_type>none</trim_type>
  1130 + </field>
  1131 + </fields>
  1132 + <cluster_schema/>
  1133 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1134 + <xloc>261</xloc>
  1135 + <yloc>251</yloc>
  1136 + <draw>Y</draw>
  1137 + </GUI>
  1138 + </step>
  1139 +
  1140 + <step>
  1141 + <name>&#x83b7;&#x53d6;&#x65f6;&#x523b;&#x8868;id</name>
  1142 + <type>GetVariable</type>
  1143 + <description/>
  1144 + <distribute>Y</distribute>
  1145 + <custom_distribution/>
  1146 + <copies>1</copies>
  1147 + <partitioning>
  1148 + <method>none</method>
  1149 + <schema_name/>
  1150 + </partitioning>
  1151 + <fields>
  1152 + <field>
  1153 + <name>ttid_</name>
  1154 + <variable>&#x24;&#x7b;ttid&#x7d;</variable>
  1155 + <type>Integer</type>
  1156 + <format/>
  1157 + <currency/>
  1158 + <decimal/>
  1159 + <group/>
  1160 + <length>-1</length>
  1161 + <precision>-1</precision>
  1162 + <trim_type>none</trim_type>
  1163 + </field>
  1164 + </fields>
  1165 + <cluster_schema/>
  1166 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1167 + <xloc>608</xloc>
  1168 + <yloc>16</yloc>
  1169 + <draw>Y</draw>
  1170 + </GUI>
  1171 + </step>
  1172 +
  1173 + <step>
  1174 + <name>&#x83b7;&#x53d6;&#x65f6;&#x523b;&#x8868;&#x540d;&#x79f0;</name>
  1175 + <type>GetVariable</type>
  1176 + <description/>
  1177 + <distribute>Y</distribute>
  1178 + <custom_distribution/>
  1179 + <copies>1</copies>
  1180 + <partitioning>
  1181 + <method>none</method>
  1182 + <schema_name/>
  1183 + </partitioning>
  1184 + <fields>
  1185 + <field>
  1186 + <name>ttinfoname_</name>
  1187 + <variable>&#x24;&#x7b;ttinfoname&#x7d;</variable>
  1188 + <type>String</type>
  1189 + <format/>
  1190 + <currency/>
  1191 + <decimal/>
  1192 + <group/>
  1193 + <length>-1</length>
  1194 + <precision>-1</precision>
  1195 + <trim_type>none</trim_type>
  1196 + </field>
  1197 + </fields>
  1198 + <cluster_schema/>
  1199 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1200 + <xloc>474</xloc>
  1201 + <yloc>601</yloc>
  1202 + <draw>Y</draw>
  1203 + </GUI>
  1204 + </step>
  1205 +
  1206 + <step>
  1207 + <name>&#x83b7;&#x53d6;&#x7ebf;&#x8def;&#x540d;&#x79f0;</name>
  1208 + <type>GetVariable</type>
  1209 + <description/>
  1210 + <distribute>Y</distribute>
  1211 + <custom_distribution/>
  1212 + <copies>1</copies>
  1213 + <partitioning>
  1214 + <method>none</method>
  1215 + <schema_name/>
  1216 + </partitioning>
  1217 + <fields>
  1218 + <field>
  1219 + <name>xlname_</name>
  1220 + <variable>&#x24;&#x7b;xlname&#x7d;</variable>
  1221 + <type>String</type>
  1222 + <format/>
  1223 + <currency/>
  1224 + <decimal/>
  1225 + <group/>
  1226 + <length>-1</length>
  1227 + <precision>-1</precision>
  1228 + <trim_type>none</trim_type>
  1229 + </field>
  1230 + </fields>
  1231 + <cluster_schema/>
  1232 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1233 + <xloc>184</xloc>
  1234 + <yloc>342</yloc>
  1235 + <draw>Y</draw>
  1236 + </GUI>
  1237 + </step>
  1238 +
  1239 + <step>
  1240 + <name>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d;</name>
  1241 + <type>SplitFieldToRows3</type>
  1242 + <description/>
  1243 + <distribute>Y</distribute>
  1244 + <custom_distribution/>
  1245 + <copies>1</copies>
  1246 + <partitioning>
  1247 + <method>none</method>
  1248 + <schema_name/>
  1249 + </partitioning>
  1250 + <splitfield>fieldnames</splitfield>
  1251 + <delimiter>,</delimiter>
  1252 + <newfield>fieldname</newfield>
  1253 + <rownum>N</rownum>
  1254 + <rownum_field/>
  1255 + <resetrownumber>Y</resetrownumber>
  1256 + <delimiter_is_regex>N</delimiter_is_regex>
  1257 + <cluster_schema/>
  1258 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1259 + <xloc>442</xloc>
  1260 + <yloc>153</yloc>
  1261 + <draw>Y</draw>
  1262 + </GUI>
  1263 + </step>
  1264 +
  1265 + <step>
  1266 + <name>&#x9017;&#x53f7;&#x5207;&#x5206;&#x6210;&#x5b57;&#x6bb5;&#x540d; 2</name>
  1267 + <type>SplitFieldToRows3</type>
  1268 + <description/>
  1269 + <distribute>Y</distribute>
  1270 + <custom_distribution/>
  1271 + <copies>1</copies>
  1272 + <partitioning>
  1273 + <method>none</method>
  1274 + <schema_name/>
  1275 + </partitioning>
  1276 + <splitfield>normalizefieldnames_</splitfield>
  1277 + <delimiter>,</delimiter>
  1278 + <newfield>nfieldname</newfield>
  1279 + <rownum>N</rownum>
  1280 + <rownum_field/>
  1281 + <resetrownumber>Y</resetrownumber>
  1282 + <delimiter_is_regex>N</delimiter_is_regex>
  1283 + <cluster_schema/>
  1284 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1285 + <xloc>444</xloc>
  1286 + <yloc>247</yloc>
  1287 + <draw>Y</draw>
  1288 + </GUI>
  1289 + </step>
  1290 +
  1291 + <step>
  1292 + <name>&#x83b7;&#x53d6;&#x7ebf;&#x8def;&#x6807;&#x51c6;id</name>
  1293 + <type>GetVariable</type>
  1294 + <description/>
  1295 + <distribute>Y</distribute>
  1296 + <custom_distribution/>
  1297 + <copies>1</copies>
  1298 + <partitioning>
  1299 + <method>none</method>
  1300 + <schema_name/>
  1301 + </partitioning>
  1302 + <fields>
  1303 + <field>
  1304 + <name>lineinfoid_</name>
  1305 + <variable>&#x24;&#x7b;lineinfoid&#x7d;</variable>
  1306 + <type>Integer</type>
  1307 + <format/>
  1308 + <currency/>
  1309 + <decimal/>
  1310 + <group/>
  1311 + <length>-1</length>
  1312 + <precision>-1</precision>
  1313 + <trim_type>none</trim_type>
  1314 + </field>
  1315 + </fields>
  1316 + <cluster_schema/>
  1317 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1318 + <xloc>74</xloc>
  1319 + <yloc>468</yloc>
  1320 + <draw>Y</draw>
  1321 + </GUI>
  1322 + </step>
  1323 +
  1324 + <step>
  1325 + <name>&#x505c;&#x8f66;&#x573a;&#x7f16;&#x7801;</name>
  1326 + <type>DBLookup</type>
  1327 + <description/>
  1328 + <distribute>Y</distribute>
  1329 + <custom_distribution/>
  1330 + <copies>1</copies>
  1331 + <partitioning>
  1332 + <method>none</method>
  1333 + <schema_name/>
  1334 + </partitioning>
  1335 + <connection>bus_control_variable</connection>
  1336 + <cache>N</cache>
  1337 + <cache_load_all>N</cache_load_all>
  1338 + <cache_size>0</cache_size>
  1339 + <lookup>
  1340 + <schema/>
  1341 + <table>bsth_c_line_information</table>
  1342 + <orderby/>
  1343 + <fail_on_multiple>N</fail_on_multiple>
  1344 + <eat_row_on_failure>N</eat_row_on_failure>
  1345 + <key>
  1346 + <name>lineinfoid_</name>
  1347 + <field>id</field>
  1348 + <condition>&#x3d;</condition>
  1349 + <name2/>
  1350 + </key>
  1351 + <value>
  1352 + <name>car_park</name>
  1353 + <rename>car_park</rename>
  1354 + <default/>
  1355 + <type>String</type>
  1356 + </value>
  1357 + </lookup>
  1358 + <cluster_schema/>
  1359 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1360 + <xloc>182</xloc>
  1361 + <yloc>467</yloc>
  1362 + <draw>Y</draw>
  1363 + </GUI>
  1364 + </step>
  1365 +
  1366 + <step>
  1367 + <name>&#x505c;&#x8f66;&#x573a;&#x540d;&#x79f0;</name>
  1368 + <type>DBLookup</type>
  1369 + <description/>
  1370 + <distribute>Y</distribute>
  1371 + <custom_distribution/>
  1372 + <copies>1</copies>
  1373 + <partitioning>
  1374 + <method>none</method>
  1375 + <schema_name/>
  1376 + </partitioning>
  1377 + <connection>bus_control_variable</connection>
  1378 + <cache>N</cache>
  1379 + <cache_load_all>N</cache_load_all>
  1380 + <cache_size>0</cache_size>
  1381 + <lookup>
  1382 + <schema/>
  1383 + <table>bsth_c_car_park</table>
  1384 + <orderby/>
  1385 + <fail_on_multiple>N</fail_on_multiple>
  1386 + <eat_row_on_failure>N</eat_row_on_failure>
  1387 + <key>
  1388 + <name>car_park</name>
  1389 + <field>park_code</field>
  1390 + <condition>&#x3d;</condition>
  1391 + <name2/>
  1392 + </key>
  1393 + <value>
  1394 + <name>park_name</name>
  1395 + <rename>tccname_</rename>
  1396 + <default/>
  1397 + <type>String</type>
  1398 + </value>
  1399 + </lookup>
  1400 + <cluster_schema/>
  1401 + <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
  1402 + <xloc>319</xloc>
  1403 + <yloc>468</yloc>
  1404 + <draw>Y</draw>
  1405 + </GUI>
  1406 + </step>
  1407 +
  1408 + <step_error_handling>
  1409 + </step_error_handling>
  1410 + <slave-step-copy-partition-distribution>
  1411 +</slave-step-copy-partition-distribution>
  1412 + <slave_transformation>N</slave_transformation>
  1413 +
  1414 +</transformation>
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/report/ext/list.html
@@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
13 13
14 <div class="fixDiv"> 14 <div class="fixDiv">
15 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column" 15 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column"
16 - style="width: 1800px; min-height: 500px;"> 16 + style="width: 1600px; min-height: 500px;">
17 <thead> 17 <thead>
18 <tr role="row" class="heading"> 18 <tr role="row" class="heading">
19 <th style="width: 50px;">序号</th> 19 <th style="width: 50px;">序号</th>
@@ -24,10 +24,8 @@ @@ -24,10 +24,8 @@
24 <th style="width: 100px;">车辆</th> 24 <th style="width: 100px;">车辆</th>
25 <th style="width: 80px;">出场时间</th> 25 <th style="width: 80px;">出场时间</th>
26 <th style="width: 80px;">进场时间</th> 26 <th style="width: 80px;">进场时间</th>
27 - <th style="width: 100px;">驾驶员姓名</th>  
28 - <th style="width: 100px;">驾驶员工号</th>  
29 - <th style="width: 100px;">售票员姓名</th>  
30 - <th style="width: 100px;">售票员工号</th> 27 + <th style="width: 130px;">驾驶员</th>
  28 + <th style="width: 130px;">售票员</th>
31 <th>时刻表</th> 29 <th>时刻表</th>
32 <th style="width: 150px;">修改时间</th> 30 <th style="width: 150px;">修改时间</th>
33 <th style="width: 100px;">修改人</th> 31 <th style="width: 100px;">修改人</th>
@@ -72,8 +70,6 @@ @@ -72,8 +70,6 @@
72 <td></td> 70 <td></td>
73 <td></td> 71 <td></td>
74 <td></td> 72 <td></td>
75 - <td></td>  
76 - <td></td>  
77 </tr> 73 </tr>
78 </thead> 74 </thead>
79 <tbody> 75 <tbody>
@@ -114,35 +110,43 @@ @@ -114,35 +110,43 @@
114 </a> 110 </a>
115 </div> 111 </div>
116 </td> 112 </td>
117 - <td>  
118 - <div ng-repeat="jsyname in info.jsyNames">  
119 - <a href="#">  
120 - {{jsyname}}  
121 - </a>  
122 - </div>  
123 - </td>  
124 - <td>  
125 - <div ng-repeat="jsygh in info.jsyGhs">  
126 - <a href="#">  
127 - {{jsygh}}  
128 - </a>  
129 - </div>  
130 - </td>  
131 - <td>  
132 - <div ng-repeat="spyname in info.spyNames">  
133 - <a href="#">  
134 - {{spyname}}  
135 - </a> 113 + <td class="container-fluid">
  114 + <div class="row">
  115 + <div style="padding-right: 0px;" class="col-md-6">
  116 + <div ng-repeat="jsyname in info.jsyNames">
  117 + <a href="#">
  118 + {{jsyname}}
  119 + </a>
  120 + </div>
  121 + </div>
  122 + <div style="padding-left: 0px;" class="col-md-6">
  123 + <div ng-repeat="jsygh in info.jsyGhs">
  124 + <a href="#">
  125 + {{jsygh}}
  126 + </a>
  127 + </div>
  128 + </div>
136 </div> 129 </div>
137 </td> 130 </td>
138 - <td>  
139 - <div ng-repeat="spygh in info.spyGhs">  
140 - <a href="#">  
141 - {{spygh}}  
142 - </a> 131 + <td class="container-fluid">
  132 + <div class="row">
  133 + <div style="padding-right: 0px;" class="col-md-6">
  134 + <div ng-repeat="spyname in info.spyNames">
  135 + <a href="#">
  136 + {{spyname}}
  137 + </a>
  138 + </div>
  139 + </div>
  140 + <div style="padding-left: 0px;" class="col-md-6">
  141 + <div ng-repeat="spygh in info.spyGhs">
  142 + <a href="#">
  143 + {{spygh}}
  144 + </a>
  145 + </div>
  146 + </div>
143 </div> 147 </div>
144 - </td>  
145 148
  149 + </td>
146 <td> 150 <td>
147 <span ng-bind="info.ttInfoName"></span> 151 <span ng-bind="info.ttInfoName"></span>
148 </td> 152 </td>
src/test/resources/testdata/test6.txt
@@ -21,4 +21,7 @@ where a.origingidindex is null; @@ -21,4 +21,7 @@ where a.origingidindex is null;
21 北蔡2路 21 北蔡2路
22 1048 22 1048
23 1118 23 1118
24 -上南二分通勤  
25 \ No newline at end of file 24 \ No newline at end of file
  25 +上南二分通勤
  26 +
  27 +
  28 +-Xms128M -Xmx1024M -XX:PermSize=64M -XX:MaxPermSize=128M
26 \ No newline at end of file 29 \ No newline at end of file