同步客商数据BUG修改
This commit is contained in:
+49
-9
@@ -21,7 +21,6 @@ import com.mhd.user.interfaces.vo.ShipperMasterDataSyncTimeVo;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.sf.json.JSONObject;
|
import net.sf.json.JSONObject;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -35,6 +34,7 @@ public class UserShipperMasterDataSyncService {
|
|||||||
|
|
||||||
private static final String LOCK_PREFIX = "shipper:mdm:sync:";
|
private static final String LOCK_PREFIX = "shipper:mdm:sync:";
|
||||||
private static final int PAGE_SIZE = 500;
|
private static final int PAGE_SIZE = 500;
|
||||||
|
private static final long SYNC_LOCK_MINUTES = 30;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private ThirdPartyServiceFeign thirdPartyServiceFeign;
|
private ThirdPartyServiceFeign thirdPartyServiceFeign;
|
||||||
@@ -46,6 +46,8 @@ public class UserShipperMasterDataSyncService {
|
|||||||
private UserShipperMdmSyncMapper userShipperMdmSyncMapper;
|
private UserShipperMdmSyncMapper userShipperMdmSyncMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private RedisLock redisLock;
|
private RedisLock redisLock;
|
||||||
|
@Resource
|
||||||
|
private AsyncUserShipperMasterDataSyncService asyncUserShipperMasterDataSyncService;
|
||||||
|
|
||||||
public ShipperMasterDataSyncTimeVo getLastSyncTime() {
|
public ShipperMasterDataSyncTimeVo getLastSyncTime() {
|
||||||
LoginUser loginUser = requireLoginUser();
|
LoginUser loginUser = requireLoginUser();
|
||||||
@@ -55,27 +57,65 @@ public class UserShipperMasterDataSyncService {
|
|||||||
if (syncEntity != null) {
|
if (syncEntity != null) {
|
||||||
vo.setLastSyncTime(syncEntity.getLastSyncTime());
|
vo.setLastSyncTime(syncEntity.getLastSyncTime());
|
||||||
vo.setLastModifyRecordTime(syncEntity.getLastModifyRecordTime());
|
vo.setLastModifyRecordTime(syncEntity.getLastModifyRecordTime());
|
||||||
|
vo.setSyncStatus(syncEntity.getSyncStatus());
|
||||||
|
vo.setSyncMessage(syncEntity.getSyncMessage());
|
||||||
}
|
}
|
||||||
return vo;
|
return vo;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ShipperMasterDataSyncResultVo syncMasterData() {
|
public void syncMasterData() {
|
||||||
LoginUser loginUser = requireLoginUser();
|
LoginUser loginUser = requireLoginUser();
|
||||||
Long organizationId = loginUser.getUserPo().getOrganizationId();
|
Long organizationId = loginUser.getUserPo().getOrganizationId();
|
||||||
String lockKey = LOCK_PREFIX + organizationId;
|
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) {
|
if (!locked) {
|
||||||
throw new ServiceException("当前组织正在同步主数据,请稍后再试");
|
throw new ServiceException("当前组织正在同步主数据,请稍后再试");
|
||||||
}
|
}
|
||||||
try {
|
markSyncInProgress(organizationId);
|
||||||
return doSync(loginUser);
|
asyncUserShipperMasterDataSyncService.syncMasterDataAsync(loginUser, lockKey);
|
||||||
} finally {
|
}
|
||||||
redisLock.unlock(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)
|
private void markSyncInProgress(Long organizationId) {
|
||||||
protected ShipperMasterDataSyncResultVo doSync(LoginUser loginUser) {
|
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();
|
Long organizationId = loginUser.getUserPo().getOrganizationId();
|
||||||
String orgNcCode = resolveOrgNcCode(organizationId);
|
String orgNcCode = resolveOrgNcCode(organizationId);
|
||||||
if (StringUtils.isEmpty(orgNcCode)) {
|
if (StringUtils.isEmpty(orgNcCode)) {
|
||||||
|
|||||||
+1
-1
@@ -28,7 +28,7 @@ public class UserShipperMdmSyncEntity {
|
|||||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
private Date lastSyncTime;
|
private Date lastSyncTime;
|
||||||
|
|
||||||
@ApiModelProperty("同步状态:1-成功 2-失败")
|
@ApiModelProperty("同步状态:0-同步中 1-成功 2-失败")
|
||||||
private Integer syncStatus;
|
private Integer syncStatus;
|
||||||
|
|
||||||
@ApiModelProperty("同步结果摘要")
|
@ApiModelProperty("同步结果摘要")
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ import com.mhd.common.security.service.TokenService;
|
|||||||
import com.mhd.user.application.service.UserShipperMasterDataSyncService;
|
import com.mhd.user.application.service.UserShipperMasterDataSyncService;
|
||||||
import com.mhd.user.interfaces.dto.updateDTO.SettlementInfoUpdateDTO;
|
import com.mhd.user.interfaces.dto.updateDTO.SettlementInfoUpdateDTO;
|
||||||
import com.mhd.user.interfaces.vo.SettlementInfoQueryVo;
|
import com.mhd.user.interfaces.vo.SettlementInfoQueryVo;
|
||||||
import com.mhd.user.interfaces.vo.ShipperMasterDataSyncResultVo;
|
|
||||||
import com.mhd.user.interfaces.vo.ShipperMasterDataSyncTimeVo;
|
import com.mhd.user.interfaces.vo.ShipperMasterDataSyncTimeVo;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
@@ -287,11 +286,11 @@ public class UserShipperAPI extends BaseController {
|
|||||||
@PostMapping("/syncMasterData")
|
@PostMapping("/syncMasterData")
|
||||||
public AjaxResult syncMasterData() {
|
public AjaxResult syncMasterData() {
|
||||||
try {
|
try {
|
||||||
ShipperMasterDataSyncResultVo result = userShipperMasterDataSyncService.syncMasterData();
|
userShipperMasterDataSyncService.syncMasterData();
|
||||||
return AjaxResult.success("同步完成", result);
|
return AjaxResult.success("同步任务已提交,请通过查询同步状态接口获取进度");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("同步主数据失败", e);
|
log.error("提交同步主数据任务失败", e);
|
||||||
return AjaxResult.error("同步主数据失败:" + e.getMessage());
|
return AjaxResult.error("提交同步主数据任务失败:" + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+6
@@ -17,4 +17,10 @@ public class ShipperMasterDataSyncTimeVo {
|
|||||||
|
|
||||||
@ApiModelProperty("MDM增量水位时间")
|
@ApiModelProperty("MDM增量水位时间")
|
||||||
private String lastModifyRecordTime;
|
private String lastModifyRecordTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("同步状态:0-同步中 1-成功 2-失败")
|
||||||
|
private Integer syncStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("同步结果摘要")
|
||||||
|
private String syncMessage;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user