Commit 9d64c91748b29c55205849d980fd78c6e21c9555

Authored by 廖磊
2 parents d6acb4c4 c674d09c

Merge branch 'minhang' of

http://222.66.0.204:8090/panzhaov5/bsth_control into minhang
Showing 75 changed files with 755 additions and 1182 deletions
src/main/java/com/bsth/common/Constants.java
... ... @@ -36,4 +36,14 @@ public class Constants {
36 36  
37 37 public static final String SESSION_USERNAME = "sessionUserName";
38 38 public static final String COMPANY_AUTHORITYS = "cmyAuths";
  39 +
  40 + /**
  41 + * 解除调度指令和班次的外键约束
  42 + */
  43 + public static final String REMOVE_DIRECTIVE_SCH_FK = "update bsth_v_directive_60 set sch=NULL where sch=?";
  44 +
  45 + /**
  46 + * 批量解除调度指令和班次的外键约束
  47 + */
  48 + public static final String MULTI_REMOVE_DIRECTIVE_SCH_FK = "update bsth_v_directive_60 set sch=NULL where sch in ";
39 49 }
... ...
src/main/java/com/bsth/controller/BaseController.java
1 1 package com.bsth.controller;
2 2  
3   -import com.bsth.common.ResponseCode;
4 3 import com.bsth.service.BaseService;
5   -import com.bsth.service.schedule.utils.DataImportExportService;
6 4 import com.google.common.base.Splitter;
7 5 import org.springframework.beans.factory.annotation.Autowired;
8 6 import org.springframework.data.domain.Page;
9 7 import org.springframework.data.domain.PageRequest;
10 8 import org.springframework.data.domain.Sort;
11 9 import org.springframework.data.domain.Sort.Direction;
12   -import org.springframework.util.CollectionUtils;
13 10 import org.springframework.web.bind.annotation.PathVariable;
14 11 import org.springframework.web.bind.annotation.RequestMapping;
15 12 import org.springframework.web.bind.annotation.RequestMethod;
16 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 16 import java.util.ArrayList;
22   -import java.util.HashMap;
23 17 import java.util.List;
24 18 import java.util.Map;
25 19  
... ... @@ -35,8 +29,6 @@ public class BaseController<T, ID extends Serializable> {
35 29  
36 30 @Autowired
37 31 protected BaseService<T, ID> baseService;
38   - @Autowired
39   - DataImportExportService dataImportExportService;
40 32  
41 33 /**
42 34 * @param @param map 查询条件
... ... @@ -126,115 +118,4 @@ public class BaseController&lt;T, ID extends Serializable&gt; {
126 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 1 package com.bsth.controller;
2 2  
3   -import com.bsth.common.ResponseCode;
4 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 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 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 8 * Created by xu on 16/5/31.
20 9 */
21 10 @RestController
22 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 2  
3 3 import com.bsth.entity.Personnel;
4 4 import com.bsth.service.PersonnelService;
5   -import com.bsth.service.schedule.utils.DataToolsProperties;
6 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 11 import java.util.List;
11 12 import java.util.Map;
... ... @@ -15,54 +16,11 @@ import java.util.Map;
15 16 */
16 17 @RestController
17 18 @RequestMapping("personnel")
18   -@EnableConfigurationProperties(DataToolsProperties.class)
19 19 public class PersonnelController extends BaseController<Personnel, Integer> {
20 20  
21 21 @Autowired
22   - private DataToolsProperties dataToolsProperties;
23   -
24   - @Autowired
25 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 24 @RequestMapping(value = "/sreachPersonnel", method = RequestMethod.GET)
67 25 public List<Map<String, String>> sreachPersonnel(@RequestParam String jobCode) {
68 26 return service.sreachPersonnel(jobCode);
... ...
src/main/java/com/bsth/data/schedule/DayOfSchedule.java
... ... @@ -3,6 +3,7 @@ package com.bsth.data.schedule;
3 3 import com.alibaba.fastjson.JSON;
4 4 import com.alibaba.fastjson.JSONArray;
5 5 import com.bsth.Application;
  6 +import com.bsth.common.Constants;
6 7 import com.bsth.common.ResponseCode;
7 8 import com.bsth.data.BasicData;
8 9 import com.bsth.data.LineConfigData;
... ... @@ -27,6 +28,8 @@ import org.slf4j.LoggerFactory;
27 28 import org.springframework.beans.factory.annotation.Autowired;
28 29 import org.springframework.boot.CommandLineRunner;
29 30 import org.springframework.core.annotation.Order;
  31 +import org.springframework.dao.DataIntegrityViolationException;
  32 +import org.springframework.jdbc.core.JdbcTemplate;
30 33 import org.springframework.stereotype.Component;
31 34  
32 35 import java.text.ParseException;
... ... @@ -855,6 +858,9 @@ public class DayOfSchedule implements CommandLineRunner {
855 858 return false;
856 859 }
857 860  
  861 +
  862 + @Autowired
  863 + JdbcTemplate jdbcTemplate;
858 864 /**
859 865 * 删除实际排班
860 866 * @param lineCode
... ... @@ -866,20 +872,33 @@ public class DayOfSchedule implements CommandLineRunner {
866 872 try {
867 873 String rq = currSchDateMap.get(lineCode);
868 874 if(StringUtils.isNotEmpty(rq)){
  875 + List<ScheduleRealInfo> all = findByLineCode(lineCode);
869 876 //解除gps 和班次之间的关联
870   - List<ScheduleRealInfo> unions = calcUnion(findByLineCode(lineCode), carExecutePlanMap.values());
  877 + List<ScheduleRealInfo> unions = calcUnion(all, carExecutePlanMap.values());
871 878 for(ScheduleRealInfo sch : unions){
872 879 removeExecPlan(sch.getClZbh());
873 880 }
  881 + //解除调度指令和班次的外键约束
  882 + StringBuilder inStr = new StringBuilder("(");
  883 + for(ScheduleRealInfo sch : all){
  884 + inStr.append(sch.getId() + ",");
  885 + }
  886 + inStr.deleteCharAt(inStr.length() - 1).append(")");
  887 + jdbcTemplate.update(Constants.MULTI_REMOVE_DIRECTIVE_SCH_FK + " " + inStr.toString());
874 888  
875 889 //删除班次数据
876 890 removeRealSch(lineCode, rq);
877 891 //删除相关班次修正记录
  892 +
878 893 }
879 894 rs.put("status", ResponseCode.SUCCESS);
880 895 }catch (Exception e){
881 896 logger.error("", e);
882 897 rs.put("status", ResponseCode.ERROR);
  898 + if(e instanceof DataIntegrityViolationException)
  899 + rs.put("msg", "失败,违反数据约束!!");
  900 + else
  901 + rs.put("msg", e.getMessage());
883 902 }
884 903  
885 904 return rs;
... ...
src/main/java/com/bsth/data/schedule/late_adjust/LateAdjustHandle.java 0 → 100644
  1 +package com.bsth.data.schedule.late_adjust;
  2 +
  3 +/**
  4 + * 误点调整处理程序
  5 + * Created by panzhao on 2017/4/16.
  6 + */
  7 +public class LateAdjustHandle {
  8 +
  9 +}
... ...
src/main/java/com/bsth/entity/realcontrol/ScheduleRealInfo.java
... ... @@ -773,6 +773,7 @@ public class ScheduleRealInfo {
773 773 public void destroy(){
774 774 this.jhlc = 0.0;
775 775 this.status = -1;
  776 + this.clearFcsjActual();
776 777 }
777 778  
778 779 public boolean isDestroy(){
... ...
src/main/java/com/bsth/entity/schedule/rule/ScheduleRule1Flat.java
... ... @@ -67,6 +67,7 @@ public class ScheduleRule1Flat extends BEntity {
67 67 private String ryDbbms;
68 68 /** 对应的人员配置ids(用逗号隔开,如果分班,就先-隔开再逗号隔开) */
69 69 @NotNull
  70 + @Column(length = 1000)
70 71 private String ryConfigIds;
71 72 /** 起始人员(从0开始) */
72 73 @NotNull
... ...
src/main/java/com/bsth/entity/schedule/temp/SchedulePlanRuleResult.java
... ... @@ -2,10 +2,7 @@ package com.bsth.entity.schedule.temp;
2 2  
3 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 6 import java.util.Date;
10 7  
11 8 /**
... ... @@ -32,12 +29,14 @@ public class SchedulePlanRuleResult {
32 29 private String ccZbh;
33 30  
34 31 /** 路牌id列表字符串 */
  32 + @Column(length = 1000)
35 33 private String gids;
36 34 /** 路牌名字列表字符串 */
37 35 private String gnames;
38 36 /** 翻到哪个路牌索引 */
39 37 private String gidindex;
40 38 /** 人员配置id列表字符串 */
  39 + @Column(length = 1000)
41 40 private String ecids;
42 41 /** 人员配置搭班编码列表字符串 */
43 42 private String ecdbbms;
... ...
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
... ... @@ -3,6 +3,7 @@ package com.bsth.service.realcontrol.impl;
3 3 import com.alibaba.fastjson.JSON;
4 4 import com.alibaba.fastjson.JSONArray;
5 5 import com.alibaba.fastjson.JSONObject;
  6 +import com.bsth.common.Constants;
6 7 import com.bsth.common.ResponseCode;
7 8 import com.bsth.controller.realcontrol.dto.ChangePersonCar;
8 9 import com.bsth.controller.realcontrol.dto.DfsjChange;
... ... @@ -400,25 +401,33 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
400 401 Map<String, Object> rs = new HashMap<>();
401 402 rs.put("status", ResponseCode.ERROR);
402 403  
403   - ScheduleRealInfo sch = dayOfSchedule.get(id);
404   - if (sch == null) {
405   - rs.put("msg", "无效的id号");
406   - return rs;
407   - }
  404 + try {
  405 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  406 + if (sch == null) {
  407 + rs.put("msg", "无效的id号");
  408 + return rs;
  409 + }
408 410  
409   - if (!sch.isSflj()) {
410   - rs.put("msg", "你只能删除临加班次");
411   - return rs;
412   - }
  411 + if (!sch.isSflj()) {
  412 + rs.put("msg", "你只能删除临加班次");
  413 + return rs;
  414 + }
413 415  
414   - //数据库删除
415   - rs = super.delete(id);
416   - if(rs.get("status").equals(ResponseCode.SUCCESS)){
417   - dayOfSchedule.delete(sch);
418   - //更新起点应到时间
419   - List<ScheduleRealInfo> ts = dayOfSchedule.updateQdzTimePlan(sch.getClZbh());
420   - rs.put("ts", ts);
421   - rs.put("delete", sch);
  416 + //解除和调度指令的外键约束
  417 + jdbcTemplate.update(Constants.REMOVE_DIRECTIVE_SCH_FK, id);
  418 +
  419 + //数据库删除
  420 + rs = super.delete(id);
  421 + if(rs.get("status").equals(ResponseCode.SUCCESS)){
  422 + dayOfSchedule.delete(sch);
  423 + //更新起点应到时间
  424 + List<ScheduleRealInfo> ts = dayOfSchedule.updateQdzTimePlan(sch.getClZbh());
  425 + rs.put("ts", ts);
  426 + rs.put("delete", sch);
  427 + }
  428 + }catch (Exception e){
  429 + logger.error("", e);
  430 + rs.put("msg", e.getMessage());
422 431 }
423 432  
424 433 return rs;
... ...
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 65 * @param schedulePlan 排班计划对象
66 66 * @param lpInfoResults_output 时刻表每日路牌的情况
67 67 */
68   - private ScheduleResults_output loopRuleOutput(
  68 + public ScheduleResults_output loopRuleOutput(
69 69 SchedulePlan schedulePlan,
70 70 LpInfoResults_output lpInfoResults_output) {
71 71 // 1-1、构造drools规则输入数据,输出数据
... ... @@ -116,7 +116,7 @@ public class SchedulePlanServiceImpl extends BServiceImpl&lt;SchedulePlan, Long&gt; im
116 116 * @param schedulePlan 排班计划对象
117 117 * @return TTInfoResults_output, LpInfoResults_output
118 118 */
119   - private Object[] ttInfoOutput(SchedulePlan schedulePlan) {
  119 + public Object[] ttInfoOutput(SchedulePlan schedulePlan) {
120 120 // 获取线路的所有未作废的时刻表
121 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 174 * @param ttInfoResults_output ttInfoOutput方法规则输出
175 175 * @return PlanResult
176 176 */
177   - private PlanResult planResultOutput(
  177 + public PlanResult planResultOutput(
178 178 SchedulePlan schedulePlan,
179 179 ScheduleResults_output scheduleResults_output,
180 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 4 import org.kie.api.KieBaseConfiguration;
5 5 import org.kie.api.KieServices;
6 6 import org.kie.api.builder.*;
7   -import org.kie.api.builder.Message;
8 7 import org.kie.api.builder.model.KieBaseModel;
9 8 import org.kie.api.builder.model.KieModuleModel;
10 9 import org.kie.api.builder.model.KieSessionModel;
... ... @@ -12,6 +11,8 @@ import org.kie.api.conf.EqualityBehaviorOption;
12 11 import org.kie.api.conf.EventProcessingOption;
13 12 import org.kie.api.runtime.KieContainer;
14 13 import org.kie.api.runtime.conf.ClockTypeOption;
  14 +import org.slf4j.Logger;
  15 +import org.slf4j.LoggerFactory;
15 16 import org.springframework.context.annotation.Bean;
16 17 import org.springframework.context.annotation.Configuration;
17 18  
... ... @@ -20,6 +21,9 @@ import org.springframework.context.annotation.Configuration;
20 21 */
21 22 @Configuration
22 23 public class MyDroolsConfiguration {
  24 + /** 日志记录器 */
  25 + private static final Logger logger = LoggerFactory.getLogger(MyDroolsConfiguration.class);
  26 +
23 27 /**
24 28 * 返回一个kiebase知识库,直接冲文件系统读入drl规则文件,
25 29 * TODO:以后需要从数据库读入规则文件,并重新创建kbase知识库。
... ... @@ -72,8 +76,12 @@ public class MyDroolsConfiguration {
72 76 // 4、创建KieBuilder,使用KieFileSystem构建
73 77 KieBuilder kieBuilder = kieServices.newKieBuilder(kfs).buildAll();
74 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 86 // 5、获取KieContainer
79 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 13 import org.pentaho.di.trans.TransMeta;
14 14 import org.slf4j.Logger;
15 15 import org.slf4j.LoggerFactory;
16   -import org.springframework.beans.factory.InitializingBean;
17 16 import org.springframework.beans.factory.annotation.Autowired;
18 17 import org.springframework.boot.context.properties.EnableConfigurationProperties;
19   -import org.springframework.stereotype.Service;
  18 +import org.springframework.stereotype.Component;
20 19  
21 20 import java.io.File;
22 21 import java.io.PrintWriter;
... ... @@ -24,19 +23,41 @@ import java.io.StringWriter;
24 23 import java.util.HashMap;
25 24 import java.util.Map;
26 25 import java.util.Properties;
  26 +import java.util.concurrent.atomic.AtomicBoolean;
27 27  
28 28 /**
29 29 * Created by xu on 17/1/3.
30 30 */
31   -@Service
  31 +@Component
32 32 @EnableConfigurationProperties(DataToolsProperties.class)
33   -public class DataToolsServiceImpl implements DataToolsService, InitializingBean {
  33 +public class DataToolsServiceImpl implements DataToolsService {
34 34 /** 日志记录器 */
35 35 private static final Logger LOGGER = LoggerFactory.getLogger(DataToolsServiceImpl.class);
36 36  
37 37 @Autowired
38 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 62 * 自定义kettle环境初始化定义。
42 63 */
... ... @@ -70,24 +91,11 @@ public class DataToolsServiceImpl implements DataToolsService, InitializingBean
70 91 }
71 92  
72 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 94 public File uploadFile(String filename, byte[] filedata) throws ScheduleException {
89 95 // 上传文件
90 96 try {
  97 + initKettle();
  98 +
91 99 LOGGER.info("start uploadFile...originalFilename={}", filename);
92 100 File newFile = new File(dataToolsProperties.getFileuploadDir() + File.separator +
93 101 filename + "-upload-" + new DateTime().toString("yyyyMMddHHmmss") + ".xls");
... ... @@ -127,6 +135,8 @@ public class DataToolsServiceImpl implements DataToolsService, InitializingBean
127 135 String transLogId = "";
128 136 String transMetaLogId = "";
129 137 try {
  138 + initKettle();
  139 +
130 140 LOGGER.info("start importData...originalFilename={}", file.getAbsolutePath());
131 141 // 检查参数
132 142 String transpath = String.valueOf(params.get("transpath"));
... ... @@ -189,6 +199,8 @@ public class DataToolsServiceImpl implements DataToolsService, InitializingBean
189 199 String transLogId = "";
190 200 String transMetaLogId = "";
191 201 try {
  202 + initKettle();
  203 +
192 204 LOGGER.info("start exportData...");
193 205 // 检查参数
194 206 String filename = String.valueOf(params.get("filename"));
... ...
src/main/resources/datatools/ktrs/carsDataInput.ktr
... ... @@ -86,6 +86,30 @@
86 86 <notepads>
87 87 </notepads>
88 88 <connection>
  89 + <name>192.168.168.1_jwgl_dw</name>
  90 + <server>192.168.168.1</server>
  91 + <type>ORACLE</type>
  92 + <access>Native</access>
  93 + <database>orcl</database>
  94 + <port>1521</port>
  95 + <username>jwgl_dw</username>
  96 + <password>Encrypted 2be98afc86aa7f2e4cb13b977d2adabcd</password>
  97 + <servername/>
  98 + <data_tablespace/>
  99 + <index_tablespace/>
  100 + <attributes>
  101 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  102 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  103 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  104 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  105 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  106 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  107 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  108 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  109 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  110 + </attributes>
  111 + </connection>
  112 + <connection>
89 113 <name>bus_control_variable</name>
90 114 <server>&#x24;&#x7b;v_db_ip&#x7d;</server>
91 115 <type>MYSQL</type>
... ... @@ -298,6 +322,18 @@
298 322 <group/>
299 323 </field>
300 324 <field>
  325 + <name>&#x8f66;&#x8f86;&#x7f16;&#x7801;</name>
  326 + <type>String</type>
  327 + <length>-1</length>
  328 + <precision>-1</precision>
  329 + <trim_type>none</trim_type>
  330 + <repeat>N</repeat>
  331 + <format/>
  332 + <currency/>
  333 + <decimal/>
  334 + <group/>
  335 + </field>
  336 + <field>
301 337 <name>&#x5185;&#x90e8;&#x7f16;&#x7801;</name>
302 338 <type>String</type>
303 339 <length>-1</length>
... ... @@ -358,7 +394,7 @@
358 394 <group/>
359 395 </field>
360 396 <field>
361   - <name>&#x4f9b;&#x5e94;&#x5546;&#x540d;&#x79f0;</name>
  397 + <name>&#x8bbe;&#x5907;&#x4f9b;&#x5e94;&#x5382;&#x5546;</name>
362 398 <type>String</type>
363 399 <length>-1</length>
364 400 <precision>-1</precision>
... ... @@ -444,12 +480,12 @@
444 480 <update>Y</update>
445 481 </value>
446 482 <value>
447   - <name>inside_code</name>
448   - <rename>&#x5185;&#x90e8;&#x7f16;&#x7801;</rename>
  483 + <name>car_code</name>
  484 + <rename>&#x8f66;&#x8f86;&#x7f16;&#x7801;</rename>
449 485 <update>Y</update>
450 486 </value>
451 487 <value>
452   - <name>car_code</name>
  488 + <name>inside_code</name>
453 489 <rename>&#x5185;&#x90e8;&#x7f16;&#x7801;</rename>
454 490 <update>Y</update>
455 491 </value>
... ... @@ -475,7 +511,7 @@
475 511 </value>
476 512 <value>
477 513 <name>supplier_name</name>
478   - <rename>&#x4f9b;&#x5e94;&#x5546;&#x540d;&#x79f0;</rename>
  514 + <rename>&#x8bbe;&#x5907;&#x4f9b;&#x5e94;&#x5382;&#x5546;</rename>
479 515 <update>Y</update>
480 516 </value>
481 517 <value>
... ... @@ -683,4 +719,3 @@
683 719 <slave_transformation>N</slave_transformation>
684 720  
685 721 </transformation>
686   -
... ...
src/main/resources/datatools/ktrs/carsDataOutput.ktr
... ... @@ -81,6 +81,30 @@
81 81 <notepads>
82 82 </notepads>
83 83 <connection>
  84 + <name>192.168.168.1_jwgl_dw</name>
  85 + <server>192.168.168.1</server>
  86 + <type>ORACLE</type>
  87 + <access>Native</access>
  88 + <database>orcl</database>
  89 + <port>1521</port>
  90 + <username>jwgl_dw</username>
  91 + <password>Encrypted 2be98afc86aa7f2e4cb13b977d2adabcd</password>
  92 + <servername/>
  93 + <data_tablespace/>
  94 + <index_tablespace/>
  95 + <attributes>
  96 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  97 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  98 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  99 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  100 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  101 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  102 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  103 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  104 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  105 + </attributes>
  106 + </connection>
  107 + <connection>
84 108 <name>bus_control_variable</name>
85 109 <server>&#x24;&#x7b;v_db_ip&#x7d;</server>
86 110 <type>MYSQL</type>
... ... @@ -292,6 +316,11 @@
292 316 <format/>
293 317 </field>
294 318 <field>
  319 + <name>&#x8f66;&#x8f86;&#x7f16;&#x7801;</name>
  320 + <type>String</type>
  321 + <format/>
  322 + </field>
  323 + <field>
295 324 <name>&#x5185;&#x90e8;&#x7f16;&#x7801;</name>
296 325 <type>String</type>
297 326 <format/>
... ... @@ -317,6 +346,11 @@
317 346 <format/>
318 347 </field>
319 348 <field>
  349 + <name>&#x8bbe;&#x5907;&#x4f9b;&#x5e94;&#x5382;&#x5546;</name>
  350 + <type>String</type>
  351 + <format/>
  352 + </field>
  353 + <field>
320 354 <name>&#x8bbe;&#x5907;&#x7ec8;&#x7aef;&#x53f7;</name>
321 355 <type>String</type>
322 356 <format/>
... ... @@ -362,6 +396,10 @@
362 396 <rename>&#x8f66;&#x724c;&#x53f7;</rename>
363 397 <length>-2</length>
364 398 <precision>-2</precision>
  399 + </field> <field> <name>car_code</name>
  400 + <rename>&#x8f66;&#x8f86;&#x7f16;&#x7801;</rename>
  401 + <length>-2</length>
  402 + <precision>-2</precision>
365 403 </field> <field> <name>inside_code</name>
366 404 <rename>&#x5185;&#x90e8;&#x7f16;&#x7801;</rename>
367 405 <length>-2</length>
... ...
src/main/resources/fatso/handle_real_ctl.js
... ... @@ -2,35 +2,50 @@
2 2 * 处理线调文件
3 3 */
4 4 var fs = require('fs')
5   - ,cheerio = require('cheerio')
6   - ,minifier = require('./minifier')
7   - ,crypto = require("crypto")
8   - ,CleanCSS = require('clean-css')
9   - ,UglifyJS = require("uglify-js");;
  5 + , cheerio = require('cheerio')
  6 + , minifier = require('./minifier')
  7 + , crypto = require("crypto")
  8 + , CleanCSS = require('clean-css')
  9 + , UglifyJS = require("uglify-js");
  10 +;
10 11  
11 12 //不参与的目录
12 13 var pName = 'bsth_control'
13   - ,path = process.cwd()
  14 + , path = process.cwd()
14 15 //根目录
15   - ,root = path.substr(0, path.indexOf('\\src\\main'))
16   - ,workspace = root.substr(0, root.indexOf('\\' + pName))
  16 + , root = path.substr(0, path.indexOf('\\src\\main'))
  17 + , workspace = root.substr(0, root.indexOf('\\' + pName))
17 18 //临时目录
18   - ,dest = (workspace + '\\' + pName+'@fatso_copy').replace(/\//g,'\\')
19   - ,_static = '\\src\\main\\resources\\static';
  19 + , dest = (workspace + '\\' + pName + '@fatso_copy').replace(/\//g, '\\')
  20 + , _static = '\\src\\main\\resources\\static';
20 21  
21 22  
22 23 var mainFile = dest + _static + '\\real_control_v2\\main.html';
  24 +var mapFile = dest + _static + '\\real_control_v2\\mapmonitor\\real.html';
23 25 var realCtl = {
24 26 /**
25 27 * 处理线调首页
26 28 */
27   - handleMain: function(cb){
  29 + handleMain: function (cb) {
28 30 //读取文件
29 31 var data = fs.readFileSync(mainFile, 'utf-8')
30   - ,$ = cheerio.load(data);
  32 + , $ = cheerio.load(data);
31 33  
32 34 handleCss($, function () {
33   - handleJs($, cb);
  35 + handleJs($, mainFile, cb);
  36 + });
  37 + },
  38 + /**
  39 + * 处理地图模块
  40 + * @param cb
  41 + */
  42 + handleMap: function (cb) {
  43 + //读取文件
  44 + var data = fs.readFileSync(mapFile, 'utf-8')
  45 + , $ = cheerio.load(data);
  46 +
  47 + handleCss($, function () {
  48 + handleJs($, mapFile, cb);
34 49 });
35 50 }
36 51 };
... ... @@ -43,23 +58,23 @@ var handleCss = function ($, cb) {
43 58 var cssArray = $('link[rel=stylesheet][merge]');
44 59 //按 merge 值分组
45 60 var cssMap = {}, mergeName;
46   - for(var i = 0, c; c = cssArray[i++];){
  61 + for (var i = 0, c; c = cssArray[i++];) {
47 62 mergeName = $(c).attr('merge');
48   - if(!cssMap[mergeName])
  63 + if (!cssMap[mergeName])
49 64 cssMap[mergeName] = [];
50 65 cssMap[mergeName].push(dest + _static + $(c).attr('href'));
51 66 //remove
52 67 $(c).remove();
53 68 }
54 69 //按 merge 合并压缩css
55   - var ks = get_keys(cssMap), index=0;
  70 + var ks = get_keys(cssMap), index = 0;
56 71 (function () {
57   - if(index >= ks.length){
  72 + if (index >= ks.length) {
58 73 cb && cb();
59 74 return;
60 75 }
61 76 var k = ks[index];
62   - index ++;
  77 + index++;
63 78 var f = arguments.callee;
64 79 //合并css
65 80 new CleanCSS().minify(cssMap[k], function (error, out) {
... ... @@ -67,10 +82,18 @@ var handleCss = function ($, cb) {
67 82 var fName = (k + '_' + md5(data)) + '.css';
68 83 //写入 assets css 目录下
69 84 var descFile = dest + _static + '\\real_control_v2\\assets\\css\\' + fName;
70   - fs.open(descFile, 'a', function(err, fd){
  85 + fs.open(descFile, 'a', function (err, fd) {
71 86  
72   - fs.write(fd, data, function(){
73   - $('head').append('<link rel="stylesheet" href="/real_control_v2/assets/css/'+fName+'"/>');
  87 + fs.write(fd, data, function () {
  88 + var tag = '<link rel="stylesheet" href="/real_control_v2/assets/css/' + fName + '"/>';
  89 + if ($('head').length > 0)
  90 + $('head').append(tag);
  91 + else {
  92 + if($('link').length > 0)
  93 + $('link').last().before(tag);
  94 + else
  95 + $('div').first().before(tag);
  96 + }
74 97 console.log(k + ' css', '结束,下一个');
75 98 f();
76 99 });
... ... @@ -82,13 +105,13 @@ var handleCss = function ($, cb) {
82 105 /**
83 106 * 处理js
84 107 */
85   -var handleJs = function ($, cb) {
  108 +var handleJs = function ($, file, cb) {
86 109 var scriptArray = $('script[merge]');
87 110 //按 merge 值分组
88 111 var jsMap = {}, mergeName;
89   - for(var i = 0, s; s = scriptArray[i++];){
  112 + for (var i = 0, s; s = scriptArray[i++];) {
90 113 mergeName = $(s).attr('merge');
91   - if(!jsMap[mergeName])
  114 + if (!jsMap[mergeName])
92 115 jsMap[mergeName] = [];
93 116 jsMap[mergeName].push(dest + _static + $(s).attr('src'));
94 117 //remove
... ... @@ -96,16 +119,16 @@ var handleJs = function ($, cb) {
96 119 }
97 120  
98 121 //按 merge 合并压缩js
99   - var ks = get_keys(jsMap), index=0;
  122 + var ks = get_keys(jsMap), index = 0;
100 123 (function () {
101   - if(index >= ks.length){
102   - write(mainFile, $.html());
103   - console.log('线调处理结束'.green);
  124 + if (index >= ks.length) {
  125 + write(file, $.html());
  126 + console.log(file + ' 结束'.green);
104 127 cb && cb();
105 128 return;
106 129 }
107 130 var k = ks[index];
108   - index ++;
  131 + index++;
109 132 var f = arguments.callee;
110 133 //合并压缩js
111 134 var result = UglifyJS.minify(jsMap[k]);
... ... @@ -113,10 +136,16 @@ var handleJs = function ($, cb) {
113 136 var fName = (k + '_' + md5(data)) + '.js';
114 137 //写入 assets js 目录下
115 138 var descFile = dest + _static + '\\real_control_v2\\assets\\js\\' + fName;
116   - fs.open(descFile, 'a', function(err, fd){
  139 + fs.open(descFile, 'a', function (err, fd) {
117 140  
118   - fs.write(fd, data, function(){
119   - $('body').append('<script src="/real_control_v2/assets/js/'+fName+'"></script>');
  141 + fs.write(fd, data, function () {
  142 + var tag = '<script src="/real_control_v2/assets/js/' + fName + '"></script>';
  143 + if ($('body').length > 0)
  144 + $('body').append(tag);
  145 + else {
  146 + //没有body 就写在尾部
  147 + $('*').last().after(tag);
  148 + }
120 149 console.log(k + ' js', '结束,下一个');
121 150 f();
122 151 });
... ... @@ -132,13 +161,13 @@ var get_keys = function (json) {
132 161 return array;
133 162 };
134 163  
135   -function md5(text){
  164 +function md5(text) {
136 165 return crypto.createHash("md5").update(text).digest("hex");
137 166 }
138 167  
139   -function write(file, text){
  168 +function write(file, text) {
140 169 fs.writeFile(file, text, function (err) {
141   - if (err){
  170 + if (err) {
142 171 console.log(err.toString().red);
143 172 process.exit();
144 173 }
... ... @@ -146,5 +175,4 @@ function write(file, text){
146 175 });
147 176 }
148 177  
149   -
150 178 module.exports = realCtl;
151 179 \ No newline at end of file
... ...
src/main/resources/fatso/start.js
... ... @@ -83,9 +83,12 @@ ep.tail(&#39;minifier-js&#39;, function(){
83 83 ep.emit('handle-fragment', item);
84 84 },
85 85 function(){
86   - //处理线调
  86 + //处理线调首页
87 87 handle_real_ctl.handleMain(function () {
88   - ep.emit('package-jar');
  88 + //处理线调地图
  89 + handle_real_ctl.handleMap(function () {
  90 + ep.emit('package-jar');
  91 + });
89 92 });
90 93 });
91 94 });
... ...
src/main/resources/static/pages/scheduleApp/module/core/busConfig/module.js
... ... @@ -126,8 +126,9 @@ angular.module(&#39;ScheduleApp&#39;).controller(
126 126  
127 127 // 导出excel
128 128 self.exportData = function() {
129   - if (busConfigService.dataExport()) {
130   - busConfigService.dataExport().then(
  129 + var p = busConfigService.dataExport();
  130 + if (p) {
  131 + p.then(
131 132 function(result) {
132 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 127  
128 128 // 导出excel
129 129 self.exportData = function() {
130   - if (service.dataExport()) {
131   - service.dataExport().then(
  130 + var p = service.dataExport();
  131 + if (p) {
  132 + p.then(
132 133 function(result) {
133 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 131  
132 132 // 导出excel
133 133 self.exportData = function() {
134   - if (service.dataExport()) {
135   - service.dataExport().then(
  134 + var p = service.dataExport();
  135 + if (p) {
  136 + p.then(
136 137 function(result) {
137 138 fileDownload.downloadFile(result.data, "application/octet-stream", "路牌信息.xls");
138 139 },
... ...
src/main/resources/static/real_control_v2/assets/plugins/jquery.ui/themes/base/accordion.css
1   -/*!
  1 +/*
2 2 * jQuery UI Accordion 1.11.1
3 3 * http://jqueryui.com
4 4 *
... ...
src/main/resources/static/real_control_v2/assets/plugins/jquery.ui/themes/base/all.css
1   -/*!
  1 +/*
2 2 * jQuery UI CSS Framework 1.11.1
3 3 * http://jqueryui.com
4 4 *
... ...
src/main/resources/static/real_control_v2/assets/plugins/jquery.ui/themes/base/autocomplete.css
1   -/*!
  1 +/*
2 2 * jQuery UI Autocomplete 1.11.1
3 3 * http://jqueryui.com
4 4 *
... ...
src/main/resources/static/real_control_v2/assets/plugins/jquery.ui/themes/base/base.css
1   -/*!
  1 +/*
2 2 * jQuery UI CSS Framework 1.11.1
3 3 * http://jqueryui.com
4 4 *
... ...
src/main/resources/static/real_control_v2/assets/plugins/jquery.ui/themes/base/button.css
1   -/*!
  1 +/*
2 2 * jQuery UI Button 1.11.1
3 3 * http://jqueryui.com
4 4 *
... ...
src/main/resources/static/real_control_v2/assets/plugins/jquery.ui/themes/base/core.css
1   -/*!
  1 +/*
2 2 * jQuery UI CSS Framework 1.11.1
3 3 * http://jqueryui.com
4 4 *
... ...
src/main/resources/static/real_control_v2/assets/plugins/jquery.ui/themes/base/datepicker.css
1   -/*!
  1 +/*
2 2 * jQuery UI Datepicker 1.11.1
3 3 * http://jqueryui.com
4 4 *
... ...
src/main/resources/static/real_control_v2/assets/plugins/jquery.ui/themes/base/dialog.css
1   -/*!
  1 +/*
2 2 * jQuery UI Dialog 1.11.1
3 3 * http://jqueryui.com
4 4 *
... ...
src/main/resources/static/real_control_v2/assets/plugins/jquery.ui/themes/base/draggable.css
1   -/*!
  1 +/*
2 2 * jQuery UI Draggable 1.11.1
3 3 * http://jqueryui.com
4 4 *
... ...
src/main/resources/static/real_control_v2/assets/plugins/jquery.ui/themes/base/menu.css
1   -/*!
  1 +/*
2 2 * jQuery UI Menu 1.11.1
3 3 * http://jqueryui.com
4 4 *
... ...
src/main/resources/static/real_control_v2/assets/plugins/jquery.ui/themes/base/progressbar.css
1   -/*!
  1 +/*
2 2 * jQuery UI Progressbar 1.11.1
3 3 * http://jqueryui.com
4 4 *
... ...
src/main/resources/static/real_control_v2/assets/plugins/jquery.ui/themes/base/resizable.css
1   -/*!
  1 +/*
2 2 * jQuery UI Resizable 1.11.1
3 3 * http://jqueryui.com
4 4 *
... ...
src/main/resources/static/real_control_v2/assets/plugins/jquery.ui/themes/base/selectable.css
1   -/*!
  1 +/*
2 2 * jQuery UI Selectable 1.11.1
3 3 * http://jqueryui.com
4 4 *
... ...
src/main/resources/static/real_control_v2/assets/plugins/jquery.ui/themes/base/selectmenu.css
1   -/*!
  1 +/*
2 2 * jQuery UI Selectmenu 1.11.1
3 3 * http://jqueryui.com
4 4 *
... ...
src/main/resources/static/real_control_v2/assets/plugins/jquery.ui/themes/base/slider.css
1   -/*!
  1 +/*
2 2 * jQuery UI Slider 1.11.1
3 3 * http://jqueryui.com
4 4 *
... ...
src/main/resources/static/real_control_v2/assets/plugins/jquery.ui/themes/base/sortable.css
1   -/*!
  1 +/*
2 2 * jQuery UI Sortable 1.11.1
3 3 * http://jqueryui.com
4 4 *
... ...
src/main/resources/static/real_control_v2/assets/plugins/jquery.ui/themes/base/spinner.css
1   -/*!
  1 +/*
2 2 * jQuery UI Spinner 1.11.1
3 3 * http://jqueryui.com
4 4 *
... ...
src/main/resources/static/real_control_v2/assets/plugins/jquery.ui/themes/base/tabs.css
1   -/*!
  1 +/*
2 2 * jQuery UI Tabs 1.11.1
3 3 * http://jqueryui.com
4 4 *
... ...
src/main/resources/static/real_control_v2/assets/plugins/jquery.ui/themes/base/theme.css
1   -/*!
  1 +/*
2 2 * jQuery UI CSS Framework 1.11.1
3 3 * http://jqueryui.com
4 4 *
... ... @@ -30,7 +30,7 @@
30 30 }
31 31 .ui-widget-content {
32 32 border: 1px solid #aaaaaa/*{borderColorContent}*/;
33   - background: #ffffff/*{bgColorContent}*/ url("images/ui-bg_flat_75_ffffff_40x100.png")/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/;
  33 + background: #ffffff/*{bgColorContent}*/ url("/real_control_v2/assets/plugins/jquery.ui/themes/base/images/ui-bg_flat_75_ffffff_40x100.png")/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/;
34 34 color: #222222/*{fcContent}*/;
35 35 }
36 36 .ui-widget-content a {
... ... @@ -38,7 +38,7 @@
38 38 }
39 39 .ui-widget-header {
40 40 border: 1px solid #aaaaaa/*{borderColorHeader}*/;
41   - background: #cccccc/*{bgColorHeader}*/ url("images/ui-bg_highlight-soft_75_cccccc_1x100.png")/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/;
  41 + background: #cccccc/*{bgColorHeader}*/ url("/real_control_v2/assets/plugins/jquery.ui/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png")/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/;
42 42 color: #222222/*{fcHeader}*/;
43 43 font-weight: bold;
44 44 }
... ... @@ -52,7 +52,7 @@
52 52 .ui-widget-content .ui-state-default,
53 53 .ui-widget-header .ui-state-default {
54 54 border: 1px solid #d3d3d3/*{borderColorDefault}*/;
55   - background: #e6e6e6/*{bgColorDefault}*/ url("images/ui-bg_glass_75_e6e6e6_1x400.png")/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/;
  55 + background: #e6e6e6/*{bgColorDefault}*/ url("/real_control_v2/assets/plugins/jquery.ui/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png")/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/;
56 56 font-weight: normal/*{fwDefault}*/;
57 57 color: #555555/*{fcDefault}*/;
58 58 }
... ... @@ -69,7 +69,7 @@
69 69 .ui-widget-content .ui-state-focus,
70 70 .ui-widget-header .ui-state-focus {
71 71 border: 1px solid #999999/*{borderColorHover}*/;
72   - background: #dadada/*{bgColorHover}*/ url("images/ui-bg_glass_75_dadada_1x400.png")/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/;
  72 + background: #dadada/*{bgColorHover}*/ url("/real_control_v2/assets/plugins/jquery.ui/themes/base/images/ui-bg_glass_75_dadada_1x400.png")/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/;
73 73 font-weight: normal/*{fwDefault}*/;
74 74 color: #212121/*{fcHover}*/;
75 75 }
... ... @@ -88,7 +88,7 @@
88 88 .ui-widget-content .ui-state-active,
89 89 .ui-widget-header .ui-state-active {
90 90 border: 1px solid #aaaaaa/*{borderColorActive}*/;
91   - background: #ffffff/*{bgColorActive}*/ url("images/ui-bg_glass_65_ffffff_1x400.png")/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/;
  91 + background: #ffffff/*{bgColorActive}*/ url("/real_control_v2/assets/plugins/jquery.ui/themes/base/images/ui-bg_glass_65_ffffff_1x400.png")/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/;
92 92 font-weight: normal/*{fwDefault}*/;
93 93 color: #212121/*{fcActive}*/;
94 94 }
... ... @@ -105,7 +105,7 @@
105 105 .ui-widget-content .ui-state-highlight,
106 106 .ui-widget-header .ui-state-highlight {
107 107 border: 1px solid #fcefa1/*{borderColorHighlight}*/;
108   - background: #fbf9ee/*{bgColorHighlight}*/ url("images/ui-bg_glass_55_fbf9ee_1x400.png")/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/;
  108 + background: #fbf9ee/*{bgColorHighlight}*/ url("/real_control_v2/assets/plugins/jquery.ui/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png")/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/;
109 109 color: #363636/*{fcHighlight}*/;
110 110 }
111 111 .ui-state-highlight a,
... ... @@ -117,7 +117,7 @@
117 117 .ui-widget-content .ui-state-error,
118 118 .ui-widget-header .ui-state-error {
119 119 border: 1px solid #cd0a0a/*{borderColorError}*/;
120   - background: #fef1ec/*{bgColorError}*/ url("images/ui-bg_glass_95_fef1ec_1x400.png")/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/;
  120 + background: #fef1ec/*{bgColorError}*/ url("/real_control_v2/assets/plugins/jquery.ui/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png")/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/;
121 121 color: #cd0a0a/*{fcError}*/;
122 122 }
123 123 .ui-state-error a,
... ... @@ -163,27 +163,27 @@
163 163 }
164 164 .ui-icon,
165 165 .ui-widget-content .ui-icon {
166   - background-image: url("images/ui-icons_222222_256x240.png")/*{iconsContent}*/;
  166 + background-image: url("/real_control_v2/assets/plugins/jquery.ui/themes/base/images/ui-icons_222222_256x240.png")/*{iconsContent}*/;
167 167 }
168 168 .ui-widget-header .ui-icon {
169   - background-image: url("images/ui-icons_222222_256x240.png")/*{iconsHeader}*/;
  169 + background-image: url("/real_control_v2/assets/plugins/jquery.ui/themes/base/images/ui-icons_222222_256x240.png")/*{iconsHeader}*/;
170 170 }
171 171 .ui-state-default .ui-icon {
172   - background-image: url("images/ui-icons_888888_256x240.png")/*{iconsDefault}*/;
  172 + background-image: url("/real_control_v2/assets/plugins/jquery.ui/themes/base/images/ui-icons_888888_256x240.png")/*{iconsDefault}*/;
173 173 }
174 174 .ui-state-hover .ui-icon,
175 175 .ui-state-focus .ui-icon {
176   - background-image: url("images/ui-icons_454545_256x240.png")/*{iconsHover}*/;
  176 + background-image: url("/real_control_v2/assets/plugins/jquery.ui/themes/base/images/ui-icons_454545_256x240.png")/*{iconsHover}*/;
177 177 }
178 178 .ui-state-active .ui-icon {
179   - background-image: url("images/ui-icons_454545_256x240.png")/*{iconsActive}*/;
  179 + background-image: url("/real_control_v2/assets/plugins/jquery.ui/themes/base/images/ui-icons_454545_256x240.png")/*{iconsActive}*/;
180 180 }
181 181 .ui-state-highlight .ui-icon {
182   - background-image: url("images/ui-icons_2e83ff_256x240.png")/*{iconsHighlight}*/;
  182 + background-image: url("/real_control_v2/assets/plugins/jquery.ui/themes/base/images/ui-icons_2e83ff_256x240.png")/*{iconsHighlight}*/;
183 183 }
184 184 .ui-state-error .ui-icon,
185 185 .ui-state-error-text .ui-icon {
186   - background-image: url("images/ui-icons_cd0a0a_256x240.png")/*{iconsError}*/;
  186 + background-image: url("/real_control_v2/assets/plugins/jquery.ui/themes/base/images/ui-icons_cd0a0a_256x240.png")/*{iconsError}*/;
187 187 }
188 188  
189 189 /* positioning */
... ... @@ -396,14 +396,14 @@
396 396  
397 397 /* Overlays */
398 398 .ui-widget-overlay {
399   - background: #aaaaaa/*{bgColorOverlay}*/ url("images/ui-bg_flat_0_aaaaaa_40x100.png")/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/;
  399 + background: #aaaaaa/*{bgColorOverlay}*/ url("/real_control_v2/assets/plugins/jquery.ui/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png")/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/;
400 400 opacity: .3/*{opacityOverlay}*/;
401 401 filter: Alpha(Opacity=30)/*{opacityFilterOverlay}*/; /* support: IE8 */
402 402 }
403 403 .ui-widget-shadow {
404 404 margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/;
405 405 padding: 8px/*{thicknessShadow}*/;
406   - background: #aaaaaa/*{bgColorShadow}*/ url("images/ui-bg_flat_0_aaaaaa_40x100.png")/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/;
  406 + background: #aaaaaa/*{bgColorShadow}*/ url("/real_control_v2/assets/plugins/jquery.ui/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png")/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/;
407 407 opacity: .3/*{opacityShadow}*/;
408 408 filter: Alpha(Opacity=30)/*{opacityFilterShadow}*/; /* support: IE8 */
409 409 border-radius: 8px/*{cornerRadiusShadow}*/;
... ...
src/main/resources/static/real_control_v2/assets/plugins/jquery.ui/themes/base/tooltip.css
1   -/*!
  1 +/*
2 2 * jQuery UI Tooltip 1.11.1
3 3 * http://jqueryui.com
4 4 *
... ...
src/main/resources/static/real_control_v2/assets/plugins/jstree/default/style.css
... ... @@ -400,7 +400,7 @@
400 400 }
401 401 .jstree-default .jstree-node,
402 402 .jstree-default .jstree-icon {
403   - background-image: url("32px.png");
  403 + background-image: url("/real_control_v2/assets/plugins/jstree/default/32px.png");
404 404 }
405 405 .jstree-default .jstree-node {
406 406 background-position: -292px -4px;
... ... @@ -505,13 +505,13 @@
505 505 background-position: 0 0;
506 506 }
507 507 .jstree-default > .jstree-container-ul .jstree-loading > .jstree-ocl {
508   - background: url("throbber.gif") center center no-repeat;
  508 + background: url("/real_control_v2/assets/plugins/jstree/default/throbber.gif") center center no-repeat;
509 509 }
510 510 .jstree-default .jstree-file {
511   - background: url("32px.png") -100px -68px no-repeat;
  511 + background: url("/real_control_v2/assets/plugins/jstree/default/32px.png") -100px -68px no-repeat;
512 512 }
513 513 .jstree-default .jstree-folder {
514   - background: url("32px.png") -260px -4px no-repeat;
  514 + background: url("/real_control_v2/assets/plugins/jstree/default/32px.png") -260px -4px no-repeat;
515 515 }
516 516 .jstree-default > .jstree-container-ul > .jstree-node {
517 517 margin-left: 0;
... ... @@ -523,7 +523,7 @@
523 523 }
524 524 #jstree-dnd.jstree-default .jstree-ok,
525 525 #jstree-dnd.jstree-default .jstree-er {
526   - background-image: url("32px.png");
  526 + background-image: url("/real_control_v2/assets/plugins/jstree/default/32px.png");
527 527 background-repeat: no-repeat;
528 528 background-color: transparent;
529 529 }
... ... @@ -573,7 +573,7 @@
573 573 }
574 574 .jstree-default-small .jstree-node,
575 575 .jstree-default-small .jstree-icon {
576   - background-image: url("32px.png");
  576 + background-image: url("/real_control_v2/assets/plugins/jstree/default/32px.png");
577 577 }
578 578 .jstree-default-small .jstree-node {
579 579 background-position: -295px -7px;
... ... @@ -678,13 +678,13 @@
678 678 background-position: 0 0;
679 679 }
680 680 .jstree-default-small > .jstree-container-ul .jstree-loading > .jstree-ocl {
681   - background: url("throbber.gif") center center no-repeat;
  681 + background: url("/real_control_v2/assets/plugins/jstree/default/throbber.gif") center center no-repeat;
682 682 }
683 683 .jstree-default-small .jstree-file {
684   - background: url("32px.png") -103px -71px no-repeat;
  684 + background: url("/real_control_v2/assets/plugins/jstree/default/32px.png") -103px -71px no-repeat;
685 685 }
686 686 .jstree-default-small .jstree-folder {
687   - background: url("32px.png") -263px -7px no-repeat;
  687 + background: url("/real_control_v2/assets/plugins/jstree/default/32px.png") -263px -7px no-repeat;
688 688 }
689 689 .jstree-default-small > .jstree-container-ul > .jstree-node {
690 690 margin-left: 0;
... ... @@ -696,7 +696,7 @@
696 696 }
697 697 #jstree-dnd.jstree-default-small .jstree-ok,
698 698 #jstree-dnd.jstree-default-small .jstree-er {
699   - background-image: url("32px.png");
  699 + background-image: url("/real_control_v2/assets/plugins/jstree/default/32px.png");
700 700 background-repeat: no-repeat;
701 701 background-color: transparent;
702 702 }
... ... @@ -746,7 +746,7 @@
746 746 }
747 747 .jstree-default-large .jstree-node,
748 748 .jstree-default-large .jstree-icon {
749   - background-image: url("32px.png");
  749 + background-image: url("/real_control_v2/assets/plugins/jstree/default/32px.png");
750 750 }
751 751 .jstree-default-large .jstree-node {
752 752 background-position: -288px 0px;
... ... @@ -851,13 +851,13 @@
851 851 background-position: 0 0;
852 852 }
853 853 .jstree-default-large > .jstree-container-ul .jstree-loading > .jstree-ocl {
854   - background: url("throbber.gif") center center no-repeat;
  854 + background: url("/real_control_v2/assets/plugins/jstree/default/throbber.gif") center center no-repeat;
855 855 }
856 856 .jstree-default-large .jstree-file {
857   - background: url("32px.png") -96px -64px no-repeat;
  857 + background: url("/real_control_v2/assets/plugins/jstree/default/32px.png") -96px -64px no-repeat;
858 858 }
859 859 .jstree-default-large .jstree-folder {
860   - background: url("32px.png") -256px 0px no-repeat;
  860 + background: url("/real_control_v2/assets/plugins/jstree/default/32px.png") -256px 0px no-repeat;
861 861 }
862 862 .jstree-default-large > .jstree-container-ul > .jstree-node {
863 863 margin-left: 0;
... ... @@ -869,7 +869,7 @@
869 869 }
870 870 #jstree-dnd.jstree-default-large .jstree-ok,
871 871 #jstree-dnd.jstree-default-large .jstree-er {
872   - background-image: url("32px.png");
  872 + background-image: url("/real_control_v2/assets/plugins/jstree/default/32px.png");
873 873 background-repeat: no-repeat;
874 874 background-color: transparent;
875 875 }
... ... @@ -904,12 +904,12 @@
904 904 height: 40px;
905 905 }
906 906 #jstree-dnd.jstree-dnd-responsive > .jstree-ok {
907   - background-image: url("40px.png");
  907 + background-image: url("/real_control_v2/assets/plugins/jstree/default/40px.png");
908 908 background-position: 0 -200px;
909 909 background-size: 120px 240px;
910 910 }
911 911 #jstree-dnd.jstree-dnd-responsive > .jstree-er {
912   - background-image: url("40px.png");
  912 + background-image: url("/real_control_v2/assets/plugins/jstree/default/40px.png");
913 913 background-position: -40px -200px;
914 914 background-size: 120px 240px;
915 915 }
... ... @@ -928,7 +928,7 @@
928 928 */
929 929 }
930 930 .jstree-default-responsive .jstree-icon {
931   - background-image: url("40px.png");
  931 + background-image: url("/real_control_v2/assets/plugins/jstree/default/40px.png");
932 932 }
933 933 .jstree-default-responsive .jstree-node,
934 934 .jstree-default-responsive .jstree-leaf > .jstree-ocl {
... ... @@ -1032,7 +1032,7 @@
1032 1032 .jstree-default-responsive .jstree-node > .jstree-ocl,
1033 1033 .jstree-default-responsive .jstree-themeicon,
1034 1034 .jstree-default-responsive .jstree-checkbox {
1035   - background-image: url("40px.png");
  1035 + background-image: url("/real_control_v2/assets/plugins/jstree/default/40px.png");
1036 1036 background-size: 120px 240px;
1037 1037 }
1038 1038 .jstree-default-responsive .jstree-node {
... ... @@ -1054,11 +1054,11 @@
1054 1054 background-position: 0 0;
1055 1055 }
1056 1056 .jstree-default-responsive .jstree-file {
1057   - background: url("40px.png") 0 -160px no-repeat;
  1057 + background: url("/real_control_v2/assets/plugins/jstree/default/40px.png") 0 -160px no-repeat;
1058 1058 background-size: 120px 240px;
1059 1059 }
1060 1060 .jstree-default-responsive .jstree-folder {
1061   - background: url("40px.png") -40px -40px no-repeat;
  1061 + background: url("/real_control_v2/assets/plugins/jstree/default/40px.png") -40px -40px no-repeat;
1062 1062 background-size: 120px 240px;
1063 1063 }
1064 1064 .jstree-default-responsive > .jstree-container-ul > .jstree-node {
... ...
src/main/resources/static/real_control_v2/assets/plugins/jstree/default/style.min.css deleted 100644 → 0
1   -.jstree-node,.jstree-children,.jstree-container-ul{display:block;margin:0;padding:0;list-style-type:none;list-style-image:none}.jstree-node{white-space:nowrap}.jstree-anchor{display:inline-block;color:#000;white-space:nowrap;padding:0 4px 0 1px;margin:0;vertical-align:top}.jstree-anchor:focus{outline:0}.jstree-anchor,.jstree-anchor:link,.jstree-anchor:visited,.jstree-anchor:hover,.jstree-anchor:active{text-decoration:none;color:inherit}.jstree-icon{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-icon:empty{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-ocl{cursor:pointer}.jstree-leaf>.jstree-ocl{cursor:default}.jstree .jstree-open>.jstree-children{display:block}.jstree .jstree-closed>.jstree-children,.jstree .jstree-leaf>.jstree-children{display:none}.jstree-anchor>.jstree-themeicon{margin-right:2px}.jstree-no-icons .jstree-themeicon,.jstree-anchor>.jstree-themeicon-hidden{display:none}.jstree-hidden,.jstree-node.jstree-hidden{display:none}.jstree-rtl .jstree-anchor{padding:0 1px 0 4px}.jstree-rtl .jstree-anchor>.jstree-themeicon{margin-left:2px;margin-right:0}.jstree-rtl .jstree-node{margin-left:0}.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-wholerow-ul{position:relative;display:inline-block;min-width:100%}.jstree-wholerow-ul .jstree-leaf>.jstree-ocl{cursor:pointer}.jstree-wholerow-ul .jstree-anchor,.jstree-wholerow-ul .jstree-icon{position:relative}.jstree-wholerow-ul .jstree-wholerow{width:100%;cursor:pointer;position:absolute;left:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vakata-context{display:none}.vakata-context,.vakata-context ul{margin:0;padding:2px;position:absolute;background:#f5f5f5;border:1px solid #979797;box-shadow:2px 2px 2px #999}.vakata-context ul{list-style:none;left:100%;margin-top:-2.7em;margin-left:-4px}.vakata-context .vakata-context-right ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context li{list-style:none}.vakata-context li>a{display:block;padding:0 2em;text-decoration:none;width:auto;color:#000;white-space:nowrap;line-height:2.4em;text-shadow:1px 1px 0 #fff;border-radius:1px}.vakata-context li>a:hover{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context li>a.vakata-context-parent{background-image:url(data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==);background-position:right center;background-repeat:no-repeat}.vakata-context li>a:focus{outline:0}.vakata-context .vakata-context-hover>a{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context .vakata-context-separator>a,.vakata-context .vakata-context-separator>a:hover{background:#fff;border:0;border-top:1px solid #e2e3e3;height:1px;min-height:1px;max-height:1px;padding:0;margin:0 0 0 2.4em;border-left:1px solid #e0e0e0;text-shadow:0 0 0 transparent;box-shadow:0 0 0 transparent;border-radius:0}.vakata-context .vakata-contextmenu-disabled a,.vakata-context .vakata-contextmenu-disabled a:hover{color:silver;background-color:transparent;border:0;box-shadow:0 0 0}.vakata-context li>a>i{text-decoration:none;display:inline-block;width:2.4em;height:2.4em;background:0 0;margin:0 0 0 -2em;vertical-align:top;text-align:center;line-height:2.4em}.vakata-context li>a>i:empty{width:2.4em;line-height:2.4em}.vakata-context li>a .vakata-contextmenu-sep{display:inline-block;width:1px;height:2.4em;background:#fff;margin:0 .5em 0 0;border-left:1px solid #e2e3e3}.vakata-context .vakata-contextmenu-shortcut{font-size:.8em;color:silver;opacity:.5;display:none}.vakata-context-rtl ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context-rtl li>a.vakata-context-parent{background-image:url(data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7);background-position:left center;background-repeat:no-repeat}.vakata-context-rtl .vakata-context-separator>a{margin:0 2.4em 0 0;border-left:0;border-right:1px solid #e2e3e3}.vakata-context-rtl .vakata-context-left ul{right:auto;left:100%;margin-left:-4px;margin-right:auto}.vakata-context-rtl li>a>i{margin:0 -2em 0 0}.vakata-context-rtl li>a .vakata-contextmenu-sep{margin:0 0 0 .5em;border-left-color:#fff;background:#e2e3e3}#jstree-marker{position:absolute;top:0;left:0;margin:-5px 0 0 0;padding:0;border-right:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid;width:0;height:0;font-size:0;line-height:0}#jstree-dnd{line-height:16px;margin:0;padding:4px}#jstree-dnd .jstree-icon,#jstree-dnd .jstree-copy{display:inline-block;text-decoration:none;margin:0 2px 0 0;padding:0;width:16px;height:16px}#jstree-dnd .jstree-ok{background:green}#jstree-dnd .jstree-er{background:red}#jstree-dnd .jstree-copy{margin:0 2px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-repeat:no-repeat;background-color:transparent}.jstree-default .jstree-anchor,.jstree-default .jstree-wholerow{transition:background-color .15s,box-shadow .15s}.jstree-default .jstree-hovered{background:#e7f4f9;border-radius:2px;box-shadow:inset 0 0 1px #ccc}.jstree-default .jstree-context{background:#e7f4f9;border-radius:2px;box-shadow:inset 0 0 1px #ccc}.jstree-default .jstree-clicked{background:#beebff;border-radius:2px;box-shadow:inset 0 0 1px #999}.jstree-default .jstree-no-icons .jstree-anchor>.jstree-themeicon{display:none}.jstree-default .jstree-disabled{background:0 0;color:#666}.jstree-default .jstree-disabled.jstree-hovered{background:0 0;box-shadow:none}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-disabled>.jstree-icon{opacity:.8;filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default .jstree-search{font-style:italic;color:#8b0000;font-weight:700}.jstree-default .jstree-no-checkboxes .jstree-checkbox{display:none!important}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked{background:0 0;box-shadow:none}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered{background:#e7f4f9}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked{background:0 0}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered{background:#e7f4f9}.jstree-default>.jstree-striped{min-width:100%;display:inline-block;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==) left top repeat}.jstree-default>.jstree-wholerow-ul .jstree-hovered,.jstree-default>.jstree-wholerow-ul .jstree-clicked{background:0 0;box-shadow:none;border-radius:0}.jstree-default .jstree-wholerow{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.jstree-default .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default .jstree-wholerow-clicked{background:#beebff;background:-webkit-linear-gradient(top,#beebff 0,#a8e4ff 100%);background:linear-gradient(to bottom,#beebff 0,#a8e4ff 100%)}.jstree-default .jstree-node{min-height:24px;line-height:24px;margin-left:24px;min-width:24px}.jstree-default .jstree-anchor{line-height:24px;height:24px}.jstree-default .jstree-icon{width:24px;height:24px;line-height:24px}.jstree-default .jstree-icon:empty{width:24px;height:24px;line-height:24px}.jstree-default.jstree-rtl .jstree-node{margin-right:24px}.jstree-default .jstree-wholerow{height:24px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-image:url(32px.png)}.jstree-default .jstree-node{background-position:-292px -4px;background-repeat:repeat-y}.jstree-default .jstree-last{background:0 0}.jstree-default .jstree-open>.jstree-ocl{background-position:-132px -4px}.jstree-default .jstree-closed>.jstree-ocl{background-position:-100px -4px}.jstree-default .jstree-leaf>.jstree-ocl{background-position:-68px -4px}.jstree-default .jstree-themeicon{background-position:-260px -4px}.jstree-default>.jstree-no-dots .jstree-node,.jstree-default>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -4px}.jstree-default>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -4px}.jstree-default .jstree-disabled{background:0 0}.jstree-default .jstree-disabled.jstree-hovered{background:0 0}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-checkbox{background-position:-164px -4px}.jstree-default .jstree-checkbox:hover{background-position:-164px -36px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default .jstree-checked>.jstree-checkbox{background-position:-228px -4px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default .jstree-checked>.jstree-checkbox:hover{background-position:-228px -36px}.jstree-default .jstree-anchor>.jstree-undetermined{background-position:-196px -4px}.jstree-default .jstree-anchor>.jstree-undetermined:hover{background-position:-196px -36px}.jstree-default .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default>.jstree-striped{background-size:auto 48px}.jstree-default.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default.jstree-rtl .jstree-last{background:0 0}.jstree-default.jstree-rtl .jstree-open>.jstree-ocl{background-position:-132px -36px}.jstree-default.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-100px -36px}.jstree-default.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-68px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -36px}.jstree-default .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default .jstree-file{background:url(32px.png) -100px -68px no-repeat}.jstree-default .jstree-folder{background:url(32px.png) -260px -4px no-repeat}.jstree-default>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default{line-height:24px;padding:0 4px}#jstree-dnd.jstree-default .jstree-ok,#jstree-dnd.jstree-default .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default i{background:0 0;width:24px;height:24px;line-height:24px}#jstree-dnd.jstree-default .jstree-ok{background-position:-4px -68px}#jstree-dnd.jstree-default .jstree-er{background-position:-36px -68px}.jstree-default.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==)}.jstree-default.jstree-rtl .jstree-last{background:0 0}.jstree-default-small .jstree-node{min-height:18px;line-height:18px;margin-left:18px;min-width:18px}.jstree-default-small .jstree-anchor{line-height:18px;height:18px}.jstree-default-small .jstree-icon{width:18px;height:18px;line-height:18px}.jstree-default-small .jstree-icon:empty{width:18px;height:18px;line-height:18px}.jstree-default-small.jstree-rtl .jstree-node{margin-right:18px}.jstree-default-small .jstree-wholerow{height:18px}.jstree-default-small .jstree-node,.jstree-default-small .jstree-icon{background-image:url(32px.png)}.jstree-default-small .jstree-node{background-position:-295px -7px;background-repeat:repeat-y}.jstree-default-small .jstree-last{background:0 0}.jstree-default-small .jstree-open>.jstree-ocl{background-position:-135px -7px}.jstree-default-small .jstree-closed>.jstree-ocl{background-position:-103px -7px}.jstree-default-small .jstree-leaf>.jstree-ocl{background-position:-71px -7px}.jstree-default-small .jstree-themeicon{background-position:-263px -7px}.jstree-default-small>.jstree-no-dots .jstree-node,.jstree-default-small>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-small>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -7px}.jstree-default-small>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -7px}.jstree-default-small .jstree-disabled{background:0 0}.jstree-default-small .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-small .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-small .jstree-checkbox{background-position:-167px -7px}.jstree-default-small .jstree-checkbox:hover{background-position:-167px -39px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-small .jstree-checked>.jstree-checkbox{background-position:-231px -7px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-small .jstree-checked>.jstree-checkbox:hover{background-position:-231px -39px}.jstree-default-small .jstree-anchor>.jstree-undetermined{background-position:-199px -7px}.jstree-default-small .jstree-anchor>.jstree-undetermined:hover{background-position:-199px -39px}.jstree-default-small .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-small>.jstree-striped{background-size:auto 36px}.jstree-default-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-small.jstree-rtl .jstree-open>.jstree-ocl{background-position:-135px -39px}.jstree-default-small.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-103px -39px}.jstree-default-small.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-71px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -39px}.jstree-default-small .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-small>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-small .jstree-file{background:url(32px.png) -103px -71px no-repeat}.jstree-default-small .jstree-folder{background:url(32px.png) -263px -7px no-repeat}.jstree-default-small>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-small{line-height:18px;padding:0 4px}#jstree-dnd.jstree-default-small .jstree-ok,#jstree-dnd.jstree-default-small .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-small i{background:0 0;width:18px;height:18px;line-height:18px}#jstree-dnd.jstree-default-small .jstree-ok{background-position:-7px -71px}#jstree-dnd.jstree-default-small .jstree-er{background-position:-39px -71px}.jstree-default-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==)}.jstree-default-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-large .jstree-node{min-height:32px;line-height:32px;margin-left:32px;min-width:32px}.jstree-default-large .jstree-anchor{line-height:32px;height:32px}.jstree-default-large .jstree-icon{width:32px;height:32px;line-height:32px}.jstree-default-large .jstree-icon:empty{width:32px;height:32px;line-height:32px}.jstree-default-large.jstree-rtl .jstree-node{margin-right:32px}.jstree-default-large .jstree-wholerow{height:32px}.jstree-default-large .jstree-node,.jstree-default-large .jstree-icon{background-image:url(32px.png)}.jstree-default-large .jstree-node{background-position:-288px 0;background-repeat:repeat-y}.jstree-default-large .jstree-last{background:0 0}.jstree-default-large .jstree-open>.jstree-ocl{background-position:-128px 0}.jstree-default-large .jstree-closed>.jstree-ocl{background-position:-96px 0}.jstree-default-large .jstree-leaf>.jstree-ocl{background-position:-64px 0}.jstree-default-large .jstree-themeicon{background-position:-256px 0}.jstree-default-large>.jstree-no-dots .jstree-node,.jstree-default-large>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-large>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px 0}.jstree-default-large>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 0}.jstree-default-large .jstree-disabled{background:0 0}.jstree-default-large .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-large .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-large .jstree-checkbox{background-position:-160px 0}.jstree-default-large .jstree-checkbox:hover{background-position:-160px -32px}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-large .jstree-checked>.jstree-checkbox{background-position:-224px 0}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-large .jstree-checked>.jstree-checkbox:hover{background-position:-224px -32px}.jstree-default-large .jstree-anchor>.jstree-undetermined{background-position:-192px 0}.jstree-default-large .jstree-anchor>.jstree-undetermined:hover{background-position:-192px -32px}.jstree-default-large .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-large>.jstree-striped{background-size:auto 64px}.jstree-default-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-large.jstree-rtl .jstree-last{background:0 0}.jstree-default-large.jstree-rtl .jstree-open>.jstree-ocl{background-position:-128px -32px}.jstree-default-large.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-96px -32px}.jstree-default-large.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-64px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 -32px}.jstree-default-large .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-large>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-large .jstree-file{background:url(32px.png) -96px -64px no-repeat}.jstree-default-large .jstree-folder{background:url(32px.png) -256px 0 no-repeat}.jstree-default-large>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-large{line-height:32px;padding:0 4px}#jstree-dnd.jstree-default-large .jstree-ok,#jstree-dnd.jstree-default-large .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-large i{background:0 0;width:32px;height:32px;line-height:32px}#jstree-dnd.jstree-default-large .jstree-ok{background-position:0 -64px}#jstree-dnd.jstree-default-large .jstree-er{background-position:-32px -64px}.jstree-default-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==)}.jstree-default-large.jstree-rtl .jstree-last{background:0 0}@media (max-width:768px){#jstree-dnd.jstree-dnd-responsive{line-height:40px;font-weight:700;font-size:1.1em;text-shadow:1px 1px #fff}#jstree-dnd.jstree-dnd-responsive>i{background:0 0;width:40px;height:40px}#jstree-dnd.jstree-dnd-responsive>.jstree-ok{background-image:url(40px.png);background-position:0 -200px;background-size:120px 240px}#jstree-dnd.jstree-dnd-responsive>.jstree-er{background-image:url(40px.png);background-position:-40px -200px;background-size:120px 240px}#jstree-marker.jstree-dnd-responsive{border-left-width:10px;border-top-width:10px;border-bottom-width:10px;margin-top:-10px}}@media (max-width:768px){.jstree-default-responsive .jstree-icon{background-image:url(40px.png)}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-responsive .jstree-node{min-height:40px;line-height:40px;margin-left:40px;min-width:40px;white-space:nowrap}.jstree-default-responsive .jstree-anchor{line-height:40px;height:40px}.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-icon:empty{width:40px;height:40px;line-height:40px}.jstree-default-responsive>.jstree-container-ul>.jstree-node{margin-left:0}.jstree-default-responsive.jstree-rtl .jstree-node{margin-left:0;margin-right:40px;background:0 0}.jstree-default-responsive.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-default-responsive .jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-size:120px 240px}.jstree-default-responsive .jstree-leaf>.jstree-ocl,.jstree-default-responsive.jstree-rtl .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-responsive .jstree-open>.jstree-ocl{background-position:0 0!important}.jstree-default-responsive .jstree-closed>.jstree-ocl{background-position:0 -40px!important}.jstree-default-responsive.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-40px 0!important}.jstree-default-responsive .jstree-themeicon{background-position:-40px -40px}.jstree-default-responsive .jstree-checkbox,.jstree-default-responsive .jstree-checkbox:hover{background-position:-40px -80px}.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-responsive .jstree-checked>.jstree-checkbox,.jstree-default-responsive .jstree-checked>.jstree-checkbox:hover{background-position:0 -80px}.jstree-default-responsive .jstree-anchor>.jstree-undetermined,.jstree-default-responsive .jstree-anchor>.jstree-undetermined:hover{background-position:0 -120px}.jstree-default-responsive .jstree-anchor{font-weight:700;font-size:1.1em;text-shadow:1px 1px #fff}.jstree-default-responsive>.jstree-striped{background:0 0}.jstree-default-responsive .jstree-wholerow{border-top:1px solid rgba(255,255,255,.7);border-bottom:1px solid rgba(64,64,64,.2);background:#ebebeb;height:40px}.jstree-default-responsive .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default-responsive .jstree-wholerow-clicked{background:#beebff}.jstree-default-responsive .jstree-children .jstree-last>.jstree-wholerow{box-shadow:inset 0 -6px 3px -5px #666}.jstree-default-responsive .jstree-children .jstree-open>.jstree-wholerow{box-shadow:inset 0 6px 3px -5px #666;border-top:0}.jstree-default-responsive .jstree-children .jstree-open+.jstree-open{box-shadow:none}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-node>.jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-image:url(40px.png);background-size:120px 240px}.jstree-default-responsive .jstree-node{background-position:-80px 0;background-repeat:repeat-y}.jstree-default-responsive .jstree-last{background:0 0}.jstree-default-responsive .jstree-leaf>.jstree-ocl{background-position:-40px -120px}.jstree-default-responsive .jstree-last>.jstree-ocl{background-position:-40px -160px}.jstree-default-responsive .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-responsive .jstree-file{background:url(40px.png) 0 -160px no-repeat;background-size:120px 240px}.jstree-default-responsive .jstree-folder{background:url(40px.png) -40px -40px no-repeat;background-size:120px 240px}.jstree-default-responsive>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}}
2 0 \ No newline at end of file
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/accordion.gradient.min.css
1   -/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
  1 +/* UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2 2 .uk-accordion-title{margin-top:0;margin-bottom:15px;padding:5px 15px;background:#f7f7f7;font-size:18px;line-height:24px;cursor:pointer;border:1px solid #ddd;border-radius:4px}.uk-accordion-content{padding:0 15px 15px 15px}.uk-accordion-content:after,.uk-accordion-content:before{content:"";display:table}.uk-accordion-content:after{clear:both}.uk-accordion-content>:last-child{margin-bottom:0}
3 3 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/accordion.min.js
1   -/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
  1 +/* UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2 2 !function(t){var i;window.UIkit&&(i=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-accordion",["uikit"],function(){return i||t(UIkit)})}(function(t){"use strict";function i(i){var e=t.$(i),o="auto";if(e.is(":visible"))o=e.outerHeight();else{var a={position:e.css("position"),visibility:e.css("visibility"),display:e.css("display")};o=e.css({position:"absolute",visibility:"hidden",display:"block"}).outerHeight(),e.css(a)}return o}return t.component("accordion",{defaults:{showfirst:!0,collapse:!0,animate:!0,easing:"swing",duration:300,toggle:".uk-accordion-title",containers:".uk-accordion-content",clsactive:"uk-active"},boot:function(){t.ready(function(i){setTimeout(function(){t.$("[data-uk-accordion]",i).each(function(){var i=t.$(this);i.data("accordion")||t.accordion(i,t.Utils.options(i.attr("data-uk-accordion")))})},0)})},init:function(){var i=this;this.element.on("click.uk.accordion",this.options.toggle,function(e){e.preventDefault(),i.toggleItem(t.$(this).data("wrapper"),i.options.animate,i.options.collapse)}),this.update(!0),t.domObserve(this.element,function(){i.element.children(i.options.containers).length&&i.update()})},toggleItem:function(e,o,a){var n=this;e.data("toggle").toggleClass(this.options.clsactive),e.data("content").toggleClass(this.options.clsactive);var s=e.data("toggle").hasClass(this.options.clsactive);a&&(this.toggle.not(e.data("toggle")).removeClass(this.options.clsactive),this.content.not(e.data("content")).removeClass(this.options.clsactive).parent().stop().css("overflow","hidden").animate({height:0},{easing:this.options.easing,duration:o?this.options.duration:0}).attr("aria-expanded","false")),e.stop().css("overflow","hidden"),o?e.animate({height:s?i(e.data("content")):0},{easing:this.options.easing,duration:this.options.duration,complete:function(){s&&(e.css({overflow:"",height:"auto"}),t.Utils.checkDisplay(e.data("content"))),n.trigger("display.uk.check")}}):(e.height(s?"auto":0),s&&(e.css({overflow:""}),t.Utils.checkDisplay(e.data("content"))),this.trigger("display.uk.check")),e.attr("aria-expanded",s),this.element.trigger("toggle.uk.accordion",[s,e.data("toggle"),e.data("content")])},update:function(i){var e,o,a,n=this;this.toggle=this.find(this.options.toggle),this.content=this.find(this.options.containers),this.content.each(function(i){e=t.$(this),e.parent().data("wrapper")?o=e.parent():(o=t.$(this).wrap('<div data-wrapper="true" style="overflow:hidden;height:0;position:relative;"></div>').parent(),o.attr("aria-expanded","false")),a=n.toggle.eq(i),o.data("toggle",a),o.data("content",e),a.data("wrapper",o),e.data("wrapper",o)}),this.element.trigger("update.uk.accordion",[this]),i&&this.options.showfirst&&this.toggleItem(this.toggle.eq(0).data("wrapper"),!1,!1)}}),t.accordion});
3 3 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.gradient.min.css
1   -/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
  1 +/* UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2 2 .uk-autocomplete{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-dropdown-flip{left:auto;right:0}.uk-nav-autocomplete>li>a{color:#444}.uk-nav-autocomplete>li.uk-active>a{background:#009dd8;color:#fff;outline:0;box-shadow:inset 0 2px 4px rgba(0,0,0,.2);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-nav-autocomplete .uk-nav-header{color:#999}.uk-nav-autocomplete .uk-nav-divider{border-top:1px solid #ddd}
3 3 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.min.js
1   -/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
  1 +/* UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2 2 !function(t){var e;window.UIkit&&(e=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-autocomplete",["uikit"],function(){return e||t(UIkit)})}(function(t){"use strict";var e;return t.component("autocomplete",{defaults:{minLength:3,param:"search",method:"post",delay:300,loadingClass:"uk-loading",flipDropdown:!1,skipClass:"uk-skip",hoverClass:"uk-active",source:null,renderer:null,template:'<ul class="uk-nav uk-nav-autocomplete uk-autocomplete-results">{{~items}}<li data-value="{{$item.value}}"><a>{{$item.value}}</a></li>{{/items}}</ul>'},visible:!1,value:null,selected:null,boot:function(){t.$html.on("focus.autocomplete.uikit","[data-uk-autocomplete]",function(){var e=t.$(this);e.data("autocomplete")||t.autocomplete(e,t.Utils.options(e.attr("data-uk-autocomplete")))}),t.$html.on("click.autocomplete.uikit",function(t){e&&t.target!=e.input[0]&&e.hide()})},init:function(){var e=this,i=!1,s=t.Utils.debounce(function(){return i?i=!1:(e.handle(),void 0)},this.options.delay);this.dropdown=this.find(".uk-dropdown"),this.template=this.find('script[type="text/autocomplete"]').html(),this.template=t.Utils.template(this.template||this.options.template),this.input=this.find("input:first").attr("autocomplete","off"),this.dropdown.length||(this.dropdown=t.$('<div class="uk-dropdown"></div>').appendTo(this.element)),this.options.flipDropdown&&this.dropdown.addClass("uk-dropdown-flip"),this.dropdown.attr("aria-expanded","false"),this.input.on({keydown:function(t){if(t&&t.which&&!t.shiftKey&&e.visible)switch(t.which){case 13:i=!0,e.selected&&(t.preventDefault(),e.select());break;case 38:t.preventDefault(),e.pick("prev",!0);break;case 40:t.preventDefault(),e.pick("next",!0);break;case 27:case 9:e.hide()}},keyup:s}),this.dropdown.on("click",".uk-autocomplete-results > *",function(){e.select()}),this.dropdown.on("mouseover",".uk-autocomplete-results > *",function(){e.pick(t.$(this))}),this.triggercomplete=s},handle:function(){var t=this,e=this.value;return this.value=this.input.val(),this.value.length<this.options.minLength?this.hide():(this.value!=e&&t.request(),this)},pick:function(e,i){var s=this,o=t.$(this.dropdown.find(".uk-autocomplete-results").children(":not(."+this.options.skipClass+")")),n=!1;if("string"==typeof e||e.hasClass(this.options.skipClass)){if("next"==e||"prev"==e){if(this.selected){var a=o.index(this.selected);n="next"==e?o.eq(a+1<o.length?a+1:0):o.eq(0>a-1?o.length-1:a-1)}else n=o["next"==e?"first":"last"]();n=t.$(n)}}else n=e;if(n&&n.length&&(this.selected=n,o.removeClass(this.options.hoverClass),this.selected.addClass(this.options.hoverClass),i)){var l=n.position().top,h=s.dropdown.scrollTop(),r=s.dropdown.height();(l>r||0>l)&&s.dropdown.scrollTop(h+l)}},select:function(){if(this.selected){var t=this.selected.data();this.trigger("selectitem.uk.autocomplete",[t,this]),t.value&&this.input.val(t.value).trigger("change"),this.hide()}},show:function(){return this.visible?void 0:(this.visible=!0,this.element.addClass("uk-open"),e&&e!==this&&e.hide(),e=this,this.dropdown.attr("aria-expanded","true"),this)},hide:function(){return this.visible?(this.visible=!1,this.element.removeClass("uk-open"),e===this&&(e=!1),this.dropdown.attr("aria-expanded","false"),this):void 0},request:function(){var e=this,i=function(t){t&&e.render(t),e.element.removeClass(e.options.loadingClass)};if(this.element.addClass(this.options.loadingClass),this.options.source){var s=this.options.source;switch(typeof this.options.source){case"function":this.options.source.apply(this,[i]);break;case"object":if(s.length){var o=[];s.forEach(function(t){t.value&&-1!=t.value.toLowerCase().indexOf(e.value.toLowerCase())&&o.push(t)}),i(o)}break;case"string":var n={};n[this.options.param]=this.value,t.$.ajax({url:this.options.source,data:n,type:this.options.method,dataType:"json"}).done(function(t){i(t||[])});break;default:i(null)}}else this.element.removeClass(e.options.loadingClass)},render:function(t){return this.dropdown.empty(),this.selected=!1,this.options.renderer?this.options.renderer.apply(this,[t]):t&&t.length&&(this.dropdown.append(this.template({items:t})),this.show(),this.trigger("show.uk.autocomplete")),this}}),t.autocomplete});
3 3 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/form-advanced.gradient.min.css
1   -/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
  1 +/* UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2 2 .uk-form input[type=radio],.uk-form input[type=checkbox]{display:inline-block;height:14px;width:14px;border:1px solid #aaa;overflow:hidden;margin-top:-4px;vertical-align:middle;-webkit-appearance:none;outline:0;background:0 0}.uk-form input[type=radio]{border-radius:50%}.uk-form input[type=checkbox]:before,.uk-form input[type=radio]:before{display:block}.uk-form input[type=radio]:checked:before{content:'';width:8px;height:8px;margin:2px auto 0;border-radius:50%;background:#00a8e6}.uk-form input[type=checkbox]:checked:before,.uk-form input[type=checkbox]:indeterminate:before{content:"\f00c";font-family:FontAwesome;font-size:12px;-webkit-font-smoothing:antialiased;text-align:center;line-height:12px;color:#00a8e6}.uk-form input[type=checkbox]:indeterminate:before{content:"\f068"}.uk-form input[type=checkbox]:disabled,.uk-form input[type=radio]:disabled{border-color:#ddd}.uk-form input[type=radio]:disabled:checked:before{background-color:#aaa}.uk-form input[type=checkbox]:disabled:checked:before,.uk-form input[type=checkbox]:disabled:indeterminate:before{color:#aaa}
3 3 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/lightbox.min.js
1   -/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
  1 +/* UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2 2 !function(i){var t;window.UIkit&&(t=i(UIkit)),"function"==typeof define&&define.amd&&define("uikit-lightbox",["uikit"],function(){return t||i(UIkit)})}(function(i){"use strict";function t(t){if(e)return e.lightbox=t,e;e=i.$(['<div class="uk-modal">','<div class="uk-modal-dialog uk-modal-dialog-lightbox uk-slidenav-position" style="margin-left:auto;margin-right:auto;width:200px;height:200px;top:'+Math.abs(window.innerHeight/2-200)+'px;">','<a href="#" class="uk-modal-close uk-close uk-close-alt"></a>','<div class="uk-lightbox-content"></div>','<div class="uk-modal-spinner uk-hidden"></div>',"</div>","</div>"].join("")).appendTo("body"),e.dialog=e.find(".uk-modal-dialog:first"),e.content=e.find(".uk-lightbox-content:first"),e.loader=e.find(".uk-modal-spinner:first"),e.closer=e.find(".uk-close.uk-close-alt"),e.modal=i.modal(e,{modal:!1}),e.on("swipeRight swipeLeft",function(i){e.lightbox["swipeLeft"==i.type?"next":"previous"]()}).on("click","[data-lightbox-previous], [data-lightbox-next]",function(t){t.preventDefault(),e.lightbox[i.$(this).is("[data-lightbox-next]")?"next":"previous"]()}),e.on("hide.uk.modal",function(){e.content.html("")});var o={w:window.innerWidth,h:window.innerHeight};return i.$win.on("load resize orientationchange",i.Utils.debounce(function(){o.w!==window.innerWidth&&e.is(":visible")&&!i.Utils.isFullscreen()&&e.lightbox.fitSize(),o={w:window.innerWidth,h:window.innerHeight}},100)),e.lightbox=t,e}var e,o={};return i.component("lightbox",{defaults:{allowfullscreen:!0,duration:400,group:!1,keyboard:!0},index:0,items:!1,boot:function(){i.$html.on("click","[data-uk-lightbox]",function(t){t.preventDefault();var e=i.$(this);e.data("lightbox")||i.lightbox(e,i.Utils.options(e.attr("data-uk-lightbox"))),e.data("lightbox").show(e)}),i.$doc.on("keyup",function(i){if(e&&e.is(":visible")&&e.lightbox.options.keyboard)switch(i.preventDefault(),i.keyCode){case 37:e.lightbox.previous();break;case 39:e.lightbox.next()}})},init:function(){var t=[];if(this.index=0,this.siblings=[],this.element&&this.element.length){var e=this.options.group?i.$(['[data-uk-lightbox*="'+this.options.group+'"]',"[data-uk-lightbox*='"+this.options.group+"']"].join(",")):this.element;e.each(function(){var e=i.$(this);t.push({source:e.attr("href"),title:e.attr("data-title")||e.attr("title"),type:e.attr("data-lightbox-type")||"auto",link:e})}),this.index=e.index(this.element),this.siblings=t}else this.options.group&&this.options.group.length&&(this.siblings=this.options.group);this.trigger("lightbox-init",[this])},show:function(e){this.modal=t(this),this.modal.dialog.stop(),this.modal.content.stop();var o,n,s=this,h=i.$.Deferred();e=e||0,"object"==typeof e&&this.siblings.forEach(function(i,t){e[0]===i.link[0]&&(e=t)}),0>e?e=this.siblings.length-e:this.siblings[e]||(e=0),n=this.siblings[e],o={lightbox:s,source:n.source,type:n.type,index:e,promise:h,title:n.title,item:n,meta:{content:"",width:null,height:null}},this.index=e,this.modal.content.empty(),this.modal.is(":visible")||(this.modal.content.css({width:"",height:""}).empty(),this.modal.modal.show()),this.modal.loader.removeClass("uk-hidden"),h.promise().done(function(){s.data=o,s.fitSize(o)}).fail(function(){o.meta.content='<div class="uk-position-cover uk-flex uk-flex-middle uk-flex-center"><strong>Loading resource failed!</strong></div>',o.meta.width=400,o.meta.height=300,s.data=o,s.fitSize(o)}),s.trigger("showitem.uk.lightbox",[o])},fitSize:function(){var t=this,e=this.data,o=this.modal.dialog.outerWidth()-this.modal.dialog.width(),n=parseInt(this.modal.dialog.css("margin-top"),10),s=parseInt(this.modal.dialog.css("margin-bottom"),10),h=n+s,a=e.meta.content,l=t.options.duration;this.siblings.length>1&&(a=[a,'<a href="#" class="uk-slidenav uk-slidenav-contrast uk-slidenav-previous uk-hidden-touch" data-lightbox-previous></a>','<a href="#" class="uk-slidenav uk-slidenav-contrast uk-slidenav-next uk-hidden-touch" data-lightbox-next></a>'].join(""));var d,r,u=i.$("<div>&nbsp;</div>").css({opacity:0,position:"absolute",top:0,left:0,width:"100%","max-width":t.modal.dialog.css("max-width"),padding:t.modal.dialog.css("padding"),margin:t.modal.dialog.css("margin")}),c=e.meta.width,g=e.meta.height;u.appendTo("body").width(),d=u.width(),r=window.innerHeight-h,u.remove(),this.modal.dialog.find(".uk-modal-caption").remove(),e.title&&(this.modal.dialog.append('<div class="uk-modal-caption">'+e.title+"</div>"),r-=this.modal.dialog.find(".uk-modal-caption").outerHeight()),d<e.meta.width&&(g=Math.floor(g*(d/c)),c=d),g>r&&(g=Math.floor(r),c=Math.ceil(e.meta.width*(r/e.meta.height))),this.modal.content.css("opacity",0).width(c).html(a),"iframe"==e.type&&this.modal.content.find("iframe:first").height(g);var m=g+o,p=Math.floor(window.innerHeight/2-m/2)-h;0>p&&(p=0),this.modal.closer.addClass("uk-hidden"),t.modal.data("mwidth")==c&&t.modal.data("mheight")==g&&(l=0),this.modal.dialog.animate({width:c+o,height:g+o,top:p},l,"swing",function(){t.modal.loader.addClass("uk-hidden"),t.modal.content.css({width:""}).animate({opacity:1},function(){t.modal.closer.removeClass("uk-hidden")}),t.modal.data({mwidth:c,mheight:g})})},next:function(){this.show(this.siblings[this.index+1]?this.index+1:0)},previous:function(){this.show(this.siblings[this.index-1]?this.index-1:this.siblings.length-1)}}),i.plugin("lightbox","image",{init:function(i){i.on("showitem.uk.lightbox",function(i,t){if("image"==t.type||t.source&&t.source.match(/\.(jpg|jpeg|png|gif|svg)$/i)){var e=function(i,e,o){t.meta={content:'<img class="uk-responsive-width" width="'+e+'" height="'+o+'" src ="'+i+'">',width:e,height:o},t.type="image",t.promise.resolve()};if(o[t.source])e(t.source,o[t.source].width,o[t.source].height);else{var n=new Image;n.onerror=function(){t.promise.reject("Loading image failed")},n.onload=function(){o[t.source]={width:n.width,height:n.height},e(t.source,o[t.source].width,o[t.source].height)},n.src=t.source}}})}}),i.plugin("lightbox","youtube",{init:function(i){var t=/(\/\/.*?youtube\.[a-z]+)\/watch\?v=([^&]+)&?(.*)/,n=/youtu\.be\/(.*)/;i.on("showitem.uk.lightbox",function(i,s){var h,a,l=function(i,t,o){s.meta={content:'<iframe src="//www.youtube.com/embed/'+i+'" width="'+t+'" height="'+o+'" style="max-width:100%;"'+(e.lightbox.options.allowfullscreen?" allowfullscreen":"")+"></iframe>",width:t,height:o},s.type="iframe",s.promise.resolve()};if((a=s.source.match(t))&&(h=a[2]),(a=s.source.match(n))&&(h=a[1]),h){if(o[h])l(h,o[h].width,o[h].height);else{var d=new Image,r=!1;d.onerror=function(){o[h]={width:640,height:320},l(h,o[h].width,o[h].height)},d.onload=function(){120==d.width&&90==d.height?r?(o[h]={width:640,height:320},l(h,o[h].width,o[h].height)):(r=!0,d.src="//img.youtube.com/vi/"+h+"/0.jpg"):(o[h]={width:d.width,height:d.height},l(h,d.width,d.height))},d.src="//img.youtube.com/vi/"+h+"/maxresdefault.jpg"}i.stopImmediatePropagation()}})}}),i.plugin("lightbox","vimeo",{init:function(t){var n,s=/(\/\/.*?)vimeo\.[a-z]+\/([0-9]+).*?/;t.on("showitem.uk.lightbox",function(t,h){var a,l=function(i,t,o){h.meta={content:'<iframe src="//player.vimeo.com/video/'+i+'" width="'+t+'" height="'+o+'" style="width:100%;box-sizing:border-box;"'+(e.lightbox.options.allowfullscreen?" allowfullscreen":"")+"></iframe>",width:t,height:o},h.type="iframe",h.promise.resolve()};(n=h.source.match(s))&&(a=n[2],o[a]?l(a,o[a].width,o[a].height):i.$.ajax({type:"GET",url:"//vimeo.com/api/oembed.json?url="+encodeURI(h.source),jsonp:"callback",dataType:"jsonp",success:function(i){o[a]={width:i.width,height:i.height},l(a,o[a].width,o[a].height)}}),t.stopImmediatePropagation())})}}),i.plugin("lightbox","video",{init:function(t){t.on("showitem.uk.lightbox",function(t,e){var n=function(i,t,o){e.meta={content:'<video class="uk-responsive-width" src="'+i+'" width="'+t+'" height="'+o+'" controls></video>',width:t,height:o},e.type="video",e.promise.resolve()};if("video"==e.type||e.source.match(/\.(mp4|webm|ogv)$/i))if(o[e.source])n(e.source,o[e.source].width,o[e.source].height);else var s=i.$('<video style="position:fixed;visibility:hidden;top:-10000px;"></video>').attr("src",e.source).appendTo("body"),h=setInterval(function(){s[0].videoWidth&&(clearInterval(h),o[e.source]={width:s[0].videoWidth,height:s[0].videoHeight},n(e.source,o[e.source].width,o[e.source].height),s.remove())},20)})}}),UIkit.plugin("lightbox","iframe",{init:function(i){i.on("showitem.uk.lightbox",function(t,o){var n=function(i,t,n){o.meta={content:'<iframe class="uk-responsive-width" src="'+i+'" width="'+t+'" height="'+n+'"'+(e.lightbox.options.allowfullscreen?" allowfullscreen":"")+"></iframe>",width:t,height:n},o.type="iframe",o.promise.resolve()};("iframe"===o.type||o.source.match(/\.(html|php)$/))&&n(o.source,i.options.width||800,i.options.height||600)})}}),i.lightbox.create=function(t,e){if(t){var o,n=[];return t.forEach(function(t){n.push(i.$.extend({source:"",title:"",type:"auto",link:!1},"string"==typeof t?{source:t}:t))}),o=i.lightbox(i.$.extend({},e,{group:n}))}},i.lightbox});
3 3 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/notify.gradient.min.css
1   -/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
  1 +/* UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2 2 .uk-notify{position:fixed;top:10px;left:10px;z-index:1040;box-sizing:border-box;width:350px}.uk-notify-bottom-right,.uk-notify-top-right{left:auto;right:10px}.uk-notify-bottom-center,.uk-notify-top-center{left:50%;margin-left:-175px}.uk-notify-bottom-center,.uk-notify-bottom-left,.uk-notify-bottom-right{top:auto;bottom:10px}@media (max-width:479px){.uk-notify{left:10px;right:10px;width:auto;margin:0}}.uk-notify-message{position:relative;margin-bottom:10px;padding:15px;background:#444;color:#fff;font-size:16px;line-height:22px;cursor:pointer;border:1px solid #444;border-radius:4px}.uk-notify-message>.uk-close{visibility:hidden;float:right}.uk-notify-message:hover>.uk-close{visibility:visible}.uk-notify-message-primary{background:#ebf7fd;color:#2d7091;border-color:rgba(45,112,145,.3)}.uk-notify-message-success{background:#f2fae3;color:#659f13;border-color:rgba(101,159,19,.3)}.uk-notify-message-warning{background:#fffceb;color:#e28327;border-color:rgba(226,131,39,.3)}.uk-notify-message-danger{background:#fff1f0;color:#d85030;border-color:rgba(216,80,48,.3)}
3 3 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/notify.min.js
1   -/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
  1 +/* UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2 2 !function(t){var e;window.UIkit&&(e=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-notify",["uikit"],function(){return e||t(UIkit)})}(function(t){"use strict";var e={},i={},s=function(e){return"string"==t.$.type(e)&&(e={message:e}),arguments[1]&&(e=t.$.extend(e,"string"==t.$.type(arguments[1])?{status:arguments[1]}:arguments[1])),new n(e).show()},o=function(t,e){var s;if(t)for(s in i)t===i[s].group&&i[s].close(e);else for(s in i)i[s].close(e)},n=function(s){this.options=t.$.extend({},n.defaults,s),this.uuid=t.Utils.uid("notifymsg"),this.element=t.$(['<div class="uk-notify-message">','<a class="uk-close"></a>',"<div></div>","</div>"].join("")).data("notifyMessage",this),this.content(this.options.message),this.options.status&&(this.element.addClass("uk-notify-message-"+this.options.status),this.currentstatus=this.options.status),this.group=this.options.group,i[this.uuid]=this,e[this.options.pos]||(e[this.options.pos]=t.$('<div class="uk-notify uk-notify-'+this.options.pos+'"></div>').appendTo("body").on("click",".uk-notify-message",function(){var e=t.$(this).data("notifyMessage");e.element.trigger("manualclose.uk.notify",[e]),e.close()}))};return t.$.extend(n.prototype,{uuid:!1,element:!1,timout:!1,currentstatus:"",group:!1,show:function(){if(!this.element.is(":visible")){var t=this;e[this.options.pos].show().prepend(this.element);var i=parseInt(this.element.css("margin-bottom"),10);return this.element.css({opacity:0,"margin-top":-1*this.element.outerHeight(),"margin-bottom":0}).animate({opacity:1,"margin-top":0,"margin-bottom":i},function(){if(t.options.timeout){var e=function(){t.close()};t.timeout=setTimeout(e,t.options.timeout),t.element.hover(function(){clearTimeout(t.timeout)},function(){t.timeout=setTimeout(e,t.options.timeout)})}}),this}},close:function(t){var s=this,o=function(){s.element.remove(),e[s.options.pos].children().length||e[s.options.pos].hide(),s.options.onClose.apply(s,[]),s.element.trigger("close.uk.notify",[s]),delete i[s.uuid]};this.timeout&&clearTimeout(this.timeout),t?o():this.element.animate({opacity:0,"margin-top":-1*this.element.outerHeight(),"margin-bottom":0},function(){o()})},content:function(t){var e=this.element.find(">div");return t?(e.html(t),this):e.html()},status:function(t){return t?(this.element.removeClass("uk-notify-message-"+this.currentstatus).addClass("uk-notify-message-"+t),this.currentstatus=t,this):this.currentstatus}}),n.defaults={message:"",status:"",timeout:5e3,group:null,pos:"top-center",onClose:function(){}},t.notify=s,t.notify.message=n,t.notify.closeAll=o,s});
3 3 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/pagination.min.js
1   -/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
  1 +/* UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2 2 !function(t){var e;window.UIkit&&(e=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-pagination",["uikit"],function(){return e||t(UIkit)})}(function(t){"use strict";return t.component("pagination",{defaults:{items:1,itemsOnPage:1,pages:0,displayedPages:7,edges:1,currentPage:0,lblPrev:!1,lblNext:!1,onSelectPage:function(){}},boot:function(){t.ready(function(e){t.$("[data-uk-pagination]",e).each(function(){var e=t.$(this);e.data("pagination")||t.pagination(e,t.Utils.options(e.attr("data-uk-pagination")))})})},init:function(){var e=this;this.pages=this.options.pages?this.options.pages:Math.ceil(this.options.items/this.options.itemsOnPage)?Math.ceil(this.options.items/this.options.itemsOnPage):1,this.currentPage=this.options.currentPage,this.halfDisplayed=this.options.displayedPages/2,this.on("click","a[data-page]",function(i){i.preventDefault(),e.selectPage(t.$(this).data("page"))}),this._render()},_getInterval:function(){return{start:Math.ceil(this.currentPage>this.halfDisplayed?Math.max(Math.min(this.currentPage-this.halfDisplayed,this.pages-this.options.displayedPages),0):0),end:Math.ceil(this.currentPage>this.halfDisplayed?Math.min(this.currentPage+this.halfDisplayed,this.pages):Math.min(this.options.displayedPages,this.pages))}},render:function(t){this.pages=t?t:this.pages,this._render()},selectPage:function(t,e){this.currentPage=t,this.render(e),this.options.onSelectPage.apply(this,[t]),this.trigger("select.uk.pagination",[t,this])},_render:function(){var t,e=this.options,i=this._getInterval();if(this.element.empty(),e.lblPrev&&this._append(this.currentPage-1,{text:e.lblPrev}),i.start>0&&e.edges>0){var s=Math.min(e.edges,i.start);for(t=0;s>t;t++)this._append(t);e.edges<i.start&&i.start-e.edges!=1?this.element.append("<li><span>...</span></li>"):i.start-e.edges==1&&this._append(e.edges)}for(t=i.start;t<i.end;t++)this._append(t);if(i.end<this.pages&&e.edges>0){this.pages-e.edges>i.end&&this.pages-e.edges-i.end!=1?this.element.append("<li><span>...</span></li>"):this.pages-e.edges-i.end==1&&this._append(i.end++);var a=Math.max(this.pages-e.edges,i.end);for(t=a;t<this.pages;t++)this._append(t)}e.lblNext&&this._append(this.currentPage+1,{text:e.lblNext})},_append:function(e,i){var s,a;e=0>e?0:e<this.pages?e:this.pages-1,a=t.$.extend({text:e+1},i),s=e==this.currentPage?'<li class="uk-active"><span>'+a.text+"</span></li>":'<li><a href="#page-'+(e+1)+'" data-page="'+e+'">'+a.text+"</a></li>",this.element.append(s)}}),t.pagination});
3 3 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/progress.gradient.min.css
1   -/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
  1 +/* UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2 2 .uk-progress{box-sizing:border-box;height:20px;margin-bottom:15px;background:#f7f7f7;overflow:hidden;line-height:20px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.07),inset 0 2px 2px rgba(0,0,0,.07);border-radius:4px}*+.uk-progress{margin-top:15px}.uk-progress-bar{width:0;height:100%;background:#009dd8;float:left;-webkit-transition:width .6s ease;transition:width .6s ease;font-size:12px;color:#fff;text-align:center;background-image:-webkit-linear-gradient(top,#00b4f5,#008dc5);background-image:linear-gradient(to bottom,#00b4f5,#008dc5);box-shadow:inset 0 -1px 0 rgba(0,0,0,.2),inset 0 0 0 1px rgba(0,0,0,.1);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-progress-mini{height:6px}.uk-progress-small{height:12px}.uk-progress-success .uk-progress-bar{background-color:#82bb42;background-image:-webkit-linear-gradient(top,#9fd256,#6fac34);background-image:linear-gradient(to bottom,#9fd256,#6fac34)}.uk-progress-warning .uk-progress-bar{background-color:#f9a124;background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406)}.uk-progress-danger .uk-progress-bar{background-color:#d32c46;background-image:-webkit-linear-gradient(top,#ee465a,#c11a39);background-image:linear-gradient(to bottom,#ee465a,#c11a39)}.uk-progress-striped .uk-progress-bar{background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:30px 30px}.uk-progress-striped.uk-active .uk-progress-bar{-webkit-animation:uk-progress-bar-stripes 2s linear infinite;animation:uk-progress-bar-stripes 2s linear infinite}@-webkit-keyframes uk-progress-bar-stripes{0%{background-position:0 0}100%{background-position:30px 0}}@keyframes uk-progress-bar-stripes{0%{background-position:0 0}100%{background-position:30px 0}}.uk-progress-mini,.uk-progress-small{border-radius:500px}
3 3 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/slidenav.gradient.min.css
1   -/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
  1 +/* UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2 2 .uk-slidenav{display:inline-block;box-sizing:border-box;width:60px;height:60px;line-height:60px;color:rgba(50,50,50,.4);font-size:60px;text-align:center}.uk-slidenav:focus,.uk-slidenav:hover{outline:0;text-decoration:none;color:rgba(50,50,50,.7);cursor:pointer}.uk-slidenav:active{color:rgba(50,50,50,.9)}.uk-slidenav-previous:before{content:"\f104";font-family:FontAwesome}.uk-slidenav-next:before{content:"\f105";font-family:FontAwesome}.uk-slidenav-position{position:relative}.uk-slidenav-position .uk-slidenav{display:none;position:absolute;top:50%;z-index:1;margin-top:-30px}.uk-slidenav-position:hover .uk-slidenav{display:block}.uk-slidenav-position .uk-slidenav-previous{left:20px}.uk-slidenav-position .uk-slidenav-next{right:20px}.uk-slidenav-contrast{color:rgba(255,255,255,.5)}.uk-slidenav-contrast:focus,.uk-slidenav-contrast:hover{color:rgba(255,255,255,.7)}.uk-slidenav-contrast:active{color:rgba(255,255,255,.9)}
3 3 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/slider.gradient.min.css
1   -/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
  1 +/* UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2 2 [data-uk-slider]{direction:ltr}html[dir=rtl] .uk-slider>*{direction:rtl}.uk-slider{position:relative;z-index:0;touch-action:pan-y}.uk-slider:not(.uk-grid){margin:0;padding:0;list-style:none}.uk-slider>*{position:absolute;top:0;left:0}.uk-slider-container{overflow:hidden}.uk-slider:not(.uk-drag){-webkit-transition:-webkit-transform .2s linear;transition:transform .2s linear}.uk-slider.uk-drag{cursor:col-resize;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.uk-slider a,.uk-slider img{-webkit-user-drag:none;user-drag:none;-webkit-touch-callout:none}.uk-slider img{pointer-events:none}.uk-slider-fullscreen,.uk-slider-fullscreen>li{height:100vh}
3 3 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/slider.min.js
1   -/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
  1 +/* UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2 2 !function(t){var e;window.UIkit&&(e=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-slider",["uikit"],function(){return e||t(UIkit)})}(function(t){"use strict";var e,i,s,n,a={};return t.component("slider",{defaults:{center:!1,threshold:10,infinite:!0,autoplay:!1,autoplayInterval:7e3,pauseOnHover:!0,activecls:"uk-active"},boot:function(){t.ready(function(e){setTimeout(function(){t.$("[data-uk-slider]",e).each(function(){var e=t.$(this);e.data("slider")||t.slider(e,t.Utils.options(e.attr("data-uk-slider")))})},0)})},init:function(){var o=this;this.container=this.element.find(".uk-slider"),this.focus=0,t.$win.on("resize load",t.Utils.debounce(function(){o.update(!0)},100)),this.on("click.uk.slider","[data-uk-slider-item]",function(e){e.preventDefault();var i=t.$(this).attr("data-uk-slider-item");if(o.focus!=i)switch(o.stop(),i){case"next":case"previous":o["next"==i?"next":"previous"]();break;default:o.updateFocus(parseInt(i,10))}}),this.container.on({"touchstart mousedown":function(h){h.originalEvent&&h.originalEvent.touches&&(h=h.originalEvent.touches[0]),h.button&&2==h.button||!o.active||(o.stop(),s=t.$(h.target).is("a")?t.$(h.target):t.$(h.target).parents("a:first"),n=!1,s.length&&s.one("click",function(t){n&&t.preventDefault()}),i=function(t){n=!0,e=o,a={touchx:parseInt(t.pageX,10),dir:1,focus:o.focus,base:o.options.center?"center":"area"},t.originalEvent&&t.originalEvent.touches&&(t=t.originalEvent.touches[0]),e.element.data({"pointer-start":{x:parseInt(t.pageX,10),y:parseInt(t.pageY,10)},"pointer-pos-start":o.pos}),o.container.addClass("uk-drag"),i=!1},i.x=parseInt(h.pageX,10),i.threshold=o.options.threshold)},mouseenter:function(){o.options.pauseOnHover&&(o.hovering=!0)},mouseleave:function(){o.hovering=!1}}),this.update(!0),this.on("display.uk.check",function(){o.element.is(":visible")&&o.update(!0)}),this.element.find("a,img").attr("draggable","false"),this.options.autoplay&&this.start(),t.domObserve(this.element,function(){o.element.children(":not([data-slide])").length&&o.update(!0)})},update:function(e){var i,s,n,a,o=this,h=0,r=0;return this.items=this.container.children().filter(":visible"),this.vp=this.element[0].getBoundingClientRect().width,this.container.css({"min-width":"","min-height":""}),this.items.each(function(e){i=t.$(this).attr("data-slide",e),a=i.css({left:"",width:""})[0].getBoundingClientRect(),s=a.width,n=i.width(),r=Math.max(r,a.height),i.css({left:h,width:s}).data({idx:e,left:h,width:s,cwidth:n,area:h+s,center:h-(o.vp/2-n/2)}),h+=s}),this.container.css({"min-width":h,"min-height":r}),this.options.infinite&&(h<=2*this.vp||this.items.length<5)&&!this.itemsResized?(this.container.children().each(function(t){o.container.append(o.items.eq(t).clone(!0).attr("id",""))}).each(function(t){o.container.append(o.items.eq(t).clone(!0).attr("id",""))}),this.itemsResized=!0,this.update()):(this.cw=h,this.pos=0,this.active=h>=this.vp,this.container.css({"-ms-transform":"","-webkit-transform":"",transform:""}),e&&this.updateFocus(this.focus),void 0)},updatePos:function(t){this.pos=t,this.container.css({"-ms-transform":"translateX("+t+"px)","-webkit-transform":"translateX("+t+"px)",transform:"translateX("+t+"px)"})},updateFocus:function(e,i){if(this.active){i=i||(e>this.focus?1:-1);var s,n,a=this.items.eq(e);if(this.options.infinite&&this.infinite(e,i),this.options.center)this.updatePos(-1*a.data("center")),this.items.filter("."+this.options.activecls).removeClass(this.options.activecls),a.addClass(this.options.activecls);else if(this.options.infinite)this.updatePos(-1*a.data("left"));else{for(s=0,n=e;n<this.items.length;n++)s+=this.items.eq(n).data("width");if(s>this.vp)this.updatePos(-1*a.data("left"));else if(1==i){for(s=0,n=this.items.length-1;n>=0;n--){if(s+=this.items.eq(n).data("width"),s==this.vp){e=n;break}if(s>this.vp){e=n<this.items.length-1?n+1:n;break}}s>this.vp?this.updatePos(-1*(this.container.width()-this.vp)):this.updatePos(-1*this.items.eq(e).data("left"))}}var o=this.items.eq(e).data("left");this.items.removeClass("uk-slide-before uk-slide-after").each(function(i){i!==e&&t.$(this).addClass(t.$(this).data("left")<o?"uk-slide-before":"uk-slide-after")}),this.focus=e,this.trigger("focusitem.uk.slider",[e,this.items.eq(e),this])}},next:function(){var t=this.items[this.focus+1]?this.focus+1:this.options.infinite?0:this.focus;this.updateFocus(t,1)},previous:function(){var t=this.items[this.focus-1]?this.focus-1:this.options.infinite?this.items[this.focus-1]?this.items-1:this.items.length-1:this.focus;this.updateFocus(t,-1)},start:function(){this.stop();var t=this;this.interval=setInterval(function(){t.hovering||t.next()},this.options.autoplayInterval)},stop:function(){this.interval&&clearInterval(this.interval)},infinite:function(t,e){var i,s=this,n=this.items.eq(t),a=t,o=[],h=0;if(1==e){for(i=0;i<this.items.length&&(a!=t&&(h+=this.items.eq(a).data("width"),o.push(this.items.eq(a))),!(h>this.vp));i++)a=a+1==this.items.length?0:a+1;o.length&&o.forEach(function(t){var e=n.data("area");t.css({left:e}).data({left:e,area:e+t.data("width"),center:e-(s.vp/2-t.data("cwidth")/2)}),n=t})}else{for(i=this.items.length-1;i>-1&&(h+=this.items.eq(a).data("width"),a!=t&&o.push(this.items.eq(a)),!(h>this.vp));i--)a=a-1==-1?this.items.length-1:a-1;o.length&&o.forEach(function(t){var e=n.data("left")-t.data("width");t.css({left:e}).data({left:e,area:e+t.data("width"),center:e-(s.vp/2-t.data("cwidth")/2)}),n=t})}}}),t.$doc.on("mousemove.uk.slider touchmove.uk.slider",function(t){if(t.originalEvent&&t.originalEvent.touches&&(t=t.originalEvent.touches[0]),i&&Math.abs(t.pageX-i.x)>i.threshold&&(window.getSelection().toString()?e=i=!1:i(t)),e){var s,n,o,h,r,c,d,u,f,l;if(t.clientX||t.clientY?s=t.clientX:(t.pageX||t.pageY)&&(s=t.pageX-document.body.scrollLeft-document.documentElement.scrollLeft),r=a.focus,n=s-e.element.data("pointer-start").x,o=e.element.data("pointer-pos-start")+n,h=s>e.element.data("pointer-start").x?-1:1,c=e.items.eq(a.focus),1==h)for(d=c.data("left")+Math.abs(n),u=0,f=a.focus;u<e.items.length;u++){if(l=e.items.eq(f),f!=a.focus&&l.data("left")<d&&l.data("area")>d){r=f;break}f=f+1==e.items.length?0:f+1}else for(d=c.data("left")-Math.abs(n),u=0,f=a.focus;u<e.items.length;u++){if(l=e.items.eq(f),f!=a.focus&&l.data("area")<=c.data("left")&&l.data("center")<d){r=f;break}f=f-1==-1?e.items.length-1:f-1}e.options.infinite&&r!=a._focus&&e.infinite(r,h),e.updatePos(o),a.dir=h,a._focus=r,a.touchx=parseInt(t.pageX,10),a.diff=d}}),t.$doc.on("mouseup.uk.slider touchend.uk.slider",function(){if(e){e.container.removeClass("uk-drag"),e.items.eq(a.focus);var t,s,n,o=!1;if(1==a.dir){for(s=0,n=a.focus;s<e.items.length;s++){if(t=e.items.eq(n),n!=a.focus&&t.data("left")>a.diff){o=n;break}n=n+1==e.items.length?0:n+1}e.options.infinite||o||(o=e.items.length)}else{for(s=0,n=a.focus;s<e.items.length;s++){if(t=e.items.eq(n),n!=a.focus&&t.data("left")<a.diff){o=n;break}n=n-1==-1?e.items.length-1:n-1}e.options.infinite||o||(o=0)}e.updateFocus(o!==!1?o:a._focus)}e=i=!1}),t.slider});
3 3 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/sortable.gradient.min.css
1   -/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
  1 +/* UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2 2 .uk-sortable{position:relative}.uk-sortable>*{touch-action:none}.uk-sortable a,.uk-sortable img{-webkit-touch-callout:none}.uk-sortable>:last-child{margin-bottom:0}.uk-sortable-dragged{position:absolute;z-index:1050;pointer-events:none}.uk-sortable-placeholder{opacity:0}.uk-sortable-empty{min-height:30px}.uk-sortable-handle{touch-action:none}.uk-sortable-handle:hover{cursor:move}.uk-sortable-moving,.uk-sortable-moving *{cursor:move}.uk-sortable-moving iframe{pointer-events:none}
3 3 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/sortable.min.js
1   -/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
  1 +/* UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2 2 !function(t){var e;window.UIkit&&(e=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-sortable",["uikit"],function(){return e||t(UIkit)})}(function(t){"use strict";function e(e){e=t.$(e);do{if(e.data("sortable"))return e;e=t.$(e).parent()}while(e.length);return e}function o(t,e){var o=t.parentNode;if(e.parentNode!=o)return!1;for(var n=t.previousSibling;n&&9!==n.nodeType;){if(n===e)return!0;n=n.previousSibling}return!1}function n(t,e){var o=e;if(o==t)return null;for(;o;){if(o.parentNode===t)return o;if(o=o.parentNode,!o||!o.ownerDocument||11===o.nodeType)break}return null}function s(t){t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),t.returnValue=!1}var a,r,i,l,d,h,u,p,c,g,f,m="ontouchstart"in window||"MSGesture"in window||window.DocumentTouch&&document instanceof DocumentTouch,v=m?"MSGesture"in window?"pointerdown":"touchstart":"mousedown",b=m?"MSGesture"in window?"pointermove":"touchmove":"mousemove",C=m?"MSGesture"in window?"pointerup":"touchend":"mouseup";return t.component("sortable",{defaults:{animation:150,threshold:10,childClass:"uk-sortable-item",placeholderClass:"uk-sortable-placeholder",overClass:"uk-sortable-over",draggingClass:"uk-sortable-dragged",dragMovingClass:"uk-sortable-moving",baseClass:"uk-sortable",noDragClass:"uk-sortable-nodrag",emptyClass:"uk-sortable-empty",dragCustomClass:"",handleClass:!1,group:!1,stop:function(){},start:function(){},change:function(){}},boot:function(){t.ready(function(e){t.$("[data-uk-sortable]",e).each(function(){var e=t.$(this);e.data("sortable")||t.sortable(e,t.Utils.options(e.attr("data-uk-sortable")))})}),t.$html.on(b,function(e){if(u){var o=e.originalEvent.targetTouches?e.originalEvent.targetTouches[0]:e;(Math.abs(o.pageX-u.pos.x)>u.threshold||Math.abs(o.pageY-u.pos.y)>u.threshold)&&u.apply(o)}if(a){d||(d=!0,a.show(),a.$current.addClass(a.$sortable.options.placeholderClass),a.$sortable.element.children().addClass(a.$sortable.options.childClass),t.$html.addClass(a.$sortable.options.dragMovingClass));var n=a.data("mouse-offset"),s=e.originalEvent.touches&&e.originalEvent.touches[0]||e.originalEvent,r=parseInt(s.pageX,10)+n.left,i=parseInt(s.pageY,10)+n.top;if(a.css({left:r,top:i}),i+a.height()/3>document.body.offsetHeight)return;i<t.$win.scrollTop()?t.$win.scrollTop(t.$win.scrollTop()-Math.ceil(a.height()/3)):i+a.height()/3>window.innerHeight+t.$win.scrollTop()&&t.$win.scrollTop(t.$win.scrollTop()+Math.ceil(a.height()/3))}}),t.$html.on(C,function(t){if(u=h=!1,!r||!a)return r=a=null,void 0;var o=e(r),n=a.$sortable,s={type:t.type};o[0]&&n.dragDrop(s,n.element),n.dragEnd(s,n.element)})},init:function(){function e(){m&&f.touches&&f.touches.length?h.addEventListener(b,y,!1):(h.addEventListener("mouseover",$,!1),h.addEventListener("mouseout",w,!1))}function o(){m&&f.touches&&f.touches.length?h.removeEventListener(b,y,!1):(h.removeEventListener("mouseover",$,!1),h.removeEventListener("mouseout",w,!1))}function a(t){r&&d.dragMove(t,d)}function l(e){return function(o){var s,a,r;f=o,o&&(s=o.touches&&o.touches[0]||o,a=s.target||o.target,m&&document.elementFromPoint&&(a=document.elementFromPoint(s.pageX-document.body.scrollLeft,s.pageY-document.body.scrollTop)),g=t.$(a)),t.$(a).hasClass("."+d.options.childClass)?e.apply(a,[o]):a!==h&&(r=n(h,a),r&&e.apply(r,[o]))}}var d=this,h=this.element[0];p=[],this.checkEmptyList(),this.element.data("sortable-group",this.options.group?this.options.group:t.Utils.uid("sortable-group"));var u=l(function(e){if(!e.data||!e.data.sortable){var o=t.$(e.target),n=o.is("a[href]")?o:o.parents("a[href]");if(!o.is(":input")){if(d.options.handleClass){var s=o.hasClass(d.options.handleClass)?o:o.closest("."+d.options.handleClass,d.element);if(!s.length)return}return e.preventDefault(),n.length&&n.one("click",function(t){t.preventDefault()}).one(C,function(){c||(n.trigger("click"),m&&n.attr("href").trim()&&(location.href=n.attr("href")))}),e.data=e.data||{},e.data.sortable=h,d.dragStart(e,this)}}}),$=l(t.Utils.debounce(function(t){return d.dragEnter(t,this)}),40),w=l(function(){var e=d.dragenterData(this);d.dragenterData(this,e-1),d.dragenterData(this)||(t.$(this).removeClass(d.options.overClass),d.dragenterData(this,!1))}),y=l(function(t){return r&&r!==this&&i!==this?(d.element.children().removeClass(d.options.overClass),i=this,d.moveElementNextTo(r,this),s(t)):!0});this.addDragHandlers=e,this.removeDragHandlers=o,window.addEventListener(b,a,!1),h.addEventListener(v,u,!1)},dragStart:function(e,o){c=!1,d=!1,l=!1;var n=this,s=t.$(e.target);if(!(!m&&2==e.button||s.is("."+n.options.noDragClass)||s.closest("."+n.options.noDragClass).length||s.is(":input"))){r=o,a&&a.remove();var i=t.$(r),h=i.offset(),p=e.touches&&e.touches[0]||e;u={pos:{x:p.pageX,y:p.pageY},threshold:n.options.handleClass?1:n.options.threshold,apply:function(){a=t.$('<div class="'+[n.options.draggingClass,n.options.dragCustomClass].join(" ")+'"></div>').css({display:"none",top:h.top,left:h.left,width:i.width(),height:i.height(),padding:i.css("padding")}).data({"mouse-offset":{left:h.left-parseInt(p.pageX,10),top:h.top-parseInt(p.pageY,10)},origin:n.element,index:i.index()}).append(i.html()).appendTo("body"),a.$current=i,a.$sortable=n,i.data({"start-list":i.parent(),"start-index":i.index(),"sortable-group":n.options.group}),n.addDragHandlers(),n.options.start(this,r),n.trigger("start.uk.sortable",[n,r,a]),c=!0,u=!1}}}},dragMove:function(e){g=t.$(document.elementFromPoint(e.pageX-(document.body.scrollLeft||document.scrollLeft||0),e.pageY-(document.body.scrollTop||document.documentElement.scrollTop||0)));var o,n=g.closest("."+this.options.baseClass),s=n.data("sortable-group"),a=t.$(r),i=a.parent(),l=a.data("sortable-group");n[0]!==i[0]&&void 0!==l&&s===l&&(n.data("sortable").addDragHandlers(),p.push(n),n.children().addClass(this.options.childClass),n.children().length>0?(o=g.closest("."+this.options.childClass),o.length?o.before(a):n.append(a)):g.append(a),UIkit.$doc.trigger("mouseover")),this.checkEmptyList(),this.checkEmptyList(i)},dragEnter:function(e,o){if(!r||r===o)return!0;var n=this.dragenterData(o);if(this.dragenterData(o,n+1),0===n){var s=t.$(o).parent(),a=t.$(r).data("start-list");if(s[0]!==a[0]){var i=s.data("sortable-group"),l=t.$(r).data("sortable-group");if((i||l)&&i!=l)return!1}t.$(o).addClass(this.options.overClass),this.moveElementNextTo(r,o)}return!1},dragEnd:function(e,o){var n=this;r&&(this.options.stop(o),this.trigger("stop.uk.sortable",[this])),r=null,i=null,p.push(this.element),p.forEach(function(e){t.$(e).children().each(function(){1===this.nodeType&&(t.$(this).removeClass(n.options.overClass).removeClass(n.options.placeholderClass).removeClass(n.options.childClass),n.dragenterData(this,!1))})}),p=[],t.$html.removeClass(this.options.dragMovingClass),this.removeDragHandlers(),a&&(a.remove(),a=null)},dragDrop:function(t){"drop"===t.type&&(t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault()),this.triggerChangeEvents()},triggerChangeEvents:function(){if(r){var e=t.$(r),o=a.data("origin"),n=e.closest("."+this.options.baseClass),s=[],i=t.$(r);o[0]===n[0]&&a.data("index")!=e.index()?s.push({sortable:this,mode:"moved"}):o[0]!=n[0]&&s.push({sortable:t.$(n).data("sortable"),mode:"added"},{sortable:t.$(o).data("sortable"),mode:"removed"}),s.forEach(function(t){t.sortable&&t.sortable.element.trigger("change.uk.sortable",[t.sortable,i,t.mode])})}},dragenterData:function(e,o){return e=t.$(e),1==arguments.length?parseInt(e.data("child-dragenter"),10)||0:(o?e.data("child-dragenter",Math.max(0,o)):e.removeData("child-dragenter"),void 0)},moveElementNextTo:function(e,n){l=!0;var s=this,a=t.$(e).parent().css("min-height",""),r=o(e,n)?n:n.nextSibling,i=a.children(),d=i.length;return s.options.animation?(a.css("min-height",a.height()),i.stop().each(function(){var e=t.$(this),o=e.position();o.width=e.width(),e.data("offset-before",o)}),n.parentNode.insertBefore(e,r),t.Utils.checkDisplay(s.element.parent()),i=a.children().each(function(){var e=t.$(this);e.data("offset-after",e.position())}).each(function(){var e=t.$(this),o=e.data("offset-before");e.css({position:"absolute",top:o.top,left:o.left,"min-width":o.width})}),i.each(function(){var e=t.$(this),o=(e.data("offset-before"),e.data("offset-after"));e.css("pointer-events","none").width(),setTimeout(function(){e.animate({top:o.top,left:o.left},s.options.animation,function(){e.css({position:"",top:"",left:"","min-width":"","pointer-events":""}).removeClass(s.options.overClass).removeData("child-dragenter"),d--,d||(a.css("min-height",""),t.Utils.checkDisplay(s.element.parent()))})},0)}),void 0):(n.parentNode.insertBefore(e,r),t.Utils.checkDisplay(s.element.parent()),void 0)},serialize:function(){var e,o,n=[];return this.element.children().each(function(s,a){e={};for(var r,i,l=0;l<a.attributes.length;l++)o=a.attributes[l],0===o.name.indexOf("data-")&&(r=o.name.substr(5),i=t.Utils.str2json(o.value),e[r]=i||"false"==o.value||"0"==o.value?i:o.value);n.push(e)}),n},checkEmptyList:function(e){e=e?t.$(e):this.element,this.options.emptyClass&&e[e.children().length?"removeClass":"addClass"](this.options.emptyClass)}}),t.sortable});
3 3 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/timepicker.min.js
1   -/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
  1 +/* UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2 2 !function(t){var e;window.UIkit&&(e=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-timepicker",["uikit"],function(){return e||t(UIkit)})}(function(t){"use strict";function e(t,e){t=t||0,e=e||24;var i,o,a={"12h":[],"24h":[]};for(i=t,o="";e>i;i++)o=""+i,10>i&&(o="0"+o),a["24h"].push({value:o+":00"}),a["24h"].push({value:o+":30"}),0===i&&(o=12,a["12h"].push({value:o+":00 AM"}),a["12h"].push({value:o+":30 AM"})),i>0&&13>i&&12!==i&&(a["12h"].push({value:o+":00 AM"}),a["12h"].push({value:o+":30 AM"})),i>=12&&(o-=12,0===o&&(o=12),10>o&&(o="0"+String(o)),a["12h"].push({value:o+":00 PM"}),a["12h"].push({value:o+":30 PM"}));return a}t.component("timepicker",{defaults:{format:"24h",delay:0,start:0,end:24},boot:function(){t.$html.on("focus.timepicker.uikit","[data-uk-timepicker]",function(){var e=t.$(this);if(!e.data("timepicker")){var i=t.timepicker(e,t.Utils.options(e.attr("data-uk-timepicker")));setTimeout(function(){i.autocomplete.input.focus()},40)}})},init:function(){var i,o=this,a=e(this.options.start,this.options.end);this.options.minLength=0,this.options.template='<ul class="uk-nav uk-nav-autocomplete uk-autocomplete-results">{{~items}}<li data-value="{{$item.value}}"><a>{{$item.value}}</a></li>{{/items}}</ul>',this.options.source=function(t){t(a[o.options.format]||a["12h"])},this.element.is("input")?(this.element.wrap('<div class="uk-autocomplete"></div>'),i=this.element.parent()):i=this.element.addClass("uk-autocomplete"),this.autocomplete=t.autocomplete(i,this.options),this.autocomplete.dropdown.addClass("uk-dropdown-small uk-dropdown-scrollable"),this.autocomplete.on("show.uk.autocomplete",function(){var t=o.autocomplete.dropdown.find('[data-value="'+o.autocomplete.input.val()+'"]');setTimeout(function(){o.autocomplete.pick(t,!0)},10)}),this.autocomplete.input.on("focus",function(){o.autocomplete.value=Math.random(),o.autocomplete.triggercomplete()}).on("blur",t.Utils.debounce(function(){o.checkTime()},100)),this.element.data("timepicker",this)},checkTime:function(){var t,e,i,o,a="AM",u=this.autocomplete.input.val();"12h"==this.options.format?(t=u.split(" "),e=t[0].split(":"),a=t[1]):e=u.split(":"),i=parseInt(e[0],10),o=parseInt(e[1],10),isNaN(i)&&(i=0),isNaN(o)&&(o=0),"12h"==this.options.format?(i>12?i=12:0>i&&(i=12),"am"===a||"a"===a?a="AM":("pm"===a||"p"===a)&&(a="PM"),"AM"!==a&&"PM"!==a&&(a="AM")):i>=24?i=23:0>i&&(i=0),0>o?o=0:o>=60&&(o=0),this.autocomplete.input.val(this.formatTime(i,o,a)).trigger("change")},formatTime:function(t,e,i){return t=10>t?"0"+t:t,e=10>e?"0"+e:e,t+":"+e+("12h"==this.options.format?" "+i:"")}})});
3 3 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/tooltip.gradient.min.css
1   -/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
  1 +/* UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2 2 .uk-tooltip{display:none;position:absolute;z-index:1030;box-sizing:border-box;max-width:200px;padding:5px 8px;background:#333;color:rgba(255,255,255,.7);font-size:12px;line-height:18px;border-radius:3px;text-shadow:0 1px 0 rgba(0,0,0,.5)}.uk-tooltip:after{content:"";display:block;position:absolute;width:0;height:0;border:5px dashed #333}.uk-tooltip-top-left:after,.uk-tooltip-top-right:after,.uk-tooltip-top:after{bottom:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent;border-top-color:#333}.uk-tooltip-bottom-left:after,.uk-tooltip-bottom-right:after,.uk-tooltip-bottom:after{top:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent;border-bottom-color:#333}.uk-tooltip-bottom:after,.uk-tooltip-top:after{left:50%;margin-left:-5px}.uk-tooltip-bottom-left:after,.uk-tooltip-top-left:after{left:10px}.uk-tooltip-bottom-right:after,.uk-tooltip-top-right:after{right:10px}.uk-tooltip-left:after{right:-5px;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent;border-left-color:#333}.uk-tooltip-right:after{left:-5px;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent;border-right-color:#333}
3 3 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/tooltip.min.js
1   -/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
  1 +/* UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2 2 !function(t){var i;window.UIkit&&(i=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-tooltip",["uikit"],function(){return i||t(UIkit)})}(function(t){"use strict";var i,o,e;return t.component("tooltip",{defaults:{offset:5,pos:"top",animation:!1,delay:0,cls:"",activeClass:"uk-active",src:function(t){var i=t.attr("title");return void 0!==i&&t.data("cached-title",i).removeAttr("title"),t.data("cached-title")}},tip:"",boot:function(){t.$html.on("mouseenter.tooltip.uikit focus.tooltip.uikit","[data-uk-tooltip]",function(){var i=t.$(this);i.data("tooltip")||(t.tooltip(i,t.Utils.options(i.attr("data-uk-tooltip"))),i.trigger("mouseenter"))})},init:function(){var o=this;i||(i=t.$('<div class="uk-tooltip"></div>').appendTo("body")),this.on({focus:function(){o.show()},blur:function(){o.hide()},mouseenter:function(){o.show()},mouseleave:function(){o.hide()}})},show:function(){if(this.tip="function"==typeof this.options.src?this.options.src(this.element):this.options.src,o&&clearTimeout(o),e&&clearTimeout(e),"string"==typeof this.tip?this.tip.length:0){i.stop().css({top:-2e3,visibility:"hidden"}).removeClass(this.options.activeClass).show(),i.html('<div class="uk-tooltip-inner">'+this.tip+"</div>");var s=this,n=t.$.extend({},this.element.offset(),{width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}),l=i[0].offsetWidth,f=i[0].offsetHeight,p="function"==typeof this.options.offset?this.options.offset.call(this.element):this.options.offset,a="function"==typeof this.options.pos?this.options.pos.call(this.element):this.options.pos,h=a.split("-"),c={display:"none",visibility:"visible",top:n.top+n.height+f,left:n.left};if("fixed"==t.$html.css("position")||"fixed"==t.$body.css("position")){var r=t.$("body").offset(),d=t.$("html").offset(),u={top:d.top+r.top,left:d.left+r.left};n.left-=u.left,n.top-=u.top}"left"!=h[0]&&"right"!=h[0]||"right"!=t.langdirection||(h[0]="left"==h[0]?"right":"left");var m={bottom:{top:n.top+n.height+p,left:n.left+n.width/2-l/2},top:{top:n.top-f-p,left:n.left+n.width/2-l/2},left:{top:n.top+n.height/2-f/2,left:n.left-l-p},right:{top:n.top+n.height/2-f/2,left:n.left+n.width+p}};t.$.extend(c,m[h[0]]),2==h.length&&(c.left="left"==h[1]?n.left:n.left+n.width-l);var v=this.checkBoundary(c.left,c.top,l,f);if(v){switch(v){case"x":a=2==h.length?h[0]+"-"+(c.left<0?"left":"right"):c.left<0?"right":"left";break;case"y":a=2==h.length?(c.top<0?"bottom":"top")+"-"+h[1]:c.top<0?"bottom":"top";break;case"xy":a=2==h.length?(c.top<0?"bottom":"top")+"-"+(c.left<0?"left":"right"):c.left<0?"right":"left"}h=a.split("-"),t.$.extend(c,m[h[0]]),2==h.length&&(c.left="left"==h[1]?n.left:n.left+n.width-l)}c.left-=t.$body.position().left,o=setTimeout(function(){i.css(c).attr("class",["uk-tooltip","uk-tooltip-"+a,s.options.cls].join(" ")),s.options.animation?i.css({opacity:0,display:"block"}).addClass(s.options.activeClass).animate({opacity:1},parseInt(s.options.animation,10)||400):i.show().addClass(s.options.activeClass),o=!1,e=setInterval(function(){s.element.is(":visible")||s.hide()},150)},parseInt(this.options.delay,10)||0)}},hide:function(){if(!this.element.is("input")||this.element[0]!==document.activeElement)if(o&&clearTimeout(o),e&&clearTimeout(e),i.stop(),this.options.animation){var t=this;i.fadeOut(parseInt(this.options.animation,10)||400,function(){i.removeClass(t.options.activeClass)})}else i.hide().removeClass(this.options.activeClass)},content:function(){return this.tip},checkBoundary:function(i,o,e,s){var n="";return(0>i||i-t.$win.scrollLeft()+e>window.innerWidth)&&(n+="x"),(0>o||o-t.$win.scrollTop()+s>window.innerHeight)&&(n+="y"),n}}),t.tooltip});
3 3 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/jhlb.html
... ... @@ -22,10 +22,33 @@
22 22 <div class="uk-grid">
23 23 <div class="uk-width-1-1">
24 24 <div class="uk-form-row">
25   - <label class="uk-form-label" >班次</label>
  25 + <label class="uk-form-label" >路牌</label>
  26 + <div class="uk-form-controls">
  27 + <select name="lpName">
  28 + {{if lps.length > 1}}
  29 + <option value="-100">全部</option>
  30 + {{/if}}
  31 + {{each lps as lpName i}}
  32 + <option value="{{lpName}}">{{lpName}}</option>
  33 + {{/each}}
  34 + </select>
  35 + </div>
  36 + </div>
  37 + </div>
  38 + </div>
  39 +
  40 + <div class="uk-grid">
  41 + <div class="uk-width-1-1">
  42 + <div class="uk-form-row">
  43 + <label class="uk-form-label" >班次
  44 + <hr>
  45 + <label>全选
  46 + <input class="i-cbox" name="allCheck" type="checkbox" >
  47 + </label>
  48 + </label>
26 49 <div class="uk-form-controls sch-time-checkbox-list">
27 50 {{each list as sch i}}
28   - <label {{if sch.destroy}}class="destroy-sch"{{/if}}>
  51 + <label data-lp="{{sch.lpName}}" {{if sch.destroy}}class="destroy-sch"{{/if}}>
29 52 <input class="i-cbox" name="ids[]" value="{{sch.id}}" type="checkbox" {{if sch.destroy}}disabled{{/if}}>
30 53 {{sch.dfsj}}
31 54  
... ... @@ -94,10 +117,17 @@
94 117 return item.clZbh == sch.clZbh;
95 118 }).sort(gb_schedule_table.schedule_sort);
96 119  
  120 + //获取路牌
  121 + var lps = {};
  122 + $.each(schArr, function () {
  123 + lps[this.lpName]=1;
  124 + });
  125 +
97 126 var formHtml = template('schedule-jhlb-form-temp', {
98 127 sch: sch,
99 128 list: schArr,
100   - adjustExps:adjustExps
  129 + adjustExps:adjustExps,
  130 + lps: gb_common.get_keys(lps)
101 131 });
102 132 $('form', modal).html(formHtml);
103 133  
... ... @@ -137,6 +167,35 @@
137 167 var rem=$('[name=remarks]', f);
138 168 rem.val(rem.val() + $(this).val() + ',').trigger('input');
139 169 });
  170 +
  171 + //路牌切换事件
  172 + $('[name=lpName]', f).on('change', function () {
  173 + var v = $(this).val();
  174 + var lbs = $('.sch-time-checkbox-list label', modal);
  175 + if(v=='-100'){
  176 + //显示全部
  177 + lbs.show();
  178 + }
  179 + else {
  180 + lbs.hide().each(function () {
  181 + if($(this).data('lp')==v)
  182 + $(this).show();
  183 + else{
  184 + //将隐藏的checkbox取消选中
  185 + $(this).find('input[type=checkbox]')[0].checked=false;
  186 + }
  187 + });
  188 + }
  189 + });
  190 +
  191 + //全选
  192 + $('[name=allCheck]', f).on('click', function () {
  193 + var cbs = $('.sch-time-checkbox-list label input[type=checkbox]:visible:enabled', modal);
  194 + var status = this.checked;
  195 + cbs.each(function () {
  196 + this.checked = status;
  197 + });
  198 + });
140 199 });
141 200 })();
142 201 </script>
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/lj_zrw.html
... ... @@ -295,7 +295,7 @@
295 295 var sch = getActiveSch();
296 296 if (!sch || !sch.sflj)
297 297 return notify_err('只能删除临加班次!');
298   - var str = '<h3>确定要删除临加班次<span style="color:red;margin: 0 5px;">' + sch.clZbh + '( ' + sch.dfsj + ' )</span>?</h3>';
  298 + var str = '<h3>确定要删除临加班次<span style="color:red;margin: 0 5px;">' + sch.clZbh + '( ' + sch.dfsj + ' )</span>?</h3><h5 style="color: #6c6c6c;font-size: 12px;">如果删除失败,可能正处于调度指令下行上达瞬间,等几秒再删即可。班次删除后,调度指令会保留</h5>';
299 299 alt_confirm(str, function () {
300 300 gb_common.$del('/realSchedule/' + sch.id, function (rs) {
301 301 //前端数据更新
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/multi_tzrc.html
1   -<div class="uk-modal ct_move_modal" id="schedule-multi-tzrc-modal">
  1 +<div class="uk-modal" id="schedule-multi-tzrc-modal">
2 2 <div class="drag-container"></div>
3 3 <div class="uk-modal-dialog" style="width: 860px;">
4 4 <a href="" class="uk-modal-close uk-close"></a>
... ...
src/main/resources/static/real_control_v2/js/line_schedule/context_menu.js
... ... @@ -22,6 +22,10 @@ var gb_schedule_context_menu = (function () {
22 22 var list = schArray.filter(function (sch) {
23 23 return sch.bcType != 'out' && sch.bcType != 'in' && sch.fcsjActual == null;
24 24 });
  25 + if(list.length == 0){
  26 + notify_err('没有需要调整的班次!');
  27 + return;
  28 + }
25 29 open_modal(folder + '/multi_dftz.html', {
26 30 list: list
27 31 }, modal_opts);
... ...
src/main/resources/static/real_control_v2/js/line_schedule/sch_table.js
... ... @@ -16,18 +16,22 @@ var gb_schedule_table = (function () {
16 16 * @param list
17 17 */
18 18 var isRepeatData = function (list) {
19   - var map = {}, reps = [];
20   - for(var i = 0,sch;sch=list[i++];){
21   - if(map[sch.id]){
22   - reps.push(sch.clZbh);
  19 + try {
  20 + var map = {}, reps = [];
  21 + for(var i = 0,sch;sch=list[i++];){
  22 + if(map[sch.id]){
  23 + reps.push(sch.clZbh);
  24 + }
  25 + map[sch.id] = sch;
23 26 }
24   - map[sch.id] = sch;
25   - }
26 27  
27   - //通知服务端数据有异常
28   - $.each(reps, function () {
29   - $.post('/anomalyCheck/schRepeat', {nbbm: this});
30   - });
  28 + //通知服务端数据有异常
  29 + $.each(reps, function () {
  30 + $.post('/anomalyCheck/schRepeat', {nbbm: this});
  31 + });
  32 + }catch (e){
  33 + return list;
  34 + }
31 35  
32 36 return gb_common.get_vals(map);
33 37 };
... ... @@ -38,12 +42,12 @@ var gb_schedule_table = (function () {
38 42 lines: gb_data_basic.line_idx
39 43 }, function (rs) {
40 44 for (var lineCode in rs) {
41   - //排序
42   - rs[lineCode].sort(schedule_sort);
43 45 line2Schedule[lineCode] = {};
44 46 //------是否有重复班次 #临时代码,为服务端提供诊断信息已解决这个问题
45   - rs[lineCode] = isRepeatData(line2Schedule[lineCode]);
  47 + rs[lineCode] = isRepeatData(rs[lineCode]);
46 48  
  49 + //排序
  50 + rs[lineCode].sort(schedule_sort);
47 51 //calc shift
48 52 $.each(rs[lineCode], function () {
49 53 calc_sch_real_shift(this);
... ... @@ -177,27 +181,6 @@ var gb_schedule_table = (function () {
177 181  
178 182 //重新渲染表格
179 183 reRenderTable(sch.xlBm);
180   - /*//重新渲染表格
181   - var data = gb_common.get_vals(line2Schedule[sch.xlBm]).sort(schedule_sort),
182   - dirData = gb_common.groupBy(data, 'xlDir'),
183   - tabCont = $('li.line_schedule[data-id=' + sch.xlBm + ']');
184   -
185   - for (var upDown in dirData) {
186   - htmlStr = temps['line-schedule-table-temp']({
187   - dir: upDown,
188   - line: gb_data_basic.codeToLine[sch.xlBm],
189   - list: dirData[upDown]
190   - });
191   - $('.schedule-wrap .card-panel:eq(' + upDown + ')', tabCont).html(htmlStr);
192   - }
193   - //图例相关
194   - gb_sch_legend.init(tabCont);
195   - //标记末班
196   - markerLastByLine(sch.xlBm);
197   - //计算应发未发
198   - calc_yfwf_num(sch.xlBm);
199   - //重新固定表头
200   - gb_ct_table.fixedHead($('.line_schedule .ct_table_wrap'));*/
201 184 //定位到新添加的班次
202 185 scroToDl(sch);
203 186 };
... ... @@ -230,7 +213,14 @@ var gb_schedule_table = (function () {
230 213 //计算应发未发
231 214 calc_yfwf_num(lineCode);
232 215 //重新固定表头
233   - gb_ct_table.fixedHead($('.line_schedule .ct_table_wrap'));
  216 + gb_ct_table.fixedHead($('.line_schedule .ct_table_wrap', tabCont));
  217 +
  218 + //重新初始化排序
  219 + gb_ct_table.enableSort($('.ct_table', tabCont), reset_seq_no, gb_schedule_table_dbclick.init);
  220 + //重新初始化双击待发调整
  221 + gb_schedule_table_dbclick.init();
  222 + //重新初始化双击实发发车信息微调
  223 + gb_schedule_table_dbclick.sfsjCellClick($('dd.fcsjActualCell', tabCont));
234 224 }
235 225 };
236 226  
... ... @@ -542,7 +532,7 @@ var gb_schedule_table = (function () {
542 532 }
543 533 }
544 534 };
545   -
  535 +
546 536 /** 添加备注信息 */
547 537 var addRemarks = function (list, remarks) {
548 538 //if(!list || list)
... ...
src/main/resources/static/real_control_v2/main.html
... ... @@ -5,16 +5,16 @@
5 5 <meta charset="UTF-8">
6 6 <title>线路调度 v2.0</title>
7 7 <!-- uikit core style-->
8   - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/css/uikit.gradient.min.css" merge="uikit"/>
9   - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/notify.gradient.min.css" merge="uikit"/>
10   - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/tooltip.gradient.min.css" merge="uikit"/>
  8 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/css/uikit.gradient.min.css" />
  9 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/notify.gradient.min.css" merge="plugins"/>
  10 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/tooltip.gradient.min.css" merge="plugins"/>
11 11 <link rel="stylesheet"
12   - href="/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.gradient.min.css" merge="uikit"/>
13   - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/accordion.gradient.min.css" merge="uikit"/>
14   - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/slidenav.gradient.min.css" merge="uikit"/>
  12 + href="/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.gradient.min.css" merge="plugins"/>
  13 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/accordion.gradient.min.css" merge="plugins"/>
  14 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/slidenav.gradient.min.css" merge="plugins"/>
15 15  
16 16 <!-- main style -->
17   - <link rel="stylesheet" href="/real_control_v2/css/main.css" merge="custom_style"/>
  17 + <link rel="stylesheet" href="/real_control_v2/css/main.css" />
18 18 <!-- north style -->
19 19 <link rel="stylesheet" href="/real_control_v2/css/north.css" merge="custom_style"/>
20 20 <!-- home style -->
... ... @@ -25,14 +25,14 @@
25 25 <!-- custom table -->
26 26 <link rel="stylesheet" href="/real_control_v2/css/ct_table.css" merge="custom_style"/>
27 27 <!-- jquery contextMenu style -->
28   - <link rel="stylesheet" href="/real_control_v2/assets/css/jquery.contextMenu.min.css" />
  28 + <link rel="stylesheet" href="/real_control_v2/assets/css/jquery.contextMenu.min.css" merge="plugins"/>
29 29 <!-- formvalidation style -->
30   - <link rel="stylesheet" href="/real_control_v2/assets/plugins/formvalidation/formValidation.min.css"/>
  30 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/formvalidation/formValidation.min.css" merge="plugins"/>
31 31 <!-- js tree -->
32   - <link rel="stylesheet" href="/real_control_v2/assets/plugins/jstree/default/style.min.css"/>
  32 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/jstree/default/style.css" merge="plugins"/>
33 33 <!-- tooltip css-->
34   - <link rel="stylesheet" href="/real_control_v2/assets/plugins/qtip/jquery.qtip.min.css"/>
35   - <link rel="stylesheet" href="/real_control_v2/css/pace.css" merge="custom_style"/>
  34 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/qtip/jquery.qtip.min.css" merge="plugins"/>
  35 + <link rel="stylesheet" href="/real_control_v2/css/pace.css" merge="plugins"/>
36 36  
37 37 <link rel="stylesheet" href="/real_control_v2/css/modal_extend.css" merge="custom_style"/>
38 38 </head>
... ... @@ -43,7 +43,7 @@
43 43 <div class="uk-width-4-10">
44 44 <div class="uk-panel">
45 45 <h2 class="north-logo">
46   - <i class="uk-icon-life-ring"></i> 闵行公交线路调度
  46 + <i class="uk-icon-life-ring"></i> 浦东公交线路调度
47 47 </h2>
48 48 </div>
49 49 </div>
... ... @@ -93,8 +93,8 @@
93 93 <!-- 地图相关 -->
94 94 <script src="http://api.map.baidu.com/api?v=2.0&ak=IGGrr4UjwIYzatoCRFKEL8sT"></script>
95 95 <script src="http://api.map.baidu.com/library/TrafficControl/1.4/src/TrafficControl_min.js"></script>
96   -<script src="/assets/js/baidu//MarkerClusterer.js"></script>
97   -<script src="/assets/js/TransGPS.js"></script>
  96 +<script src="/assets/js/baidu//MarkerClusterer.js" merge="plugins"></script>
  97 +<script src="/assets/js/TransGPS.js" merge="plugins"></script>
98 98 <!-- 高德 -->
99 99 <script src="http://webapi.amap.com/maps?v=1.3&key=16cb1c5043847e09ef9edafdd77befda"></script>
100 100 <!-- jquery -->
... ... @@ -108,7 +108,7 @@
108 108 <!-- common js -->
109 109 <script src="/real_control_v2/js/common.js"></script>
110 110 <!-- art-template 模版引擎 -->
111   -<script src="/assets/plugins/template.js"></script>
  111 +<script src="/assets/plugins/template.js" merge="plugins"></script>
112 112 <!-- d3 -->
113 113 <script src="/assets/js/d3.min.js"></script>
114 114 <!-- EventProxy -->
... ... @@ -135,7 +135,7 @@
135 135 <!-- js tree -->
136 136 <script src="/real_control_v2/assets/plugins/jstree/jstree.min.js" merge="plugins"></script>
137 137 <!-- simple pinyin -->
138   -<script src="/assets/plugins/pinyin.js"></script>
  138 +<script src="/assets/plugins/pinyin.js" merge="plugins"></script>
139 139 <!-- qtip -->
140 140 <script src="/real_control_v2/assets/plugins/qtip/jquery.qtip.min.js" merge="plugins"></script>
141 141  
... ... @@ -175,9 +175,9 @@
175 175 <script src="/real_control_v2/js/utils/tts.js" merge="custom_js"></script>
176 176  
177 177 <!-- echart -->
178   -<script src="/real_control_v2/assets/echarts-3/echarts.js"></script>
  178 +<script src="/real_control_v2/assets/echarts-3/echarts.js" merge="plugins"></script>
179 179 <!-- Geolib -->
180   -<script src="/real_control_v2/geolib/geolib.js"></script>
  180 +<script src="/real_control_v2/geolib/geolib.js" merge="plugins"></script>
181 181  
182 182 <script src="/real_control_v2/js/signal_state/signal_state.js" merge="custom_js"></script>
183 183 <script src="/real_control_v2/js/utils/dispatch_pattern.js" merge="custom_js"></script>
... ...
src/main/resources/static/real_control_v2/mapmonitor/real.html
1   -<link href="/assets/css/TrafficControl.css" rel="stylesheet"/>
2   -<link rel="stylesheet" href="/real_control_v2/assets/plugins/jquery.ui/themes/base/all.css"/>
3   -<link rel="stylesheet" href="/real_control_v2/assets/plugins/spectrum/spectrum.css"/>
4   -<link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/form-advanced.gradient.min.css"/>
  1 +<link href="/assets/css/TrafficControl.css" rel="stylesheet" merge="map_plugins"/>
  2 +<link rel="stylesheet" href="/real_control_v2/assets/plugins/jquery.ui/themes/base/all.css" merge="map_plugins"/>
  3 +<link rel="stylesheet" href="/real_control_v2/assets/plugins/spectrum/spectrum.css" merge="map_plugins"/>
  4 +<link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/form-advanced.gradient.min.css" merge="map_plugins"/>
5 5 <link rel="stylesheet" href="/real_control_v2/mapmonitor/css/real.css"/>
6   -<link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/progress.gradient.min.css">
  6 +<link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/progress.gradient.min.css" merge="map_plugins">
7 7  
8 8 <div class="map-system-msg flex-left">
9 9 <a class="z-depth-2" href="/pages/mapmonitor/alone/wrap.html" target="_blank"></a>
... ... @@ -50,21 +50,21 @@
50 50 </div>
51 51 </div>
52 52  
53   -<script src="/real_control_v2/assets/js/GeoUtils_min.js"></script>
54   -<script src="/real_control_v2/mapmonitor/js/config.js" merge="custom_map_js"></script>
55   -<script src="/real_control_v2/mapmonitor/js/gps_tree.js" merge="custom_map_js"></script>
56   -<script src="/real_control_v2/mapmonitor/js/spatial_data.js" merge="custom_map_js"></script>
57   -<script src="/real_control_v2/mapmonitor/js/map_overlay_manager.js" merge="custom_map_js"></script>
58   -<script src="/real_control_v2/mapmonitor/js/real.js" merge="custom_map_js"></script>
59   -<script src="/real_control_v2/mapmonitor/js/map/iMap.js" merge="custom_map_js"></script>
60   -<script src="/real_control_v2/mapmonitor/js/map/platform/baidu.js" merge="custom_map_js"></script>
61   -<script src="/real_control_v2/mapmonitor/js/map/platform/gaode.js" merge="custom_map_js"></script>
  53 +<script src="/real_control_v2/assets/js/GeoUtils_min.js" merge="map_plugins"></script>
  54 +<script src="/real_control_v2/mapmonitor/js/config.js" merge="map_custom_js"></script>
  55 +<script src="/real_control_v2/mapmonitor/js/gps_tree.js" merge="map_custom_js"></script>
  56 +<script src="/real_control_v2/mapmonitor/js/spatial_data.js" merge="map_custom_js"></script>
  57 +<script src="/real_control_v2/mapmonitor/js/map_overlay_manager.js" merge="map_custom_js"></script>
  58 +<script src="/real_control_v2/mapmonitor/js/real.js" ></script>
  59 +<script src="/real_control_v2/mapmonitor/js/map/iMap.js" merge="map_custom_js"></script>
  60 +<script src="/real_control_v2/mapmonitor/js/map/platform/baidu.js" merge="map_custom_js"></script>
  61 +<script src="/real_control_v2/mapmonitor/js/map/platform/gaode.js" merge="map_custom_js"></script>
62 62 <!-- jquery ui -->
63   -<script src="/real_control_v2/assets/plugins/jquery.ui/core.js"></script>
64   -<script src="/real_control_v2/assets/plugins/jquery.ui/widget.js"></script>
65   -<script src="/real_control_v2/assets/plugins/jquery.ui/mouse.js"></script>
66   -<script src="/real_control_v2/assets/plugins/jquery.ui/resizable.js"></script>
  63 +<script src="/real_control_v2/assets/plugins/jquery.ui/core.js" merge="map_plugins"></script>
  64 +<script src="/real_control_v2/assets/plugins/jquery.ui/widget.js" merge="map_plugins"></script>
  65 +<script src="/real_control_v2/assets/plugins/jquery.ui/mouse.js" merge="map_plugins"></script>
  66 +<script src="/real_control_v2/assets/plugins/jquery.ui/resizable.js" merge="map_plugins"></script>
67 67 <!-- 颜色选择器 -->
68   -<script src="/real_control_v2/assets/plugins/spectrum/spectrum.js"></script>
  68 +<script src="/real_control_v2/assets/plugins/spectrum/spectrum.js" merge="map_plugins"></script>
69 69 <!-- play back -->
70   -<script src="/real_control_v2/mapmonitor/js/playback.js" merge="custom_map_js"></script>
71 70 \ No newline at end of file
  71 +<script src="/real_control_v2/mapmonitor/js/playback.js" merge="map_custom_js"></script>
72 72 \ No newline at end of file
... ...
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/new.txt 0 → 100644
  1 +1、车狼配置,每辆车都可以配置单独的停车点及相关数据,并提供两种设置模式(早晚,复驶)
  2 +2、规则管理,修改规则的界面图形化,更加方便修改
  3 +3、时刻表管理,导入时刻表xls做严格数据判定,时刻表明细修改提供跟方便的图形化修改方式
  4 +4、排班计划管理,提供每次排班的操作信息,时间段,所使用的时刻表,可以查看具体的排班明细(细化到班次)
  5 + 生成排班时,提供详细的时刻表统计信息,提供两种排班模式(历史排班优先,规则优先)
  6 +5、调度值勤日报,列出每天的基于线路,路牌的排班统计,可以更换车辆,人员
  7 + 此功能从排班计划中抽取出来,单独列出,供调派人员使用
0 8 \ No newline at end of file
... ...
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 28 \ No newline at end of file
... ...