REQ-2135: fix bugs
This commit is contained in:
parent
91db147f1d
commit
bfa1dbf4ef
@ -1,6 +1,7 @@
|
||||
package cn.axzo.msg.center.message.domain.dto;
|
||||
|
||||
import cn.axzo.msg.center.domain.entity.PendingMessageRecord;
|
||||
import cn.axzo.msg.center.inside.notices.config.DetailStyleInfo;
|
||||
import cn.axzo.msg.center.service.dto.IdentityDTO;
|
||||
import cn.axzo.msg.center.service.dto.MessageCardContentItemDTO;
|
||||
import cn.axzo.msg.center.service.dto.PersonDTO;
|
||||
@ -12,6 +13,7 @@ import cn.axzo.msg.center.service.enums.PendingMessageStateEnum;
|
||||
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
|
||||
import cn.axzo.msg.center.service.enums.TodoType;
|
||||
import cn.axzo.msg.center.service.pending.response.PendingMessageResponse;
|
||||
import cn.axzo.msg.center.service.template.response.MessageDetailStyle;
|
||||
import cn.axzo.msg.center.utils.DateFormatUtil;
|
||||
import cn.axzo.msg.center.utils.MessageRouterUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
@ -185,6 +187,11 @@ public class PendingMessageDTO implements Serializable {
|
||||
*/
|
||||
private Long executorOuId;
|
||||
|
||||
/**
|
||||
* 待办样式
|
||||
*/
|
||||
private MessageDetailStyle detailStyle;
|
||||
|
||||
|
||||
@Deprecated
|
||||
public static PendingMessageDTO from(PendingMessageRecord pendingMessageRecord) {
|
||||
@ -249,6 +256,8 @@ public class PendingMessageDTO implements Serializable {
|
||||
.ouId(this.promoterOuId)
|
||||
.workspaceId(promoterWorkspaceId)
|
||||
.workspaceName(promoterWorkspaceName)
|
||||
// 样式
|
||||
.detailStyle(detailStyle)
|
||||
.isRead(isRead)
|
||||
.todoType(todoType)
|
||||
.templateCategory(templateCategory)
|
||||
|
||||
@ -79,6 +79,7 @@ import cn.axzo.msg.center.service.pending.response.PendingMessageIterateResponse
|
||||
import cn.axzo.msg.center.service.pending.response.PendingMessageResponse;
|
||||
import cn.axzo.msg.center.service.pending.response.PendingMessageSimpleDTO;
|
||||
import cn.axzo.msg.center.service.pending.response.PushPendingMessageDTO;
|
||||
import cn.axzo.msg.center.service.template.response.MessageDetailStyle;
|
||||
import cn.axzo.msg.center.utils.DateFormatUtil;
|
||||
import cn.axzo.msg.center.utils.JSONObjectUtil;
|
||||
import cn.axzo.msg.center.utils.MessageCardUtil;
|
||||
@ -770,6 +771,12 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
||||
if (template != null) {
|
||||
pendingMessage.setTemplateCategory(template.getMsgCategory());
|
||||
}
|
||||
if (template != null && template.getDetailStyleCode() != null) {
|
||||
MessageDetailStyle detailStyle = pendingMessageBizConfig
|
||||
.findMessageDetailType(template.getDetailStyleCode())
|
||||
.orElse(null);
|
||||
pendingMessage.setDetailStyle(detailStyle);
|
||||
}
|
||||
// 对应模板的路由策略
|
||||
MessageTemplateRouterDTO msgTemplateRouter = messageTemplates.stream()
|
||||
.filter(e -> Objects.equals(e.getCode(), adapter.getTemplateCode()))
|
||||
|
||||
@ -85,7 +85,8 @@ public class TodoManager {
|
||||
if (bizCode == null)
|
||||
bizCode = "";
|
||||
// 如果已经存在对应的待办业务, 就把待办追加到对应的待办业务上
|
||||
TodoBusiness business = todoBusinessDao.find(request.getTemplateCode(), bizCode);
|
||||
// 流程会并发, 这里对业务进行加锁
|
||||
TodoBusiness business = todoBusinessDao.findForUpdate(request.getTemplateCode(), bizCode);
|
||||
boolean businessCreated = false;
|
||||
if (business == null) {
|
||||
business = todoRecordBuilder.buildBusiness(request, template);
|
||||
|
||||
@ -22,6 +22,7 @@ import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.dao.DuplicateKeyException;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -213,17 +214,19 @@ public class MigrateFromPendingMessageJob extends IJobHandler {
|
||||
@Override
|
||||
protected void compute() {
|
||||
// 防止一上线就有人生成了bizCode为空的待办, 避免重复生成
|
||||
TodoBusiness business = todoBusinessDao.lambdaQuery()
|
||||
.eq(TodoBusiness::getTemplateCode, tb.templateCode)
|
||||
.eq(TodoBusiness::getBizCode, tb.templateCode)
|
||||
.one();
|
||||
TodoBusiness business = findBusiness();
|
||||
if (business == null) {
|
||||
PendingMessageRecord sample = pendingMessageRecordMapper.selectOne(query(PendingMessageRecord.class)
|
||||
.eq(PendingMessageRecord::getTemplateCode, tb.templateCode)
|
||||
.eq(PendingMessageRecord::getBizCode, tb.bizCode)
|
||||
.last("LIMIT 1"));
|
||||
business = buildTodoBusiness(sample);
|
||||
todoBusinessDao.save(business);
|
||||
// 尽量不用事务
|
||||
try {
|
||||
todoBusinessDao.save(business);
|
||||
} catch (DuplicateKeyException e) {
|
||||
business = findBusiness();
|
||||
}
|
||||
migrateCount.businessCount.incrementAndGet();
|
||||
}
|
||||
|
||||
@ -237,6 +240,13 @@ public class MigrateFromPendingMessageJob extends IJobHandler {
|
||||
actions.forEach(ForkJoinTask::join);
|
||||
}
|
||||
|
||||
private TodoBusiness findBusiness() {
|
||||
return todoBusinessDao.lambdaQuery()
|
||||
.eq(TodoBusiness::getTemplateCode, tb.templateCode)
|
||||
.eq(TodoBusiness::getBizCode, tb.templateCode)
|
||||
.one();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@RequiredArgsConstructor
|
||||
|
||||
@ -20,10 +20,11 @@ import java.util.List;
|
||||
public class TodoBusinessDao extends ServiceImpl<TodoBusinessMapper, TodoBusiness> {
|
||||
|
||||
@Nullable
|
||||
public TodoBusiness find(String templateCode, String bizCode) {
|
||||
public TodoBusiness findForUpdate(String templateCode, String bizCode) {
|
||||
return lambdaQuery()
|
||||
.eq(TodoBusiness::getTemplateCode, templateCode)
|
||||
.eq(TodoBusiness::getBizCode, bizCode)
|
||||
.last("FOR UPDATE")
|
||||
.one();
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user