2026.8.3
parent
e0401dc004
commit
ca0ebda107
|
|
@ -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<Object> saveTempVehicle(@Validated @RequestBody DaHuaTempVehicleSaveCmd cmd) {
|
||||
if (daHuaService == null) {
|
||||
throw new RuntimeException("大华服务未配置");
|
||||
}
|
||||
return daHuaService.saveTempVehicle(cmd);
|
||||
}
|
||||
}
|
||||
|
|
@ -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<String, Object> 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;
|
||||
|
|
|
|||
|
|
@ -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<VehicleApplyE> vehicles) {
|
||||
if (vehicles == null || vehicles.isEmpty()) {
|
||||
|
|
@ -44,7 +44,7 @@ public class DaHuaVehicleSyncExe {
|
|||
}
|
||||
List<String> 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;
|
||||
|
|
|
|||
|
|
@ -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<Long> generatePersonId() {
|
||||
Long id = daHuaGateway.generatePersonId();
|
||||
|
|
@ -29,6 +42,12 @@ public class DaHuaServiceImpl implements DaHuaServiceI {
|
|||
|
||||
@Override
|
||||
public SingleResponse<Object> 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<Boolean> updatePerson(DaHuaPersonSyncCmd cmd) {
|
||||
cmd.setDepartmentId(resolveDahuaDeptId(cmd.getDepartmentId()));
|
||||
if (cmd.getDepartmentList() != null) {
|
||||
for (DaHuaPersonSyncCmd.DepartmentItem item : cmd.getDepartmentList()) {
|
||||
item.setDepartmentId(resolveDahuaDeptId(item.getDepartmentId()));
|
||||
}
|
||||
}
|
||||
Map<String, Object> 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<Boolean> addCar(DaHuaCarAddCmd cmd) {
|
||||
cmd.setDepartmentId(resolveDahuaDeptId(cmd.getDepartmentId()));
|
||||
Map<String, Object> 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<Boolean> 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<Object> 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<String, Object> 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<Object> 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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Boolean> deleteCar(DaHuaCarDeleteCmd cmd);
|
||||
|
||||
SingleResponse<Map<String, Object>> queryAccessRecord(DaHuaAccessRecordCmd cmd);
|
||||
|
||||
SingleResponse<Object> saveTempVehicle(DaHuaTempVehicleSaveCmd cmd);
|
||||
}
|
||||
|
|
@ -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<String, Object> queryAccessRecord(DaHuaAccessRecordCmd cmd);
|
||||
|
||||
String uploadPersonImg(String imageBase64);
|
||||
|
||||
Map<String, Object> saveTempVehicle(DaHuaTempVehicleSaveCmd cmd);
|
||||
|
||||
Long findDahuaDepartmentIdByCorpId(Long corpId);
|
||||
}
|
||||
|
|
@ -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<DepartmentItem> departmentList;
|
||||
|
||||
private List<PersonBiosignature> personBiosignatures;
|
||||
|
||||
private FieldExt fieldExt;
|
||||
|
||||
private List<CardItem> cards;
|
||||
|
||||
private List<CarItem> 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<String, Object> 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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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<String, Object> body) throws ClientException {
|
||||
if (daHuaApiClient == null) {
|
||||
return null;
|
||||
}
|
||||
String token = daHuaApiClient.getToken();
|
||||
Map<String, String> headers = new HashMap<>();
|
||||
headers.put("Authorization", "bearer " + token);
|
||||
return daHuaApiClient.postJson(PERSON_SAVE_ALL_URL, body, headers);
|
||||
}
|
||||
|
||||
public GeneralResponse saveTempVehicleAudit(Map<String, Object> body) throws ClientException {
|
||||
if (daHuaApiClient == null) {
|
||||
return null;
|
||||
}
|
||||
String token = daHuaApiClient.getToken();
|
||||
Map<String, String> headers = new HashMap<>();
|
||||
headers.put("Authorization", "bearer " + token);
|
||||
return daHuaApiClient.postJson(TEMP_VEHICLE_AUDIT_SAVE_URL, body, headers);
|
||||
}
|
||||
}
|
||||
|
|
@ -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<String, Object> 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<String, Object> uploadResult = uploadAndSetTempVehicleBiosignaturePaths(cmd);
|
||||
if (uploadResult != null) {
|
||||
return uploadResult;
|
||||
}
|
||||
Map<String, Object> body = convertToMap(cmd);
|
||||
processTempVehicleBiosignatures(body);
|
||||
System.out.println("==========[saveTempVehicle 完整请求参数 START]==========");
|
||||
System.out.println(JSONUtil.toJsonPrettyStr(body));
|
||||
log.info("大华临时车辆全量保存请求参数: {}", JSONUtil.toJsonStr(body));
|
||||
Map<String, Object> 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<String, Object> uploadAndSetTempVehicleBiosignaturePaths(DaHuaTempVehicleSaveCmd cmd) {
|
||||
List<DaHuaTempVehicleSaveCmd.PersonBiosignature> 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<String, Object> 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<String, Object> body) {
|
||||
Object bios = body.get("personBiosignatures");
|
||||
if (bios == null || !(bios instanceof List)) return;
|
||||
List<Object> inList = (List<Object>) bios;
|
||||
List<Map<String, Object>> outList = new ArrayList<>();
|
||||
for (Object item : inList) {
|
||||
Map<String, Object> out = new HashMap<>();
|
||||
if (item instanceof Map) {
|
||||
Map<String, Object> mm = (Map<String, Object>) 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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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<DaHuaDepartmentCorpMappingDO> {
|
||||
}
|
||||
|
|
@ -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> {
|
||||
|
||||
DaHuaDepartmentCorpMappingDO findByCorpId(Long corpId);
|
||||
}
|
||||
|
|
@ -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<DaHuaDepartmentCorpMappingMapper, DaHuaDepartmentCorpMappingDO> implements DaHuaDepartmentCorpMappingRepository {
|
||||
|
||||
private final DaHuaDepartmentCorpMappingMapper mapper;
|
||||
|
||||
@Override
|
||||
public DaHuaDepartmentCorpMappingDO findByCorpId(Long corpId) {
|
||||
if (corpId == null) {
|
||||
return null;
|
||||
}
|
||||
QueryWrapper<DaHuaDepartmentCorpMappingDO> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("corp_id", corpId);
|
||||
queryWrapper.last("LIMIT 1");
|
||||
return mapper.selectOne(queryWrapper);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue