From b7ba5e46c24de53a1c1b7637f4a6cb22641d7e47 Mon Sep 17 00:00:00 2001 From: zhangxiongfeng Date: Tue, 4 Aug 2026 14:51:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=A7=E5=8D=8E=E5=8F=A3=E9=97=A8=E5=AF=B9?= =?UTF-8?q?=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit 65ad2b538e17143405490877880f2e62d3d596fb) --- .../zcloud/basic/info/command/UserAddExe.java | 148 +++++++++--------- .../basic/info/command/UserRemoveExe.java | 75 +++------ .../basic/info/command/UserUpdateExe.java | 96 +++++------- .../DepartmentLeaderStatictiscDO.java | 6 +- 4 files changed, 137 insertions(+), 188 deletions(-) diff --git a/web-app/src/main/java/com/zcloud/basic/info/command/UserAddExe.java b/web-app/src/main/java/com/zcloud/basic/info/command/UserAddExe.java index f63d5f1f..f19ec61c 100644 --- a/web-app/src/main/java/com/zcloud/basic/info/command/UserAddExe.java +++ b/web-app/src/main/java/com/zcloud/basic/info/command/UserAddExe.java @@ -32,6 +32,8 @@ import com.zcloud.basic.info.dto.*; import com.zcloud.basic.info.persistence.dataobject.*; import com.zcloud.basic.info.persistence.repository.*; import com.zcloud.gbscommon.utils.*; +import com.zcloud.gbscommon.dahua.facade.ZcloudDaHuaFacade; +import com.zcloud.gbscommon.dahua.cmd.DaHuaPersonSyncCmd; import lombok.AllArgsConstructor; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -98,6 +100,8 @@ public class UserAddExe { private final UserExpandInfoRepository userExpandInfoRepository; private final ImgFilesRepository imgFilesRepository; private final DaHuaConfig daHuaConfig; + @DubboReference + private ZcloudDaHuaFacade zcloudDaHuaFacade; @Transactional(rollbackFor = Exception.class) public boolean execute(UserAddCmd cmd) { @@ -373,11 +377,11 @@ public class UserAddExe { log.error("同步大华人员失败:人脸图片base64主体长度过短({}),缩略图可能损坏", bodyLen); } - List> personBiosignatures = new ArrayList<>(); - Map biosignature = new java.util.LinkedHashMap<>(); - biosignature.put("type", 3); - biosignature.put("index", 1); - biosignature.put("base64Data", cleanBase64); + List personBiosignatures = new ArrayList<>(); + DaHuaPersonSyncCmd.PersonBiosignature biosignature = new DaHuaPersonSyncCmd.PersonBiosignature(); + biosignature.setType(3); + biosignature.setIndex(1); + biosignature.setBase64Data(cleanBase64); personBiosignatures.add(biosignature); personMap.put("personBiosignatures", personBiosignatures); } else { @@ -430,44 +434,34 @@ public class UserAddExe { } personMap.put("age", age); personMap.put("sex", sex); - Map extraHeaders = new HashMap<>(); - try { - ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); - if (attrs != null) { - HttpServletRequest req = attrs.getRequest(); - String token = req.getHeader("token"); - String orgid = req.getHeader("orgid"); - String tenantId = req.getHeader("tenantId"); - if (token != null && !token.trim().isEmpty()) { - extraHeaders.put("token", token); - } - if (orgid != null && !orgid.trim().isEmpty()) { - extraHeaders.put("orgid", orgid); - } - if (tenantId != null && !tenantId.trim().isEmpty()) { - extraHeaders.put("tenantId", tenantId); - } - } - } catch (Exception e) { - log.warn("获取当前请求头异常: {}", e.getMessage()); - } - Map syncResult = daHuaConfig.syncPerson(personMap, extraHeaders); - Boolean success = (Boolean) syncResult.get("success"); - Boolean skipped = (Boolean) syncResult.get("skipped"); + DaHuaSyncResult result = new DaHuaSyncResult(); result.setDahuaCode(plainIdCard); - if (skipped != null && skipped) { + if (daHuaConfig.getDockFlag() == null || daHuaConfig.getDockFlag() != 1) { + log.info("大华对接未开启(dockFlag={}), 跳过同步人员到大华", daHuaConfig.getDockFlag()); + userE.setDahuaCode(plainIdCard); return result; } + + DaHuaPersonSyncCmd cmd = cn.hutool.core.bean.BeanUtil.toBean(personMap, DaHuaPersonSyncCmd.class); + Object biosObj = personMap.get("personBiosignatures"); + if (biosObj instanceof List) { + @SuppressWarnings("unchecked") + List bioList = (List) biosObj; + cmd.setPersonBiosignatures(bioList); + } + + SingleResponse syncResp = zcloudDaHuaFacade.syncPerson(cmd); String maskedIdCard = plainIdCard; if (plainIdCard != null && plainIdCard.length() >= 14) { maskedIdCard = plainIdCard.substring(0, 6) + "********" + plainIdCard.substring(plainIdCard.length() - 4); } result.setDahuaCode(plainIdCard); userE.setDahuaCode(plainIdCard); - if (success == null || !success) { - String errCode = (String) syncResult.getOrDefault("errCode", ""); - String errMessage = (String) syncResult.getOrDefault("errMessage", "大华人员同步失败"); + if (syncResp == null || !syncResp.isSuccess()) { + String errCode = syncResp == null ? "" : syncResp.getErrCode(); + String errMessage = syncResp == null ? "大华Dubbo返回为空" : syncResp.getErrMessage(); + if (errMessage == null || errMessage.trim().isEmpty()) errMessage = "大华人员同步失败"; if (throwOnFail) { throw new BizException("同步大华平台失败:" + errMessage); } else { @@ -476,7 +470,7 @@ public class UserAddExe { return result; } } - Object data = syncResult.get("data"); + Object data = syncResp.getData(); if (data != null) { if (data instanceof Map) { Map dataMap = (Map) data; @@ -996,51 +990,51 @@ public class UserAddExe { userExpandInfoRepository.updateByPhone(userE.getPhone(),userE.getFlowFlag()); } - // ========== 相关方用户同步大华(统一用 /person/sync;重复信息返回false直接跳过不影响本地)========== - Long xgfUserId = addFlag ? userE.getId() : userDOUpdate.getId(); - if (xgfUserId == null) { - log.warn("相关方用户保存后未获取到userId,跳过大华同步及dahua信息写回, addFlag={}", addFlag); + // ========== 相关方用户同步大华(新增场景跳过,修改场景同步;重复信息返回false直接跳过不影响本地)========== + if (addFlag) { + log.info("相关方用户新增场景,跳过大华同步"); } else { - Object xgfAvatarSource = cmd.getUserImg(); - if (xgfAvatarSource == null) { - xgfAvatarSource = cmd.getUserAvatarUrl(); - } - DaHuaSyncResult xgfSyncResult = null; - try { - xgfSyncResult = syncDaHuaPerson(userE, xgfAvatarSource, false); - } catch (Exception e) { - log.error("相关方用户同步大华异常(不影响本地保存,继续执行写回身份证号为dahuaCode), userId={}, addFlag={}, error={}", - xgfUserId, addFlag, e.getMessage(), e); - } - // 无论大华同步成功/失败/返回false/抛异常,都尝试写回dahuaId/dahuaCode: - // dahuaId = 大华返回的id(成功时才有,失败/异常/重复时为null) - // dahuaCode = 前端传的身份证号(经过Base64解码的明文,syncDaHuaPerson里即使失败也已经set到result了) - Integer xgfDahuaId = xgfSyncResult != null ? xgfSyncResult.dahuaId : null; - String xgfDahuaCode = xgfSyncResult != null ? xgfSyncResult.dahuaCode : null; - // 如果xgfSyncResult异常或dahuaCode为空兜底:直接把userE.getUserIdCard()做一次Base64解码写入dahuaCode,保证100%写回 - if ((xgfDahuaCode == null || xgfDahuaCode.trim().isEmpty()) && userE.getUserIdCard() != null && !userE.getUserIdCard().trim().isEmpty()) { - String idCardRaw = userE.getUserIdCard().trim(); - try { - xgfDahuaCode = new String(java.util.Base64.getDecoder().decode(idCardRaw), java.nio.charset.StandardCharsets.UTF_8); - } catch (Exception e) { - xgfDahuaCode = idCardRaw; - } - } - if (xgfDahuaId != null || (xgfDahuaCode != null && !xgfDahuaCode.trim().isEmpty())) { - try { - UserE updateDahua = new UserE(); - updateDahua.setId(xgfUserId); - updateDahua.setDahuaId(xgfDahuaId); - updateDahua.setDahuaCode(xgfDahuaCode); - userRepository.updateDahuaInfo(updateDahua.getId(), updateDahua.getDahuaId(), updateDahua.getDahuaCode()); - log.info("相关方用户写回dahuaId/dahuaCode成功, userId={}, addFlag={}, dahuaId={}, dahuaCode={}", - xgfUserId, addFlag, xgfDahuaId, xgfDahuaCode); - } catch (Exception e) { - log.error("相关方用户写回dahuaId/dahuaCode失败, userId={}, addFlag={}, dahuaId={}, dahuaCode={}", - xgfUserId, addFlag, xgfDahuaId, xgfDahuaCode, e); - } + Long xgfUserId = userDOUpdate.getId(); + if (xgfUserId == null) { + log.warn("相关方用户修改后未获取到userId,跳过大华同步及dahua信息写回"); } else { - log.warn("相关方用户既无dahuaId也无dahuaCode可写回,跳过update, userId={}, addFlag={}", xgfUserId, addFlag); + Object xgfAvatarSource = cmd.getUserImg(); + if (xgfAvatarSource == null) { + xgfAvatarSource = cmd.getUserAvatarUrl(); + } + DaHuaSyncResult xgfSyncResult = null; + try { + xgfSyncResult = syncDaHuaPerson(userE, xgfAvatarSource, false); + } catch (Exception e) { + log.error("相关方用户同步大华异常(不影响本地保存,继续执行写回身份证号为dahuaCode), userId={}, error={}", + xgfUserId, e.getMessage(), e); + } + Integer xgfDahuaId = xgfSyncResult != null ? xgfSyncResult.dahuaId : null; + String xgfDahuaCode = xgfSyncResult != null ? xgfSyncResult.dahuaCode : null; + if ((xgfDahuaCode == null || xgfDahuaCode.trim().isEmpty()) && userE.getUserIdCard() != null && !userE.getUserIdCard().trim().isEmpty()) { + String idCardRaw = userE.getUserIdCard().trim(); + try { + xgfDahuaCode = new String(java.util.Base64.getDecoder().decode(idCardRaw), java.nio.charset.StandardCharsets.UTF_8); + } catch (Exception e) { + xgfDahuaCode = idCardRaw; + } + } + if (xgfDahuaId != null || (xgfDahuaCode != null && !xgfDahuaCode.trim().isEmpty())) { + try { + UserE updateDahua = new UserE(); + updateDahua.setId(xgfUserId); + updateDahua.setDahuaId(xgfDahuaId); + updateDahua.setDahuaCode(xgfDahuaCode); + userRepository.updateDahuaInfo(updateDahua.getId(), updateDahua.getDahuaId(), updateDahua.getDahuaCode()); + log.info("相关方用户写回dahuaId/dahuaCode成功, userId={}, dahuaId={}, dahuaCode={}", + xgfUserId, xgfDahuaId, xgfDahuaCode); + } catch (Exception e) { + log.error("相关方用户写回dahuaId/dahuaCode失败, userId={}, dahuaId={}, dahuaCode={}", + xgfUserId, xgfDahuaId, xgfDahuaCode, e); + } + } else { + log.warn("相关方用户既无dahuaId也无dahuaCode可写回,跳过update, userId={}", xgfUserId); + } } } // ========================================================================= diff --git a/web-app/src/main/java/com/zcloud/basic/info/command/UserRemoveExe.java b/web-app/src/main/java/com/zcloud/basic/info/command/UserRemoveExe.java index bdde32bd..9c18a4f4 100644 --- a/web-app/src/main/java/com/zcloud/basic/info/command/UserRemoveExe.java +++ b/web-app/src/main/java/com/zcloud/basic/info/command/UserRemoveExe.java @@ -22,16 +22,15 @@ import com.zcloud.basic.info.persistence.repository.UserJobHandoverRepository; import com.zcloud.basic.info.persistence.repository.UserRepository; import com.zcloud.basic.info.domain.config.DaHuaConfig; import com.zcloud.gbscommon.utils.ZcloudRedisUtil; +import com.zcloud.gbscommon.dahua.facade.ZcloudDaHuaFacade; +import com.zcloud.gbscommon.dahua.cmd.DaHuaPersonDeleteCmd; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; -import javax.servlet.http.HttpServletRequest; import java.util.*; import java.util.stream.Collectors; @@ -56,6 +55,8 @@ public class UserRemoveExe { private ZcloudRedisUtil zcloudRedisUtil; private final UserCorpRecordRepository userCorpRecordRepository; private final DaHuaConfig daHuaConfig; + @DubboReference + private ZcloudDaHuaFacade zcloudDaHuaFacade; @Transactional(rollbackFor = Exception.class) public boolean execute(Long id) { @@ -79,21 +80,22 @@ public class UserRemoveExe { // ② 本地操作完成后再删大华。若大华失败 → throw BizException → 本地全部回滚 if (needDeleteDaHua) { - Map deleteResult = daHuaConfig.deletePerson( - Collections.singletonList(dahuaId), getDaHuaExtraHeaders()); - Boolean skipped = (Boolean) deleteResult.get("skipped"); - if (skipped == null || !skipped) { - Boolean success = (Boolean) deleteResult.get("success"); - String errCode = (String) deleteResult.getOrDefault("errCode", ""); - String errMessage = (String) deleteResult.getOrDefault("errMessage", ""); - if (success == null || !success) { + if (daHuaConfig.getDockFlag() == null || daHuaConfig.getDockFlag() != 1) { + log.info("大华对接未开启(dockFlag={}), 跳过删除大华人员, userId={}", daHuaConfig.getDockFlag(), id); + } else { + DaHuaPersonDeleteCmd delCmd = new DaHuaPersonDeleteCmd(); + delCmd.setIds(Collections.singletonList(dahuaId.longValue())); + log.info("Dubbo调用zcloudDaHuaFacade.deletePerson, dahuaId={}", dahuaId); + SingleResponse delResp = zcloudDaHuaFacade.deletePerson(delCmd); + if (delResp == null || !delResp.isSuccess()) { + String errCode = delResp == null ? "" : delResp.getErrCode(); + String errMessage = delResp == null ? "大华Dubbo返回为空" : delResp.getErrMessage(); + if (errMessage == null || errMessage.trim().isEmpty()) errMessage = "删除大华人员失败"; log.error("【单个删除-大华删除失败→触发本地回滚】userId={}, dahuaId={}, errCode={}, errMessage={}", id, dahuaId, errCode, errMessage); throw new BizException("删除大华平台人员失败:" + errMessage); } log.info("【单个删除-大华删除成功】userId={}, dahuaId={}", id, dahuaId); - } else { - log.info("【单个删除-大华删除跳过】dockFlag未开启, userId={}", id); } } } catch (BizException e) { @@ -195,32 +197,6 @@ public class UserRemoveExe { return true; } - private Map getDaHuaExtraHeaders() { - Map extraHeaders = new HashMap<>(); - try { - ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); - if (attrs != null) { - HttpServletRequest req = attrs.getRequest(); - String token = req.getHeader("token"); - String orgid = req.getHeader("orgid"); - String tenantId = req.getHeader("tenantId"); - if (token != null && !token.trim().isEmpty()) { - extraHeaders.put("token", token); - } - if (orgid != null && !orgid.trim().isEmpty()) { - extraHeaders.put("orgid", orgid); - } - if (tenantId != null && !tenantId.trim().isEmpty()) { - extraHeaders.put("tenantId", tenantId); - } - } - } catch (Exception e) { - log.warn("获取大华透传请求头失败: {}", e.getMessage()); - } - return extraHeaders; - } - - @Transactional(rollbackFor = Exception.class) public boolean execute(Long[] ids) { try { @@ -242,21 +218,22 @@ public class UserRemoveExe { // ② 本地成功后再删大华。大华失败→throw→本地回滚 if (!dahuaIds.isEmpty()) { - Map extraHeaders = getDaHuaExtraHeaders(); - Map deleteResult = daHuaConfig.deletePerson(dahuaIds, extraHeaders); - Boolean skipped = (Boolean) deleteResult.get("skipped"); - if (skipped == null || !skipped) { - Boolean success = (Boolean) deleteResult.get("success"); - String errCode = (String) deleteResult.getOrDefault("errCode", ""); - String errMessage = (String) deleteResult.getOrDefault("errMessage", ""); - if (success == null || !success) { + if (daHuaConfig.getDockFlag() == null || daHuaConfig.getDockFlag() != 1) { + log.info("大华对接未开启(dockFlag={}), 跳过批量删除大华人员, idList={}", daHuaConfig.getDockFlag(), idList); + } else { + DaHuaPersonDeleteCmd delCmd = new DaHuaPersonDeleteCmd(); + delCmd.setIds(dahuaIds.stream().map(Long::longValue).collect(Collectors.toList())); + log.info("Dubbo调用zcloudDaHuaFacade.deletePerson, dahuaIds={}", dahuaIds); + SingleResponse delResp = zcloudDaHuaFacade.deletePerson(delCmd); + if (delResp == null || !delResp.isSuccess()) { + String errCode = delResp == null ? "" : delResp.getErrCode(); + String errMessage = delResp == null ? "大华Dubbo返回为空" : delResp.getErrMessage(); + if (errMessage == null || errMessage.trim().isEmpty()) errMessage = "删除大华人员失败"; log.error("【批量删除-大华删除失败→触发本地回滚】localIds={}, dahuaIds={}, errCode={}, errMessage={}", idList, dahuaIds, errCode, errMessage); throw new BizException("删除大华平台人员失败:" + errMessage); } log.info("【批量删除-大华删除成功】dahuaIds={}", dahuaIds); - } else { - log.info("【批量删除-大华删除跳过】dockFlag未开启, idList={}", idList); } } return true; diff --git a/web-app/src/main/java/com/zcloud/basic/info/command/UserUpdateExe.java b/web-app/src/main/java/com/zcloud/basic/info/command/UserUpdateExe.java index 5c8997ce..50c15358 100644 --- a/web-app/src/main/java/com/zcloud/basic/info/command/UserUpdateExe.java +++ b/web-app/src/main/java/com/zcloud/basic/info/command/UserUpdateExe.java @@ -28,6 +28,9 @@ import com.zcloud.gbscommon.zcloudhidden.request.HiddenStatisticsListQry; import com.zcloud.gbscommon.zcloudhidden.request.HiddenUpdateCmd; import com.zcloud.gbscommon.zcloudhidden.response.HiddenListByUserCO; import com.zcloud.gbscommon.zcloudrisk.facade.ZcloudRiskFacade; +import com.zcloud.gbscommon.dahua.facade.ZcloudDaHuaFacade; +import com.zcloud.gbscommon.dahua.cmd.DaHuaPersonSyncCmd; +import com.zcloud.gbscommon.dahua.cmd.DaHuaPersonDeleteCmd; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; @@ -77,6 +80,8 @@ public class UserUpdateExe { private ZcloudHiddenFacade zcloudHiddenFacade; @DubboReference private ZcloudRiskFacade zcloudRiskFacade; + @DubboReference + private ZcloudDaHuaFacade zcloudDaHuaFacade; private final DaHuaConfig daHuaConfig; @@ -442,50 +447,38 @@ public class UserUpdateExe { throw new BizException("同步大华平台失败:人脸图片不完整"); } - List> personBiosignatures = new ArrayList<>(); - Map biosignature = new java.util.LinkedHashMap<>(); - biosignature.put("type", 3); - biosignature.put("index", 1); - biosignature.put("base64Data", cleanBase64); + List personBiosignatures = new ArrayList<>(); + DaHuaPersonSyncCmd.PersonBiosignature biosignature = new DaHuaPersonSyncCmd.PersonBiosignature(); + biosignature.setType(3); + biosignature.setIndex(1); + biosignature.setBase64Data(cleanBase64); personBiosignatures.add(biosignature); personMap.put("personBiosignatures", personBiosignatures); } - Map extraHeaders = new HashMap<>(); - try { - ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); - if (attrs != null) { - HttpServletRequest req = attrs.getRequest(); - String token = req.getHeader("token"); - String orgid = req.getHeader("orgid"); - String tenantId = req.getHeader("tenantId"); - if (token != null && !token.trim().isEmpty()) { - extraHeaders.put("token", token); - } - if (orgid != null && !orgid.trim().isEmpty()) { - extraHeaders.put("orgid", orgid); - } - if (tenantId != null && !tenantId.trim().isEmpty()) { - extraHeaders.put("tenantId", tenantId); - } - } - } catch (Exception e) { - log.warn("获取当前请求头异常: {}", e.getMessage()); - } - - Map syncResult = daHuaConfig.updatePerson(personMap, extraHeaders); - Boolean success = (Boolean) syncResult.get("success"); - Boolean skipped = (Boolean) syncResult.get("skipped"); - if (skipped != null && skipped) { + if (daHuaConfig.getDockFlag() == null || daHuaConfig.getDockFlag() != 1) { + log.info("大华对接未开启(dockFlag={}), 跳过同步人员更新到大华", daHuaConfig.getDockFlag()); return; } + + DaHuaPersonSyncCmd cmd = cn.hutool.core.bean.BeanUtil.toBean(personMap, DaHuaPersonSyncCmd.class); + Object biosObj = personMap.get("personBiosignatures"); + if (biosObj instanceof List) { + @SuppressWarnings("unchecked") + List bioList = (List) biosObj; + cmd.setPersonBiosignatures(bioList); + } + log.info("Dubbo调用zcloudDaHuaFacade.updatePerson, id={}, name={}, departmentId(corpId)={}", + cmd.getId(), cmd.getName(), cmd.getDepartmentId()); + SingleResponse updateResp = zcloudDaHuaFacade.updatePerson(cmd); String maskedIdCard = plainIdCard; if (plainIdCard != null && plainIdCard.length() >= 14) { maskedIdCard = plainIdCard.substring(0, 6) + "********" + plainIdCard.substring(plainIdCard.length() - 4); } - if (success == null || !success) { - String errCode = (String) syncResult.getOrDefault("errCode", ""); - String errMessage = (String) syncResult.getOrDefault("errMessage", "大华人员更新失败"); + if (updateResp == null || !updateResp.isSuccess()) { + String errCode = updateResp == null ? "" : updateResp.getErrCode(); + String errMessage = updateResp == null ? "大华Dubbo返回为空" : updateResp.getErrMessage(); + if (errMessage == null || errMessage.trim().isEmpty()) errMessage = "大华人员更新失败"; log.error("同步大华人员(更新)失败, errCode={}, errMessage={}, name={}, idCard={}", errCode, errMessage, newName, maskedIdCard); throw new BizException("同步大华平台失败:" + errMessage); } @@ -776,35 +769,22 @@ public class UserUpdateExe { Integer dahuaId = userDO.getDahuaId(); if (dahuaId != null) { log.info("【离职-同步删除大华人员】userId={}, name={}, dahuaId={}", userDO.getId(), userDO.getName(), dahuaId); - Map extraHeaders = new HashMap<>(); - try { - ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); - if (attrs != null) { - HttpServletRequest req = attrs.getRequest(); - String token = req.getHeader("token"); - String orgid = req.getHeader("orgid"); - String tenantId = req.getHeader("tenantId"); - if (token != null && !token.trim().isEmpty()) extraHeaders.put("token", token); - if (orgid != null && !orgid.trim().isEmpty()) extraHeaders.put("orgid", orgid); - if (tenantId != null && !tenantId.trim().isEmpty()) extraHeaders.put("tenantId", tenantId); - } - } catch (Exception e) { - log.warn("【离职-获取大华透传请求头异常】: {}", e.getMessage()); - } - Map deleteResult = daHuaConfig.deletePerson(Collections.singletonList(dahuaId), extraHeaders); - Boolean skipped = (Boolean) deleteResult.get("skipped"); - if (skipped == null || !skipped) { - Boolean success = (Boolean) deleteResult.get("success"); - String errCode = (String) deleteResult.getOrDefault("errCode", ""); - String errMessage = (String) deleteResult.getOrDefault("errMessage", ""); - if (success == null || !success) { + if (daHuaConfig.getDockFlag() == null || daHuaConfig.getDockFlag() != 1) { + log.info("大华对接未开启(dockFlag={}), 跳过删除大华人员, dahuaId={}", daHuaConfig.getDockFlag(), dahuaId); + } else { + DaHuaPersonDeleteCmd delCmd = new DaHuaPersonDeleteCmd(); + delCmd.setIds(Collections.singletonList(dahuaId.longValue())); + log.info("Dubbo调用zcloudDaHuaFacade.deletePerson, dahuaId={}", dahuaId); + SingleResponse delResp = zcloudDaHuaFacade.deletePerson(delCmd); + if (delResp == null || !delResp.isSuccess()) { + String errCode = delResp == null ? "" : delResp.getErrCode(); + String errMessage = delResp == null ? "大华Dubbo返回为空" : delResp.getErrMessage(); + if (errMessage == null || errMessage.trim().isEmpty()) errMessage = "删除大华人员失败"; log.error("【离职-大华删除失败→触发本地回滚】userId={}, dahuaId={}, errCode={}, errMessage={}", userDO.getId(), dahuaId, errCode, errMessage); throw new BizException("同步大华平台删除离职人员失败:" + errMessage); } log.info("【离职-大华删除成功】userId={}, dahuaId={}", userDO.getId(), dahuaId); - } else { - log.info("【离职-大华删除跳过】dockFlag未开启, userId={}", userDO.getId()); } } else { log.info("【离职-跳过同步大华】用户dahuaId为空,未同步过大华平台, userId={}, name={}", userDO.getId(), userDO.getName()); diff --git a/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/dataobject/DepartmentLeaderStatictiscDO.java b/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/dataobject/DepartmentLeaderStatictiscDO.java index e10a2dbb..ec1723f4 100644 --- a/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/dataobject/DepartmentLeaderStatictiscDO.java +++ b/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/dataobject/DepartmentLeaderStatictiscDO.java @@ -6,7 +6,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; -import java.util.List; +@Data /** * web-infrastructure @@ -14,7 +14,6 @@ import java.util.List; * @Author zhaokai * @Date 2025-10-30 10:10:48 */ -@Data @TableName("department") @EqualsAndHashCode(callSuper = true) public class DepartmentLeaderStatictiscDO extends BaseDO { @@ -27,5 +26,4 @@ public class DepartmentLeaderStatictiscDO extends BaseDO { private String departmentLeaderNameList; -} - +} \ No newline at end of file