|
|
@ -3,13 +3,19 @@ package com.ccsens.mt.service; |
|
|
|
import cn.hutool.core.collection.CollectionUtil; |
|
|
|
import cn.hutool.core.lang.Snowflake; |
|
|
|
import cn.hutool.core.util.ObjectUtil; |
|
|
|
import com.ccsens.cloudutil.bean.tall.dto.TallTaskDto; |
|
|
|
import com.ccsens.cloudutil.bean.tall.vo.TaskVo; |
|
|
|
import com.ccsens.cloudutil.feign.TallFeignClient; |
|
|
|
import com.ccsens.mt.bean.dto.CompeteDto; |
|
|
|
import com.ccsens.mt.bean.dto.ProvinceCompeteDto; |
|
|
|
import com.ccsens.mt.bean.po.CompeteProject; |
|
|
|
import com.ccsens.mt.bean.po.CompeteProjectConfig; |
|
|
|
import com.ccsens.mt.bean.po.CompeteProjectConfigExample; |
|
|
|
import com.ccsens.mt.bean.po.*; |
|
|
|
import com.ccsens.mt.bean.vo.ProvinceCompeteVo; |
|
|
|
import com.ccsens.mt.bean.vo.TableVo; |
|
|
|
import com.ccsens.mt.persist.dao.CompeteProjectConfigDao; |
|
|
|
import com.ccsens.mt.persist.dao.CompeteProjectDao; |
|
|
|
import com.ccsens.mt.persist.dao.*; |
|
|
|
import com.ccsens.mt.persist.mapper.CompeteProjectPlayerMapper; |
|
|
|
import com.ccsens.mt.persist.mapper.CompeteStartOrderMapper; |
|
|
|
import com.ccsens.mt.util.Constant; |
|
|
|
import com.ccsens.util.JsonResponse; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Propagation; |
|
|
@ -32,14 +38,42 @@ public class CompeteTaskService implements ICompeteTaskService{ |
|
|
|
@Resource |
|
|
|
private CompeteProjectDao competeProjectDao; |
|
|
|
@Resource |
|
|
|
private CompeteTimeDao competeTimeDao; |
|
|
|
@Resource |
|
|
|
private CompeteProjectPlayerMapper projectPlayerMapper; |
|
|
|
@Resource |
|
|
|
private Snowflake snowflake; |
|
|
|
@Resource |
|
|
|
private CompeteStartOrderMapper startOrderMapper; |
|
|
|
@Resource |
|
|
|
private CompeteTeamDao competeTeamDao; |
|
|
|
@Resource |
|
|
|
private TallFeignClient tallFeignClient; |
|
|
|
@Resource |
|
|
|
private CompeteJudgmentDao competeJudgmentDao; |
|
|
|
|
|
|
|
/** |
|
|
|
* 查看项目的日程配置信息 |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public List<TableVo.CompeteProjectConfig> queryCompeteConfig(CompeteDto.CompeteTime param) { |
|
|
|
CompeteTime competeTime = competeTimeDao.selectByPrimaryKey(param.getCompeteTimeId()); |
|
|
|
List<TableVo.CompeteProjectConfig> competeProjectConfigList = new ArrayList<>(); |
|
|
|
if(ObjectUtil.isNotNull(competeTime)) { |
|
|
|
competeProjectConfigList = projectConfigDao.queryProjectConfig(competeTime.getType()); |
|
|
|
} |
|
|
|
return competeProjectConfigList; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 修改项目的日程配置 |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public List<TableVo.CompeteProjectConfig> updateCompeteProjectConfig(List<ProvinceCompeteDto.UpdateCompeteTask> param) { |
|
|
|
public List<TableVo.CompeteProjectConfig> updateCompeteProjectConfig(ProvinceCompeteDto.UpdateCompeteProjectConfig param) { |
|
|
|
//获取比赛类型
|
|
|
|
AtomicInteger type = new AtomicInteger(); |
|
|
|
if(CollectionUtil.isNotEmpty(param)){ |
|
|
|
param.forEach(projectConfig -> { |
|
|
|
if(CollectionUtil.isNotEmpty(param.getUpdateCompeteTaskList())){ |
|
|
|
param.getUpdateCompeteTaskList().forEach(projectConfig -> { |
|
|
|
//获取项目
|
|
|
|
CompeteProject project = competeProjectDao.selectByPrimaryKey(projectConfig.getProjectId()); |
|
|
|
if(ObjectUtil.isNotNull(project)){ |
|
|
@ -70,8 +104,183 @@ public class CompeteTaskService implements ICompeteTaskService{ |
|
|
|
projectConfigDao.insertSelective(competeProjectConfig); |
|
|
|
} |
|
|
|
// TODO 生成出场顺序表,存入数据库。在tall内添加对应的任务
|
|
|
|
setStartOrder(competeProjectConfig,param.getProjectId()); |
|
|
|
}); |
|
|
|
} |
|
|
|
return projectConfigDao.queryProjectConfig(type.get()); |
|
|
|
} |
|
|
|
/** |
|
|
|
* 修改配置时生成出场顺序(先删除之前的数据) |
|
|
|
*/ |
|
|
|
public void setStartOrder(CompeteProjectConfig projectConfig, Long tallProjectId) { |
|
|
|
if (ObjectUtil.isNotNull(projectConfig)) { |
|
|
|
//查找项目
|
|
|
|
CompeteProject project = competeProjectDao.selectByPrimaryKey(projectConfig.getProjectId()); |
|
|
|
if (ObjectUtil.isNotNull(project)) { |
|
|
|
//判断是团队还是个人项目
|
|
|
|
if (project.getTeam() == 0) { |
|
|
|
//个人项目查找所有参赛信息
|
|
|
|
CompeteProjectPlayerExample projectPlayerExample = new CompeteProjectPlayerExample(); |
|
|
|
projectPlayerExample.createCriteria().andProjectIdEqualTo(project.getId()); |
|
|
|
List<CompeteProjectPlayer> projectPlayerList = projectPlayerMapper.selectByExample(projectPlayerExample); |
|
|
|
if (CollectionUtil.isNotEmpty(projectPlayerList)) { |
|
|
|
//计算场次
|
|
|
|
int order = (int) Math.ceil(projectConfig.getSiteNum() / projectPlayerList.size()); |
|
|
|
//计算每个场次时间
|
|
|
|
long projectStartTime = projectConfig.getStartTime() + Constant.UPLOAD_VIDEO_TIME; |
|
|
|
long orderTime = (long) Math.floor((projectConfig.getEndTime() - projectStartTime) / order); |
|
|
|
//场次
|
|
|
|
int competeOrder = 1; |
|
|
|
//场地
|
|
|
|
int site = 1; |
|
|
|
for (CompeteProjectPlayer projectPlayer : projectPlayerList) { |
|
|
|
CompeteStartOrderExample startOrderExample = new CompeteStartOrderExample(); |
|
|
|
startOrderExample.createCriteria().andPlayerIdEqualTo(projectPlayer.getId()).andProjectIdEqualTo(project.getId()); |
|
|
|
List<CompeteStartOrder> startOrderList = startOrderMapper.selectByExample(startOrderExample); |
|
|
|
if(CollectionUtil.isNotEmpty(startOrderList)){ |
|
|
|
CompeteStartOrder competeStartOrder = startOrderList.get(0); |
|
|
|
competeStartOrder.setSite((byte) site); |
|
|
|
competeStartOrder.setCompeteOrder((byte) competeOrder); |
|
|
|
if(orderTime > 0 && (competeStartOrder.getStartTime() == projectStartTime || competeStartOrder.getEndTime() == projectStartTime + orderTime)){ |
|
|
|
competeStartOrder.setStartTime(projectStartTime); |
|
|
|
competeStartOrder.setEndTime(projectStartTime + orderTime); |
|
|
|
// TODO 修改tall的任务
|
|
|
|
TallTaskDto.UpdateTaskInfo updateTaskInfo = new TallTaskDto.UpdateTaskInfo(); |
|
|
|
updateTaskInfo.setId(competeStartOrder.getId()); |
|
|
|
updateTaskInfo.setBeginTime(competeStartOrder.getId()); |
|
|
|
updateTaskInfo.setBeginTime(competeStartOrder.getEndTime()); |
|
|
|
tallFeignClient.updataTask(updateTaskInfo); |
|
|
|
} |
|
|
|
startOrderMapper.updateByPrimaryKeySelective(competeStartOrder); |
|
|
|
|
|
|
|
}else{ |
|
|
|
//添加tall的任务
|
|
|
|
Long taskId = null; |
|
|
|
TallTaskDto.AddTask addTask = new TallTaskDto.AddTask(); |
|
|
|
addTask.setProjectId(tallProjectId); |
|
|
|
addTask.setTaskName(project.getName() + competeOrder +"-" + site); |
|
|
|
addTask.setBeginTime(projectStartTime); |
|
|
|
addTask.setEndTime(projectStartTime + orderTime); |
|
|
|
addTask.setExecutorId(1L); |
|
|
|
JsonResponse<TaskVo.NormalTask> normalTaskJsonResponse = tallFeignClient.saveTask(addTask); |
|
|
|
if (ObjectUtil.isNotNull(normalTaskJsonResponse)) { |
|
|
|
TaskVo.NormalTask normalTask = normalTaskJsonResponse.getData(); |
|
|
|
if (ObjectUtil.isNotNull(normalTask)) { |
|
|
|
taskId = normalTask.getDetailId(); |
|
|
|
} |
|
|
|
} |
|
|
|
//添加出场顺序信息
|
|
|
|
CompeteStartOrder competeStartOrder = new CompeteStartOrder(); |
|
|
|
competeStartOrder.setId(snowflake.nextId()); |
|
|
|
competeStartOrder.setProjectId(project.getId()); |
|
|
|
competeStartOrder.setPlayerId(projectPlayer.getId()); |
|
|
|
competeStartOrder.setSite((byte) site); |
|
|
|
competeStartOrder.setTeam((byte) 0); |
|
|
|
competeStartOrder.setCompeteOrder((byte) competeOrder); |
|
|
|
competeStartOrder.setTaskId(taskId); |
|
|
|
competeStartOrder.setStartTime(projectStartTime); |
|
|
|
competeStartOrder.setEndTime(projectStartTime + orderTime); |
|
|
|
startOrderMapper.insertSelective(competeStartOrder); |
|
|
|
} |
|
|
|
site++; |
|
|
|
if(site > projectConfig.getSiteNum()){ |
|
|
|
site = 1; |
|
|
|
competeOrder++; |
|
|
|
projectStartTime += orderTime; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
//团体项目查找所有参赛队伍
|
|
|
|
CompeteTeamExample teamExample = new CompeteTeamExample(); |
|
|
|
teamExample.createCriteria().andProjectIdEqualTo(project.getId()); |
|
|
|
List<CompeteTeam> teamList = competeTeamDao.selectByExample(teamExample); |
|
|
|
if(CollectionUtil.isNotEmpty(teamList)){ |
|
|
|
//计算场次
|
|
|
|
int order = (int) Math.ceil(projectConfig.getSiteNum() / teamList.size()); |
|
|
|
//计算每个场次时间
|
|
|
|
long projectStartTime = projectConfig.getStartTime() + Constant.UPLOAD_VIDEO_TIME; |
|
|
|
long orderTime = (long) Math.floor((projectConfig.getEndTime() - projectStartTime) / order); |
|
|
|
//场次
|
|
|
|
int competeOrder = 1; |
|
|
|
//场地
|
|
|
|
int site = 1; |
|
|
|
for (CompeteTeam competeTeam : teamList) { |
|
|
|
CompeteStartOrderExample startOrderExample = new CompeteStartOrderExample(); |
|
|
|
startOrderExample.createCriteria().andPlayerIdEqualTo(competeTeam.getId()).andProjectIdEqualTo(project.getId()); |
|
|
|
List<CompeteStartOrder> startOrderList = startOrderMapper.selectByExample(startOrderExample); |
|
|
|
if(CollectionUtil.isNotEmpty(startOrderList)){ |
|
|
|
CompeteStartOrder competeStartOrder = startOrderList.get(0); |
|
|
|
competeStartOrder.setSite((byte) site); |
|
|
|
competeStartOrder.setCompeteOrder((byte) competeOrder); |
|
|
|
if(orderTime > 0 && (competeStartOrder.getStartTime() == projectStartTime || competeStartOrder.getEndTime() == projectStartTime + orderTime)){ |
|
|
|
competeStartOrder.setStartTime(projectStartTime); |
|
|
|
competeStartOrder.setEndTime(projectStartTime + orderTime); |
|
|
|
// TODO 修改tall的任务
|
|
|
|
TallTaskDto.UpdateTaskInfo updateTaskInfo = new TallTaskDto.UpdateTaskInfo(); |
|
|
|
updateTaskInfo.setId(competeStartOrder.getId()); |
|
|
|
updateTaskInfo.setBeginTime(competeStartOrder.getId()); |
|
|
|
updateTaskInfo.setBeginTime(competeStartOrder.getEndTime()); |
|
|
|
tallFeignClient.updataTask(updateTaskInfo); |
|
|
|
} |
|
|
|
startOrderMapper.updateByPrimaryKeySelective(competeStartOrder); |
|
|
|
|
|
|
|
}else{ |
|
|
|
//添加tall的任务
|
|
|
|
Long taskId = null; |
|
|
|
TallTaskDto.AddTask addTask = new TallTaskDto.AddTask(); |
|
|
|
addTask.setProjectId(tallProjectId); |
|
|
|
addTask.setTaskName(project.getName() + competeOrder +"-" + site); |
|
|
|
addTask.setBeginTime(projectStartTime); |
|
|
|
addTask.setEndTime(projectStartTime + orderTime); |
|
|
|
addTask.setExecutorId(1L); |
|
|
|
JsonResponse<TaskVo.NormalTask> normalTaskJsonResponse = tallFeignClient.saveTask(addTask); |
|
|
|
if (ObjectUtil.isNotNull(normalTaskJsonResponse)) { |
|
|
|
TaskVo.NormalTask normalTask = normalTaskJsonResponse.getData(); |
|
|
|
if (ObjectUtil.isNotNull(normalTask)) { |
|
|
|
taskId = normalTask.getDetailId(); |
|
|
|
} |
|
|
|
} |
|
|
|
//添加出场顺序信息
|
|
|
|
CompeteStartOrder competeStartOrder = new CompeteStartOrder(); |
|
|
|
competeStartOrder.setId(snowflake.nextId()); |
|
|
|
competeStartOrder.setProjectId(project.getId()); |
|
|
|
competeStartOrder.setPlayerId(competeTeam.getId()); |
|
|
|
competeStartOrder.setSite((byte) site); |
|
|
|
competeStartOrder.setTeam((byte) 0); |
|
|
|
competeStartOrder.setCompeteOrder((byte) competeOrder); |
|
|
|
competeStartOrder.setTaskId(taskId); |
|
|
|
competeStartOrder.setStartTime(projectStartTime); |
|
|
|
competeStartOrder.setEndTime(projectStartTime + orderTime); |
|
|
|
startOrderMapper.insertSelective(competeStartOrder); |
|
|
|
} |
|
|
|
site++; |
|
|
|
if(site > projectConfig.getSiteNum()){ |
|
|
|
site = 1; |
|
|
|
competeOrder++; |
|
|
|
projectStartTime += orderTime; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* 手机上查看选手出场顺序 |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public List<ProvinceCompeteVo.StartOrderByCompany> queryStartOrderByCompany(ProvinceCompeteDto.QueryStartOrderByCompany param) { |
|
|
|
return projectConfigDao.queryStartOrderByCompany(param.getCompanyId(),param.getProjectId(),param.getCompeteTimeId()); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 查看裁判分配信息 |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public List<ProvinceCompeteVo.QueryJudgment> queryJudgment(CompeteDto.CompeteTime param) { |
|
|
|
return competeJudgmentDao.queryJudgment(param.getCompeteTimeId()); |
|
|
|
} |
|
|
|
} |
|
|
|