From 83d0b3967294c062b7156168757864187d54e6c4 Mon Sep 17 00:00:00 2001 From: zhangxiongfeng Date: Wed, 22 Jul 2026 16:42:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=A7=E5=8D=8E=E6=8E=A5=E5=8F=A3=E5=AF=B9?= =?UTF-8?q?=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 + start/pom.xml | 5 ++ start/src/main/resources/bootstrap.yml | 4 +- start/src/main/resources/sdk.yml | 12 +-- .../zcloud/primeport/web/DaHuaController.java | 29 +++++++ web-app/pom.xml | 4 + .../primeport/service/DaHuaServiceImpl.java | 24 ++++++ .../zcloud/primeport/api/DaHuaServiceI.java | 9 +++ .../config/ThreadPoolAsyncConfig.java | 10 +-- .../domain/config/DaHuaOauthProperties.java | 26 ------ .../domain/config/DaHuaSdkConfig.java | 34 -------- .../domain/gateway/DaHuaGateway.java | 8 ++ .../domain/model/DaHuaPersonSyncCmd.java | 77 ++++++++++++++++++ .../primeport/dahua/api/DaHuaPersonApi.java | 28 +++++++ .../dahua/client/DaHuaApiClient.java | 79 +++++++++++++++++++ .../dahua/config/DaHuaAutoConfig.java | 36 +++++++++ .../dahua/config/DaHuaProperties.java | 19 +++++ .../gatewayimpl/DaHuaGatewayImpl.java | 51 ++++++++++++ .../primeport/plan/mjDevice/DaHuaSdkUtil.java | 7 +- .../primeport/plan/mjDevice/OauthUtil.java | 20 ++--- .../plan/mjDevice/OneLevelCarUtil.java | 4 +- .../main/resources/META-INF/spring.factories | 2 + .../dahua/client/DaHuaApiClientTest.java | 74 +++++++++++++++++ .../dahua/config/DaHuaAutoConfigTest.java | 56 +++++++++++++ .../src/test/resources/application.yml | 9 +++ 25 files changed, 542 insertions(+), 87 deletions(-) create mode 100644 web-adapter/src/main/java/com/zcloud/primeport/web/DaHuaController.java create mode 100644 web-app/src/main/java/com/zcloud/primeport/service/DaHuaServiceImpl.java create mode 100644 web-client/src/main/java/com/zcloud/primeport/api/DaHuaServiceI.java delete mode 100644 web-domain/src/main/java/com/zcloud/primeport/domain/config/DaHuaOauthProperties.java delete mode 100644 web-domain/src/main/java/com/zcloud/primeport/domain/config/DaHuaSdkConfig.java create mode 100644 web-domain/src/main/java/com/zcloud/primeport/domain/gateway/DaHuaGateway.java create mode 100644 web-domain/src/main/java/com/zcloud/primeport/domain/model/DaHuaPersonSyncCmd.java create mode 100644 web-infrastructure/src/main/java/com/zcloud/primeport/dahua/api/DaHuaPersonApi.java create mode 100644 web-infrastructure/src/main/java/com/zcloud/primeport/dahua/client/DaHuaApiClient.java create mode 100644 web-infrastructure/src/main/java/com/zcloud/primeport/dahua/config/DaHuaAutoConfig.java create mode 100644 web-infrastructure/src/main/java/com/zcloud/primeport/dahua/config/DaHuaProperties.java create mode 100644 web-infrastructure/src/main/java/com/zcloud/primeport/gatewayimpl/DaHuaGatewayImpl.java create mode 100644 web-infrastructure/src/main/resources/META-INF/spring.factories create mode 100644 web-infrastructure/src/test/java/com/zcloud/primeport/dahua/client/DaHuaApiClientTest.java create mode 100644 web-infrastructure/src/test/java/com/zcloud/primeport/dahua/config/DaHuaAutoConfigTest.java create mode 100644 web-infrastructure/src/test/resources/application.yml diff --git a/pom.xml b/pom.xml index 636a830..40b31fe 100644 --- a/pom.xml +++ b/pom.xml @@ -42,6 +42,8 @@ 1.0.13.15 + + diff --git a/start/pom.xml b/start/pom.xml index 1b303b1..647c784 100644 --- a/start/pom.xml +++ b/start/pom.xml @@ -30,6 +30,11 @@ com.jjb.saas jjb-saas-framework-web + + com.dahuatech.icc + java-sdk-oauth + 1.0.13.15 + diff --git a/start/src/main/resources/bootstrap.yml b/start/src/main/resources/bootstrap.yml index c0bc004..62d008f 100644 --- a/start/src/main/resources/bootstrap.yml +++ b/start/src/main/resources/bootstrap.yml @@ -1,8 +1,8 @@ spring: config: import: -# - classpath:nacos.yml - - classpath:prodnacos.yml + - classpath:nacos.yml +# - classpath:prodnacos.yml - classpath:sdk.yml - classpath:swagger.yml # - classpath:ds.yml diff --git a/start/src/main/resources/sdk.yml b/start/src/main/resources/sdk.yml index 44e0b10..ffd7e29 100644 --- a/start/src/main/resources/sdk.yml +++ b/start/src/main/resources/sdk.yml @@ -86,10 +86,10 @@ message: # 大华平台配置 dahua: oauth: - host: 192.168.1.100 - client-id: your-client-id - client-secret: your-secret - username: admin - password: 123456 + host: 123.183.159.35 + client-id: 123.183.159.35 + client-secret: 4edfdcd2-67e6-41db-a1ae-b98d47a70266 + username: system + password: zcloud88888 http: false - port: 443 \ No newline at end of file + port: 4443 \ No newline at end of file diff --git a/web-adapter/src/main/java/com/zcloud/primeport/web/DaHuaController.java b/web-adapter/src/main/java/com/zcloud/primeport/web/DaHuaController.java new file mode 100644 index 0000000..5fd3e24 --- /dev/null +++ b/web-adapter/src/main/java/com/zcloud/primeport/web/DaHuaController.java @@ -0,0 +1,29 @@ +package com.zcloud.primeport.web; + +import com.alibaba.cola.dto.SingleResponse; +import com.zcloud.primeport.api.DaHuaServiceI; +import com.zcloud.primeport.domain.model.DaHuaPersonSyncCmd; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +@Api(tags = "大华平台对接") +@RequestMapping("/${application.gateway}/dahua") +@RestController +public class DaHuaController { + + @Autowired(required = false) + private DaHuaServiceI daHuaService; + + @ApiOperation("同步人员到大华平台-新增") + @PostMapping("/person/sync") + public SingleResponse syncPerson(@Validated @RequestBody DaHuaPersonSyncCmd cmd) { + + if (daHuaService == null) { + throw new RuntimeException("大华服务未配置"); + } + return daHuaService.syncPerson(cmd); + } +} \ No newline at end of file diff --git a/web-app/pom.xml b/web-app/pom.xml index 6834fef..4a5bcce 100644 --- a/web-app/pom.xml +++ b/web-app/pom.xml @@ -21,6 +21,10 @@ com.zcloud.primeport web-infrastructure + + com.zcloud.primeport + web-domain + org.springframework.boot spring-boot-starter-test diff --git a/web-app/src/main/java/com/zcloud/primeport/service/DaHuaServiceImpl.java b/web-app/src/main/java/com/zcloud/primeport/service/DaHuaServiceImpl.java new file mode 100644 index 0000000..48c6855 --- /dev/null +++ b/web-app/src/main/java/com/zcloud/primeport/service/DaHuaServiceImpl.java @@ -0,0 +1,24 @@ +package com.zcloud.primeport.service; + +import com.alibaba.cola.dto.SingleResponse; +import com.zcloud.primeport.api.DaHuaServiceI; +import com.zcloud.primeport.domain.gateway.DaHuaGateway; +import com.zcloud.primeport.domain.model.DaHuaPersonSyncCmd; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class DaHuaServiceImpl implements DaHuaServiceI { + + @Autowired(required = false) + private DaHuaGateway daHuaGateway; + + @Override + public SingleResponse syncPerson(DaHuaPersonSyncCmd cmd) { + if (daHuaGateway == null) { + throw new RuntimeException("大华服务未配置"); + } + Boolean result = daHuaGateway.syncPerson(cmd); + return SingleResponse.of(result); + } +} \ No newline at end of file diff --git a/web-client/src/main/java/com/zcloud/primeport/api/DaHuaServiceI.java b/web-client/src/main/java/com/zcloud/primeport/api/DaHuaServiceI.java new file mode 100644 index 0000000..bfdf3c1 --- /dev/null +++ b/web-client/src/main/java/com/zcloud/primeport/api/DaHuaServiceI.java @@ -0,0 +1,9 @@ +package com.zcloud.primeport.api; + +import com.alibaba.cola.dto.SingleResponse; +import com.zcloud.primeport.domain.model.DaHuaPersonSyncCmd; + +public interface DaHuaServiceI { + + SingleResponse syncPerson(DaHuaPersonSyncCmd cmd); +} \ No newline at end of file diff --git a/web-client/src/main/java/com/zcloud/primeport/config/ThreadPoolAsyncConfig.java b/web-client/src/main/java/com/zcloud/primeport/config/ThreadPoolAsyncConfig.java index 90177da..c9b16f2 100644 --- a/web-client/src/main/java/com/zcloud/primeport/config/ThreadPoolAsyncConfig.java +++ b/web-client/src/main/java/com/zcloud/primeport/config/ThreadPoolAsyncConfig.java @@ -23,27 +23,27 @@ public class ThreadPoolAsyncConfig { public static String namePrefix; public static Integer keepAliveSeconds; - @Value("${archives.async.pool.maxPoolSize}") + @Value("${archives.async.pool.maxPoolSize:10}") public void setMaxPoolSize(Integer maxPoolSizeProperties) { maxPoolSize = maxPoolSizeProperties; } - @Value("${archives.async.pool.corePoolSize}") + @Value("${archives.async.pool.corePoolSize:5}") public void setCorePoolSize(Integer corePoolSizeProperties) { corePoolSize = corePoolSizeProperties; } - @Value("${archives.async.pool.queueCapacity}") + @Value("${archives.async.pool.queueCapacity:100}") public void setQueueCapacity(Integer queueCapacityProperties) { queueCapacity = queueCapacityProperties; } - @Value("${archives.async.pool.namePrefix}") + @Value("${archives.async.pool.namePrefix:async-}") public void setNamePrefix(String namePrefixProperties) { namePrefix = namePrefixProperties; } - @Value("${archives.async.pool.keepAliveSeconds}") + @Value("${archives.async.pool.keepAliveSeconds:60}") public void setKeepAliveSeconds(Integer keepAliveSecondsProperties) { keepAliveSeconds = keepAliveSecondsProperties; } diff --git a/web-domain/src/main/java/com/zcloud/primeport/domain/config/DaHuaOauthProperties.java b/web-domain/src/main/java/com/zcloud/primeport/domain/config/DaHuaOauthProperties.java deleted file mode 100644 index e2de941..0000000 --- a/web-domain/src/main/java/com/zcloud/primeport/domain/config/DaHuaOauthProperties.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.zcloud.primeport.domain.config; - -import lombok.Data; -import lombok.Getter; -import lombok.Setter; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -/** - * @Description: - * @Date: 2026/7/2 - * @User: tianxinlei - */ -@Component -@Getter -@Setter -@ConfigurationProperties(prefix = "dahua.oauth") -public class DaHuaOauthProperties { - private String host; - private String clientId; - private String clientSecret; - private String username; - private String password; - private boolean http; - private String port; -} diff --git a/web-domain/src/main/java/com/zcloud/primeport/domain/config/DaHuaSdkConfig.java b/web-domain/src/main/java/com/zcloud/primeport/domain/config/DaHuaSdkConfig.java deleted file mode 100644 index 568f3f0..0000000 --- a/web-domain/src/main/java/com/zcloud/primeport/domain/config/DaHuaSdkConfig.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.zcloud.primeport.domain.config; - -import com.dahuatech.icc.oauth.model.v202010.OauthConfigUserPwdInfo; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * @Description: - * @Date: 2026/7/2 - * @User: tianxinlei - */ -@Configuration -public class DaHuaSdkConfig { - - private final DaHuaOauthProperties dahuaOauthProperties; - - // 构造注入配置属性 - public DaHuaSdkConfig(DaHuaOauthProperties dahuaOauthProperties) { - this.dahuaOauthProperties = dahuaOauthProperties; - } - - @Bean - public OauthConfigUserPwdInfo daHuaOauthConfig() { - return new OauthConfigUserPwdInfo( - dahuaOauthProperties.getHost(), - dahuaOauthProperties.getClientId(), - dahuaOauthProperties.getClientSecret(), - dahuaOauthProperties.getUsername(), - dahuaOauthProperties.getPassword(), - dahuaOauthProperties.isHttp(), - dahuaOauthProperties.getPort() - ); - } -} diff --git a/web-domain/src/main/java/com/zcloud/primeport/domain/gateway/DaHuaGateway.java b/web-domain/src/main/java/com/zcloud/primeport/domain/gateway/DaHuaGateway.java new file mode 100644 index 0000000..3edbc4c --- /dev/null +++ b/web-domain/src/main/java/com/zcloud/primeport/domain/gateway/DaHuaGateway.java @@ -0,0 +1,8 @@ +package com.zcloud.primeport.domain.gateway; + +import com.zcloud.primeport.domain.model.DaHuaPersonSyncCmd; + +public interface DaHuaGateway { + + Boolean syncPerson(DaHuaPersonSyncCmd cmd); +} \ No newline at end of file diff --git a/web-domain/src/main/java/com/zcloud/primeport/domain/model/DaHuaPersonSyncCmd.java b/web-domain/src/main/java/com/zcloud/primeport/domain/model/DaHuaPersonSyncCmd.java new file mode 100644 index 0000000..6e0bc31 --- /dev/null +++ b/web-domain/src/main/java/com/zcloud/primeport/domain/model/DaHuaPersonSyncCmd.java @@ -0,0 +1,77 @@ +package com.zcloud.primeport.domain.model; + +import lombok.Data; + +import java.util.List; + +@Data +public class DaHuaPersonSyncCmd { + + private String service; + + private Long id; + + private String name; + + private String code; + + private Integer paperType; + + private String paperNumber; + + private String paperAddress; + + private Long departmentId; + + private Integer personType; + + private Integer availableTimes; + + private String phone; + + private String email; + + private Integer age; + + private String birthday; + + private Integer sex; + + private String country; + + private Integer nation; + + private String nationName; + + private String selfCode; + + private String ownerCode; + + private String validStartTime; + + private String validEndTime; + + private String password; + + private String passwordKey; + + private List departmentList; + + private List personBiosignatures; + + private Object fieldExt; + + @Data + public static class DepartmentItem { + private Long departmentId; + private Long departmentType; + } + + @Data + public static class PersonBiosignature { + private Integer type; + private Integer index; + private String path; + private String base64Data; + } +} \ No newline at end of file diff --git a/web-infrastructure/src/main/java/com/zcloud/primeport/dahua/api/DaHuaPersonApi.java b/web-infrastructure/src/main/java/com/zcloud/primeport/dahua/api/DaHuaPersonApi.java new file mode 100644 index 0000000..6d715d9 --- /dev/null +++ b/web-infrastructure/src/main/java/com/zcloud/primeport/dahua/api/DaHuaPersonApi.java @@ -0,0 +1,28 @@ +package com.zcloud.primeport.dahua.api; + +import com.dahuatech.icc.exception.ClientException; +import com.dahuatech.icc.oauth.model.v202010.GeneralResponse; +import com.zcloud.primeport.dahua.client.DaHuaApiClient; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +@Component +@ConditionalOnBean(DaHuaApiClient.class) +public class DaHuaPersonApi { + + @Resource + private DaHuaApiClient daHuaApiClient; + + private static final String PERSON_ADD_URL = "/evo-apigw/evo-brm/1.2.0/person/subsystem/add"; + + public GeneralResponse addPerson(Map body) throws ClientException { + String token = daHuaApiClient.getToken(); + Map headers = new HashMap<>(); + headers.put("Authorization", "bearer " + token); + return daHuaApiClient.postJson(PERSON_ADD_URL, body, headers); + } +} \ No newline at end of file diff --git a/web-infrastructure/src/main/java/com/zcloud/primeport/dahua/client/DaHuaApiClient.java b/web-infrastructure/src/main/java/com/zcloud/primeport/dahua/client/DaHuaApiClient.java new file mode 100644 index 0000000..f548ca4 --- /dev/null +++ b/web-infrastructure/src/main/java/com/zcloud/primeport/dahua/client/DaHuaApiClient.java @@ -0,0 +1,79 @@ +package com.zcloud.primeport.dahua.client; + +import com.dahuatech.hutool.http.Method; +import com.dahuatech.icc.exception.ClientException; +import com.dahuatech.icc.oauth.model.v202010.GeneralResponse; +import com.dahuatech.icc.oauth.model.v202010.OauthConfigUserPwdInfo; +import com.dahuatech.icc.oauth.utils.HttpUtils; + +import java.util.HashMap; +import java.util.Map; + +public class DaHuaApiClient { + + private final OauthConfigUserPwdInfo oauthConfig; + + public DaHuaApiClient(OauthConfigUserPwdInfo oauthConfig) { + this.oauthConfig = oauthConfig; + oauthConfig.getHttpConfigInfo().setReadTimeout(-1L); + oauthConfig.getHttpConfigInfo().setConnectionTimeout(-1L); + } + + public DaHuaApiClient(String host, String clientId, String clientSecret, String username, String password, boolean isHttp, String port) { + this.oauthConfig = new OauthConfigUserPwdInfo(host, clientId, clientSecret, username, password, isHttp, port); + oauthConfig.getHttpConfigInfo().setReadTimeout(-1L); + oauthConfig.getHttpConfigInfo().setConnectionTimeout(-1L); + } + + public GeneralResponse postJson(String path, Map body) throws ClientException { + return HttpUtils.executeJson(path, body, null, Method.POST, oauthConfig, GeneralResponse.class); + } + + public GeneralResponse postJson(String path, Map body, Map headers) throws ClientException { + return HttpUtils.executeJson(path, body, headers, Method.POST, oauthConfig, GeneralResponse.class); + } + + public GeneralResponse getForm(String path) throws ClientException { + return HttpUtils.executeForm(path, null, null, Method.GET, oauthConfig, GeneralResponse.class); + } + + public GeneralResponse getForm(String path, Map params) throws ClientException { + return HttpUtils.executeForm(path, params, null, Method.GET, oauthConfig, GeneralResponse.class); + } + + public GeneralResponse getForm(String path, Map params, Map headers) throws ClientException { + return HttpUtils.executeForm(path, params, headers, Method.GET, oauthConfig, GeneralResponse.class); + } + + public GeneralResponse putJson(String path, Map body) throws ClientException { + return HttpUtils.executeJson(path, body, null, Method.PUT, oauthConfig, GeneralResponse.class); + } + + public GeneralResponse putJson(String path, Map body, Map headers) throws ClientException { + return HttpUtils.executeJson(path, body, headers, Method.PUT, oauthConfig, GeneralResponse.class); + } + + public GeneralResponse deleteForm(String path) throws ClientException { + return HttpUtils.executeForm(path, null, null, Method.DELETE, oauthConfig, GeneralResponse.class); + } + + public GeneralResponse deleteForm(String path, Map params) throws ClientException { + return HttpUtils.executeForm(path, params, null, Method.DELETE, oauthConfig, GeneralResponse.class); + } + + public String getToken() throws ClientException { + return HttpUtils.getToken(oauthConfig).getAccess_token(); + } + + public void setReadTimeout(Long timeout) { + oauthConfig.getHttpConfigInfo().setReadTimeout(timeout); + } + + public void setConnectionTimeout(Long timeout) { + oauthConfig.getHttpConfigInfo().setConnectionTimeout(timeout); + } + + public OauthConfigUserPwdInfo getOauthConfig() { + return oauthConfig; + } +} \ No newline at end of file diff --git a/web-infrastructure/src/main/java/com/zcloud/primeport/dahua/config/DaHuaAutoConfig.java b/web-infrastructure/src/main/java/com/zcloud/primeport/dahua/config/DaHuaAutoConfig.java new file mode 100644 index 0000000..f88d93d --- /dev/null +++ b/web-infrastructure/src/main/java/com/zcloud/primeport/dahua/config/DaHuaAutoConfig.java @@ -0,0 +1,36 @@ +package com.zcloud.primeport.dahua.config; + +import com.dahuatech.icc.oauth.model.v202010.OauthConfigUserPwdInfo; +import com.zcloud.primeport.dahua.client.DaHuaApiClient; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableConfigurationProperties(DaHuaProperties.class) +@ConditionalOnProperty(prefix = "dahua.oauth", name = "host") +public class DaHuaAutoConfig { + + @Bean("dahuaApiOauthConfig") + public OauthConfigUserPwdInfo dahuaApiOauthConfig(DaHuaProperties properties) { + OauthConfigUserPwdInfo config = new OauthConfigUserPwdInfo( + properties.getHost(), + properties.getClientId(), + properties.getClientSecret(), + properties.getUsername(), + properties.getPassword(), + properties.isHttp(), + properties.getPort() + ); + config.getHttpConfigInfo().setReadTimeout(properties.getReadTimeout()); + config.getHttpConfigInfo().setConnectionTimeout(properties.getConnectionTimeout()); + return config; + } + + @Bean + public DaHuaApiClient daHuaApiClient(@Qualifier("dahuaApiOauthConfig") OauthConfigUserPwdInfo oauthConfig) { + return new DaHuaApiClient(oauthConfig); + } +} \ No newline at end of file diff --git a/web-infrastructure/src/main/java/com/zcloud/primeport/dahua/config/DaHuaProperties.java b/web-infrastructure/src/main/java/com/zcloud/primeport/dahua/config/DaHuaProperties.java new file mode 100644 index 0000000..baa1415 --- /dev/null +++ b/web-infrastructure/src/main/java/com/zcloud/primeport/dahua/config/DaHuaProperties.java @@ -0,0 +1,19 @@ +package com.zcloud.primeport.dahua.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +@Data +@ConfigurationProperties(prefix = "dahua.oauth") +public class DaHuaProperties { + + private String host; + private String clientId; + private String clientSecret; + private String username; + private String password; + private boolean http = false; + private String port = "4443"; + private Long readTimeout = -1L; + private Long connectionTimeout = -1L; +} \ No newline at end of file diff --git a/web-infrastructure/src/main/java/com/zcloud/primeport/gatewayimpl/DaHuaGatewayImpl.java b/web-infrastructure/src/main/java/com/zcloud/primeport/gatewayimpl/DaHuaGatewayImpl.java new file mode 100644 index 0000000..0884549 --- /dev/null +++ b/web-infrastructure/src/main/java/com/zcloud/primeport/gatewayimpl/DaHuaGatewayImpl.java @@ -0,0 +1,51 @@ +package com.zcloud.primeport.gatewayimpl; + +import com.dahuatech.icc.exception.ClientException; +import com.dahuatech.icc.oauth.model.v202010.GeneralResponse; +import com.zcloud.primeport.dahua.api.DaHuaPersonApi; +import com.zcloud.primeport.domain.gateway.DaHuaGateway; +import com.zcloud.primeport.domain.model.DaHuaPersonSyncCmd; +import lombok.AllArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.stereotype.Service; + +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +@Service +@AllArgsConstructor +@ConditionalOnBean(DaHuaPersonApi.class) +public class DaHuaGatewayImpl implements DaHuaGateway { + + private final DaHuaPersonApi daHuaPersonApi; + + @Override + public Boolean syncPerson(DaHuaPersonSyncCmd cmd) { + Map body = convertToMap(cmd); + try { + GeneralResponse response = daHuaPersonApi.addPerson(body); + return response != null && "0".equals(response.getCode()); + } catch (ClientException e) { + throw new RuntimeException("同步人员到大华平台失败", e); + } + } + + private Map convertToMap(DaHuaPersonSyncCmd cmd) { + Map map = new HashMap<>(); + try { + Field[] fields = cmd.getClass().getDeclaredFields(); + for (Field field : fields) { + field.setAccessible(true); + Object value = field.get(cmd); + if (value != null) { + map.put(field.getName(), value); + } + } + } catch (Exception e) { + throw new RuntimeException("转换请求参数失败", e); + } + return map; + } +} \ No newline at end of file diff --git a/web-infrastructure/src/main/java/com/zcloud/primeport/plan/mjDevice/DaHuaSdkUtil.java b/web-infrastructure/src/main/java/com/zcloud/primeport/plan/mjDevice/DaHuaSdkUtil.java index 2bc2040..17c5694 100644 --- a/web-infrastructure/src/main/java/com/zcloud/primeport/plan/mjDevice/DaHuaSdkUtil.java +++ b/web-infrastructure/src/main/java/com/zcloud/primeport/plan/mjDevice/DaHuaSdkUtil.java @@ -1,6 +1,8 @@ package com.zcloud.primeport.plan.mjDevice; import com.dahuatech.icc.oauth.model.v202010.OauthConfigUserPwdInfo; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.stereotype.Component; /** @@ -9,11 +11,12 @@ import org.springframework.stereotype.Component; * @User: tianxinlei */ @Component +@ConditionalOnBean(name = "dahuaApiOauthConfig") public class DaHuaSdkUtil { private final OauthConfigUserPwdInfo oauthConfig; - public DaHuaSdkUtil(OauthConfigUserPwdInfo oauthConfig) { + public DaHuaSdkUtil(@Qualifier("dahuaApiOauthConfig") OauthConfigUserPwdInfo oauthConfig) { this.oauthConfig = oauthConfig; } @@ -33,4 +36,4 @@ public class DaHuaSdkUtil { } // 其他设备查询、回放、抓拍等业务方法 -} +} \ No newline at end of file diff --git a/web-infrastructure/src/main/java/com/zcloud/primeport/plan/mjDevice/OauthUtil.java b/web-infrastructure/src/main/java/com/zcloud/primeport/plan/mjDevice/OauthUtil.java index 32903f6..d94a849 100644 --- a/web-infrastructure/src/main/java/com/zcloud/primeport/plan/mjDevice/OauthUtil.java +++ b/web-infrastructure/src/main/java/com/zcloud/primeport/plan/mjDevice/OauthUtil.java @@ -35,26 +35,26 @@ public class OauthUtil { // private final String publicKeyUrl = "https://192.168.42.194/evo-apigw/evo-oauth/1.0.0/oauth/public-key"; - @Value("${icc.clientId}") + @Value("${icc.clientId:}") private String clientId; - @Value("${icc.publicKeyUrl}") + @Value("${icc.publicKeyUrl:}") private String publicKeyUrl; - @Value("${icc.clientSecret}") + @Value("${icc.clientSecret:}") private String clientSecret; - @Value("${icc.username}") + @Value("${icc.username:}") private String username; - @Value("${icc.password}") + @Value("${icc.password:}") private String password; - @Value("${icc.url}") + @Value("${icc.url:}") private String iccUrl; - @Value("${icc.request.getGenerateIdUrl}") + @Value("${icc.request.getGenerateIdUrl:}") private String iccGenerateIdUrl; - @Value("${icc.request.getGenerateIdListUrl}") + @Value("${icc.request.getGenerateIdListUrl:}") private String iccGenerateIdListUrl; - @Value("${icc.request.imgInspectUrl}") + @Value("${icc.request.imgInspectUrl:}") private String iccImgInspectUrl; - @Value("${icc.request.getDepartmentIdUrl}") + @Value("${icc.request.getDepartmentIdUrl:}") private String iccDepartmentIdUrl; /** diff --git a/web-infrastructure/src/main/java/com/zcloud/primeport/plan/mjDevice/OneLevelCarUtil.java b/web-infrastructure/src/main/java/com/zcloud/primeport/plan/mjDevice/OneLevelCarUtil.java index e641bb2..7daed94 100644 --- a/web-infrastructure/src/main/java/com/zcloud/primeport/plan/mjDevice/OneLevelCarUtil.java +++ b/web-infrastructure/src/main/java/com/zcloud/primeport/plan/mjDevice/OneLevelCarUtil.java @@ -18,9 +18,9 @@ import javax.annotation.Resource; */ @Component public class OneLevelCarUtil { - @Value("${kmmj.dockflag}") + @Value("${kmmj.dockflag:0}") private Integer dockFlag; - @Value("${oneLevelCar.prefix}") + @Value("${oneLevelCar.prefix:}") private String prefix; @Resource diff --git a/web-infrastructure/src/main/resources/META-INF/spring.factories b/web-infrastructure/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..a4d9fa5 --- /dev/null +++ b/web-infrastructure/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.zcloud.primeport.dahua.config.DaHuaAutoConfig \ No newline at end of file diff --git a/web-infrastructure/src/test/java/com/zcloud/primeport/dahua/client/DaHuaApiClientTest.java b/web-infrastructure/src/test/java/com/zcloud/primeport/dahua/client/DaHuaApiClientTest.java new file mode 100644 index 0000000..d803935 --- /dev/null +++ b/web-infrastructure/src/test/java/com/zcloud/primeport/dahua/client/DaHuaApiClientTest.java @@ -0,0 +1,74 @@ +package com.zcloud.primeport.dahua.client; + +import com.dahuatech.icc.exception.ClientException; + +import java.util.HashMap; +import java.util.Map; + +public class DaHuaApiClientTest { + + public static void main(String[] args) { + System.out.println("========== DaHuaApiClient 测试 =========="); + + String host = "123.183.159.35"; + String clientId = "123.183.159.35"; + String clientSecret = "4edfdcd2-67e6-41db-a1ae-b98d47a70266"; + String username = "system"; + String password = "zcloud88888"; + boolean isHttp = false; + String port = "4443"; + + // host: 123.183.159.35 + // client-id: 123.183.159.35 + // client-secret: 4edfdcd2-67e6-41db-a1ae-b98d47a70266 + // username: system + // password: zcloud88888 + // http: false + // port: 4443 + + + if (isPlaceholder(host) || isPlaceholder(clientId) || isPlaceholder(clientSecret)) { + System.err.println("错误: 请先修改测试类中的配置参数为真实的大华平台凭证!"); + System.err.println("配置位置: DaHuaApiClientTest.java 第13-19行"); + System.err.println("需要填写: host, clientId, clientSecret, username, password"); + return; + } + + try { + DaHuaApiClient client = new DaHuaApiClient(host, clientId, clientSecret, username, password, isHttp, port); + + System.out.println("1. 测试获取 Token..."); + String token = client.getToken(); + System.out.println(" Token 获取成功!"); + System.out.println( token); + + System.out.println("\n2. 测试 POST JSON 请求..."); + Map body = new HashMap<>(); + body.put("testKey", "testValue"); + try { + client.postJson("/evo-apigw/evo-brm/1.2.0/device/subsystem/page", body); + System.out.println(" POST 请求调用成功!"); + } catch (ClientException e) { + System.out.println(" POST 请求返回错误(预期,因为接口不存在): " + e.getMessage()); + } + + System.out.println("\n3. 测试 GET 请求..."); + try { + client.getForm("/evo-apigw/evo-brm/1.0.0/device/1"); + System.out.println(" GET 请求调用成功!"); + } catch (ClientException e) { + System.out.println(" GET 请求返回错误(预期,因为接口不存在): " + e.getMessage()); + } + + System.out.println("\n========== 测试完成 =========="); + + } catch (ClientException e) { + System.err.println("测试失败: " + e.getMessage()); + e.printStackTrace(); + } + } + + private static boolean isPlaceholder(String value) { + return value == null || value.contains("your-") || value.contains("平台") || value.contains("凭证") || value.contains("用户名") || value.contains("密码"); + } +} \ No newline at end of file diff --git a/web-infrastructure/src/test/java/com/zcloud/primeport/dahua/config/DaHuaAutoConfigTest.java b/web-infrastructure/src/test/java/com/zcloud/primeport/dahua/config/DaHuaAutoConfigTest.java new file mode 100644 index 0000000..2615286 --- /dev/null +++ b/web-infrastructure/src/test/java/com/zcloud/primeport/dahua/config/DaHuaAutoConfigTest.java @@ -0,0 +1,56 @@ +package com.zcloud.primeport.dahua.config; + +import com.zcloud.primeport.dahua.client.DaHuaApiClient; +import org.junit.jupiter.api.Test; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; + +import javax.annotation.Resource; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest(classes = DaHuaAutoConfigTest.TestConfig.class) +public class DaHuaAutoConfigTest { + + @Resource + private DaHuaApiClient daHuaApiClient; + + @Resource + private DaHuaProperties daHuaProperties; + + @Test + public void testDaHuaApiClientBeanExists() { + assertThat(daHuaApiClient).isNotNull(); + System.out.println("✅ DaHuaApiClient Bean 注入成功"); + } + + @Test + public void testDaHuaPropertiesBinding() { + assertThat(daHuaProperties.getHost()).isEqualTo("123.183.159.35"); + assertThat(daHuaProperties.getClientId()).isEqualTo("123.183.159.35"); + assertThat(daHuaProperties.getClientSecret()).isEqualTo("4edfdcd2-67e6-41db-a1ae-b98d47a70266"); + assertThat(daHuaProperties.getUsername()).isEqualTo("system"); + assertThat(daHuaProperties.getPassword()).isEqualTo("zcloud88888"); + assertThat(daHuaProperties.isHttp()).isFalse(); + assertThat(daHuaProperties.getPort()).isEqualTo("4443"); + System.out.println("✅ DaHuaProperties 配置绑定成功"); + System.out.println(" host: " + daHuaProperties.getHost()); + System.out.println(" clientId: " + daHuaProperties.getClientId()); + System.out.println(" username: " + daHuaProperties.getUsername()); + } + + @Test + public void testOauthConfigInitialized() { + assertThat(daHuaApiClient.getOauthConfig()).isNotNull(); + // OauthConfigUserPwdInfo 是SDK内部类,不暴露getHost,配置绑定已通过DaHuaProperties验证 + System.out.println("✅ OauthConfigUserPwdInfo 初始化成功"); + System.out.println(" host: " + daHuaProperties.getHost()); + System.out.println(" username: " + daHuaProperties.getUsername()); + } + + @EnableConfigurationProperties(DaHuaProperties.class) + @Import(DaHuaAutoConfig.class) + public static class TestConfig { + } +} \ No newline at end of file diff --git a/web-infrastructure/src/test/resources/application.yml b/web-infrastructure/src/test/resources/application.yml new file mode 100644 index 0000000..24e47ee --- /dev/null +++ b/web-infrastructure/src/test/resources/application.yml @@ -0,0 +1,9 @@ +dahua: + host: 123.183.159.35 + client-id: 123.183.159.35 + client-secret: 4edfdcd2-67e6-41db-a1ae-b98d47a70266 + username: system + password: zcloud88888 + http: false + port: 4443 +