diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ProjectChangeController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ProjectChangeController.java index c697286c..7bfdf1e6 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ProjectChangeController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ProjectChangeController.java @@ -33,6 +33,7 @@ import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.annotation.PreAuth; import org.springblade.core.tool.api.R; +import org.springblade.transport.constant.HcsSyncConstant; import org.springblade.transport.pojo.entity.ProjectChange; import org.springblade.transport.pojo.vo.ProjectChangeVO; import org.springblade.transport.service.IProjectChangeService; @@ -110,17 +111,12 @@ public class ProjectChangeController extends BladeController { hcsImmediatePushSupport.pushProjectAndWait(projectId); String syncFailure = HcsImmediatePushSupport.pollSyncFailure(); if (syncFailure != null) { - ProjectChange projectChange = projectChangeService.getById(id); - if (projectChange != null) { - projectChange.setSyncStatus("failed"); - projectChangeService.updateById(projectChange); - } + projectChangeService.writeBackSyncStatus(projectId, HcsSyncConstant.HCS_STATUS_FAILED); return R.data(Boolean.FALSE, "审批通过,但合规推送失败:" + syncFailure); } - ProjectChange projectChange = projectChangeService.getById(id); - if (projectChange != null) { - projectChange.setSyncStatus("synced"); - projectChangeService.updateById(projectChange); + // 即时推送未开启时(开关关闭不触发推送)不标记已推送,待推送状态由定时扫描任务推送后闭环 + if (hcsImmediatePushSupport.isImmediateEnabled()) { + projectChangeService.writeBackSyncStatus(projectId, HcsSyncConstant.HCS_STATUS_SYNCED); } return R.success("审批通过"); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IProjectChangeService.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IProjectChangeService.java index 1cbafa62..81fd622a 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IProjectChangeService.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IProjectChangeService.java @@ -67,4 +67,13 @@ public interface IProjectChangeService extends BaseService { boolean removeDraft(String ids); + /** + * 按原项目回写最近一条待同步变更单的同步状态(审批即时推送/定时任务推送后调用) + * + * @param projectId 原项目ID + * @param syncStatus 同步状态(synced/failed) + * @return 是否回写成功(无待同步变更单时返回 false) + */ + boolean writeBackSyncStatus(Long projectId, String syncStatus); + } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ProjectChangeServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ProjectChangeServiceImpl.java index 313573b9..ecb31750 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ProjectChangeServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ProjectChangeServiceImpl.java @@ -188,7 +188,11 @@ public class ProjectChangeServiceImpl extends BaseServiceImpllambdaUpdate() + .eq(ProjectChange::getProjectId, projectId) + .eq(ProjectChange::getApprovalStatus, STATUS_APPROVED) + .in(ProjectChange::getSyncStatus, List.of(HcsSyncConstant.HCS_STATUS_UNSYNCED, HcsSyncConstant.HCS_STATUS_FAILED)) + .set(ProjectChange::getSyncStatus, syncStatus) + .last("order by approved_time desc limit 1")); + } + private LambdaQueryWrapper buildQuery(ProjectChangeVO projectChange) { TransportBusinessSupport.validateAllDept(projectChange.getAllDept(), "项目变更"); LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery().eq(ProjectChange::getIsDeleted, 0);