diff --git a/mhd-user-center/src/main/java/com/mhd/user/application/service/AsyncUserShipperMasterDataSyncService.java b/mhd-user-center/src/main/java/com/mhd/user/application/service/AsyncUserShipperMasterDataSyncService.java index cfb560391..64f370c75 100644 --- a/mhd-user-center/src/main/java/com/mhd/user/application/service/AsyncUserShipperMasterDataSyncService.java +++ b/mhd-user-center/src/main/java/com/mhd/user/application/service/AsyncUserShipperMasterDataSyncService.java @@ -1,5 +1,7 @@ package com.mhd.user.application.service; +import com.mhd.common.core.constant.SecurityConstants; +import com.mhd.common.core.context.SecurityContextHolder; import com.mhd.common.redis.service.RedisLock; import com.mhd.system.api.model.LoginUser; import lombok.extern.slf4j.Slf4j; @@ -23,12 +25,34 @@ public class AsyncUserShipperMasterDataSyncService { public void syncMasterDataAsync(LoginUser loginUser, String lockKey) { Long organizationId = loginUser.getUserPo().getOrganizationId(); try { + bindLoginUser(loginUser); userShipperMasterDataSyncService.executeSync(loginUser); } catch (Exception e) { log.error("异步同步主数据失败, organizationId={}", organizationId, e); userShipperMasterDataSyncService.markSyncFailed(organizationId, e.getMessage()); } finally { + SecurityContextHolder.remove(); redisLock.unlock(lockKey); } } + + /** + * 异步线程无 HTTP 请求上下文,需手动注入 LoginUser 供 addUser/authShipper 等使用。 + */ + private void bindLoginUser(LoginUser loginUser) { + SecurityContextHolder.set(SecurityConstants.LOGIN_USER, loginUser); + if (loginUser.getUserid() != null) { + SecurityContextHolder.setUserId(String.valueOf(loginUser.getUserid())); + } else if (loginUser.getUserPo() != null && loginUser.getUserPo().getUserId() != null) { + SecurityContextHolder.setUserId(String.valueOf(loginUser.getUserPo().getUserId())); + } + if (loginUser.getUsername() != null) { + SecurityContextHolder.setUserName(loginUser.getUsername()); + } else if (loginUser.getUserPo() != null) { + SecurityContextHolder.setUserName(loginUser.getUserPo().getUserAccount()); + } + if (loginUser.getToken() != null) { + SecurityContextHolder.setUserKey(loginUser.getToken()); + } + } } diff --git a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java index 7b4fe989c..4269d1cd3 100644 --- a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java +++ b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperMasterDataSyncService.java @@ -237,10 +237,14 @@ public class UserShipperMasterDataSyncService { } entity.setLastSyncTime(syncTime); entity.setSyncStatus(resultVo.getFailCount() > 0 ? 2 : 1); - entity.setSyncMessage(String.format( + String syncMessage = String.format( "新增%d,更新%d,跳过%d,失败%d;组织NC=%s;跳过明细[组织不匹配:%d,非客户:%d,停用:%d,其他:%d]", resultVo.getAddCount(), resultVo.getUpdateCount(), resultVo.getSkipCount(), resultVo.getFailCount(), - orgNcCode, skipOrgMismatch, skipNotCustomer, skipDisabled, skipOther)); + orgNcCode, skipOrgMismatch, skipNotCustomer, skipDisabled, skipOther); + if (resultVo.getFailCount() > 0 && !resultVo.getErrorMessages().isEmpty()) { + syncMessage += ";" + resultVo.getErrorMessages().get(0); + } + entity.setSyncMessage(syncMessage); entity.setUpdateTime(syncTime); if (entity.getId() == null) { userShipperMdmSyncMapper.insert(entity);