Commit bc60adc6b0f2f0f09e42740f5f4d47d0709eb860

Authored by 徐烜
2 parents 3d521c54 2d62a374

Merge branch 'pudong_jdk8_wvp' of http://192.168.168.245:8888/panzhaov5/bsth_con…

…trol into pudong_jdk8_wvp
src/main/java/com/bsth/XDApplication.java
@@ -259,7 +259,7 @@ public class XDApplication implements CommandLineRunner { @@ -259,7 +259,7 @@ public class XDApplication implements CommandLineRunner {
259 sexec.scheduleWithFixedDelay(basicDataLoader, 1, 1, TimeUnit.HOURS);//基础数据更新 259 sexec.scheduleWithFixedDelay(basicDataLoader, 1, 1, TimeUnit.HOURS);//基础数据更新
260 sexec.scheduleWithFixedDelay(whiteIpDataLoader, 0, 1, TimeUnit.MINUTES);//IP白名单数据更新 260 sexec.scheduleWithFixedDelay(whiteIpDataLoader, 0, 1, TimeUnit.MINUTES);//IP白名单数据更新
261 sexec.scheduleWithFixedDelay(autoExecScanThread, 180, 50, TimeUnit.SECONDS);//班次自动执行 261 sexec.scheduleWithFixedDelay(autoExecScanThread, 180, 50, TimeUnit.SECONDS);//班次自动执行
262 - //DirectivePushQueue.start();//消息队列 -指令,系统下发的 262 + DirectivePushQueue.start();//消息队列 -指令,系统下发的
263 WebSocketPushQueue.start();//消息队列 -webSocket ,推送至线调web页面的 263 WebSocketPushQueue.start();//消息队列 -webSocket ,推送至线调web页面的
264 264
265 /** 线调为其他程序提供的数据 --写入数据库 */ 265 /** 线调为其他程序提供的数据 --写入数据库 */
src/main/java/com/bsth/controller/sys/UserController.java
@@ -155,7 +155,8 @@ public class UserController extends BaseController<SysUser, Integer> { @@ -155,7 +155,8 @@ public class UserController extends BaseController<SysUser, Integer> {
155 userName = RSAUtils.decryptBase64(userName); 155 userName = RSAUtils.decryptBase64(userName);
156 password = RSAUtils.decryptBase64(password); 156 password = RSAUtils.decryptBase64(password);
157 } catch (RuntimeException e) { 157 } catch (RuntimeException e) {
158 - return put(rs, "msg", "decrypt RSA fail!可能页面已过期,尝试刷新页面。"); 158 + //return put(rs, "msg", "decrypt RSA fail!可能页面已过期,尝试刷新页面。");
  159 + return put(rs, "msg", "page is expired, refresh it and try again");
159 } 160 }
160 161
161 SysUser user = sysUserService.findByUserName(userName); 162 SysUser user = sysUserService.findByUserName(userName);
@@ -168,12 +169,14 @@ public class UserController extends BaseController<SysUser, Integer> { @@ -168,12 +169,14 @@ public class UserController extends BaseController<SysUser, Integer> {
168 169
169 // 校验用户状态 170 // 校验用户状态
170 if (!user.isEnabled()) { 171 if (!user.isEnabled()) {
171 - return put(rs, "msg", "该用户已被锁定,请联系管理员"); 172 + //return put(rs, "msg", "该用户已被锁定,请联系管理员");
  173 + return put(rs, "msg", "your account is locked, please contact administrator");
172 } 174 }
173 175
174 // 校验临时状态 176 // 校验临时状态
175 if (USER_LOCKTIME.get(userName) != null && USER_LOCKTIME.get(userName) >= System.currentTimeMillis()) { 177 if (USER_LOCKTIME.get(userName) != null && USER_LOCKTIME.get(userName) >= System.currentTimeMillis()) {
176 - return put(rs, "msg", "您的账户因密码错误次数过多,处于锁定状态中"); 178 + //return put(rs, "msg", "您的账户因密码错误次数过多,处于锁定状态中");
  179 + return put(rs, "msg", "your account is locked");
177 } 180 }
178 181
179 // 校验验证码 182 // 校验验证码
@@ -183,7 +186,8 @@ public class UserController extends BaseController<SysUser, Integer> { @@ -183,7 +186,8 @@ public class UserController extends BaseController<SysUser, Integer> {
183 return put(rs, "msg", I18n.getInstance().getMessage("txt-2321")); 186 return put(rs, "msg", I18n.getInstance().getMessage("txt-2321"));
184 } 187 }
185 if (!verCode.equals(captcha)) { 188 if (!verCode.equals(captcha)) {
186 - return put(rs, "msg", "验证码有误,请刷新后重新输入"); 189 + //return put(rs, "msg", "验证码有误,请刷新后重新输入");
  190 + return put(rs, "msg", I18n.getInstance().getMessage("captcha is error,please refresh and enter again"));
187 } 191 }
188 } 192 }
189 193
@@ -217,7 +221,8 @@ public class UserController extends BaseController<SysUser, Integer> { @@ -217,7 +221,8 @@ public class UserController extends BaseController<SysUser, Integer> {
217 logger.error("用户:" + user.getUserName() + "登录"); 221 logger.error("用户:" + user.getUserName() + "登录");
218 } catch (Exception e) { 222 } catch (Exception e) {
219 logger.error("", e); 223 logger.error("", e);
220 - rs.put("msg", "服务器出现异常,请联系管理员"); 224 + //rs.put("msg", "服务器出现异常,请联系管理员");
  225 + rs.put("msg", "server is abnormal, please contact administrator");
221 } 226 }
222 return rs; 227 return rs;
223 } 228 }
src/main/java/com/bsth/service/directive/DirectiveServiceImpl.java
@@ -208,7 +208,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl<D60, Integer> implemen @@ -208,7 +208,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl<D60, Integer> implemen
208 public int send60Operation(String nbbm, int state, int upDown, String sender) { 208 public int send60Operation(String nbbm, int state, int upDown, String sender) {
209 logger.info("切换运营状态, nbbm: " + nbbm + " ,state: " + state + " ,upDown:" + upDown); 209 logger.info("切换运营状态, nbbm: " + nbbm + " ,state: " + state + " ,upDown:" + upDown);
210 210
211 - String text = "切换为 " + (upDown == 0 ? I18n.getInstance().getMessage("txt-3858") : I18n.getInstance().getMessage("txt-3857")) + (state == 0 ? I18n.getInstance().getMessage("txt-3966") : I18n.getInstance().getMessage("txt-4457")); 211 + String text = I18n.getInstance().getMessage("txt-4531") + (upDown == 0 ? I18n.getInstance().getMessage("txt-3858") : I18n.getInstance().getMessage("txt-3857")) + "/" + (state == 0 ? I18n.getInstance().getMessage("txt-3966") : I18n.getInstance().getMessage("txt-4457"));
212 D60 d60 = new DirectiveCreator().createD60(nbbm, text, (short) 0x03, upDown, state, null); 212 D60 d60 = new DirectiveCreator().createD60(nbbm, text, (short) 0x03, upDown, state, null);
213 213
214 if (null == d60) 214 if (null == d60)
src/main/resources/fatso/start.js
1 -/**  
2 - * @author PanZhao  
3 - * @date 2016年3月17日 下午12:44:06  
4 - */  
5 -var fs = require('fs')  
6 - , colors = require('colors')  
7 - , child_process = require('child_process')  
8 - , EventProxy = require('eventproxy')  
9 - , parse = require('./parse')  
10 - , minifier = require('./minifier')  
11 - , crypto = require("crypto")  
12 - , handle_real_ctl = require('./handle_real_ctl');  
13 -  
14 -  
15 -var platform = process.platform;  
16 -var iswin = platform == 'win32';  
17 -var sp = platform == 'win32' ? '\\' : '/';  
18 -//不参与的目录  
19 -var excludes = ['scheduleApp', 'trafficManage', 'control', 'permission' + sp + 'authorize_all','permission' + sp + 'user', 'summary', 'history_sch', 'report' + sp + 'oil', 'base' + sp + 'geo_data_edit', 'base' + sp + 'carpark', 'forms', 'mforms', 'report', 'punctual', 'base' + sp + 'timesmodel', 'base' + sp + 'stationroute']  
20 - , ep = new EventProxy()  
21 - , pName = 'bsth_control'  
22 - , path = process.cwd()  
23 - //根目录  
24 - , root = path.substr(0, path.indexOf(sp + 'src' + sp + 'main'))  
25 - , workspace = root.substr(0, root.lastIndexOf(sp + pName))  
26 - //临时目录  
27 - , dest = (workspace + sp + pName + '@fatso_copy')  
28 - , _static = sp + 'src' + sp + 'main' + sp + 'resources' + sp + 'static'  
29 - , _pages = dest + _static + sp + 'pages';  
30 -  
31 -  
32 -//创建临时目录  
33 -fs.mkdir(dest, function (e) {  
34 - if (e)  
35 - logError('创建临时目录出错,请检查目录 ' + dest + '是否存在');  
36 -  
37 - setTimeout(function () {  
38 - ep.emit('mvn-clean');  
39 - }, 500);  
40 -});  
41 -//子进程  
42 -var cProcess;  
43 -  
44 -ep.tail('mvn-clean', function () {  
45 - //ep.emit('copy-project');  
46 - //清理target  
47 - logInfo('mvn clean...');  
48 - cProcess = child_process.exec("mvn clean", {cwd: workspace + sp + pName}, function (error) {  
49 - if (error)  
50 - logError(error);  
51 -  
52 - logSuccess('mvn clean success');  
53 -  
54 - ep.emit('copy-project');  
55 - });  
56 - output(cProcess);  
57 -});  
58 -  
59 -//复制项目副本  
60 -ep.tail('copy-project', function () {  
61 - logInfo('copy project...');  
62 - var xcopyCom;  
63 - if (iswin)  
64 - xcopyCom = 'XCOPY ' + root.replace(/\//g, '\\') + ' ' + dest + ' /e /exclude:' + path + '\\exclude.txt';  
65 - else  
66 - xcopyCom = 'cp -a ' + root + '/. ' + dest;  
67 -  
68 - cProcess = child_process.exec(xcopyCom, {cwd: workspace, maxBuffer: 5000 * 1024}, function (error) {  
69 - if (error)  
70 - logError(error);  
71 -  
72 - logSuccess('copy project success');  
73 -  
74 - ep.emit('check-js');  
75 - });  
76 - //output(cProcess);  
77 -});  
78 -  
79 -//检查JS  
80 -ep.tail('check-js', function () {  
81 - ep.emit('minifier-js');  
82 -});  
83 -  
84 -//合并压缩JS  
85 -ep.tail('minifier-js', function () {  
86 - logInfo('handle index.html...');  
87 -  
88 - //再处理首页  
89 - ep.emit('handle-index', function () {  
90 - //递归处理片段  
91 - walk(dest + _static + sp + 'pages', function (item) {  
92 - ep.emit('handle-fragment', item);  
93 - },  
94 - function () {  
95 - //处理线调首页  
96 - handle_real_ctl.handleMain(function () {  
97 - //处理线调地图  
98 - handle_real_ctl.handleMap(function () {  
99 - //处理单屏地图页面  
100 - handle_real_ctl.handleAlonePage(function () {  
101 - //处理单屏主页  
102 - handle_real_ctl.handleAloneHomePage(function () {  
103 - ep.emit('package-jar');  
104 - });  
105 - });  
106 - });  
107 - });  
108 - });  
109 - });  
110 -});  
111 -  
112 -//打包  
113 -ep.tail('package-jar', function (file) {  
114 - var packageCom = 'mvn clean package -DskipTests';  
115 - cProcess = child_process.exec(packageCom, {maxBuffer: 5000 * 1024, cwd: dest}, function (error) {  
116 - if (error)  
117 - logError(error);  
118 -  
119 - logSuccess('mvn package success');  
120 -  
121 - console.log(('成功打包在 ' + dest + sp + 'target 目录下').cyan);  
122 - });  
123 -  
124 - output(cProcess);  
125 -});  
126 -  
127 -//处理片段  
128 -ep.tail('handle-fragment', function (file) {  
129 - //要排除的文件  
130 - for (var i = 0, ex; ex = excludes[i++];) {  
131 - if (file.indexOf(_pages + sp + ex) != -1)  
132 - return false;  
133 - }  
134 - handleJavascript(file, function (mini, $) {  
135 - var jsMini;  
136 - if (mini.inside)  
137 - jsMini = '(function(){' + mini.inside + '\n' + mini.outside + '})();';  
138 - else  
139 - jsMini = '(function(){' + mini.outside + '})();';  
140 -  
141 - write(file, $.html() + '<script>' + jsMini + '</script>');  
142 - });  
143 -  
144 -});  
145 -  
146 -//处理首页  
147 -ep.tail('handle-index', function (cb) {  
148 - var index = dest + _static + sp + 'index.html';  
149 - handleJavascript(index, function (mini, $) {  
150 - var jsMiniText = mini.inside + mini.outside;  
151 -  
152 - var code = md5(jsMiniText);  
153 - fs.open(dest + _static + sp + 'assets' + sp + 'js' + sp + code + '.js', 'a', function (err, fd) {  
154 - if (err)  
155 - logError(err);  
156 -  
157 - fs.write(fd, jsMiniText, function () {  
158 - var ss = $('script');  
159 -  
160 - $(ss[ss.length - 1]).before('<script src="/assets/js/' + code + '.js"></script>\n');  
161 - for (var i = 0, s; s = ss[i++];) {  
162 - $(s).removeAttr('data-exclude')  
163 - .removeAttr('flag')  
164 - .removeAttr('data-autocephaly');  
165 - }  
166 - write(index, $.html());  
167 -  
168 - cb && cb();  
169 - });  
170 - });  
171 - });  
172 -});  
173 -  
174 -  
175 -function handleJavascript(item, cb) {  
176 - //解析页面  
177 - var htmlResult = parse.html(item, dest + _static)  
178 - , jsArray = htmlResult.jsArray  
179 - , $ = htmlResult.$  
180 - , scrStr = htmlResult.scriptString;  
181 -  
182 - //合并压缩  
183 - var mini = minifier.mergeAndMini(jsArray, scrStr, dest + _static, item);  
184 -  
185 - cb && cb(mini, $);  
186 -}  
187 -  
188 -function removeJsLink(s, e) {  
189 - var newArray = [], flag;  
190 -  
191 - for (var i = 0, si; si = s[i++];) {  
192 - flag = 0;  
193 - for (var j = 0, ei; ei = e[j++];) {  
194 - if (si.indexOf(ei) != -1) {  
195 - flag = -1;  
196 - break;  
197 - }  
198 - }  
199 -  
200 - if (flag == 0) {  
201 - newArray.push(si);  
202 - }  
203 - }  
204 - return newArray;  
205 -}  
206 -  
207 -function write(file, text) {  
208 - fs.writeFile(file, text, function (err) {  
209 - if (err) {  
210 - console.log(err.toString().red);  
211 - process.exit();  
212 - }  
213 - //console.log(file.green);  
214 - });  
215 -}  
216 -  
217 -function md5(text) {  
218 - return crypto.createHash("md5").update(text).digest("hex");  
219 -}  
220 -  
221 -  
222 -function walk(path, handleFile, over) {  
223 - fs.readdir(path, function (err, files) {  
224 - if (err) {  
225 - console.log('read dir error'.red);  
226 - } else {  
227 - files.forEach(function (item) {  
228 - var tmpPath = path + sp + item;  
229 - fs.stat(tmpPath, function (err1, stats) {  
230 - if (err1) {  
231 - console.log('stat error');  
232 - } else {  
233 - if (stats.isDirectory()) {  
234 - walk(tmpPath, handleFile);  
235 - } else if (item.indexOf('.html') != -1) {  
236 - handleFile(tmpPath);  
237 - }  
238 - }  
239 - })  
240 - });  
241 -  
242 - over && over();  
243 - }  
244 - });  
245 -}  
246 -  
247 -function logInfo(t) {  
248 - console.log(t);  
249 -}  
250 -  
251 -function logSuccess(t) {  
252 - console.log(t.green);  
253 -}  
254 -  
255 -function logError(e) {  
256 - console.log(e.toString().red);  
257 - process.exit();  
258 -}  
259 -  
260 -function output(cProcess) {  
261 - //标准输出  
262 - cProcess.stdout.on('data', function (s) {  
263 - console.log(s);  
264 - }); 1 +/**
  2 + * @author PanZhao
  3 + * @date 2016年3月17日 下午12:44:06
  4 + */
  5 +var fs = require('fs')
  6 + , colors = require('colors')
  7 + , child_process = require('child_process')
  8 + , EventProxy = require('eventproxy')
  9 + , parse = require('./parse')
  10 + , minifier = require('./minifier')
  11 + , crypto = require("crypto")
  12 + , handle_real_ctl = require('./handle_real_ctl');
  13 +
  14 +
  15 +var platform = process.platform;
  16 +var iswin = platform == 'win32';
  17 +var sp = platform == 'win32' ? '\\' : '/';
  18 +//不参与的目录
  19 +var excludes = ['scheduleApp', 'trafficManage', 'control', 'permission' + sp + 'authorize_all','permission' + sp + 'user', 'summary', 'history_sch', 'report' + sp + 'oil', 'base' + sp + 'geo_data_edit', 'base' + sp + 'carpark', 'forms', 'mforms', 'report', 'punctual', 'base' + sp + 'timesmodel', 'base' + sp + 'stationroute', 'kl', 'dsm']
  20 + , ep = new EventProxy()
  21 + , pName = 'bsth_control'
  22 + , path = process.cwd()
  23 + //根目录
  24 + , root = path.substr(0, path.indexOf(sp + 'src' + sp + 'main'))
  25 + , workspace = root.substr(0, root.lastIndexOf(sp + pName))
  26 + //临时目录
  27 + , dest = (workspace + sp + pName + '@fatso_copy')
  28 + , _static = sp + 'src' + sp + 'main' + sp + 'resources' + sp + 'static'
  29 + , _pages = dest + _static + sp + 'pages';
  30 +
  31 +
  32 +//创建临时目录
  33 +fs.mkdir(dest, function (e) {
  34 + if (e)
  35 + logError('创建临时目录出错,请检查目录 ' + dest + '是否存在');
  36 +
  37 + setTimeout(function () {
  38 + ep.emit('mvn-clean');
  39 + }, 500);
  40 +});
  41 +//子进程
  42 +var cProcess;
  43 +
  44 +ep.tail('mvn-clean', function () {
  45 + //ep.emit('copy-project');
  46 + //清理target
  47 + logInfo('mvn clean...');
  48 + cProcess = child_process.exec("mvn clean", {cwd: workspace + sp + pName}, function (error) {
  49 + if (error)
  50 + logError(error);
  51 +
  52 + logSuccess('mvn clean success');
  53 +
  54 + ep.emit('copy-project');
  55 + });
  56 + output(cProcess);
  57 +});
  58 +
  59 +//复制项目副本
  60 +ep.tail('copy-project', function () {
  61 + logInfo('copy project...');
  62 + var xcopyCom;
  63 + if (iswin)
  64 + xcopyCom = 'XCOPY ' + root.replace(/\//g, '\\') + ' ' + dest + ' /e /exclude:' + path + '\\exclude.txt';
  65 + else
  66 + xcopyCom = 'cp -a ' + root + '/. ' + dest;
  67 +
  68 + cProcess = child_process.exec(xcopyCom, {cwd: workspace, maxBuffer: 5000 * 1024}, function (error) {
  69 + if (error)
  70 + logError(error);
  71 +
  72 + logSuccess('copy project success');
  73 +
  74 + ep.emit('check-js');
  75 + });
  76 + //output(cProcess);
  77 +});
  78 +
  79 +//检查JS
  80 +ep.tail('check-js', function () {
  81 + ep.emit('minifier-js');
  82 +});
  83 +
  84 +//合并压缩JS
  85 +ep.tail('minifier-js', function () {
  86 + logInfo('handle index.html...');
  87 +
  88 + //再处理首页
  89 + ep.emit('handle-index', function () {
  90 + //递归处理片段
  91 + walk(dest + _static + sp + 'pages', function (item) {
  92 + ep.emit('handle-fragment', item);
  93 + },
  94 + function () {
  95 + //处理线调首页
  96 + handle_real_ctl.handleMain(function () {
  97 + //处理线调地图
  98 + handle_real_ctl.handleMap(function () {
  99 + //处理单屏地图页面
  100 + handle_real_ctl.handleAlonePage(function () {
  101 + //处理单屏主页
  102 + handle_real_ctl.handleAloneHomePage(function () {
  103 + ep.emit('package-jar');
  104 + });
  105 + });
  106 + });
  107 + });
  108 + });
  109 + });
  110 +});
  111 +
  112 +//打包
  113 +ep.tail('package-jar', function (file) {
  114 + var packageCom = 'mvn clean package -DskipTests';
  115 + cProcess = child_process.exec(packageCom, {maxBuffer: 5000 * 1024, cwd: dest}, function (error) {
  116 + if (error)
  117 + logError(error);
  118 +
  119 + logSuccess('mvn package success');
  120 +
  121 + console.log(('成功打包在 ' + dest + sp + 'target 目录下').cyan);
  122 + });
  123 +
  124 + output(cProcess);
  125 +});
  126 +
  127 +//处理片段
  128 +ep.tail('handle-fragment', function (file) {
  129 + //要排除的文件
  130 + for (var i = 0, ex; ex = excludes[i++];) {
  131 + if (file.indexOf(_pages + sp + ex) != -1)
  132 + return false;
  133 + }
  134 + handleJavascript(file, function (mini, $) {
  135 + var jsMini;
  136 + if (mini.inside)
  137 + jsMini = '(function(){' + mini.inside + '\n' + mini.outside + '})();';
  138 + else
  139 + jsMini = '(function(){' + mini.outside + '})();';
  140 +
  141 + write(file, $.html() + '<script>' + jsMini + '</script>');
  142 + });
  143 +
  144 +});
  145 +
  146 +//处理首页
  147 +ep.tail('handle-index', function (cb) {
  148 + var index = dest + _static + sp + 'index.html';
  149 + handleJavascript(index, function (mini, $) {
  150 + var jsMiniText = mini.inside + mini.outside;
  151 +
  152 + var code = md5(jsMiniText);
  153 + fs.open(dest + _static + sp + 'assets' + sp + 'js' + sp + code + '.js', 'a', function (err, fd) {
  154 + if (err)
  155 + logError(err);
  156 +
  157 + fs.write(fd, jsMiniText, function () {
  158 + var ss = $('script');
  159 +
  160 + $(ss[ss.length - 1]).before('<script src="/assets/js/' + code + '.js"></script>\n');
  161 + for (var i = 0, s; s = ss[i++];) {
  162 + $(s).removeAttr('data-exclude')
  163 + .removeAttr('flag')
  164 + .removeAttr('data-autocephaly');
  165 + }
  166 + write(index, $.html());
  167 +
  168 + cb && cb();
  169 + });
  170 + });
  171 + });
  172 +});
  173 +
  174 +
  175 +function handleJavascript(item, cb) {
  176 + //解析页面
  177 + var htmlResult = parse.html(item, dest + _static)
  178 + , jsArray = htmlResult.jsArray
  179 + , $ = htmlResult.$
  180 + , scrStr = htmlResult.scriptString;
  181 +
  182 + //合并压缩
  183 + var mini = minifier.mergeAndMini(jsArray, scrStr, dest + _static, item);
  184 +
  185 + cb && cb(mini, $);
  186 +}
  187 +
  188 +function removeJsLink(s, e) {
  189 + var newArray = [], flag;
  190 +
  191 + for (var i = 0, si; si = s[i++];) {
  192 + flag = 0;
  193 + for (var j = 0, ei; ei = e[j++];) {
  194 + if (si.indexOf(ei) != -1) {
  195 + flag = -1;
  196 + break;
  197 + }
  198 + }
  199 +
  200 + if (flag == 0) {
  201 + newArray.push(si);
  202 + }
  203 + }
  204 + return newArray;
  205 +}
  206 +
  207 +function write(file, text) {
  208 + fs.writeFile(file, text, function (err) {
  209 + if (err) {
  210 + console.log(err.toString().red);
  211 + process.exit();
  212 + }
  213 + //console.log(file.green);
  214 + });
  215 +}
  216 +
  217 +function md5(text) {
  218 + return crypto.createHash("md5").update(text).digest("hex");
  219 +}
  220 +
  221 +
  222 +function walk(path, handleFile, over) {
  223 + fs.readdir(path, function (err, files) {
  224 + if (err) {
  225 + console.log('read dir error'.red);
  226 + } else {
  227 + files.forEach(function (item) {
  228 + var tmpPath = path + sp + item;
  229 + fs.stat(tmpPath, function (err1, stats) {
  230 + if (err1) {
  231 + console.log('stat error');
  232 + } else {
  233 + if (stats.isDirectory()) {
  234 + walk(tmpPath, handleFile);
  235 + } else if (item.indexOf('.html') != -1) {
  236 + handleFile(tmpPath);
  237 + }
  238 + }
  239 + })
  240 + });
  241 +
  242 + over && over();
  243 + }
  244 + });
  245 +}
  246 +
  247 +function logInfo(t) {
  248 + console.log(t);
  249 +}
  250 +
  251 +function logSuccess(t) {
  252 + console.log(t.green);
  253 +}
  254 +
  255 +function logError(e) {
  256 + console.log(e.toString().red);
  257 + process.exit();
  258 +}
  259 +
  260 +function output(cProcess) {
  261 + //标准输出
  262 + cProcess.stdout.on('data', function (s) {
  263 + console.log(s);
  264 + });
265 } 265 }
266 \ No newline at end of file 266 \ No newline at end of file
src/main/resources/message_en_US.properties
@@ -2930,7 +2930,7 @@ txt-2929=Station shift @@ -2930,7 +2930,7 @@ txt-2929=Station shift
2930 txt-2930=Comparison time 2930 txt-2930=Comparison time
2931 txt-2931= 2931 txt-2931=
2932 txt-2932= 2932 txt-2932=
2933 -txt-2933=Route scheduling 2933 +txt-2933=Line scheduling
2934 txt-2934=Map monitoring 2934 txt-2934=Map monitoring
2935 txt-2935=Shift management 2935 txt-2935=Shift management
2936 txt-2936=Hydrogen use management 2936 txt-2936=Hydrogen use management
@@ -3176,7 +3176,7 @@ txt-3175=Based on shift @@ -3176,7 +3176,7 @@ txt-3175=Based on shift
3176 txt-3176=Command type 3176 txt-3176=Command type
3177 txt-3177=Abnormal type 3177 txt-3177=Abnormal type
3178 txt-3178=Modify type 3178 txt-3178=Modify type
3179 -txt-3179=Program version 3179 +txt-3179=Version
3180 txt-3180=License number: 3180 txt-3180=License number:
3181 txt-3181=Run information 3181 txt-3181=Run information
3182 txt-3182=Shift plan 3182 txt-3182=Shift plan
@@ -4517,15 +4517,22 @@ txt-4517=Playback @@ -4517,15 +4517,22 @@ txt-4517=Playback
4517 txt-4518=Select date 4517 txt-4518=Select date
4518 txt-4519=Channel list 4518 txt-4519=Channel list
4519 txt-4520=Split screen 4519 txt-4520=Split screen
4520 -txt-4521=Number of passenger 4520 +txt-4521=Number
4521 txt-4522=Passenger flow inquiry 4521 txt-4522=Passenger flow inquiry
4522 txt-4523=Abnormal type 4522 txt-4523=Abnormal type
4523 txt-4524=Safe driving inquiry 4523 txt-4524=Safe driving inquiry
4524 txt-4525=Format: 00:00 4524 txt-4525=Format: 00:00
4525 txt-4526=Live 4525 txt-4526=Live
4526 txt-4527=Historical data 4526 txt-4527=Historical data
  4527 +txt-4528=Passenger flow showing setting
  4528 +txt-4529=Passenger flow
  4529 +txt-4530=There is a problem with the association between shifts and stations
  4530 +txt-4531=Switch:
4527 txt-5000=Operation successfully 4531 txt-5000=Operation successfully
4528 txt-5001=Operation failed 4532 txt-5001=Operation failed
  4533 +txt-5002=Comfortable
  4534 +txt-5003=Normal
  4535 +txt-5004=Crowded
4529 4536
4530 dataToolsServiceImpl-line132=not .xls .xlsx type file. 4537 dataToolsServiceImpl-line132=not .xls .xlsx type file.
4531 dataToolsServiceImpl-line143=table content is empty. 4538 dataToolsServiceImpl-line143=table content is empty.
src/main/resources/message_zh_CN.properties
@@ -4525,8 +4525,15 @@ txt-4524=安全驾驶查询 @@ -4525,8 +4525,15 @@ txt-4524=安全驾驶查询
4525 txt-4525=格式: 00:00 4525 txt-4525=格式: 00:00
4526 txt-4526=直播 4526 txt-4526=直播
4527 txt-4527=历史数据 4527 txt-4527=历史数据
  4528 +txt-4528=客流显示设置
  4529 +txt-4529=客流信息
  4530 +txt-4530=o(* ̄▽ ̄*)o 班次和站点关联有点问题!!
  4531 +txt-4531=切换为
4528 txt-5000=操作成功 4532 txt-5000=操作成功
4529 txt-5001=操作失败 4533 txt-5001=操作失败
  4534 +txt-5002=舒适
  4535 +txt-5003=一般
  4536 +txt-5004=拥挤
4530 4537
4531 dataToolsServiceImpl-line132=非.xls .xlsx 格式文件! 4538 dataToolsServiceImpl-line132=非.xls .xlsx 格式文件!
4532 dataToolsServiceImpl-line143=表格内容为空! 4539 dataToolsServiceImpl-line143=表格内容为空!
src/main/resources/static/pages/base/section/js/add-vmap-world.js
@@ -80,14 +80,14 @@ var SectionVmapWorlds = function() { @@ -80,14 +80,14 @@ var SectionVmapWorlds = function() {
80 }, 80 },
81 // 根据名称获取坐标. 81 // 根据名称获取坐标.
82 sectionsNameToPoints : function(sectionNames, callback) { 82 sectionsNameToPoints : function(sectionNames, callback) {
83 - var arguments = new Array(); 83 + var args = new Array();
84 for (var i = 0;i < sectionNames.length;i++) { 84 for (var i = 0;i < sectionNames.length;i++) {
85 - arguments.push('searchComplete' + i); 85 + args.push('searchComplete' + i);
86 } 86 }
87 - arguments.push(function(... args) {  
88 - callback(args); 87 + args.push(function() {
  88 + callback(arguments);
89 }) 89 })
90 - var proxy = EventProxy.create(arguments); 90 + var proxy = EventProxy.create(args);
91 sectionNames.forEach(function(item, idx) { 91 sectionNames.forEach(function(item, idx) {
92 var localSearch = new BMap.LocalSearch(mapB); 92 var localSearch = new BMap.LocalSearch(mapB);
93 localSearch.setSearchCompleteCallback(function (searchResult) { 93 localSearch.setSearchCompleteCallback(function (searchResult) {
src/main/resources/static/pages/home.html
@@ -32,7 +32,7 @@ @@ -32,7 +32,7 @@
32 } 32 }
33 33
34 .system_change_log .label{ 34 .system_change_log .label{
35 - width: 55px; 35 + width: 75px;
36 display: inline-block; 36 display: inline-block;
37 padding: 0 10px; 37 padding: 0 10px;
38 line-height: 1.5; 38 line-height: 1.5;
@@ -59,11 +59,11 @@ @@ -59,11 +59,11 @@
59 } 59 }
60 </style> 60 </style>
61 <div class="system_change_log"> 61 <div class="system_change_log">
62 - <h2 style="text-indent: 35px;margin: 10px 0 5px;">2023-09-16 更新说明 Changelog</h2> 62 + <h2 style="text-indent: 35px;margin: 10px 0 5px;">2024-06-16 System Changelog</h2>
63 <br><br> 63 <br><br>
64 <ul> 64 <ul>
65 - <li class="sub_title"><h6>线调、油电管理</h6></li>  
66 - <li><span class="label s_c_change">$$$$$${txt-4028}</span></li> 65 + <li class="sub_title"><h6>Global</h6></li>
  66 + <li><span class="label s_c_change">$$$$$${txt-4028}</span>1.System Internationalization</li>
67 </ul> 67 </ul>
68 68
69 </div> 69 </div>
src/main/resources/static/pages/permission/authorize_all/user_auth.html
@@ -76,7 +76,7 @@ @@ -76,7 +76,7 @@
76 <li><label><input class="uk-checkbox" type="checkbox" data-event="fbzdzx_config"> $$$$$${txt-1181}</label></li> 76 <li><label><input class="uk-checkbox" type="checkbox" data-event="fbzdzx_config"> $$$$$${txt-1181}</label></li>
77 <li><label><input class="uk-checkbox" type="checkbox" data-event="tts_config"> TTS</label></li> 77 <li><label><input class="uk-checkbox" type="checkbox" data-event="tts_config"> TTS</label></li>
78 <li><label><input class="uk-checkbox" type="checkbox" data-event="signal_state"> $$$$$${txt-3116}</label></li> 78 <li><label><input class="uk-checkbox" type="checkbox" data-event="signal_state"> $$$$$${txt-3116}</label></li>
79 - <li><label><input class="uk-checkbox" type="checkbox" data-event="kl_config"> 客流信息</label></li> 79 + <li><label><input class="uk-checkbox" type="checkbox" data-event="kl_config"> $$$$$${txt-4529}</label></li>
80 </ul> 80 </ul>
81 </div> 81 </div>
82 <div> 82 <div>
src/main/resources/static/real_control_v2/fragments/home/tooltip.html
@@ -61,13 +61,13 @@ @@ -61,13 +61,13 @@
61 <div><span class="field">$$$$$${txt-4521}:</span>{{kl.num}}</div> 61 <div><span class="field">$$$$$${txt-4521}:</span>{{kl.num}}</div>
62 {{/if}} 62 {{/if}}
63 {{if kl !=null && kl.num <= 5}} 63 {{if kl !=null && kl.num <= 5}}
64 - <div><span class="field">状态:</span><a href="javascript:;" style="color:green" onclick="javascript:gb_map_play_back.showPhoto('{{kl.photo}}');">舒适</a></div> 64 + <div><span class="field">$$$$$${txt-3621}</span><a href="javascript:;" style="color:green" onclick="javascript:gb_map_play_back.showPhoto('{{kl.photo}}');">$$$$$${txt-5002}</a></div>
65 {{/if}} 65 {{/if}}
66 {{if kl !=null && kl.num > 5 && kl.num <= 10}} 66 {{if kl !=null && kl.num > 5 && kl.num <= 10}}
67 - <div><span class="field">状态:</span><a href="javascript:;" style="color:chocolate" onclick="javascript:gb_map_play_back.showPhoto('{{kl.photo}}');">一般</a></div> 67 + <div><span class="field">$$$$$${txt-3621}</span><a href="javascript:;" style="color:chocolate" onclick="javascript:gb_map_play_back.showPhoto('{{kl.photo}}');">$$$$$${txt-5003}</a></div>
68 {{/if}} 68 {{/if}}
69 {{if kl !=null && kl.num > 10}} 69 {{if kl !=null && kl.num > 10}}
70 - <div><span class="field">状态:</span><a href="javascript:;" style="color:red" onclick="javascript:gb_map_play_back.showPhoto('{{kl.photo}}');">拥挤</a></div> 70 + <div><span class="field">$$$$$${txt-3621}</span><a href="javascript:;" style="color:red" onclick="javascript:gb_map_play_back.showPhoto('{{kl.photo}}');">$$$$$${txt-5004}</a></div>
71 {{/if}} 71 {{/if}}
72 </div> 72 </div>
73 73
src/main/resources/static/real_control_v2/fragments/north/nav/all_devices.html
@@ -353,7 +353,7 @@ @@ -353,7 +353,7 @@
353 }); 353 });
354 }, 354 },
355 delete: function(device){ 355 delete: function(device){
356 - alt_confirm(i18n('txt-73'), function(){ 356 + alt_confirm(i18n('txt-73', [device]), function(){
357 gb_common.$post('/gps/removeRealGps', {device: device}, function(){ 357 gb_common.$post('/gps/removeRealGps', {device: device}, function(){
358 notify_succ(i18n('txt-2329')); 358 notify_succ(i18n('txt-2329'));
359 query(); 359 query();
src/main/resources/static/real_control_v2/fragments/north/nav/kl_config.html
@@ -2,22 +2,22 @@ @@ -2,22 +2,22 @@
2 <div class="uk-modal-dialog" style="width: 530px;"> 2 <div class="uk-modal-dialog" style="width: 530px;">
3 <a href="" class="uk-modal-close uk-close"></a> 3 <a href="" class="uk-modal-close uk-close"></a>
4 <div class="uk-modal-header"> 4 <div class="uk-modal-header">
5 - <h2>客流显示设置</h2></div> 5 + <h2>$$$$$${txt-4528}</h2></div>
6 6
7 <p style="border-bottom: 1px solid #efefef;color: grey;padding-bottom: 9px;"> 7 <p style="border-bottom: 1px solid #efefef;color: grey;padding-bottom: 9px;">
8 <small> 8 <small>
9 <i class="uk-icon-question-circle"> </i> 9 <i class="uk-icon-question-circle"> </i>
10 - 设置项将会保存在本地客户端,清理缓存和更换电脑会重置.</small> 10 + $$$$$${txt-30}</small>
11 </p> 11 </p>
12 <form class="uk-form uk-form-horizontal"> 12 <form class="uk-form uk-form-horizontal">
13 <div class="uk-grid"> 13 <div class="uk-grid">
14 <div class="uk-width-2-3 uk-container-center"> 14 <div class="uk-width-2-3 uk-container-center">
15 <div class="uk-form-row"> 15 <div class="uk-form-row">
16 - <label class="uk-form-label">是否启用</label> 16 + <label class="uk-form-label">$$$$$${txt-3199}</label>
17 <div class="uk-form-controls"> 17 <div class="uk-form-controls">
18 <select name="enable"> 18 <select name="enable">
19 - <option value="1">启用</option>  
20 - <option value="0">禁用</option> 19 + <option value="1">$$$$$${txt-3861}</option>
  20 + <option value="0">$$$$$${txt-4160}</option>
21 </select> 21 </select>
22 </div> 22 </div>
23 </div> 23 </div>
@@ -25,8 +25,8 @@ @@ -25,8 +25,8 @@
25 </div> 25 </div>
26 26
27 <div class="uk-modal-footer uk-text-right" style="margin-bottom: -20px;"> 27 <div class="uk-modal-footer uk-text-right" style="margin-bottom: -20px;">
28 - <button type="button" class="uk-button uk-modal-close">取消</button>  
29 - <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> &nbsp;保存</button> 28 + <button type="button" class="uk-button uk-modal-close">$$$$$${txt-3817}</button>
  29 + <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> &nbsp;$$$$$${txt-3864}</button>
30 </div> 30 </div>
31 </form> 31 </form>
32 </div> 32 </div>
src/main/resources/static/real_control_v2/js/data/data_toolbar.js
@@ -188,7 +188,7 @@ var gb_data_menu = [ @@ -188,7 +188,7 @@ var gb_data_menu = [
188 }, 188 },
189 { 189 {
190 "id": 4.5, 190 "id": 4.5,
191 - "text": "客流信息", 191 + "text": i18n('txt-4529'),
192 "event": "kl_config" 192 "event": "kl_config"
193 } 193 }
194 194
src/main/resources/static/real_control_v2/js/line_schedule/sch_table.js
@@ -875,7 +875,7 @@ var gb_schedule_table = (function () { @@ -875,7 +875,7 @@ var gb_schedule_table = (function () {
875 continue; 875 continue;
876 876
877 $(".schedule-wrap span.warn_multi_station[data-updown="+(k.split('_')[1])+"]", wrap) 877 $(".schedule-wrap span.warn_multi_station[data-updown="+(k.split('_')[1])+"]", wrap)
878 - .html('o(* ̄▽ ̄*)o 班次和站点关联有点问题!!').show(); 878 + .html(i18n('txt-4530')).show();
879 } 879 }
880 880
881 errorCodeData = data; 881 errorCodeData = data;
src/main/resources/static/real_control_v2/mapmonitor/fragments/map_infowindow.html
@@ -36,13 +36,13 @@ @@ -36,13 +36,13 @@
36 <p>$$$$$${txt-4521}:{{kl.num}}</p> 36 <p>$$$$$${txt-4521}:{{kl.num}}</p>
37 {{/if}} 37 {{/if}}
38 {{if kl !=null && kl.num <= 5}} 38 {{if kl !=null && kl.num <= 5}}
39 - <p>$$$$$${txt-3621}<a href="javascript:;" style="color:green" onclick="javascript:gb_map_play_back.showPhoto('{{photo}}');">舒适</a></p> 39 + <p>$$$$$${txt-3621}<a href="javascript:;" style="color:green" onclick="javascript:gb_map_play_back.showPhoto('{{photo}}');">$$$$$${txt-5002}</a></p>
40 {{/if}} 40 {{/if}}
41 {{if kl !=null && kl.num > 5 && kl.num <= 10}} 41 {{if kl !=null && kl.num > 5 && kl.num <= 10}}
42 - <p>$$$$$${txt-3621}<a href="javascript:;" style="color:chocolate" onclick="javascript:gb_map_play_back.showPhoto('{{photo}}');">一般</a></p> 42 + <p>$$$$$${txt-3621}<a href="javascript:;" style="color:chocolate" onclick="javascript:gb_map_play_back.showPhoto('{{photo}}');">$$$$$${txt-5003}</a></p>
43 {{/if}} 43 {{/if}}
44 {{if kl !=null && kl.num > 10}} 44 {{if kl !=null && kl.num > 10}}
45 - <p>$$$$$${txt-3621}<a href="javascript:;" style="color:red" onclick="javascript:gb_map_play_back.showPhoto('{{photo}}');">拥挤</a></p> 45 + <p>$$$$$${txt-3621}<a href="javascript:;" style="color:red" onclick="javascript:gb_map_play_back.showPhoto('{{photo}}');">$$$$$${txt-5004}</a></p>
46 {{/if}} 46 {{/if}}
47 {{if energy == 0}} 47 {{if energy == 0}}
48 <div><span class="field">$$$$$${txt-4435}</span><span style="color: red;">{{energy}}%&nbsp;($$$$$${txt-3832})</span></div> 48 <div><span class="field">$$$$$${txt-4435}</span><span style="color: red;">{{energy}}%&nbsp;($$$$$${txt-3832})</span></div>