Merge branch 'feature/REQ-1138' into 'dev'

Feature/req 1138

See merge request universal/infrastructure/backend/msg-center-plat!49
This commit is contained in:
罗福 2023-10-09 06:35:14 +00:00
commit b40cef0dc9
9 changed files with 142 additions and 8 deletions

View File

@ -52,6 +52,9 @@ public class PendingMessageStatisticController implements PendingMessageServiceA
@Override
public CommonResponse<Page<PendingMessageBriefRes>> pageQuery(PendingMessagePageReq request) {
//FIXME:[cold_blade]这里临时处理 企业端不关注身份的场景
request.setIdentifyId(null);
request.setIdentifyTypes(null);
return CommonResponse.success(pendingMessageService.pageQuery(request));
}

View File

@ -8,6 +8,7 @@ import cn.axzo.msg.center.domain.entity.MessageRelation;
import com.baomidou.mybatisplus.core.metadata.IPage;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.List;
import java.util.Set;
@ -37,4 +38,6 @@ public interface MessageRelationService {
void delete(Long id);
void syncData(List<SyncRelationDataDTO> dtoList);
List<Long> listRelationIds(Collection<Long> moduleIds);
}

View File

@ -6,7 +6,12 @@ import cn.axzo.msg.center.api.request.CreateModuleReq;
import cn.axzo.msg.center.api.request.SearchModuleReq;
import cn.axzo.msg.center.api.request.SyncModuleDataReq;
import cn.axzo.msg.center.api.request.UpdateModuleReq;
import cn.axzo.msg.center.api.response.*;
import cn.axzo.msg.center.api.response.CommonPlatManagerRes;
import cn.axzo.msg.center.api.response.MessageModuleRes;
import cn.axzo.msg.center.api.response.ModuleGroupByNameResponse;
import cn.axzo.msg.center.api.response.SyncModuleDataRes;
import cn.axzo.msg.center.api.response.SyncRouterDataRes;
import cn.axzo.msg.center.api.response.SyncTemplateDataRes;
import cn.axzo.msg.center.common.utils.BeanConvertUtils;
import cn.axzo.msg.center.domain.dto.CreateModuleDTO;
import cn.axzo.msg.center.domain.dto.SearchModuleDTO;
@ -32,7 +37,14 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -40,7 +52,6 @@ import java.util.stream.Collectors;
@RestController
public class InsideMessageModuleApiImpl implements InsideMessageModuleApi {
@Resource
private MessageModuleService moduleService;
@Resource
@ -52,7 +63,6 @@ public class InsideMessageModuleApiImpl implements InsideMessageModuleApi {
@Resource
private MessageRouterService routerService;
@Override
public CommonResponse<Map<Long, String>> getModules(@PathVariable Integer identityType) {
Map<Long, String> moduleMap = new HashMap<>();
@ -201,4 +211,26 @@ public class InsideMessageModuleApiImpl implements InsideMessageModuleApi {
moduleService.syncData(syncModuleDataDTOS);
return CommonResponse.success();
}
@Override
public CommonResponse<List<ModuleGroupByNameResponse>> listModulesGroupByName() {
Map<String, List<Long>> resultList = groupByField(MessageModule::getModuleName);
List<ModuleGroupByNameResponse> responses = resultList.entrySet().stream()
.map(e -> ModuleGroupByNameResponse.builder()
.moduleName(e.getKey())
.ids(e.getValue())
.build())
.collect(Collectors.toList());
return CommonResponse.success(responses);
}
private <T> Map<T, List<Long>> groupByField(Function<MessageModule, T> groupByField) {
if (Objects.isNull(groupByField)) {
log.warn("groupByField is null...");
return Collections.emptyMap();
}
return moduleService.getAllModules().stream()
.collect(Collectors.groupingBy(groupByField,
Collectors.mapping(MessageModule::getId, Collectors.toList())));
}
}

View File

@ -182,4 +182,17 @@ public class MessageRelationServiceImpl implements MessageRelationService {
});
}
@Override
public List<Long> listRelationIds(Collection<Long> moduleIds) {
if (CollectionUtils.isEmpty(moduleIds)) {
return Collections.emptyList();
}
return messageRelationDao.lambdaQuery()
.in(MessageRelation::getModuleId, moduleIds)
.eq(MessageRelation::getIsDelete, 0)
.list().stream()
.map(MessageRelation::getId)
.collect(Collectors.toList());
}
}

View File

@ -15,6 +15,7 @@ import cn.axzo.msg.center.common.utils.BeanConvertUtils;
import cn.axzo.msg.center.common.utils.PlaceholderResolver;
import cn.axzo.msg.center.dal.MessageRecordDao;
import cn.axzo.msg.center.domain.dto.MsgModuleDTO;
import cn.axzo.msg.center.domain.entity.MessageModule;
import cn.axzo.msg.center.domain.entity.MessageRecord;
import cn.axzo.msg.center.domain.entity.MessageRouter;
import cn.axzo.msg.center.domain.enums.MsgRouteTypeEnum;
@ -24,6 +25,7 @@ import cn.axzo.msg.center.inside.notices.config.MessageSystemConfig;
import cn.axzo.msg.center.inside.notices.config.PendingMessageBizConfig;
import cn.axzo.msg.center.inside.notices.config.PendingMessageBizConfig.MsgTempBizCategoryConfig;
import cn.axzo.msg.center.inside.notices.service.MessageModuleService;
import cn.axzo.msg.center.inside.notices.service.MessageRelationService;
import cn.axzo.msg.center.inside.notices.service.MessageRouterService;
import cn.axzo.msg.center.inside.notices.service.PendingMessageService;
import cn.axzo.msg.center.inside.notices.utils.MessageRecordHelper;
@ -33,7 +35,6 @@ import cn.azxo.framework.common.model.Page;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import jodd.util.concurrent.ThreadFactoryBuilder;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
@ -48,6 +49,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@ -95,6 +97,7 @@ public class PendingMessageServiceImpl implements PendingMessageService {
private final MessageSystemConfig messageSystemConfig;
private final MessageRouterService messageRouterService;
private final MessageModuleService messageModuleService;
private final MessageRelationService messageRelationService;
private final PendingMessageBizConfig pendingMessageBizConfig;
@Override
@ -194,9 +197,17 @@ public class PendingMessageServiceImpl implements PendingMessageService {
@Override
public Page<PendingMessageBriefRes> pageQuery(PendingMessagePageReq request) {
IPage<MessageRecord> page = request.toPage();
Set<Long> relationIds = null;
if (CollectionUtils.isNotEmpty(request.getModuleIds())) {
List<Long> relationIdList = listRelationIds(request.getModuleIds());
if (CollectionUtils.isEmpty(relationIdList)) {
// 对应模块及其关联的模板删除的场景
return Page.toPage(page.getCurrent(), page.getSize(), page.getTotal(), Collections.emptyList());
}
relationIds = new HashSet<>(relationIdList);
}
// 获取数据冷热隔离的分界
final LocalDateTime queryFrom = getQueryFromTime();
Set<Long> relationIds = Optional.ofNullable(request.getModuleId()).map(Sets::newHashSet).orElse(null);
// 这里对前端未传入参的情况做一个兜底
Collection<MsgStateEnum> msgStates = CollectionUtils.isEmpty(request.getStates()) ? ALL_WITHOUT_UNSENT :
request.getStates();
@ -219,6 +230,15 @@ public class PendingMessageServiceImpl implements PendingMessageService {
return Page.toPage(page.getCurrent(), page.getSize(), page.getTotal(), msgRecordBriefs);
}
private List<Long> listRelationIds(List<Long> moduleIds) {
List<MessageModule> modules = messageModuleService.getModuleByIds(moduleIds);
if (CollectionUtils.isEmpty(modules)) {
return Collections.emptyList();
}
moduleIds = modules.stream().map(MessageModule::getId).collect(Collectors.toList());
return messageRelationService.listRelationIds(moduleIds);
}
private Map<Long, MsgModuleDTO> listMessageModules(List<MessageRecord> msgRecords) {
//获取relationId集合
Set<Long> relationIds = msgRecords.stream().map(MessageRecord::getRelationId).collect(Collectors.toSet());

View File

@ -7,11 +7,17 @@ import cn.axzo.msg.center.api.request.SyncModuleDataReq;
import cn.axzo.msg.center.api.request.UpdateModuleReq;
import cn.axzo.msg.center.api.response.CommonPlatManagerRes;
import cn.axzo.msg.center.api.response.MessageModuleRes;
import cn.axzo.msg.center.api.response.ModuleGroupByNameResponse;
import cn.axzo.msg.center.api.response.SyncModuleDataRes;
import cn.azxo.framework.common.model.CommonResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import java.util.Map;
@ -82,5 +88,11 @@ public interface InsideMessageModuleApi {
@PostMapping ("/sync/module/data")
CommonResponse<Void> syncData(@RequestBody List<SyncModuleDataReq> dtoList);
/**
* 查询模块列表并分组
*
* @return 分组后的模块列表
*/
@GetMapping("/module/group-by-name")
CommonResponse<List<ModuleGroupByNameResponse>> listModulesGroupByName();
}

View File

@ -7,6 +7,7 @@ import cn.axzo.msg.center.api.request.SyncModuleDataReq;
import cn.axzo.msg.center.api.request.UpdateModuleReq;
import cn.axzo.msg.center.api.response.CommonPlatManagerRes;
import cn.axzo.msg.center.api.response.MessageModuleRes;
import cn.axzo.msg.center.api.response.ModuleGroupByNameResponse;
import cn.axzo.msg.center.api.response.SyncModuleDataRes;
import cn.azxo.framework.common.model.CommonResponse;
import lombok.extern.slf4j.Slf4j;
@ -63,4 +64,9 @@ public class InsideMessageModuleApiFallBack implements InsideMessageModuleApi {
public CommonResponse<Void> syncData(List<SyncModuleDataReq> dtoList) {
return null;
}
@Override
public CommonResponse<List<ModuleGroupByNameResponse>> listModulesGroupByName() {
return null;
}
}

View File

@ -10,6 +10,7 @@ import lombok.Setter;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
/**
* @description
@ -57,4 +58,8 @@ public class PendingMessagePageReq extends PageRequest implements Serializable {
* 模板id
*/
private Long moduleId;
/**
* 模块id列表
*/
private List<Long> moduleIds;
}

View File

@ -0,0 +1,40 @@
package cn.axzo.msg.center.api.response;
import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.io.Serializable;
import java.util.List;
/**
* @author cold_blade
* @date 2023/10/9
* @version 1.0
*/
@Setter
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ModuleGroupByNameResponse implements Serializable {
private static final long serialVersionUID = -6354884288735626666L;
/**
* 模块id列表
*/
private List<Long> ids;
/**
* 模块名称
*/
private String moduleName;
@Override
public String toString() {
return JSON.toJSONString(this);
}
}