wang0018 5 years ago
parent
commit
cace014673
  1. 48
      mt/src/main/java/com/ccsens/mt/api/KCPlayerController.java
  2. 6
      mt/src/main/java/com/ccsens/mt/bean/vo/TableVo.java
  3. 55
      mt/src/main/java/com/ccsens/mt/service/CompeteTaskService.java
  4. 5
      mt/src/main/java/com/ccsens/mt/service/IKCPlayerService.java
  5. 54
      mt/src/main/java/com/ccsens/mt/service/KCPlayerService.java
  6. 2
      mt/src/main/java/com/ccsens/mt/util/Constant.java
  7. 104
      util/src/main/java/com/ccsens/util/KCPlayerSignature.java

48
mt/src/main/java/com/ccsens/mt/api/KCPlayerController.java

@ -0,0 +1,48 @@
package com.ccsens.mt.api;
import com.ccsens.cloudutil.annotation.MustLogin;
import com.ccsens.mt.bean.dto.CompeteDto;
import com.ccsens.mt.bean.vo.CompeteVo;
import com.ccsens.mt.service.IKCPlayerService;
import com.ccsens.util.JsonResponse;
import com.ccsens.util.bean.dto.QueryDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@Slf4j
@Api(tags = "云点播", description = "")
@RestController
@RequestMapping("/kcPlayer")
public class KCPlayerController {
@Resource
private IKCPlayerService kcPlayerService;
@ApiOperation(value = "查看云点播签名", notes = "从redis获取云点播签名,有则返回,没有则调用工具类查询,存入redis并返回")
@RequestMapping(value = "/get", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<String> getSignature(Long id) {
log.info("查看云点播签名");
String signature = kcPlayerService.getSignature(id);
log.info("查看云点播签名:{}",signature);
return JsonResponse.newInstance().ok(signature);
}
@ApiOperation(value = "查看云点播签名", notes = "从redis获取云点播签名,有则返回,没有则调用工具类查询,存入redis并返回")
@RequestMapping(value = "/receive", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse receive(@RequestBody Map map) {
log.info("接受文件上传通知:{}",map);
return JsonResponse.newInstance().ok();
}
}

6
mt/src/main/java/com/ccsens/mt/bean/vo/TableVo.java

@ -141,7 +141,7 @@ public class TableVo {
public static class CompeteProjectConfig{
@ApiModelProperty("参赛id")
private Long projectId;
@ApiModelProperty("参赛项目")
@ApiModelProperty("参赛项目名字")
private String projectName;
@ApiModelProperty("参赛人/队伍")
private int joinNum;
@ -153,9 +153,9 @@ public class TableVo {
private int games;
@ApiModelProperty("总时间")
private int timeSum;
@ApiModelProperty("项目开始时间")
@ApiModelProperty("比赛项目开始时间")
private Long startTime;
@ApiModelProperty("项目结束时间")
@ApiModelProperty("比赛项目结束时间")
private Long endTime;
public int getGames(){

55
mt/src/main/java/com/ccsens/mt/service/CompeteTaskService.java

@ -75,7 +75,9 @@ public class CompeteTaskService implements ICompeteTaskService{
public List<TableVo.CompeteProjectConfig> updateCompeteProjectConfig(ProvinceCompeteDto.UpdateCompeteProjectConfig param,String token) {
//获取比赛类型
AtomicInteger type = new AtomicInteger();
if(CollectionUtil.isNotEmpty(param.getUpdateCompeteTaskList())){
if(CollectionUtil.isEmpty(param.getUpdateCompeteTaskList())) {
return new ArrayList<>();
}
param.getUpdateCompeteTaskList().forEach(projectConfig -> {
//获取项目
CompeteProject project = competeProjectDao.selectByPrimaryKey(projectConfig.getProjectId());
@ -109,14 +111,13 @@ public class CompeteTaskService implements ICompeteTaskService{
// 生成出场顺序表,存入数据库。在tall内添加对应的任务
setStartOrder(competeProjectConfig,param.getProjectId(),param.getTallRoleId(),token);
});
}
return projectConfigDao.queryProjectConfig(type.get());
}
/**
* 修改配置时生成出场顺序
*/
public void setStartOrder(CompeteProjectConfig projectConfig, Long tallProjectId,Long tallRoleId,String token) {
if (ObjectUtil.isNotNull(projectConfig)) {
//查找项目
CompeteProject project = competeProjectDao.selectByPrimaryKey(projectConfig.getProjectId());
@ -156,12 +157,16 @@ public class CompeteTaskService implements ICompeteTaskService{
// 修改tall的任务
TallTaskDto.UpdateTaskInfo updateTaskInfo = new TallTaskDto.UpdateTaskInfo();
updateTaskInfo.setId(competeStartOrder.getId());
updateTaskInfo.setBeginTime(competeStartOrder.getId());
updateTaskInfo.setBeginTime(competeStartOrder.getEndTime());
updateTaskInfo.setBeginTime(competeStartOrder.getStartTime());
updateTaskInfo.setEndTime(competeStartOrder.getEndTime());
updateTaskInfo.setToken(token);
log.info("修改tall的任务信息:{}",updateTaskInfo);
tallFeignClient.updataTask(updateTaskInfo);
log.info("修改tall的任务信息后返回:{}",updateTaskInfo);
JsonResponse<TaskVo.NormalTask> normalTaskJsonResponse = tallFeignClient.updataTask(updateTaskInfo);
log.info("修改tall的任务信息后返回:{}",normalTaskJsonResponse);
//失败return
if (ObjectUtil.isNull(normalTaskJsonResponse) || normalTaskJsonResponse.getCode() != 200){
return;
}
}
startOrderMapper.updateByPrimaryKeySelective(competeStartOrder);
@ -177,12 +182,14 @@ public class CompeteTaskService implements ICompeteTaskService{
addTask.setToken(token);
log.info("在tall内添加任务:{}",addTask);
JsonResponse<TaskVo.NormalTask> normalTaskJsonResponse = tallFeignClient.saveTask(addTask);
//异常return
log.info("添加任务后返回:{}",normalTaskJsonResponse);
if (ObjectUtil.isNotNull(normalTaskJsonResponse)) {
TaskVo.NormalTask normalTask = normalTaskJsonResponse.getData();
if (ObjectUtil.isNotNull(normalTask)) {
taskId = normalTask.getDetailId();
}
if (ObjectUtil.isNull(normalTaskJsonResponse) || normalTaskJsonResponse.getCode() != 200) {
return;
}
TaskVo.NormalTask normalTask = normalTaskJsonResponse.getData();
if (ObjectUtil.isNotNull(normalTask)) {
taskId = normalTask.getDetailId();
}
//添加出场顺序信息
CompeteStartOrder competeStartOrder = new CompeteStartOrder();
@ -218,10 +225,7 @@ public class CompeteTaskService implements ICompeteTaskService{
long orderTime = 0;
if(order != 0) {
orderTime = (long) Math.floor((projectConfig.getEndTime() - projectStartTime) / order);
}else {
log.info("场次为0的比赛:{}------{}",project,projectConfig);
}
// long orderTime = (long) Math.floor((projectConfig.getEndTime() - projectStartTime) / order);
//场次
int competeOrder = 1;
//场地
@ -244,8 +248,12 @@ public class CompeteTaskService implements ICompeteTaskService{
updateTaskInfo.setBeginTime(competeStartOrder.getEndTime());
updateTaskInfo.setToken(token);
log.info("修改tall的任务信息:{}",updateTaskInfo);
tallFeignClient.updataTask(updateTaskInfo);
log.info("修改tall的任务信息后返回:{}",updateTaskInfo);
JsonResponse<TaskVo.NormalTask> normalTaskJsonResponse = tallFeignClient.updataTask(updateTaskInfo);
log.info("修改tall的任务信息后返回:{}",normalTaskJsonResponse);
//失败return
if (ObjectUtil.isNull(normalTaskJsonResponse) || normalTaskJsonResponse.getCode() != 200){
return;
}
}
startOrderMapper.updateByPrimaryKeySelective(competeStartOrder);
@ -262,11 +270,14 @@ public class CompeteTaskService implements ICompeteTaskService{
log.info("在tall内添加任务:{}",addTask);
JsonResponse<TaskVo.NormalTask> normalTaskJsonResponse = tallFeignClient.saveTask(addTask);
log.info("添加任务后返回:{}",normalTaskJsonResponse);
if (ObjectUtil.isNotNull(normalTaskJsonResponse)) {
TaskVo.NormalTask normalTask = normalTaskJsonResponse.getData();
if (ObjectUtil.isNotNull(normalTask)) {
taskId = normalTask.getDetailId();
}
//异常return
log.info("添加任务后返回:{}",normalTaskJsonResponse);
if (ObjectUtil.isNull(normalTaskJsonResponse) || normalTaskJsonResponse.getCode() != 200) {
return;
}
TaskVo.NormalTask normalTask = normalTaskJsonResponse.getData();
if (ObjectUtil.isNotNull(normalTask)) {
taskId = normalTask.getDetailId();
}
//添加出场顺序信息
CompeteStartOrder competeStartOrder = new CompeteStartOrder();

5
mt/src/main/java/com/ccsens/mt/service/IKCPlayerService.java

@ -0,0 +1,5 @@
package com.ccsens.mt.service;
public interface IKCPlayerService {
String getSignature(Long id);
}

54
mt/src/main/java/com/ccsens/mt/service/KCPlayerService.java

@ -0,0 +1,54 @@
package com.ccsens.mt.service;
import cn.hutool.core.util.ObjectUtil;
import com.ccsens.mt.util.Constant;
import com.ccsens.util.CodeEnum;
import com.ccsens.util.KCPlayerSignature;
import com.ccsens.util.RedisUtil;
import com.ccsens.util.exception.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Random;
@Slf4j
@Service
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class KCPlayerService implements IKCPlayerService{
@Resource
private RedisUtil redisUtil;
/**
* 获取云点播签名
* @return 返回签名
* @param id
*/
@Override
public String getSignature(Long id) {
String signature;
//查询redis
Object o = redisUtil.get(Constant.Redis.KC_PLAYER_SIGNATURE + id);
if(ObjectUtil.isNotNull(o)){
return (String) o;
}
KCPlayerSignature sign = new KCPlayerSignature();
sign.setCurrentTime(System.currentTimeMillis() / 1000);
sign.setRandom(new Random().nextInt(java.lang.Integer.MAX_VALUE));
// 签名有效期:2天
sign.setSignValidDuration(3600 * 24 * 2);
try {
signature = sign.getUploadSignature(id);
log.info("获取云点播签名成功:{}",signature);
//存入redis
redisUtil.set(Constant.Redis.KC_PLAYER_SIGNATURE + id,signature,3600 * 24);
} catch (Exception e) {
log.error("获取云点播签名失败",e);
throw new BaseException(CodeEnum.SYS_ERROR);
}
return signature;
}
}

2
mt/src/main/java/com/ccsens/mt/util/Constant.java

@ -31,6 +31,8 @@ public class Constant {
public final static long COMPETE_COMPANY_TIME = 10 * 24 * 60 * 60;
// 远程比赛参赛单位
public final static String COMPETE_LEVEL = "compete_";
//云点播签名
public final static String KC_PLAYER_SIGNATURE = "kc_player_signature_";
}
public static final int VOTE_TOTAL = 2;

104
util/src/main/java/com/ccsens/util/KCPlayerSignature.java

@ -0,0 +1,104 @@
package com.ccsens.util;
import java.util.Base64;
import java.util.Random;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
/**
* 签名工具类
* @author
*/
public class KCPlayerSignature{
private String secretId = "AKIDTr6B7uA2qCRWRDRXyeUAZpkfR2tupVFu";
private String secretKey = "wVtKAuXEjXFpxQmz9PM6hWallNEyZ0Na";
private long currentTime;
private int random;
private int signValidDuration;
//签名算法
private static final String HMAC_ALGORITHM = "HmacSHA1";
private static final String CONTENT_CHARSET = "UTF-8";
public static byte[] byteMerger(byte[] byte1, byte[] byte2) {
byte[] byte3 = new byte[byte1.length + byte2.length];
System.arraycopy(byte1, 0, byte3, 0, byte1.length);
System.arraycopy(byte2, 0, byte3, byte1.length, byte2.length);
return byte3;
}
// 获取签名
public String getUploadSignature(Long id) throws Exception {
String strSign = "";
String contextStr = "";
// 生成原始参数字符串
long endTime = (currentTime + signValidDuration);
contextStr += "secretId=" + java.net.URLEncoder.encode(secretId, "utf8");
contextStr += "&currentTimeStamp=" + currentTime;
contextStr += "&expireTime=" + endTime;
contextStr += "&random=" + random;
contextStr += "&sourceContext=" + id;
try {
Mac mac = Mac.getInstance(HMAC_ALGORITHM);
SecretKeySpec secretKey = new SecretKeySpec(this.secretKey.getBytes(CONTENT_CHARSET), mac.getAlgorithm());
mac.init(secretKey);
byte[] hash = mac.doFinal(contextStr.getBytes(CONTENT_CHARSET));
byte[] sigBuf = byteMerger(hash, contextStr.getBytes("utf8"));
strSign = base64Encode(sigBuf);
strSign = strSign.replace(" ", "").replace("\n", "").replace("\r", "");
} catch (Exception e) {
throw e;
}
return strSign;
}
private String base64Encode(byte[] buffer) {
Base64.Encoder encoder = Base64.getEncoder();
return encoder.encodeToString(buffer);
}
public void setSecretId(String secretId) {
this.secretId = secretId;
}
public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
}
public void setCurrentTime(long currentTime) {
this.currentTime = currentTime;
}
public void setRandom(int random) {
this.random = random;
}
public void setSignValidDuration(int signValidDuration) {
this.signValidDuration = signValidDuration;
}
static void main(String[] args) {
KCPlayerSignature sign = new KCPlayerSignature();
// 设置 App 的云 API 密钥
sign.setSecretId("个人 API 密钥中的 Secret Id");
sign.setSecretKey("个人 API 密钥中的 Secret Key");
sign.setCurrentTime(System.currentTimeMillis() / 1000);
sign.setRandom(new Random().nextInt(java.lang.Integer.MAX_VALUE));
// 签名有效期:2天
sign.setSignValidDuration(3600 * 24 * 2);
try {
String signature = sign.getUploadSignature(id);
System.out.println("signature : " + signature);
} catch (Exception e) {
System.out.print("获取签名失败");
e.printStackTrace();
}
}
}
Loading…
Cancel
Save