From c4ae60c6866e6446fbc13dbf2715d7b797aa9d96 Mon Sep 17 00:00:00 2001 From: zhangxiongfeng Date: Wed, 5 Aug 2026 10:47:40 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=A4=A7=E5=8D=8E=E5=BE=AE=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E4=BF=AE=E6=94=B9=E5=BE=AE=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../primeport/command/DaHuaPersonSyncExe.java | 4 +- .../command/DaHuaVehicleSyncExe.java | 4 +- ...HuaAccessRecordSyncApplicationService.java | 457 ++++++++++++++++++ .../primeport/service/DaHuaServiceImpl.java | 35 ++ .../domain/gateway/DaHuaGateway.java | 17 +- .../primeport/dahua/api/DaHuaPersonApi.java | 26 +- 6 files changed, 533 insertions(+), 10 deletions(-) create mode 100644 web-app/src/main/java/com/zcloud/primeport/service/DaHuaAccessRecordSyncApplicationService.java diff --git a/web-app/src/main/java/com/zcloud/primeport/command/DaHuaPersonSyncExe.java b/web-app/src/main/java/com/zcloud/primeport/command/DaHuaPersonSyncExe.java index 7b09ecf..5e6b72c 100644 --- a/web-app/src/main/java/com/zcloud/primeport/command/DaHuaPersonSyncExe.java +++ b/web-app/src/main/java/com/zcloud/primeport/command/DaHuaPersonSyncExe.java @@ -4,7 +4,7 @@ import com.alibaba.cola.exception.BizException; import com.zcloud.gbscommon.utils.Base64Util; import com.zcloud.primeport.domain.gateway.DaHuaGateway; import com.zcloud.primeport.domain.gateway.PersonApplyGateway; -import com.zcloud.primeport.domain.model.DaHuaPersonSyncCmd; +import com.zcloud.gbscommon.dahua.cmd.DaHuaPersonSyncCmd; import com.zcloud.primeport.domain.model.PersonApplyE; import com.zcloud.primeport.domain.model.XgfApplyPersonE; import com.zcloud.primeport.dto.PersonApplyUpdateCmd; @@ -185,4 +185,4 @@ public class DaHuaPersonSyncExe { throw new BizException(message + (errorMessage == null ? "" : ": " + errorMessage)); } } -} +} \ No newline at end of file diff --git a/web-app/src/main/java/com/zcloud/primeport/command/DaHuaVehicleSyncExe.java b/web-app/src/main/java/com/zcloud/primeport/command/DaHuaVehicleSyncExe.java index 5f1ac48..a5f4e7f 100644 --- a/web-app/src/main/java/com/zcloud/primeport/command/DaHuaVehicleSyncExe.java +++ b/web-app/src/main/java/com/zcloud/primeport/command/DaHuaVehicleSyncExe.java @@ -4,7 +4,7 @@ import com.alibaba.cola.exception.BizException; import com.zcloud.primeport.domain.enums.VehicleBelongTypeEnum; import com.zcloud.primeport.domain.gateway.DaHuaGateway; import com.zcloud.primeport.domain.gateway.VehicleApplyGateway; -import com.zcloud.primeport.domain.model.DaHuaCarAddCmd; +import com.zcloud.gbscommon.dahua.cmd.DaHuaCarAddCmd; import com.zcloud.primeport.domain.model.VehicleApplyE; import com.zcloud.primeport.plan.mjDevice.dto.CarEnum; import lombok.AllArgsConstructor; @@ -79,4 +79,4 @@ public class DaHuaVehicleSyncExe { throw new BizException(message + (errorMessage == null ? "" : ": " + errorMessage)); } } -} +} \ No newline at end of file diff --git a/web-app/src/main/java/com/zcloud/primeport/service/DaHuaAccessRecordSyncApplicationService.java b/web-app/src/main/java/com/zcloud/primeport/service/DaHuaAccessRecordSyncApplicationService.java new file mode 100644 index 0000000..7b4752e --- /dev/null +++ b/web-app/src/main/java/com/zcloud/primeport/service/DaHuaAccessRecordSyncApplicationService.java @@ -0,0 +1,457 @@ +package com.zcloud.primeport.service; + +import cn.hutool.json.JSONUtil; +import com.zcloud.primeport.domain.gateway.DaHuaAccessRecordRepositoryGateway; +import com.zcloud.primeport.domain.gateway.DaHuaGateway; +import com.zcloud.primeport.domain.gateway.DaHuaResourceRepositoryGateway; +import com.zcloud.primeport.domain.gateway.DaHuaAccessRecordSyncGateway; +import com.zcloud.primeport.domain.model.CorpInfoSnapshotE; +import com.zcloud.gbscommon.dahua.cmd.DaHuaAccessRecordCmd; +import com.zcloud.primeport.domain.model.DaHuaAccessRecordE; +import com.zcloud.primeport.domain.model.DaHuaAccessRecordSyncResultE; +import com.zcloud.primeport.domain.model.DaHuaDepartmentCorpMappingE; +import com.zcloud.primeport.domain.model.DaHuaDeviceChannelE; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.text.Normalizer; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +@Service +@RequiredArgsConstructor +public class DaHuaAccessRecordSyncApplicationService implements DaHuaAccessRecordSyncGateway { + + private static final DateTimeFormatter DATE_TIME_FORMATTER = + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + private static final int MAX_EXCEPTION_DETAILS = 100; + + private final DaHuaGateway daHuaGateway; + private final DaHuaResourceRepositoryGateway resourceRepositoryGateway; + private final DaHuaAccessRecordRepositoryGateway accessRecordRepositoryGateway; + + public DaHuaAccessRecordSyncResultE sync(String startSwingTime, + String endSwingTime, + String startCreateTime, + String endCreateTime, + int pageSize) { + validateTimeRange(startSwingTime, endSwingTime, "swing time"); + validateOptionalTimeRange(startCreateTime, endCreateTime, "create time"); + if (pageSize < 1 || pageSize > 10000) { + throw new IllegalArgumentException("pageSize must be between 1 and 10000"); + } + + SyncIndex index = buildIndex(); + Map synchronizedRecords = new HashMap<>(); + DaHuaAccessRecordSyncResultE result = new DaHuaAccessRecordSyncResultE(); + int pageNum = 1; + while (true) { + List> pageData = fetchPage(pageNum, pageSize, startSwingTime, + endSwingTime, startCreateTime, endCreateTime); + result.setPageCount(result.getPageCount() + 1); + if (pageData.isEmpty()) { + break; + } + persistPage(pageData, index, synchronizedRecords, result); + if (pageData.size() < pageSize) { + break; + } + pageNum++; + } + return result; + } + + @Override + public DaHuaAccessRecordSyncResultE syncIncremental(int pageSize, + int delayMinutes, + int overlapMinutes, + int initialLookbackMinutes) { + LocalDateTime endCreateTime = LocalDateTime.now().minusMinutes(Math.max(delayMinutes, 0)); + LocalDateTime latestCreateTime = accessRecordRepositoryGateway.findLatestDahuaCreateTime(); + LocalDateTime startCreateTime = latestCreateTime == null + ? endCreateTime.minusMinutes(Math.max(initialLookbackMinutes, 1)) + : latestCreateTime.minusMinutes(Math.max(overlapMinutes, 0)); + if (!startCreateTime.isBefore(endCreateTime)) { + return new DaHuaAccessRecordSyncResultE(); + } + return sync(format(startCreateTime.minusDays(2)), format(endCreateTime.plusDays(1)), + format(startCreateTime), format(endCreateTime), pageSize); + } + + private List> fetchPage(int pageNum, + int pageSize, + String startSwingTime, + String endSwingTime, + String startCreateTime, + String endCreateTime) { + DaHuaAccessRecordCmd cmd = new DaHuaAccessRecordCmd(); + cmd.setPageNum(pageNum); + cmd.setPageSize(pageSize); + cmd.setStartSwingTime(startSwingTime); + cmd.setEndSwingTime(endSwingTime); + cmd.setStartCreateTime(blankToNull(startCreateTime)); + cmd.setEndCreateTime(blankToNull(endCreateTime)); + Map response = daHuaGateway.queryAccessRecord(cmd); + if (response == null || !isSuccessful(response)) { + String code = response == null ? null : stringValue(response.get("code")); + String errMsg = response == null ? "empty response" : stringValue(response.get("errMsg")); + throw new IllegalStateException("Dahua access record query failed: code=" + code + + ", errMsg=" + errMsg); + } + Map data = toMap(response.get("data")); + return toRecordList(data.get("pageData")); + } + + protected void persistPage(List> pageData, + SyncIndex index, + Map synchronizedRecords, + DaHuaAccessRecordSyncResultE result) { + Set recordIds = new LinkedHashSet<>(); + for (Map source : pageData) { + String recordId = blankToNull(firstString(source, "id", "recordId")); + if (recordId != null && !synchronizedRecords.containsKey(recordId)) { + recordIds.add(recordId); + } + } + for (DaHuaAccessRecordE existing : accessRecordRepositoryGateway.listByDahuaRecordIds(recordIds)) { + synchronizedRecords.put(existing.getDahuaRecordId(), existing); + } + + for (Map source : pageData) { + result.setRecordTotal(result.getRecordTotal() + 1); + try { + String recordId = blankToNull(firstString(source, "id", "recordId")); + if (recordId == null) { + throw new IllegalArgumentException("record id is missing"); + } + DaHuaAccessRecordE record = synchronizedRecords.get(recordId); + boolean created = record == null; + if (created) { + record = new DaHuaAccessRecordE(); + } + mapRecord(record, source, recordId, index); + if (created) { + accessRecordRepositoryGateway.add(record); + result.setRecordCreated(result.getRecordCreated() + 1); + } else { + accessRecordRepositoryGateway.update(record); + result.setRecordUpdated(result.getRecordUpdated() + 1); + } + synchronizedRecords.put(recordId, record); + } catch (Exception e) { + result.setRecordInvalid(result.getRecordInvalid() + 1); + addDetail(result.getExceptionDetails(), "Access record sync failed: " + e.getMessage()); + } + } + } + + private void mapRecord(DaHuaAccessRecordE record, + Map source, + String recordId, + SyncIndex index) { + String channelCode = blankToNull(firstString(source, "channelCode", "acsChannelCode")); + String departmentName = blankToNull(firstString(source, "deptName", "departmentName")); + Long departmentId = firstLong(source, "deptId", "departmentId"); + String orgCode = blankToNull(firstString(source, "orgCode", "departmentCode", "deptCode")); + DaHuaDeviceChannelE channel = channelCode == null ? null : index.channelsByCode.get(channelCode); + DaHuaDepartmentCorpMappingE personMapping = resolvePersonMapping( + index, departmentId, orgCode, departmentName); + CorpInfoSnapshotE personCorp = personMapping == null + ? null : index.corpsById.get(personMapping.getCorpId()); + CorpInfoSnapshotE deviceCorp = channel == null + ? null : index.corpsById.get(channel.getCorpId()); + + record.setDahuaRecordId(recordId); + record.setCorpId(null); + record.setCorpName(null); + record.setPortArea(null); + record.setDahuaDepartmentId(departmentId); + if (personMapping != null) { + record.setCorpId(personMapping.getCorpId()); + record.setCorpName(personCorp == null ? personMapping.getCorpName() : personCorp.getCorpName()); + record.setPortArea(personCorp == null ? null : personCorp.getPortArea()); + if (record.getDahuaDepartmentId() == null) { + record.setDahuaDepartmentId(personMapping.getDahuaDepartmentId()); + } + } + record.setDahuaDepartmentName(departmentName != null + ? departmentName : (personMapping == null ? null : personMapping.getDahuaDepartmentName())); + + record.setDeviceCorpId(null); + record.setDeviceCorpName(null); + record.setDevicePortArea(null); + record.setMkmjId(null); + record.setPassageId(null); + record.setGateId(null); + if (channel != null) { + record.setDeviceCorpId(channel.getCorpId()); + record.setDeviceCorpName(deviceCorp == null ? null : deviceCorp.getCorpName()); + record.setDevicePortArea(deviceCorp == null ? null : deviceCorp.getPortArea()); + record.setMkmjId(channel.getMkmjId()); + record.setPassageId(channel.getPassageId()); + record.setGateId(channel.getGateId()); + } + + record.setChannelCode(channelCode); + record.setChannelName(firstString(source, "channelName", "acsChannelName")); + record.setDeviceCode(firstString(source, "deviceCode")); + record.setDeviceName(firstString(source, "deviceName")); + record.setPersonId(firstLong(source, "personId")); + record.setPersonCode(firstString(source, "personCode")); + record.setPersonName(firstString(source, "personName")); + record.setPaperNumber(firstString(source, "paperNumber")); + record.setCardNumber(firstString(source, "cardNumber")); + record.setCardStatus(firstInteger(source, "cardStatus")); + record.setCardType(firstInteger(source, "cardType")); + record.setImageType(firstInteger(source, "imageType")); + record.setEnterOrExit(firstInteger(source, "enterOrExit")); + record.setOpenType(firstInteger(source, "openType")); + record.setOpenResult(firstInteger(source, "openResult")); + record.setRecordImageUrl(firstString(source, "recordImageUrl")); + record.setRemark(firstString(source, "remark")); + record.setSwingTime(firstDateTime(source, "swingTime")); + record.setDahuaCreateTime(firstDateTime(source, "createTime")); + record.setMaskState(firstInteger(source, "maskState")); + record.setOverTemp(firstBoolean(source, "overTemp")); + record.setCurrentTemperature(firstDecimal(source, "curTemp")); + record.setSourceType("PULL"); + record.setRawData(JSONUtil.toJsonStr(source)); + record.setLastSyncTime(LocalDateTime.now()); + record.setDeleteEnum("FALSE"); + } + + private SyncIndex buildIndex() { + SyncIndex index = new SyncIndex(); + for (CorpInfoSnapshotE corp : nullSafe(resourceRepositoryGateway.listActiveCorps())) { + index.corpsById.put(corp.getId(), corp); + } + for (DaHuaDeviceChannelE channel : nullSafe(resourceRepositoryGateway.listDeviceChannels())) { + if (channel.getChannelCode() != null && !"TRUE".equalsIgnoreCase(channel.getDeleteEnum())) { + index.channelsByCode.put(channel.getChannelCode(), channel); + } + } + for (DaHuaDepartmentCorpMappingE mapping : nullSafe(resourceRepositoryGateway.listMappings())) { + if (!isActive(mapping)) { + continue; + } + if (mapping.getDahuaDepartmentId() != null) { + index.mappingsByDepartmentId.put(mapping.getDahuaDepartmentId(), mapping); + } + String orgCode = blankToNull(mapping.getDahuaOrgCode()); + if (orgCode != null) { + index.mappingsByOrgCode.put(orgCode, mapping); + } + String key = normalizeName(mapping.getDahuaDepartmentName()); + if (key != null) { + index.mappingsByDepartmentName.computeIfAbsent(key, ignored -> new ArrayList<>()).add(mapping); + } + } + return index; + } + + private DaHuaDepartmentCorpMappingE resolvePersonMapping(SyncIndex index, + Long departmentId, + String orgCode, + String departmentName) { + DaHuaDepartmentCorpMappingE mapping = departmentId == null + ? null : index.mappingsByDepartmentId.get(departmentId); + if (mapping == null && orgCode != null) { + mapping = index.mappingsByOrgCode.get(orgCode); + } + return mapping != null + ? mapping : uniqueMapping(index.mappingsByDepartmentName, departmentName); + } + + private boolean isSuccessful(Map response) { + Object passed = response.get("passed"); + if (passed instanceof Boolean) { + return (Boolean) passed; + } + Object success = response.get("success"); + return Boolean.TRUE.equals(success) || "0".equals(stringValue(response.get("code"))); + } + + private boolean isActive(DaHuaDepartmentCorpMappingE mapping) { + return mapping != null + && !"TRUE".equalsIgnoreCase(mapping.getDeleteEnum()) + && (mapping.getBindStatus() == null || mapping.getBindStatus().intValue() == 1); + } + + private DaHuaDepartmentCorpMappingE uniqueMapping( + Map> mappingsByName, + String departmentName) { + List matches = mappingsByName.get(normalizeName(departmentName)); + return matches != null && matches.size() == 1 ? matches.get(0) : null; + } + + private void validateOptionalTimeRange(String start, String end, String label) { + if (isBlank(start) && isBlank(end)) { + return; + } + if (isBlank(start) || isBlank(end)) { + throw new IllegalArgumentException(label + " start and end must both be provided"); + } + validateTimeRange(start, end, label); + } + + private void validateTimeRange(String start, String end, String label) { + LocalDateTime startTime = parseRequiredDateTime(start, label + " start"); + LocalDateTime endTime = parseRequiredDateTime(end, label + " end"); + if (startTime.isAfter(endTime)) { + throw new IllegalArgumentException(label + " start cannot be after end"); + } + } + + private LocalDateTime parseRequiredDateTime(String value, String field) { + if (isBlank(value)) { + throw new IllegalArgumentException(field + " cannot be blank"); + } + try { + return LocalDateTime.parse(value.trim(), DATE_TIME_FORMATTER); + } catch (DateTimeParseException e) { + throw new IllegalArgumentException(field + " must use yyyy-MM-dd HH:mm:ss", e); + } + } + + private LocalDateTime firstDateTime(Map source, String... fields) { + String value = firstString(source, fields); + if (isBlank(value)) { + return null; + } + return parseRequiredDateTime(value, fields[0]); + } + + private Object firstValue(Map source, String... fields) { + for (String field : fields) { + Object value = source.get(field); + if (value != null) { + return value; + } + } + return null; + } + + private String firstString(Map source, String... fields) { + return stringValue(firstValue(source, fields)); + } + + private Long firstLong(Map source, String... fields) { + Object value = firstValue(source, fields); + if (value == null) { + return null; + } + if (value instanceof Number) { + return ((Number) value).longValue(); + } + return Long.valueOf(value.toString()); + } + + private Integer firstInteger(Map source, String... fields) { + Object value = firstValue(source, fields); + if (value == null) { + return null; + } + if (value instanceof Number) { + return ((Number) value).intValue(); + } + return Integer.valueOf(value.toString()); + } + + private Boolean firstBoolean(Map source, String... fields) { + Object value = firstValue(source, fields); + if (value == null) { + return null; + } + if (value instanceof Boolean) { + return (Boolean) value; + } + return Boolean.valueOf(value.toString()); + } + + private BigDecimal firstDecimal(Map source, String... fields) { + Object value = firstValue(source, fields); + return value == null ? null : new BigDecimal(value.toString()); + } + + @SuppressWarnings("unchecked") + private Map toMap(Object value) { + if (value == null) { + return new LinkedHashMap<>(); + } + if (value instanceof Map) { + return new LinkedHashMap<>((Map) value); + } + return JSONUtil.parseObj(JSONUtil.toJsonStr(value)); + } + + @SuppressWarnings("unchecked") + private List> toRecordList(Object value) { + List> result = new ArrayList<>(); + if (!(value instanceof Iterable)) { + return result; + } + for (Object item : (Iterable) value) { + if (item instanceof Map) { + result.add(new LinkedHashMap<>((Map) item)); + } else if (item != null) { + result.add(JSONUtil.parseObj(JSONUtil.toJsonStr(item))); + } + } + return result; + } + + private Collection nullSafe(Collection values) { + return values == null ? new ArrayList<>() : values; + } + + private String normalizeName(String value) { + if (isBlank(value)) { + return null; + } + return Normalizer.normalize(value, Normalizer.Form.NFKC) + .replaceAll("\\s+", "") + .toLowerCase(Locale.ROOT); + } + + private String stringValue(Object value) { + return value == null ? null : value.toString(); + } + + private String blankToNull(String value) { + return isBlank(value) ? null : value.trim(); + } + + private boolean isBlank(String value) { + return value == null || value.trim().isEmpty(); + } + + private String format(LocalDateTime value) { + return value.format(DATE_TIME_FORMATTER); + } + + private void addDetail(List details, String detail) { + if (details.size() < MAX_EXCEPTION_DETAILS) { + details.add(detail); + } + } + + private static class SyncIndex { + private final Map corpsById = new HashMap<>(); + private final Map channelsByCode = new HashMap<>(); + private final Map mappingsByDepartmentId = new HashMap<>(); + private final Map mappingsByOrgCode = new HashMap<>(); + private final Map> mappingsByDepartmentName = + new HashMap<>(); + } +} \ No newline at end of file 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 index d5d3e16..2e0ede3 100644 --- a/web-app/src/main/java/com/zcloud/primeport/service/DaHuaServiceImpl.java +++ b/web-app/src/main/java/com/zcloud/primeport/service/DaHuaServiceImpl.java @@ -11,10 +11,18 @@ import com.zcloud.gbscommon.dahua.cmd.DaHuaPersonSyncCmd; import com.zcloud.gbscommon.dahua.cmd.DaHuaTempVehicleSaveCmd; import com.zcloud.gbscommon.dahua.facade.ZcloudDaHuaFacade; import com.zcloud.primeport.domain.gateway.DaHuaGateway; +import com.zcloud.primeport.domain.model.DaHuaAccessRecordSyncResultE; +import com.zcloud.primeport.domain.model.DaHuaResourceSyncResultE; +import com.zcloud.primeport.dto.DaHuaAccessRecordSyncCmd; +import com.zcloud.primeport.dto.DaHuaResourceSyncCmd; +import com.zcloud.primeport.dto.clientobject.DaHuaAccessRecordSyncResultCO; +import com.zcloud.primeport.dto.clientobject.DaHuaResourceSyncResultCO; import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.HashMap; import java.util.Map; @Service @@ -24,6 +32,12 @@ public class DaHuaServiceImpl implements ZcloudDaHuaFacade { @Autowired private DaHuaGateway daHuaGateway; + @Autowired + private DaHuaResourceSyncApplicationService daHuaResourceSyncApplicationService; + + @Autowired + private DaHuaAccessRecordSyncApplicationService daHuaAccessRecordSyncApplicationService; + private Long resolveDahuaDeptId(Long corpId) { if (corpId == null) { return null; @@ -229,6 +243,16 @@ public class DaHuaServiceImpl implements ZcloudDaHuaFacade { return resp; } + public SingleResponse syncAccessRecords(DaHuaAccessRecordSyncCmd cmd) { + int pageSize = cmd.getPageSize() == null ? 1000 : cmd.getPageSize(); + DaHuaAccessRecordSyncResultE result = daHuaAccessRecordSyncApplicationService.sync( + cmd.getStartSwingTime(), cmd.getEndSwingTime(), cmd.getStartCreateTime(), + cmd.getEndCreateTime(), pageSize); + DaHuaAccessRecordSyncResultCO data = new DaHuaAccessRecordSyncResultCO(); + BeanUtils.copyProperties(result, data); + return SingleResponse.of(data); + } + @Override public SingleResponse saveTempVehicle(DaHuaTempVehicleSaveCmd cmd) { cmd.setDepartmentId(resolveDahuaDeptId(cmd.getDepartmentId())); @@ -261,4 +285,15 @@ public class DaHuaServiceImpl implements ZcloudDaHuaFacade { System.out.println("大华临时车辆全量保存最终返回 - success:" + resp.isSuccess() + ", errCode:" + resp.getErrCode() + ", errMessage:" + resp.getErrMessage() + ", data(dhData):" + dhData); return resp; } + + public SingleResponse syncResources(DaHuaResourceSyncCmd cmd) { + DaHuaResourceSyncCmd actualCmd = cmd == null ? new DaHuaResourceSyncCmd() : cmd; + int pageSize = actualCmd.getPageSize() == null ? 200 : actualCmd.getPageSize(); + boolean autoMatchByName = actualCmd.getAutoMatchByName() == null || actualCmd.getAutoMatchByName(); + DaHuaResourceSyncResultE result = daHuaResourceSyncApplicationService.sync( + pageSize, actualCmd.getSubsystem(), autoMatchByName); + DaHuaResourceSyncResultCO data = new DaHuaResourceSyncResultCO(); + BeanUtils.copyProperties(result, data); + return SingleResponse.of(data); + } } \ No newline at end of file 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 index b050a09..b4c6751 100644 --- 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 @@ -1,9 +1,10 @@ package com.zcloud.primeport.domain.gateway; -import com.zcloud.primeport.domain.model.DaHuaAccessRecordCmd; -import com.zcloud.primeport.domain.model.DaHuaCarAddCmd; -import com.zcloud.primeport.domain.model.DaHuaCarPageCmd; -import com.zcloud.primeport.domain.model.DaHuaPersonSyncCmd; +import com.zcloud.gbscommon.dahua.cmd.DaHuaAccessRecordCmd; +import com.zcloud.gbscommon.dahua.cmd.DaHuaCarAddCmd; +import com.zcloud.gbscommon.dahua.cmd.DaHuaCarPageCmd; +import com.zcloud.gbscommon.dahua.cmd.DaHuaPersonSyncCmd; +import com.zcloud.gbscommon.dahua.cmd.DaHuaTempVehicleSaveCmd; import java.util.List; import java.util.Map; @@ -29,4 +30,10 @@ public interface DaHuaGateway { Map deleteCar(List carNumList); Map queryAccessRecord(DaHuaAccessRecordCmd cmd); -} + + String uploadPersonImg(String imageBase64); + + Map saveTempVehicle(DaHuaTempVehicleSaveCmd cmd); + + Long findDahuaDepartmentIdByCorpId(Long corpId); +} \ 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 index 287f346..1d1a0e6 100644 --- 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 @@ -25,6 +25,8 @@ public class DaHuaPersonApi { private static final String CAR_PAGE_URL = "/evo-apigw/evo-brm/1.2.0/car/subsystem/page"; private static final String CAR_DELETE_URL = "/evo-apigw/evo-brm/1.0.0/car/delete"; private static final String ACCESS_RECORD_URL = "/evo-apigw/evo-accesscontrol/1.0.0/card/accessControl/swingCardRecord/bycondition/combined"; + private static final String UPLOAD_PERSON_IMG_URL = "/evo-apigw/evo-brm/1.0.0/person/uploadFace"; + private static final String TEMP_VEHICLE_AUDIT_URL = "/evo-apigw/evo-brm/1.0.0/tempVehicle/saveAudit"; public boolean isConfigured() { return daHuaApiClient != null; @@ -131,4 +133,26 @@ public class DaHuaPersonApi { headers.put("Authorization", "bearer " + token); return daHuaApiClient.postJson(ACCESS_RECORD_URL, body, headers); } -} + + public GeneralResponse uploadPersonImg(String imageBase64) throws ClientException { + if (daHuaApiClient == null) { + return null; + } + String token = daHuaApiClient.getToken(); + Map headers = new HashMap<>(); + headers.put("Authorization", "bearer " + token); + Map body = new HashMap<>(); + body.put("faceData", imageBase64); + return daHuaApiClient.postJson(UPLOAD_PERSON_IMG_URL, body, headers); + } + + public GeneralResponse saveTempVehicleAudit(Map body) throws ClientException { + if (daHuaApiClient == null) { + return null; + } + String token = daHuaApiClient.getToken(); + Map headers = new HashMap<>(); + headers.put("Authorization", "bearer " + token); + return daHuaApiClient.postJson(TEMP_VEHICLE_AUDIT_URL, body, headers); + } +} \ No newline at end of file From bbd77af32f3d613eabc31d92ae7720d7d187d138 Mon Sep 17 00:00:00 2001 From: zhangxiongfeng Date: Wed, 5 Aug 2026 11:15:07 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=A4=A7=E5=8D=8E=E5=BE=AE=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E4=BF=AE=E6=94=B9=E5=BE=AE=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../primeport/service/DaHuaServiceImpl.java | 76 ------------------- 1 file changed, 76 deletions(-) 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 index 2e0ede3..569dcf7 100644 --- a/web-app/src/main/java/com/zcloud/primeport/service/DaHuaServiceImpl.java +++ b/web-app/src/main/java/com/zcloud/primeport/service/DaHuaServiceImpl.java @@ -11,14 +11,7 @@ import com.zcloud.gbscommon.dahua.cmd.DaHuaPersonSyncCmd; import com.zcloud.gbscommon.dahua.cmd.DaHuaTempVehicleSaveCmd; import com.zcloud.gbscommon.dahua.facade.ZcloudDaHuaFacade; import com.zcloud.primeport.domain.gateway.DaHuaGateway; -import com.zcloud.primeport.domain.model.DaHuaAccessRecordSyncResultE; -import com.zcloud.primeport.domain.model.DaHuaResourceSyncResultE; -import com.zcloud.primeport.dto.DaHuaAccessRecordSyncCmd; -import com.zcloud.primeport.dto.DaHuaResourceSyncCmd; -import com.zcloud.primeport.dto.clientobject.DaHuaAccessRecordSyncResultCO; -import com.zcloud.primeport.dto.clientobject.DaHuaResourceSyncResultCO; import org.apache.dubbo.config.annotation.DubboService; -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -32,12 +25,6 @@ public class DaHuaServiceImpl implements ZcloudDaHuaFacade { @Autowired private DaHuaGateway daHuaGateway; - @Autowired - private DaHuaResourceSyncApplicationService daHuaResourceSyncApplicationService; - - @Autowired - private DaHuaAccessRecordSyncApplicationService daHuaAccessRecordSyncApplicationService; - private Long resolveDahuaDeptId(Long corpId) { if (corpId == null) { return null; @@ -103,7 +90,6 @@ public class DaHuaServiceImpl implements ZcloudDaHuaFacade { resp.setErrCode(dhCode); resp.setErrMessage(dhErrMsg); resp.setData(passed); - System.out.println("大华修改人员最终返回 - success:" + resp.isSuccess() + ", errCode:" + resp.getErrCode() + ", errMessage:" + resp.getErrMessage() + ", data:" + resp.getData()); return resp; } @@ -119,7 +105,6 @@ public class DaHuaServiceImpl implements ZcloudDaHuaFacade { resp.setErrCode(dhCode); resp.setErrMessage(dhErrMsg); resp.setData(passed); - System.out.println("大华删除人员最终返回 - success:" + resp.isSuccess() + ", errCode:" + resp.getErrCode() + ", errMessage:" + resp.getErrMessage() + ", data:" + resp.getData()); return resp; } @@ -136,47 +121,12 @@ public class DaHuaServiceImpl implements ZcloudDaHuaFacade { resp.setErrCode(dhCode); resp.setErrMessage(dhErrMsg); resp.setData(passed); - System.out.println("大华新增车辆最终返回 - success:" + resp.isSuccess() + ", errCode:" + resp.getErrCode() + ", errMessage:" + resp.getErrMessage() + ", data:" + resp.getData()); return resp; } @Override public SingleResponse updateCar(DaHuaCarAddCmd cmd) { cmd.setDepartmentId(resolveDahuaDeptId(cmd.getDepartmentId())); - if ((cmd.getCarCode() == null || cmd.getCarCode().trim().isEmpty()) - && cmd.getCarNum() != null && !cmd.getCarNum().trim().isEmpty()) { - DaHuaCarPageCmd pageCmd = new DaHuaCarPageCmd(); - pageCmd.setCarNumList(java.util.Collections.singletonList(cmd.getCarNum())); - System.out.println("大华修改车辆:carCode为空,尝试根据carNum=" + cmd.getCarNum() + "查询carCode"); - Map pageResult = daHuaGateway.pageCar(pageCmd); - Boolean pagePassed = (Boolean) pageResult.get("passed"); - @SuppressWarnings("unchecked") - Map pageDataMap = (Map) pageResult.get("data"); - if (pagePassed != null && pagePassed && pageDataMap != null) { - Object pageDataObj = pageDataMap.get("pageData"); - if (pageDataObj instanceof java.util.List) { - @SuppressWarnings("unchecked") - java.util.List> pageDataList = (java.util.List>) pageDataObj; - for (Map item : pageDataList) { - Object carNumObj = item.get("carNum"); - if (carNumObj != null && cmd.getCarNum().equals(carNumObj.toString())) { - Object carCodeObj = item.get("carCode"); - if (carCodeObj != null) { - String foundCarCode = carCodeObj.toString(); - cmd.setCarCode(foundCarCode); - System.out.println("大华修改车辆:根据carNum=" + cmd.getCarNum() + "自动匹配到carCode=" + foundCarCode); - if (cmd.getDepartmentId() == null && item.get("departmentId") != null) { - Long deptId = Long.valueOf(item.get("departmentId").toString()); - cmd.setDepartmentId(deptId); - System.out.println("大华修改车辆:自动补充departmentId=" + deptId); - } - break; - } - } - } - } - } - } Map updateResult = daHuaGateway.updateCar(cmd); Boolean passed = (Boolean) updateResult.get("passed"); Boolean dhSuccess = (Boolean) updateResult.get("success"); @@ -187,12 +137,10 @@ public class DaHuaServiceImpl implements ZcloudDaHuaFacade { resp.setErrCode(dhCode); resp.setErrMessage(dhErrMsg); resp.setData(passed); - System.out.println("大华修改车辆最终返回 - success:" + resp.isSuccess() + ", errCode:" + resp.getErrCode() + ", errMessage:" + resp.getErrMessage() + ", data:" + resp.getData()); return resp; } @Override - @SuppressWarnings("unchecked") public SingleResponse> pageCar(DaHuaCarPageCmd cmd) { Map pageResult = daHuaGateway.pageCar(cmd); Boolean passed = (Boolean) pageResult.get("passed"); @@ -205,7 +153,6 @@ public class DaHuaServiceImpl implements ZcloudDaHuaFacade { resp.setErrCode(dhCode); resp.setErrMessage(dhErrMsg); resp.setData(dhData); - System.out.println("大华车辆分页查询最终返回 - success:" + resp.isSuccess() + ", errCode:" + resp.getErrCode() + ", errMessage:" + resp.getErrMessage() + ", data:" + (dhData != null ? "已返回数据" : "null")); return resp; } @@ -221,12 +168,10 @@ public class DaHuaServiceImpl implements ZcloudDaHuaFacade { resp.setErrCode(dhCode); resp.setErrMessage(dhErrMsg); resp.setData(passed); - System.out.println("大华删除车辆最终返回 - success:" + resp.isSuccess() + ", errCode:" + resp.getErrCode() + ", errMessage:" + resp.getErrMessage() + ", data:" + resp.getData()); return resp; } @Override - @SuppressWarnings("unchecked") public SingleResponse> queryAccessRecord(DaHuaAccessRecordCmd cmd) { Map queryResult = daHuaGateway.queryAccessRecord(cmd); Boolean passed = (Boolean) queryResult.get("passed"); @@ -243,16 +188,6 @@ public class DaHuaServiceImpl implements ZcloudDaHuaFacade { return resp; } - public SingleResponse syncAccessRecords(DaHuaAccessRecordSyncCmd cmd) { - int pageSize = cmd.getPageSize() == null ? 1000 : cmd.getPageSize(); - DaHuaAccessRecordSyncResultE result = daHuaAccessRecordSyncApplicationService.sync( - cmd.getStartSwingTime(), cmd.getEndSwingTime(), cmd.getStartCreateTime(), - cmd.getEndCreateTime(), pageSize); - DaHuaAccessRecordSyncResultCO data = new DaHuaAccessRecordSyncResultCO(); - BeanUtils.copyProperties(result, data); - return SingleResponse.of(data); - } - @Override public SingleResponse saveTempVehicle(DaHuaTempVehicleSaveCmd cmd) { cmd.setDepartmentId(resolveDahuaDeptId(cmd.getDepartmentId())); @@ -285,15 +220,4 @@ public class DaHuaServiceImpl implements ZcloudDaHuaFacade { System.out.println("大华临时车辆全量保存最终返回 - success:" + resp.isSuccess() + ", errCode:" + resp.getErrCode() + ", errMessage:" + resp.getErrMessage() + ", data(dhData):" + dhData); return resp; } - - public SingleResponse syncResources(DaHuaResourceSyncCmd cmd) { - DaHuaResourceSyncCmd actualCmd = cmd == null ? new DaHuaResourceSyncCmd() : cmd; - int pageSize = actualCmd.getPageSize() == null ? 200 : actualCmd.getPageSize(); - boolean autoMatchByName = actualCmd.getAutoMatchByName() == null || actualCmd.getAutoMatchByName(); - DaHuaResourceSyncResultE result = daHuaResourceSyncApplicationService.sync( - pageSize, actualCmd.getSubsystem(), autoMatchByName); - DaHuaResourceSyncResultCO data = new DaHuaResourceSyncResultCO(); - BeanUtils.copyProperties(result, data); - return SingleResponse.of(data); - } } \ No newline at end of file