Compare commits

...

3 Commits

Author SHA1 Message Date
阿斌
2430b66bc3
Pre Merge pull request !36 from 阿斌/N/A 2025-11-21 04:15:42 +00:00
lin
4b1ea8ad30 优化错误提示 2025-11-21 12:15:26 +08:00
阿斌
da98101aac
update src/main/resources/civilCode.csv.
行政规划错误。江苏南通海门市,修改为海门区,浙江杭州删除下城区、江干区,新增钱塘区,临平区

Signed-off-by: 阿斌 <38912748@qq.com>
2024-12-15 08:58:42 +00:00
20 changed files with 371 additions and 48 deletions

View File

@ -138,7 +138,7 @@ public class SIPCommanderForPlatform implements ISIPCommanderForPlatform {
@Override
public String keepalive(Platform parentPlatform, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) throws SipException, InvalidArgumentException, ParseException {
log.info("[国标级联] 发送心跳, 上级平台编号 {}", parentPlatform.getServerGBId());
log.info("[国标级联] 发送心跳, 上级平台 {}/{}", parentPlatform.getName(), parentPlatform.getServerGBId());
String characterSet = parentPlatform.getCharacterSet();
StringBuffer keepaliveXml = new StringBuffer(200);
keepaliveXml.append("<?xml version=\"1.0\" encoding=\"")

View File

@ -55,7 +55,11 @@ public class CachedBodyHttpServletRequest extends HttpServletRequestWrapper {
return "";
}
}
cachedBodyString = new String(cachedBody, StandardCharsets.UTF_8);
if (cachedBody != null) {
cachedBodyString = new String(cachedBody, StandardCharsets.UTF_8);
} else {
cachedBodyString = "";
}
}
return cachedBodyString;
}
@ -72,7 +76,7 @@ public class CachedBodyHttpServletRequest extends HttpServletRequestWrapper {
return new byte[0];
}
}
return cachedBody;
return cachedBody != null ? cachedBody : new byte[0];
}
private void cacheInputStream() throws IOException {
@ -86,6 +90,9 @@ public class CachedBodyHttpServletRequest extends HttpServletRequestWrapper {
}
cachedBody = baos.toByteArray();
log.debug("成功缓存请求体,长度: {}", cachedBody.length);
} catch (Exception e) {
log.error("缓存请求体时发生异常: ", e);
cachedBody = new byte[0];
}
}
@ -96,7 +103,8 @@ public class CachedBodyHttpServletRequest extends HttpServletRequestWrapper {
private final ByteArrayInputStream inputStream;
public CachedBodyServletInputStream(byte[] body) {
this.inputStream = new ByteArrayInputStream(body);
// 处理null值情况
this.inputStream = new ByteArrayInputStream(body != null ? body : new byte[0]);
}
@Override
@ -119,7 +127,4 @@ public class CachedBodyHttpServletRequest extends HttpServletRequestWrapper {
return inputStream.read();
}
}
}
}

View File

@ -66,7 +66,9 @@ public class SignAuthenticationFilter extends OncePerRequestFilter {
out.close();
return;
}
if (SyTokenManager.INSTANCE.appMap.get(appKey) == null) {
// 添加空值检查
if (SyTokenManager.INSTANCE.appMap == null || SyTokenManager.INSTANCE.appMap.get(appKey) == null) {
log.info("[SY-接口验签] appKey {} 对应的 secret 不存在, 请求地址: {} ", appKey, requestURI);
response.setStatus(Response.OK);
PrintWriter out = response.getWriter();
@ -86,11 +88,16 @@ public class SignAuthenticationFilter extends OncePerRequestFilter {
if (paramKey.equals("sign")) {
continue;
}
beforeSign.append(paramKey).append(parameterMap.get(paramKey)[0]);
// 添加数组长度检查
String[] values = parameterMap.get(paramKey);
if (values != null && values.length > 0) {
beforeSign.append(paramKey).append(values[0]);
}
}
// 如果是post请求的json消息拼接body字符串
if (request.getContentLength() > 0
&& request.getMethod().equalsIgnoreCase("POST")
&& request.getContentType() != null
&& request.getContentType().equalsIgnoreCase(MediaType.APPLICATION_JSON_VALUE)) {
// 读取body内容 - 使用自定义缓存机制
String requestBody = request.getCachedBody();
@ -101,7 +108,19 @@ public class SignAuthenticationFilter extends OncePerRequestFilter {
log.warn("[SY-接口验签] 请求体内容为空");
}
}
beforeSign.append(SyTokenManager.INSTANCE.appMap.get(appKey));
// 添加空值检查
String secret = SyTokenManager.INSTANCE.appMap.get(appKey);
if (secret == null) {
log.info("[SY-接口验签] 无法获取appKey {} 对应的 secret, 请求地址: {} ", appKey, requestURI);
response.setStatus(Response.OK);
PrintWriter out = response.getWriter();
out.println(getErrorResult(1, "参数非法"));
out.close();
return;
}
beforeSign.append(secret);
// 生成签名
String buildSign = SmUtil.sm3(beforeSign.toString());
if (!buildSign.equals(sign)) {
@ -115,6 +134,15 @@ public class SignAuthenticationFilter extends OncePerRequestFilter {
// 验证请求时间戳
long timestamp = Long.parseLong(timestampStr);
long currentTimeMillis = System.currentTimeMillis();
// 添加空值检查
if (SyTokenManager.INSTANCE.expires == null) {
log.info("[SY-接口验签] expires配置为空, 请求地址: {} ", requestURI);
response.setStatus(Response.OK);
PrintWriter out = response.getWriter();
out.println(getErrorResult(2, "签名错误"));
out.close();
return;
}
if (currentTimeMillis > SyTokenManager.INSTANCE.expires * 60 * 1000 + timestamp ) {
log.info("[SY-接口验签] 时间戳已经过期, 请求时间戳:{} 当前时间: {}, 过期时间: {}, 请求地址: {} ", timestamp, currentTimeMillis, timestamp + SyTokenManager.INSTANCE.expires * 60 * 1000, requestURI);
response.setStatus(Response.OK);
@ -124,11 +152,29 @@ public class SignAuthenticationFilter extends OncePerRequestFilter {
return;
}
// accessToken校验
// 添加空值检查
if (SyTokenManager.INSTANCE.adminToken == null) {
log.info("[SY-接口验签] adminToken配置为空, 请求地址: {} ", requestURI);
response.setStatus(Response.OK);
PrintWriter out = response.getWriter();
out.println(getErrorResult(2, "签名错误"));
out.close();
return;
}
if (accessToken.equals(SyTokenManager.INSTANCE.adminToken)) {
log.info("[SY-接口验签] adminToken已经默认放行, 请求地址: {} ", requestURI);
chain.doFilter(request, response);
return;
}else {
// 添加空值检查
if (SyTokenManager.INSTANCE.sm4Key == null) {
log.info("[SY-接口验签] sm4Key配置为空, 请求地址: {} ", requestURI);
response.setStatus(Response.OK);
PrintWriter out = response.getWriter();
out.println(getErrorResult(2, "签名错误"));
out.close();
return;
}
// 对token进行解密
SM4 sm4 = SmUtil.sm4(HexUtil.decodeHex(SyTokenManager.INSTANCE.sm4Key));
String decryptStr = sm4.decryptStr(accessToken, CharsetUtil.CHARSET_UTF_8);
@ -142,7 +188,7 @@ public class SignAuthenticationFilter extends OncePerRequestFilter {
}
JSONObject jsonObject = JSON.parseObject(decryptStr);
Long expirationTime = jsonObject.getLong("expirationTime");
if (expirationTime < System.currentTimeMillis()) {
if (expirationTime == null || expirationTime < System.currentTimeMillis()) {
log.info("[SY-接口验签] accessToken 已经过期, 请求地址: {} ", requestURI);
response.setStatus(Response.OK);
PrintWriter out = response.getWriter();
@ -151,8 +197,17 @@ public class SignAuthenticationFilter extends OncePerRequestFilter {
return;
}
}
}catch (NumberFormatException e) {
log.info("[SY-接口验签] 时间戳格式错误, 请求地址: {} ", requestURI);
response.setStatus(Response.OK);
if (!response.isCommitted()) {
PrintWriter out = response.getWriter();
out.println(getErrorResult(2, "签名错误"));
out.close();
}
return;
}catch (Exception e) {
log.info("[SY-接口验签] 读取body失败, 请求地址: {} ", requestURI, e);
log.info("[SY-接口验签] 读取body失败, 请求地址: {} ", requestURI, e);
response.setStatus(Response.OK);
if (!response.isCommitted()) {
PrintWriter out = response.getWriter();
@ -171,4 +226,4 @@ public class SignAuthenticationFilter extends OncePerRequestFilter {
return JSON.toJSONString(wvpResult);
}
}
}

View File

@ -861,7 +861,7 @@
320623,如东县,3206
320681,启东市,3206
320682,如皋市,3206
320684,海门,3206
320684,海门,3206
320685,海安市,3206
3207,连云港市,32
320703,连云区,3207
@ -918,8 +918,6 @@
33,浙江省,
3301,杭州市,33
330102,上城区,3301
330103,下城区,3301
330104,江干区,3301
330105,拱墅区,3301
330106,西湖区,3301
330108,滨江区,3301
@ -927,6 +925,8 @@
330110,余杭区,3301
330111,富阳区,3301
330112,临安区,3301
330113,临平区,3301
330114,钱塘区,3301
330122,桐庐县,3301
330127,淳安县,3301
330182,建德市,3301

1 编号 名称 上级
861 320623 如东县 3206
862 320681 启东市 3206
863 320682 如皋市 3206
864 320684 海门市 海门区 3206
865 320685 海安市 3206
866 3207 连云港市 32
867 320703 连云区 3207
918 33 浙江省
919 3301 杭州市 33
920 330102 上城区 3301
330103 下城区 3301
330104 江干区 3301
921 330105 拱墅区 3301
922 330106 西湖区 3301
923 330108 滨江区 3301
925 330110 余杭区 3301
926 330111 富阳区 3301
927 330112 临安区 3301
928 330113 临平区 3301
929 330114 钱塘区 3301
930 330122 桐庐县 3301
931 330127 淳安县 3301
932 330182 建德市 3301

View File

@ -316,7 +316,15 @@ export default {
setTimeout(() => {
this.initData()
}, 1000)
}).finally(() => {
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
.finally(() => {
itemData.playLoading = false
})
},

View File

@ -333,7 +333,15 @@ export default {
message: '保存成功'
})
this.$emit('submitSuccess')
}).finally(() => {
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
.finally(() => {
this.loading = false
})
} else {
@ -346,7 +354,15 @@ export default {
if (this.saveSuccess) {
this.saveSuccess()
}
}).finally(() => {
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
.finally(() => {
this.loading = false
})
}
@ -371,9 +387,15 @@ export default {
message: '重置成功 已保存'
})
this.getCommonChannel(this.form.gbId)
}).catch((error) => {
console.error(error)
}).finally(() => {
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
.finally(() => {
this.loading = false
})
}).catch(() => {
@ -393,6 +415,13 @@ export default {
this.getPaths()
this.getRegionPaths()
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
.finally(() => {
this.loading = false
})

View File

@ -373,6 +373,13 @@ export default {
node.parent.expand()
this.$emit('onChannelChange', node.data.deviceId)
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
},
addChannelFormDevice: function(id, node) {
this.$refs.gbDeviceSelect.openDialog((rows) => {
@ -393,7 +400,15 @@ export default {
this.$emit('onChannelChange', node.data.deviceId)
node.loaded = false
node.expand()
}).finally(() => {
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
.finally(() => {
this.loading = false
})
})
@ -413,7 +428,15 @@ export default {
this.$emit('onChannelChange', node.data.deviceId)
node.loaded = false
node.expand()
}).finally(() => {
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
.finally(() => {
this.loading = false
})
})

View File

@ -73,6 +73,13 @@ export default {
}
this.initMap()
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
},
initMap(){
let center = fromLonLat([116.41020, 39.915119])

View File

@ -119,7 +119,6 @@ import VueEasyTree from '@wchbrad/vue-easy-tree'
import regionEdit from './../dialog/regionEdit'
import gbDeviceSelect from './../dialog/GbDeviceSelect'
import GbChannelSelect from '../dialog/GbChannelSelect.vue'
import chooseCivilCode from '@/views/dialog/chooseCivilCode.vue'
export default {
name: 'DeviceTree',
@ -199,6 +198,7 @@ export default {
})
},
loadNode: function(node, resolve) {
console.log(22222)
if (node.level === 0) {
resolve([{
treeId: '',
@ -364,8 +364,13 @@ export default {
this.$emit('onChannelChange', node.data.deviceId)
node.parent.loaded = false
node.parent.expand()
}).catch(function(error) {
console.log(error)
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
},
addChannelFormDevice: function(id, node) {

View File

@ -602,6 +602,13 @@ export default {
this.startBroadcast(streamInfo.rtc)
}
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
} else if (this.broadcastStatus === 1) {
this.broadcastStatus = -1
this.broadcastRtc.close()
@ -690,6 +697,13 @@ export default {
this.broadcastRtc.close()
this.broadcastStatus = -1
this.$store.dispatch('play/broadcastStop', [this.channelId])
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
}
}
}

View File

@ -236,7 +236,13 @@ export default {
}).then((data) => {
this.total = data.total
this.deviceList = data.list
}).finally(() => {
}).catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
}).finally(() => {
this.getDeviceListLoading = false
})
},
@ -256,6 +262,13 @@ export default {
.then((data) => {
this.getDeviceList()
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
})
},
showChannelList: function(row) {
@ -284,7 +297,15 @@ export default {
this.$refs.syncChannelProgress.openDialog(itemData.deviceId, () => {
this.getDeviceList()
})
}).finally(() => {
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
.finally(() => {
this.getDeviceList()
})
},

View File

@ -63,8 +63,12 @@ export default {
})
this.jtChannel = data
})
.catch(function(error) {
console.log(error)
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
} else {
this.$store.dispatch('jtDevice/addChannel', this.jtChannel)
@ -76,8 +80,12 @@ export default {
})
this.jtChannel = data
})
.catch(function(error) {
console.log(error)
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
}
},

View File

@ -234,8 +234,12 @@ export default {
this.initData()
}, 1000)
})
.catch(err => {
console.error(err)
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
.finally(() => {
this.isLoging = false
@ -266,8 +270,12 @@ export default {
.then((data) => {
this.initData()
})
.catch(function(error) {
console.error(error)
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
},
getSnap: function(row) {
@ -302,8 +310,12 @@ export default {
},
updateChannel: function(row) {
this.$store.dispatch('jtDevice/updateChannel', row)
.catch((e) => {
console.log(e)
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
},
refresh: function() {

View File

@ -256,6 +256,13 @@ export default {
.then(data => {
this.getList()
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
}).catch(() => {
})
@ -330,6 +337,13 @@ export default {
this.serverId = data.addOn.serverId
this.$refs.configInfo.openDialog(data, 'jt1078Config')
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
},
queryAttribute: function(itemData) {
this.$store.dispatch('jtDevice/queryAttribute', itemData.phoneNumber)

View File

@ -116,9 +116,16 @@ export default {
this.$store.dispatch('user/login', this.loginForm).then((re) => {
this.$router.push({ path: this.redirect || '/' })
this.loading = false
}).catch(() => {
this.loading = false
})
}).catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
.finally(() => {
this.loading = false
})
} else {
console.log('error submit!!')
return false

View File

@ -242,6 +242,13 @@ export default {
.then(data => {
this.play(data)
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
}
},
{
@ -253,6 +260,13 @@ export default {
.then(data => {
this.editPosition(data)
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
}
},
{
@ -264,6 +278,13 @@ export default {
.then(data => {
this.edit(data)
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
}
}
]
@ -345,7 +366,15 @@ export default {
streamInfo: data,
hasAudio: channel.hasAudio
})
}).finally(() => {
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
.finally(() => {
loading.close()
})
},
@ -444,6 +473,13 @@ export default {
this.$refs.deviceTree.refresh('channel' + channel.gbId)
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
},
showDrawThinBox: function(show){
this.showDrawThin = show
@ -453,6 +489,13 @@ export default {
if (this.drawThinId !== null) {
//
this.$store.dispatch('commonChanel/clearThin', this.drawThinId)
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
this.drawThinId = null
}
if (this.drawThinLayer !== null) {
@ -496,6 +539,13 @@ export default {
this.showDrawThinLayer(drawThinId)
})
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
.finally(() => {
this.quicklyDrawThinLoading = false
})
@ -556,6 +606,13 @@ export default {
this.showDrawThinLayer(drawThinId)
})
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
.finally(() => {
this.boxDrawThinLoading = false
})
@ -590,6 +647,13 @@ export default {
})
this.showDrawThinBox(false)
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
.finally(() => {
this.saveDrawThinLoading = false
})
@ -607,6 +671,13 @@ export default {
message: '数据还原成功'
})
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
})
}
}

View File

@ -158,7 +158,11 @@ export default {
this.initData()
})
.catch((error) => {
console.error(error)
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
}).catch(() => {

View File

@ -243,7 +243,11 @@ export default {
})
})
.catch((error) => {
console.log(error)
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
.finally(() => {
row.playLoading = false
@ -258,7 +262,11 @@ export default {
})
})
.catch((error) => {
console.log(error)
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
},
queryCloudRecords: function(row) {
@ -278,6 +286,13 @@ export default {
})
this.initData()
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
}).catch(() => {
})
},

View File

@ -244,6 +244,13 @@ export default {
hasAudio: true
})
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
.finally(() => {
row.playLoading = false
})
@ -263,6 +270,13 @@ export default {
})
this.initData()
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
}).catch(() => {
})
@ -299,6 +313,13 @@ export default {
this.initData()
this.$refs.pushListTable.clearSelection()
})
.catch((error) => {
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
}).catch(() => {
})

View File

@ -145,7 +145,11 @@ export default {
this.getUserList()
})
.catch((error) => {
console.error(error)
this.$message({
showClose: true,
message: error,
type: 'error'
})
})
}).catch(() => {