REQ-3046: 设置卡片的跳转

This commit is contained in:
yanglin 2024-10-17 17:56:14 +08:00
parent f1927eb7c2
commit d5a78772d4
3 changed files with 16 additions and 66 deletions

View File

@ -2,7 +2,7 @@ package cn.axzo.msg.center.message.domain.dto;
import cn.axzo.msg.center.api.custombutton.ProposedButtons;
import cn.axzo.msg.center.domain.entity.PendingMessageRecord;
import cn.axzo.msg.center.service.domain.CardUrlConfig;
import cn.axzo.msg.center.service.domain.UrlConfig;
import cn.axzo.msg.center.service.dto.IdentityDTO;
import cn.axzo.msg.center.service.dto.MessageCardContentItemDTO;
import cn.axzo.msg.center.service.dto.PersonDTO;
@ -230,7 +230,7 @@ public class PendingMessageDTO implements Serializable {
/**
* 卡片跳转配置. 在links的基础上再包一层, 避免以后卡片增加自己的配置
*/
private CardUrlConfig cardUrlConfig;
private UrlConfig cardUrl;
@Deprecated
public static PendingMessageDTO from(PendingMessageRecord pendingMessageRecord) {
@ -342,7 +342,7 @@ public class PendingMessageDTO implements Serializable {
.modelV3(modelV3)
.displayOnCardKeyValues(modelV3.determineDisplayOnCardKeyValues())
.cardUrlOpenStrategy(cardUrlOpenStrategy)
.cardUrlConfig(cardUrlConfig)
.cardUrl(cardUrl)
.build();
if (modelV3 != null)
ParsedModel3Walker.walkDown(modelV3, new ModelV2PropsPopulator(response, terminalProvider));

View File

@ -6,7 +6,6 @@ import cn.axzo.maokai.api.vo.response.OrganizationalTeamOuRelationResp;
import cn.axzo.msg.center.common.enums.TableIsDeleteEnum;
import cn.axzo.msg.center.common.utils.BizAssertions;
import cn.axzo.msg.center.dal.MessageGroupNodeDao;
import cn.axzo.msg.center.dal.PendingMessageRecordDao;
import cn.axzo.msg.center.domain.entity.MessageGroupNode;
import cn.axzo.msg.center.domain.entity.PendingMessageRecord;
import cn.axzo.msg.center.domain.entity.PendingRecordAdapter;
@ -17,39 +16,30 @@ import cn.axzo.msg.center.message.domain.dto.TemplateModelV3;
import cn.axzo.msg.center.message.service.impl.v3.ModelV3Parser;
import cn.axzo.msg.center.message.service.todo.MigrateUtils;
import cn.axzo.msg.center.message.service.todo.manage.TodoExt;
import cn.axzo.msg.center.service.dto.IdentityDTO;
import cn.axzo.msg.center.service.dto.PersonDTO;
import cn.axzo.msg.center.service.domain.UrlConfig;
import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum;
import cn.axzo.msg.center.service.enums.BizCategoryEnum;
import cn.axzo.msg.center.service.enums.IdentityTypeEnum;
import cn.axzo.msg.center.service.enums.OrganizationTypeEnum;
import cn.axzo.msg.center.service.enums.PendingMessageRoleCategoryEnum;
import cn.axzo.msg.center.service.pending.response.v3.ParsedModel3Visitor;
import cn.axzo.msg.center.service.pending.response.v3.ParsedModel3Walker;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedModelV3;
import cn.axzo.msg.center.service.template.response.MessageDetailStyle;
import cn.axzo.msg.center.utils.DateFormatUtil;
import cn.axzo.msg.center.utils.JSONObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.google.common.collect.ImmutableMap;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
import javax.validation.constraints.NotEmpty;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import static java.util.function.Function.identity;
import static java.util.stream.Collectors.toMap;
@ -66,7 +56,6 @@ import static java.util.stream.Collectors.toSet;
@RequiredArgsConstructor
public class PendingMessageNewServiceImpl {
private final PendingMessageRecordDao pendingMessageRecordDao;
private final OrganizationalTeamOuRelationApi organizationalTeamOuRelationApi;
private final PendingMessageBizConfig pendingMessageBizConfig;
private final MessageGroupNodeDao messageGroupNodeDao;
@ -106,7 +95,7 @@ public class PendingMessageNewServiceImpl {
public PendingMessageDTO convertV3(PendingRecordAdapter adapter, List<TemplateModelV3> templateModels) {
PendingMessageDTO pendingMessage;
if (adapter instanceof PendingMessageRecord) {
pendingMessage = PendingMessageDTO.from((PendingMessageRecord)adapter);
pendingMessage = PendingMessageDTO.from((PendingMessageRecord) adapter);
} else {
pendingMessage = PendingMessageDTO.from(MigrateUtils.convertAdapterToPending(adapter));
}
@ -169,55 +158,16 @@ public class PendingMessageNewServiceImpl {
adapter.getBizExtParamObj(), authParam, routerParam);
pendingMessage.setModelV3(parsedModel);
pendingMessage.setCardUrlOpenStrategy(templateModel.getTemplate().getCardUrlOpenStrategy());
pendingMessage.setCardUrlConfig(templateModel.getTemplate().getCardUrlConfig());
ParsedModel3Walker.walkDown(parsedModel, new ParsedModel3Visitor() {
@Override
public void visitTemplateCardUrlConfig(UrlConfig urlConfig) {
pendingMessage.setCardUrl(urlConfig);
}
});
}
return pendingMessage;
}
private void buildPersonCondition(LambdaQueryChainWrapper<PendingMessageRecord> query, Boolean withIdentify,
PendingMessageRoleCategoryEnum roleCategory, PersonDTO operator) {
IdentityDTO identity = null;
if (Objects.equals(withIdentify, true)) {
// 代办需要对身份进行隔离
identity = operator.getIdentity();
}
SFunction<PendingMessageRecord, Long> personIdFunc;
SFunction<PendingMessageRecord, Long> identityIdFunc;
SFunction<PendingMessageRecord, IdentityTypeEnum> identityTypeFunc;
if (Objects.equals(PendingMessageRoleCategoryEnum.PROMOTER, roleCategory)) {
// 代办发起者查询条件
personIdFunc = PendingMessageRecord::getPromoterPersonId;
identityIdFunc = PendingMessageRecord::getPromoterId;
identityTypeFunc = PendingMessageRecord::getPromoterType;
buildPromoterCondition(query, operator);
} else {
// 代办执行者查询条件
personIdFunc = PendingMessageRecord::getExecutorPersonId;
identityIdFunc = PendingMessageRecord::getExecutorId;
identityTypeFunc = PendingMessageRecord::getExecutorType;
}
query.eq(personIdFunc, operator.getId());
if (Objects.nonNull(identity) && identity.isValid()) {
query.eq(identityIdFunc, identity.getId());
query.eq(identityTypeFunc, identity.getType());
}
}
private void buildPromoterCondition(LambdaQueryChainWrapper<PendingMessageRecord> query, PersonDTO operator) {
Date queryFrom = DateFormatUtil.toDate(LocalDateTime.now().minusDays(90));
List<PendingMessageRecord> records = pendingMessageRecordDao.lambdaQuery()
.eq(PendingMessageRecord::getPromoterPersonId, operator.getId())
.gt(PendingMessageRecord::getCreateAt, queryFrom)
.select(PendingMessageRecord::getId, PendingMessageRecord::getRequestNo)
.list();
Map<String, List<PendingMessageRecord>> map = records.stream()
.collect(Collectors.groupingBy(PendingMessageRecord::getRequestNo));
List<Long> ids = map.values().stream()
.map(e -> e.stream().mapToLong(PendingMessageRecord::getId).max().orElse(0))
.collect(Collectors.toList());
query.in(CollectionUtils.isNotEmpty(ids), PendingMessageRecord::getId, ids);
}
@NotEmpty
public List<Long> determineOuIds(Long ouId) {
List<Long> ouIds = new ArrayList<>();

View File

@ -2,7 +2,7 @@ package cn.axzo.msg.center.service.pending.response;
import cn.axzo.msg.center.api.custombutton.ProposedButtonFilter;
import cn.axzo.msg.center.api.custombutton.ProposedButtons;
import cn.axzo.msg.center.service.domain.CardUrlConfig;
import cn.axzo.msg.center.service.domain.UrlConfig;
import cn.axzo.msg.center.service.dto.ButtonRouterDTO;
import cn.axzo.msg.center.service.dto.DetailRouterDTO;
import cn.axzo.msg.center.service.dto.IdentityDTO;
@ -265,9 +265,9 @@ public class PendingMessageResponse implements Serializable, TodoButtonProvider
private CardUrlOpenStrategy cardUrlOpenStrategy;
/**
* 卡片跳转配置. 在links的基础上再包一层, 避免以后卡片增加自己的配置
* 卡片跳转
*/
private CardUrlConfig cardUrlConfig;
private UrlConfig cardUrl;
public void adjustProposedButtons(boolean forPromoter) {
ProposedButtonFilter.adjustProposedButtons(this, forPromoter);