REQ-2135: fix bugs

This commit is contained in:
yanglin 2024-03-25 17:26:20 +08:00
parent 91db147f1d
commit bfa1dbf4ef
5 changed files with 35 additions and 7 deletions

View File

@ -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)

View File

@ -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()))

View File

@ -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);

View File

@ -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

View File

@ -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();
}