diff --git a/start/src/main/resources/bootstrap.yml b/start/src/main/resources/bootstrap.yml
index dfff433..272b3e7 100644
--- a/start/src/main/resources/bootstrap.yml
+++ b/start/src/main/resources/bootstrap.yml
@@ -1,8 +1,8 @@
spring:
config:
import:
-# - classpath:nacos-prod.yml
- - classpath:nacos.yml
+ - classpath:nacos-prod.yml
+# - classpath:nacos.yml
- classpath:kafka.yml
- classpath:sdk.yml
- classpath:swagger.yml
diff --git a/start/src/main/resources/kafka.yml b/start/src/main/resources/kafka.yml
index 36b8439..fc17624 100644
--- a/start/src/main/resources/kafka.yml
+++ b/start/src/main/resources/kafka.yml
@@ -19,7 +19,14 @@ spring:
personnel-positioning:
kafka:
location:
- enabled: ${PERSONNEL_POSITIONING_KAFKA_LOCATION_ENABLED:false}
+ enabled: ${PERSONNEL_POSITIONING_KAFKA_LOCATION_ENABLED:true}
topic: ${PERSONNEL_POSITIONING_KAFKA_LOCATION_TOPIC:point_push}
- group-id: ${PERSONNEL_POSITIONING_KAFKA_LOCATION_GROUP_ID:personnel-position-location-probe}
+ # Each WebSocket-serving instance must consume every point so it can notify its own clients.
+ group-id: ${PERSONNEL_POSITIONING_KAFKA_LOCATION_GROUP_ID:personnel-position-location-${HOSTNAME:standalone}}
max-log-bytes: ${PERSONNEL_POSITIONING_KAFKA_LOCATION_MAX_LOG_BYTES:16384}
+ websocket:
+ location:
+ enabled: ${PERSONNEL_POSITIONING_WEBSOCKET_LOCATION_ENABLED:true}
+ allowed-origins: ${PERSONNEL_POSITIONING_WEBSOCKET_LOCATION_ALLOWED_ORIGINS:*}
+ send-time-limit-ms: ${PERSONNEL_POSITIONING_WEBSOCKET_LOCATION_SEND_TIME_LIMIT_MS:10000}
+ buffer-size-limit-bytes: ${PERSONNEL_POSITIONING_WEBSOCKET_LOCATION_BUFFER_SIZE_LIMIT_BYTES:524288}
diff --git a/web-adapter/pom.xml b/web-adapter/pom.xml
index 34bf4e0..5662def 100644
--- a/web-adapter/pom.xml
+++ b/web-adapter/pom.xml
@@ -30,5 +30,9 @@
com.zcloud.personnel.positioning
web-client
+
+ org.springframework
+ spring-websocket
+
diff --git a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmDisposeRecordController.java b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmDisposeRecordController.java
index c9acb2d..810914c 100644
--- a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmDisposeRecordController.java
+++ b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmDisposeRecordController.java
@@ -88,14 +88,14 @@ public class AlarmDisposeRecordController {
private void fillCorpinfo(AlarmDisposeRecordAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
private void fillCorpinfo(AlarmDisposeRecordUpdateCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
}
diff --git a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmRecordController.java b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmRecordController.java
index 31ea5a0..59e68c8 100644
--- a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmRecordController.java
+++ b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmRecordController.java
@@ -101,14 +101,14 @@ public class AlarmRecordController {
private void fillCorpinfo(AlarmRecordAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
private void fillCorpinfo(AlarmRecordUpdateCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
}
diff --git a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmRecordTargetController.java b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmRecordTargetController.java
index 893801d..a5b2b69 100644
--- a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmRecordTargetController.java
+++ b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmRecordTargetController.java
@@ -88,14 +88,14 @@ public class AlarmRecordTargetController {
private void fillCorpinfo(AlarmRecordTargetAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
private void fillCorpinfo(AlarmRecordTargetUpdateCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
}
diff --git a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmRuleController.java b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmRuleController.java
index 37dfc5c..06f23f5 100644
--- a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmRuleController.java
+++ b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmRuleController.java
@@ -117,14 +117,14 @@ public class AlarmRuleController {
private void fillCorpinfo(AlarmRuleAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (cmd.getCorpinfoId() == null && ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
private void fillCorpinfo(AlarmRuleUpdateCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (cmd.getCorpinfoId() == null && ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
}
diff --git a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmRuleFenceRelController.java b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmRuleFenceRelController.java
index 4458fd9..96df64c 100644
--- a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmRuleFenceRelController.java
+++ b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmRuleFenceRelController.java
@@ -88,14 +88,14 @@ public class AlarmRuleFenceRelController {
private void fillCorpinfo(AlarmRuleFenceRelAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
private void fillCorpinfo(AlarmRuleFenceRelUpdateCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
}
diff --git a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmRuleItemController.java b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmRuleItemController.java
index cbe162a..2197c7c 100644
--- a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmRuleItemController.java
+++ b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AlarmRuleItemController.java
@@ -88,14 +88,14 @@ public class AlarmRuleItemController {
private void fillCorpinfo(AlarmRuleItemAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
private void fillCorpinfo(AlarmRuleItemUpdateCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
}
diff --git a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AreaController.java b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AreaController.java
index afacbae..67a6401 100644
--- a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AreaController.java
+++ b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/AreaController.java
@@ -60,7 +60,7 @@ public class AreaController {
@ApiOperation("可选区域选项")
@GetMapping("/options")
- public MultiResponse options(@RequestParam(required = false) Long corpinfoId,
+ public MultiResponse options(@RequestParam(required = false) String corpinfoId,
@RequestParam(required = false) String keyword) {
return MultiResponse.of(areaService.listOptions(corpinfoId, keyword));
}
@@ -96,14 +96,14 @@ public class AreaController {
private void fillCorpinfo(AreaAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
private void fillCorpinfo(AreaUpdateCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
}
diff --git a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/FenceController.java b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/FenceController.java
index 85747be..9dbbe3c 100644
--- a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/FenceController.java
+++ b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/FenceController.java
@@ -53,11 +53,11 @@ public class FenceController {
@ApiOperation("公司区域详情")
@GetMapping("/company-area")
- public SingleResponse getCompanyArea(@RequestParam(required = false) Long corpinfoId,
+ public SingleResponse getCompanyArea(@RequestParam(required = false) String corpinfoId,
@RequestParam(required = false) String corpinfoName) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (corpinfoId == null && ssoUser != null && ssoUser.getCompanyId() != null) {
- corpinfoId = ssoUser.getCompanyId();
+ corpinfoId = String.valueOf(ssoUser.getCompanyId());
}
return SingleResponse.of(fenceService.queryCompanyArea(corpinfoId, corpinfoName));
}
@@ -139,21 +139,21 @@ public class FenceController {
private void fillCorpinfo(FenceAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (cmd.getCorpinfoId() == null && ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
private void fillCorpinfo(FenceUpdateCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (cmd.getCorpinfoId() == null && ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
private void fillCorpinfo(FenceCompanyAreaSaveCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (cmd.getCorpinfoId() == null && ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
}
diff --git a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/FencePointController.java b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/FencePointController.java
index c9eed13..92cdba5 100644
--- a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/FencePointController.java
+++ b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/FencePointController.java
@@ -88,14 +88,14 @@ public class FencePointController {
private void fillCorpinfo(FencePointAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
private void fillCorpinfo(FencePointUpdateCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
}
diff --git a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/OpenapiConfigController.java b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/OpenapiConfigController.java
index d76fcf5..36db006 100644
--- a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/OpenapiConfigController.java
+++ b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/OpenapiConfigController.java
@@ -88,14 +88,14 @@ public class OpenapiConfigController {
private void fillCorpinfo(OpenapiConfigAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
private void fillCorpinfo(OpenapiConfigUpdateCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
}
diff --git a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/PersonnelPositioningBiController.java b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/PersonnelPositioningBiController.java
index a252b23..9c99f4d 100644
--- a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/PersonnelPositioningBiController.java
+++ b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/PersonnelPositioningBiController.java
@@ -21,6 +21,7 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
@@ -42,10 +43,11 @@ public class PersonnelPositioningBiController {
return SingleResponse.of(personnelPositioningBiService.queryOverview());
}
- @ApiOperation("公司定位点")
+ @ApiOperation("公司定位点,可按港区过滤")
@GetMapping("/companyLocation/list")
- public MultiResponse listCompanyLocation() {
- return MultiResponse.of(personnelPositioningBiService.listCompanyLocation());
+ public MultiResponse listCompanyLocation(
+ @RequestParam(value = "portArea", required = false) Integer portArea) {
+ return MultiResponse.of(personnelPositioningBiService.listCompanyLocation(portArea));
}
@ApiOperation("公司围栏分页")
diff --git a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/SyncLogController.java b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/SyncLogController.java
index 26c1bfb..8beef8d 100644
--- a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/SyncLogController.java
+++ b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/SyncLogController.java
@@ -88,14 +88,14 @@ public class SyncLogController {
private void fillCorpinfo(SyncLogAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
private void fillCorpinfo(SyncLogUpdateCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
}
diff --git a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/SyncTaskController.java b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/SyncTaskController.java
index 0aa97d9..8241620 100644
--- a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/SyncTaskController.java
+++ b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/SyncTaskController.java
@@ -88,14 +88,14 @@ public class SyncTaskController {
private void fillCorpinfo(SyncTaskAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
private void fillCorpinfo(SyncTaskUpdateCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
}
diff --git a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/TerminalBindController.java b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/TerminalBindController.java
index f7e8c59..9a8c86f 100644
--- a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/TerminalBindController.java
+++ b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/TerminalBindController.java
@@ -88,14 +88,14 @@ public class TerminalBindController {
private void fillCorpinfo(TerminalBindAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
private void fillCorpinfo(TerminalBindUpdateCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
}
diff --git a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/TerminalController.java b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/TerminalController.java
index 0011d27..92397a7 100644
--- a/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/TerminalController.java
+++ b/web-adapter/src/main/java/com/zcloud/personnel/positioning/web/TerminalController.java
@@ -208,28 +208,28 @@ public class TerminalController {
private void fillCorpinfo(TerminalAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
private void fillCorpinfo(TerminalUpdateCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
private void fillCorpinfo(TerminalCardSaveCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (cmd.getCorpinfoId() == null && ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
private void fillCorpinfo(TerminalAppSaveCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if (cmd.getCorpinfoId() == null && ssoUser != null && ssoUser.getCompanyId() != null) {
- cmd.setCorpinfoId(ssoUser.getCompanyId());
+ cmd.setCorpinfoId(String.valueOf(ssoUser.getCompanyId()));
}
}
}
diff --git a/web-adapter/src/main/java/com/zcloud/personnel/positioning/websocket/PersonLocationWebSocketConfiguration.java b/web-adapter/src/main/java/com/zcloud/personnel/positioning/websocket/PersonLocationWebSocketConfiguration.java
new file mode 100644
index 0000000..e576e48
--- /dev/null
+++ b/web-adapter/src/main/java/com/zcloud/personnel/positioning/websocket/PersonLocationWebSocketConfiguration.java
@@ -0,0 +1,62 @@
+package com.zcloud.personnel.positioning.websocket;
+
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.util.StringUtils;
+import org.springframework.web.socket.config.annotation.EnableWebSocket;
+import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
+import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Configuration
+@EnableWebSocket
+@RequiredArgsConstructor
+@ConditionalOnProperty(
+ prefix = "personnel-positioning.websocket.location",
+ name = "enabled",
+ havingValue = "true",
+ matchIfMissing = true
+)
+public class PersonLocationWebSocketConfiguration implements WebSocketConfigurer {
+ private final PersonLocationWebSocketHandler handler;
+
+ @Value("${application.gateway:personnelPosition}")
+ private String gateway;
+
+ @Value("${personnel-positioning.websocket.location.allowed-origins:*}")
+ private String allowedOrigins;
+
+ @Override
+ public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
+ registry.addHandler(handler, endpointPath())
+ .setAllowedOrigins(originValues());
+ }
+
+ private String endpointPath() {
+ String value = gateway == null ? "" : gateway.trim();
+ while (value.startsWith("/")) {
+ value = value.substring(1);
+ }
+ while (value.endsWith("/")) {
+ value = value.substring(0, value.length() - 1);
+ }
+ return StringUtils.hasText(value) ? "/" + value + "/ws/location" : "/ws/location";
+ }
+
+ private String[] originValues() {
+ List values = new ArrayList<>();
+ for (String origin : StringUtils.commaDelimitedListToStringArray(allowedOrigins)) {
+ if (StringUtils.hasText(origin)) {
+ values.add(origin.trim());
+ }
+ }
+ if (values.isEmpty()) {
+ values.add("*");
+ }
+ return values.toArray(new String[0]);
+ }
+}
diff --git a/web-adapter/src/main/java/com/zcloud/personnel/positioning/websocket/PersonLocationWebSocketHandler.java b/web-adapter/src/main/java/com/zcloud/personnel/positioning/websocket/PersonLocationWebSocketHandler.java
new file mode 100644
index 0000000..795e8d4
--- /dev/null
+++ b/web-adapter/src/main/java/com/zcloud/personnel/positioning/websocket/PersonLocationWebSocketHandler.java
@@ -0,0 +1,93 @@
+package com.zcloud.personnel.positioning.websocket;
+
+import com.zcloud.personnel.positioning.integration.realtime.RealtimeLocationPublisher;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.web.socket.CloseStatus;
+import org.springframework.web.socket.TextMessage;
+import org.springframework.web.socket.WebSocketSession;
+import org.springframework.web.socket.handler.ConcurrentWebSocketSessionDecorator;
+import org.springframework.web.socket.handler.TextWebSocketHandler;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Component
+public class PersonLocationWebSocketHandler extends TextWebSocketHandler implements RealtimeLocationPublisher {
+ private static final Logger LOGGER = LoggerFactory.getLogger(PersonLocationWebSocketHandler.class);
+
+ private final Map sessions = new ConcurrentHashMap<>();
+ private final int sendTimeLimitMs;
+ private final int bufferSizeLimitBytes;
+
+ public PersonLocationWebSocketHandler(
+ @Value("${personnel-positioning.websocket.location.send-time-limit-ms:10000}") int sendTimeLimitMs,
+ @Value("${personnel-positioning.websocket.location.buffer-size-limit-bytes:524288}")
+ int bufferSizeLimitBytes) {
+ this.sendTimeLimitMs = Math.max(1, sendTimeLimitMs);
+ this.bufferSizeLimitBytes = Math.max(1024, bufferSizeLimitBytes);
+ }
+
+ @Override
+ public void afterConnectionEstablished(WebSocketSession session) {
+ WebSocketSession concurrentSession = new ConcurrentWebSocketSessionDecorator(
+ session, sendTimeLimitMs, bufferSizeLimitBytes);
+ sessions.put(session.getId(), concurrentSession);
+ LOGGER.info("Personnel location WebSocket connected, sessionId={}, connectionCount={}",
+ session.getId(), sessions.size());
+ }
+
+ @Override
+ public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
+ sessions.remove(session.getId());
+ LOGGER.info("Personnel location WebSocket disconnected, sessionId={}, status={}, connectionCount={}",
+ session.getId(), status, sessions.size());
+ }
+
+ @Override
+ public void handleTransportError(WebSocketSession session, Throwable exception) {
+ removeAndClose(session.getId());
+ LOGGER.warn("Personnel location WebSocket transport error, sessionId={}, connectionCount={}",
+ session.getId(), sessions.size(), exception);
+ }
+
+ @Override
+ public int publish(String payload) {
+ TextMessage message = new TextMessage(payload);
+ int delivered = 0;
+ for (Map.Entry entry : sessions.entrySet()) {
+ WebSocketSession session = entry.getValue();
+ if (!session.isOpen()) {
+ sessions.remove(entry.getKey(), session);
+ continue;
+ }
+ try {
+ session.sendMessage(message);
+ delivered++;
+ } catch (Exception e) {
+ removeAndClose(entry.getKey());
+ LOGGER.warn("Failed to send personnel location, sessionId={}", entry.getKey(), e);
+ }
+ }
+ return delivered;
+ }
+
+ int connectionCount() {
+ return sessions.size();
+ }
+
+ private void removeAndClose(String sessionId) {
+ WebSocketSession session = sessions.remove(sessionId);
+ if (session == null || !session.isOpen()) {
+ return;
+ }
+ try {
+ session.close(CloseStatus.SERVER_ERROR);
+ } catch (IOException e) {
+ LOGGER.debug("Failed to close personnel location WebSocket, sessionId={}", sessionId, e);
+ }
+ }
+}
diff --git a/web-app/src/main/java/com/zcloud/personnel/positioning/command/AlarmRecordFindsPullService.java b/web-app/src/main/java/com/zcloud/personnel/positioning/command/AlarmRecordFindsPullService.java
index 2dea3c7..e25d509 100644
--- a/web-app/src/main/java/com/zcloud/personnel/positioning/command/AlarmRecordFindsPullService.java
+++ b/web-app/src/main/java/com/zcloud/personnel/positioning/command/AlarmRecordFindsPullService.java
@@ -223,7 +223,7 @@ public class AlarmRecordFindsPullService {
record.setStartFencesJson(jsonValue(row.path("startFences")));
record.setEndFencesJson(jsonValue(row.path("endFences")));
fillLocation(record, row.path("location"));
- record.setCorpinfoId(config.getCorpinfoId() == null ? 0L : config.getCorpinfoId());
+ record.setCorpinfoId(config.getCorpinfoId() == null ? "0" : config.getCorpinfoId());
record.setCorpinfoName(defaultIfBlank(config.getCorpinfoName(), resolveCorpinfoName(config.getCorpinfoId())));
fillFirstTrack(record, row.path("trackInfoList"));
record.setTerminalNoListJson(jsonValue(row.path("terminalNoList")));
@@ -333,7 +333,7 @@ public class AlarmRecordFindsPullService {
task.setTaskCode(taskCode);
task.setTaskName("FindS告警增量拉取-" + configIdentity(config));
task.setBizType("ALARM");
- task.setCorpinfoId(config.getCorpinfoId() == null ? 0L : config.getCorpinfoId());
+ task.setCorpinfoId(config.getCorpinfoId() == null ? "0" : config.getCorpinfoId());
task.setCorpinfoName(config.getCorpinfoName());
task.setSyncDirection("PULL");
task.setCronExpr(TASK_CRON);
@@ -546,7 +546,7 @@ public class AlarmRecordFindsPullService {
return terminalNoList.asText();
}
- private String resolveCorpinfoName(Long corpinfoId) {
+ private String resolveCorpinfoName(String corpinfoId) {
if (corpinfoId == null) {
return null;
}
@@ -554,7 +554,7 @@ public class AlarmRecordFindsPullService {
List names = jdbcTemplate.queryForList(
"SELECT corp_name FROM corp_info WHERE CAST(corpinfo_id AS CHAR) = ? "
+ "AND (delete_enum IS NULL OR delete_enum = 'FALSE') LIMIT 1",
- String.class, String.valueOf(corpinfoId));
+ String.class, corpinfoId);
return names.isEmpty() ? null : names.get(0);
} catch (Exception ignored) {
return null;
diff --git a/web-app/src/main/java/com/zcloud/personnel/positioning/command/AlarmRuleConfigPersistence.java b/web-app/src/main/java/com/zcloud/personnel/positioning/command/AlarmRuleConfigPersistence.java
index c77a0b9..aefb7c9 100644
--- a/web-app/src/main/java/com/zcloud/personnel/positioning/command/AlarmRuleConfigPersistence.java
+++ b/web-app/src/main/java/com/zcloud/personnel/positioning/command/AlarmRuleConfigPersistence.java
@@ -96,7 +96,7 @@ public class AlarmRuleConfigPersistence {
AlarmRuleFenceRelDO rel = new AlarmRuleFenceRelDO();
BeanUtils.copyProperties(relCmd, rel);
rel.setRuleId(rule.getId());
- rel.setCorpinfoId(defaultLong(rel.getCorpinfoId(), rule.getCorpinfoId()));
+ rel.setCorpinfoId(defaultString(rel.getCorpinfoId(), rule.getCorpinfoId()));
rel.setCorpinfoName(defaultIfBlank(rel.getCorpinfoName(), rule.getCorpinfoName()));
rel.setRelType(defaultIfBlank(rel.getRelType(), REL_EFFECTIVE));
fillFenceSnapshot(rel);
@@ -126,7 +126,7 @@ public class AlarmRuleConfigPersistence {
AlarmRuleItemDO item = new AlarmRuleItemDO();
BeanUtils.copyProperties(itemCmd, item);
item.setRuleId(rule.getId());
- item.setCorpinfoId(defaultLong(item.getCorpinfoId(), rule.getCorpinfoId()));
+ item.setCorpinfoId(defaultString(item.getCorpinfoId(), rule.getCorpinfoId()));
item.setCorpinfoName(defaultIfBlank(item.getCorpinfoName(), rule.getCorpinfoName()));
if (item.getLevel() == null) {
item.setLevel(1);
@@ -171,7 +171,7 @@ public class AlarmRuleConfigPersistence {
rel.setFenceName(fence.getFenceName());
rel.setFindsFenceId(fence.getFindsFenceId());
rel.setRelType(REL_EFFECTIVE);
- rel.setCorpinfoId(defaultLong(rule.getCorpinfoId(), fence.getCorpinfoId()));
+ rel.setCorpinfoId(defaultString(rule.getCorpinfoId(), fence.getCorpinfoId()));
rel.setCorpinfoName(defaultIfBlank(rule.getCorpinfoName(), fence.getCorpinfoName()));
alarmRuleFenceRelRepository.save(rel);
}
@@ -187,7 +187,7 @@ public class AlarmRuleConfigPersistence {
}
rel.setFenceName(defaultIfBlank(rel.getFenceName(), fence.getFenceName()));
rel.setFindsFenceId(defaultLong(rel.getFindsFenceId(), fence.getFindsFenceId()));
- rel.setCorpinfoId(defaultLong(rel.getCorpinfoId(), fence.getCorpinfoId()));
+ rel.setCorpinfoId(defaultString(rel.getCorpinfoId(), fence.getCorpinfoId()));
rel.setCorpinfoName(defaultIfBlank(rel.getCorpinfoName(), fence.getCorpinfoName()));
}
@@ -265,4 +265,8 @@ public class AlarmRuleConfigPersistence {
private Long defaultLong(Long value, Long defaultValue) {
return value == null ? defaultValue : value;
}
+
+ private String defaultString(String value, String defaultValue) {
+ return StringUtils.hasText(value) ? value : defaultValue;
+ }
}
diff --git a/web-app/src/main/java/com/zcloud/personnel/positioning/command/AlarmRuleFindsPullService.java b/web-app/src/main/java/com/zcloud/personnel/positioning/command/AlarmRuleFindsPullService.java
index 9ecc885..3591fb4 100644
--- a/web-app/src/main/java/com/zcloud/personnel/positioning/command/AlarmRuleFindsPullService.java
+++ b/web-app/src/main/java/com/zcloud/personnel/positioning/command/AlarmRuleFindsPullService.java
@@ -61,12 +61,12 @@ public class AlarmRuleFindsPullService {
private final ObjectMapper objectMapper;
public void refreshForCompanyStats(AlarmRuleCompanyPageQry qry) {
- Long companyId = qry == null ? null : qry.getEqCorpinfoId();
+ String companyId = qry == null ? null : qry.getEqCorpinfoId();
refreshConfigs(resolveConfigs(companyId), null);
}
public void refreshForList(AlarmRulePageQry qry) {
- Long companyId = qry == null ? null : qry.getEqCorpinfoId();
+ String companyId = qry == null ? null : qry.getEqCorpinfoId();
String alarmCode = qry == null ? null : qry.getEqAlarmCode();
refreshConfigs(resolveConfigs(companyId), alarmCode);
}
@@ -174,7 +174,7 @@ public class AlarmRuleFindsPullService {
rule.setTrackTypes(defaultIfBlank(rule.getTrackTypes(), "STAFF"));
rule.setCrashType(firstText(row.path("crashType"), rule.getCrashType()));
FenceDO scopeFence = findFirstScopeFence(scope);
- Long corpinfoId = config.getCorpinfoId() != null
+ String corpinfoId = config.getCorpinfoId() != null
? config.getCorpinfoId()
: (scopeFence == null ? rule.getCorpinfoId() : scopeFence.getCorpinfoId());
String corpinfoName = defaultIfBlank(config.getCorpinfoName(),
@@ -315,11 +315,12 @@ public class AlarmRuleFindsPullService {
}
}
- private List resolveConfigs(Long requestedCorpinfoId) {
+ private List resolveConfigs(String requestedCorpinfoId) {
SSOUser ssoUser = AuthContext.getCurrentUser();
- Long corpinfoId = requestedCorpinfoId != null
+ String corpinfoId = requestedCorpinfoId != null
? requestedCorpinfoId
- : (ssoUser == null ? null : ssoUser.getCompanyId());
+ : (ssoUser == null || ssoUser.getCompanyId() == null
+ ? null : String.valueOf(ssoUser.getCompanyId()));
QueryWrapper queryWrapper = baseConfigQuery();
if (corpinfoId != null) {
queryWrapper.eq("corpinfo_id", corpinfoId);
@@ -327,7 +328,7 @@ public class AlarmRuleFindsPullService {
List configs = openapiConfigRepository.list(queryWrapper);
if ((configs == null || configs.isEmpty()) && corpinfoId != null) {
QueryWrapper defaultWrapper = baseConfigQuery();
- defaultWrapper.and(wrapper -> wrapper.isNull("corpinfo_id").or().eq("corpinfo_id", 0));
+ defaultWrapper.and(wrapper -> wrapper.isNull("corpinfo_id").or().eq("corpinfo_id", "0"));
configs = openapiConfigRepository.list(defaultWrapper);
if (configs != null) {
for (OpenapiConfigDO config : configs) {
diff --git a/web-app/src/main/java/com/zcloud/personnel/positioning/command/FenceCompanyAreaSaveExe.java b/web-app/src/main/java/com/zcloud/personnel/positioning/command/FenceCompanyAreaSaveExe.java
index ffbe852..dcc6003 100644
--- a/web-app/src/main/java/com/zcloud/personnel/positioning/command/FenceCompanyAreaSaveExe.java
+++ b/web-app/src/main/java/com/zcloud/personnel/positioning/command/FenceCompanyAreaSaveExe.java
@@ -36,7 +36,7 @@ public class FenceCompanyAreaSaveExe {
return map(area, fence);
}
- public FenceCompanyAreaCO query(Long corpinfoId, String corpinfoName) {
+ public FenceCompanyAreaCO query(String corpinfoId, String corpinfoName) {
AreaDO area = queryArea(null, corpinfoId, corpinfoName);
FenceDO fence = null;
if (area != null && area.getBindFenceId() != null) {
@@ -142,7 +142,7 @@ public class FenceCompanyAreaSaveExe {
return fence;
}
- private AreaDO queryArea(Long areaId, Long corpinfoId, String corpinfoName) {
+ private AreaDO queryArea(Long areaId, String corpinfoId, String corpinfoName) {
if (areaId != null) {
return areaRepository.getById(areaId);
}
@@ -155,7 +155,7 @@ public class FenceCompanyAreaSaveExe {
return areaRepository.getOne(queryWrapper, false);
}
- private FenceDO queryFence(Long fenceId, Long corpinfoId, String corpinfoName) {
+ private FenceDO queryFence(Long fenceId, String corpinfoId, String corpinfoName) {
if (fenceId != null) {
return fenceRepository.getById(fenceId);
}
@@ -168,7 +168,7 @@ public class FenceCompanyAreaSaveExe {
return fenceRepository.getOne(queryWrapper, false);
}
- private void applyCompany(QueryWrapper queryWrapper, Long corpinfoId, String corpinfoName) {
+ private void applyCompany(QueryWrapper queryWrapper, String corpinfoId, String corpinfoName) {
if (corpinfoId != null) {
queryWrapper.eq("corpinfo_id", corpinfoId);
return;
diff --git a/web-app/src/main/java/com/zcloud/personnel/positioning/command/FenceFindsPullService.java b/web-app/src/main/java/com/zcloud/personnel/positioning/command/FenceFindsPullService.java
index e268140..07dec19 100644
--- a/web-app/src/main/java/com/zcloud/personnel/positioning/command/FenceFindsPullService.java
+++ b/web-app/src/main/java/com/zcloud/personnel/positioning/command/FenceFindsPullService.java
@@ -57,7 +57,7 @@ public class FenceFindsPullService {
public FenceSyncCO sync(FenceSyncCmd cmd) {
FenceSyncCmd command = cmd == null ? new FenceSyncCmd() : cmd;
- Long companyId = command.getCorpinfoId() == null ? currentCompanyId() : command.getCorpinfoId();
+ String companyId = command.getCorpinfoId() == null ? currentCompanyId() : command.getCorpinfoId();
if (command.getCorpinfoId() == null && companyId != null) {
command.setCorpinfoId(companyId);
}
@@ -339,7 +339,7 @@ public class FenceFindsPullService {
private CorpInfo mapCorpInfo(ResultSet rs, int rowNum) throws SQLException {
CorpInfo corpInfo = new CorpInfo();
- long id = rs.getLong("corpinfo_id");
+ String id = rs.getString("corpinfo_id");
corpInfo.corpinfoId = rs.wasNull() ? null : id;
corpInfo.corpName = rs.getString("corp_name");
corpInfo.orgCode = rs.getString("code");
@@ -510,13 +510,14 @@ public class FenceFindsPullService {
return value == null || value < 1 ? defaultValue : value;
}
- private Long currentCompanyId() {
+ private String currentCompanyId() {
SSOUser currentUser = AuthContext.getCurrentUser();
- return currentUser == null ? null : currentUser.getCompanyId();
+ return currentUser == null || currentUser.getCompanyId() == null
+ ? null : String.valueOf(currentUser.getCompanyId());
}
private static class CorpInfo {
- private Long corpinfoId;
+ private String corpinfoId;
private String corpName;
private String orgCode;
}
diff --git a/web-app/src/main/java/com/zcloud/personnel/positioning/command/TerminalAppExe.java b/web-app/src/main/java/com/zcloud/personnel/positioning/command/TerminalAppExe.java
index 38e8fd0..ae1f0df 100644
--- a/web-app/src/main/java/com/zcloud/personnel/positioning/command/TerminalAppExe.java
+++ b/web-app/src/main/java/com/zcloud/personnel/positioning/command/TerminalAppExe.java
@@ -340,12 +340,12 @@ public class TerminalAppExe {
sql.append(" AND COALESCE(tb.id_card_no, t.bind_id_card_no) = ?");
args.add(qry.getIdCardNo().trim());
}
- Long requestedCorpinfoId = qry.getEqCorpinfoId();
+ String requestedCorpinfoId = qry.getEqCorpinfoId();
boolean hasEqCorpinfoName = StringUtils.hasText(qry.getEqCorpinfoName());
boolean hasLikeCorpinfoName = StringUtils.hasText(qry.getLikeCorpinfoName());
boolean hasExplicitCorpinfoFilter = requestedCorpinfoId != null
|| hasEqCorpinfoName || hasLikeCorpinfoName;
- Long corpinfoId = hasExplicitCorpinfoFilter ? requestedCorpinfoId : currentCompanyId();
+ String corpinfoId = hasExplicitCorpinfoFilter ? requestedCorpinfoId : currentCompanyId();
if (requestedCorpinfoId != null && hasEqCorpinfoName) {
String corpinfoName = qry.getEqCorpinfoName().trim();
sql.append(" AND (t.corpinfo_id = ? OR (t.corpinfo_id IS NULL"
@@ -444,7 +444,7 @@ public class TerminalAppExe {
terminal.getTerminalName(), appAccount));
terminal.setDeviceType(DEVICE_TYPE_APP);
terminal.setAppAccount(appAccount);
- terminal.setCorpinfoId(corpInfo == null ? firstLong(cmd.getCorpinfoId(), terminal.getCorpinfoId()) : corpInfo.corpinfoId);
+ terminal.setCorpinfoId(corpInfo == null ? firstText(cmd.getCorpinfoId(), terminal.getCorpinfoId()) : corpInfo.corpinfoId);
terminal.setCorpinfoName(firstText(cmd.getCorpinfoName(), corpInfo == null ? null : corpInfo.corpName,
textValue(child(row, "corpinfoName")), textValue(child(row, "corpName")),
textValue(child(row, "orgName")), terminal.getCorpinfoName()));
@@ -686,7 +686,7 @@ public class TerminalAppExe {
return rows.isEmpty() ? fallback : mergePerson(rows.get(0), fallback);
}
- private CorpInfo resolveCorpInfo(Long corpinfoId, String corpinfoName, String orgCode, String orgName) {
+ private CorpInfo resolveCorpInfo(String corpinfoId, String corpinfoName, String orgCode, String orgName) {
List