dev_dahua_department
zhangxiongfeng 2026-08-03 14:24:21 +08:00
parent e0401dc004
commit ca0ebda107
13 changed files with 508 additions and 16 deletions

View File

@ -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);
}
}

View File

@ -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;
@ -185,4 +188,4 @@ public class DaHuaPersonSyncExe {
throw new BizException(message + (errorMessage == null ? "" : ": " + errorMessage));
}
}
}
}

View File

@ -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;
@ -79,4 +82,4 @@ public class DaHuaVehicleSyncExe {
throw new BizException(message + (errorMessage == null ? "" : ": " + errorMessage));
}
}
}
}

View File

@ -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;
}
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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();
}
}

View File

@ -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 = "企业IDcorp_id")
private Long corpId;
@ApiModelProperty(value = "大华部门ID")
private Long dahuaDepartmentId;
}

View File

@ -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> {
}

View File

@ -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);
}

View File

@ -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);
}
}