咨询服务名片消息已读接口

This commit is contained in:
feng
2025-12-10 15:02:14 +08:00
parent fe5ca6619c
commit 569e23322f
6 changed files with 231 additions and 0 deletions
@@ -0,0 +1,38 @@
package com.renkang.consultation.controller;
import com.renkang.consultation.service.ImMsgReadLogService;
import com.renkang.consultation.vo.ImMsgReadLogVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.util.List;
import java.util.Map;
@Slf4j
@Tag(name = "咨询消息已读管理")
@RestController
@RequestMapping("/con-message")
@RequiredArgsConstructor
public class ImMsgReadLogController {
private final ImMsgReadLogService imMsgReadLogService;
@PostMapping("/saveReadLog")
@Operation(summary = "记录消息已读日志", description = "记录消息已读日志")
public Result<String> saveReadLog(@RequestBody @Valid ImMsgReadLogVO imMsgReadLogVO) {
return Result.OK(imMsgReadLogService.saveReadLog(imMsgReadLogVO));
}
@PostMapping("/findReadStatus")
@Operation(summary = "查询消息是否已读", description = "查询消息是否已读(暂时只支持查询自定义消息类型的已读记录-医生名片)")
public Result<Map<String,Integer>> findReadStatus(List<String> msgIdList) {
return Result.OK(imMsgReadLogService.findReadStatus(msgIdList));
}
}
@@ -0,0 +1,9 @@
package com.renkang.consultation.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import com.renkang.consultation.entity.ImMsgReadLog;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ImMsgReadLogMapper extends MPJBaseMapper<ImMsgReadLog> {
}
@@ -0,0 +1,22 @@
package com.renkang.consultation.service;
import com.renkang.consultation.vo.ImMsgReadLogVO;
import java.util.List;
import java.util.Map;
public interface ImMsgReadLogService {
/**
* 记录消息已读日志
* @param imMsgReadLogVO
* @return
*/
String saveReadLog(ImMsgReadLogVO imMsgReadLogVO);
/**
* 查询消息是否已读
* @param msgIdList
* @return
*/
Map<String,Integer> findReadStatus(List<String> msgIdList);
}
@@ -0,0 +1,62 @@
package com.renkang.consultation.service.impl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.renkang.consultation.entity.ImMsgReadLog;
import com.renkang.consultation.mapper.ImMsgReadLogMapper;
import com.renkang.consultation.service.ImMsgReadLogService;
import com.renkang.consultation.vo.ImMsgReadLogVO;
import lombok.RequiredArgsConstructor;
import org.jeecg.common.exception.ExceptionAssertsUtil;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class ImMsgReadLogServiceImpl implements ImMsgReadLogService {
private final ImMsgReadLogMapper imMsgReadLogMapper;
@Override
public String saveReadLog(ImMsgReadLogVO imMsgReadLogVO) {
MPJLambdaWrapper<ImMsgReadLog> wrapper = new MPJLambdaWrapper<>();
wrapper.eq(ImMsgReadLog::getMsgId, imMsgReadLogVO.getMsgId());
wrapper.eq(ImMsgReadLog::getGroupId, imMsgReadLogVO.getGroupId());
ImMsgReadLog msgReadLog = imMsgReadLogMapper.selectOne(wrapper);
if(msgReadLog == null) {
msgReadLog = new ImMsgReadLog();
msgReadLog.setGroupId(imMsgReadLogVO.getGroupId());
msgReadLog.setMsgId(imMsgReadLogVO.getMsgId());
msgReadLog.setReadTime(new Date());
msgReadLog.setToAccount(imMsgReadLogVO.getToAccount());
msgReadLog.setFromAccount(imMsgReadLogVO.getFromAccount());
msgReadLog.setReadCount(1);
imMsgReadLogMapper.insert(msgReadLog);
}else {
//因为目前用于医生名片的已读且只能点一次,暂时这样提示
ExceptionAssertsUtil.fail("名片已过期");
}
return "操作成功";
}
@Override
public Map<String,Integer> findReadStatus(List<String> msgIdList) {
Map<String,Integer> map = new HashMap<>();
MPJLambdaWrapper<ImMsgReadLog> wrapper = new MPJLambdaWrapper<>();
wrapper.in(ImMsgReadLog::getMsgId, msgIdList);
Map<String,ImMsgReadLog> logMap = imMsgReadLogMapper.selectList(wrapper).stream()
.collect(Collectors.toMap(ImMsgReadLog::getMsgId, x -> x));
for (String msgId : msgIdList) {
ImMsgReadLog log = logMap.get(msgId);
if(log == null) {
map.put(msgId, 0);
}else {
map.put(msgId, log.getReadCount());
}
}
return map;
}
}