Merge branch 'feature/REQ-2010' into pre
This commit is contained in:
commit
d470062a8e
@ -173,6 +173,7 @@ public class InsideNoticesApiImpl implements InsideNoticesApi {
|
||||
|
||||
@Override
|
||||
public CommonResponse<Void> updateReadMsgStatus(CmsReadMsgReq req) {
|
||||
log.info("updateReadMsgStatus, req={}", req);
|
||||
messageRecordService.updateReadMsgStatus(req);
|
||||
return CommonResponse.success();
|
||||
}
|
||||
|
||||
@ -0,0 +1,18 @@
|
||||
package cn.axzo.msg.center.inside.notices.utils;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
public class Queries {
|
||||
|
||||
/**
|
||||
* @param domainType help compiler
|
||||
*/
|
||||
public static <T> LambdaQueryWrapper<T> query(
|
||||
@SuppressWarnings({"unused", "help compiler"}) Class<T> domainType) {
|
||||
return new LambdaQueryWrapper<>();
|
||||
}
|
||||
|
||||
}
|
||||
@ -22,6 +22,7 @@ import cn.axzo.msg.center.service.pending.request.PendingMessageStatisticRequest
|
||||
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;
|
||||
@ -68,7 +69,7 @@ public class PendingMessageNewController implements PendingMessageClient {
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResponse<Page<PendingMessageResponse>> pageQuery(PendingMessagePageRequest request) {
|
||||
public CommonResponse<AnalysisPage<PendingMessageResponse>> pageQuery(PendingMessagePageRequest request) {
|
||||
log.info("pageQuery, request={}", request);
|
||||
return CommonResponse.success(pendingMessageNewService.pageQuery(request));
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package cn.axzo.msg.center.message.controller;
|
||||
|
||||
import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam;
|
||||
import cn.axzo.msg.center.message.service.PendingMessageNewService;
|
||||
import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@ -28,4 +29,11 @@ public class PrivateMessageController {
|
||||
@RequestBody @Valid PendingMessagePageRequest request) {
|
||||
return pendingMessageNewService.determinePageQueryTemplateCodes(request);
|
||||
}
|
||||
|
||||
@RequestMapping("sendPendingMessage")
|
||||
public Object sendPendingMessage(
|
||||
@RequestBody @Valid PendingMessagePushParam request) {
|
||||
return pendingMessageNewService.push(request);
|
||||
}
|
||||
|
||||
}
|
||||
@ -17,6 +17,7 @@ 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;
|
||||
@ -67,7 +68,7 @@ public interface PendingMessageNewService {
|
||||
* @param request 分页查询相关参数
|
||||
* @return 代办列表
|
||||
*/
|
||||
Page<PendingMessageResponse> pageQuery(PendingMessagePageRequest request);
|
||||
AnalysisPage<PendingMessageResponse> pageQuery(PendingMessagePageRequest request);
|
||||
|
||||
/**
|
||||
* 遍历待办数据
|
||||
|
||||
@ -26,4 +26,10 @@ public class AnalysisPageFactory {
|
||||
return page;
|
||||
}
|
||||
|
||||
public <T> AnalysisPage<T> createPage() {
|
||||
AnalysisPage<T> page = new AnalysisPage<>();
|
||||
page.setEnableAnalysis(enableAnalysisProfiles.contains(profile));
|
||||
return page;
|
||||
}
|
||||
|
||||
}
|
||||
@ -29,6 +29,7 @@ import cn.axzo.msg.center.domain.dto.PendingCalendarCodeDTO;
|
||||
import cn.axzo.msg.center.domain.entity.PendingMessageRecord;
|
||||
import cn.axzo.msg.center.domain.enums.NativeTypeEnum;
|
||||
import cn.axzo.msg.center.inside.notices.config.PendingCalendarCodeConfig;
|
||||
import cn.axzo.msg.center.inside.notices.utils.Queries;
|
||||
import cn.axzo.msg.center.message.domain.dto.GroupTreeNodePathDTO;
|
||||
import cn.axzo.msg.center.message.domain.dto.MessageTemplateDTO;
|
||||
import cn.axzo.msg.center.message.domain.dto.MessageTemplateRouterDTO;
|
||||
@ -178,7 +179,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<PendingMessageResponse> pageQuery(PendingMessagePageRequest request) {
|
||||
public AnalysisPage<PendingMessageResponse> pageQuery(PendingMessagePageRequest request) {
|
||||
PersonDTO operator = PersonDTO.from(request.getPersonId(), request.getIdentityId(), request.getIdentityType());
|
||||
PendingMessageStateEnum pendingMessageState = fetchPendingMessageState(request.getRoleCategory(), request.getMsgState());
|
||||
BizFinalStateEnum bizFinalState = fetchBizFinalState(request.getRoleCategory(), request.getBizFinalState());
|
||||
@ -189,8 +190,9 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
||||
.eq(PendingMessageRecord::getIsDelete, IsDeletedEnum.NO.getCode())
|
||||
.eq(Objects.nonNull(request.getWorkspaceId()), PendingMessageRecord::getOrgId, request.getWorkspaceId());
|
||||
// REQ-1507期发起人不通过ouId过滤, 只有执行人对ouId进行过滤
|
||||
List<Long> determinedOuIds = Collections.emptyList();
|
||||
if (request.determineRoleCategory() == PendingMessageRoleCategoryEnum.EXECUTOR) {
|
||||
appendExecutorOuIdExpr(query, request.getOuId());
|
||||
determinedOuIds = appendExecutorOuIdExpr(query, request.getOuId());
|
||||
}
|
||||
if (StringUtils.isNotBlank(request.getTitle())) {
|
||||
query.and(v -> v.like(PendingMessageRecord::getTitle, request.getTitle())
|
||||
@ -204,7 +206,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
||||
if (CollectionUtils.isEmpty(templateCodes)) {
|
||||
// 如果该分类未关联任何模板,直接返回空集合
|
||||
log.info("there is not any template matched... appTerminal:[{}]", request.getAppTerminalType());
|
||||
return PageHelperUtil.emptyPage(request.getPage(), request.getPageSize());
|
||||
return AnalysisPage.emptyPage(request.getPage(), request.getPageSize());
|
||||
}
|
||||
query.in(PendingMessageRecord::getTemplateCode, templateCodes);
|
||||
// query.groupBy(PendingMessageRecord::getTemplateCode,PendingMessageRecord::getBizCode);
|
||||
@ -220,10 +222,21 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
||||
.collect(Collectors.toList());
|
||||
AnalysisPage<PendingMessageResponse> resultPage = analysisPageFactory
|
||||
.createPage(request.getPage(), request.getPageSize(), page.getTotal(), responseRecords);
|
||||
resultPage.addAnalysis("ouId=" + request.getOuId());
|
||||
resultPage.addAnalysis("templateCodes=" + templateCodes);
|
||||
resultPage.addAnalysis("personId=" + request.getPersonId());
|
||||
resultPage.addAnalysis("operator=" + operator);
|
||||
if (resultPage.isEnableAnalysis() && StringUtils.isNotBlank(request.getFetchTemplateCode())) {
|
||||
List<PendingMessageRecord> templateMessages = pendingMessageRecordMapper.selectList(
|
||||
Queries.query(PendingMessageRecord.class)
|
||||
.eq(PendingMessageRecord::getTemplateCode, request.getFetchTemplateCode())
|
||||
.eq(PendingMessageRecord::getIsDelete, TableIsDeleteEnum.NORMAL.value)
|
||||
.orderByDesc(PendingMessageRecord::getId)
|
||||
.last("LIMIT " + request.getFetchLimit()));
|
||||
resultPage.addAnalysis("fetchedTemplateMessages", templateMessages);
|
||||
}
|
||||
resultPage.addAnalysis("templateCodes", templateCodes);
|
||||
resultPage.addAnalysis("personId", request.getPersonId());
|
||||
resultPage.addAnalysis("operator", operator);
|
||||
resultPage.addAnalysis("ouId", request.getOuId());
|
||||
resultPage.addAnalysis("determinedOuIds", determinedOuIds);
|
||||
resultPage.addAnalysis("request", request);
|
||||
return resultPage;
|
||||
}
|
||||
|
||||
@ -855,15 +868,16 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
||||
});
|
||||
}
|
||||
|
||||
private void appendExecutorOuIdExpr(LambdaQueryChainWrapper<PendingMessageRecord> query, Long ouId) {
|
||||
private List<Long> appendExecutorOuIdExpr(LambdaQueryChainWrapper<PendingMessageRecord> query, Long ouId) {
|
||||
List<Long> ouIds = determineOuIds(ouId);
|
||||
if (ouIds.isEmpty()) return;
|
||||
if (ouIds.isEmpty()) return Collections.emptyList();
|
||||
query.and(expr -> expr
|
||||
// 查询ouId下面所有的平台班组id当成ouId
|
||||
.in(!ouIds.isEmpty(), PendingMessageRecord::getOuId, ouIds)
|
||||
.or()
|
||||
// 或者 ouId = 0 的数据
|
||||
.eq(PendingMessageRecord::getOuId, 0));
|
||||
return ouIds;
|
||||
}
|
||||
|
||||
private List<Long> determineOuIds(Long ouId) {
|
||||
|
||||
@ -16,6 +16,7 @@ import cn.axzo.msg.center.service.pending.request.PendingMessageStatisticRequest
|
||||
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;
|
||||
@ -71,7 +72,7 @@ public interface PendingMessageClient {
|
||||
* @return 代办列表
|
||||
*/
|
||||
@PostMapping(value = "/pending-message/record/page", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
CommonResponse<Page<PendingMessageResponse>> pageQuery(@RequestBody @Valid PendingMessagePageRequest request);
|
||||
CommonResponse<AnalysisPage<PendingMessageResponse>> pageQuery(@RequestBody @Valid PendingMessagePageRequest request);
|
||||
|
||||
/**
|
||||
* 指定几种代办模型列表分页查询
|
||||
|
||||
@ -105,6 +105,10 @@ public class PendingMessagePageRequest extends PageRequest implements Serializab
|
||||
*/
|
||||
private Collection<QueryOrderByDTO> orderFields;
|
||||
|
||||
// !! 用于排查问题
|
||||
private String fetchTemplateCode;
|
||||
private int fetchLimit = 5;
|
||||
|
||||
public PendingMessageRoleCategoryEnum determineRoleCategory() {
|
||||
return roleCategory != null ? roleCategory : PendingMessageRoleCategoryEnum.EXECUTOR;
|
||||
}
|
||||
|
||||
@ -5,16 +5,17 @@ import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
public class AnalysisPage<T> extends Page<T> {
|
||||
|
||||
private List<String> analysis = new ArrayList<>();
|
||||
private TreeMap<String, Object> analysis = new TreeMap<>();
|
||||
private boolean enableAnalysis;
|
||||
|
||||
public AnalysisPage() {
|
||||
@ -24,13 +25,50 @@ public class AnalysisPage<T> extends Page<T> {
|
||||
super(pageNum, pageSize, totalElements, list);
|
||||
}
|
||||
|
||||
public static <T> Page<T> toPage(Long pageNum, Long pageSize, Long totalCount, List<T> list) {
|
||||
public static <T> AnalysisPage<T> toPage(Long pageNum, Long pageSize, Long totalCount, List<T> list) {
|
||||
return new AnalysisPage<>(pageNum, pageSize, totalCount, list);
|
||||
}
|
||||
|
||||
public void addAnalysis(String something) {
|
||||
public static <T> AnalysisPage<T> emptyPage(Long pageNum, Long pageSize) {
|
||||
return toPage(pageNum, pageSize, 0L, Collections.emptyList());
|
||||
}
|
||||
|
||||
public AnalysisPage<T> copy() {
|
||||
AnalysisPage<T> copy = new AnalysisPage<>();
|
||||
copy.setPageNum(getPageNum());
|
||||
copy.setPageSize(getPageSize());
|
||||
copy.setTotalElements(getTotalElements());
|
||||
copy.setList(new ArrayList<>(getList()));
|
||||
copy.setEnableAnalysis(enableAnalysis);
|
||||
copy.addAnalysis(analysis);
|
||||
return copy;
|
||||
}
|
||||
|
||||
public void addAnalysis(Map<String, Object> analysis) {
|
||||
if (enableAnalysis) {
|
||||
analysis.add(something);
|
||||
this.analysis.putAll(analysis);
|
||||
}
|
||||
}
|
||||
|
||||
public void addAnalysis(String key, Object value) {
|
||||
if (enableAnalysis) {
|
||||
analysis.put(key, value);
|
||||
}
|
||||
}
|
||||
|
||||
public TreeMap<String, Object> getAnalysis() {
|
||||
return analysis;
|
||||
}
|
||||
|
||||
public void setAnalysis(TreeMap<String, Object> analysis) {
|
||||
this.analysis = analysis;
|
||||
}
|
||||
|
||||
public boolean isEnableAnalysis() {
|
||||
return enableAnalysis;
|
||||
}
|
||||
|
||||
public void setEnableAnalysis(boolean enableAnalysis) {
|
||||
this.enableAnalysis = enableAnalysis;
|
||||
}
|
||||
}
|
||||
@ -61,10 +61,6 @@ public class MessageRecordDao extends
|
||||
public void readMsg(InsideCmsReadMsgReq req,
|
||||
Long personId, Long identityId) {
|
||||
lambdaUpdate().set(MessageRecord::getState, MsgStateEnum.HAVE_READ)
|
||||
.and(i -> i.and(
|
||||
a -> a.eq(MessageRecord::getPersonId, personId).eq(MessageRecord::getReceiveType,
|
||||
ReceiveTypeEnum.NOT_IDENTITY)).or()
|
||||
.eq(MessageRecord::getToId, identityId))
|
||||
.eq(MessageRecord::getIsDelete, 0L)
|
||||
.eq(req.getMsgId() != -1L, MessageRecord::getId, req.getMsgId())
|
||||
.eq(MessageRecord::getType, MsgTypeEnum.GENERAL_MESSAGE)
|
||||
@ -72,9 +68,9 @@ public class MessageRecordDao extends
|
||||
}
|
||||
|
||||
public void readAllMsg(InsideCmsReadMsgReq req, Long personId, Long identityId) {
|
||||
List<MessageRecord> list = this.lambdaQuery().and(i -> i.and(
|
||||
a -> a.eq(MessageRecord::getPersonId, personId).eq(MessageRecord::getReceiveType,
|
||||
ReceiveTypeEnum.NOT_IDENTITY)).or()
|
||||
List<MessageRecord> list = this.lambdaQuery()
|
||||
.and(nested -> nested.eq(MessageRecord::getPersonId, personId)
|
||||
.or()
|
||||
.eq(MessageRecord::getToId, identityId))
|
||||
.eq(MessageRecord::getIsDelete, 0L)
|
||||
.eq(MessageRecord::getType, MsgTypeEnum.GENERAL_MESSAGE)
|
||||
|
||||
@ -0,0 +1,35 @@
|
||||
package cn.axzo.msg.center.inside.notices.service;
|
||||
|
||||
import cn.axzo.msg.center.MsgCenterApplication;
|
||||
import cn.axzo.msg.center.api.enums.BizTypeEnum;
|
||||
import cn.axzo.msg.center.api.request.CmsReadMsgReq;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.annotation.Commit;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@SpringBootTest(classes = MsgCenterApplication.class)
|
||||
@RequiredArgsConstructor(onConstructor_ = @Autowired)
|
||||
class MessageRecordServiceTest {
|
||||
|
||||
private final MessageRecordService messageRecordService;
|
||||
|
||||
@Test
|
||||
@Commit
|
||||
void foo() {
|
||||
// CmsReadMsgReq(msgId=1790536, personId=9000399060, identityId=2004201, bizTypeEnum=CONSTRUCTION)
|
||||
CmsReadMsgReq req = new CmsReadMsgReq();
|
||||
req.setMsgId(1790536L);
|
||||
req.setPersonId(9000399060L);
|
||||
req.setPersonId(2004201L);
|
||||
req.setBizTypeEnum(BizTypeEnum.CONSTRUCTION);
|
||||
messageRecordService.updateReadMsgStatus(req);
|
||||
}
|
||||
|
||||
}
|
||||
@ -18,9 +18,58 @@ class PendingMessageNewServiceTest {
|
||||
private final PendingMessageNewService pendingMessageNewService;
|
||||
|
||||
@Test
|
||||
@Commit
|
||||
void foo() {
|
||||
String str = "{\"bizCategory\":\"OTHER\",\"bizCode\":\"200000700321808\",\"bizExtParams\":\"{\\\"teamLeaderName\\\":\\\"袁均清\\\"}\",\"executor\":[{\"id\":16562,\"identity\":{\"id\":0,\"type\":\"NOT_SUPPORT\",\"valid\":true},\"name\":\"马元猛\",\"valid\":true},{\"id\":16563,\"identity\":{\"id\":0,\"type\":\"NOT_SUPPORT\",\"valid\":true},\"name\":\"辛宁\",\"valid\":true}],\"orgType\":\"PROJECT\",\"ouId\":6066,\"promoter\":{\"id\":16444,\"identity\":{\"id\":2004889,\"type\":\"PRACTITIONER\",\"valid\":true},\"name\":\"袁均清\",\"valid\":true},\"routerParams\":\"{\\\"acceptanceNo\\\":\\\"700013411\\\",\\\"status\\\":\\\"1\\\"}\",\"templateCode\":\"52ae3e8ec48242e485e9389202e102ce\",\"workspaceId\":375}";
|
||||
String str = "{\n" +
|
||||
" \"bizCategory\": \"OTHER\",\n" +
|
||||
" \"bizCode\": \"200000500324319\",\n" +
|
||||
" \"bizExtParams\": \"{\\\"teamLeaderName\\\":\\\"罗顺江\\\"}\",\n" +
|
||||
" \"executor\": [\n" +
|
||||
" {\n" +
|
||||
" \"id\": 22373,\n" +
|
||||
" \"identity\": {\n" +
|
||||
" \"id\": 0,\n" +
|
||||
" \"type\": \"NOT_SUPPORT\",\n" +
|
||||
" \"valid\": true\n" +
|
||||
" },\n" +
|
||||
" \"name\": \"阮新宇\",\n" +
|
||||
" \"valid\": true\n" +
|
||||
" },\n" +
|
||||
" {\n" +
|
||||
" \"id\": 3549,\n" +
|
||||
" \"identity\": {\n" +
|
||||
" \"id\": 0,\n" +
|
||||
" \"type\": \"NOT_SUPPORT\",\n" +
|
||||
" \"valid\": true\n" +
|
||||
" },\n" +
|
||||
" \"name\": \"张苏秦\",\n" +
|
||||
" \"valid\": true\n" +
|
||||
" },\n" +
|
||||
" {\n" +
|
||||
" \"id\": 3470,\n" +
|
||||
" \"identity\": {\n" +
|
||||
" \"id\": 0,\n" +
|
||||
" \"type\": \"NOT_SUPPORT\",\n" +
|
||||
" \"valid\": true\n" +
|
||||
" },\n" +
|
||||
" \"name\": \"皮俊\",\n" +
|
||||
" \"valid\": true\n" +
|
||||
" }\n" +
|
||||
" ],\n" +
|
||||
" \"orgType\": \"PROJECT\",\n" +
|
||||
" \"ouId\": 5425,\n" +
|
||||
" \"promoter\": {\n" +
|
||||
" \"id\": 59242,\n" +
|
||||
" \"identity\": {\n" +
|
||||
" \"type\": \"NOT_SUPPORT\",\n" +
|
||||
" \"valid\": false\n" +
|
||||
" },\n" +
|
||||
" \"name\": \"罗顺江\",\n" +
|
||||
" \"valid\": false\n" +
|
||||
" },\n" +
|
||||
" \"routerParams\": \"{\\\"ouId\\\":\\\"5425\\\",\\\"acceptanceNo\\\":\\\"500015004\\\",\\\"status\\\":\\\"5\\\",\\\"workspaceId\\\":\\\"272\\\"}\",\n" +
|
||||
" \"templateCode\": \"52ae3e8ec48242e485e9389202e102ce\",\n" +
|
||||
" \"workspaceId\": 272\n" +
|
||||
"}";
|
||||
PendingMessagePushParam param = JSON.parseObject(str, PendingMessagePushParam.class);
|
||||
pendingMessageNewService.push(param);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user