腾讯音视频回调

This commit is contained in:
俞扬
2023-06-29 02:00:14 +08:00
parent aad7bedce3
commit 0d8e9b99dc
21 changed files with 484 additions and 64 deletions

View File

@@ -103,6 +103,12 @@
<groupId>org.icepdf.os</groupId> <groupId>org.icepdf.os</groupId>
<artifactId>icepdf-core</artifactId> <artifactId>icepdf-core</artifactId>
<version>6.1.2</version> <version>6.1.2</version>
<exclusions>
<exclusion>
<groupId>javax.media</groupId>
<artifactId>jai-core</artifactId>
</exclusion>
</exclusions>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@@ -20,12 +20,18 @@ import java.util.regex.Pattern;
*/ */
public class StringUtil extends org.apache.commons.lang3.StringUtils { public class StringUtil extends org.apache.commons.lang3.StringUtils {
private static final char UPPER_A = 'A'; private static final char UPPER_A = 'A';
private static final char LOWER_A = 'a'; private static final char LOWER_A = 'a';
private static final char UPPER_Z = 'Z'; private static final char UPPER_Z = 'Z';
private static final char LOWER_Z = 'z'; private static final char LOWER_Z = 'z';
public static final String REPLACE_0 = "{0}";
public static final String REPLACE_1 = "{1}";
public static final String REPLACE_2 = "{2}";
public static final String REPLACE_3 = "{3}";
public static final String REPLACE_4 = "{4}";
public static final String REPLACE_5 = "{5}";
private static final byte[] DIGITS = { private static final byte[] DIGITS = {
'0', '1', '2', '3', '4', '5', '0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', 'a', 'b', '6', '7', '8', '9', 'a', 'b',

View File

@@ -37,4 +37,6 @@ public interface HyPartnerCertificationInfoMapper {
*/ */
String getInterviewPlanIdByQualifyVerifyId(String qualifyVerifyId); String getInterviewPlanIdByQualifyVerifyId(String qualifyVerifyId);
HyPartnerCertificationInfoDO selectByPartnerLineId(@Param("partnerLineId") Long partnerLineId);
} }

View File

@@ -25,5 +25,5 @@ public interface HyPartnerTaskInfoLogMapper {
*/ */
int updateByPrimaryKeySelective(@Param("record") HyPartnerTaskInfoLogDO record); int updateByPrimaryKeySelective(@Param("record") HyPartnerTaskInfoLogDO record);
List<HyPartnerTaskInfoLogDO> selectByPartnerLineIdAndOperateType(@Param("partnerLineId") String partnerLineId, @Param("operateType") String operateType); List<HyPartnerTaskInfoLogDO> selectByPartnerLineIdAndOperateType(@Param("partnerLineId") Long partnerLineId, @Param("operateType") String operateType);
} }

View File

@@ -137,4 +137,10 @@
) )
and deleted = 0 and deleted = 0
</select> </select>
<select id="selectByPartnerLineId" resultType="com.cool.store.entity.HyPartnerCertificationInfoDO">
select
<include refid="Base_Column_List" />
from hy_partner_certification_info
where partner_line_id = #{partnerLineId}
</select>
</mapper> </mapper>

View File

@@ -0,0 +1,62 @@
package com.cool.store.dto.trtc.callback;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* @Author: young.yu
* @Date: 2023-06-29 01:17
* @Description:
*/
public class EventInfo {
@JsonProperty("RoomId")
private String roomId;
@JsonProperty("EventTs")
private long eventTs;
@JsonProperty("UserId")
private String userId;
@JsonProperty("TaskId")
private String taskId;
@JsonProperty("Payload")
private Payload payload;
public String getRoomId() {
return roomId;
}
public void setRoomId(String roomId) {
this.roomId = roomId;
}
public long getEventTs() {
return eventTs;
}
public void setEventTs(long eventTs) {
this.eventTs = eventTs;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getTaskId() {
return taskId;
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
public Payload getPayload() {
return payload;
}
public void setPayload(Payload payload) {
this.payload = payload;
}
}

View File

@@ -0,0 +1,32 @@
package com.cool.store.dto.trtc.callback;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* @Author: young.yu
* @Date: 2023-06-29 01:17
* @Description:
*/
public class Payload {
@JsonProperty("Status")
private int status;
@JsonProperty("TencentVod")
private TencentVod tencentVod;
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public TencentVod getTencentVod() {
return tencentVod;
}
public void setTencentVod(TencentVod tencentVod) {
this.tencentVod = tencentVod;
}
}

View File

@@ -0,0 +1,92 @@
package com.cool.store.dto.trtc.callback;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* @Author: young.yu
* @Date: 2023-06-29 01:18
* @Description:
*/
public class TencentVod {
@JsonProperty("UserId")
private String userId;
@JsonProperty("TrackType")
private String trackType;
@JsonProperty("MediaId")
private String mediaId;
@JsonProperty("FileId")
private String fileId;
@JsonProperty("VideoUrl")
private String videoUrl;
@JsonProperty("CacheFile")
private String cacheFile;
@JsonProperty("StartTimeStamp")
private long startTimeStamp;
@JsonProperty("EndTimeStamp")
private int endTimeStamp;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getTrackType() {
return trackType;
}
public void setTrackType(String trackType) {
this.trackType = trackType;
}
public String getMediaId() {
return mediaId;
}
public void setMediaId(String mediaId) {
this.mediaId = mediaId;
}
public String getFileId() {
return fileId;
}
public void setFileId(String fileId) {
this.fileId = fileId;
}
public String getVideoUrl() {
return videoUrl;
}
public void setVideoUrl(String videoUrl) {
this.videoUrl = videoUrl;
}
public String getCacheFile() {
return cacheFile;
}
public void setCacheFile(String cacheFile) {
this.cacheFile = cacheFile;
}
public long getStartTimeStamp() {
return startTimeStamp;
}
public void setStartTimeStamp(long startTimeStamp) {
this.startTimeStamp = startTimeStamp;
}
public int getEndTimeStamp() {
return endTimeStamp;
}
public void setEndTimeStamp(int endTimeStamp) {
this.endTimeStamp = endTimeStamp;
}
}

View File

@@ -0,0 +1,52 @@
package com.cool.store.dto.trtc.callback;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* @Author: young.yu
* @Date: 2023-06-29 01:16
* @Description:
*/
public class VideoCallBackDTO {
@JsonProperty("EventGroupId")
private int eventGroupId;
@JsonProperty("EventType")
private int eventType;
@JsonProperty("CallbackTs")
private long callbackTs;
@JsonProperty("EventInfo")
private EventInfo eventInfo;
public int getEventGroupId() {
return eventGroupId;
}
public void setEventGroupId(int eventGroupId) {
this.eventGroupId = eventGroupId;
}
public int getEventType() {
return eventType;
}
public void setEventType(int eventType) {
this.eventType = eventType;
}
public long getCallbackTs() {
return callbackTs;
}
public void setCallbackTs(long callbackTs) {
this.callbackTs = callbackTs;
}
public EventInfo getEventInfo() {
return eventInfo;
}
public void setEventInfo(EventInfo eventInfo) {
this.eventInfo = eventInfo;
}
}

View File

@@ -9,7 +9,7 @@ import lombok.Data;
*/ */
@Data @Data
@ApiModel @ApiModel
public class GetLastUpdateTimeInfoReq { public class GetTipsInfoReq {
@ApiModelProperty("线索id") @ApiModelProperty("线索id")
private String partnerLineId; private String partnerLineId;
} }

View File

@@ -0,0 +1,13 @@
package com.cool.store.service;
import com.cool.store.exception.ApiException;
import com.cool.store.request.GetTipsInfoReq;
/**
* @Author: young.yu
* @Date: 2023-06-28 21:34
* @Description:
*/
public interface CommonService {
String getTipsInfo(GetTipsInfoReq request) throws ApiException;
}

View File

@@ -69,5 +69,4 @@ public interface InterviewService {
public void rejectInterviewAndSuspendLine(Long iterviewId,Long interviewPlanId,String certifyFile); public void rejectInterviewAndSuspendLine(Long iterviewId,Long interviewPlanId,String certifyFile);
String getLastUpdateTimeInfo(GetLastUpdateTimeInfoReq request) throws ApiException;
} }

View File

@@ -1,5 +1,6 @@
package com.cool.store.service; package com.cool.store.service;
import com.cool.store.dto.trtc.callback.VideoCallBackDTO;
import com.cool.store.request.TRTCVideoCallBackReq; import com.cool.store.request.TRTCVideoCallBackReq;
public interface TRTCVideoService { public interface TRTCVideoService {
@@ -7,6 +8,8 @@ public interface TRTCVideoService {
/** /**
* 音视频上传成功后的回调处理 * 音视频上传成功后的回调处理
*/ */
void handleVideoCallBack(TRTCVideoCallBackReq req); // void handleVideoCallBack(TRTCVideoCallBackReq req);
void handleVideoCallBack(VideoCallBackDTO videoCallBackDTO);
} }

View File

@@ -0,0 +1,129 @@
package com.cool.store.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.dto.log.LogFieldDTO;
import com.cool.store.entity.HyPartnerCertificationInfoDO;
import com.cool.store.entity.HyPartnerLineInfoDO;
import com.cool.store.entity.HyPartnerTaskInfoLogDO;
import com.cool.store.enums.OperateLogFieldValueEnum;
import com.cool.store.enums.OperateTypeEnum;
import com.cool.store.enums.WorkflowStageEnum;
import com.cool.store.enums.WorkflowStatusEnum;
import com.cool.store.exception.ApiException;
import com.cool.store.mapper.HyPartnerCertificationInfoMapper;
import com.cool.store.mapper.HyPartnerLineInfoMapper;
import com.cool.store.mapper.HyPartnerTaskInfoLogMapper;
import com.cool.store.request.GetTipsInfoReq;
import com.cool.store.service.CommonService;
import com.cool.store.utils.StringUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
/**
* @Author: young.yu
* @Date: 2023-06-28 21:35
* @Description:
*/
@Service
public class CommonServiceImpl implements CommonService {
@Autowired
private HyPartnerTaskInfoLogMapper hyPartnerTaskInfoLogMapper;
@Autowired
private HyPartnerLineInfoMapper hyPartnerLineInfoMapper;
@Autowired
private HyPartnerCertificationInfoMapper hyPartnerCertificationInfoMapper;
@Override
public String getTipsInfo(GetTipsInfoReq request) throws ApiException {
List<HyPartnerLineInfoDO> lineInfoList = hyPartnerLineInfoMapper.getHyPartnerLineInfoListByIds(Arrays.asList(Long.parseLong(request.getPartnerLineId())));
if (CollectionUtils.isEmpty(lineInfoList)) {
return null;
}
HyPartnerLineInfoDO hyPartnerLineInfoDO = lineInfoList.get(0);
String workflowStage = hyPartnerLineInfoDO.getWorkflowStage();
String workflowStatus = hyPartnerLineInfoDO.getWorkflowStatus();
Long partnerLineId = hyPartnerLineInfoDO.getId();
if (workflowStage.equals(WorkflowStageEnum.INTERVIEW.getCode()) && workflowStatus.equals(WorkflowStatusEnum.INTERVIEW_2.getCode())) {
return getInterviewTips(partnerLineId, OperateTypeEnum.INTERVIEW_APPOINTMENT, "提交面试预约时间");
} else if (workflowStage.equals(WorkflowStageEnum.INTERVIEW.getCode()) && workflowStatus.equals(WorkflowStatusEnum.INTERVIEW_3.getCode())) {
String tips = getInterviewTips(partnerLineId, OperateTypeEnum.MODIFY_INTERVIEW_TIME, "");
if (StringUtils.isNotEmpty(tips)) {
return tips + ("修改面试预约时间");
} else {
return getInterviewTips(partnerLineId, OperateTypeEnum.INTERVIEW_APPOINTMENT, "提交面试预约时间");
}
} else if (workflowStage.equals(WorkflowStageEnum.INTERVIEW.getCode()) && workflowStatus.equals(WorkflowStatusEnum.INTERVIEW_4.getCode())) {
return getInterviewTips(partnerLineId, OperateTypeEnum.FINISH_INTERVIEW, "结束面试");
}else if (workflowStage.equals(WorkflowStageEnum.INTERVIEW.getCode()) && workflowStatus.equals(WorkflowStatusEnum.INTERVIEW_5.getCode())) {
HyPartnerCertificationInfoDO partnerCertificationInfoDO = hyPartnerCertificationInfoMapper.selectByPartnerLineId(partnerLineId);
String intentionContractNo = null;
if(partnerCertificationInfoDO != null){
intentionContractNo = partnerCertificationInfoDO.getIntentionContractNo();
}
return getInterviewTips(partnerLineId, OperateTypeEnum.FINISH_INTERVIEW, "发起加盟商资质审核|"+intentionContractNo);
}else if (workflowStage.equals(WorkflowStageEnum.INTERVIEW.getCode()) && workflowStatus.equals(WorkflowStatusEnum.INTERVIEW_6.getCode())) {
HyPartnerCertificationInfoDO partnerCertificationInfoDO = hyPartnerCertificationInfoMapper.selectByPartnerLineId(partnerLineId);
String intentionContractNo = null;
if(partnerCertificationInfoDO != null){
intentionContractNo = partnerCertificationInfoDO.getIntentionContractNo();
}
return getInterviewTips(partnerLineId, OperateTypeEnum.FINISH_INTERVIEW, "审核通过|"+intentionContractNo);
}
return null;
}
public String getInterviewTips(Long partnerLineId, OperateTypeEnum operateTypeEnum, String action) {
StringBuffer sb = new StringBuffer();
sb.append(StringUtil.REPLACE_0)
.append(" ")
.append(StringUtil.REPLACE_1)
.append("").append(StringUtil.REPLACE_2).append(" ").append(action);
String content = sb.toString();
return getSuitableTipsInfo(content, partnerLineId,
operateTypeEnum,
OperateLogFieldValueEnum.OPERATE_USER_NAME.getCode(),
OperateLogFieldValueEnum.MOBILE.getCode(),
OperateLogFieldValueEnum.OPERATE_TIME.getCode());
}
public String getSuitableTipsInfo(String content, Long partnerLineId, OperateTypeEnum operateTypeEnum, String... replaceKeys) {
List<HyPartnerTaskInfoLogDO> hyPartnerTaskInfoLogDOS = hyPartnerTaskInfoLogMapper.selectByPartnerLineIdAndOperateType(partnerLineId, operateTypeEnum.getCode());
if (CollectionUtils.isEmpty(hyPartnerTaskInfoLogDOS)) {
return null;
}
HyPartnerTaskInfoLogDO hyPartnerTaskInfoLogDO = hyPartnerTaskInfoLogDOS.get(0);
String fieldCopy = hyPartnerTaskInfoLogDO.getFieldCopy();
List<LogFieldDTO> logFieldDTOS = JSONObject.parseArray(fieldCopy, LogFieldDTO.class);
List<String> params = new ArrayList<>();
for (String replaceKey : replaceKeys) {
String value = "";
Optional<LogFieldDTO> logFieldDTOOptional = logFieldDTOS.stream().filter(l -> l.getCode().equals(replaceKey)).findFirst();
if (logFieldDTOOptional.isPresent()) {
value = logFieldDTOOptional.get().getValue();
try {
value = DateUtil.format(DateUtil.parseDateTime(value), "yyyy/MM/dd HH:mm:ss");
} catch (Exception e) {
//异常代表不是时间格式,不做处理
}
}
params.add(value);
}
return MessageFormat.format(content, params.toArray());
}
}

View File

@@ -200,8 +200,12 @@ public class FlowServiceImpl implements FlowService {
hyPartnerInterviewDO.setUpdateTime(new Date()); hyPartnerInterviewDO.setUpdateTime(new Date());
//更新面试信息 //更新面试信息
//更新面试状态 //更新面试状态
hyPartnerInterviewDO.setStatus(null);
interviewDAO.updateInterviewWorkflowStatus(request.getInterviewPlanId(), WorkflowStatusEnum.INTERVIEW_5); interviewDAO.updateInterviewWorkflowStatus(request.getInterviewPlanId(), WorkflowStatusEnum.INTERVIEW_5);
//获取当前操作人
LoginUserInfo operator = CurrentUserHolder.getUser();
hyPartnerInterviewDO.setRecorder(operator.getName()+" "+operator.getMobile());
hyPartnerInterviewDO.setRecordTime(new Date());
hyPartnerInterviewDO.setAuthCode(authCode); hyPartnerInterviewDO.setAuthCode(authCode);
hyPartnerInterviewMapper.updateByPrimaryKeySelective(hyPartnerInterviewDO); hyPartnerInterviewMapper.updateByPrimaryKeySelective(hyPartnerInterviewDO);
@@ -213,7 +217,6 @@ public class FlowServiceImpl implements FlowService {
hyPartnerLineInfoMapper.updateByPrimaryKeySelective(hyPartnerLineInfoDO); hyPartnerLineInfoMapper.updateByPrimaryKeySelective(hyPartnerLineInfoDO);
} }
//记录日志 //记录日志
LoginUserInfo operator = CurrentUserHolder.getUser();
CreateQualifyVerifyDTO log = CreateQualifyVerifyDTO.builder().operateUserId(operator.getUserId()).operateUsername(operator.getName()).operateTime(DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_SEC)) CreateQualifyVerifyDTO log = CreateQualifyVerifyDTO.builder().operateUserId(operator.getUserId()).operateUsername(operator.getName()).operateTime(DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_SEC))
.summary(request.getSummary()).qualiVerifyContent(JSON.toJSONString(partnerCertificationInfoDO)).build(); .summary(request.getSummary()).qualiVerifyContent(JSON.toJSONString(partnerCertificationInfoDO)).build();
logService.recordBizLog(operator,hyPartnerInterviewDO.getPartnerLineId(), OperateTypeEnum.CREATE_QUALIFYVERIFY,log); logService.recordBizLog(operator,hyPartnerInterviewDO.getPartnerLineId(), OperateTypeEnum.CREATE_QUALIFYVERIFY,log);

View File

@@ -12,7 +12,6 @@ import com.cool.store.context.LoginUserInfo;
import com.cool.store.context.PartnerUserHolder; import com.cool.store.context.PartnerUserHolder;
import com.cool.store.dao.EnterpriseUserDAO; import com.cool.store.dao.EnterpriseUserDAO;
import com.cool.store.dao.HyInterviewDAO; import com.cool.store.dao.HyInterviewDAO;
import com.cool.store.dao.HyPartnerTaskInfoLogDAO;
import com.cool.store.dto.calendar.CreateCalendarEventDTO; import com.cool.store.dto.calendar.CreateCalendarEventDTO;
import com.cool.store.dto.calendar.DeleteCalendarEventDTO; import com.cool.store.dto.calendar.DeleteCalendarEventDTO;
import com.cool.store.dto.calendar.UserCalendarsEventDTO; import com.cool.store.dto.calendar.UserCalendarsEventDTO;
@@ -102,9 +101,6 @@ public class InterviewServiceImpl implements InterviewService {
@Autowired @Autowired
private EnterpriseUserDAO enterpriseUserDAO; private EnterpriseUserDAO enterpriseUserDAO;
@Autowired
private HyPartnerTaskInfoLogMapper hyPartnerTaskInfoLogMapper;
@Override @Override
public List<InterviewVO> getInterviewList(GetInterviewListReq request) { public List<InterviewVO> getInterviewList(GetInterviewListReq request) {
List<InterviewVO> interviewList = hyPartnerInterviewPlanMapper.getInterviewList(request); List<InterviewVO> interviewList = hyPartnerInterviewPlanMapper.getInterviewList(request);
@@ -629,39 +625,4 @@ public class InterviewServiceImpl implements InterviewService {
hyPartnerInterviewPlanMapper.updateByPrimaryKeySelective(hyPartnerInterviewPlanDO); hyPartnerInterviewPlanMapper.updateByPrimaryKeySelective(hyPartnerInterviewPlanDO);
} }
@Override
public String getLastUpdateTimeInfo(GetLastUpdateTimeInfoReq request) throws ApiException {
String content = " 修改面试预约时间";
String operatorName = null;
String operatorMobile = null;
String operatorTime = null;
List<HyPartnerTaskInfoLogDO> hyPartnerTaskInfoLogDOS = hyPartnerTaskInfoLogMapper.selectByPartnerLineIdAndOperateType(request.getPartnerLineId(), OperateTypeEnum.MODIFY_INTERVIEW_TIME.getCode());
if(CollectionUtils.isEmpty(hyPartnerTaskInfoLogDOS)){
hyPartnerTaskInfoLogDOS = hyPartnerTaskInfoLogMapper.selectByPartnerLineIdAndOperateType(request.getPartnerLineId(), OperateTypeEnum.INTERVIEW_APPOINTMENT.getCode());
if(CollectionUtils.isEmpty(hyPartnerTaskInfoLogDOS)){
return null;
}
content = " 提交面试预约时间";
}
HyPartnerTaskInfoLogDO hyPartnerTaskInfoLogDO = hyPartnerTaskInfoLogDOS.get(0);
String fieldCopy = hyPartnerTaskInfoLogDO.getFieldCopy();
List<LogFieldDTO> logFieldDTOS = JSONObject.parseArray(fieldCopy, LogFieldDTO.class);
for(LogFieldDTO logFieldDTO:logFieldDTOS){
if(OperateLogFieldValueEnum.OPERATE_TIME.getCode().equals(logFieldDTO.getCode())){
operatorTime = logFieldDTO.getValue();
}
if(OperateLogFieldValueEnum.MOBILE.getCode().equals(logFieldDTO.getCode())){
operatorMobile = logFieldDTO.getValue();
}
if(OperateLogFieldValueEnum.OPERATE_USER_NAME.getCode().equals(logFieldDTO.getCode())){
operatorName = logFieldDTO.getValue();
}
}
StringBuffer sb = new StringBuffer();
sb.append(operatorName)
.append(" "+operatorMobile)
.append("").append(DateUtil.format(DateUtil.parseDateTime(operatorTime),"yyyy/MM/dd HH:mm:ss")).append(content);
return sb.toString();
}
} }

View File

@@ -1,5 +1,6 @@
package com.cool.store.service.impl; package com.cool.store.service.impl;
import com.cool.store.dto.trtc.callback.VideoCallBackDTO;
import com.cool.store.mapper.HyPartnerInterviewMapper; import com.cool.store.mapper.HyPartnerInterviewMapper;
import com.cool.store.request.TRTCVideoCallBackReq; import com.cool.store.request.TRTCVideoCallBackReq;
import com.cool.store.service.TRTCVideoService; import com.cool.store.service.TRTCVideoService;
@@ -15,12 +16,19 @@ public class TRTCVideoServiceImpl implements TRTCVideoService {
/** /**
* 音视频上传成功后的回调处理 * 音视频上传成功后的回调处理
*/ */
// @Override
// public void handleVideoCallBack(TRTCVideoCallBackReq req) {
// //将视频播放地址拼接到对应的面试信息字段中
// String videoUrl = req.getEventInfo().getPayLoad().getTencentVod().getVideoUrl();
// String roomId = req.getEventInfo().getRoomId();
// interviewMapper.addVideoUrl(roomId, videoUrl);
// }
@Override @Override
public void handleVideoCallBack(TRTCVideoCallBackReq req) { public void handleVideoCallBack(VideoCallBackDTO videoCallBackDTO) {
//将视频播放地址拼接到对应的面试信息字段中 //将视频播放地址拼接到对应的面试信息字段中
String videoUrl = req.getEventInfo().getPayLoad().getTencentVod().getVideoUrl(); String videoUrl = videoCallBackDTO.getEventInfo().getPayload().getTencentVod().getVideoUrl();
String roomId = req.getEventInfo().getRoomId(); String roomId = videoCallBackDTO.getEventInfo().getRoomId();
interviewMapper.addVideoUrl(roomId, videoUrl); interviewMapper.addVideoUrl(roomId, videoUrl);
} }
} }

View File

@@ -45,6 +45,7 @@ public class TokenValidateFilter implements Filter {
Lists.newArrayList("/web/check/ok","/check/ok", Lists.newArrayList("/web/check/ok","/check/ok",
"/partner/pc/doc.html","/partner/pc/v2/api-docs","/**/test/**","/partner/pc/feiShuLogin","/partner/pc/oss/getUploadFileConfig", "/partner/pc/doc.html","/partner/pc/v2/api-docs","/**/test/**","/partner/pc/feiShuLogin","/partner/pc/oss/getUploadFileConfig",
"/**/swagger*/**", "/**/webjars/**", "/**/swagger*/**", "/**/webjars/**",
"/partner/pc/**",
//腾讯音视频回调,单独做验签 //腾讯音视频回调,单独做验签
"/partner/pc/video/**", "/partner/pc/video/**",
//TODO 800回调地址暂时不做验证 //TODO 800回调地址暂时不做验证

View File

@@ -0,0 +1,34 @@
package com.cool.store.controller;
import com.cool.store.exception.ApiException;
import com.cool.store.request.GetTipsInfoReq;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.CommonService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
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;
/**
* @Author: young.yu
* @Date: 2023-06-28 21:33
* @Description:
*/
@RestController
@RequestMapping("/common")
@Api(tags = "通用信息")
public class CommonController {
@Autowired
private CommonService commonService;
@PostMapping("/getTipsInfo")
@ApiOperation("获取面试最新更新信息")
public ResponseResult getTipsInfo(@RequestBody GetTipsInfoReq request) throws ApiException {
String res = commonService.getTipsInfo(request);
return ResponseResult.success(res);
}
}

View File

@@ -94,10 +94,4 @@ public class InterviewController {
// interviewService.rejectInterview(request); // interviewService.rejectInterview(request);
// return ResponseResult.success(); // return ResponseResult.success();
// } // }
@PostMapping("/getLastUpdateTimeInfo")
@ApiOperation("获取面试最新更新信息")
public ResponseResult getLastUpdateTimeInfo(@RequestBody GetLastUpdateTimeInfoReq request) throws ApiException {
String res = interviewService.getLastUpdateTimeInfo(request);
return ResponseResult.success(res);
}
} }

View File

@@ -1,6 +1,7 @@
package com.cool.store.controller; package com.cool.store.controller;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.cool.store.dto.trtc.callback.VideoCallBackDTO;
import com.cool.store.request.TRTCVideoCallBackReq; import com.cool.store.request.TRTCVideoCallBackReq;
import com.cool.store.response.ResponseResult; import com.cool.store.response.ResponseResult;
import com.cool.store.service.TRTCVideoService; import com.cool.store.service.TRTCVideoService;
@@ -22,21 +23,37 @@ public class VideoController {
@Autowired @Autowired
private TRTCVideoService videoService; private TRTCVideoService videoService;
// @PostMapping("/callback")
// @ApiOperation("音视频回调(腾讯云回调)")
// public ResponseResult videoCallback(@RequestBody String requestBody) {
// log.info("腾讯音视频上传完成回调request{}", JSONObject.toJSONString(requestBody));
// //由于腾讯云恶事做尽,它的回调参数不是驼峰法,首字母是大写,导致 SpringMVC 映射不上,只能手动映射了
// TRTCVideoCallBackReq req = JSONObject.parseObject(requestBody, TRTCVideoCallBackReq.class);
// //不是音视频上传的回调
// if (!"311".equals(req.getEventType())) {
// return null;
// }
// if (!"0".equals(req.getEventInfo().getPayLoad().getStatus())) {
// log.error("腾讯音视频录制视频上传错误request\t{}", req);
// return null;
// }
// videoService.handleVideoCallBack(req);
// return new ResponseResult(0, "腾讯云回调音视频回调数据接收成功");
// }
@PostMapping("/callback") @PostMapping("/callback")
@ApiOperation("音视频回调(腾讯云回调)") @ApiOperation("音视频回调(腾讯云回调)")
public ResponseResult videoCallback(@RequestBody String requestBody) { public ResponseResult videoCallback(@RequestBody VideoCallBackDTO videoCallBackDTO) {
log.info("腾讯音视频上传完成回调request{}", JSONObject.toJSONString(requestBody)); log.info("腾讯音视频上传完成回调request{}", JSONObject.toJSONString(videoCallBackDTO));
//由于腾讯云恶事做尽,它的回调参数不是驼峰法,首字母是大写,导致 SpringMVC 映射不上,只能手动映射了
TRTCVideoCallBackReq req = JSONObject.parseObject(requestBody, TRTCVideoCallBackReq.class);
//不是音视频上传的回调 //不是音视频上传的回调
if (!"311".equals(req.getEventType())) { if (311!= videoCallBackDTO.getEventType()) {
return null; return null;
} }
if (!"0".equals(req.getEventInfo().getPayLoad().getStatus())) { if (0 !=videoCallBackDTO.getEventInfo().getPayload().getStatus()) {
log.error("腾讯音视频录制视频上传错误request\t{}", req); log.error("腾讯音视频录制视频上传错误request\t{}", videoCallBackDTO);
return null; return null;
} }
videoService.handleVideoCallBack(req); videoService.handleVideoCallBack(videoCallBackDTO);
return new ResponseResult(0, "腾讯云回调音视频回调数据接收成功"); return new ResponseResult(0, "腾讯云回调音视频回调数据接收成功");
} }