fix: 重复数据去重及简易并发控制

This commit is contained in:
chenwenjian 2025-04-16 20:23:12 +08:00
parent d4e4c138be
commit e25bda3fa2

View File

@ -62,39 +62,40 @@ public class GuideTenantProcedureStatusServiceImpl extends ServiceImpl<GuideTena
return Collections.emptyList();
}
// 将租户操作步骤数量与模板操作步骤数量进行对比如果模板操作步骤数量大于租户操作步骤数量则根据模板为租户初始化新步骤点
if (templateList.size() > procedureStatusList.size()) {
// 将该租户未初始化的步骤点进行初始化
List<Long> procedureStatusIdList = procedureStatusList.stream().map(GuideTenantProcedureStatus::getProcedureId).collect(Collectors.toList());
respList.addAll(templateList.stream()
.filter(t -> !procedureStatusIdList.contains(t.getId()))
.map(t -> {
GuideTenantProcedureStatusCreateReq createReq = new GuideTenantProcedureStatusCreateReq();
createReq.setWorkspaceId(req.getWorkspaceId());
createReq.setCategoryCode(t.getCategoryCode());
createReq.setProcedureId(t.getId());
createReq.setProcedureName(t.getName());
createReq.setStatus(GuideProcedureStatus.TODO);
create(createReq);
return BeanUtil.copyProperties(createReq, GuideTenantProcedureStatusListResp.class);
})
.collect(Collectors.toList()));
} else if (templateList.size() < procedureStatusList.size()) {
log.warn("操作步骤模板:{},租户&分类:{},租户操作步骤状态:{}", JSONUtil.toJsonStr(templateList), JSONUtil.toJsonStr(req), JSONUtil.toJsonStr(procedureStatusList));
throw new ServiceException("数据异常,操作步骤不存在,请联系管理人员");
// 将租户操作步骤数量与模板操作步骤数量进行对比是否需要根据模板为租户初始化新步骤点
// 将该租户未初始化的步骤点进行初始化
List<Long> procedureStatusIdList = procedureStatusList.stream().map(GuideTenantProcedureStatus::getProcedureId).distinct().collect(Collectors.toList());
List<GuideTenantProcedureStatusListResp> newInitProcedures = templateList.stream()
.filter(t -> !procedureStatusIdList.contains(t.getId()))
.map(t -> {
GuideTenantProcedureStatusCreateReq createReq = new GuideTenantProcedureStatusCreateReq();
createReq.setWorkspaceId(req.getWorkspaceId());
createReq.setCategoryCode(t.getCategoryCode());
createReq.setProcedureId(t.getId());
createReq.setProcedureName(t.getName());
createReq.setStatus(GuideProcedureStatus.TODO);
create(createReq);
return BeanUtil.copyProperties(createReq, GuideTenantProcedureStatusListResp.class);
})
.collect(Collectors.toList());
if (CollUtil.isNotEmpty(newInitProcedures)) {
respList.addAll(newInitProcedures);
}
// 对租户操作步骤的权限码和跳转链接进行补充
Map<Long, GuideProcedureTemplateResp> templateMap = templateList.stream().collect(Collectors.toMap(GuideProcedureTemplateResp::getId, Function.identity(), (v1, v2) -> v1));
respList.forEach(r -> {
GuideProcedureTemplateResp t = templateMap.get(r.getProcedureId());
r.setDescription(t.getDescription());
r.setIsMust(t.getIsMust());
r.setAuthCode(t.getAuthCode());
r.setJumpUrl(t.getJumpUrl());
r.setJumpReport(t.getJumpReport());
r.setSort(t.getSort());
});
respList.stream()
.collect(Collectors.toMap(r -> r.getWorkspaceId() + "_" + r.getProcedureId(), Function.identity(), (v1, v2) -> v1))
.values()
.forEach(r -> {
GuideProcedureTemplateResp t = templateMap.get(r.getProcedureId());
r.setDescription(t.getDescription());
r.setIsMust(t.getIsMust());
r.setAuthCode(t.getAuthCode());
r.setJumpUrl(t.getJumpUrl());
r.setJumpReport(t.getJumpReport());
r.setSort(t.getSort());
});
return respList;
}
@ -132,7 +133,7 @@ public class GuideTenantProcedureStatusServiceImpl extends ServiceImpl<GuideTena
}
@Override
public Long create(GuideTenantProcedureStatusCreateReq req) {
public synchronized Long create(GuideTenantProcedureStatusCreateReq req) {
// 若操作所属分类或操作名称为空则从对应模板获取
if (Objects.isNull(req.getCategoryCode()) || CharSequenceUtil.isBlank(req.getProcedureName())) {
GuideProcedureTemplateResp byProcedureId = procedureTemplateService.getByProcedureId(req.getProcedureId());