Commit 4e44f341 by 南千昊

程序后台下未接到音视频通话记录返回

parent f1954ef0
package com.wecloud.im.action; package com.wecloud.im.action;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.wecloud.dispatch.annotation.ActionMapping;
import com.wecloud.im.param.rtc.*;
import com.wecloud.im.sdk.enums.CallTypeEnum;
import com.wecloud.im.service.ImRtcRecordService;
import com.wecloud.im.vo.MissedRtcRecordVO;
import com.wecloud.im.ws.model.WsResponse;
import com.wecloud.rtc.service.RtcService;
import io.geekidea.springbootplus.framework.common.api.ApiCode; import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum; import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.wecloud.dispatch.annotation.ActionMapping; import java.util.Map;
import com.wecloud.im.param.rtc.CandidateForwardParam;
import com.wecloud.im.param.rtc.CreateRtcChannelParam;
import com.wecloud.im.param.rtc.CreateRtcChannelResult;
import com.wecloud.im.param.rtc.JoinRtcChannelParam;
import com.wecloud.im.param.rtc.LeaveRtcChannelParam;
import com.wecloud.im.param.rtc.RejectRtcChannelParam;
import com.wecloud.im.param.rtc.SdpForwardParam;
import com.wecloud.im.sdk.enums.CallTypeEnum;
import com.wecloud.im.ws.model.WsResponse;
import com.wecloud.rtc.service.RtcService;
@Slf4j @Slf4j
@Component @Component
...@@ -33,6 +27,9 @@ public class RtcAction { ...@@ -33,6 +27,9 @@ public class RtcAction {
@Autowired @Autowired
private RtcService rtcService; private RtcService rtcService;
@Autowired
private ImRtcRecordService rtcRecordService;
/** /**
* 创建频道,并邀请客户端加入 * 创建频道,并邀请客户端加入
*/ */
...@@ -86,4 +83,11 @@ public class RtcAction { ...@@ -86,4 +83,11 @@ public class RtcAction {
rtcService.candidateForward(data); rtcService.candidateForward(data);
return WsResponse.ok(); return WsResponse.ok();
} }
@ApiOperation("未接音视频")
@ActionMapping("/missedConversation")
public WsResponse<MissedRtcRecordVO> missedConversation(){
MissedRtcRecordVO missedRtcRecord = rtcRecordService.getMissedRtcRecord();
return WsResponse.ok(missedRtcRecord);
}
} }
...@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wecloud.im.entity.ImRtcRecord; import com.wecloud.im.entity.ImRtcRecord;
import com.wecloud.im.param.rtc.SingleRtcRecordParam; import com.wecloud.im.param.rtc.SingleRtcRecordParam;
import com.wecloud.im.service.ImRtcRecordService; import com.wecloud.im.service.ImRtcRecordService;
import com.wecloud.im.vo.MissedRtcRecordVO;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.controller.BaseController; import io.geekidea.springbootplus.framework.common.controller.BaseController;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
...@@ -37,4 +38,17 @@ public class ImRtcRecordController extends BaseController { ...@@ -37,4 +38,17 @@ public class ImRtcRecordController extends BaseController {
return ApiResult.ok(rtcRecordService.getPageImRtcRecords(singleRtcRecordParam)); return ApiResult.ok(rtcRecordService.getPageImRtcRecords(singleRtcRecordParam));
} }
@ApiOperation("未接音视频")
@PostMapping("/missedConversation")
ApiResult<MissedRtcRecordVO> missedConversation(){
MissedRtcRecordVO missedRtcRecord = rtcRecordService.getMissedRtcRecord();
// 如果没有记录 则状态为4
if (missedRtcRecord==null){
MissedRtcRecordVO missedRtcRecordVO = new MissedRtcRecordVO();
missedRtcRecordVO.setState(4);
return ApiResult.ok(missedRtcRecordVO);
}
return ApiResult.ok(missedRtcRecord);
}
} }
...@@ -5,6 +5,7 @@ import com.wecloud.im.entity.ImClient; ...@@ -5,6 +5,7 @@ import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImRtcRecord; import com.wecloud.im.entity.ImRtcRecord;
import com.wecloud.im.param.rtc.CreateRtcChannelParam; import com.wecloud.im.param.rtc.CreateRtcChannelParam;
import com.wecloud.im.param.rtc.SingleRtcRecordParam; import com.wecloud.im.param.rtc.SingleRtcRecordParam;
import com.wecloud.im.vo.MissedRtcRecordVO;
import io.geekidea.springbootplus.framework.common.service.BaseService; import io.geekidea.springbootplus.framework.common.service.BaseService;
/** /**
...@@ -34,4 +35,10 @@ public interface ImRtcRecordService extends BaseService<ImRtcRecord> { ...@@ -34,4 +35,10 @@ public interface ImRtcRecordService extends BaseService<ImRtcRecord> {
* 获取通话记录 * 获取通话记录
*/ */
Page<ImRtcRecord> getPageImRtcRecords(SingleRtcRecordParam singleRtcRecordParam); Page<ImRtcRecord> getPageImRtcRecords(SingleRtcRecordParam singleRtcRecordParam);
/**
* 获取应用后台下未接受的音视频通话
*/
MissedRtcRecordVO getMissedRtcRecord();
} }
...@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; ...@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImRtcRecord; import com.wecloud.im.entity.ImRtcRecord;
import com.wecloud.im.mapper.ImRtcRecordMapper; import com.wecloud.im.mapper.ImRtcRecordMapper;
...@@ -11,15 +12,20 @@ import com.wecloud.im.param.rtc.CreateRtcChannelParam; ...@@ -11,15 +12,20 @@ import com.wecloud.im.param.rtc.CreateRtcChannelParam;
import com.wecloud.im.param.rtc.SingleRtcRecordParam; import com.wecloud.im.param.rtc.SingleRtcRecordParam;
import com.wecloud.im.sdk.enums.RtcStateEnum; import com.wecloud.im.sdk.enums.RtcStateEnum;
import com.wecloud.im.sdk.enums.SingleRtcOperateTypeEnum; import com.wecloud.im.sdk.enums.SingleRtcOperateTypeEnum;
import com.wecloud.im.service.ImClientService;
import com.wecloud.im.service.ImRtcRecordService; import com.wecloud.im.service.ImRtcRecordService;
import com.wecloud.im.vo.MissedRtcRecordVO;
import com.wecloud.utils.SnowflakeUtil; import com.wecloud.utils.SnowflakeUtil;
import io.geekidea.springbootplus.framework.common.exception.BusinessException; import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl; import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.shiro.util.SecurityUtils; import io.geekidea.springbootplus.framework.shiro.util.SecurityUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date; import java.util.Date;
...@@ -32,6 +38,9 @@ import java.util.Date; ...@@ -32,6 +38,9 @@ import java.util.Date;
@Service @Service
public class ImRtcRecordServiceImpl extends BaseServiceImpl<ImRtcRecordMapper, ImRtcRecord> implements ImRtcRecordService { public class ImRtcRecordServiceImpl extends BaseServiceImpl<ImRtcRecordMapper, ImRtcRecord> implements ImRtcRecordService {
@Autowired
private ImClientService imClientService;
@Async @Async
@Override @Override
public void createRtcRecord(CreateRtcChannelParam param, Long channelId, ImClient currentClient) { public void createRtcRecord(CreateRtcChannelParam param, Long channelId, ImClient currentClient) {
...@@ -111,5 +120,28 @@ public class ImRtcRecordServiceImpl extends BaseServiceImpl<ImRtcRecordMapper, I ...@@ -111,5 +120,28 @@ public class ImRtcRecordServiceImpl extends BaseServiceImpl<ImRtcRecordMapper, I
return page; return page;
} }
@Override
public MissedRtcRecordVO getMissedRtcRecord() {
ImClient currentClient = imClientService.getCurrentClient();
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - 1);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
ImRtcRecord missRtcRecord = this.getOne(new LambdaQueryWrapper<ImRtcRecord>()
.eq(ImRtcRecord::getFkAppid, currentClient.getFkAppid())
.in(ImRtcRecord::getState, Lists.newArrayList(RtcStateEnum.CREATED.getCode(), RtcStateEnum.ING.getCode()))
.eq(ImRtcRecord::getToClientId, currentClient.getClientId())
.between(ImRtcRecord::getCreateTime, df.format(calendar.getTime()), df.format(new Date()))
);
if (missRtcRecord != null) {
MissedRtcRecordVO missedRtcRecordVo = new MissedRtcRecordVO();
missedRtcRecordVo.setState(missRtcRecord.getState());
missedRtcRecordVo.setCallType(missRtcRecord.getCallType());
missedRtcRecordVo.setFromClientId(missRtcRecord.getFromClientId());
missedRtcRecordVo.setChannelId(missRtcRecord.getChannelId());
return missedRtcRecordVo;
} else {
return null;
}
}
} }
package com.wecloud.im.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* @author nanqianhao
* @date 2022/6/16
* @apiNote
*/
@Data
@ApiModel(value = "未接音视频记录返回对象")
public class MissedRtcRecordVO implements Serializable {
private static final long serialVersionUID = 5095229246261665876L;
@ApiModelProperty("频道id")
private Long channelId;
@ApiModelProperty("发起方clientId")
private String fromClientId;
@ApiModelProperty(value = "音视频类型: 1-video或2-voice")
private Integer callType;
@ApiModelProperty("频道状态,1:音视频发起,2:音视频中,3:音视频结束, 4:没有记录")
private Integer state;
}
package com.wecloud.im.sdk; package com.wecloud.im.sdk;
import com.wecloud.im.sdk.model.*;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import com.wecloud.im.sdk.model.Attributes;
import com.wecloud.im.sdk.model.Blacklist;
import com.wecloud.im.sdk.model.ChatRoomMember;
import com.wecloud.im.sdk.model.ClientRelation;
import com.wecloud.im.sdk.model.Conversation;
import com.wecloud.im.sdk.model.CreateConversation;
import com.wecloud.im.sdk.model.Friend;
import com.wecloud.im.sdk.model.GroupChatMessage;
import com.wecloud.im.sdk.model.GroupChatStatusMessage;
import com.wecloud.im.sdk.model.GroupSettingParam;
import com.wecloud.im.sdk.model.ImClient;
import com.wecloud.im.sdk.model.ImRtcRecord;
import com.wecloud.im.sdk.model.PageResult;
import com.wecloud.im.sdk.model.PrivateChatMessage;
import com.wecloud.im.sdk.model.PrivateChatStatusMessage;
import com.wecloud.im.sdk.model.RtcRecord;
import com.wecloud.im.sdk.model.SingleUserNotification;
import com.wecloud.im.sdk.model.Token;
import com.wecloud.im.sdk.model.UnsureFriend;
/** /**
* *
* @Author luozh * @Author luozh
......
package com.wecloud.im.sdk; package com.wecloud.im.sdk;
import java.net.URL;
import java.util.List;
import java.util.Map;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import com.wecloud.im.sdk.internal.*;
import com.wecloud.im.sdk.internal.WecloudImContactsOperation;
import com.wecloud.im.sdk.internal.WecloudImConversationOperation;
import com.wecloud.im.sdk.internal.WecloudImGroupOperation;
import com.wecloud.im.sdk.internal.WecloudImMessageOperation;
import com.wecloud.im.sdk.internal.WecloudImRtcRecordOperation;
import com.wecloud.im.sdk.internal.WecloudImSystemNotificationOperation;
import com.wecloud.im.sdk.internal.WecloudImUserOperation;
import com.wecloud.im.sdk.model.*; import com.wecloud.im.sdk.model.*;
import java.net.URL;
import java.util.List;
import java.util.Map;
/** /**
* *
* @Author luozh * @Author luozh
...@@ -365,6 +358,7 @@ public class WecloudImClient implements WecloudIm { ...@@ -365,6 +358,7 @@ public class WecloudImClient implements WecloudIm {
return imSystemNotificationOperation.singleUserNotification(singleUserNotificationRequest); return imSystemNotificationOperation.singleUserNotification(singleUserNotificationRequest);
} }
private void initOperations() { private void initOperations() {
this.imUserOperation = new WecloudImUserOperation(apiDomain, appKey, appSecret); this.imUserOperation = new WecloudImUserOperation(apiDomain, appKey, appSecret);
this.imConversationOperation = new WecloudImConversationOperation(apiDomain, appKey, appSecret); this.imConversationOperation = new WecloudImConversationOperation(apiDomain, appKey, appSecret);
......
package com.wecloud.im.sdk.internal; package com.wecloud.im.sdk.internal;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
import com.wecloud.im.sdk.common.HttpMethod; import com.wecloud.im.sdk.common.HttpMethod;
...@@ -12,6 +8,10 @@ import com.wecloud.im.sdk.model.ImRtcRecord; ...@@ -12,6 +8,10 @@ import com.wecloud.im.sdk.model.ImRtcRecord;
import com.wecloud.im.sdk.model.PageResult; import com.wecloud.im.sdk.model.PageResult;
import com.wecloud.im.sdk.model.RtcRecordRequest; import com.wecloud.im.sdk.model.RtcRecordRequest;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import static com.wecloud.im.sdk.ResourcePathConstants.LIST_RTC_RECORDS_REQUEST; import static com.wecloud.im.sdk.ResourcePathConstants.LIST_RTC_RECORDS_REQUEST;
/** /**
...@@ -58,4 +58,6 @@ public class WecloudImRtcRecordOperation extends WecloudImOperation { ...@@ -58,4 +58,6 @@ public class WecloudImRtcRecordOperation extends WecloudImOperation {
PageResult<ImRtcRecord> rtcRecords = JSON.parseObject(JSON.toJSONString(result), typeReference); PageResult<ImRtcRecord> rtcRecords = JSON.parseObject(JSON.toJSONString(result), typeReference);
return rtcRecords; return rtcRecords;
} }
} }
package com.wecloud.im.sdk.model;
import lombok.Data;
import java.io.Serializable;
/**
* @author nanqianhao
* @date 2022/6/16
* @apiNote
*/
@Data
public class MissedRtcRecord implements Serializable {
private static final long serialVersionUID = -4276311990569662993L;
private Long channelId;
private String fromClientId;
private Integer callType;
private Integer state;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment