diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/InsideNoticesApiImpl.java b/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/InsideNoticesApiImpl.java index d648f05e..96e57f42 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/InsideNoticesApiImpl.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/InsideNoticesApiImpl.java @@ -173,6 +173,7 @@ public class InsideNoticesApiImpl implements InsideNoticesApi { @Override public CommonResponse updateReadMsgStatus(CmsReadMsgReq req) { + log.info("updateReadMsgStatus, req={}", req); messageRecordService.updateReadMsgStatus(req); return CommonResponse.success(); } diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/utils/Queries.java b/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/utils/Queries.java new file mode 100644 index 00000000..e48ec5c2 --- /dev/null +++ b/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/utils/Queries.java @@ -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 LambdaQueryWrapper query( + @SuppressWarnings({"unused", "help compiler"}) Class domainType) { + return new LambdaQueryWrapper<>(); + } + +} \ No newline at end of file diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PendingMessageNewController.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PendingMessageNewController.java index c92d1a9b..9b669cee 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PendingMessageNewController.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PendingMessageNewController.java @@ -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> pageQuery(PendingMessagePageRequest request) { + public CommonResponse> pageQuery(PendingMessagePageRequest request) { log.info("pageQuery, request={}", request); return CommonResponse.success(pendingMessageNewService.pageQuery(request)); } diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PrivateMessageController.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PrivateMessageController.java index 5f6dfaf9..0fe23a50 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PrivateMessageController.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PrivateMessageController.java @@ -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); + } + } \ No newline at end of file diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/PendingMessageNewService.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/PendingMessageNewService.java index f33fb9a2..ec80ff39 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/PendingMessageNewService.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/PendingMessageNewService.java @@ -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 pageQuery(PendingMessagePageRequest request); + AnalysisPage pageQuery(PendingMessagePageRequest request); /** * 遍历待办数据 diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/AnalysisPageFactory.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/AnalysisPageFactory.java index 774110a1..cef6215e 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/AnalysisPageFactory.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/AnalysisPageFactory.java @@ -26,4 +26,10 @@ public class AnalysisPageFactory { return page; } + public AnalysisPage createPage() { + AnalysisPage page = new AnalysisPage<>(); + page.setEnableAnalysis(enableAnalysisProfiles.contains(profile)); + return page; + } + } \ No newline at end of file diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/PendingMessageNewServiceImpl.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/PendingMessageNewServiceImpl.java index bc4da553..0565df41 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/PendingMessageNewServiceImpl.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/PendingMessageNewServiceImpl.java @@ -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 pageQuery(PendingMessagePageRequest request) { + public AnalysisPage 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 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 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 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 query, Long ouId) { + private List appendExecutorOuIdExpr(LambdaQueryChainWrapper query, Long ouId) { List 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 determineOuIds(Long ouId) { diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/client/PendingMessageClient.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/client/PendingMessageClient.java index ca2258d1..26f3aa46 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/client/PendingMessageClient.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/client/PendingMessageClient.java @@ -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> pageQuery(@RequestBody @Valid PendingMessagePageRequest request); + CommonResponse> pageQuery(@RequestBody @Valid PendingMessagePageRequest request); /** * 指定几种代办模型列表分页查询 diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessagePageRequest.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessagePageRequest.java index a3438dfc..747d4fb8 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessagePageRequest.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessagePageRequest.java @@ -105,6 +105,10 @@ public class PendingMessagePageRequest extends PageRequest implements Serializab */ private Collection orderFields; + // !! 用于排查问题 + private String fetchTemplateCode; + private int fetchLimit = 5; + public PendingMessageRoleCategoryEnum determineRoleCategory() { return roleCategory != null ? roleCategory : PendingMessageRoleCategoryEnum.EXECUTOR; } diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/AnalysisPage.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/AnalysisPage.java index 16b5a35e..bd7fdaff 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/AnalysisPage.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/AnalysisPage.java @@ -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 extends Page { - private List analysis = new ArrayList<>(); + private TreeMap analysis = new TreeMap<>(); private boolean enableAnalysis; public AnalysisPage() { @@ -24,13 +25,50 @@ public class AnalysisPage extends Page { super(pageNum, pageSize, totalElements, list); } - public static Page toPage(Long pageNum, Long pageSize, Long totalCount, List list) { + public static AnalysisPage toPage(Long pageNum, Long pageSize, Long totalCount, List list) { return new AnalysisPage<>(pageNum, pageSize, totalCount, list); } - public void addAnalysis(String something) { + public static AnalysisPage emptyPage(Long pageNum, Long pageSize) { + return toPage(pageNum, pageSize, 0L, Collections.emptyList()); + } + + public AnalysisPage copy() { + AnalysisPage 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 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 getAnalysis() { + return analysis; + } + + public void setAnalysis(TreeMap analysis) { + this.analysis = analysis; + } + + public boolean isEnableAnalysis() { + return enableAnalysis; + } + + public void setEnableAnalysis(boolean enableAnalysis) { + this.enableAnalysis = enableAnalysis; + } } \ No newline at end of file diff --git a/msg-center-dal/src/main/java/cn/axzo/msg/center/dal/MessageRecordDao.java b/msg-center-dal/src/main/java/cn/axzo/msg/center/dal/MessageRecordDao.java index 6035a51f..2bca19b8 100644 --- a/msg-center-dal/src/main/java/cn/axzo/msg/center/dal/MessageRecordDao.java +++ b/msg-center-dal/src/main/java/cn/axzo/msg/center/dal/MessageRecordDao.java @@ -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 list = this.lambdaQuery().and(i -> i.and( - a -> a.eq(MessageRecord::getPersonId, personId).eq(MessageRecord::getReceiveType, - ReceiveTypeEnum.NOT_IDENTITY)).or() + List 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) diff --git a/start/src/test/java/cn/axzo/msg/center/inside/notices/service/MessageRecordServiceTest.java b/start/src/test/java/cn/axzo/msg/center/inside/notices/service/MessageRecordServiceTest.java new file mode 100644 index 00000000..52e77b60 --- /dev/null +++ b/start/src/test/java/cn/axzo/msg/center/inside/notices/service/MessageRecordServiceTest.java @@ -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); + } + +} \ No newline at end of file diff --git a/start/src/test/java/cn/axzo/msg/center/message/service/PendingMessageNewServiceTest.java b/start/src/test/java/cn/axzo/msg/center/message/service/PendingMessageNewServiceTest.java index cf2dcee8..aa228638 100644 --- a/start/src/test/java/cn/axzo/msg/center/message/service/PendingMessageNewServiceTest.java +++ b/start/src/test/java/cn/axzo/msg/center/message/service/PendingMessageNewServiceTest.java @@ -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); }