REQ-3046: a lot of staff
This commit is contained in:
parent
cf66d98fe4
commit
802917e303
@ -7,13 +7,13 @@ import cn.axzo.msg.center.api.response.PendingMessageBriefRes;
|
||||
import cn.axzo.msg.center.api.response.PendingMessageStatisticRes;
|
||||
import cn.axzo.msg.center.api.response.PendingMessageTemporarilyStatisticRes;
|
||||
import cn.axzo.msg.center.api.response.PendingMessageTemporarilyTypeRes;
|
||||
import cn.axzo.msg.center.inside.notices.config.PendingMessageBizConfig;
|
||||
import cn.axzo.msg.center.inside.notices.service.PendingMessageService;
|
||||
import cn.azxo.framework.common.model.CommonResponse;
|
||||
import cn.azxo.framework.common.model.Page;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -31,13 +31,10 @@ public class PendingMessageStatisticController implements PendingMessageServiceA
|
||||
@Resource
|
||||
private PendingMessageService pendingMessageService;
|
||||
|
||||
@Resource
|
||||
private PendingMessageBizConfig pendingMessageBizConfig;
|
||||
|
||||
@Override
|
||||
public CommonResponse<List<PendingMessageTemporarilyStatisticRes>> temporarilyStatistic(
|
||||
PendingMessageTemporarilyStatisticReq request) {
|
||||
return CommonResponse.success(pendingMessageService.temporarilyStatistic(request));
|
||||
return CommonResponse.success(Collections.emptyList());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -1,10 +1,8 @@
|
||||
package cn.axzo.msg.center.inside.notices.service;
|
||||
|
||||
import cn.axzo.msg.center.api.request.PendingMessagePageReq;
|
||||
import cn.axzo.msg.center.api.request.PendingMessageTemporarilyStatisticReq;
|
||||
import cn.axzo.msg.center.api.response.PendingMessageBriefRes;
|
||||
import cn.axzo.msg.center.api.response.PendingMessageStatisticRes;
|
||||
import cn.axzo.msg.center.api.response.PendingMessageTemporarilyStatisticRes;
|
||||
import cn.axzo.msg.center.api.response.PendingMessageTemporarilyTypeRes;
|
||||
import cn.azxo.framework.common.model.Page;
|
||||
|
||||
@ -19,14 +17,6 @@ import java.util.List;
|
||||
*/
|
||||
public interface PendingMessageService {
|
||||
|
||||
/**
|
||||
* 统计代办类消息
|
||||
*
|
||||
* @param request 统计请求的入参
|
||||
* @return 符合条件的代办数量
|
||||
*/
|
||||
List<PendingMessageTemporarilyStatisticRes> temporarilyStatistic(PendingMessageTemporarilyStatisticReq request);
|
||||
|
||||
/**
|
||||
* 根据消息的临时的业务分类分页查询个人相关的待办消息
|
||||
*
|
||||
|
||||
@ -9,7 +9,6 @@ import cn.axzo.msg.center.api.request.PendingMessageTemporarilyStatisticReq;
|
||||
import cn.axzo.msg.center.api.response.MessageRouterInfoRes;
|
||||
import cn.axzo.msg.center.api.response.PendingMessageBriefRes;
|
||||
import cn.axzo.msg.center.api.response.PendingMessageStatisticRes;
|
||||
import cn.axzo.msg.center.api.response.PendingMessageTemporarilyStatisticRes;
|
||||
import cn.axzo.msg.center.api.response.PendingMessageTemporarilyTypeRes;
|
||||
import cn.axzo.msg.center.common.utils.BeanConvertUtils;
|
||||
import cn.axzo.msg.center.common.utils.PlaceholderResolver;
|
||||
@ -29,7 +28,6 @@ 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;
|
||||
import cn.axzo.msg.center.message.service.PendingMessageNewService;
|
||||
import cn.axzo.msg.center.notices.common.enums.ReturnCodeEnum;
|
||||
import cn.axzo.msg.center.notices.common.exception.BizException;
|
||||
import cn.azxo.framework.common.model.Page;
|
||||
@ -100,28 +98,6 @@ public class PendingMessageServiceImpl implements PendingMessageService {
|
||||
private final MessageModuleService messageModuleService;
|
||||
private final MessageRelationService messageRelationService;
|
||||
private final PendingMessageBizConfig pendingMessageBizConfig;
|
||||
private final PendingMessageNewService pendingMessageNewService;
|
||||
|
||||
@Override
|
||||
public List<PendingMessageTemporarilyStatisticRes> temporarilyStatistic(PendingMessageTemporarilyStatisticReq request) {
|
||||
// 参数检测
|
||||
checkParam(request);
|
||||
final List<MsgTempBizCategoryConfig> categoryConfigs = pendingMessageBizConfig.tempCategoriesConfig();
|
||||
if (CollectionUtils.isEmpty(categoryConfigs)) {
|
||||
log.warn("the nacos config is lost......");
|
||||
return Collections.emptyList();
|
||||
}
|
||||
try {
|
||||
return categoryConfigs.stream()
|
||||
// 自然排序,前端仅做渲染,展示顺序的工作由后端配置
|
||||
.sorted()
|
||||
.map(e -> statistic(request, e))
|
||||
.collect(Collectors.toList());
|
||||
} catch (Exception e) {
|
||||
log.error("broke out some exception while statistic pending message.", e);
|
||||
throw new BizException(ReturnCodeEnum.SYSTEM_ERROR, "system exception.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public PendingMessageStatisticRes temporarilyPage(PendingMessagePageReq request) {
|
||||
@ -288,22 +264,6 @@ public class PendingMessageServiceImpl implements PendingMessageService {
|
||||
return module;
|
||||
}
|
||||
|
||||
private PendingMessageTemporarilyStatisticRes statistic(PendingMessageTemporarilyStatisticReq request,
|
||||
MsgTempBizCategoryConfig categoryConfig) {
|
||||
// 统计数量
|
||||
Integer count = pendingMessageNewService.countUncompleted(request.getPersonId(), categoryConfig.getConfigRelationIds());
|
||||
PendingMessageTemporarilyStatisticRes res = new PendingMessageTemporarilyStatisticRes();
|
||||
res.setUnCompletedCount(count);
|
||||
res.setCategoryCode(categoryConfig.getCategory().name());
|
||||
res.setCategoryDesc(categoryConfig.getCategory().getDesc());
|
||||
res.setIconUrl(categoryConfig.getIconUrl());
|
||||
if (StringUtils.isNotBlank(categoryConfig.getJumpUrl())) {
|
||||
// 分类指定了具体的跳转地址,则优先使用其指定的地址,这里指定为原生APP
|
||||
res.setRouter(new MessageRouterInfoRes(NativeTypeEnum.H5.getMessage(), categoryConfig.getJumpUrl(), ""));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
private void checkParam(PendingMessageTemporarilyStatisticReq request) {
|
||||
if (Objects.isNull(request)
|
||||
|| Objects.isNull(request.getIdentifyId())) {
|
||||
|
||||
@ -1,9 +1,7 @@
|
||||
package cn.axzo.msg.center.message.controller;
|
||||
|
||||
import cn.axzo.msg.center.api.response.MessageDetailRes;
|
||||
import cn.axzo.msg.center.message.domain.param.MessageGroupNodeStatisticParam;
|
||||
import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam;
|
||||
import cn.axzo.msg.center.message.service.PendingMessageNewService;
|
||||
import cn.axzo.msg.center.message.service.todo.TodoRangeQueryService;
|
||||
import cn.axzo.msg.center.message.service.todo.TodoSimpleQueryService;
|
||||
import cn.axzo.msg.center.message.service.todo.TodoWorkerQueryService;
|
||||
@ -66,7 +64,6 @@ import java.util.concurrent.TimeUnit;
|
||||
@RequiredArgsConstructor
|
||||
public class PendingMessageNewController implements PendingMessageClient {
|
||||
|
||||
private final PendingMessageNewService pendingMessageNewService;
|
||||
private final TodoManager todoManager;
|
||||
private final TodoRangeQueryService todoRangeQueryService;
|
||||
private final TodoSimpleQueryService todoSimpleQueryService;
|
||||
@ -138,11 +135,6 @@ public class PendingMessageNewController implements PendingMessageClient {
|
||||
return CommonResponse.success(todoWorkerQueryService.getWorkerCalendar(request));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResponse<Page<MessageDetailRes>> compatiblePageQuery(PendingMessagePageRequest request) {
|
||||
return CommonResponse.success(pendingMessageNewService.compatiblePageQuery(request));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResponse<PendingMessageResponse> query(PendingMessageQueryRequest request) {
|
||||
log.info("query, request={}", JSON.toJSONString(request));
|
||||
@ -155,14 +147,17 @@ public class PendingMessageNewController implements PendingMessageClient {
|
||||
@Override
|
||||
public CommonResponse<PendingMessageResponse> detail(
|
||||
String msgIdentityCode, TerminalTypeEnum terminalType, TodoQueryType queryType) {
|
||||
PendingMessageResponse response = todoSimpleQueryService.getDetail(msgIdentityCode, terminalType, queryType);
|
||||
PendingMessageDetailRequestV3 request = new PendingMessageDetailRequestV3();
|
||||
request.setMsgIdentityCode(msgIdentityCode);
|
||||
request.setTerminalType(terminalType);
|
||||
request.setQueryType(queryType);
|
||||
PendingMessageResponse response = todoSimpleQueryService.getDetail(request);
|
||||
return CommonResponse.success(response);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResponse<PendingMessageResponse> detailV3(PendingMessageDetailRequestV3 requestV3) {
|
||||
PendingMessageResponse response = todoSimpleQueryService.getDetail(
|
||||
requestV3.getMsgIdentityCode(), requestV3.getTerminalType(), requestV3.getQueryType());
|
||||
public CommonResponse<PendingMessageResponse> detailV3(PendingMessageDetailRequestV3 request) {
|
||||
PendingMessageResponse response = todoSimpleQueryService.getDetail(request);
|
||||
return CommonResponse.success(response);
|
||||
}
|
||||
|
||||
@ -182,7 +177,7 @@ public class PendingMessageNewController implements PendingMessageClient {
|
||||
|
||||
@Override
|
||||
public CommonResponse<Page<PendingMessageIterateResponse>> iterate(PendingMessageIterateRequest request) {
|
||||
return CommonResponse.success(pendingMessageNewService.iterate(request));
|
||||
return CommonResponse.success(Page.zero());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -2,20 +2,25 @@ 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.dto.IdentityDTO;
|
||||
import cn.axzo.msg.center.service.dto.MessageCardContentItemDTO;
|
||||
import cn.axzo.msg.center.service.dto.PersonDTO;
|
||||
import cn.axzo.msg.center.service.enums.BizCategoryEnum;
|
||||
import cn.axzo.msg.center.service.enums.BizFinalStateEnum;
|
||||
import cn.axzo.msg.center.service.enums.CardUrlOpenStrategy;
|
||||
import cn.axzo.msg.center.service.enums.MessageCategoryEnum;
|
||||
import cn.axzo.msg.center.service.enums.OrganizationTypeEnum;
|
||||
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.TerminalProvider;
|
||||
import cn.axzo.msg.center.service.pending.response.PendingMessageResponse;
|
||||
import cn.axzo.msg.center.service.pending.response.v3.ModelV2PropsPopulator;
|
||||
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.MessageRouterUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
@ -24,6 +29,7 @@ import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
@ -38,6 +44,7 @@ import java.util.Optional;
|
||||
* @date 2023/9/23
|
||||
* @version 1.0
|
||||
*/
|
||||
@Slf4j
|
||||
@Setter
|
||||
@Getter
|
||||
@Builder
|
||||
@ -210,6 +217,21 @@ public class PendingMessageDTO implements Serializable {
|
||||
private JSONObject bizExtParamObj;
|
||||
private JSONObject routerExtParamObj;
|
||||
|
||||
/**
|
||||
* 基于分组的待办信息
|
||||
*/
|
||||
private ParsedModelV3 modelV3;
|
||||
|
||||
/**
|
||||
* 卡片跳转方式. NONE: 无跳转, OPEN_TODO_DETAIL: 打开待办详情, OPEN_CUSTOM_PAGE: 打开指定页面
|
||||
*/
|
||||
private CardUrlOpenStrategy cardUrlOpenStrategy;
|
||||
|
||||
/**
|
||||
* 卡片跳转配置. 在links的基础上再包一层, 避免以后卡片增加自己的配置
|
||||
*/
|
||||
private CardUrlConfig cardUrlConfig;
|
||||
|
||||
@Deprecated
|
||||
public static PendingMessageDTO from(PendingMessageRecord pendingMessageRecord) {
|
||||
// 代办发起者信息
|
||||
@ -259,13 +281,19 @@ public class PendingMessageDTO implements Serializable {
|
||||
.build();
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public PendingMessageResponse toResponse(TerminalTypeEnum terminalType) {
|
||||
log.warn("Invoking deprecated API, terminalType: {}", terminalType);
|
||||
return null;
|
||||
}
|
||||
|
||||
public PendingMessageResponse toResponse(TerminalProvider terminalProvider) {
|
||||
boolean isCreatedToday = false;
|
||||
if (createTime != null) {
|
||||
Date createAt = DateFormatUtil.toDate(createTime);
|
||||
isCreatedToday = DateUtil.isSameDay(createAt, new Date());
|
||||
}
|
||||
return PendingMessageResponse.builder()
|
||||
PendingMessageResponse response = PendingMessageResponse.builder()
|
||||
// 发起人单位、项目信息
|
||||
.promoterOuId(promoterOuId)
|
||||
.promoterWorkspaceId(promoterWorkspaceId)
|
||||
@ -294,7 +322,6 @@ public class PendingMessageDTO implements Serializable {
|
||||
.templateCode(this.templateCode)
|
||||
.title(this.title)
|
||||
.content(this.content)
|
||||
.cardItems(this.cardItems)
|
||||
.promoterPersonId(Optional.ofNullable(this.promoter).map(PersonDTO::getId).orElse(null))
|
||||
.promoterName(Optional.ofNullable(this.promoter).map(PersonDTO::getName).orElse(null))
|
||||
.promoterIdentity(Optional.ofNullable(this.promoter).map(PersonDTO::getIdentity).orElse(null))
|
||||
@ -310,11 +337,16 @@ public class PendingMessageDTO implements Serializable {
|
||||
.createTimestamp(DateFormatUtil.toTimestamp(this.createTime))
|
||||
.updateTimestamp(DateFormatUtil.toTimestamp(this.updateTime))
|
||||
.deadlineTimestamp(DateFormatUtil.toTimestamp(this.deadline))
|
||||
.detailRouter(MessageRouterUtil.fetchBizDetailRouter(this.msgTemplateRouter, terminalType).orElse(null))
|
||||
.buttonRouters(MessageRouterUtil.fetchMessageRouterButtons(this.msgTemplateRouter, terminalType))
|
||||
.bizFinalStateIcon(Optional.ofNullable(bizFinalState).map(BizFinalStateEnum::getIcon).orElse(null))
|
||||
.bizFinalState(bizFinalState)
|
||||
.modelV3(modelV3)
|
||||
.displayOnCardKeyValues(modelV3.determineDisplayOnCardKeyValues())
|
||||
.cardUrlOpenStrategy(cardUrlOpenStrategy)
|
||||
.cardUrlConfig(cardUrlConfig)
|
||||
.build();
|
||||
if (modelV3 != null && terminalProvider != null)
|
||||
ParsedModel3Walker.walkDown(modelV3, new ModelV2PropsPopulator(response, terminalProvider));
|
||||
return response;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -7,7 +7,6 @@ import cn.axzo.msg.center.service.enums.MessageCategoryEnum;
|
||||
import cn.axzo.msg.center.service.enums.RouterCategoryEnum;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
@ -17,7 +16,7 @@ import java.util.List;
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
public class ModelV3 {
|
||||
public class TemplateModelV3 {
|
||||
|
||||
@NotNull private MessageTemplateV3 template;
|
||||
@NotNull private List<MessageTemplateGroupV3> groups;
|
||||
@ -1,210 +0,0 @@
|
||||
package cn.axzo.msg.center.message.service;
|
||||
|
||||
import cn.axzo.msg.center.api.response.MessageDetailRes;
|
||||
import cn.axzo.msg.center.message.domain.dto.PendingMessageDTO;
|
||||
import cn.axzo.msg.center.message.domain.dto.PendingMessageStatisticDTO;
|
||||
import cn.axzo.msg.center.message.domain.param.MessageGroupNodeStatisticParam;
|
||||
import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam;
|
||||
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
|
||||
import cn.axzo.msg.center.service.pending.request.CompletePendingBySubCodeRequest;
|
||||
import cn.axzo.msg.center.service.pending.request.CompletePendingMessageByIdRequest;
|
||||
import cn.axzo.msg.center.service.pending.request.CompletePendingMessageRequest;
|
||||
import cn.axzo.msg.center.service.pending.request.PendingMessageByBizCodeRequest;
|
||||
import cn.axzo.msg.center.service.pending.request.PendingMessageFixedTemplatePageRequest;
|
||||
import cn.axzo.msg.center.service.pending.request.PendingMessageIterateRequest;
|
||||
import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest;
|
||||
import cn.axzo.msg.center.service.pending.request.PendingMessageQueryRequest;
|
||||
import cn.axzo.msg.center.service.pending.request.RevokePendingMessageByIdRequest;
|
||||
import cn.axzo.msg.center.service.pending.request.SetHideRequest;
|
||||
import cn.axzo.msg.center.service.pending.request.UpdatePendingMessageByIdRequest;
|
||||
import cn.axzo.msg.center.service.pending.response.AnalysisPage;
|
||||
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.azxo.framework.common.model.Page;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* 待办Service
|
||||
* @author cold_blade
|
||||
* @date 2023/9/20
|
||||
* @version 1.0
|
||||
*/
|
||||
public interface PendingMessageNewService {
|
||||
|
||||
/**
|
||||
* 分类统计待办的待处理状态的数量
|
||||
*
|
||||
* @param param 统计入参
|
||||
* @return 分类信息及其对应的待处理的待办数量列表
|
||||
*/
|
||||
List<PendingMessageStatisticDTO> groupStatistic(MessageGroupNodeStatisticParam param);
|
||||
|
||||
/**
|
||||
* 统计个人在某个应用终端的待处理的待办数量
|
||||
*
|
||||
* @param param 统计入参
|
||||
* @return 待处理的待办数量
|
||||
*/
|
||||
Integer countUncompleted(MessageGroupNodeStatisticParam param);
|
||||
|
||||
/**
|
||||
* 根据模板id列表统计指定的自然人的待办数量
|
||||
*
|
||||
* @param personId 自然人id
|
||||
* @param templateIds 模板id列表
|
||||
* @return 指定的人的待办数量
|
||||
*/
|
||||
Integer countUncompleted(Long personId, Collection<Long> templateIds);
|
||||
|
||||
/**
|
||||
* 代办列表分页查询
|
||||
*
|
||||
* @param request 分页查询相关参数
|
||||
* @return 代办列表
|
||||
*/
|
||||
AnalysisPage<PendingMessageResponse> pageQuery(PendingMessagePageRequest request);
|
||||
|
||||
/**
|
||||
* 遍历待办数据
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
Page<PendingMessageIterateResponse> iterate(PendingMessageIterateRequest request);
|
||||
|
||||
/**
|
||||
* 查询可以用于分页查询的模版
|
||||
* @param request
|
||||
*/
|
||||
List<String> determinePageQueryTemplateCodes(PendingMessagePageRequest request);
|
||||
|
||||
/**
|
||||
* 代办列表分页查询
|
||||
*
|
||||
* @param request 分页查询相关参数
|
||||
* @return 代办列表
|
||||
*/
|
||||
List<PendingMessageResponse> getPendingMessageByAppWorker(PendingMessageFixedTemplatePageRequest request);
|
||||
|
||||
/**
|
||||
* 代办列表分页查询
|
||||
*
|
||||
* @param request 分页查询相关参数
|
||||
* @return 代办列表
|
||||
*/
|
||||
Page<MessageDetailRes> compatiblePageQuery(PendingMessagePageRequest request);
|
||||
|
||||
/**
|
||||
* 代办列表指定item查询
|
||||
*
|
||||
* @param request 查询相关参数
|
||||
* @return 指定的item数据
|
||||
*/
|
||||
PendingMessageResponse query(PendingMessageQueryRequest request);
|
||||
|
||||
/**
|
||||
* 查询代办详情
|
||||
*
|
||||
* @param msgIdentityCode 消息的唯一标识
|
||||
* @param terminalType APP终端类型
|
||||
* @return 代办详情
|
||||
*/
|
||||
Optional<PendingMessageDTO> detail(String msgIdentityCode, TerminalTypeEnum terminalType);
|
||||
|
||||
/**
|
||||
* 发送代办
|
||||
*
|
||||
* @param param 代办核心参数
|
||||
* @return 代办唯一标识
|
||||
*/
|
||||
List<PushPendingMessageDTO> push(PendingMessagePushParam param);
|
||||
|
||||
/**
|
||||
* 完成代办
|
||||
*
|
||||
* @param requestNo 代办唯一标识
|
||||
* @return 成功返回 {@code true} 失败返回 {@code false}
|
||||
*/
|
||||
Boolean complete(String requestNo);
|
||||
|
||||
/**
|
||||
* 完成代办
|
||||
*
|
||||
* @param param 代办唯一标识
|
||||
* @return 成功返回 {@code true} 失败返回 {@code false}
|
||||
*/
|
||||
Boolean completeById(CompletePendingMessageByIdRequest param);
|
||||
|
||||
/**
|
||||
* 撤销代办
|
||||
*
|
||||
* @param requestNo 代办唯一标识
|
||||
* @return 成功返回 {@code true} 失败返回 {@code false}
|
||||
*/
|
||||
Boolean revoke(String requestNo);
|
||||
|
||||
/**
|
||||
* 通过ID撤销代办
|
||||
*
|
||||
* @param msgId 代办唯一标识
|
||||
* @return 成功返回 {@code true} 失败返回 {@code false}
|
||||
*/
|
||||
Boolean revokeByMsgId(String msgId);
|
||||
|
||||
/**
|
||||
* 通过业务编码和模版编码完成代办
|
||||
*
|
||||
* @param param
|
||||
* @return 成功返回 {@code true} 失败返回 {@code false}
|
||||
*/
|
||||
Boolean completeByTemplateCodeBizCode(CompletePendingMessageRequest param);
|
||||
|
||||
/**
|
||||
* 通过业务和子业务编码和模版编码完成代办
|
||||
*
|
||||
* @param param
|
||||
* @return 成功返回 {@code true} 失败返回 {@code false}
|
||||
*/
|
||||
Boolean completeByTemplateCodeSubBizCode(CompletePendingBySubCodeRequest param);
|
||||
|
||||
/**
|
||||
* 通过业务编码和模版编码撤销代办
|
||||
*
|
||||
* @param param
|
||||
* @return 成功返回 {@code true} 失败返回 {@code false}
|
||||
*/
|
||||
Boolean revokeByTemplateCodeBizCode(CompletePendingMessageRequest param);
|
||||
|
||||
/**
|
||||
* 通过ID撤销代办
|
||||
*
|
||||
* @param param
|
||||
* @return 成功返回 {@code true} 失败返回 {@code false}
|
||||
*/
|
||||
Boolean revokeById(RevokePendingMessageByIdRequest param);
|
||||
|
||||
/**
|
||||
* 通过ID编辑代办bizParam
|
||||
*
|
||||
* @param param
|
||||
* @return 成功返回 {@code true} 失败返回 {@code false}
|
||||
*/
|
||||
Boolean updateById(UpdatePendingMessageByIdRequest param);
|
||||
|
||||
/**
|
||||
* 通过BizCode获取最新代办
|
||||
* @param bizCode
|
||||
* @return
|
||||
*/
|
||||
List<PendingMessageSimpleDTO> getLatestByBizCode(PendingMessageByBizCodeRequest bizCode);
|
||||
|
||||
/**
|
||||
* 将待办设置为隐藏
|
||||
*/
|
||||
Boolean setHide(SetHideRequest req);
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@ -5,7 +5,7 @@ import cn.axzo.framework.jackson.utility.JSON;
|
||||
import cn.axzo.msg.center.domain.entity.MessageEntity;
|
||||
import cn.axzo.msg.center.domain.entity.MessageTemplateGroupV3;
|
||||
import cn.axzo.msg.center.inside.notices.config.PendingMessageBizConfig;
|
||||
import cn.axzo.msg.center.message.domain.dto.ModelV3;
|
||||
import cn.axzo.msg.center.message.domain.dto.TemplateModelV3;
|
||||
import cn.axzo.msg.center.message.service.todo.manage.TodoExt;
|
||||
import cn.axzo.msg.center.service.domain.UrlConfig;
|
||||
import cn.axzo.msg.center.service.domain.UrlConfigVisitor;
|
||||
@ -48,15 +48,16 @@ public class ModelV3Parser {
|
||||
|
||||
private final PendingMessageBizConfig cfg;
|
||||
|
||||
public ParsedModelV3 parseModel(ModelV3 model,
|
||||
public ParsedModelV3 parseModel(TemplateModelV3 templateModel,
|
||||
MessageEntity entity,
|
||||
JSONObject bizParam,
|
||||
JSONObject routerParam) {
|
||||
JSONObject routerParam,
|
||||
JSONObject appendRouterParam) {
|
||||
ParsedModelV3 parsedModel = new ParsedModelV3();
|
||||
parsedModel.setTemplate(BeanMapper.copyBean(model, ParsedTemplateV3.class));
|
||||
parsedModel.setGroups(copyGroups(model.getGroups()));
|
||||
parsedModel.setButtons(BeanMapper.copyList(model.getButtons(), ParsedButtonV3.class));
|
||||
UrlParser urlParser = new UrlParser(entity, routerParam);
|
||||
parsedModel.setTemplate(BeanMapper.copyBean(templateModel, ParsedTemplateV3.class));
|
||||
parsedModel.setGroups(copyGroups(templateModel.getGroups()));
|
||||
parsedModel.setButtons(BeanMapper.copyList(templateModel.getButtons(), ParsedButtonV3.class));
|
||||
UrlParser urlParser = new UrlParser(entity, routerParam, appendRouterParam);
|
||||
ParsedModel3Walker.walkDown(parsedModel, new ParsedModel3Visitor() {
|
||||
|
||||
@Override
|
||||
@ -122,7 +123,7 @@ public class ModelV3Parser {
|
||||
JSONObject routerParam) {
|
||||
String json = JSON.toJSONString(urlConfig);
|
||||
UrlConfig copy = JSON.parseObject(json, UrlConfig.class);
|
||||
new UrlParser(entity, routerParam).parseUrlConfig(copy);
|
||||
new UrlParser(entity, routerParam, routerParam).parseUrlConfig(copy);
|
||||
return copy;
|
||||
}
|
||||
|
||||
@ -131,6 +132,7 @@ public class ModelV3Parser {
|
||||
|
||||
final MessageEntity entity;
|
||||
final JSONObject routerParam;
|
||||
final JSONObject appendRouterParam;
|
||||
|
||||
void parseUrlConfig(UrlConfig urlConfig) {
|
||||
UrlConfigWalker.walkDown(urlConfig, this);
|
||||
@ -190,7 +192,7 @@ public class ModelV3Parser {
|
||||
try {
|
||||
String parsedUrl = getDefaultResolver().resolveByMap(url, routerParam);
|
||||
if (cfg.isConcatRouterParams(entity.getTemplateCode()))
|
||||
parsedUrl = appendRouterParam(parsedUrl, routerParam);
|
||||
parsedUrl = appendRouterParam(parsedUrl, appendRouterParam);
|
||||
return parsedUrl;
|
||||
} finally {
|
||||
if (populateWorkspaceId)
|
||||
@ -199,6 +201,8 @@ public class ModelV3Parser {
|
||||
}
|
||||
|
||||
String appendRouterParam(String url, JSONObject routerParam) {
|
||||
if (routerParam == null)
|
||||
return url;
|
||||
Object ctx = routerParam.remove(TodoExt.CTX);
|
||||
try {
|
||||
if (routerParam.isEmpty()) {
|
||||
|
||||
@ -6,7 +6,7 @@ import cn.axzo.msg.center.dal.MessageTemplateV3Dao;
|
||||
import cn.axzo.msg.center.domain.entity.MessageTemplateButtonV3;
|
||||
import cn.axzo.msg.center.domain.entity.MessageTemplateGroupV3;
|
||||
import cn.axzo.msg.center.domain.entity.MessageTemplateV3;
|
||||
import cn.axzo.msg.center.message.domain.dto.ModelV3;
|
||||
import cn.axzo.msg.center.message.domain.dto.TemplateModelV3;
|
||||
import cn.axzo.msg.center.service.enums.StatusEnum;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
@ -32,7 +32,7 @@ public class ModelV3Service {
|
||||
private final MessageTemplateGroupV3Dao messageTemplateGroupV3Dao;
|
||||
private final MessageTemplateButtonV3Dao messageTemplateButtonV3Dao;
|
||||
|
||||
public Optional<ModelV3> findEnabledByCode(String templateCode) {
|
||||
public Optional<TemplateModelV3> findEnabledByCode(String templateCode) {
|
||||
MessageTemplateV3 template = messageTemplateV3Dao.lambdaQuery()
|
||||
.eq(MessageTemplateV3::getCode, templateCode)
|
||||
.eq(MessageTemplateV3::getIsDelete, 0)
|
||||
@ -44,7 +44,7 @@ public class ModelV3Service {
|
||||
return Optional.of(builder.build(template));
|
||||
}
|
||||
|
||||
public List<ModelV3> getByCodes(List<String> templateCodes) {
|
||||
public List<TemplateModelV3> getByCodes(List<String> templateCodes) {
|
||||
if (CollectionUtils.isEmpty(templateCodes))
|
||||
return Collections.emptyList();
|
||||
List<MessageTemplateV3> templates = messageTemplateV3Dao.lambdaQuery()
|
||||
@ -79,12 +79,12 @@ public class ModelV3Service {
|
||||
}
|
||||
}
|
||||
|
||||
ModelV3 build(MessageTemplateV3 template) {
|
||||
ModelV3 model = new ModelV3();
|
||||
model.setTemplate(template);
|
||||
model.setGroups(templateCode2Groups.getOrDefault(template.getCode(), Collections.emptyList()));
|
||||
model.setButtons(templateCode2Buttons.getOrDefault(template.getCode(), Collections.emptyList()));
|
||||
return model;
|
||||
TemplateModelV3 build(MessageTemplateV3 template) {
|
||||
TemplateModelV3 templateModel = new TemplateModelV3();
|
||||
templateModel.setTemplate(template);
|
||||
templateModel.setGroups(templateCode2Groups.getOrDefault(template.getCode(), Collections.emptyList()));
|
||||
templateModel.setButtons(templateCode2Buttons.getOrDefault(template.getCode(), Collections.emptyList()));
|
||||
return templateModel;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -101,7 +101,7 @@ public class TodoRangeQueryService {
|
||||
// 可执行的/抄送我的
|
||||
pageResult = pageQueryTodo(request, templateCodes);
|
||||
List<PendingMessageResponse> messages = todoRespBuilder
|
||||
.convertAdapter2MessageResponse(pageResult.getList(), request.getTerminalType());
|
||||
.convertAdapter2MessageResponse(pageResult.getList(), request);
|
||||
if (request.determineQueryTemplateTerminals())
|
||||
todoTerminalHelper.populateTemplateTerminals(messages);
|
||||
messages.forEach(message -> message.setQueryType(request.getQueryType()));
|
||||
@ -380,7 +380,7 @@ public class TodoRangeQueryService {
|
||||
.in(CollectionUtils.isNotEmpty(request.getTemplateCodes()), Todo::getTemplateCode, request.getTemplateCodes())
|
||||
.last("LIMIT " + request.determineLimit()));
|
||||
List<PendingRecordAdapter> message = todoRespBuilder.buildTodoAdapters(todos);
|
||||
return todoRespBuilder.convertAdapter2MessageResponse(message, request.getTerminalType());
|
||||
return todoRespBuilder.convertAdapter2MessageResponse(message, request);
|
||||
}
|
||||
|
||||
@RequiredArgsConstructor
|
||||
|
||||
@ -7,11 +7,11 @@ import cn.axzo.msg.center.dal.TodoDao;
|
||||
import cn.axzo.msg.center.domain.entity.PendingRecordAdapter;
|
||||
import cn.axzo.msg.center.domain.entity.Todo;
|
||||
import cn.axzo.msg.center.domain.entity.TodoBusiness;
|
||||
import cn.axzo.msg.center.message.domain.dto.MessageTemplateDTO;
|
||||
import cn.axzo.msg.center.message.domain.dto.PendingMessageDTO;
|
||||
import cn.axzo.msg.center.message.service.MessageTemplateNewService;
|
||||
import cn.axzo.msg.center.message.domain.dto.TemplateModelV3;
|
||||
import cn.axzo.msg.center.message.service.impl.PendingMessageNewServiceImpl;
|
||||
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
|
||||
import cn.axzo.msg.center.message.service.impl.v3.ModelV3Service;
|
||||
import cn.axzo.msg.center.service.pending.TerminalProvider;
|
||||
import cn.axzo.msg.center.service.pending.response.PendingMessageResponse;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -38,22 +38,22 @@ class TodoRespBuilder {
|
||||
|
||||
private final TodoBusinessDao todoBusinessDao;
|
||||
private final TodoDao todoDao;
|
||||
private final MessageTemplateNewService messageTemplateNewService;
|
||||
private final PendingMessageNewServiceImpl pendingMessageNewServiceImpl;
|
||||
private final ModelV3Service modelV3Service;
|
||||
|
||||
// batch convert to old model to reuse the code and save some time
|
||||
|
||||
PendingMessageResponse convertAdapter2MessageResponse(
|
||||
PendingRecordAdapter adapter, TerminalTypeEnum terminalType) {
|
||||
PendingRecordAdapter adapter, TerminalProvider terminalProvider) {
|
||||
List<PendingMessageResponse> responses = convertAdapter2MessageResponse(
|
||||
Collections.singletonList(adapter), terminalType);
|
||||
Collections.singletonList(adapter), terminalProvider);
|
||||
return responses.get(0);
|
||||
}
|
||||
|
||||
List<PendingMessageResponse> convertAdapter2MessageResponse(
|
||||
List<PendingRecordAdapter> adapters, TerminalTypeEnum terminalType) {
|
||||
List<PendingRecordAdapter> adapters, TerminalProvider terminalProvider) {
|
||||
return convertAdapter2MessageDTO(adapters).stream()
|
||||
.map(i -> i.toResponse(terminalType))
|
||||
.map(i -> i.toResponse(terminalProvider))
|
||||
.collect(toList());
|
||||
}
|
||||
|
||||
@ -64,10 +64,9 @@ class TodoRespBuilder {
|
||||
.distinct()
|
||||
.collect(toList());
|
||||
// 重新查询模版的收益大于成本
|
||||
List<MessageTemplateDTO> messageTemplates = messageTemplateNewService
|
||||
.listByTemplateCodes(templateCodes);
|
||||
List<TemplateModelV3> templateModels = modelV3Service.getByCodes(templateCodes);
|
||||
return adapters.stream()
|
||||
.map(adapter -> pendingMessageNewServiceImpl.convert(adapter, messageTemplates))
|
||||
.map(adapter -> pendingMessageNewServiceImpl.convertV3(adapter, templateModels))
|
||||
.collect(toList());
|
||||
}
|
||||
|
||||
@ -85,8 +84,8 @@ class TodoRespBuilder {
|
||||
templateCodes.add(business.getTemplateCode());
|
||||
if (todo != null)
|
||||
templateCodes.add(todo.getTemplateCode());
|
||||
List<MessageTemplateDTO> messageTemplates = messageTemplateNewService.listByTemplateCodes(templateCodes);
|
||||
return pendingMessageNewServiceImpl.convert(adapter, messageTemplates);
|
||||
List<TemplateModelV3> templateModels = modelV3Service.getByCodes(templateCodes);
|
||||
return pendingMessageNewServiceImpl.convertV3(adapter, templateModels);
|
||||
}
|
||||
|
||||
// !! build adapters
|
||||
|
||||
@ -9,10 +9,11 @@ import cn.axzo.msg.center.domain.entity.PendingRecordAdapter;
|
||||
import cn.axzo.msg.center.domain.entity.Todo;
|
||||
import cn.axzo.msg.center.domain.entity.TodoBusiness;
|
||||
import cn.axzo.msg.center.inside.notices.config.PendingMessageBizConfig;
|
||||
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
|
||||
import cn.axzo.msg.center.service.enums.TodoQueryType;
|
||||
import cn.axzo.msg.center.service.enums.TodoType;
|
||||
import cn.axzo.msg.center.service.pending.TerminalProvider;
|
||||
import cn.axzo.msg.center.service.pending.request.PendingMessageByBizCodeRequest;
|
||||
import cn.axzo.msg.center.service.pending.request.PendingMessageDetailRequestV3;
|
||||
import cn.axzo.msg.center.service.pending.request.PendingMessageQueryRequest;
|
||||
import cn.axzo.msg.center.service.pending.response.PendingMessageResponse;
|
||||
import cn.axzo.msg.center.service.pending.response.PendingMessageSimpleDTO;
|
||||
@ -63,22 +64,21 @@ public class TodoSimpleQueryService {
|
||||
.one();
|
||||
return todoRespBuilder
|
||||
.convertTodoToMessage(business, todo)
|
||||
.toResponse(req.getTerminalType());
|
||||
.toResponse(req);
|
||||
}
|
||||
|
||||
public PendingMessageResponse getDetail(
|
||||
String identityCode, TerminalTypeEnum terminalType, TodoQueryType queryType) {
|
||||
Todo todo = todoDao.findTodoByCode(identityCode).orElse(null);
|
||||
public PendingMessageResponse getDetail(PendingMessageDetailRequestV3 request) {
|
||||
Todo todo = todoDao.findTodoByCode(request.getMsgIdentityCode()).orElse(null);
|
||||
if (todo == null)
|
||||
return null;
|
||||
if (queryType == TodoQueryType.SEND_BY_ME) {
|
||||
if (request.getQueryType() == TodoQueryType.SEND_BY_ME) {
|
||||
TodoBusiness business = todoBusinessDao.getById(todo.getTodoBusinessId());
|
||||
PendingRecordAdapter adapter = todoRespBuilder.buildBusinessAdapter(business);
|
||||
return todoRespBuilder.convertAdapter2MessageResponse(adapter, terminalType);
|
||||
return todoRespBuilder.convertAdapter2MessageResponse(adapter, request);
|
||||
}
|
||||
return todoRespBuilder
|
||||
.convertTodoToMessage(todo)
|
||||
.toResponse(terminalType);
|
||||
.toResponse(request);
|
||||
}
|
||||
|
||||
public PendingMessageResponse getLatestTodoByBiz(
|
||||
@ -90,7 +90,7 @@ public class TodoSimpleQueryService {
|
||||
return null;
|
||||
return todoRespBuilder
|
||||
.convertTodoToMessage(todo)
|
||||
.toResponse(null);
|
||||
.toResponse((TerminalProvider) null);
|
||||
}
|
||||
|
||||
public List<PendingMessageSimpleDTO> getLatestTodosByBiz(PendingMessageByBizCodeRequest param) {
|
||||
|
||||
@ -141,7 +141,7 @@ public class TodoWorkerQueryService {
|
||||
});
|
||||
}
|
||||
List<PendingRecordAdapter> adapters = todoRespBuilder.buildTodoAdapters(todos);
|
||||
return todoRespBuilder.convertAdapter2MessageResponse(adapters, request.getTerminalType());
|
||||
return todoRespBuilder.convertAdapter2MessageResponse(adapters, request);
|
||||
}
|
||||
|
||||
}
|
||||
@ -3,7 +3,7 @@ package cn.axzo.msg.center.message.service.todo.manage;
|
||||
import cn.axzo.msg.center.common.utils.BizAssertions;
|
||||
import cn.axzo.msg.center.common.utils.PlaceholderResolver;
|
||||
import cn.axzo.msg.center.domain.entity.Todo;
|
||||
import cn.axzo.msg.center.message.domain.dto.ModelV3;
|
||||
import cn.axzo.msg.center.message.domain.dto.TemplateModelV3;
|
||||
import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam;
|
||||
import cn.axzo.msg.center.service.util.JSONUtils;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
@ -21,7 +21,7 @@ public class TodoExt {
|
||||
public static final String CTX = "ctx";
|
||||
|
||||
private final PendingMessagePushParam request;
|
||||
private final ModelV3 model;
|
||||
private final TemplateModelV3 templateModel;
|
||||
|
||||
private JSONObject bizExt;
|
||||
private JSONObject routerExt;
|
||||
@ -48,7 +48,7 @@ public class TodoExt {
|
||||
if (title == null) {
|
||||
JSONObject ext = (JSONObject)parseBizExtParams().clone();
|
||||
ext.put(CTX, ImmutableMap.of("request", request));
|
||||
title = PlaceholderResolver.tryResolve(model.getTemplate().getTitle(), ext);
|
||||
title = PlaceholderResolver.tryResolve(templateModel.getTemplate().getTitle(), ext);
|
||||
}
|
||||
return title;
|
||||
}
|
||||
@ -57,7 +57,7 @@ public class TodoExt {
|
||||
if (content == null) {
|
||||
JSONObject ext = (JSONObject)parseBizExtParams().clone();
|
||||
ext.put(CTX, ImmutableMap.of("request", request));
|
||||
content = PlaceholderResolver.tryResolve(model.getTemplate().getContent(), ext);
|
||||
content = PlaceholderResolver.tryResolve(templateModel.getTemplate().getContent(), ext);
|
||||
}
|
||||
return content;
|
||||
}
|
||||
|
||||
@ -14,7 +14,7 @@ import cn.axzo.msg.center.domain.entity.TodoBusiness;
|
||||
import cn.axzo.msg.center.domain.entity.TodoHandoverMapping;
|
||||
import cn.axzo.msg.center.domain.persistence.BaseEntityExt;
|
||||
import cn.axzo.msg.center.inside.notices.config.PendingMessageBizConfig;
|
||||
import cn.axzo.msg.center.message.domain.dto.ModelV3;
|
||||
import cn.axzo.msg.center.message.domain.dto.TemplateModelV3;
|
||||
import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam;
|
||||
import cn.axzo.msg.center.message.service.impl.v3.ModelV3Service;
|
||||
import cn.axzo.msg.center.message.service.todo.manage.broadcast.TodoBroadcaster;
|
||||
@ -120,7 +120,7 @@ public class TodoManager {
|
||||
*/
|
||||
private List<PushPendingMessageDTO> sendImpl(TodoRequestContext ctx, PendingMessagePushParam request) {
|
||||
// 可能会存在重新查询模版的情况, 成本不高
|
||||
ModelV3 model = modelV3Service.findEnabledByCode(request.getTemplateCode())
|
||||
TemplateModelV3 templateModel = modelV3Service.findEnabledByCode(request.getTemplateCode())
|
||||
.orElseThrow(() -> new ServiceException(
|
||||
String.format("Can't find template. templateCode=%s", request.getTemplateCode())));
|
||||
BizAssertions.assertNotEmpty(request.getExecutor(), "接受者不能为空");
|
||||
@ -130,7 +130,7 @@ public class TodoManager {
|
||||
// 1. 让他们改造, 传bizCode
|
||||
// 2. 待办自动生成bizCode
|
||||
// 3. 如果是系统生成的待办, 那么就不会有问题. 目前生成上有2个模版(进场、出场)都是系统生成的
|
||||
boolean genBizCode = cfg.getGenBizCodeTemplates().contains(model.getTemplateCode());
|
||||
boolean genBizCode = cfg.getGenBizCodeTemplates().contains(templateModel.getTemplateCode());
|
||||
if (genBizCode)
|
||||
request.setBizCode(UUIDUtil.uuidString());
|
||||
else if (StringUtils.isBlank(request.getBizCode()))
|
||||
@ -141,7 +141,7 @@ public class TodoManager {
|
||||
.findByBiz(request.getTemplateCode(), request.getBizCode(), true)
|
||||
.orElse(null);
|
||||
boolean businessCreated = false;
|
||||
TodoExt ext = new TodoExt(request, model);
|
||||
TodoExt ext = new TodoExt(request, templateModel);
|
||||
if (business == null) {
|
||||
business = todoRecordBuilder.buildBusiness(request, ext);
|
||||
business.getRecordExt().setGenBizCode(genBizCode);
|
||||
@ -151,8 +151,8 @@ public class TodoManager {
|
||||
//批量默认为false
|
||||
YesOrNo supportBatchProcess = request.getSupportBatchProcess() == null ? YesOrNo.NO : request.getSupportBatchProcess();
|
||||
//业务待办设置是否批量处理
|
||||
if (model.getTemplateCategory() == MessageCategoryEnum.BIZ_PENDING_MESSAGE
|
||||
&& model.hasPresetButtons())
|
||||
if (templateModel.getTemplateCategory() == MessageCategoryEnum.BIZ_PENDING_MESSAGE
|
||||
&& templateModel.hasPresetButtons())
|
||||
supportBatchProcess = YesOrNo.YES;
|
||||
request.setSupportBatchProcess(supportBatchProcess);
|
||||
List<Todo> todos = todoRecordBuilder.buildTodos(
|
||||
@ -166,8 +166,8 @@ public class TodoManager {
|
||||
todoBroadcaster.fireTodoUpdates("send", todos);
|
||||
// 记录日志
|
||||
// @formatter:off
|
||||
ctx.addLogContent("templateTitle", model.getTemplate().getTitle())
|
||||
.addLogContent("templateContent", model.getTemplate().getContent())
|
||||
ctx.addLogContent("templateTitle", templateModel.getTemplate().getTitle())
|
||||
.addLogContent("templateContent", templateModel.getTemplate().getContent())
|
||||
.addLogContent("title", ext.parseTitle())
|
||||
.addLogContent("content", ext.parseContent())
|
||||
.addLogContent("bizExtParams", ext.parseBizExtParams())
|
||||
@ -178,7 +178,7 @@ public class TodoManager {
|
||||
if (businessCreated)
|
||||
todoLogger.logBusinessUpdated(ctx, business);
|
||||
todoLogger.logTodosUpdated(ctx, todos);
|
||||
applicationContext.publishEvent(new NewTodoEvent(this, model, todos));
|
||||
applicationContext.publishEvent(new NewTodoEvent(this, templateModel, todos));
|
||||
return todos.stream()
|
||||
.map(todo -> new PushPendingMessageDTO(
|
||||
todo.getId(), todo.getIdentityCode(),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package cn.axzo.msg.center.message.service.todo.manage.event;
|
||||
|
||||
import cn.axzo.msg.center.domain.entity.Todo;
|
||||
import cn.axzo.msg.center.message.domain.dto.ModelV3;
|
||||
import cn.axzo.msg.center.message.domain.dto.TemplateModelV3;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import lombok.Getter;
|
||||
import org.springframework.context.ApplicationEvent;
|
||||
@ -14,19 +14,19 @@ import java.util.List;
|
||||
*/
|
||||
@Getter
|
||||
public class NewTodoEvent extends ApplicationEvent {
|
||||
private final ModelV3 model;
|
||||
private final TemplateModelV3 templateModel;
|
||||
private final List<Todo> todos;
|
||||
|
||||
public NewTodoEvent(Object source, ModelV3 model, List<Todo> todos) {
|
||||
public NewTodoEvent(Object source, TemplateModelV3 templateModel, List<Todo> todos) {
|
||||
super(source);
|
||||
this.model = model;
|
||||
this.templateModel = templateModel;
|
||||
this.todos = todos;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
HashMap<String, Object> fields = new HashMap<>();
|
||||
fields.put("model", model);
|
||||
fields.put("model", templateModel);
|
||||
fields.put("todos", todos);
|
||||
return JSON.toJSONString(fields);
|
||||
}
|
||||
|
||||
@ -4,7 +4,7 @@ import cn.axzo.msg.center.dal.TodoBusinessDao;
|
||||
import cn.axzo.msg.center.dal.TodoBusinesses;
|
||||
import cn.axzo.msg.center.domain.entity.Todo;
|
||||
import cn.axzo.msg.center.domain.entity.TodoBusiness;
|
||||
import cn.axzo.msg.center.message.domain.dto.ModelV3;
|
||||
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.manage.TodoExt;
|
||||
import cn.axzo.msg.center.message.service.youmeng.YoumengPush;
|
||||
@ -48,7 +48,7 @@ class TodoPushSender implements ApplicationListener<NewTodoEvent> {
|
||||
log.info("Prepare sending todo push. event={}", event);
|
||||
ArrayList<YoumengPush> pushes = new ArrayList<>();
|
||||
for (Todo todo : event.getTodos()) {
|
||||
Set<PushNavigation> navigations = determineNavigations(event.getModel(), todo);
|
||||
Set<PushNavigation> navigations = determineNavigations(event.getTemplateModel(), todo);
|
||||
if (CollectionUtils.isEmpty(navigations))
|
||||
continue;
|
||||
YoumengPush push = new YoumengPush();
|
||||
@ -60,11 +60,11 @@ class TodoPushSender implements ApplicationListener<NewTodoEvent> {
|
||||
pushes.add(push);
|
||||
}
|
||||
if (CollectionUtils.isNotEmpty(pushes))
|
||||
youmengTemplateClient.asyncSend(event.getModel().getTemplate().getId(), pushes);
|
||||
youmengTemplateClient.asyncSend(event.getTemplateModel().getTemplate().getId(), pushes);
|
||||
}
|
||||
|
||||
private Set<PushNavigation> determineNavigations(ModelV3 model, Todo todo) {
|
||||
CardUrlConfig cardUrlConfig = model.getTemplate().getCardUrlConfig();
|
||||
private Set<PushNavigation> determineNavigations(TemplateModelV3 templateModel, Todo todo) {
|
||||
CardUrlConfig cardUrlConfig = templateModel.getTemplate().getCardUrlConfig();
|
||||
if (cardUrlConfig == null) return Collections.emptySet();
|
||||
UrlConfig urlConfig = cardUrlConfig.getUrlConfig();
|
||||
if (urlConfig == null)
|
||||
|
||||
@ -325,15 +325,15 @@ public class MigrateMessageTemplateV3Job {
|
||||
TerminalTypeEnum.WEB_VIEW,
|
||||
TerminalTypeEnum.MINI_PROGRAM,
|
||||
TerminalTypeEnum.WECHAT_MINI_PROGRAM).ifPresent(router -> {
|
||||
AppUrl appUrl = new AppUrl();
|
||||
appUrl.setUrl(router.getUrl());
|
||||
AppUrl app = new AppUrl();
|
||||
app.setUrl(router.getUrl());
|
||||
if (terminals.contains(PushTerminalEnum.B_ENTERPRISE_APP)) {
|
||||
urlConfig.getOrCreateAppManager().setIos(appUrl);
|
||||
urlConfig.getOrCreateAppManager().setAndroid(appUrl);
|
||||
urlConfig.getOrCreateAppManager().setIos(app);
|
||||
urlConfig.getOrCreateAppManager().setAndroid(app);
|
||||
}
|
||||
if (terminals.contains(PushTerminalEnum.C_WORKER_APP)) {
|
||||
urlConfig.getOrCreateAppWorker().setIos(appUrl);
|
||||
urlConfig.getOrCreateAppWorker().setAndroid(appUrl);
|
||||
urlConfig.getOrCreateAppWorker().setIos(app);
|
||||
urlConfig.getOrCreateAppWorker().setAndroid(app);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
package cn.axzo.msg.center.service.pending.client;
|
||||
|
||||
import cn.axzo.msg.center.api.response.MessageDetailRes;
|
||||
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
|
||||
import cn.axzo.msg.center.service.enums.TodoQueryType;
|
||||
import cn.axzo.msg.center.service.pending.request.CompletePendingBySubCodeRequest;
|
||||
@ -134,16 +133,6 @@ public interface PendingMessageClient {
|
||||
@PostMapping(value = "/pending-message/getPendingMessageByAppWorker", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
CommonResponse<List<PendingMessageResponse>> getPendingMessageByAppWorker(@RequestBody @Valid PendingMessageFixedTemplatePageRequest request);
|
||||
|
||||
/**
|
||||
* 代办列表分页查询
|
||||
*
|
||||
* @param request 分页查询相关参数
|
||||
* @return 代办列表
|
||||
*/
|
||||
@Deprecated
|
||||
@PostMapping(value = "/pending-message/record/compatible/page", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
CommonResponse<Page<MessageDetailRes>> compatiblePageQuery(@RequestBody @Valid PendingMessagePageRequest request);
|
||||
|
||||
/**
|
||||
* 代办列表指定待办的查询
|
||||
*
|
||||
@ -169,7 +158,7 @@ public interface PendingMessageClient {
|
||||
|
||||
@PostMapping(value = "/pending-message/record/detailV3", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
CommonResponse<PendingMessageResponse> detailV3(
|
||||
@RequestBody @Valid PendingMessageDetailRequestV3 requestV3);
|
||||
@RequestBody @Valid PendingMessageDetailRequestV3 request);
|
||||
|
||||
/**
|
||||
* 根据bizCode查询待办详情
|
||||
|
||||
@ -16,9 +16,7 @@ import cn.axzo.msg.center.service.enums.OrganizationTypeEnum;
|
||||
import cn.axzo.msg.center.service.enums.PendingMessageStateEnum;
|
||||
import cn.axzo.msg.center.service.enums.TodoQueryType;
|
||||
import cn.axzo.msg.center.service.enums.TodoType;
|
||||
import cn.axzo.msg.center.service.pending.TerminalProvider;
|
||||
import cn.axzo.msg.center.service.pending.response.v3.ModelV2PropsPopulator;
|
||||
import cn.axzo.msg.center.service.pending.response.v3.ParsedModel3Walker;
|
||||
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedKV;
|
||||
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedModelV3;
|
||||
import cn.axzo.msg.center.service.template.response.MessageDetailStyle;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
@ -256,6 +254,11 @@ public class PendingMessageResponse implements Serializable, TodoButtonProvider
|
||||
*/
|
||||
private ParsedModelV3 modelV3;
|
||||
|
||||
/**
|
||||
* 显示到卡片上的键值对
|
||||
*/
|
||||
private List<ParsedKV> displayOnCardKeyValues;
|
||||
|
||||
/**
|
||||
* 卡片跳转方式. NONE: 无跳转, OPEN_TODO_DETAIL: 打开待办详情, OPEN_CUSTOM_PAGE: 打开指定页面
|
||||
*/
|
||||
@ -266,12 +269,6 @@ public class PendingMessageResponse implements Serializable, TodoButtonProvider
|
||||
*/
|
||||
private CardUrlConfig cardUrlConfig;
|
||||
|
||||
public void populateV2Props(TerminalProvider terminalProvider) {
|
||||
if (modelV3 == null) return;
|
||||
ParsedModel3Walker.walkDown(
|
||||
modelV3, new ModelV2PropsPopulator(this, terminalProvider));
|
||||
}
|
||||
|
||||
public void adjustProposedButtons(boolean forPromoter) {
|
||||
ProposedButtonFilter.adjustProposedButtons(this, forPromoter);
|
||||
}
|
||||
|
||||
@ -7,8 +7,10 @@ import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import static java.util.stream.Collectors.toList;
|
||||
|
||||
@ -20,7 +22,7 @@ import static java.util.stream.Collectors.toList;
|
||||
public class ParsedModelV3 {
|
||||
|
||||
/**
|
||||
* 模板. 对前端来说没用
|
||||
* 前端忽略
|
||||
*/
|
||||
@JsonIgnore @JSONField(serialize = false)
|
||||
private ParsedTemplateV3 template;
|
||||
@ -47,6 +49,16 @@ public class ParsedModelV3 {
|
||||
@JsonIgnore @JSONField(serialize = false)
|
||||
private List<ComponentWorkerGroup> componentWorkerGroups = new ArrayList<>();
|
||||
|
||||
public List<ParsedKV> determineDisplayOnCardKeyValues() {
|
||||
return determineGroups().stream()
|
||||
.filter(group -> group.getGroupType() == GroupType.KV_VALUES)
|
||||
.map(ParsedGroupV3::getGroupInfo)
|
||||
.filter(Objects::nonNull)
|
||||
.map(ParsedGroupInfo::getKeyValues)
|
||||
.flatMap(Collection::stream)
|
||||
.collect(toList());
|
||||
}
|
||||
|
||||
public void addPersonKV(ParsedKV kv) {
|
||||
personKeyValues.add(kv);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user