Commit 0a16093c646849077a6e6ac592873338c6c5494f

Authored by 徐烜
1 parent 7caf7607

Update

src/main/java/com/bsth/controller/BaseController.java
1 package com.bsth.controller; 1 package com.bsth.controller;
2 2
3 -import com.bsth.common.ResponseCode;  
4 import com.bsth.service.BaseService; 3 import com.bsth.service.BaseService;
5 -import com.bsth.service.schedule.utils.DataImportExportService;  
6 import com.google.common.base.Splitter; 4 import com.google.common.base.Splitter;
7 import org.springframework.beans.factory.annotation.Autowired; 5 import org.springframework.beans.factory.annotation.Autowired;
8 import org.springframework.data.domain.Page; 6 import org.springframework.data.domain.Page;
9 import org.springframework.data.domain.PageRequest; 7 import org.springframework.data.domain.PageRequest;
10 import org.springframework.data.domain.Sort; 8 import org.springframework.data.domain.Sort;
11 import org.springframework.data.domain.Sort.Direction; 9 import org.springframework.data.domain.Sort.Direction;
12 -import org.springframework.util.CollectionUtils;  
13 import org.springframework.web.bind.annotation.PathVariable; 10 import org.springframework.web.bind.annotation.PathVariable;
14 import org.springframework.web.bind.annotation.RequestMapping; 11 import org.springframework.web.bind.annotation.RequestMapping;
15 import org.springframework.web.bind.annotation.RequestMethod; 12 import org.springframework.web.bind.annotation.RequestMethod;
16 import org.springframework.web.bind.annotation.RequestParam; 13 import org.springframework.web.bind.annotation.RequestParam;
17 -import org.springframework.web.multipart.MultipartFile;  
18 14
19 -import javax.servlet.http.HttpServletResponse;  
20 -import java.io.*; 15 +import java.io.Serializable;
21 import java.util.ArrayList; 16 import java.util.ArrayList;
22 -import java.util.HashMap;  
23 import java.util.List; 17 import java.util.List;
24 import java.util.Map; 18 import java.util.Map;
25 19
@@ -35,8 +29,6 @@ public class BaseController<T, ID extends Serializable> { @@ -35,8 +29,6 @@ public class BaseController<T, ID extends Serializable> {
35 29
36 @Autowired 30 @Autowired
37 protected BaseService<T, ID> baseService; 31 protected BaseService<T, ID> baseService;
38 - @Autowired  
39 - DataImportExportService dataImportExportService;  
40 32
41 /** 33 /**
42 * @param @param map 查询条件 34 * @param @param map 查询条件
@@ -126,115 +118,4 @@ public class BaseController&lt;T, ID extends Serializable&gt; { @@ -126,115 +118,4 @@ public class BaseController&lt;T, ID extends Serializable&gt; {
126 return baseService.delete(id); 118 return baseService.delete(id);
127 } 119 }
128 120
129 - /**  
130 - * 上传数据文件,并使用ktr转换文件导入数据。  
131 - *  
132 - * @param file  
133 - * @return  
134 - * @throws Exception  
135 - */  
136 - @RequestMapping(value = "/dataImport", method = RequestMethod.POST)  
137 - public Map<String, Object> uploadDataAndImport(MultipartFile file) throws Exception {  
138 - Map<String, Object> resultMap = new HashMap<>();  
139 -  
140 - try {  
141 - // 获取ktr转换文件绝对路径  
142 - File ktrfile = new File(this.getClass().getResource(getDataImportKtrClasspath()).toURI());  
143 - System.out.println(ktrfile.getAbsolutePath());  
144 - // 导入数据  
145 - dataImportExportService.fileDataImport(file, ktrfile);  
146 -  
147 - resultMap.put("status", ResponseCode.SUCCESS);  
148 - resultMap.put("msg", "导入成功");  
149 - } catch (Exception exp) {  
150 - exp.printStackTrace();  
151 - resultMap.put("status", ResponseCode.ERROR);  
152 - resultMap.put("msg", exp.getLocalizedMessage());  
153 - }  
154 -  
155 - return resultMap;  
156 - }  
157 -  
158 - /**  
159 - * 使用ktr导出数据。  
160 - *  
161 - * @param response  
162 - * @throws Exception  
163 - */  
164 - @RequestMapping(value = "/dataExport", method = RequestMethod.GET)  
165 - public void dataExport(HttpServletResponse response) throws Exception {  
166 - dataExport(response, null);  
167 - }  
168 -  
169 - @RequestMapping(value = "/dataExportExt", method = RequestMethod.GET)  
170 - public void dataExport(HttpServletResponse response, @RequestParam Map<String, Object> param) throws Exception {  
171 - // 1、使用ktr转换获取输出文件  
172 - File ktrfile = new File(this.getClass().getResource(getDataExportKtrClasspath()).toURI());  
173 - File outputfile = null;  
174 - if (!CollectionUtils.isEmpty(param)) {  
175 - outputfile = dataImportExportService.fileDataOutput(  
176 - getDataExportFilename(),  
177 - ktrfile,  
178 - param);  
179 - } else {  
180 - outputfile = dataImportExportService.fileDataOutput(  
181 - getDataExportFilename(),  
182 - ktrfile);  
183 - }  
184 -  
185 - System.out.println(outputfile.getName());  
186 - String filePath = outputfile.getAbsolutePath();  
187 - String fp[] = filePath.split(File.separator);  
188 - String fileName = fp[fp.length - 1];  
189 -  
190 - // TODO:使用ktr获取导出数据  
191 -  
192 - response.setHeader("conent-type", "application/octet-stream");  
193 - response.setContentType("application/octet-stream");  
194 - response.setHeader("Content-Disposition", "attachment; filename=" + "东东");  
195 -  
196 - OutputStream os = response.getOutputStream();  
197 - BufferedOutputStream bos = new BufferedOutputStream(os);  
198 -  
199 - InputStream is = null;  
200 -  
201 - is = new FileInputStream(filePath);  
202 - BufferedInputStream bis = new BufferedInputStream(is);  
203 -  
204 - int length = 0;  
205 - byte[] temp = new byte[1 * 1024 * 10];  
206 -  
207 - while ((length = bis.read(temp)) != -1) {  
208 - bos.write(temp, 0, length);  
209 - }  
210 - bos.flush();  
211 - bis.close();  
212 - bos.close();  
213 - is.close();  
214 - }  
215 -  
216 - /**  
217 - * @return 数据导出的ktr转换文件类路径。  
218 - */  
219 - protected String getDataExportKtrClasspath() {  
220 - // 默认返回异常,子类如果要使用导出功能,必须覆写此方法,指定ktr文件类路径  
221 - throw new RuntimeException("必须override,并指定ktr classpath");  
222 - }  
223 -  
224 - /**  
225 - * @return 导出文件名。  
226 - */  
227 - protected String getDataExportFilename() {  
228 - // 默认返回异常,子类如果要使用导出功能,必须覆写此方法,指定导出的文件路径名  
229 - throw new RuntimeException("必须override,并指定导出文件名");  
230 - }  
231 -  
232 - /**  
233 - * @return 数据导入的ktr转换文件类路径。  
234 - */  
235 - protected String getDataImportKtrClasspath() {  
236 - // 默认返回异常,子类如果要使用导入功能,必须覆写此方法,指定ktr文件类路径  
237 - throw new RuntimeException("必须override,并指定ktr classpath");  
238 - }  
239 -  
240 } 121 }
src/main/java/com/bsth/controller/BaseController2.java deleted 100644 → 0
1 -package com.bsth.controller;  
2 -  
3 -  
4 -import com.bsth.common.ResponseCode;  
5 -import com.bsth.service.BaseService;  
6 -import com.bsth.service.schedule.utils.DataImportExportService;  
7 -import com.google.common.base.Splitter;  
8 -import jxl.Sheet;  
9 -import jxl.Workbook;  
10 -import org.springframework.beans.factory.annotation.Autowired;  
11 -import org.springframework.data.domain.Page;  
12 -import org.springframework.data.domain.PageRequest;  
13 -import org.springframework.data.domain.Sort;  
14 -import org.springframework.util.CollectionUtils;  
15 -import org.springframework.web.bind.annotation.*;  
16 -import org.springframework.web.multipart.MultipartFile;  
17 -  
18 -import javax.servlet.http.HttpServletResponse;  
19 -import java.io.*;  
20 -import java.util.ArrayList;  
21 -import java.util.HashMap;  
22 -import java.util.List;  
23 -import java.util.Map;  
24 -  
25 -/**  
26 - * Created by xu on 16/11/3.  
27 - */  
28 -public class BaseController2<T, ID extends Serializable> {  
29 -  
30 - @Autowired  
31 - protected BaseService<T, ID> baseService;  
32 - @Autowired  
33 - DataImportExportService dataImportExportService;  
34 -  
35 - /**  
36 - *  
37 - * @Title: list  
38 - * @Description: TODO(多条件分页查询)  
39 - * @param @param map 查询条件  
40 - * @param @param page 页码  
41 - * @param @param size 每页显示数量  
42 - * @throws  
43 - */  
44 - @RequestMapping(method = RequestMethod.GET)  
45 - public Page<T> list(@RequestParam Map<String, Object> map,  
46 - @RequestParam(defaultValue = "0") int page,  
47 - @RequestParam(defaultValue = "10") int size,  
48 - @RequestParam(defaultValue = "id") String order,  
49 - @RequestParam(defaultValue = "DESC") String direction){  
50 -  
51 - // 允许多个字段排序,order可以写单个字段,也可以写多个字段  
52 - // 多个字段格式:{col1},{col2},{col3},....,{coln}  
53 - List<String> order_columns = Splitter.on(",").trimResults().splitToList(order);  
54 - // 多字段排序:DESC,ASC...  
55 - List<String> order_dirs = Splitter.on(",").trimResults().splitToList(direction);  
56 -  
57 - if (order_dirs.size() == 1) { // 所有字段采用一种排序  
58 - if (null != order_dirs.get(0) && order_dirs.get(0).equals("ASC")) {  
59 - return baseService.list(map, new PageRequest(page, size, new Sort(Sort.Direction.ASC, order_columns)));  
60 - } else {  
61 - return baseService.list(map, new PageRequest(page, size, new Sort(Sort.Direction.DESC, order_columns)));  
62 - }  
63 - } else if (order_columns.size() == order_dirs.size()) {  
64 - List<Sort.Order> orderList = new ArrayList<>();  
65 - for (int i = 0; i < order_columns.size(); i++) {  
66 - if (null != order_dirs.get(i) && order_dirs.get(i).equals("ASC")) {  
67 - orderList.add(new Sort.Order(Sort.Direction.ASC, order_columns.get(i)));  
68 - } else {  
69 - orderList.add(new Sort.Order(Sort.Direction.DESC, order_columns.get(i)));  
70 - }  
71 - }  
72 - return baseService.list(map, new PageRequest(page, size, new Sort(orderList)));  
73 - } else {  
74 - throw new RuntimeException("多字段排序参数格式问题,排序顺序和字段数不一致");  
75 - }  
76 - }  
77 -  
78 - /**  
79 - *  
80 - * @Title: list  
81 - * @Description: TODO(多条件查询)  
82 - * @param @param map  
83 - * @throws  
84 - */  
85 - @RequestMapping(value = "/all", method = RequestMethod.GET)  
86 - public Iterable<T> list(@RequestParam Map<String, Object> map){  
87 - return baseService.list(map);  
88 - }  
89 -  
90 - /**  
91 - * 这里保存直接返回保存后的对象,不自己定义Map返回了,和前端angularjs配合。  
92 - * form也可以提交,但是页面参数可能不全,  
93 - * json的化比较灵活,但是貌似有多余属性也会报错,或者碰到lazy属性值,也有问题  
94 - * 不论form,还是json提交都能解决问题,就看哪个方便哪个来  
95 - *  
96 - * @param t 参数需要使用@RequestBody转换json成对象  
97 - * @return  
98 - */  
99 - @RequestMapping(method = RequestMethod.POST)  
100 - public T save(@RequestBody T t) {  
101 - baseService.save(t);  
102 - return t;  
103 - }  
104 -  
105 - @RequestMapping(value="/{id}", method = RequestMethod.POST)  
106 - public T update(@RequestBody T t) {  
107 - baseService.save(t);  
108 - return t;  
109 - }  
110 -  
111 - /**  
112 - *  
113 - * @Title: findById  
114 - * @Description: TODO(根据主键获取单个对象)  
115 - * @param @param id  
116 - * @throws  
117 - */  
118 - @RequestMapping(value="/{id}",method = RequestMethod.GET)  
119 - public T findById(@PathVariable("id") ID id){  
120 - return baseService.findById(id);  
121 - }  
122 -  
123 - /**  
124 - *  
125 - * @Title: delete  
126 - * @Description: TODO(根据主键删除对象)  
127 - * @param @param id  
128 - * @throws  
129 - */  
130 - @RequestMapping(value="/{id}",method = RequestMethod.DELETE)  
131 - public Map<String, Object> delete(@PathVariable("id") ID id){  
132 - return baseService.delete(id);  
133 - }  
134 -  
135 - /**  
136 - * 上传数据文件,并使用ktr转换文件导入数据。  
137 - * @param file  
138 - * @return  
139 - * @throws Exception  
140 - */  
141 - @RequestMapping(value = "/dataImport", method = RequestMethod.POST)  
142 - public Map<String, Object> uploadDataAndImport(MultipartFile file) throws Exception {  
143 - Map<String, Object> resultMap = new HashMap<>();  
144 -  
145 - try {  
146 - // 获取ktr转换文件绝对路径  
147 - File ktrfile = new File(this.getClass().getResource(getDataImportKtrClasspath()).toURI());  
148 - System.out.println(ktrfile.getAbsolutePath());  
149 - // 导入数据  
150 - dataImportExportService.fileDataImport(file, ktrfile);  
151 -  
152 - resultMap.put("status", ResponseCode.SUCCESS);  
153 - resultMap.put("msg", "导入成功");  
154 - } catch (Exception exp) {  
155 - exp.printStackTrace();  
156 - resultMap.put("status", ResponseCode.ERROR);  
157 - resultMap.put("msg", exp.getLocalizedMessage());  
158 - }  
159 -  
160 - return resultMap;  
161 - }  
162 -  
163 - /**  
164 - * 使用ktr导出数据。  
165 - * @param response  
166 - * @throws Exception  
167 - */  
168 - @RequestMapping(value = "/dataExport", method = RequestMethod.GET)  
169 - public void dataExport(HttpServletResponse response) throws Exception {  
170 - dataExport(response, null);  
171 - }  
172 -  
173 - @RequestMapping(value = "/dataExportExt", method = RequestMethod.GET)  
174 - public void dataExport(HttpServletResponse response, @RequestParam Map<String, Object> param) throws Exception {  
175 - // 1、使用ktr转换获取输出文件  
176 - File ktrfile = new File(this.getClass().getResource(getDataExportKtrClasspath()).toURI());  
177 - File outputfile = null;  
178 - if (!CollectionUtils.isEmpty(param)) {  
179 - outputfile = dataImportExportService.fileDataOutput(  
180 - getDataExportFilename(),  
181 - ktrfile,  
182 - param);  
183 - } else {  
184 - outputfile = dataImportExportService.fileDataOutput(  
185 - getDataExportFilename(),  
186 - ktrfile);  
187 - }  
188 -  
189 - System.out.println(outputfile.getName());  
190 - System.out.println(outputfile.getAbsolutePath());  
191 -  
192 - String filePath = outputfile.getAbsolutePath();  
193 -// String fp[] = filePath.split(File.separator);  
194 -// String fileName = fp[fp.length - 1];  
195 -  
196 - // TODO:使用ktr获取导出数据  
197 -  
198 - response.setHeader("conent-type", "application/octet-stream");  
199 - response.setContentType("application/octet-stream");  
200 - response.setHeader("Content-Disposition", "attachment; filename=" + "东东");  
201 -  
202 - OutputStream os = response.getOutputStream();  
203 - BufferedOutputStream bos = new BufferedOutputStream(os);  
204 -  
205 - InputStream is = null;  
206 -  
207 - is = new FileInputStream(filePath);  
208 - BufferedInputStream bis = new BufferedInputStream(is);  
209 -  
210 - int length = 0;  
211 - byte[] temp = new byte[1 * 1024 * 10];  
212 -  
213 - while ((length = bis.read(temp)) != -1) {  
214 - bos.write(temp, 0, length);  
215 - }  
216 - bos.flush();  
217 - bis.close();  
218 - bos.close();  
219 - is.close();  
220 - }  
221 -  
222 - /**  
223 - * @return 数据导出的ktr转换文件类路径。  
224 - */  
225 - protected String getDataExportKtrClasspath() {  
226 - // 默认返回异常,子类如果要使用导出功能,必须覆写此方法,指定ktr文件类路径  
227 - throw new RuntimeException("必须override,并指定ktr classpath");  
228 - }  
229 -  
230 - /**  
231 - * @return 导出文件名。  
232 - */  
233 - protected String getDataExportFilename() {  
234 - // 默认返回异常,子类如果要使用导出功能,必须覆写此方法,指定导出的文件路径名  
235 - throw new RuntimeException("必须override,并指定导出文件名");  
236 - }  
237 -  
238 - /**  
239 - * @return 数据导入的ktr转换文件类路径。  
240 - */  
241 - protected String getDataImportKtrClasspath() {  
242 - // 默认返回异常,子类如果要使用导入功能,必须覆写此方法,指定ktr文件类路径  
243 - throw new RuntimeException("必须override,并指定ktr classpath");  
244 - }  
245 -  
246 -  
247 - public static class ExcelFileOutput {  
248 - private String fileName;  
249 - private List<Map<String, Object>> sheetnames = new ArrayList<>();  
250 -  
251 - public String getFileName() {  
252 - return fileName;  
253 - }  
254 -  
255 - public void setFileName(String fileName) {  
256 - this.fileName = fileName;  
257 - }  
258 -  
259 - public List<Map<String, Object>> getSheetnames() {  
260 - return sheetnames;  
261 - }  
262 -  
263 - public void setSheetnames(List<Map<String, Object>> sheetnames) {  
264 - this.sheetnames = sheetnames;  
265 - }  
266 - }  
267 -  
268 - /**  
269 - * 上传Excel文件,返回文件全路径名,工作区名称列表。  
270 - * @param file  
271 - * @return  
272 - * @throws Exception  
273 - */  
274 - @RequestMapping(value = "/uploadFile", method = RequestMethod.POST)  
275 - public ExcelFileOutput fileUpload(MultipartFile file) throws Exception {  
276 - // 返回对象  
277 - ExcelFileOutput rs = new ExcelFileOutput();  
278 -  
279 - // 上传文件  
280 - File file1 = dataImportExportService.uploadFile(file);  
281 - // 获取文件的sheet  
282 - Workbook book = Workbook.getWorkbook(file1);  
283 - for (Sheet sheet : book.getSheets()) {  
284 - String sheetname = sheet.getName();  
285 - Map<String, Object> s = new HashMap<>();  
286 - s.put("name", sheetname);  
287 - rs.getSheetnames().add(s);  
288 - }  
289 -  
290 - rs.setFileName(file1.getAbsolutePath());  
291 - return rs;  
292 - }  
293 -  
294 -}  
src/main/java/com/bsth/controller/CarsController.java
1 package com.bsth.controller; 1 package com.bsth.controller;
2 2
3 -import com.bsth.common.ResponseCode;  
4 import com.bsth.entity.Cars; 3 import com.bsth.entity.Cars;
5 -import com.bsth.service.schedule.utils.DataImportExportService;  
6 -import com.bsth.service.schedule.utils.DataToolsProperties;  
7 -import org.springframework.beans.factory.annotation.Autowired;  
8 -import org.springframework.boot.context.properties.EnableConfigurationProperties;  
9 import org.springframework.web.bind.annotation.RequestMapping; 4 import org.springframework.web.bind.annotation.RequestMapping;
10 -import org.springframework.web.bind.annotation.RequestMethod;  
11 -import org.springframework.web.bind.annotation.RequestParam;  
12 import org.springframework.web.bind.annotation.RestController; 5 import org.springframework.web.bind.annotation.RestController;
13 6
14 -import java.io.File;  
15 -import java.util.HashMap;  
16 -import java.util.Map;  
17 -  
18 /** 7 /**
19 * Created by xu on 16/5/31. 8 * Created by xu on 16/5/31.
20 */ 9 */
21 @RestController 10 @RestController
22 @RequestMapping("cars") 11 @RequestMapping("cars")
23 -@EnableConfigurationProperties(DataToolsProperties.class)  
24 -public class CarsController extends BaseController2<Cars, Integer> {  
25 -  
26 - @Autowired  
27 - private DataToolsProperties dataToolsProperties;  
28 - @Autowired  
29 - private DataImportExportService dataImportExportService;  
30 -  
31 - /**  
32 - * 验证。  
33 - * @param map  
34 - * @return  
35 - */  
36 - @RequestMapping(value = "/validate/equale", method = RequestMethod.GET)  
37 - public Map<String, Object> validateData(@RequestParam Map<String, Object> map) {  
38 - // 一般比较自编号是否重复  
39 - return baseService.validateEquale(map);  
40 - }  
41 -  
42 - // uploadFile post  
43 -  
44 - // 验证excel sheet  
45 - @RequestMapping(value = "/validate/sheet", method = RequestMethod.GET)  
46 - public Map<String, Object> validateSheet() throws Exception {  
47 - Map<String, Object> rtn = new HashMap<>();  
48 -  
49 - // TODO:  
50 -  
51 - rtn.put("status", ResponseCode.SUCCESS);  
52 - return rtn;  
53 - }  
54 -  
55 - @RequestMapping(value = "/importfile", method = RequestMethod.POST)  
56 - public Map<String, Object> importData(  
57 - @RequestParam Map<String, Object> form)  
58 - throws Exception {  
59 - Map<String, Object> rtn = new HashMap<>();  
60 -  
61 - // TODO:  
62 - String filename = (String) form.get("filename");  
63 -  
64 -  
65 - try {  
66 - // 获取ktr转换文件绝对路径  
67 - File ktrfile = new File(this.getClass().getResource(getDataImportKtrClasspath()).toURI());  
68 - System.out.println(ktrfile.getAbsolutePath());  
69 - // 导入数据  
70 - dataImportExportService.fileDataImport(new File(filename), ktrfile);  
71 -  
72 - rtn.put("status", ResponseCode.SUCCESS);  
73 - rtn.put("msg", "导入成功");  
74 - } catch (Exception exp) {  
75 - exp.printStackTrace();  
76 - rtn.put("status", ResponseCode.ERROR);  
77 - rtn.put("msg", exp.getLocalizedMessage());  
78 - }  
79 -  
80 - return rtn;  
81 - }  
82 -  
83 -  
84 - @Override  
85 - protected String getDataImportKtrClasspath() {  
86 - return dataToolsProperties.getCarsDatainputktr();  
87 - }  
88 -  
89 - @Override  
90 - protected String getDataExportKtrClasspath() {  
91 - return dataToolsProperties.getCarsDataoutputktr();  
92 - } 12 +public class CarsController extends BaseController<Cars, Integer> {
93 13
94 - @Override  
95 - protected String getDataExportFilename() {  
96 - return "车辆基础数据";  
97 - }  
98 } 14 }
src/main/java/com/bsth/controller/PersonnelController.java
@@ -2,10 +2,11 @@ package com.bsth.controller; @@ -2,10 +2,11 @@ package com.bsth.controller;
2 2
3 import com.bsth.entity.Personnel; 3 import com.bsth.entity.Personnel;
4 import com.bsth.service.PersonnelService; 4 import com.bsth.service.PersonnelService;
5 -import com.bsth.service.schedule.utils.DataToolsProperties;  
6 import org.springframework.beans.factory.annotation.Autowired; 5 import org.springframework.beans.factory.annotation.Autowired;
7 -import org.springframework.boot.context.properties.EnableConfigurationProperties;  
8 -import org.springframework.web.bind.annotation.*; 6 +import org.springframework.web.bind.annotation.RequestMapping;
  7 +import org.springframework.web.bind.annotation.RequestMethod;
  8 +import org.springframework.web.bind.annotation.RequestParam;
  9 +import org.springframework.web.bind.annotation.RestController;
9 10
10 import java.util.List; 11 import java.util.List;
11 import java.util.Map; 12 import java.util.Map;
@@ -15,54 +16,11 @@ import java.util.Map; @@ -15,54 +16,11 @@ import java.util.Map;
15 */ 16 */
16 @RestController 17 @RestController
17 @RequestMapping("personnel") 18 @RequestMapping("personnel")
18 -@EnableConfigurationProperties(DataToolsProperties.class)  
19 public class PersonnelController extends BaseController<Personnel, Integer> { 19 public class PersonnelController extends BaseController<Personnel, Integer> {
20 20
21 @Autowired 21 @Autowired
22 - private DataToolsProperties dataToolsProperties;  
23 -  
24 - @Autowired  
25 private PersonnelService service; 22 private PersonnelService service;
26 - /**  
27 - * 覆写方法,因为form提交的方式参数不全,改用 json形式提交 @RequestBody  
28 - * @Title: save  
29 - * @Description: TODO(持久化对象)  
30 - * @param @param t  
31 - * @param @return 设定文件  
32 - * @return Map<String,Object> {status: 1(成功),-1(失败)}  
33 - * @throws  
34 - */  
35 - @RequestMapping(method = RequestMethod.POST)  
36 - public Map<String, Object> save(@RequestBody Personnel t){  
37 - return baseService.save(t);  
38 - }  
39 -  
40 - /**  
41 - * 验证。  
42 - * @param map  
43 - * @return  
44 - */  
45 - @RequestMapping(value = "/validate/equale", method = RequestMethod.GET)  
46 - public Map<String, Object> validateData(@RequestParam Map<String, Object> map) {  
47 - // 一般比较相同公司下工号是否相同  
48 - return baseService.validateEquale(map);  
49 - }  
50 -  
51 - @Override  
52 - protected String getDataImportKtrClasspath() {  
53 - return dataToolsProperties.getEmployeesDatainputktr();  
54 - }  
55 -  
56 - @Override  
57 - protected String getDataExportKtrClasspath() {  
58 - return dataToolsProperties.getEmployeesDataoutputktr();  
59 - }  
60 23
61 - @Override  
62 - protected String getDataExportFilename() {  
63 - return "人员基础信息";  
64 - }  
65 -  
66 @RequestMapping(value = "/sreachPersonnel", method = RequestMethod.GET) 24 @RequestMapping(value = "/sreachPersonnel", method = RequestMethod.GET)
67 public List<Map<String, String>> sreachPersonnel(@RequestParam String jobCode) { 25 public List<Map<String, String>> sreachPersonnel(@RequestParam String jobCode) {
68 return service.sreachPersonnel(jobCode); 26 return service.sreachPersonnel(jobCode);
src/main/java/com/bsth/entity/schedule/rule/ScheduleRule1Flat.java
@@ -67,6 +67,7 @@ public class ScheduleRule1Flat extends BEntity { @@ -67,6 +67,7 @@ public class ScheduleRule1Flat extends BEntity {
67 private String ryDbbms; 67 private String ryDbbms;
68 /** 对应的人员配置ids(用逗号隔开,如果分班,就先-隔开再逗号隔开) */ 68 /** 对应的人员配置ids(用逗号隔开,如果分班,就先-隔开再逗号隔开) */
69 @NotNull 69 @NotNull
  70 + @Column(length = 1000)
70 private String ryConfigIds; 71 private String ryConfigIds;
71 /** 起始人员(从0开始) */ 72 /** 起始人员(从0开始) */
72 @NotNull 73 @NotNull
src/main/java/com/bsth/entity/schedule/temp/SchedulePlanRuleResult.java
@@ -2,10 +2,7 @@ package com.bsth.entity.schedule.temp; @@ -2,10 +2,7 @@ package com.bsth.entity.schedule.temp;
2 2
3 import com.bsth.entity.schedule.SchedulePlan; 3 import com.bsth.entity.schedule.SchedulePlan;
4 4
5 -import javax.persistence.Entity;  
6 -import javax.persistence.GeneratedValue;  
7 -import javax.persistence.Id;  
8 -import javax.persistence.Table; 5 +import javax.persistence.*;
9 import java.util.Date; 6 import java.util.Date;
10 7
11 /** 8 /**
@@ -32,12 +29,14 @@ public class SchedulePlanRuleResult { @@ -32,12 +29,14 @@ public class SchedulePlanRuleResult {
32 private String ccZbh; 29 private String ccZbh;
33 30
34 /** 路牌id列表字符串 */ 31 /** 路牌id列表字符串 */
  32 + @Column(length = 1000)
35 private String gids; 33 private String gids;
36 /** 路牌名字列表字符串 */ 34 /** 路牌名字列表字符串 */
37 private String gnames; 35 private String gnames;
38 /** 翻到哪个路牌索引 */ 36 /** 翻到哪个路牌索引 */
39 private String gidindex; 37 private String gidindex;
40 /** 人员配置id列表字符串 */ 38 /** 人员配置id列表字符串 */
  39 + @Column(length = 1000)
41 private String ecids; 40 private String ecids;
42 /** 人员配置搭班编码列表字符串 */ 41 /** 人员配置搭班编码列表字符串 */
43 private String ecdbbms; 42 private String ecdbbms;
src/main/java/com/bsth/service/schedule/impl/SchedulePlanServiceImpl.java
@@ -65,7 +65,7 @@ public class SchedulePlanServiceImpl extends BServiceImpl&lt;SchedulePlan, Long&gt; im @@ -65,7 +65,7 @@ public class SchedulePlanServiceImpl extends BServiceImpl&lt;SchedulePlan, Long&gt; im
65 * @param schedulePlan 排班计划对象 65 * @param schedulePlan 排班计划对象
66 * @param lpInfoResults_output 时刻表每日路牌的情况 66 * @param lpInfoResults_output 时刻表每日路牌的情况
67 */ 67 */
68 - private ScheduleResults_output loopRuleOutput( 68 + public ScheduleResults_output loopRuleOutput(
69 SchedulePlan schedulePlan, 69 SchedulePlan schedulePlan,
70 LpInfoResults_output lpInfoResults_output) { 70 LpInfoResults_output lpInfoResults_output) {
71 // 1-1、构造drools规则输入数据,输出数据 71 // 1-1、构造drools规则输入数据,输出数据
@@ -116,7 +116,7 @@ public class SchedulePlanServiceImpl extends BServiceImpl&lt;SchedulePlan, Long&gt; im @@ -116,7 +116,7 @@ public class SchedulePlanServiceImpl extends BServiceImpl&lt;SchedulePlan, Long&gt; im
116 * @param schedulePlan 排班计划对象 116 * @param schedulePlan 排班计划对象
117 * @return TTInfoResults_output, LpInfoResults_output 117 * @return TTInfoResults_output, LpInfoResults_output
118 */ 118 */
119 - private Object[] ttInfoOutput(SchedulePlan schedulePlan) { 119 + public Object[] ttInfoOutput(SchedulePlan schedulePlan) {
120 // 获取线路的所有未作废的时刻表 120 // 获取线路的所有未作废的时刻表
121 List<TTInfo> ttInfos = ttInfoRepository.findInCanceledByXl(schedulePlan.getXl()); 121 List<TTInfo> ttInfos = ttInfoRepository.findInCanceledByXl(schedulePlan.getXl());
122 122
@@ -174,7 +174,7 @@ public class SchedulePlanServiceImpl extends BServiceImpl&lt;SchedulePlan, Long&gt; im @@ -174,7 +174,7 @@ public class SchedulePlanServiceImpl extends BServiceImpl&lt;SchedulePlan, Long&gt; im
174 * @param ttInfoResults_output ttInfoOutput方法规则输出 174 * @param ttInfoResults_output ttInfoOutput方法规则输出
175 * @return PlanResult 175 * @return PlanResult
176 */ 176 */
177 - private PlanResult planResultOutput( 177 + public PlanResult planResultOutput(
178 SchedulePlan schedulePlan, 178 SchedulePlan schedulePlan,
179 ScheduleResults_output scheduleResults_output, 179 ScheduleResults_output scheduleResults_output,
180 TTInfoResults_output ttInfoResults_output) { 180 TTInfoResults_output ttInfoResults_output) {
src/main/java/com/bsth/service/schedule/rules/MyDroolsConfiguration.java
@@ -4,7 +4,6 @@ import org.kie.api.KieBase; @@ -4,7 +4,6 @@ import org.kie.api.KieBase;
4 import org.kie.api.KieBaseConfiguration; 4 import org.kie.api.KieBaseConfiguration;
5 import org.kie.api.KieServices; 5 import org.kie.api.KieServices;
6 import org.kie.api.builder.*; 6 import org.kie.api.builder.*;
7 -import org.kie.api.builder.Message;  
8 import org.kie.api.builder.model.KieBaseModel; 7 import org.kie.api.builder.model.KieBaseModel;
9 import org.kie.api.builder.model.KieModuleModel; 8 import org.kie.api.builder.model.KieModuleModel;
10 import org.kie.api.builder.model.KieSessionModel; 9 import org.kie.api.builder.model.KieSessionModel;
@@ -12,6 +11,8 @@ import org.kie.api.conf.EqualityBehaviorOption; @@ -12,6 +11,8 @@ import org.kie.api.conf.EqualityBehaviorOption;
12 import org.kie.api.conf.EventProcessingOption; 11 import org.kie.api.conf.EventProcessingOption;
13 import org.kie.api.runtime.KieContainer; 12 import org.kie.api.runtime.KieContainer;
14 import org.kie.api.runtime.conf.ClockTypeOption; 13 import org.kie.api.runtime.conf.ClockTypeOption;
  14 +import org.slf4j.Logger;
  15 +import org.slf4j.LoggerFactory;
15 import org.springframework.context.annotation.Bean; 16 import org.springframework.context.annotation.Bean;
16 import org.springframework.context.annotation.Configuration; 17 import org.springframework.context.annotation.Configuration;
17 18
@@ -20,6 +21,9 @@ import org.springframework.context.annotation.Configuration; @@ -20,6 +21,9 @@ import org.springframework.context.annotation.Configuration;
20 */ 21 */
21 @Configuration 22 @Configuration
22 public class MyDroolsConfiguration { 23 public class MyDroolsConfiguration {
  24 + /** 日志记录器 */
  25 + private static final Logger logger = LoggerFactory.getLogger(MyDroolsConfiguration.class);
  26 +
23 /** 27 /**
24 * 返回一个kiebase知识库,直接冲文件系统读入drl规则文件, 28 * 返回一个kiebase知识库,直接冲文件系统读入drl规则文件,
25 * TODO:以后需要从数据库读入规则文件,并重新创建kbase知识库。 29 * TODO:以后需要从数据库读入规则文件,并重新创建kbase知识库。
@@ -72,8 +76,12 @@ public class MyDroolsConfiguration { @@ -72,8 +76,12 @@ public class MyDroolsConfiguration {
72 // 4、创建KieBuilder,使用KieFileSystem构建 76 // 4、创建KieBuilder,使用KieFileSystem构建
73 KieBuilder kieBuilder = kieServices.newKieBuilder(kfs).buildAll(); 77 KieBuilder kieBuilder = kieServices.newKieBuilder(kfs).buildAll();
74 Results results = kieBuilder.getResults(); 78 Results results = kieBuilder.getResults();
75 - if (results.hasMessages(Message.Level.ERROR))  
76 - throw new IllegalStateException("构建drools6错误:" + results.getMessages()); 79 +// if (results.hasMessages(Message.Level.ERROR))
  80 +// throw new IllegalStateException("构建drools6错误:" + results.getMessages());
  81 + if (results.hasMessages(Message.Level.ERROR)) {
  82 + logger.info("构建drools6错误:" + results.getMessages());
  83 + return null;
  84 + }
77 85
78 // 5、获取KieContainer 86 // 5、获取KieContainer
79 // TODO:ReleaseId用处很大,以后再议 87 // TODO:ReleaseId用处很大,以后再议
src/main/java/com/bsth/service/schedule/utils/DataImportExportService.java deleted 100644 → 0
1 -package com.bsth.service.schedule.utils;  
2 -  
3 -import org.springframework.web.multipart.MultipartFile;  
4 -  
5 -import java.io.File;  
6 -import java.util.Map;  
7 -  
8 -/**  
9 - * 数据导入导出服务。  
10 - */  
11 -public interface DataImportExportService {  
12 - /**  
13 - * 上传文件。  
14 - * @param file mutipartFile  
15 - * @return 上传后的文件路径  
16 - * @throws Exception  
17 - */  
18 - File uploadFile(MultipartFile file) throws Exception;  
19 -  
20 - /**  
21 - * 上传文件,并导入文件数据。  
22 - * @param datafile 上传的文件  
23 - * @param ktrFile 导入的逻辑ktr文件  
24 - * @throws Exception  
25 - */  
26 - void fileDataImport(MultipartFile datafile, File ktrFile) throws Exception;  
27 - void fileDataImport(File datafile, File ktrFile) throws Exception;  
28 -  
29 - /**  
30 - * 数据导出。  
31 - * @param fileName 文件名  
32 - * @param ktrFile 导出的逻辑ktr文件  
33 - * @return 导出的文件  
34 - * @throws Exception  
35 - */  
36 - File fileDataOutput(String fileName, File ktrFile) throws Exception;  
37 -  
38 -  
39 - File fileDataOutput(String fileName, File ktrFile, Map<String, Object> param) throws Exception;  
40 -}  
src/main/java/com/bsth/service/schedule/utils/DataImportExportServiceImpl.java deleted 100644 → 0
1 -package com.bsth.service.schedule.utils;  
2 -  
3 -import com.google.common.io.Files;  
4 -import org.joda.time.DateTime;  
5 -import org.pentaho.di.core.KettleEnvironment;  
6 -import org.pentaho.di.core.util.EnvUtil;  
7 -import org.pentaho.di.trans.Trans;  
8 -import org.pentaho.di.trans.TransMeta;  
9 -import org.springframework.beans.factory.InitializingBean;  
10 -import org.springframework.beans.factory.annotation.Autowired;  
11 -import org.springframework.boot.context.properties.EnableConfigurationProperties;  
12 -import org.springframework.stereotype.Service;  
13 -import org.springframework.util.CollectionUtils;  
14 -import org.springframework.web.multipart.MultipartFile;  
15 -  
16 -import java.io.File;  
17 -import java.util.HashMap;  
18 -import java.util.Map;  
19 -import java.util.Properties;  
20 -  
21 -/**  
22 - * Created by xu on 16/6/23.  
23 - */  
24 -@Service  
25 -@EnableConfigurationProperties(DataToolsProperties.class)  
26 -public class DataImportExportServiceImpl implements DataImportExportService, InitializingBean {  
27 -  
28 - @Autowired  
29 - private DataToolsProperties dataToolsProperties;  
30 -  
31 - /**  
32 - * 自定义kettle环境初始化定义。  
33 - */  
34 - private void ktrEnvironmentInit() throws Exception {  
35 - // 由于kettle.properties可能没有(没有安装过kettle),  
36 - // 导致 EnvUtil.environmentInit() 报找不到kettle.properties文件  
37 - // 所以这里重写 EnvUtil.environmentInit() 方法  
38 -  
39 - if(Thread.currentThread().getContextClassLoader() == null) {  
40 - Thread.currentThread().setContextClassLoader(ClassLoader.getSystemClassLoader());  
41 - }  
42 -  
43 - // 获取配置文件  
44 - File file = new File(getClass().getResource(dataToolsProperties.getKettleProperties()).toURI());  
45 - Properties kettleProperties = EnvUtil.readProperties(file.getAbsolutePath());  
46 - EnvUtil.applyKettleProperties(kettleProperties);  
47 - System.getProperties().put("Internal.Cluster.Size", "1");  
48 - System.getProperties().put("Internal.Slave.Transformation.Number", "0");  
49 - System.getProperties().put("Internal.Slave.Server.Name", "slave-trans-name");  
50 - System.getProperties().put("Internal.Step.CopyNr", "0");  
51 - System.getProperties().put("Internal.Step.Name", "step-name");  
52 - System.getProperties().put("Internal.Step.Partition.ID", "partition-id");  
53 - System.getProperties().put("Internal.Step.Partition.Number", "0");  
54 - System.getProperties().put("Internal.Step.Unique.Count", "1");  
55 - System.getProperties().put("Internal.Step.Unique.Number", "0");  
56 - if(!kettleProperties.containsKey("vfs.sftp.org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder.USER_DIR_IS_ROOT")) {  
57 - System.getProperties().put("vfs.sftp.org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder.USER_DIR_IS_ROOT", "false");  
58 - }  
59 -  
60 - }  
61 -  
62 - @Override  
63 - public void afterPropertiesSet() throws Exception {  
64 - // 初始化kettle环境(自定义)  
65 - ktrEnvironmentInit();  
66 -  
67 - // 添加全局ktr变量,并覆盖原来的设置  
68 - Map<String, String> kvars = new HashMap<>();  
69 - kvars.put("v_db_ip", dataToolsProperties.getKvarsDbip());  
70 - kvars.put("v_db_uname", dataToolsProperties.getKvarsDbuname());  
71 - kvars.put("v_db_pwd", dataToolsProperties.getKvarsDbpwd());  
72 - kvars.put("v_db_dname", dataToolsProperties.getKvarsDbdname());  
73 - EnvUtil.applyKettleProperties(kvars, true);  
74 - KettleEnvironment.init();  
75 - }  
76 -  
77 - @Override  
78 - public File uploadFile(MultipartFile file) throws Exception {  
79 - // TODO:以后的文件名要加时间戳  
80 - File newFile = new File(  
81 - dataToolsProperties.getFileuploadDir() + File.separator +  
82 - file.getOriginalFilename());  
83 - Files.write(file.getBytes(), newFile);  
84 -  
85 - return newFile;  
86 - }  
87 -  
88 - @Override  
89 - public void fileDataImport(MultipartFile datafile, File ktrFile) throws Exception {  
90 - // 1、上传数据文件  
91 - File uploadFile = uploadFile(datafile);  
92 -  
93 - // 2、使用kettle运行封装数据导入逻辑的ktr转换文件  
94 - // 2.1、初始化kettle(组件初始化已经做了)  
95 - // 2.2、创建转换元数据,转换  
96 - TransMeta transMeta = new TransMeta(ktrFile.getAbsolutePath());  
97 - Trans trans = new Trans(transMeta);  
98 - // 2.3、设定命名参数,用于指定数据文件,注意每个ktr必须都有以下指定的命名参数  
99 - trans.setParameterValue("filepath", uploadFile.getAbsolutePath()); // 指定导入数据文件的位置  
100 - trans.setParameterValue("erroroutputdir", dataToolsProperties.getTransErrordir()); // ktr转换错误输出目录  
101 - // TODO:可以考虑设定日志输出  
102 - // 2.4、执行转换  
103 - trans.execute(null);  
104 - // 2.5、等待转换结束  
105 - trans.waitUntilFinished();  
106 -  
107 - // 3、判定ktr错误数,注意这种错误代表部分数据错误,不会终止转换执行,一般设计ktr的时候,会有错误输出文件,TODO:以后考虑使用日志实时输出  
108 - if (trans.getErrors() > 0) {  
109 - throw new Exception("转换数据部分错误,请查看相关错误输出文件!");  
110 - }  
111 - }  
112 -  
113 - @Override  
114 - public void fileDataImport(File datafile, File ktrFile) throws Exception {  
115 -// // 1、上传数据文件  
116 -// File uploadFile = datafile;  
117 -  
118 - // 2、使用kettle运行封装数据导入逻辑的ktr转换文件  
119 - // 2.1、初始化kettle(组件初始化已经做了)  
120 - // 2.2、创建转换元数据,转换  
121 - TransMeta transMeta = new TransMeta(ktrFile.getAbsolutePath());  
122 - Trans trans = new Trans(transMeta);  
123 - // 2.3、设定命名参数,用于指定数据文件,注意每个ktr必须都有以下指定的命名参数  
124 - trans.setParameterValue("filepath", datafile.getAbsolutePath()); // 指定导入数据文件的位置  
125 - trans.setParameterValue("erroroutputdir", dataToolsProperties.getTransErrordir()); // ktr转换错误输出目录  
126 - // TODO:可以考虑设定日志输出  
127 - // 2.4、执行转换  
128 - trans.execute(null);  
129 - // 2.5、等待转换结束  
130 - trans.waitUntilFinished();  
131 -  
132 - // 3、判定ktr错误数,注意这种错误代表部分数据错误,不会终止转换执行,一般设计ktr的时候,会有错误输出文件,TODO:以后考虑使用日志实时输出  
133 - if (trans.getErrors() > 0) {  
134 - throw new Exception("转换数据部分错误,请查看相关错误输出文件!");  
135 - }  
136 - }  
137 -  
138 - @Override  
139 - public File fileDataOutput(String fileName, File ktrFile) throws Exception {  
140 - return fileDataOutput(fileName, ktrFile, null);  
141 - }  
142 -  
143 - @Override  
144 - public File fileDataOutput(String fileName, File ktrFile, Map<String, Object> param) throws Exception {  
145 - // 初始化转换,元数据,转换对象  
146 - TransMeta transMeta = new TransMeta(ktrFile.getAbsolutePath());  
147 - Trans trans = new Trans(transMeta);  
148 - // 设定命名参数  
149 - String filepath = dataToolsProperties.getFileoutputDir() +  
150 - File.separator +  
151 - fileName +  
152 - new DateTime().toString("yyyyMMddHHmmss") + ".xls";  
153 - trans.setParameterValue("filepath", filepath);  
154 -  
155 - // 添加其他参数  
156 - if (!CollectionUtils.isEmpty(param)) {  
157 - for (String key : param.keySet()) {  
158 - trans.setParameterValue(key, String.valueOf(param.get(key)));  
159 - }  
160 - }  
161 -  
162 - // 执行转换  
163 - trans.execute(null);  
164 - // 等待转换结束  
165 - trans.waitUntilFinished();  
166 -  
167 - if (trans.getErrors() > 0) {  
168 - throw new Exception("转换数据部分错误,请查看相关错误输出文件!");  
169 - }  
170 -  
171 - return new File(filepath);  
172 - }  
173 -  
174 -  
175 - // TODO:以后改成下面的样子  
176 -// import java.io.FileInputStream;  
177 -// import java.io.FileOutputStream;  
178 -// import java.io.IOException;  
179 -// import java.io.InputStream;  
180 -// import java.util.Iterator;  
181 -//  
182 -// import org.apache.poi.hssf.usermodel.HSSFCell;  
183 -// import org.apache.poi.hssf.usermodel.HSSFRow;  
184 -// import org.apache.poi.hssf.usermodel.HSSFSheet;  
185 -// import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
186 -//  
187 -// import org.apache.poi.xssf.usermodel.XSSFCell;  
188 -// import org.apache.poi.xssf.usermodel.XSSFRow;  
189 -// import org.apache.poi.xssf.usermodel.XSSFSheet;  
190 -// import org.apache.poi.xssf.usermodel.XSSFWorkbook;  
191 -//  
192 -// public class ReadWriteExcelFile {  
193 -//  
194 -// public static void readXLSFile() throws IOException  
195 -// {  
196 -// InputStream ExcelFileToRead = new FileInputStream("C:/Test.xls");  
197 -// HSSFWorkbook wb = new HSSFWorkbook(ExcelFileToRead);  
198 -//  
199 -// HSSFSheet sheet=wb.getSheetAt(0);  
200 -// HSSFRow row;  
201 -// HSSFCell cell;  
202 -//  
203 -// Iterator rows = sheet.rowIterator();  
204 -//  
205 -// while (rows.hasNext())  
206 -// {  
207 -// row=(HSSFRow) rows.next();  
208 -// Iterator cells = row.cellIterator();  
209 -//  
210 -// while (cells.hasNext())  
211 -// {  
212 -// cell=(HSSFCell) cells.next();  
213 -//  
214 -// if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING)  
215 -// {  
216 -// System.out.print(cell.getStringCellValue()+" ");  
217 -// }  
218 -// else if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC)  
219 -// {  
220 -// System.out.print(cell.getNumericCellValue()+" ");  
221 -// }  
222 -// else  
223 -// {  
224 -// //U Can Handel Boolean, Formula, Errors  
225 -// }  
226 -// }  
227 -// System.out.println();  
228 -// }  
229 -//  
230 -// }  
231 -//  
232 -// public static void writeXLSFile() throws IOException {  
233 -//  
234 -// String excelFileName = "C:/Test.xls";//name of excel file  
235 -//  
236 -// String sheetName = "Sheet1";//name of sheet  
237 -//  
238 -// HSSFWorkbook wb = new HSSFWorkbook();  
239 -// HSSFSheet sheet = wb.createSheet(sheetName) ;  
240 -//  
241 -// //iterating r number of rows  
242 -// for (int r=0;r < 5; r++ )  
243 -// {  
244 -// HSSFRow row = sheet.createRow(r);  
245 -//  
246 -// //iterating c number of columns  
247 -// for (int c=0;c < 5; c++ )  
248 -// {  
249 -// HSSFCell cell = row.createCell(c);  
250 -//  
251 -// cell.setCellValue("Cell "+r+" "+c);  
252 -// }  
253 -// }  
254 -//  
255 -// FileOutputStream fileOut = new FileOutputStream(excelFileName);  
256 -//  
257 -// //write this workbook to an Outputstream.  
258 -// wb.write(fileOut);  
259 -// fileOut.flush();  
260 -// fileOut.close();  
261 -// }  
262 -//  
263 -// public static void readXLSXFile() throws IOException  
264 -// {  
265 -// InputStream ExcelFileToRead = new FileInputStream("C:/Test.xlsx");  
266 -// XSSFWorkbook wb = new XSSFWorkbook(ExcelFileToRead);  
267 -//  
268 -// XSSFWorkbook test = new XSSFWorkbook();  
269 -//  
270 -// XSSFSheet sheet = wb.getSheetAt(0);  
271 -// XSSFRow row;  
272 -// XSSFCell cell;  
273 -//  
274 -// Iterator rows = sheet.rowIterator();  
275 -//  
276 -// while (rows.hasNext())  
277 -// {  
278 -// row=(XSSFRow) rows.next();  
279 -// Iterator cells = row.cellIterator();  
280 -// while (cells.hasNext())  
281 -// {  
282 -// cell=(XSSFCell) cells.next();  
283 -//  
284 -// if (cell.getCellType() == XSSFCell.CELL_TYPE_STRING)  
285 -// {  
286 -// System.out.print(cell.getStringCellValue()+" ");  
287 -// }  
288 -// else if(cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC)  
289 -// {  
290 -// System.out.print(cell.getNumericCellValue()+" ");  
291 -// }  
292 -// else  
293 -// {  
294 -// //U Can Handel Boolean, Formula, Errors  
295 -// }  
296 -// }  
297 -// System.out.println();  
298 -// }  
299 -//  
300 -// }  
301 -//  
302 -// public static void writeXLSXFile() throws IOException {  
303 -//  
304 -// String excelFileName = "C:/Test.xlsx";//name of excel file  
305 -//  
306 -// String sheetName = "Sheet1";//name of sheet  
307 -//  
308 -// XSSFWorkbook wb = new XSSFWorkbook();  
309 -// XSSFSheet sheet = wb.createSheet(sheetName) ;  
310 -//  
311 -// //iterating r number of rows  
312 -// for (int r=0;r < 5; r++ )  
313 -// {  
314 -// XSSFRow row = sheet.createRow(r);  
315 -//  
316 -// //iterating c number of columns  
317 -// for (int c=0;c < 5; c++ )  
318 -// {  
319 -// XSSFCell cell = row.createCell(c);  
320 -//  
321 -// cell.setCellValue("Cell "+r+" "+c);  
322 -// }  
323 -// }  
324 -//  
325 -// FileOutputStream fileOut = new FileOutputStream(excelFileName);  
326 -//  
327 -// //write this workbook to an Outputstream.  
328 -// wb.write(fileOut);  
329 -// fileOut.flush();  
330 -// fileOut.close();  
331 -// }  
332 -//  
333 -// public static void main(String[] args) throws IOException {  
334 -//  
335 -// writeXLSFile();  
336 -// readXLSFile();  
337 -//  
338 -// writeXLSXFile();  
339 -// readXLSXFile();  
340 -//  
341 -// }  
342 -//  
343 -// }  
344 -}  
src/main/java/com/bsth/service/schedule/utils/DataToolsServiceImpl.java
@@ -13,10 +13,9 @@ import org.pentaho.di.trans.Trans; @@ -13,10 +13,9 @@ import org.pentaho.di.trans.Trans;
13 import org.pentaho.di.trans.TransMeta; 13 import org.pentaho.di.trans.TransMeta;
14 import org.slf4j.Logger; 14 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory; 15 import org.slf4j.LoggerFactory;
16 -import org.springframework.beans.factory.InitializingBean;  
17 import org.springframework.beans.factory.annotation.Autowired; 16 import org.springframework.beans.factory.annotation.Autowired;
18 import org.springframework.boot.context.properties.EnableConfigurationProperties; 17 import org.springframework.boot.context.properties.EnableConfigurationProperties;
19 -import org.springframework.stereotype.Service; 18 +import org.springframework.stereotype.Component;
20 19
21 import java.io.File; 20 import java.io.File;
22 import java.io.PrintWriter; 21 import java.io.PrintWriter;
@@ -24,19 +23,41 @@ import java.io.StringWriter; @@ -24,19 +23,41 @@ import java.io.StringWriter;
24 import java.util.HashMap; 23 import java.util.HashMap;
25 import java.util.Map; 24 import java.util.Map;
26 import java.util.Properties; 25 import java.util.Properties;
  26 +import java.util.concurrent.atomic.AtomicBoolean;
27 27
28 /** 28 /**
29 * Created by xu on 17/1/3. 29 * Created by xu on 17/1/3.
30 */ 30 */
31 -@Service 31 +@Component
32 @EnableConfigurationProperties(DataToolsProperties.class) 32 @EnableConfigurationProperties(DataToolsProperties.class)
33 -public class DataToolsServiceImpl implements DataToolsService, InitializingBean { 33 +public class DataToolsServiceImpl implements DataToolsService {
34 /** 日志记录器 */ 34 /** 日志记录器 */
35 private static final Logger LOGGER = LoggerFactory.getLogger(DataToolsServiceImpl.class); 35 private static final Logger LOGGER = LoggerFactory.getLogger(DataToolsServiceImpl.class);
36 36
37 @Autowired 37 @Autowired
38 private DataToolsProperties dataToolsProperties; 38 private DataToolsProperties dataToolsProperties;
39 39
  40 + /** 原子操作类 */
  41 + private AtomicBoolean flag = new AtomicBoolean(false);
  42 +
  43 + private void initKettle() throws Exception {
  44 + if (flag.compareAndSet(false, true)) {
  45 + LOGGER.info("kettle开始初始化......");
  46 +
  47 + // 初始化kettle环境(自定义)
  48 + ktrEnvironmentInit();
  49 +
  50 + // 添加全局ktr变量,并覆盖原来的设置
  51 + Map<String, String> kvars = new HashMap<>();
  52 + kvars.put("v_db_ip", dataToolsProperties.getKvarsDbip());
  53 + kvars.put("v_db_uname", dataToolsProperties.getKvarsDbuname());
  54 + kvars.put("v_db_pwd", dataToolsProperties.getKvarsDbpwd());
  55 + kvars.put("v_db_dname", dataToolsProperties.getKvarsDbdname());
  56 + EnvUtil.applyKettleProperties(kvars, true);
  57 + KettleEnvironment.init();
  58 + }
  59 + }
  60 +
40 /** 61 /**
41 * 自定义kettle环境初始化定义。 62 * 自定义kettle环境初始化定义。
42 */ 63 */
@@ -70,24 +91,11 @@ public class DataToolsServiceImpl implements DataToolsService, InitializingBean @@ -70,24 +91,11 @@ public class DataToolsServiceImpl implements DataToolsService, InitializingBean
70 } 91 }
71 92
72 @Override 93 @Override
73 - public void afterPropertiesSet() throws Exception {  
74 - // 初始化kettle环境(自定义)  
75 - ktrEnvironmentInit();  
76 -  
77 - // 添加全局ktr变量,并覆盖原来的设置  
78 - Map<String, String> kvars = new HashMap<>();  
79 - kvars.put("v_db_ip", dataToolsProperties.getKvarsDbip());  
80 - kvars.put("v_db_uname", dataToolsProperties.getKvarsDbuname());  
81 - kvars.put("v_db_pwd", dataToolsProperties.getKvarsDbpwd());  
82 - kvars.put("v_db_dname", dataToolsProperties.getKvarsDbdname());  
83 - EnvUtil.applyKettleProperties(kvars, true);  
84 - KettleEnvironment.init();  
85 - }  
86 -  
87 - @Override  
88 public File uploadFile(String filename, byte[] filedata) throws ScheduleException { 94 public File uploadFile(String filename, byte[] filedata) throws ScheduleException {
89 // 上传文件 95 // 上传文件
90 try { 96 try {
  97 + initKettle();
  98 +
91 LOGGER.info("start uploadFile...originalFilename={}", filename); 99 LOGGER.info("start uploadFile...originalFilename={}", filename);
92 File newFile = new File(dataToolsProperties.getFileuploadDir() + File.separator + 100 File newFile = new File(dataToolsProperties.getFileuploadDir() + File.separator +
93 filename + "-upload-" + new DateTime().toString("yyyyMMddHHmmss") + ".xls"); 101 filename + "-upload-" + new DateTime().toString("yyyyMMddHHmmss") + ".xls");
@@ -127,6 +135,8 @@ public class DataToolsServiceImpl implements DataToolsService, InitializingBean @@ -127,6 +135,8 @@ public class DataToolsServiceImpl implements DataToolsService, InitializingBean
127 String transLogId = ""; 135 String transLogId = "";
128 String transMetaLogId = ""; 136 String transMetaLogId = "";
129 try { 137 try {
  138 + initKettle();
  139 +
130 LOGGER.info("start importData...originalFilename={}", file.getAbsolutePath()); 140 LOGGER.info("start importData...originalFilename={}", file.getAbsolutePath());
131 // 检查参数 141 // 检查参数
132 String transpath = String.valueOf(params.get("transpath")); 142 String transpath = String.valueOf(params.get("transpath"));
@@ -189,6 +199,8 @@ public class DataToolsServiceImpl implements DataToolsService, InitializingBean @@ -189,6 +199,8 @@ public class DataToolsServiceImpl implements DataToolsService, InitializingBean
189 String transLogId = ""; 199 String transLogId = "";
190 String transMetaLogId = ""; 200 String transMetaLogId = "";
191 try { 201 try {
  202 + initKettle();
  203 +
192 LOGGER.info("start exportData..."); 204 LOGGER.info("start exportData...");
193 // 检查参数 205 // 检查参数
194 String filename = String.valueOf(params.get("filename")); 206 String filename = String.valueOf(params.get("filename"));
src/main/resources/static/pages/scheduleApp/module/core/busConfig/module.js
@@ -126,8 +126,9 @@ angular.module(&#39;ScheduleApp&#39;).controller( @@ -126,8 +126,9 @@ angular.module(&#39;ScheduleApp&#39;).controller(
126 126
127 // 导出excel 127 // 导出excel
128 self.exportData = function() { 128 self.exportData = function() {
129 - if (busConfigService.dataExport()) {  
130 - busConfigService.dataExport().then( 129 + var p = busConfigService.dataExport();
  130 + if (p) {
  131 + p.then(
131 function(result) { 132 function(result) {
132 fileDownload.downloadFile(result.data, "application/octet-stream", "车辆配置信息.xls"); 133 fileDownload.downloadFile(result.data, "application/octet-stream", "车辆配置信息.xls");
133 }, 134 },
src/main/resources/static/pages/scheduleApp/module/core/employeeConfig/module.js
@@ -127,8 +127,9 @@ angular.module(&#39;ScheduleApp&#39;).controller( @@ -127,8 +127,9 @@ angular.module(&#39;ScheduleApp&#39;).controller(
127 127
128 // 导出excel 128 // 导出excel
129 self.exportData = function() { 129 self.exportData = function() {
130 - if (service.dataExport()) {  
131 - service.dataExport().then( 130 + var p = service.dataExport();
  131 + if (p) {
  132 + p.then(
132 function(result) { 133 function(result) {
133 fileDownload.downloadFile(result.data, "application/octet-stream", "人员配置信息.xls"); 134 fileDownload.downloadFile(result.data, "application/octet-stream", "人员配置信息.xls");
134 }, 135 },
src/main/resources/static/pages/scheduleApp/module/core/guideboardManage/module.js
@@ -131,8 +131,9 @@ angular.module(&#39;ScheduleApp&#39;).controller( @@ -131,8 +131,9 @@ angular.module(&#39;ScheduleApp&#39;).controller(
131 131
132 // 导出excel 132 // 导出excel
133 self.exportData = function() { 133 self.exportData = function() {
134 - if (service.dataExport()) {  
135 - service.dataExport().then( 134 + var p = service.dataExport();
  135 + if (p) {
  136 + p.then(
136 function(result) { 137 function(result) {
137 fileDownload.downloadFile(result.data, "application/octet-stream", "路牌信息.xls"); 138 fileDownload.downloadFile(result.data, "application/octet-stream", "路牌信息.xls");
138 }, 139 },
src/test/java/com/bsth/service/schedule/rules/SchedulePlan1Test.java 0 → 100644
  1 +package com.bsth.service.schedule.rules;
  2 +
  3 +import com.bsth.service.schedule.BaseTest;
  4 +import org.dbunit.database.DatabaseConnection;
  5 +import org.dbunit.database.IDatabaseConnection;
  6 +import org.dbunit.dataset.IDataSet;
  7 +import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
  8 +import org.dbunit.operation.DatabaseOperation;
  9 +import org.junit.After;
  10 +import org.junit.Before;
  11 +import org.junit.Test;
  12 +import org.slf4j.Logger;
  13 +import org.slf4j.LoggerFactory;
  14 +import org.springframework.beans.factory.annotation.Autowired;
  15 +import org.springframework.core.io.ClassPathResource;
  16 +import org.springframework.core.io.Resource;
  17 +
  18 +import javax.sql.DataSource;
  19 +
  20 +/**
  21 + * 排班计划测试(手工排班测试)。
  22 + */
  23 +public class SchedulePlan1Test extends BaseTest {
  24 + /** 日志记录器 */
  25 + private static final Logger logger = LoggerFactory.getLogger(SchedulePlan1Test.class);
  26 +
  27 + @Autowired
  28 + private DataSource dataSource;
  29 +
  30 + /**
  31 + * 初始化数据。
  32 + */
  33 + @Before
  34 + public void initData() throws Exception {
  35 + logger.info("载入数据......");
  36 +
  37 + // 获取数据库连接
  38 + IDatabaseConnection iDatabaseConnection = new DatabaseConnection(dataSource.getConnection());
  39 + // 获取Dbunit数据源
  40 + Resource res = new ClassPathResource("testdata/d2.xml");
  41 + FlatXmlDataSetBuilder flatXmlDataSetBuilder = new FlatXmlDataSetBuilder();
  42 + flatXmlDataSetBuilder.setColumnSensing(false);
  43 + flatXmlDataSetBuilder.setCaseSensitiveTableNames(false);
  44 + IDataSet iDataSet = flatXmlDataSetBuilder.build(res.getInputStream());
  45 +
  46 + // 载入数据
  47 + DatabaseOperation.CLEAN_INSERT.execute(iDatabaseConnection, iDataSet);
  48 + }
  49 +
  50 + /**
  51 + * 清除数据。
  52 + */
  53 + @After
  54 + public void destoryData() throws Exception {
  55 + logger.info("清除数据......");
  56 + // 获取数据库连接
  57 + IDatabaseConnection iDatabaseConnection = new DatabaseConnection(dataSource.getConnection());
  58 + // 获取Dbunit数据源
  59 + Resource res = new ClassPathResource("testdata/d2.xml");
  60 + FlatXmlDataSetBuilder flatXmlDataSetBuilder = new FlatXmlDataSetBuilder();
  61 + flatXmlDataSetBuilder.setColumnSensing(false);
  62 + flatXmlDataSetBuilder.setCaseSensitiveTableNames(false);
  63 + IDataSet iDataSet = flatXmlDataSetBuilder.build(res.getInputStream());
  64 +
  65 + // 清除数据
  66 + DatabaseOperation.DELETE_ALL.execute(iDatabaseConnection, iDataSet);
  67 + }
  68 +
  69 +
  70 + @Test
  71 + public void t1() {
  72 +
  73 + }
  74 +
  75 +
  76 +
  77 +
  78 +
  79 +
  80 +
  81 +
  82 +
  83 +
  84 +
  85 +
  86 +
  87 +
  88 +
  89 +
  90 +
  91 +
  92 +
  93 +
  94 +}
src/test/java/com/bsth/service/schedule/rules/SchedulePlan2Test.java 0 → 100644
  1 +package com.bsth.service.schedule.rules;
  2 +
  3 +/**
  4 + * 时刻表测试(自动排班测试)。
  5 + */
  6 +public class SchedulePlan2Test {
  7 + // TODO:
  8 +}
src/test/resources/testdata/test1.txt 0 → 100644
  1 +select * from jwgl_f_t_clxh_workflow_detail a where a.ID_LYSYLB = 36;
  2 +
  3 +select sum(amount - tl_amount) from jwgl_f_t_clxh_workflow_detail
  4 +where
  5 +to_date(statdateid, 'YYYYMMDD') >= to_date('20170301', 'YYYYMMDD')
  6 +and to_date(statdateid, 'YYYYMMDD') <= to_date('20170331', 'YYYYMMDD')
  7 +
  8 +select * from JWGL_D_T_LYSYLB
  9 +
  10 +-- all xh
  11 +
  12 +select
  13 +statdateid statdate
  14 +, ssjc gs
  15 +, xl xl
  16 +, zbh cl
  17 +, b.SYLB1 || '-' || b.SYLB2 as lylb
  18 +, (sum(amount) - sum(tl_amount)) ch
  19 +from JWGL_F_T_CLXH_WORKFLOW_DETAIL a, JWGL_D_T_LYSYLB b
  20 +where
  21 +to_date(statdateid, 'YYYYMMDD') >= to_date('20170301', 'YYYYMMDD')
  22 +and to_date(statdateid, 'YYYYMMDD') <= to_date('20170331', 'YYYYMMDD')
  23 +and a.ID_LYSYLB = b.ID(+)
  24 +group by
  25 +statdateid
  26 +, ssjc
  27 +, xl
  28 +, zbh
  29 +, b.SYLB1 || '-' || b.SYLB2
  30 +
  31 +-- part1
  32 +
  33 +select sum(ch) from
  34 +(
  35 +select
  36 +statdateid statdate
  37 +, ssjc gs
  38 +, xl xl
  39 +, zbh cl
  40 +, b.SYLB1 || '-' || b.SYLB2 as lylb
  41 +, (sum(amount) - sum(tl_amount)) ch
  42 +from JWGL_F_T_CLXH_WORKFLOW_DETAIL a, JWGL_D_T_LYSYLB b
  43 +where
  44 +to_date(statdateid, 'YYYYMMDD') >= to_date('20170301', 'YYYYMMDD')
  45 +and to_date(statdateid, 'YYYYMMDD') <= to_date('20170331', 'YYYYMMDD')
  46 +and a.ID_LYSYLB = b.ID(+)
  47 +group by
  48 +statdateid
  49 +, ssjc
  50 +, xl
  51 +, zbh
  52 +, b.SYLB1 || '-' || b.SYLB2
  53 +)
  54 +where lylb in (
  55 +'路救-路救',
  56 +'小修-小修机工',
  57 +'专项-安检',
  58 +'专项-节检',
  59 +'专项-水箱',
  60 +'专项-电瓶',
  61 +'小修-小修电工',
  62 +'专项-电并',
  63 +'小修-小修车身',
  64 +'专项-镗固',
  65 +'保养-一级保养',
  66 +'小修-发动机',
  67 +'专项-轮胎',
  68 +'分摊-轮胎',
  69 +'专项-润滑油',
  70 +'总成-差变速',
  71 +'总成-大泵',
  72 +'总成-小总成',
  73 +'总成-发动机',
  74 +'保养-二级保养',
  75 +'保养-三级保养',
  76 +'整修-整修',
  77 +'空调-保外',
  78 +'空调-保内',
  79 +'事故-事故'
  80 +)
  81 +
  82 +-- part2
  83 +
  84 +select sum(ch) from
  85 +(
  86 +select
  87 +statdateid statdate
  88 +, ssjc gs
  89 +, xl xl
  90 +, zbh cl
  91 +, b.SYLB1 || '-' || b.SYLB2 as lylb
  92 +, (sum(amount) - sum(tl_amount)) ch
  93 +from JWGL_F_T_CLXH_WORKFLOW_DETAIL a, JWGL_D_T_LYSYLB b
  94 +where
  95 +to_date(statdateid, 'YYYYMMDD') >= to_date('20170301', 'YYYYMMDD')
  96 +and to_date(statdateid, 'YYYYMMDD') <= to_date('20170331', 'YYYYMMDD')
  97 +and a.ID_LYSYLB = b.ID(+)
  98 +group by
  99 +statdateid
  100 +, ssjc
  101 +, xl
  102 +, zbh
  103 +, b.SYLB1 || '-' || b.SYLB2
  104 +)
  105 +where lylb in(
  106 +'分摊-镗固',
  107 +'专项-机油',
  108 +'分摊-机油',
  109 +'总成-其它',
  110 +'分摊-工具',
  111 +'分摊-辅助料',
  112 +'分摊-设备',
  113 +'车间经费-车间经费'
  114 +)
  115 +
  116 +
  117 +
  118 +
  119 +
  120 +
  121 +
  122 +
  123 +
  124 +
  125 +
  126 +
  127 +
  128 +
  129 +
  130 +
  131 +
  132 +
  133 +
src/test/resources/testdata/test2.txt 0 → 100644
  1 +
  2 +select * from JWGL_FR_T_CH_REPORT_DATA1;
  3 +
  4 +select * from JWGL_FR_T_CH_REPORT_DATA2;
  5 +
  6 +-- sum part1
  7 +
  8 +select
  9 +(
  10 +sum(lj_lj) + sum(xx_xxjg) + sum(xx_xxdg) + sum(zx_db) + sum(xx_xxcs) + sum(zx_tg) + sum(by_b1) +
  11 +sum(nvl(future_bx, 0)) + sum(xx_fdj) + sum(zx_lt) + sum(zx_rhy) + sum(zc_cbx) + sum(zc_db) + sum(zc_xzc) +
  12 +sum(zc_fdj) + sum(by_b2) + sum(by_b3) + sum(nvl(future_wx_db, 0)) + sum(nvl(future_wxfy, 0)) + sum(nvl(future_ktwx, 0)) + sum(nvl(future_sx, 0)) +
  13 +sum(nvl(future_dp, 0)) + sum(zx_zx) + sum(kt_bw) + sum(sg_sg)
  14 +) as part1
  15 +from JWGL_FR_T_CH_REPORT_DATA1
  16 +where
  17 +statdate >= to_date('20170301', 'YYYYMMDD')
  18 +and statdate <= to_date('20170331', 'YYYYMMDD')
  19 +
  20 +-- sum part2
  21 +
  22 +select
  23 +(
  24 +sum(zx_tg) + sum(jy) + sum(qt) + sum(zcfl) + sum(gj) + sum(sb) + sum(cjjf)
  25 +) as part2
  26 +from JWGL_FR_T_CH_REPORT_DATA2
  27 +where statdate = to_date('20170331', 'YYYYMMDD')
0 \ No newline at end of file 28 \ No newline at end of file