From b5f5f27b84ec2e981f6fd7931bfc6c8f88861e92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Thu, 11 Jun 2026 10:46:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=AE=A2=E5=95=86=E6=95=B0?= =?UTF-8?q?=E6=8D=AEBUG=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserShipperMasterDataSyncService.java | 58 ++++++++++++++++--- .../entity/UserShipperMdmSyncEntity.java | 2 +- .../interfaces/facade/UserShipperAPI.java | 9 ++- .../vo/ShipperMasterDataSyncTimeVo.java | 6 ++ 4 files changed, 60 insertions(+), 15 deletions(-) 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 2113121ed..087afb804 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 @@ -21,7 +21,6 @@ import com.mhd.user.interfaces.vo.ShipperMasterDataSyncTimeVo; import lombok.extern.slf4j.Slf4j; import net.sf.json.JSONObject; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; @@ -35,6 +34,7 @@ public class UserShipperMasterDataSyncService { private static final String LOCK_PREFIX = "shipper:mdm:sync:"; private static final int PAGE_SIZE = 500; + private static final long SYNC_LOCK_MINUTES = 30; @Resource private ThirdPartyServiceFeign thirdPartyServiceFeign; @@ -46,6 +46,8 @@ public class UserShipperMasterDataSyncService { private UserShipperMdmSyncMapper userShipperMdmSyncMapper; @Resource private RedisLock redisLock; + @Resource + private AsyncUserShipperMasterDataSyncService asyncUserShipperMasterDataSyncService; public ShipperMasterDataSyncTimeVo getLastSyncTime() { LoginUser loginUser = requireLoginUser(); @@ -55,27 +57,65 @@ public class UserShipperMasterDataSyncService { if (syncEntity != null) { vo.setLastSyncTime(syncEntity.getLastSyncTime()); vo.setLastModifyRecordTime(syncEntity.getLastModifyRecordTime()); + vo.setSyncStatus(syncEntity.getSyncStatus()); + vo.setSyncMessage(syncEntity.getSyncMessage()); } return vo; } - public ShipperMasterDataSyncResultVo syncMasterData() { + public void syncMasterData() { LoginUser loginUser = requireLoginUser(); Long organizationId = loginUser.getUserPo().getOrganizationId(); String lockKey = LOCK_PREFIX + organizationId; - boolean locked = redisLock.tryLock(lockKey, 30, TimeUnit.SECONDS); + boolean locked = redisLock.tryLock(lockKey, SYNC_LOCK_MINUTES, TimeUnit.MINUTES); if (!locked) { throw new ServiceException("当前组织正在同步主数据,请稍后再试"); } - try { - return doSync(loginUser); - } finally { - redisLock.unlock(lockKey); + markSyncInProgress(organizationId); + asyncUserShipperMasterDataSyncService.syncMasterDataAsync(loginUser, lockKey); + } + + public ShipperMasterDataSyncResultVo executeSync(LoginUser loginUser) { + return doSync(loginUser); + } + + public void markSyncFailed(Long organizationId, String errorMessage) { + UserShipperMdmSyncEntity entity = userShipperMdmSyncMapper.selectByOrganizationId(organizationId); + Date now = new Date(); + if (entity == null) { + entity = new UserShipperMdmSyncEntity(); + entity.setOrganizationId(organizationId); + entity.setCreateTime(now); + } + entity.setSyncStatus(2); + entity.setSyncMessage("同步失败:" + errorMessage); + entity.setUpdateTime(now); + if (entity.getId() == null) { + userShipperMdmSyncMapper.insert(entity); + } else { + userShipperMdmSyncMapper.updateById(entity); } } - @Transactional(rollbackFor = Exception.class) - protected ShipperMasterDataSyncResultVo doSync(LoginUser loginUser) { + private void markSyncInProgress(Long organizationId) { + UserShipperMdmSyncEntity entity = userShipperMdmSyncMapper.selectByOrganizationId(organizationId); + Date now = new Date(); + if (entity == null) { + entity = new UserShipperMdmSyncEntity(); + entity.setOrganizationId(organizationId); + entity.setCreateTime(now); + } + entity.setSyncStatus(0); + entity.setSyncMessage("同步中..."); + entity.setUpdateTime(now); + if (entity.getId() == null) { + userShipperMdmSyncMapper.insert(entity); + } else { + userShipperMdmSyncMapper.updateById(entity); + } + } + + private ShipperMasterDataSyncResultVo doSync(LoginUser loginUser) { Long organizationId = loginUser.getUserPo().getOrganizationId(); String orgNcCode = resolveOrgNcCode(organizationId); if (StringUtils.isEmpty(orgNcCode)) { diff --git a/mhd-user-center/src/main/java/com/mhd/user/domain/userShipperMdmSync/entity/UserShipperMdmSyncEntity.java b/mhd-user-center/src/main/java/com/mhd/user/domain/userShipperMdmSync/entity/UserShipperMdmSyncEntity.java index 38091ec06..f989d662f 100644 --- a/mhd-user-center/src/main/java/com/mhd/user/domain/userShipperMdmSync/entity/UserShipperMdmSyncEntity.java +++ b/mhd-user-center/src/main/java/com/mhd/user/domain/userShipperMdmSync/entity/UserShipperMdmSyncEntity.java @@ -28,7 +28,7 @@ public class UserShipperMdmSyncEntity { @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date lastSyncTime; - @ApiModelProperty("同步状态:1-成功 2-失败") + @ApiModelProperty("同步状态:0-同步中 1-成功 2-失败") private Integer syncStatus; @ApiModelProperty("同步结果摘要") diff --git a/mhd-user-center/src/main/java/com/mhd/user/interfaces/facade/UserShipperAPI.java b/mhd-user-center/src/main/java/com/mhd/user/interfaces/facade/UserShipperAPI.java index f3429b7b0..531673af1 100644 --- a/mhd-user-center/src/main/java/com/mhd/user/interfaces/facade/UserShipperAPI.java +++ b/mhd-user-center/src/main/java/com/mhd/user/interfaces/facade/UserShipperAPI.java @@ -19,7 +19,6 @@ import com.mhd.common.security.service.TokenService; import com.mhd.user.application.service.UserShipperMasterDataSyncService; import com.mhd.user.interfaces.dto.updateDTO.SettlementInfoUpdateDTO; import com.mhd.user.interfaces.vo.SettlementInfoQueryVo; -import com.mhd.user.interfaces.vo.ShipperMasterDataSyncResultVo; import com.mhd.user.interfaces.vo.ShipperMasterDataSyncTimeVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -287,11 +286,11 @@ public class UserShipperAPI extends BaseController { @PostMapping("/syncMasterData") public AjaxResult syncMasterData() { try { - ShipperMasterDataSyncResultVo result = userShipperMasterDataSyncService.syncMasterData(); - return AjaxResult.success("同步完成", result); + userShipperMasterDataSyncService.syncMasterData(); + return AjaxResult.success("同步任务已提交,请通过查询同步状态接口获取进度"); } catch (Exception e) { - log.error("同步主数据失败", e); - return AjaxResult.error("同步主数据失败:" + e.getMessage()); + log.error("提交同步主数据任务失败", e); + return AjaxResult.error("提交同步主数据任务失败:" + e.getMessage()); } } diff --git a/mhd-user-center/src/main/java/com/mhd/user/interfaces/vo/ShipperMasterDataSyncTimeVo.java b/mhd-user-center/src/main/java/com/mhd/user/interfaces/vo/ShipperMasterDataSyncTimeVo.java index f86eeb907..0934dacae 100644 --- a/mhd-user-center/src/main/java/com/mhd/user/interfaces/vo/ShipperMasterDataSyncTimeVo.java +++ b/mhd-user-center/src/main/java/com/mhd/user/interfaces/vo/ShipperMasterDataSyncTimeVo.java @@ -17,4 +17,10 @@ public class ShipperMasterDataSyncTimeVo { @ApiModelProperty("MDM增量水位时间") private String lastModifyRecordTime; + + @ApiModelProperty("同步状态:0-同步中 1-成功 2-失败") + private Integer syncStatus; + + @ApiModelProperty("同步结果摘要") + private String syncMessage; }