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 index 56beda7..b988393 100644 --- a/web-adapter/src/main/java/com/zcloud/primeport/web/DaHuaController.java +++ b/web-adapter/src/main/java/com/zcloud/primeport/web/DaHuaController.java @@ -6,6 +6,7 @@ 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.primeport.domain.model.DaHuaTempVehicleSaveCmd; import com.zcloud.primeport.dto.DaHuaCarDeleteCmd; import com.zcloud.primeport.dto.DaHuaPersonDeleteCmd; import io.swagger.annotations.Api; @@ -105,4 +106,13 @@ public class DaHuaController { } return daHuaService.deletePerson(cmd); } + + @ApiOperation("临时车辆全量保存(人员+车辆+卡片+人脸)") + @PostMapping("/temp-vehicle/save") + public SingleResponse saveTempVehicle(@Validated @RequestBody DaHuaTempVehicleSaveCmd cmd) { + if (daHuaService == null) { + throw new RuntimeException("大华服务未配置"); + } + return daHuaService.saveTempVehicle(cmd); + } } \ No newline at end of file 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..07aeaab 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 @@ -53,7 +53,7 @@ public class DaHuaPersonSyncExe { Long dahuaPersonId = daHuaGateway.findPersonIdByPaperNumber(paperNumber); DaHuaPersonSyncCmd syncCmd = buildSyncCmd(dahuaPersonId, person.getEmployeePersonUserName(), paperNumber, person.getUserPhone(), person.getUserFaceUrl(), - apply.getVisitStartTime(), apply.getVisitEndTime()); + apply.getVisitStartTime(), apply.getVisitEndTime(), person.getPersonCorpId()); Map result; if (dahuaPersonId == null) { syncCmd.setId(daHuaGateway.generatePersonId()); @@ -80,7 +80,7 @@ public class DaHuaPersonSyncExe { String updatedPaperNumber = decodeUserCard(updated.getUserCard()); DaHuaPersonSyncCmd syncCmd = buildSyncCmd(dahuaPersonId, updated.getEmployeePersonUserName(), updatedPaperNumber, updated.getUserPhone(), updated.getUserFaceUrl(), - updated.getVisitStartTime(), updated.getVisitEndTime()); + updated.getVisitStartTime(), updated.getVisitEndTime(), updated.getPersonCorpId()); checkResult(daHuaGateway.updatePerson(syncCmd), "修改大华人员失败"); } @@ -108,7 +108,7 @@ public class DaHuaPersonSyncExe { } private DaHuaPersonSyncCmd buildSyncCmd(Long id, String name, String paperNumber, String phone, - String faceUrl, String startTime, String endTime) { + String faceUrl, String startTime, String endTime, Long corpId) { DaHuaPersonSyncCmd cmd = new DaHuaPersonSyncCmd(); cmd.setService("evo-thirdParty"); cmd.setId(id); @@ -116,7 +116,11 @@ public class DaHuaPersonSyncExe { cmd.setCode("hbqa" + paperNumber); cmd.setPaperType(111); cmd.setPaperNumber(paperNumber); - cmd.setDepartmentId(1L); + Long dahuaDeptId = daHuaGateway.findDahuaDepartmentIdByCorpId(corpId); + if (dahuaDeptId == null) { + throw new BizException("未找到大华部门映射配置, corpId=" + corpId); + } + cmd.setDepartmentId(dahuaDeptId); cmd.setDepartmentType(2); cmd.setType(3); cmd.setPhone(phone); @@ -126,7 +130,6 @@ public class DaHuaPersonSyncExe { DaHuaPersonSyncCmd.PersonBiosignature face = new DaHuaPersonSyncCmd.PersonBiosignature(); face.setType(3); face.setIndex(1); - // userFaceUrl 是文件服务器相对路径,读取图片并转换为 Base64 后交给大华网关。 face.setBase64Data(resolveFaceBase64(faceUrl)); cmd.setPersonBiosignatures(Collections.singletonList(face)); return cmd; @@ -185,4 +188,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..acf40b9 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 @@ -25,18 +25,18 @@ public class DaHuaVehicleSyncExe { private final VehicleApplyGateway vehicleApplyGateway; /** - * 相关方车辆审核通过后,同步新增大华车辆。 + * 车辆审核通过后,同步新增大华车辆(所有车辆类型均同步)。 */ public void syncApprovedVehicle(Long vehicleApplyId) { VehicleApplyE vehicle = vehicleApplyGateway.getById(vehicleApplyId); - if (!isRelatedPartyVehicle(vehicle)) { + if (vehicle == null) { return; } syncAddedVehicle(vehicle); } /** - * 删除相关方车辆时,同步删除对应的大华车辆。 + * 删除车辆时,同步删除对应的大华车辆(所有车辆类型均同步)。 */ public void syncDeletedVehicles(List vehicles) { if (vehicles == null || vehicles.isEmpty()) { @@ -44,7 +44,7 @@ public class DaHuaVehicleSyncExe { } List carNumList = new ArrayList<>(); for (VehicleApplyE vehicle : vehicles) { - if (isRelatedPartyVehicle(vehicle)) { + if (vehicle != null && vehicle.getLicenceNo() != null) { carNumList.add(vehicle.getLicenceNo()); } } @@ -61,8 +61,11 @@ public class DaHuaVehicleSyncExe { DaHuaCarAddCmd cmd = new DaHuaCarAddCmd(); cmd.setCarNum(vehicle.getLicenceNo()); cmd.setCarNumColor(CarEnum.getMenuKeyByPath(vehicle.getLicenceType())); - // 大华车辆类型与本地字典不一致,该字段可选,不能直接透传本地 vehicleType。 - cmd.setDepartmentId(1L); + Long dahuaDeptId = daHuaGateway.findDahuaDepartmentIdByCorpId(vehicle.getVehicleCorpId()); + if (dahuaDeptId == null) { + throw new BizException("未找到大华部门映射配置, corpId=" + vehicle.getVehicleCorpId()); + } + cmd.setDepartmentId(dahuaDeptId); cmd.setDepartmentName(vehicle.getVehicleDepartmentName()); cmd.setService("evo-thirdParty"); return cmd; @@ -79,4 +82,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/DaHuaServiceImpl.java b/web-app/src/main/java/com/zcloud/primeport/service/DaHuaServiceImpl.java index 7e29ce8..f323f24 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 @@ -1,12 +1,14 @@ package com.zcloud.primeport.service; import com.alibaba.cola.dto.SingleResponse; +import com.alibaba.cola.exception.BizException; import com.zcloud.primeport.api.DaHuaServiceI; import com.zcloud.primeport.domain.gateway.DaHuaGateway; 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.primeport.domain.model.DaHuaTempVehicleSaveCmd; import com.zcloud.primeport.dto.DaHuaCarDeleteCmd; import com.zcloud.primeport.dto.DaHuaPersonDeleteCmd; import org.springframework.beans.factory.annotation.Autowired; @@ -20,6 +22,17 @@ public class DaHuaServiceImpl implements DaHuaServiceI { @Autowired private DaHuaGateway daHuaGateway; + private Long resolveDahuaDeptId(Long corpId) { + if (corpId == null) { + return null; + } + Long dahuaDeptId = daHuaGateway.findDahuaDepartmentIdByCorpId(corpId); + if (dahuaDeptId == null) { + throw new BizException("未找到大华部门映射配置, corpId=" + corpId); + } + return dahuaDeptId; + } + @Override public SingleResponse generatePersonId() { Long id = daHuaGateway.generatePersonId(); @@ -29,6 +42,12 @@ public class DaHuaServiceImpl implements DaHuaServiceI { @Override public SingleResponse syncPerson(DaHuaPersonSyncCmd cmd) { + cmd.setDepartmentId(resolveDahuaDeptId(cmd.getDepartmentId())); + if (cmd.getDepartmentList() != null) { + for (DaHuaPersonSyncCmd.DepartmentItem item : cmd.getDepartmentList()) { + item.setDepartmentId(resolveDahuaDeptId(item.getDepartmentId())); + } + } Long personId = daHuaGateway.generatePersonId(); System.out.println("大华自动生成人员ID: " + personId); cmd.setId(personId); @@ -49,6 +68,12 @@ public class DaHuaServiceImpl implements DaHuaServiceI { @Override public SingleResponse updatePerson(DaHuaPersonSyncCmd cmd) { + cmd.setDepartmentId(resolveDahuaDeptId(cmd.getDepartmentId())); + if (cmd.getDepartmentList() != null) { + for (DaHuaPersonSyncCmd.DepartmentItem item : cmd.getDepartmentList()) { + item.setDepartmentId(resolveDahuaDeptId(item.getDepartmentId())); + } + } Map updateResult = daHuaGateway.updatePerson(cmd); Boolean passed = (Boolean) updateResult.get("passed"); Boolean dhSuccess = (Boolean) updateResult.get("success"); @@ -81,6 +106,7 @@ public class DaHuaServiceImpl implements DaHuaServiceI { @Override public SingleResponse addCar(DaHuaCarAddCmd cmd) { + cmd.setDepartmentId(resolveDahuaDeptId(cmd.getDepartmentId())); Map addResult = daHuaGateway.addCar(cmd); Boolean passed = (Boolean) addResult.get("passed"); Boolean dhSuccess = (Boolean) addResult.get("success"); @@ -97,6 +123,7 @@ public class DaHuaServiceImpl implements DaHuaServiceI { @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(); @@ -196,4 +223,37 @@ public class DaHuaServiceImpl implements DaHuaServiceI { System.out.println("大华门禁事件查询最终返回 - success:" + resp.isSuccess() + ", errCode:" + resp.getErrCode() + ", errMessage:" + resp.getErrMessage() + ", data:" + (dhData != null ? "已返回数据" : "null")); return resp; } + + @Override + public SingleResponse saveTempVehicle(DaHuaTempVehicleSaveCmd cmd) { + cmd.setDepartmentId(resolveDahuaDeptId(cmd.getDepartmentId())); + if (cmd.getDepartmentList() != null) { + for (DaHuaTempVehicleSaveCmd.DepartmentItem item : cmd.getDepartmentList()) { + item.setDepartmentId(resolveDahuaDeptId(item.getDepartmentId())); + } + } + if (cmd.getCards() != null) { + for (DaHuaTempVehicleSaveCmd.CardItem card : cmd.getCards()) { + card.setDepartmentId(resolveDahuaDeptId(card.getDepartmentId())); + } + } + if (cmd.getCars() != null) { + for (DaHuaTempVehicleSaveCmd.CarItem car : cmd.getCars()) { + car.setDepartmentId(resolveDahuaDeptId(car.getDepartmentId())); + } + } + Map saveResult = daHuaGateway.saveTempVehicle(cmd); + Boolean passed = (Boolean) saveResult.get("passed"); + Boolean dhSuccess = (Boolean) saveResult.get("success"); + String dhCode = (String) saveResult.get("code"); + String dhErrMsg = (String) saveResult.get("errMsg"); + Object dhData = saveResult.get("dhData"); + SingleResponse resp = new SingleResponse<>(); + resp.setSuccess(dhSuccess != null ? dhSuccess : passed); + resp.setErrCode(dhCode); + resp.setErrMessage(dhErrMsg); + resp.setData(dhData); + System.out.println("大华临时车辆全量保存最终返回 - success:" + resp.isSuccess() + ", errCode:" + resp.getErrCode() + ", errMessage:" + resp.getErrMessage() + ", data(dhData):" + dhData); + return resp; + } } \ 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 index af2ef8a..a17ac8f 100644 --- a/web-client/src/main/java/com/zcloud/primeport/api/DaHuaServiceI.java +++ b/web-client/src/main/java/com/zcloud/primeport/api/DaHuaServiceI.java @@ -6,6 +6,7 @@ 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.primeport.domain.model.DaHuaTempVehicleSaveCmd; import com.zcloud.primeport.dto.DaHuaCarDeleteCmd; import com.zcloud.primeport.dto.DaHuaPersonDeleteCmd; @@ -30,4 +31,6 @@ public interface DaHuaServiceI { SingleResponse deleteCar(DaHuaCarDeleteCmd cmd); SingleResponse> queryAccessRecord(DaHuaAccessRecordCmd cmd); + + SingleResponse saveTempVehicle(DaHuaTempVehicleSaveCmd cmd); } \ 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 d9e0c34..b05b1b2 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 @@ -4,6 +4,7 @@ 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.primeport.domain.model.DaHuaTempVehicleSaveCmd; import java.util.List; import java.util.Map; @@ -31,4 +32,8 @@ public interface DaHuaGateway { 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-domain/src/main/java/com/zcloud/primeport/domain/model/DaHuaTempVehicleSaveCmd.java b/web-domain/src/main/java/com/zcloud/primeport/domain/model/DaHuaTempVehicleSaveCmd.java new file mode 100644 index 0000000..ecf8778 --- /dev/null +++ b/web-domain/src/main/java/com/zcloud/primeport/domain/model/DaHuaTempVehicleSaveCmd.java @@ -0,0 +1,115 @@ +package com.zcloud.primeport.domain.model; + +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Data +public class DaHuaTempVehicleSaveCmd { + + 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 auditTime; + + private String password; + + private String passwordKey; + + private String service; + + private List departmentList; + + private List personBiosignatures; + + private FieldExt fieldExt; + + private List cards; + + private List cars; + + @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; + private String data; + } + + @Data + public static class FieldExt { + private String businessType; + private Map useFieldNames; + } + + @Data + public static class CardItem { + private String cardNumber; + private String cardPassword; + private String category; + private String cardType; + private Long departmentId; + private String startDate; + private String endDate; + } + + @Data + public static class CarItem { + private String carCode; + private String carNum; + private String carNumColor; + private String carType; + private String carBrand; + private String carColor; + private Long departmentId; + private String departmentName; + private Long ownerId; + } +} \ 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 c8a50a5..8109f7a 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 @@ -26,6 +26,8 @@ public class DaHuaPersonApi { 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 PERSON_UPLOAD_IMG_URL = "/evo-apigw/evo-brm/1.0.0/person/subsystem/third/upload/img"; + private static final String PERSON_SAVE_ALL_URL = "/evo-apigw/evo-brm/1.2.0/person/subsystem/save-person-all"; + private static final String TEMP_VEHICLE_AUDIT_SAVE_URL = "/evo-apigw/evo-brm/1.2.0/person/subsystem/temp-vehicle/audit-save"; public boolean isConfigured() { return daHuaApiClient != null; @@ -144,4 +146,24 @@ public class DaHuaPersonApi { body.put("imageBase64", imageBase64); return daHuaApiClient.postJson(PERSON_UPLOAD_IMG_URL, body, headers); } -} + + public GeneralResponse savePersonAll(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(PERSON_SAVE_ALL_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_SAVE_URL, body, headers); + } +} \ 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 index e734f28..5ddd570 100644 --- a/web-infrastructure/src/main/java/com/zcloud/primeport/gatewayimpl/DaHuaGatewayImpl.java +++ b/web-infrastructure/src/main/java/com/zcloud/primeport/gatewayimpl/DaHuaGatewayImpl.java @@ -11,6 +11,9 @@ 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.primeport.domain.model.DaHuaTempVehicleSaveCmd; +import com.zcloud.primeport.persistence.dataobject.DaHuaDepartmentCorpMappingDO; +import com.zcloud.primeport.persistence.repository.DaHuaDepartmentCorpMappingRepository; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -30,6 +33,9 @@ public class DaHuaGatewayImpl implements DaHuaGateway { @Autowired(required = false) private DaHuaPersonApi daHuaPersonApi; + @Autowired + private DaHuaDepartmentCorpMappingRepository daHuaDeptMappingRepository; + @Override public Long generatePersonId() { if (daHuaPersonApi == null || !daHuaPersonApi.isConfigured()) { @@ -954,4 +960,205 @@ public class DaHuaGatewayImpl implements DaHuaGateway { } return null; } -} + + @Override + public Map saveTempVehicle(DaHuaTempVehicleSaveCmd cmd) { + if (daHuaPersonApi == null || !daHuaPersonApi.isConfigured()) { + throw new RuntimeException("大华服务未配置"); + } + if (cmd.getId() == null) { + Long personId = generatePersonId(); + System.out.println("大华临时车辆全量保存自动生成人员ID: " + personId); + cmd.setId(personId); + } + if (cmd.getService() == null || cmd.getService().trim().isEmpty()) { + cmd.setService("evo-thirdParty"); + } + Map uploadResult = uploadAndSetTempVehicleBiosignaturePaths(cmd); + if (uploadResult != null) { + return uploadResult; + } + Map body = convertToMap(cmd); + processTempVehicleBiosignatures(body); + System.out.println("==========[saveTempVehicle 完整请求参数 START]=========="); + System.out.println(JSONUtil.toJsonPrettyStr(body)); + log.info("大华临时车辆全量保存请求参数: {}", JSONUtil.toJsonStr(body)); + Map resultMap = new HashMap<>(); + try { + GeneralResponse response = daHuaPersonApi.saveTempVehicleAudit(body); + String responseJson = JSONUtil.toJsonStr(response); + log.info("大华临时车辆全量保存返回结果: {}", responseJson); + System.out.println("大华临时车辆全量保存返回结果: " + responseJson); + if (response == null) { + log.error("大华临时车辆全量保存失败: response为null"); + resultMap.put("passed", false); + resultMap.put("success", false); + resultMap.put("code", "SYSTEM_ERROR"); + resultMap.put("errMsg", "response为null"); + resultMap.put("dhData", null); + return resultMap; + } + JSONObject jsonObject = JSONUtil.parseObj(responseJson); + Boolean dhSuccess = jsonObject.getBool("success", false); + String dhCode = jsonObject.getStr("code", response.getCode()); + String dhErrMsg = jsonObject.getStr("errMsg", ""); + Object dhResultObj = jsonObject.get("result"); + Object dhData = jsonObject.get("data"); + if (dhResultObj != null) { + try { + JSONObject bizObj; + if (dhResultObj instanceof String) { + bizObj = JSONUtil.parseObj((String) dhResultObj); + } else if (dhResultObj instanceof JSONObject) { + bizObj = (JSONObject) dhResultObj; + } else { + bizObj = JSONUtil.parseObj(JSONUtil.toJsonStr(dhResultObj)); + } + dhSuccess = bizObj.getBool("success", dhSuccess); + dhCode = bizObj.getStr("code", dhCode); + dhErrMsg = bizObj.getStr("errMsg", dhErrMsg); + Object tmpData = bizObj.get("data"); + if (tmpData != null) { + dhData = tmpData; + } + } catch (Exception e) { + log.warn("大华临时车辆全量保存解析result字段失败: {}", e.getMessage()); + } + } + boolean passed = "0".equals(dhCode); + resultMap.put("passed", passed); + resultMap.put("success", dhSuccess); + resultMap.put("code", dhCode); + resultMap.put("errMsg", dhErrMsg); + resultMap.put("result", dhResultObj); + resultMap.put("dhData", dhData); + System.out.println("大华临时车辆全量保存返回dhData: " + dhData); + if (!passed) { + log.error("大华临时车辆全量保存失败: code={}, errMsg={}, response={}", dhCode, dhErrMsg, responseJson); + System.out.println("大华临时车辆全量保存失败: code=" + dhCode + ", errMsg=" + dhErrMsg); + } + return resultMap; + } catch (ClientException e) { + log.error("大华临时车辆全量保存异常: {}", e.getMessage(), e); + resultMap.put("passed", false); + resultMap.put("success", false); + resultMap.put("code", "CLIENT_EXCEPTION"); + resultMap.put("errMsg", e.getMessage()); + resultMap.put("dhData", null); + return resultMap; + } + } + + @SuppressWarnings("unchecked") + private Map uploadAndSetTempVehicleBiosignaturePaths(DaHuaTempVehicleSaveCmd cmd) { + List bios = cmd.getPersonBiosignatures(); + if (bios == null || bios.isEmpty()) { + return null; + } + int seq = 0; + for (DaHuaTempVehicleSaveCmd.PersonBiosignature bio : bios) { + seq++; + String base64Data = bio.getBase64Data(); + if (base64Data == null || base64Data.trim().isEmpty()) { + continue; + } + String finalBase64WithPrefix; + String t = base64Data.trim(); + if (t.toLowerCase().startsWith("data:")) { + finalBase64WithPrefix = t.replaceAll("\\s+", ""); + } else { + String pure = t.replaceAll("\\s+", ""); + if (pure.isEmpty()) { + continue; + } + finalBase64WithPrefix = "data:image/jpeg;base64," + pure; + } + System.out.println("[大华临时车辆图片上传] seq=" + seq + " 开始上传图片, base64长度=" + finalBase64WithPrefix.length()); + try { + String fileUrl = uploadPersonImg(finalBase64WithPrefix); + bio.setPath(fileUrl); + bio.setBase64Data(null); + System.out.println("[大华临时车辆图片上传] seq=" + seq + " 上传成功, path=" + fileUrl); + } catch (Exception e) { + log.error("[大华临时车辆图片上传] seq=" + seq + " 上传失败: {}", e.getMessage(), e); + System.err.println("[大华临时车辆图片上传] seq=" + seq + " 上传失败: " + e.getMessage()); + Map resultMap = new HashMap<>(); + resultMap.put("passed", false); + resultMap.put("success", false); + resultMap.put("code", "IMG_UPLOAD_FAIL"); + resultMap.put("errMsg", "第" + seq + "张人脸图片上传失败: " + e.getMessage()); + resultMap.put("dhData", null); + return resultMap; + } + } + return null; + } + + @SuppressWarnings("unchecked") + private void processTempVehicleBiosignatures(Map body) { + Object bios = body.get("personBiosignatures"); + if (bios == null || !(bios instanceof List)) return; + List inList = (List) bios; + List> outList = new ArrayList<>(); + for (Object item : inList) { + Map out = new HashMap<>(); + if (item instanceof Map) { + Map mm = (Map) item; + if (mm.get("type") != null) out.put("type", mm.get("type")); + if (mm.get("index") != null) out.put("index", mm.get("index")); + Object path = mm.get("path"); + if (path != null && !path.toString().trim().isEmpty()) { + out.put("path", path.toString().trim()); + } else { + out.put("path", ""); + } + Object base64Data = mm.get("base64Data"); + if (base64Data != null && !base64Data.toString().trim().isEmpty()) { + String s = base64Data.toString().trim(); + if (!s.toLowerCase().startsWith("data:")) { + s = "data:image/jpeg;base64," + s.replaceAll("\\s+", ""); + } + out.put("base64Data", s); + } + Object data = mm.get("data"); + if (data != null && !data.toString().trim().isEmpty()) { + out.put("data", data); + } + } else if (item instanceof DaHuaTempVehicleSaveCmd.PersonBiosignature) { + DaHuaTempVehicleSaveCmd.PersonBiosignature b = (DaHuaTempVehicleSaveCmd.PersonBiosignature) item; + if (b.getType() != null) out.put("type", b.getType()); + if (b.getIndex() != null) out.put("index", b.getIndex()); + if (b.getPath() != null && !b.getPath().trim().isEmpty()) { + out.put("path", b.getPath().trim()); + } else { + out.put("path", ""); + } + if (b.getBase64Data() != null && !b.getBase64Data().trim().isEmpty()) { + String s = b.getBase64Data().trim(); + if (!s.toLowerCase().startsWith("data:")) { + s = "data:image/jpeg;base64," + s.replaceAll("\\s+", ""); + } + out.put("base64Data", s); + } + if (b.getData() != null && !b.getData().trim().isEmpty()) { + out.put("data", b.getData()); + } + } + outList.add(out); + } + body.put("personBiosignatures", outList); + } + + @Override + public Long findDahuaDepartmentIdByCorpId(Long corpId) { + if (corpId == null) { + return null; + } + DaHuaDepartmentCorpMappingDO mapping = daHuaDeptMappingRepository.findByCorpId(corpId); + if (mapping == null) { + log.warn("未找到大华部门映射配置, corpId={}", corpId); + return null; + } + return mapping.getDahuaDepartmentId(); + } +} \ No newline at end of file diff --git a/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/dataobject/DaHuaDepartmentCorpMappingDO.java b/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/dataobject/DaHuaDepartmentCorpMappingDO.java new file mode 100644 index 0000000..a06e5d1 --- /dev/null +++ b/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/dataobject/DaHuaDepartmentCorpMappingDO.java @@ -0,0 +1,19 @@ +package com.zcloud.primeport.persistence.dataobject; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.jjb.saas.framework.repository.basedo.BaseDO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@TableName("dahua_department_corp_mapping") +@EqualsAndHashCode(callSuper = true) +public class DaHuaDepartmentCorpMappingDO extends BaseDO { + + @ApiModelProperty(value = "企业ID(corp_id)") + private Long corpId; + + @ApiModelProperty(value = "大华部门ID") + private Long dahuaDepartmentId; +} \ No newline at end of file diff --git a/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/mapper/DaHuaDepartmentCorpMappingMapper.java b/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/mapper/DaHuaDepartmentCorpMappingMapper.java new file mode 100644 index 0000000..18261aa --- /dev/null +++ b/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/mapper/DaHuaDepartmentCorpMappingMapper.java @@ -0,0 +1,9 @@ +package com.zcloud.primeport.persistence.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zcloud.primeport.persistence.dataobject.DaHuaDepartmentCorpMappingDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface DaHuaDepartmentCorpMappingMapper extends BaseMapper { +} \ No newline at end of file diff --git a/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/repository/DaHuaDepartmentCorpMappingRepository.java b/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/repository/DaHuaDepartmentCorpMappingRepository.java new file mode 100644 index 0000000..128e62a --- /dev/null +++ b/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/repository/DaHuaDepartmentCorpMappingRepository.java @@ -0,0 +1,9 @@ +package com.zcloud.primeport.persistence.repository; + +import com.jjb.saas.framework.repository.repo.BaseRepository; +import com.zcloud.primeport.persistence.dataobject.DaHuaDepartmentCorpMappingDO; + +public interface DaHuaDepartmentCorpMappingRepository extends BaseRepository { + + DaHuaDepartmentCorpMappingDO findByCorpId(Long corpId); +} \ No newline at end of file diff --git a/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/repository/impl/DaHuaDepartmentCorpMappingRepositoryImpl.java b/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/repository/impl/DaHuaDepartmentCorpMappingRepositoryImpl.java new file mode 100644 index 0000000..34ea30c --- /dev/null +++ b/web-infrastructure/src/main/java/com/zcloud/primeport/persistence/repository/impl/DaHuaDepartmentCorpMappingRepositoryImpl.java @@ -0,0 +1,27 @@ +package com.zcloud.primeport.persistence.repository.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl; +import com.zcloud.primeport.persistence.dataobject.DaHuaDepartmentCorpMappingDO; +import com.zcloud.primeport.persistence.mapper.DaHuaDepartmentCorpMappingMapper; +import com.zcloud.primeport.persistence.repository.DaHuaDepartmentCorpMappingRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class DaHuaDepartmentCorpMappingRepositoryImpl extends BaseRepositoryImpl implements DaHuaDepartmentCorpMappingRepository { + + private final DaHuaDepartmentCorpMappingMapper mapper; + + @Override + public DaHuaDepartmentCorpMappingDO findByCorpId(Long corpId) { + if (corpId == null) { + return null; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("corp_id", corpId); + queryWrapper.last("LIMIT 1"); + return mapper.selectOne(queryWrapper); + } +} \ No newline at end of file