diff --git a/cloudutil/src/main/java/com/ccsens/cloudutil/bean/tall/dto/TallTaskDto.java b/cloudutil/src/main/java/com/ccsens/cloudutil/bean/tall/dto/TallTaskDto.java new file mode 100644 index 00000000..e9f3592f --- /dev/null +++ b/cloudutil/src/main/java/com/ccsens/cloudutil/bean/tall/dto/TallTaskDto.java @@ -0,0 +1,131 @@ +package com.ccsens.cloudutil.bean.tall.dto; + +import cn.hutool.core.util.ObjectUtil; +import com.ccsens.util.exception.BaseException; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.NonNull; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +@ApiModel +public class TallTaskDto { + + @ApiModel + @Data + public static class AddTask { + @ApiModelProperty("关联项目Id") + private Long projectId; + @ApiModelProperty("关联的任务id(detailId)") + private Long parentTaskId; + @ApiModelProperty("任务名称") + @NotEmpty(message = "任务名不能为空") + private String taskName; + @ApiModelProperty("任务描述") + private String description; + @ApiModelProperty("负责人id") + @NotNull(message = "请选择负责人") + private Long executorId; + @ApiModelProperty("开始时间") + private Long beginTime; + @ApiModelProperty("结束时间") + private Long endTime; + @ApiModelProperty("重复周期") + private String cycle; + @ApiModelProperty("交付物") + private String taskDeliver; + @ApiModelProperty("插件") + private List pluginList; + @ApiModelProperty("优先级 3,紧急重要 2,紧急不重要 1,重要不紧急 0,不重要不紧急 默认0") + private Byte priority; + @ApiModelProperty("任务提醒消息") + private TaskRemindByAdd taskRemind; + } + + @Data + @ApiModel("添加时设置任务提醒") + public static class TaskRemindByAdd{ + @ApiModelProperty("提醒时机 0不提醒 1开始前,2开始时,3开始后,4结束前,5结束时,6结束后,7自定义时间") + private Byte remindTiming; + @ApiModelProperty("时长 提醒时机是“开始时”或“结束时”可以为空") + private Long duration = 0L; + @ApiModelProperty("时间单位 0分钟 1小时 2天") + private Byte unit; + + public Long getDuration(){ + if(ObjectUtil.isNull(unit)) { + throw new BaseException("时间单位不能为空"); + } + if(remindTiming == 7){ + return duration; + } + switch (unit) { + case 0: + return duration * 60 * 1000L; + case 1: + return duration * 60 * 60 * 1000L; + case 2: + return duration * 24 * 60 * 60 * 1000L; + default: + return duration; + } + } + } + + @Data + @ApiModel("修改任务详细信息") + public static class UpdateTaskInfo{ + @ApiModelProperty("任务id") + private Long id; + @ApiModelProperty("任务名") + private String name; + @ApiModelProperty("任务详情") + private String description; + @ApiModelProperty("负责人") + private Long executorRole; + @ApiModelProperty("任务开始时间") + private Long beginTime; + @ApiModelProperty("任务结束时间") + private Long endTime; + @ApiModelProperty("重复频率") + private String cycle; + @ApiModelProperty("任务奖惩") + private Long money; + @ApiModelProperty("任务切换模式,0时间到立刻切换 1延迟delay_time切换 2手动切换") + private int delay; + @ApiModelProperty("延迟切换时间") + private Long delayTime; + @ApiModelProperty("优先级 3,紧急重要 2,紧急不重要 1,重要不紧急 0,不重要不紧急 默认0") + private Byte priority; + @ApiModelProperty("是否是里程碑 0否 1是") + private Byte milestone; + @ApiModelProperty("需要修改的插件Id") + private List plugins; + } + + @Data + @ApiModel("修改插件配置") + public static class UpdatePluginConfig { + @NonNull + @ApiModelProperty("任务id") + private Long taskId; + @ApiModelProperty("任务插件id") + private Long taskPluginId; + @ApiModelProperty("页面接口路径") + private String webPath; + @ApiModelProperty("入参") + private String importParam; + @ApiModelProperty("放置位置 默认0 ,0任务名 1详情页 2任务下") + private Byte placeLocation; + @ApiModelProperty("程序位置 0:tall内部,1外部") + private Byte routineLocation; + + public UpdatePluginConfig() { + } + } + +} diff --git a/cloudutil/src/main/java/com/ccsens/cloudutil/bean/tall/vo/TaskVo.java b/cloudutil/src/main/java/com/ccsens/cloudutil/bean/tall/vo/TaskVo.java index bc5f3205..b90bc85e 100644 --- a/cloudutil/src/main/java/com/ccsens/cloudutil/bean/tall/vo/TaskVo.java +++ b/cloudutil/src/main/java/com/ccsens/cloudutil/bean/tall/vo/TaskVo.java @@ -1,7 +1,14 @@ package com.ccsens.cloudutil.bean.tall.vo; +import cn.hutool.core.util.ObjectUtil; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.math.BigDecimal; +import java.util.List; + @Data public class TaskVo { @Data @@ -11,4 +18,107 @@ public class TaskVo { private Long projectId; private String projectName; } + + @ApiModel + @Data + public static class NormalTask{ + @ApiModelProperty("任务详细信息id") + private Long detailId; + @ApiModelProperty("当前任务的时间段id") + private Long id; + @ApiModelProperty("名称") + private String name; + @ApiModelProperty("详细描述") + private String description; + @ApiModelProperty("父任务名称") + private String parentName; + @ApiModelProperty("所属项目id") + private Long projectId; + @ApiModelProperty("所属项目名称") + private String projectName; + @ApiModelProperty("负责人Id") + private Long executorRole; + @ApiModelProperty("负责人名称") + private String executorRoleName; + @ApiModelProperty("开始时间") + private Long beginTime; + @ApiModelProperty("结束时间") + private Long endTime; + @ApiModelProperty("时长") + private Long duration; + @ApiModelProperty("循环周期") + private String cycle; + @ApiModelProperty("跳转模式 0自动,1延迟,2手动") + private int delay; + @ApiModelProperty("实际开始时间") + private Long realBeginTime; + @ApiModelProperty("实际结束时间") + private Long realEndTime; + @ApiModelProperty("跳转结束时间") + private Long loopEndTime; + @ApiModelProperty("跳转的任务id") + private Long loopTo; + @ApiModelProperty("执行时间") + private Long execTimes; + @ApiModelProperty("奖惩") + private BigDecimal money; + @ApiModelProperty("状态:0-未开始,1-进行中,2-已完成") + private int process; + @ApiModelProperty("子项目id") + private Long subProjectId; + @ApiModelProperty("子项目名字") + private String subProjectName; + @ApiModelProperty("服务器时间") + private Long serverTime; + @ApiModelProperty("任务类型 0普通任务 1虚拟任务") + private int virtual; + @ApiModelProperty("有无分组") + private int hasGroup; + @ApiModelProperty("分数") + private BigDecimal score; + @ApiModelProperty("插件") + private List plugins; + @ApiModelProperty("二级任务") + private List secondTasks; + @ApiModelProperty("时间状态 0:正常 1:任务开始 2:任务结束") + private Byte timeStatus = 0; + @ApiModelProperty("当前周期内任务的序号") + private int sequence; + @ApiModelProperty("页面/接口路径") + private String webPath; + @ApiModelProperty("程序位置 0:tall内部,1外部") + private Byte routineLocation; + @ApiModelProperty("入参") + private String importParam; + public Long getDuration(){ + if(ObjectUtil.isNotNull(beginTime) && ObjectUtil.isNotNull(endTime)) { + return endTime - beginTime; + } + return null; + } + + public Long getServerTime(){ + return System.currentTimeMillis(); + } + + } + + @ApiModel + @Data + public static class PluginVo{ + @ApiModelProperty("插件id") + private String id; + @ApiModelProperty("插件名") + private String name; + @ApiModelProperty("插件描述") + private String description; + @ApiModelProperty("显示分类") + private String showType; + @ApiModelProperty("页面/接口路径") + private String webPath; + @ApiModelProperty("程序位置 0:tall内部,1外部") + private Byte routineLocation; + @ApiModelProperty("入参") + private String importParam; + } } diff --git a/cloudutil/src/main/java/com/ccsens/cloudutil/feign/TallFeignClient.java b/cloudutil/src/main/java/com/ccsens/cloudutil/feign/TallFeignClient.java index 66711006..c0e96b64 100644 --- a/cloudutil/src/main/java/com/ccsens/cloudutil/feign/TallFeignClient.java +++ b/cloudutil/src/main/java/com/ccsens/cloudutil/feign/TallFeignClient.java @@ -1,10 +1,7 @@ package com.ccsens.cloudutil.feign; import com.ccsens.cloudutil.bean.QueryParam; -import com.ccsens.cloudutil.bean.tall.dto.LogDto; -import com.ccsens.cloudutil.bean.tall.dto.MemberRoleDto; -import com.ccsens.cloudutil.bean.tall.dto.UserDto; -import com.ccsens.cloudutil.bean.tall.dto.WpsDto; +import com.ccsens.cloudutil.bean.tall.dto.*; import com.ccsens.cloudutil.bean.tall.vo.*; import com.ccsens.util.JsonResponse; import feign.hystrix.FallbackFactory; @@ -12,10 +9,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -177,12 +171,35 @@ public interface TallFeignClient { @GetMapping("/v1/3rd/getFilePath") String getWpsFilePath(@RequestParam(name = "businessId") Long businessId,@RequestParam(name = "businessType") byte businessType); - /** + /** * 通过userId呵taskId查找用户信息 */ @GetMapping("/users/memberByTask") JsonResponse getMemberInfoByUserIdAndTaskId(@RequestParam(name = "userId") Long userId,@RequestParam(name = "taskId") Long taskId); + + /** + * 添加任务 + */ + @RequestMapping("/tasks") + JsonResponse saveTask(TallTaskDto.AddTask addTask); + + /** + * 修改任务 + */ + @RequestMapping("/tasks/change") + JsonResponse updataTask(TallTaskDto.UpdateTaskInfo updateTaskInfo); + /** + * 删除任务 + */ + @DeleteMapping("/tasks") + JsonResponse deleteTask(@RequestParam(name = "taskId") Long taskId); + + /** + * 修改任务插件配置 + */ + @DeleteMapping("/plugins/config") + JsonResponse updatePluginConfig(TallTaskDto.UpdatePluginConfig updatePluginConfig); } @Slf4j @@ -295,6 +312,26 @@ class TallFeignClientFallBack implements FallbackFactory { public JsonResponse getMemberInfoByUserIdAndTaskId(Long userId, Long taskId) { return JsonResponse.newInstance().fail(); } + + @Override + public JsonResponse saveTask(TallTaskDto.AddTask addTask) { + return JsonResponse.newInstance().fail(); + } + + @Override + public JsonResponse updataTask(TallTaskDto.UpdateTaskInfo updateTaskInfo) { + return JsonResponse.newInstance().fail(); + } + + @Override + public JsonResponse deleteTask(Long taskId) { + return JsonResponse.newInstance().fail(); + } + + @Override + public JsonResponse updatePluginConfig(TallTaskDto.UpdatePluginConfig updatePluginConfig) { + return JsonResponse.newInstance().fail(); + } }; } diff --git a/mt/src/main/java/com/ccsens/mt/api/CompeteTaskController.java b/mt/src/main/java/com/ccsens/mt/api/CompeteTaskController.java index eae789aa..20bbd7bc 100644 --- a/mt/src/main/java/com/ccsens/mt/api/CompeteTaskController.java +++ b/mt/src/main/java/com/ccsens/mt/api/CompeteTaskController.java @@ -3,6 +3,7 @@ package com.ccsens.mt.api; import com.ccsens.cloudutil.annotation.MustLogin; import com.ccsens.mt.bean.dto.CompeteDto; import com.ccsens.mt.bean.dto.ProvinceCompeteDto; +import com.ccsens.mt.bean.vo.ProvinceCompeteVo; import com.ccsens.mt.bean.vo.TableVo; import com.ccsens.mt.service.ICompeteTaskService; import com.ccsens.util.JsonResponse; @@ -47,9 +48,29 @@ public class CompeteTaskController { @RequestMapping(value = "/update", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) public JsonResponse updateCompeteConfig(@ApiParam @Validated @RequestBody QueryDto params) { log.info("日程安排更新:{}",params); - List dailyScheduleProcessList = competeTaskService.updateCompeteProjectConfig(params.getParam().getUpdateCompeteTaskList()); + List dailyScheduleProcessList = competeTaskService.updateCompeteProjectConfig(params.getParam()); log.info("日程安排更新:{}",dailyScheduleProcessList); return JsonResponse.newInstance().ok(dailyScheduleProcessList); } + @MustLogin + @ApiOperation(value = "查看该学校选手列表,按出场顺序(手机上上传视频用)", notes = "zy:按顺序查找出场顺序表,筛选出该学校在此项目中的所有选手或团队的出场顺序和时间") + @RequestMapping(value = "/query/players", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse> queryStartOrderByCompany(@ApiParam @Validated @RequestBody QueryDto params) { + log.info("日程安排更新:{}",params); + List startOrderByCompanyList = competeTaskService.queryStartOrderByCompany(params.getParam()); + log.info("日程安排更新:{}",startOrderByCompanyList); + return JsonResponse.newInstance().ok(startOrderByCompanyList); + } + + @MustLogin + @ApiOperation(value = "查看裁判分配信息", notes = "zy:查看每个项目下的每个场地的裁判信息") + @RequestMapping(value = "/query/judgment", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse> queryJudgment(@ApiParam @Validated @RequestBody QueryDto params) { + log.info("日程安排更新:{}",params); + List queryJudgmentList = competeTaskService.queryJudgment(params.getParam()); + log.info("日程安排更新:{}",queryJudgmentList); + return JsonResponse.newInstance().ok(queryJudgmentList); + } + } diff --git a/mt/src/main/java/com/ccsens/mt/bean/dto/ProvinceCompeteDto.java b/mt/src/main/java/com/ccsens/mt/bean/dto/ProvinceCompeteDto.java index 29ea012c..82ba72da 100644 --- a/mt/src/main/java/com/ccsens/mt/bean/dto/ProvinceCompeteDto.java +++ b/mt/src/main/java/com/ccsens/mt/bean/dto/ProvinceCompeteDto.java @@ -202,7 +202,7 @@ public class ProvinceCompeteDto { @Data @ApiModel("修改日程安排") - public static class UpdateCompeteProjectConfig{ + public static class UpdateCompeteProjectConfig{ @NotNull @ApiModelProperty("Tall当前项目id") private Long projectId; @@ -212,7 +212,7 @@ public class ProvinceCompeteDto { @Data @ApiModel("需要修改的日程安排") - public static class UpdateCompeteTask{ + public static class UpdateCompeteTask{ @NotNull @ApiModelProperty("比赛项目项目id") private Long projectId; @@ -226,4 +226,17 @@ public class ProvinceCompeteDto { private Long endTime; } + @Data + @ApiModel("手机上查找当前单位的选手出场顺序") + public static class QueryStartOrderByCompany{ + @ApiModelProperty("比赛项目id,为空则查询全部项目") + private Long projectId; + @NotNull + @ApiModelProperty("大赛id") + private Long competeTimeId; + @NotNull + @ApiModelProperty("单位id") + private Long companyId; + } + } diff --git a/mt/src/main/java/com/ccsens/mt/bean/po/CompeteStartOrder.java b/mt/src/main/java/com/ccsens/mt/bean/po/CompeteStartOrder.java index eea9504c..9b6b8246 100644 --- a/mt/src/main/java/com/ccsens/mt/bean/po/CompeteStartOrder.java +++ b/mt/src/main/java/com/ccsens/mt/bean/po/CompeteStartOrder.java @@ -22,6 +22,12 @@ public class CompeteStartOrder implements Serializable { private Byte recStatus; + private Long taskId; + + private Long startTime; + + private Long endTime; + private static final long serialVersionUID = 1L; public Long getId() { @@ -96,6 +102,30 @@ public class CompeteStartOrder implements Serializable { this.recStatus = recStatus; } + public Long getTaskId() { + return taskId; + } + + public void setTaskId(Long taskId) { + this.taskId = taskId; + } + + public Long getStartTime() { + return startTime; + } + + public void setStartTime(Long startTime) { + this.startTime = startTime; + } + + public Long getEndTime() { + return endTime; + } + + public void setEndTime(Long endTime) { + this.endTime = endTime; + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); @@ -111,6 +141,9 @@ public class CompeteStartOrder implements Serializable { sb.append(", createdAt=").append(createdAt); sb.append(", updatedAt=").append(updatedAt); sb.append(", recStatus=").append(recStatus); + sb.append(", taskId=").append(taskId); + sb.append(", startTime=").append(startTime); + sb.append(", endTime=").append(endTime); sb.append("]"); return sb.toString(); } diff --git a/mt/src/main/java/com/ccsens/mt/bean/po/CompeteStartOrderExample.java b/mt/src/main/java/com/ccsens/mt/bean/po/CompeteStartOrderExample.java index efd0d04e..7df6cbdc 100644 --- a/mt/src/main/java/com/ccsens/mt/bean/po/CompeteStartOrderExample.java +++ b/mt/src/main/java/com/ccsens/mt/bean/po/CompeteStartOrderExample.java @@ -644,6 +644,186 @@ public class CompeteStartOrderExample { addCriterion("rec_status not between", value1, value2, "recStatus"); return (Criteria) this; } + + public Criteria andTaskIdIsNull() { + addCriterion("task_id is null"); + return (Criteria) this; + } + + public Criteria andTaskIdIsNotNull() { + addCriterion("task_id is not null"); + return (Criteria) this; + } + + public Criteria andTaskIdEqualTo(Long value) { + addCriterion("task_id =", value, "taskId"); + return (Criteria) this; + } + + public Criteria andTaskIdNotEqualTo(Long value) { + addCriterion("task_id <>", value, "taskId"); + return (Criteria) this; + } + + public Criteria andTaskIdGreaterThan(Long value) { + addCriterion("task_id >", value, "taskId"); + return (Criteria) this; + } + + public Criteria andTaskIdGreaterThanOrEqualTo(Long value) { + addCriterion("task_id >=", value, "taskId"); + return (Criteria) this; + } + + public Criteria andTaskIdLessThan(Long value) { + addCriterion("task_id <", value, "taskId"); + return (Criteria) this; + } + + public Criteria andTaskIdLessThanOrEqualTo(Long value) { + addCriterion("task_id <=", value, "taskId"); + return (Criteria) this; + } + + public Criteria andTaskIdIn(List values) { + addCriterion("task_id in", values, "taskId"); + return (Criteria) this; + } + + public Criteria andTaskIdNotIn(List values) { + addCriterion("task_id not in", values, "taskId"); + return (Criteria) this; + } + + public Criteria andTaskIdBetween(Long value1, Long value2) { + addCriterion("task_id between", value1, value2, "taskId"); + return (Criteria) this; + } + + public Criteria andTaskIdNotBetween(Long value1, Long value2) { + addCriterion("task_id not between", value1, value2, "taskId"); + return (Criteria) this; + } + + public Criteria andStartTimeIsNull() { + addCriterion("start_time is null"); + return (Criteria) this; + } + + public Criteria andStartTimeIsNotNull() { + addCriterion("start_time is not null"); + return (Criteria) this; + } + + public Criteria andStartTimeEqualTo(Long value) { + addCriterion("start_time =", value, "startTime"); + return (Criteria) this; + } + + public Criteria andStartTimeNotEqualTo(Long value) { + addCriterion("start_time <>", value, "startTime"); + return (Criteria) this; + } + + public Criteria andStartTimeGreaterThan(Long value) { + addCriterion("start_time >", value, "startTime"); + return (Criteria) this; + } + + public Criteria andStartTimeGreaterThanOrEqualTo(Long value) { + addCriterion("start_time >=", value, "startTime"); + return (Criteria) this; + } + + public Criteria andStartTimeLessThan(Long value) { + addCriterion("start_time <", value, "startTime"); + return (Criteria) this; + } + + public Criteria andStartTimeLessThanOrEqualTo(Long value) { + addCriterion("start_time <=", value, "startTime"); + return (Criteria) this; + } + + public Criteria andStartTimeIn(List values) { + addCriterion("start_time in", values, "startTime"); + return (Criteria) this; + } + + public Criteria andStartTimeNotIn(List values) { + addCriterion("start_time not in", values, "startTime"); + return (Criteria) this; + } + + public Criteria andStartTimeBetween(Long value1, Long value2) { + addCriterion("start_time between", value1, value2, "startTime"); + return (Criteria) this; + } + + public Criteria andStartTimeNotBetween(Long value1, Long value2) { + addCriterion("start_time not between", value1, value2, "startTime"); + return (Criteria) this; + } + + public Criteria andEndTimeIsNull() { + addCriterion("end_time is null"); + return (Criteria) this; + } + + public Criteria andEndTimeIsNotNull() { + addCriterion("end_time is not null"); + return (Criteria) this; + } + + public Criteria andEndTimeEqualTo(Long value) { + addCriterion("end_time =", value, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeNotEqualTo(Long value) { + addCriterion("end_time <>", value, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeGreaterThan(Long value) { + addCriterion("end_time >", value, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeGreaterThanOrEqualTo(Long value) { + addCriterion("end_time >=", value, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeLessThan(Long value) { + addCriterion("end_time <", value, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeLessThanOrEqualTo(Long value) { + addCriterion("end_time <=", value, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeIn(List values) { + addCriterion("end_time in", values, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeNotIn(List values) { + addCriterion("end_time not in", values, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeBetween(Long value1, Long value2) { + addCriterion("end_time between", value1, value2, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeNotBetween(Long value1, Long value2) { + addCriterion("end_time not between", value1, value2, "endTime"); + return (Criteria) this; + } } public static class Criteria extends GeneratedCriteria { diff --git a/mt/src/main/java/com/ccsens/mt/bean/vo/ProvinceCompeteVo.java b/mt/src/main/java/com/ccsens/mt/bean/vo/ProvinceCompeteVo.java index 3fb471a7..6f1a9738 100644 --- a/mt/src/main/java/com/ccsens/mt/bean/vo/ProvinceCompeteVo.java +++ b/mt/src/main/java/com/ccsens/mt/bean/vo/ProvinceCompeteVo.java @@ -1,5 +1,7 @@ package com.ccsens.mt.bean.vo; +import cn.hutool.core.util.ObjectUtil; +import com.ccsens.mt.util.Constant; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -230,4 +232,81 @@ public class ProvinceCompeteVo { private int sexGroup; private String groupRemark = "123"; } + + @Data + @ApiModel("查看单位下当前项目所有参赛人员或队伍信息") + public static class StartOrderByCompany { + @ApiModelProperty("项目id") + private Long projectId; + @ApiModelProperty("项目名") + private String projectName; + @ApiModelProperty("场次id") + private Long startOrderId; + @ApiModelProperty("场次") + private int competeOrder; + @ApiModelProperty("场地") + private int site; + @ApiModelProperty("选手名") + private String playerName; + @ApiModelProperty("组别名") + private String groupName; + @ApiModelProperty("开始时间") + private Long startTime; + @ApiModelProperty("结束时间") + private Long endTime; + + public Long getStartTime(){ + if(ObjectUtil.isNotNull(startTime) && startTime != 0){ + return startTime + Constant.UPLOAD_VIDEO_TIME; + } + return null; + } + + public Long getEndTime(){ + if(ObjectUtil.isNotNull(endTime) && endTime != 0){ + return endTime + Constant.UPLOAD_VIDEO_TIME; + } + return null; + } + + } + + + @Data + @ApiModel("查看裁判分配信息") + public static class QueryJudgment { + @ApiModelProperty("项目id") + private Long projectId; + @ApiModelProperty("项目名") + private String projectName; + @ApiModelProperty("项目开始时间") + private Long startTime; + @ApiModelProperty("项目结束时间") + private Long endTime; + @ApiModelProperty("项目下的场地") + private List siteList; + } + @Data + @ApiModel("项目下的场地信息") + public static class ProjectSite { + @ApiModelProperty("场地编号") + private int siteNum; + @ApiModelProperty("场地下的裁判") + private List judgmentList; + } + + @Data + @ApiModel("场地下的裁判信息") + public static class SiteJudgment { + @ApiModelProperty("裁判编号") + private int judgmentNum; + @ApiModelProperty("裁判名字") + private String judgmentName; + @ApiModelProperty("裁判手机号") + private String judgmentPhone; + @ApiModelProperty("备注") + private String remark; + + } + } diff --git a/mt/src/main/java/com/ccsens/mt/persist/dao/CompeteJudgmentDao.java b/mt/src/main/java/com/ccsens/mt/persist/dao/CompeteJudgmentDao.java new file mode 100644 index 00000000..4361db75 --- /dev/null +++ b/mt/src/main/java/com/ccsens/mt/persist/dao/CompeteJudgmentDao.java @@ -0,0 +1,18 @@ +package com.ccsens.mt.persist.dao; + +import com.ccsens.mt.bean.vo.ProvinceCompeteVo; +import com.ccsens.mt.persist.mapper.CompeteJudgmentMapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface CompeteJudgmentDao extends CompeteJudgmentMapper { + /** + * 查找裁判分配信息 + * @param competeTimeId 大赛id + * @return + */ + List queryJudgment(@Param("competeTimeId") Long competeTimeId); +} diff --git a/mt/src/main/java/com/ccsens/mt/persist/dao/CompeteProjectConfigDao.java b/mt/src/main/java/com/ccsens/mt/persist/dao/CompeteProjectConfigDao.java index 6f31e47b..39a3bb49 100644 --- a/mt/src/main/java/com/ccsens/mt/persist/dao/CompeteProjectConfigDao.java +++ b/mt/src/main/java/com/ccsens/mt/persist/dao/CompeteProjectConfigDao.java @@ -2,6 +2,7 @@ package com.ccsens.mt.persist.dao; import com.ccsens.mt.bean.po.CompeteProjectConfig; import com.ccsens.mt.bean.po.CompeteProjectConfigExample; +import com.ccsens.mt.bean.vo.ProvinceCompeteVo; import com.ccsens.mt.bean.vo.TableVo; import com.ccsens.mt.persist.mapper.CompeteProjectConfigMapper; import org.apache.ibatis.annotations.Param; @@ -28,4 +29,11 @@ public interface CompeteProjectConfigDao extends CompeteProjectConfigMapper { */ List queryProjectConfig(@Param("type")int type); + /** + * 查看该学校选手列表,按出场顺序(手机上上传视频用) + * @param companyId 单位id + * @param projectId 项目di + * @return 返回选手列表 + */ + List queryStartOrderByCompany(@Param("companyId")Long companyId, @Param("projectId")Long projectId, @Param("competeTimeId")Long competeTimeId); } \ No newline at end of file diff --git a/mt/src/main/java/com/ccsens/mt/service/CompeteTaskService.java b/mt/src/main/java/com/ccsens/mt/service/CompeteTaskService.java index ca60c16b..a59ef5c4 100644 --- a/mt/src/main/java/com/ccsens/mt/service/CompeteTaskService.java +++ b/mt/src/main/java/com/ccsens/mt/service/CompeteTaskService.java @@ -3,16 +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.*; +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.CompeteTeamDao; -import com.ccsens.mt.persist.dao.CompeteTimeDao; +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; @@ -44,7 +47,14 @@ public class CompeteTaskService implements ICompeteTaskService{ private CompeteStartOrderMapper startOrderMapper; @Resource private CompeteTeamDao competeTeamDao; + @Resource + private TallFeignClient tallFeignClient; + @Resource + private CompeteJudgmentDao competeJudgmentDao; + /** + * 查看项目的日程配置信息 + */ @Override public List queryCompeteConfig(CompeteDto.CompeteTime param) { CompeteTime competeTime = competeTimeDao.selectByPrimaryKey(param.getCompeteTimeId()); @@ -55,12 +65,15 @@ public class CompeteTaskService implements ICompeteTaskService{ return competeProjectConfigList; } + /** + * 修改项目的日程配置 + */ @Override - public List updateCompeteProjectConfig(List param) { + public List 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)){ @@ -91,7 +104,7 @@ public class CompeteTaskService implements ICompeteTaskService{ projectConfigDao.insertSelective(competeProjectConfig); } // TODO 生成出场顺序表,存入数据库。在tall内添加对应的任务 - setStartOrder(competeProjectConfig); + setStartOrder(competeProjectConfig,param.getProjectId()); }); } return projectConfigDao.queryProjectConfig(type.get()); @@ -99,21 +112,11 @@ public class CompeteTaskService implements ICompeteTaskService{ /** * 修改配置时生成出场顺序(先删除之前的数据) */ - public void setStartOrder(CompeteProjectConfig competeProjectConfig) { - if (ObjectUtil.isNotNull(competeProjectConfig)) { + public void setStartOrder(CompeteProjectConfig projectConfig, Long tallProjectId) { + if (ObjectUtil.isNotNull(projectConfig)) { //查找项目 - CompeteProject project = competeProjectDao.selectByPrimaryKey(competeProjectConfig.getProjectId()); + CompeteProject project = competeProjectDao.selectByPrimaryKey(projectConfig.getProjectId()); if (ObjectUtil.isNotNull(project)) { - //首先删除此项目以前的出场顺序 - CompeteStartOrderExample startOrderExample = new CompeteStartOrderExample(); - startOrderExample.createCriteria().andProjectIdEqualTo(project.getId()); - List startOrderList = startOrderMapper.selectByExample(startOrderExample); - if(ObjectUtil.isNotNull(startOrderExample)){ - startOrderList.forEach(startOrder -> { - startOrder.setRecStatus((byte) 2); - startOrderMapper.updateByPrimaryKeySelective(startOrder); - }); - } //判断是团队还是个人项目 if (project.getTeam() == 0) { //个人项目查找所有参赛信息 @@ -122,20 +125,68 @@ public class CompeteTaskService implements ICompeteTaskService{ List projectPlayerList = projectPlayerMapper.selectByExample(projectPlayerExample); if (CollectionUtil.isNotEmpty(projectPlayerList)) { //计算场次 - int order = (int) Math.ceil(competeProjectConfig.getSiteNum() / projectPlayerList.size()); - - + 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) { - //添加出场顺序和tall的任务 - addStartOrderAndTask(project.getId(), competeOrder, site, projectPlayer.getId(),0); + CompeteStartOrderExample startOrderExample = new CompeteStartOrderExample(); + startOrderExample.createCriteria().andPlayerIdEqualTo(projectPlayer.getId()).andProjectIdEqualTo(project.getId()); + List 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 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 > competeProjectConfig.getSiteNum()){ + if(site > projectConfig.getSiteNum()){ site = 1; competeOrder++; + projectStartTime += orderTime; } } } @@ -145,17 +196,69 @@ public class CompeteTaskService implements ICompeteTaskService{ teamExample.createCriteria().andProjectIdEqualTo(project.getId()); List 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) { - //添加出场顺序和tall的任务 - addStartOrderAndTask(project.getId(), competeOrder, site, competeTeam.getId(),1); + CompeteStartOrderExample startOrderExample = new CompeteStartOrderExample(); + startOrderExample.createCriteria().andPlayerIdEqualTo(competeTeam.getId()).andProjectIdEqualTo(project.getId()); + List 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 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 > competeProjectConfig.getSiteNum()){ + if(site > projectConfig.getSiteNum()){ site = 1; competeOrder++; + projectStartTime += orderTime; } } } @@ -164,16 +267,20 @@ public class CompeteTaskService implements ICompeteTaskService{ } } - private void addStartOrderAndTask(Long projectId, int competeOrder, int site, Long playerOrTeamId,int isTeam) { - //添加出场顺序 - CompeteStartOrder competeStartOrder = new CompeteStartOrder(); - competeStartOrder.setId(snowflake.nextId()); - competeStartOrder.setProjectId(projectId); - competeStartOrder.setPlayerId(playerOrTeamId); - competeStartOrder.setSite((byte) site); - competeStartOrder.setTeam((byte) isTeam); - competeStartOrder.setCompeteOrder((byte) competeOrder); - startOrderMapper.insertSelective(competeStartOrder); + + /** + * 手机上查看选手出场顺序 + */ + @Override + public List queryStartOrderByCompany(ProvinceCompeteDto.QueryStartOrderByCompany param) { + return projectConfigDao.queryStartOrderByCompany(param.getCompanyId(),param.getProjectId(),param.getCompeteTimeId()); } + /** + * 查看裁判分配信息 + */ + @Override + public List queryJudgment(CompeteDto.CompeteTime param) { + return competeJudgmentDao.queryJudgment(param.getCompeteTimeId()); + } } diff --git a/mt/src/main/java/com/ccsens/mt/service/ICompeteTaskService.java b/mt/src/main/java/com/ccsens/mt/service/ICompeteTaskService.java index 02e716af..4f604088 100644 --- a/mt/src/main/java/com/ccsens/mt/service/ICompeteTaskService.java +++ b/mt/src/main/java/com/ccsens/mt/service/ICompeteTaskService.java @@ -2,6 +2,7 @@ package com.ccsens.mt.service; import com.ccsens.mt.bean.dto.CompeteDto; import com.ccsens.mt.bean.dto.ProvinceCompeteDto; +import com.ccsens.mt.bean.vo.ProvinceCompeteVo; import com.ccsens.mt.bean.vo.TableVo; import java.util.List; @@ -15,7 +16,7 @@ public interface ICompeteTaskService { * @param param * @return */ - List updateCompeteProjectConfig(List param); + List updateCompeteProjectConfig(ProvinceCompeteDto.UpdateCompeteProjectConfig param); /** * 查找所有项目的日程配置 @@ -23,4 +24,18 @@ public interface ICompeteTaskService { * @return */ List queryCompeteConfig(CompeteDto.CompeteTime param); + + /** + * 查找该单位下参加该项目的选手的出场顺序信息 + * @param param + * @return + */ + List queryStartOrderByCompany(ProvinceCompeteDto.QueryStartOrderByCompany param); + + /** + * 查看所有项目下的裁判分配信息 + * @param param + * @return + */ + List queryJudgment(CompeteDto.CompeteTime param); } diff --git a/mt/src/main/java/com/ccsens/mt/util/Constant.java b/mt/src/main/java/com/ccsens/mt/util/Constant.java index a855322f..b43f305a 100644 --- a/mt/src/main/java/com/ccsens/mt/util/Constant.java +++ b/mt/src/main/java/com/ccsens/mt/util/Constant.java @@ -46,6 +46,11 @@ public class Constant { * 速度通级赛id */ public static final long CERTIFICATE = 2018; + /** + * 每个比赛项目留给选手上传视频的时间(暂定半个小时,可以修改) + */ + public static final long UPLOAD_VIDEO_TIME = 30 * 60 * 1000; + public final static class Compete{ public final static byte PROJECT_JOIN_RULE_GROUP_LIMIT = 0; diff --git a/mt/src/main/resources/mapper_dao/CompeteJudgmentDao.xml b/mt/src/main/resources/mapper_dao/CompeteJudgmentDao.xml new file mode 100644 index 00000000..04b81bf9 --- /dev/null +++ b/mt/src/main/resources/mapper_dao/CompeteJudgmentDao.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mt/src/main/resources/mapper_dao/CompeteProjectConfigDao.xml b/mt/src/main/resources/mapper_dao/CompeteProjectConfigDao.xml index 13b5f64f..5edd2613 100644 --- a/mt/src/main/resources/mapper_dao/CompeteProjectConfigDao.xml +++ b/mt/src/main/resources/mapper_dao/CompeteProjectConfigDao.xml @@ -166,6 +166,63 @@ and p.rec_status = 0 GROUP BY p.id + \ No newline at end of file diff --git a/mt/src/main/resources/mapper_raw/CompeteStartOrderMapper.xml b/mt/src/main/resources/mapper_raw/CompeteStartOrderMapper.xml index 8e150359..87ab15d4 100644 --- a/mt/src/main/resources/mapper_raw/CompeteStartOrderMapper.xml +++ b/mt/src/main/resources/mapper_raw/CompeteStartOrderMapper.xml @@ -11,6 +11,9 @@ + + + @@ -71,7 +74,8 @@ - id, project_id, player_id, team, compete_order, site, created_at, updated_at, rec_status + id, project_id, player_id, team, compete_order, site, created_at, updated_at, rec_status, + task_id, start_time, end_time @@ -210,6 +234,15 @@ rec_status = #{record.recStatus,jdbcType=TINYINT}, + + task_id = #{record.taskId,jdbcType=BIGINT}, + + + start_time = #{record.startTime,jdbcType=BIGINT}, + + + end_time = #{record.endTime,jdbcType=BIGINT}, + @@ -225,7 +258,10 @@ site = #{record.site,jdbcType=TINYINT}, created_at = #{record.createdAt,jdbcType=TIMESTAMP}, updated_at = #{record.updatedAt,jdbcType=TIMESTAMP}, - rec_status = #{record.recStatus,jdbcType=TINYINT} + rec_status = #{record.recStatus,jdbcType=TINYINT}, + task_id = #{record.taskId,jdbcType=BIGINT}, + start_time = #{record.startTime,jdbcType=BIGINT}, + end_time = #{record.endTime,jdbcType=BIGINT} @@ -257,6 +293,15 @@ rec_status = #{recStatus,jdbcType=TINYINT}, + + task_id = #{taskId,jdbcType=BIGINT}, + + + start_time = #{startTime,jdbcType=BIGINT}, + + + end_time = #{endTime,jdbcType=BIGINT}, + where id = #{id,jdbcType=BIGINT} @@ -269,7 +314,10 @@ site = #{site,jdbcType=TINYINT}, created_at = #{createdAt,jdbcType=TIMESTAMP}, updated_at = #{updatedAt,jdbcType=TIMESTAMP}, - rec_status = #{recStatus,jdbcType=TINYINT} + rec_status = #{recStatus,jdbcType=TINYINT}, + task_id = #{taskId,jdbcType=BIGINT}, + start_time = #{startTime,jdbcType=BIGINT}, + end_time = #{endTime,jdbcType=BIGINT} where id = #{id,jdbcType=BIGINT} \ No newline at end of file diff --git a/tall/src/main/java/com/ccsens/tall/web/TaskController.java b/tall/src/main/java/com/ccsens/tall/web/TaskController.java index f6b90a93..16c0de60 100644 --- a/tall/src/main/java/com/ccsens/tall/web/TaskController.java +++ b/tall/src/main/java/com/ccsens/tall/web/TaskController.java @@ -247,8 +247,8 @@ public class TaskController { @ApiImplicitParams({ @ApiImplicitParam(name = "taskId", value = "任务id", required = true, paramType = "query") }) - @RequestMapping(value = "change", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse updateTask(HttpServletRequest request, + @RequestMapping(value = "/change", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse updateTask(HttpServletRequest request, @Validated @RequestBody TaskDto.UpdateTaskInfo updateTaskInfo) throws Exception { Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); TaskVo.NormalTask taskInfo = taskDetailService.updateTaskInfo(currentUserId,updateTaskInfo);