Merge branch 'feature/REQ-1507' of axzsource.com:universal/infrastructure/backend/msg-center-plat into dev
This commit is contained in:
commit
786c3d5160
@ -334,6 +334,7 @@ public class MessageCoreServiceImpl implements MessageCoreService {
|
|||||||
param.setOperator(PersonDTO.builder().id(request.getPersonId()).build());
|
param.setOperator(PersonDTO.builder().id(request.getPersonId()).build());
|
||||||
param.setTerminalType(AppTerminalTypeEnum.CMS_WEB_PC);
|
param.setTerminalType(AppTerminalTypeEnum.CMS_WEB_PC);
|
||||||
param.setWithIdentify(false);
|
param.setWithIdentify(false);
|
||||||
|
param.setOuId(request.getOuId());
|
||||||
int pendingCnt = pendingMessageNewService.countUncompleted(param);
|
int pendingCnt = pendingMessageNewService.countUncompleted(param);
|
||||||
return new MessageStatisticRes(generalCnt, pendingCnt);
|
return new MessageStatisticRes(generalCnt, pendingCnt);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -30,6 +30,10 @@ public class MessageGroupNodeStatisticParam implements Serializable {
|
|||||||
* 当前登录账户的自然id(前端不care)
|
* 当前登录账户的自然id(前端不care)
|
||||||
*/
|
*/
|
||||||
private PersonDTO operator;
|
private PersonDTO operator;
|
||||||
|
/**
|
||||||
|
* 单位id
|
||||||
|
*/
|
||||||
|
private Long ouId;
|
||||||
/**
|
/**
|
||||||
* 应用终端类型
|
* 应用终端类型
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -67,8 +67,10 @@ import org.apache.commons.collections.CollectionUtils;
|
|||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -174,7 +176,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
|||||||
}
|
}
|
||||||
query.in(PendingMessageRecord::getTemplateCode, templateCodes);
|
query.in(PendingMessageRecord::getTemplateCode, templateCodes);
|
||||||
// 构建排序条件
|
// 构建排序条件
|
||||||
buildSortCondition(query, request.getOrderFields());
|
buildSortCondition(query, request.getOrderFields(), pendingMessageState);
|
||||||
|
|
||||||
IPage<PendingMessageRecord> page = request.toPage();
|
IPage<PendingMessageRecord> page = request.toPage();
|
||||||
IPage<PendingMessageRecord> result = query.page(page);
|
IPage<PendingMessageRecord> result = query.page(page);
|
||||||
@ -223,7 +225,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
|||||||
}
|
}
|
||||||
query.in(PendingMessageRecord::getTemplateCode, templateCodesPathMap.keySet());
|
query.in(PendingMessageRecord::getTemplateCode, templateCodesPathMap.keySet());
|
||||||
// 构建排序条件
|
// 构建排序条件
|
||||||
buildSortCondition(query, request.getOrderFields());
|
buildSortCondition(query, request.getOrderFields(), pendingMessageState);
|
||||||
IPage<PendingMessageRecord> result = query.page(request.toPage());
|
IPage<PendingMessageRecord> result = query.page(request.toPage());
|
||||||
if (CollectionUtils.isEmpty(result.getRecords())) {
|
if (CollectionUtils.isEmpty(result.getRecords())) {
|
||||||
return Page.toPage(request.getPage(), request.getPageSize(), result.getTotal(), Collections.emptyList());
|
return Page.toPage(request.getPage(), request.getPageSize(), result.getTotal(), Collections.emptyList());
|
||||||
@ -381,13 +383,15 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
|||||||
.orElse(null);
|
.orElse(null);
|
||||||
// 解析并替换掉路由地址中的动态参数变量
|
// 解析并替换掉路由地址中的动态参数变量
|
||||||
JSONObject routerParam = JSONObjectUtil.parseObject(pendingMessageRecord.getRouterParams());
|
JSONObject routerParam = JSONObjectUtil.parseObject(pendingMessageRecord.getRouterParams());
|
||||||
|
msgTemplateRouter = MessageRouterUtil.parseAndConcatRouteUrl(msgTemplateRouter, routerParam);
|
||||||
|
JSONObject authParam = new JSONObject();
|
||||||
if (!routerParam.containsKey("ouId")) {
|
if (!routerParam.containsKey("ouId")) {
|
||||||
routerParam.put("ouId", pendingMessageRecord.getOuId());
|
authParam.put("ouId", pendingMessageRecord.getOuId());
|
||||||
}
|
}
|
||||||
if (!routerParam.containsKey("workspaceId")) {
|
if (!routerParam.containsKey("workspaceId")) {
|
||||||
routerParam.put("workspaceId", pendingMessageRecord.getOrgId());
|
authParam.put("workspaceId", pendingMessageRecord.getOrgId());
|
||||||
}
|
}
|
||||||
msgTemplateRouter = MessageRouterUtil.parseAndConcatRouteUrl(msgTemplateRouter, routerParam);
|
msgTemplateRouter = MessageRouterUtil.parseRouteUrl(msgTemplateRouter, authParam);
|
||||||
pendingMessage.setMsgTemplateRouter(msgTemplateRouter);
|
pendingMessage.setMsgTemplateRouter(msgTemplateRouter);
|
||||||
// 获取模板卡片信息
|
// 获取模板卡片信息
|
||||||
List<MessageCardContentItemDTO> msgCardContentItems = messageTemplates.stream()
|
List<MessageCardContentItemDTO> msgCardContentItems = messageTemplates.stream()
|
||||||
@ -469,6 +473,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
|||||||
}
|
}
|
||||||
LambdaQueryChainWrapper<PendingMessageRecord> query = pendingMessageRecordDao.lambdaQuery()
|
LambdaQueryChainWrapper<PendingMessageRecord> query = pendingMessageRecordDao.lambdaQuery()
|
||||||
.in(PendingMessageRecord::getTemplateCode, templateCodes)
|
.in(PendingMessageRecord::getTemplateCode, templateCodes)
|
||||||
|
.eq(Objects.nonNull(param.getOuId()), PendingMessageRecord::getOuId, param.getOuId())
|
||||||
.eq(PendingMessageRecord::getState, PendingMessageStateEnum.HAS_BEEN_SENT);
|
.eq(PendingMessageRecord::getState, PendingMessageStateEnum.HAS_BEEN_SENT);
|
||||||
buildPersonCondition(query, param.getWithIdentify(), PendingMessageRoleCategoryEnum.EXECUTOR, param.getOperator());
|
buildPersonCondition(query, param.getWithIdentify(), PendingMessageRoleCategoryEnum.EXECUTOR, param.getOperator());
|
||||||
return query.count();
|
return query.count();
|
||||||
@ -503,6 +508,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
|||||||
personIdFunc = PendingMessageRecord::getPromoterPersonId;
|
personIdFunc = PendingMessageRecord::getPromoterPersonId;
|
||||||
identityIdFunc = PendingMessageRecord::getPromoterId;
|
identityIdFunc = PendingMessageRecord::getPromoterId;
|
||||||
identityTypeFunc = PendingMessageRecord::getPromoterType;
|
identityTypeFunc = PendingMessageRecord::getPromoterType;
|
||||||
|
buildPromoterCondition(query, operator);
|
||||||
} else {
|
} else {
|
||||||
// 代办执行者查询条件
|
// 代办执行者查询条件
|
||||||
personIdFunc = PendingMessageRecord::getExecutorPersonId;
|
personIdFunc = PendingMessageRecord::getExecutorPersonId;
|
||||||
@ -516,11 +522,30 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
private void buildSortCondition(LambdaQueryChainWrapper<PendingMessageRecord> query,
|
private void buildSortCondition(LambdaQueryChainWrapper<PendingMessageRecord> query,
|
||||||
Collection<QueryOrderByDTO> orderFields) {
|
Collection<QueryOrderByDTO> orderFields, PendingMessageStateEnum state) {
|
||||||
if (CollectionUtils.isEmpty(orderFields)) {
|
if (CollectionUtils.isEmpty(orderFields)) {
|
||||||
// 默认时间降序
|
// 默认时间降序
|
||||||
|
if (PendingMessageStateEnum.COMPLETED.equals(state)) {
|
||||||
|
query.orderByDesc(PendingMessageRecord::getUpdateAt);
|
||||||
|
} else {
|
||||||
query.orderByDesc(PendingMessageRecord::getCreateAt);
|
query.orderByDesc(PendingMessageRecord::getCreateAt);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
orderFields.stream()
|
orderFields.stream()
|
||||||
@ -544,7 +569,8 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
|||||||
record.setRequestNo(requestNo);
|
record.setRequestNo(requestNo);
|
||||||
record.setState(PendingMessageStateEnum.HAS_BEEN_SENT);
|
record.setState(PendingMessageStateEnum.HAS_BEEN_SENT);
|
||||||
// 构建代办记录的人维度的相关信息
|
// 构建代办记录的人维度的相关信息
|
||||||
buildPersonInfo(record, param.getPromoter(), executor, workspace.getId());
|
buildPersonInfo(record, param.getPromoter(), executor,
|
||||||
|
Optional.ofNullable(workspace).map(SimpleWorkspaceRes::getId).orElse(0L));
|
||||||
// 构建模板信息
|
// 构建模板信息
|
||||||
buildTemplateInfo(record, msgTemplate, param.getBizExtParams());
|
buildTemplateInfo(record, msgTemplate, param.getBizExtParams());
|
||||||
// 构建代办所属企业/项目等相关信息
|
// 构建代办所属企业/项目等相关信息
|
||||||
|
|||||||
@ -123,6 +123,30 @@ public final class MessageRouterUtil {
|
|||||||
return JSON.parseArray(styleObj.toJSONString(), ButtonStyleEnum.class);
|
return JSON.parseArray(styleObj.toJSONString(), ButtonStyleEnum.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解析模板上配置的路由地址,将发送消息时的参数替换上去,并将路由参数追加到模板的路由地址后面,兼容APP端新老版本
|
||||||
|
*
|
||||||
|
* @param msgTemplateRouter 路由信息
|
||||||
|
* @param routerParam 路由参数
|
||||||
|
* @return MessageTemplateRouterDTO
|
||||||
|
*/
|
||||||
|
public static MessageTemplateRouterDTO parseRouteUrl(MessageTemplateRouterDTO msgTemplateRouter,
|
||||||
|
JSONObject routerParam) {
|
||||||
|
if (Objects.isNull(msgTemplateRouter)) {
|
||||||
|
return msgTemplateRouter;
|
||||||
|
}
|
||||||
|
// 拷贝一份,避免修改入参
|
||||||
|
msgTemplateRouter = msgTemplateRouter.deepClone();
|
||||||
|
// 路由参数有效
|
||||||
|
if (Objects.nonNull(routerParam)) {
|
||||||
|
// 编排业务详情路由
|
||||||
|
parseAndConcatDetailRouterUrl(msgTemplateRouter.getRouteDetail(), routerParam, false);
|
||||||
|
// 编排路由按钮
|
||||||
|
parseAndConcatButtonRouterUrl(msgTemplateRouter.getRouteButtons(), routerParam, false);
|
||||||
|
}
|
||||||
|
return msgTemplateRouter;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 解析模板上配置的路由地址,将发送消息时的参数替换上去,并将路由参数追加到模板的路由地址后面,兼容APP端新老版本
|
* 解析模板上配置的路由地址,将发送消息时的参数替换上去,并将路由参数追加到模板的路由地址后面,兼容APP端新老版本
|
||||||
*
|
*
|
||||||
@ -140,44 +164,48 @@ public final class MessageRouterUtil {
|
|||||||
// 路由参数有效
|
// 路由参数有效
|
||||||
if (Objects.nonNull(routerParam)) {
|
if (Objects.nonNull(routerParam)) {
|
||||||
// 编排业务详情路由
|
// 编排业务详情路由
|
||||||
parseAndConcatDetailRouterUrl(msgTemplateRouter.getRouteDetail(), routerParam);
|
parseAndConcatDetailRouterUrl(msgTemplateRouter.getRouteDetail(), routerParam, true);
|
||||||
// 编排路由按钮
|
// 编排路由按钮
|
||||||
parseAndConcatButtonRouterUrl(msgTemplateRouter.getRouteButtons(), routerParam);
|
parseAndConcatButtonRouterUrl(msgTemplateRouter.getRouteButtons(), routerParam, true);
|
||||||
}
|
}
|
||||||
return msgTemplateRouter;
|
return msgTemplateRouter;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void parseAndConcatDetailRouterUrl(MessageRouteDetailDTO routeDetail, JSONObject routerParam) {
|
private static void parseAndConcatDetailRouterUrl(MessageRouteDetailDTO routeDetail, JSONObject routerParam,
|
||||||
|
boolean isConcat) {
|
||||||
if (Objects.isNull(routeDetail)) {
|
if (Objects.isNull(routeDetail)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
routeDetail.getRouterConfigs()
|
routeDetail.getRouterConfigs()
|
||||||
.forEach(e -> concatRouterParam(e::getUrl, e::setUrl, routerParam));
|
.forEach(e -> concatRouterParam(e::getUrl, e::setUrl, routerParam, isConcat));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void parseAndConcatButtonRouterUrl(List<MessageRouteButtonDTO> routeButtons, JSONObject routerParam) {
|
private static void parseAndConcatButtonRouterUrl(List<MessageRouteButtonDTO> routeButtons, JSONObject routerParam,
|
||||||
|
boolean isConcat) {
|
||||||
if (CollectionUtils.isEmpty(routeButtons)) {
|
if (CollectionUtils.isEmpty(routeButtons)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
routeButtons.forEach(e -> {
|
routeButtons.forEach(e -> {
|
||||||
if (StringUtils.isNotBlank(e.getApiUrl())) {
|
if (StringUtils.isNotBlank(e.getApiUrl())) {
|
||||||
// API调用类型的按钮
|
// API调用类型的按钮
|
||||||
concatRouterParam(e::getApiUrl, e::setApiUrl, routerParam);
|
concatRouterParam(e::getApiUrl, e::setApiUrl, routerParam, isConcat);
|
||||||
}
|
}
|
||||||
if (CollectionUtils.isNotEmpty(e.getRouterConfigs())) {
|
if (CollectionUtils.isNotEmpty(e.getRouterConfigs())) {
|
||||||
// 页面跳转类型的按钮
|
// 页面跳转类型的按钮
|
||||||
e.getRouterConfigs()
|
e.getRouterConfigs()
|
||||||
.forEach(config -> concatRouterParam(config::getUrl, config::setUrl, routerParam));
|
.forEach(config -> concatRouterParam(config::getUrl, config::setUrl, routerParam, isConcat));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void concatRouterParam(Supplier<String> getUrlSupplier, Consumer<String> setUrlConsumer,
|
private static void concatRouterParam(Supplier<String> getUrlSupplier, Consumer<String> setUrlConsumer,
|
||||||
JSONObject routerParam) {
|
JSONObject routerParam, boolean isConcat) {
|
||||||
// 替换原始URL中的参数变量
|
// 替换原始URL中的参数变量
|
||||||
String routerUrl = PlaceholderResolver.getDefaultResolver().resolveByMap(getUrlSupplier.get(), routerParam);
|
String routerUrl = PlaceholderResolver.getDefaultResolver().resolveByMap(getUrlSupplier.get(), routerParam);
|
||||||
// 将routerParam追加到原始的URL后面
|
// 将routerParam追加到原始的URL后面
|
||||||
|
if (isConcat) {
|
||||||
routerUrl = concatRouterParam(routerUrl, routerParam);
|
routerUrl = concatRouterParam(routerUrl, routerParam);
|
||||||
|
}
|
||||||
setUrlConsumer.accept(routerUrl);
|
setUrlConsumer.accept(routerUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -26,6 +26,10 @@ public class MessageStatisticReq implements Serializable {
|
|||||||
*/
|
*/
|
||||||
@NotNull(message = "personId is required")
|
@NotNull(message = "personId is required")
|
||||||
private Long personId;
|
private Long personId;
|
||||||
|
/**
|
||||||
|
* 单位id
|
||||||
|
*/
|
||||||
|
private Long ouId;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
|||||||
@ -27,6 +27,10 @@ public class PendingMessageCountUncompletedRequest implements Serializable {
|
|||||||
*/
|
*/
|
||||||
@NotNull(message = "personId is required")
|
@NotNull(message = "personId is required")
|
||||||
private Long personId;
|
private Long personId;
|
||||||
|
/**
|
||||||
|
* 单位id
|
||||||
|
*/
|
||||||
|
private Long ouId;
|
||||||
/**
|
/**
|
||||||
* 当前登录账户的身份id(前端不care)
|
* 当前登录账户的身份id(前端不care)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -28,6 +28,10 @@ public class PendingMessageStatisticRequest implements Serializable {
|
|||||||
*/
|
*/
|
||||||
@NotNull(message = "personId is required")
|
@NotNull(message = "personId is required")
|
||||||
private Long personId;
|
private Long personId;
|
||||||
|
/**
|
||||||
|
* 单位id
|
||||||
|
*/
|
||||||
|
private Long ouId;
|
||||||
/**
|
/**
|
||||||
* 当前登录账户的身份id(前端不care)
|
* 当前登录账户的身份id(前端不care)
|
||||||
*/
|
*/
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user