diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/MessageRecordService.java b/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/MessageRecordService.java index 65fe34e9..17349a6b 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/MessageRecordService.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/MessageRecordService.java @@ -77,4 +77,9 @@ public interface MessageRecordService { * @return 成功删除返回 {@code true},否则返回 {@code false} */ boolean deleteMessageRecords(MessageRecordDeleteReq request); + Integer unReadStatistics(MessageStatisticsReq request); + + IPage queryMessageRecordList(MessageRecordReq request); + + void updateStateReceive(List msgIdList); } diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/InsideMessageRecordApiImpl.java b/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/InsideMessageRecordApiImpl.java index 6b200986..c2f2bc35 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/InsideMessageRecordApiImpl.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/InsideMessageRecordApiImpl.java @@ -2,20 +2,28 @@ package cn.axzo.msg.center.inside.notices.service.impl; import cn.axzo.core.domain.PageResult; import cn.axzo.msg.center.api.InsideMessageRecordApi; -import cn.axzo.msg.center.api.request.*; +import cn.axzo.msg.center.api.request.CmsMsgListReq; +import cn.axzo.msg.center.api.request.CmsMsgQueryReq; +import cn.axzo.msg.center.api.request.MessageRecordReq; +import cn.axzo.msg.center.api.request.MessageStatisticsReq; +import cn.axzo.msg.center.api.request.QueryMessageRecordReq; +import cn.axzo.msg.center.api.request.UpdateReadReq; import cn.axzo.msg.center.api.response.MessageNewRes; import cn.axzo.msg.center.api.response.MessageRecordRes; import cn.axzo.msg.center.common.exception.ServiceException; import cn.axzo.msg.center.common.utils.BeanConvertUtils; +import cn.axzo.msg.center.dal.MessageRecordDao; import cn.axzo.msg.center.domain.dto.UpdateReadDTO; import cn.axzo.msg.center.inside.notices.service.MessageRecordService; import cn.azxo.framework.common.model.CommonResponse; +import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import java.util.List; @Slf4j @RestController @@ -24,6 +32,9 @@ public class InsideMessageRecordApiImpl implements InsideMessageRecordApi { @Resource private MessageRecordService messageRecordService; + @Resource + private MessageRecordDao messageRecordDao; + @Override public CommonResponse> listMsgInfo4Trade(CmsMsgListReq req) { CmsMsgQueryReq request=new CmsMsgQueryReq(); @@ -34,15 +45,18 @@ public class InsideMessageRecordApiImpl implements InsideMessageRecordApi { } @Override - public CommonResponse> queryMessageRecordList(MessageRecordReq request) { - - return null; + public CommonResponse> queryMessageRecordList(MessageRecordReq request) { + IPage queryPage = messageRecordService.queryMessageRecordList(request); + PageResult result = new PageResult<>(queryPage.getRecords(), queryPage.getTotal()); + return CommonResponse.success(result); } @Override public CommonResponse changeHasRead(UpdateReadReq request) { - if(request.getToId() == null && request.getFromId() == null){ - throw new ServiceException("发送人id和接收人id不能同时为空"); + if(request.getToId() == null + && request.getFromId() == null + && CollectionUtil.isEmpty(request.getMsgIdList())){ + throw new ServiceException("发送人id、接收人id、消息ID列表不能同时为空"); } UpdateReadDTO updateReadDTO = BeanConvertUtils.copyBean(request, UpdateReadDTO.class); Boolean updateSuccess = messageRecordService.changeHasRead(updateReadDTO); @@ -50,21 +64,20 @@ public class InsideMessageRecordApiImpl implements InsideMessageRecordApi { } @Override - public CommonResponse> queryUnReadList(QueryMessageRecordReq request) { + public CommonResponse> queryUnReadList(QueryMessageRecordReq request) { IPage result=messageRecordService.queryUnReadList(request); - return CommonResponse.success(result); + return CommonResponse.success(new PageResult<>(result.getRecords(), result.getTotal())); } @Override - public CommonResponse> querySent(QueryMessageRecordReq request) { + public CommonResponse> querySent(QueryMessageRecordReq request) { IPage result=messageRecordService.querySent(request); - return CommonResponse.success(result); + return CommonResponse.success(new PageResult<>(result.getRecords(), result.getTotal())); } @Override public CommonResponse unReadStatistics(MessageStatisticsReq request) { - - return null; + return CommonResponse.success(messageRecordService.unReadStatistics(request)); } @Override @@ -72,4 +85,9 @@ public class InsideMessageRecordApiImpl implements InsideMessageRecordApi { return CommonResponse.success(messageRecordService.deleteMessageRecords(request)); } + @Override + public CommonResponse markReceived(List msgIdList) { + messageRecordService.updateStateReceive(msgIdList); + return CommonResponse.success(); + } } diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/MessageRecordServiceImpl.java b/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/MessageRecordServiceImpl.java index 807fd5a6..28328c75 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/MessageRecordServiceImpl.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/MessageRecordServiceImpl.java @@ -32,19 +32,24 @@ import cn.azxo.framework.common.utils.LogUtil; import cn.azxo.framework.common.utils.LogUtil.ErrorLevel; import cn.azxo.framework.common.utils.LogUtil.ErrorType; import cn.azxo.framework.common.utils.StringUtils; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.map.MapUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.text.StrSubstitutor; +import org.apache.logging.log4j.util.Strings; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import javax.annotation.Resource; import java.util.*; @@ -569,11 +574,12 @@ public class MessageRecordServiceImpl implements MessageRecordService { @Override public IPage queryUnReadList(QueryMessageRecordReq request) { + IPage resultList=new MyPage<>(); + IPage newResDTOIPage = messageRecordDao.queryUnReadList(request); if(newResDTOIPage == null || newResDTOIPage.getTotal()==0){ - return null; + return resultList; } - IPage resultList=new MyPage<>(); List messageList=new ArrayList<>(); for (MessageNewResDTO record : newResDTOIPage.getRecords()) { MessageRecordRes item = BeanConvertUtils.copyBean(record, MessageRecordRes.class); @@ -610,4 +616,49 @@ public class MessageRecordServiceImpl implements MessageRecordService { .eq(MessageRecord::getIsDelete, YesNoEnum.NO.getCode()) .update(); } + + @Override + public Integer unReadStatistics(MessageStatisticsReq request) { + log.info("statistics reqeust:{},condition:{}", JSON.toJSONString(request), + Objects.nonNull(request.getMsgType())); + return messageRecordDao.lambdaQuery() + .eq(Objects.nonNull(request.getFromId()), MessageRecord::getFromId, request.getFromId()) + .eq(Objects.nonNull(request.getModuleId()), MessageRecord::getModuleId, request.getFromId()) + .eq(Objects.nonNull(request.getMsgType()), MessageRecord::getType, MsgTypeEnum.valueOf(request.getMsgType())) + .eq(Objects.nonNull(request.getToId()), MessageRecord::getToId, request.getToId()) + .eq(Objects.nonNull(request.getTenantId()), MessageRecord::getTenantId, request.getTenantId()) + .in(MessageRecord::getState, MsgStateEnum.HAS_BEEN_SENT, MsgStateEnum.RECEIVED) + .count(); + } + + @Override + public IPage queryMessageRecordList(MessageRecordReq request) { + + IPage result = messageRecordDao.lambdaQuery() + .eq(Objects.nonNull(request.getMsgType()), MessageRecord::getType, MsgTypeEnum.valueOf(request.getMsgType())) + .eq(Objects.nonNull(request.getFromId()), MessageRecord::getFromId, request.getFromId()) + .eq(Objects.nonNull(request.getTenantId()), MessageRecord::getTenantId, request.getTenantId()) + .like(Strings.isNotBlank(request.getSearchContent()), MessageRecord::getContent, request.getSearchContent()) + .eq(Objects.nonNull(request.getToId()), MessageRecord::getToId, request.getToId()) + .in(Objects.nonNull(request.getMsgStatus()), MessageRecord::getState, request.getMsgStatus()) + .eq(Objects.nonNull(request.getModuleId()), MessageRecord::getModuleId, request.getModuleId()) + .orderByDesc(MessageRecord::getCreateAt) + .page(request.toPage()); + + return result.convert(r -> { + MessageRecordRes messageRecordRes = BeanConvertUtils.copyBean(r, MessageRecordRes.class); + messageRecordRes.setMsgId(r.getId()); + return messageRecordRes; + }); + } + + @Override + public void updateStateReceive(List msgIdList) { + if (CollectionUtil.isEmpty(msgIdList)) { + return; + } + messageRecordDao.lambdaUpdate() + .set(MessageRecord::getState, MsgStateEnum.RECEIVED) + .in(MessageRecord::getId, msgIdList).update(); + } } diff --git a/integration-test/src/test/resources/message.http b/integration-test/src/test/resources/message.http index d65a1abd..cd562347 100644 --- a/integration-test/src/test/resources/message.http +++ b/integration-test/src/test/resources/message.http @@ -29,6 +29,18 @@ Content-Type: application/json > reponse-check.js +### +POST {{host}}/msg/record/unread/statistics +Accept: application/json +Content-Type: application/json + +{ + "msgType": 1 +} + +> reponse-check.js + + ### POST {{host}}/webApi/wx/message/list Accept: application/json @@ -44,3 +56,18 @@ Content-Type: application/json > reponse-check.js +### +POST {{host}}/msg/record/list +Accept: application/json +Content-Type: application/json + +{ + "msgType": 1, + "toId": 1, + "msgRouteType": 1, + "page": 1, + "pageSize": 10 +} + +> reponse-check.js + diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/api/InsideMessageRecordApi.java b/msg-center-api/src/main/java/cn/axzo/msg/center/api/InsideMessageRecordApi.java index 2fc65bf1..bf5504d8 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/api/InsideMessageRecordApi.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/api/InsideMessageRecordApi.java @@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import javax.validation.Valid; +import java.util.List; @FeignClient(name = "msg-center", url = "${server.serviceUrl}", fallback = InsideMessageRecordApiFallBack.class) @Component @@ -32,7 +33,7 @@ public interface InsideMessageRecordApi { * @return */ @PostMapping("msg/record/list") - CommonResponse> queryMessageRecordList(MessageRecordReq request); + CommonResponse> queryMessageRecordList(@RequestBody MessageRecordReq request); /** * 修改成已读 @@ -48,7 +49,7 @@ public interface InsideMessageRecordApi { * @return */ @PostMapping("msg/record/unread/list") - CommonResponse> queryUnReadList(QueryMessageRecordReq request); + CommonResponse> queryUnReadList(@RequestBody QueryMessageRecordReq request); /** * 查询已发送列表 @@ -56,7 +57,7 @@ public interface InsideMessageRecordApi { * @return */ @PostMapping("msg/record/sent/list") - CommonResponse> querySent(QueryMessageRecordReq request); + CommonResponse> querySent(@RequestBody QueryMessageRecordReq request); /** * 统计未读数量 @@ -64,7 +65,7 @@ public interface InsideMessageRecordApi { * @return */ @PostMapping("msg/record/unread/statistics") - CommonResponse unReadStatistics(MessageStatisticsReq request); + CommonResponse unReadStatistics(@RequestBody MessageStatisticsReq request); /** * 批量删除消息记录,支持以下两种方式 @@ -79,4 +80,12 @@ public interface InsideMessageRecordApi { */ @PostMapping("msg/record/delete") CommonResponse deleteMessageRecords(@RequestBody MessageRecordDeleteReq request); + + /** + * 标记为已经接收 + * @param msgIdList + * @return + */ + @PostMapping("msg/record/markReceived") + CommonResponse markReceived(@RequestBody List msgIdList); } diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/api/fallback/InsideMessageRecordApiFallBack.java b/msg-center-api/src/main/java/cn/axzo/msg/center/api/fallback/InsideMessageRecordApiFallBack.java index 823413fe..d1e3c1d2 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/api/fallback/InsideMessageRecordApiFallBack.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/api/fallback/InsideMessageRecordApiFallBack.java @@ -11,6 +11,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; +import java.util.List; + @Component @Slf4j public class InsideMessageRecordApiFallBack implements InsideMessageRecordApi { @@ -22,7 +24,7 @@ public class InsideMessageRecordApiFallBack implements InsideMessageRecordApi { } @Override - public CommonResponse> queryMessageRecordList(MessageRecordReq request) { + public CommonResponse> queryMessageRecordList(MessageRecordReq request) { log.warn("查询消息记录列表超时,req={}", JSONUtil.toJsonStr(request)); return CommonResponse.fail("查询消息记录列表超时"); } @@ -33,12 +35,12 @@ public class InsideMessageRecordApiFallBack implements InsideMessageRecordApi { } @Override - public CommonResponse> queryUnReadList(QueryMessageRecordReq request) { + public CommonResponse> queryUnReadList(QueryMessageRecordReq request) { return null; } @Override - public CommonResponse> querySent(QueryMessageRecordReq request) { + public CommonResponse> querySent(QueryMessageRecordReq request) { return null; } @@ -51,4 +53,9 @@ public class InsideMessageRecordApiFallBack implements InsideMessageRecordApi { public CommonResponse deleteMessageRecords(MessageRecordDeleteReq request) { return CommonResponse.success(false); } + + @Override + public CommonResponse markReceived(List msgIdList) { + return CommonResponse.fail("更新消息状态异常"); + } } diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/api/request/MessageRecordReq.java b/msg-center-api/src/main/java/cn/axzo/msg/center/api/request/MessageRecordReq.java index cbef2f1e..3943729d 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/api/request/MessageRecordReq.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/api/request/MessageRecordReq.java @@ -2,10 +2,13 @@ package cn.axzo.msg.center.api.request; import cn.axzo.basics.common.page.PageRequest; import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; import java.util.List; @Data +@ToString(callSuper = true) public class MessageRecordReq extends PageRequest { /** diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/api/request/UpdateReadReq.java b/msg-center-api/src/main/java/cn/axzo/msg/center/api/request/UpdateReadReq.java index 5048ed3b..0494b2f5 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/api/request/UpdateReadReq.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/api/request/UpdateReadReq.java @@ -2,20 +2,22 @@ package cn.axzo.msg.center.api.request; import lombok.Data; -import javax.validation.constraints.NotNull; +import java.util.List; @Data public class UpdateReadReq { + + /** 消息ID **/ + private List msgIdList; + /** * 消息类型 1:普通消息 2:待办 */ - @NotNull(message = "消息类型不能为空") private Integer msgType; /** * 待办、消息模块类型Id - 针对待办使用 */ - @NotNull(message = "moduleId不能为空") private Long moduleId; /** * 发送人id diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/api/response/MessageRecordRes.java b/msg-center-api/src/main/java/cn/axzo/msg/center/api/response/MessageRecordRes.java index 7305eb7f..e6e7bb58 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/api/response/MessageRecordRes.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/api/response/MessageRecordRes.java @@ -6,9 +6,13 @@ import cn.axzo.msg.center.api.enums.MsgTypeEnum; import cn.axzo.msg.center.api.enums.ReceiveTypeEnum; import lombok.Data; +import java.util.Date; + @Data public class MessageRecordRes { + private Long msgId; + /** * 发送者ID */ @@ -100,4 +104,7 @@ public class MessageRecordRes { * 租户id,解决多个企业的问题 */ private Long tenantId; + + /** 创建时间 **/ + private Date createAt; } 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 d6a0b748..9d585948 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 @@ -17,6 +17,7 @@ import cn.axzo.msg.center.domain.enums.ModuleBizTypeEnum; import cn.axzo.msg.center.domain.persistence.BaseEntity; import cn.axzo.msg.center.domain.request.InsideCmsReadMsgReq; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -126,7 +127,8 @@ public class MessageRecordDao extends } public IPage querySent(QueryMessageRecordReq request){ - return baseMapper.querySent(request); + IPage page = new Page<>(request.getPage(), request.getPageSize()); + return baseMapper.querySent(page,request); } } diff --git a/msg-center-dal/src/main/java/cn/axzo/msg/center/dal/mapper/MessageRecordMapper.java b/msg-center-dal/src/main/java/cn/axzo/msg/center/dal/mapper/MessageRecordMapper.java index 4586dfb5..fa4e2a5a 100644 --- a/msg-center-dal/src/main/java/cn/axzo/msg/center/dal/mapper/MessageRecordMapper.java +++ b/msg-center-dal/src/main/java/cn/axzo/msg/center/dal/mapper/MessageRecordMapper.java @@ -48,6 +48,6 @@ public interface MessageRecordMapper extends BaseMapper{ int updateHasRead(@Param("req") UpdateReadDTO request); IPage queryUnReadList(@Param("req") QueryMessageRecordReq req, IPage page); - IPage querySent(QueryMessageRecordReq request); + IPage querySent(IPage page, @Param("req") QueryMessageRecordReq request); } diff --git a/msg-center-dal/src/main/resources/mapper/MessageRecordMapper.xml b/msg-center-dal/src/main/resources/mapper/MessageRecordMapper.xml index 2835d5ea..ec9587ad 100644 --- a/msg-center-dal/src/main/resources/mapper/MessageRecordMapper.xml +++ b/msg-center-dal/src/main/resources/mapper/MessageRecordMapper.xml @@ -172,7 +172,20 @@ - update message_record set state=4 where is_delete=0 AND module_id=#{req.moduleId} AND type=#{req.msgType} + update message_record set state=4 + where is_delete=0 + + AND id IN + + #{msgId} + + + + AND module_id = #{req.moduleId} + + + AND type = #{req.msgType} + AND tenant_id = #{req.tenantId} @@ -198,16 +211,16 @@ record.router_params as routerParam, record.relation_id as relationId, record.old_type_id as oldTypeId - from message_record - where to_id={req.toId} + from message_record AS record + where to_id=#{req.toId} - type = #{req.msgType} + AND type = #{req.msgType} - from_id = #{req.fromId} + AND from_id = #{req.fromId} - tenant_id = #{req.tenantId} + AND tenant_id = #{req.tenantId} and module_id = #{req.moduleId} and state in (2,3) @@ -229,19 +242,25 @@ record.extra as ext, record.router_params as routerParam, record.relation_id as relationId, - record.old_type_id as oldTypeId - from message_record - where to_id={req.toId} + record.old_type_id as oldTypeId, + record.tenant_id AS tenantId, + record.from_id AS fromId, + record.to_id AS toId, + record.create_at AS createAt + from message_record AS record + where to_id=#{req.toId} - type = #{req.msgType} + AND type = #{req.msgType} - from_id = #{req.fromId} + AND from_id = #{req.fromId} - tenant_id = #{req.tenantId} + AND tenant_id = #{req.tenantId} + + + AND module_id = #{req.moduleId} - and module_id = #{req.moduleId} and state=2 and is_delete = 0 order by create_at desc,id desc diff --git a/msg-center-domain/src/main/java/cn/axzo/msg/center/domain/dto/UpdateReadDTO.java b/msg-center-domain/src/main/java/cn/axzo/msg/center/domain/dto/UpdateReadDTO.java index 26cd2c11..e1acdb2c 100644 --- a/msg-center-domain/src/main/java/cn/axzo/msg/center/domain/dto/UpdateReadDTO.java +++ b/msg-center-domain/src/main/java/cn/axzo/msg/center/domain/dto/UpdateReadDTO.java @@ -2,8 +2,13 @@ package cn.axzo.msg.center.domain.dto; import lombok.Data; +import java.util.List; + @Data public class UpdateReadDTO { + + /** 消息ID **/ + private List msgIdList; /** * 消息类型 1:普通消息 2:待办 */