diff --git a/mt/src/main/java/com/ccsens/mt/api/CompeteController.java b/mt/src/main/java/com/ccsens/mt/api/CompeteController.java index 429c7f21..06c55498 100644 --- a/mt/src/main/java/com/ccsens/mt/api/CompeteController.java +++ b/mt/src/main/java/com/ccsens/mt/api/CompeteController.java @@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import java.io.IOException; import java.util.List; /** @@ -88,7 +89,7 @@ public class CompeteController { @MustLogin @ApiOperation(value = "提交选择的比赛项目", notes = "") @RequestMapping(value = "/save/project", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse saveCompeteProject(@ApiParam @Validated @RequestBody QueryDto params) { + public JsonResponse saveCompeteProject(@ApiParam @Validated @RequestBody QueryDto params) throws IOException { log.info("提交选择的比赛项目:{}",params); CompeteVo.CompetePlayerInfo competePlayerInfo = competeService.saveCompeteProject(params); return JsonResponse.newInstance().ok(competePlayerInfo); @@ -125,7 +126,7 @@ public class CompeteController { @MustLogin @ApiOperation(value = "扫码加入团队", notes = "") @RequestMapping(value = "/joinGroup", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse joinCompeteGroup(@ApiParam @Validated @RequestBody QueryDto params) { + public JsonResponse joinCompeteGroup(@ApiParam @Validated @RequestBody QueryDto params) { log.info("扫码加入团队:{}",params); CompeteVo.CompeteTeamProject competeTeamProject = competeService.joinCompeteGroup(params); return JsonResponse.newInstance().ok(competeTeamProject); diff --git a/mt/src/main/java/com/ccsens/mt/bean/dto/CompeteDto.java b/mt/src/main/java/com/ccsens/mt/bean/dto/CompeteDto.java index bd5e511f..aed2081e 100644 --- a/mt/src/main/java/com/ccsens/mt/bean/dto/CompeteDto.java +++ b/mt/src/main/java/com/ccsens/mt/bean/dto/CompeteDto.java @@ -94,4 +94,12 @@ public class CompeteDto { private Long competeTimeId; } + + @Data + @ApiModel("项目团队ID") + public static class CompeteGroup{ + @NotNull(message="请选择团队信息") + @ApiModelProperty("团队ID") + private Long id; + } } diff --git a/mt/src/main/java/com/ccsens/mt/bean/vo/CompeteVo.java b/mt/src/main/java/com/ccsens/mt/bean/vo/CompeteVo.java index 76069f64..b21d9494 100644 --- a/mt/src/main/java/com/ccsens/mt/bean/vo/CompeteVo.java +++ b/mt/src/main/java/com/ccsens/mt/bean/vo/CompeteVo.java @@ -1,5 +1,7 @@ package com.ccsens.mt.bean.vo; +import com.ccsens.mt.bean.po.CompetePlayer; +import com.ccsens.mt.bean.po.CompeteTeam; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -62,8 +64,8 @@ public class CompeteVo { private int gender; @ApiModelProperty("手机号") private String phone; - @ApiModelProperty("手机验证码") - private String smsCode; +// @ApiModelProperty("手机验证码") +// private String smsCode; @ApiModelProperty("身份证") private String idCard; @ApiModelProperty("参加的组别的id") @@ -82,6 +84,22 @@ public class CompeteVo { private List competeTiwnProjects; @ApiModelProperty("参加的团队比赛信息") private List competeTeamProjects; + + public CompetePlayerInfo(CompetePlayer player, com.ccsens.mt.bean.po.CompeteGroup group , com.ccsens.mt.bean.po.CompeteCompany company ,CompeteProjectAllByUser competeProjectAll) { + this.playerId = player.getId(); + this.name = player.getName(); + this.gender = player.getGender(); + this.phone = player.getPhone(); + this.idCard = player.getIdCard(); + this.groupId = group.getId(); + this.groupName = group.getGroupName(); + this.companyName = company.getName(); + this.idCardBack = player.getIdCardBack(); + this.idCardFront = player.getIdCardFront(); + this.proveImg = player.getProveImg(); + this.competeTiwnProjects = competeProjectAll.getCompeteTiwnProjects(); + this.competeTeamProjects = competeProjectAll.getCompeteTeamProjects(); + } } @Data @@ -102,8 +120,8 @@ public class CompeteVo { @Data @ApiModel("团队比赛信息") public static class CompeteTeamProject { - @ApiModelProperty("选手与单人项目关联信息的id") - private Long competeProjectId; + @ApiModelProperty("团队id") + private Long teamId; @ApiModelProperty("比赛的类型,0跳绳比赛") private byte type; @ApiModelProperty("一级项目名字") @@ -124,6 +142,19 @@ public class CompeteVo { private String qrCode; @ApiModelProperty("团队内的成员") private List members; + + public CompeteTeamProject(CompeteTeam team, byte isCreator, com.ccsens.mt.bean.po.CompeteProject project, String parentProjectName, List members) { + this.teamId = team.getId(); + this.type = project.getType(); + this.parentProjectName = parentProjectName; + this.secondProjectName = project.getName(); + this.certificate = team.getCertificate(); + this.creator = isCreator; + this.memberMin = project.getMemberMin(); + this.memberMax = project.getMemberMax(); + this.memberNums = members.size(); + this.members = members; + } } @Data @@ -189,8 +220,6 @@ public class CompeteVo { private int gender; @ApiModelProperty("手机号") private String phone; - @ApiModelProperty("手机验证码") - private String smsCode; @ApiModelProperty("身份证") private String idCard; @ApiModelProperty("参加的组别的id") diff --git a/mt/src/main/java/com/ccsens/mt/persist/dao/CompetePlayerDao.java b/mt/src/main/java/com/ccsens/mt/persist/dao/CompetePlayerDao.java new file mode 100644 index 00000000..5b0796ff --- /dev/null +++ b/mt/src/main/java/com/ccsens/mt/persist/dao/CompetePlayerDao.java @@ -0,0 +1,17 @@ +package com.ccsens.mt.persist.dao; + +import com.ccsens.mt.bean.vo.CompeteVo; +import com.ccsens.mt.persist.mapper.CompetePlayerMapper; +import org.apache.ibatis.annotations.Param; + +/** + * 参赛选手信息 + */ +public interface CompetePlayerDao extends CompetePlayerMapper { + /** + * 查询选手的基本信息 + * @param userId 用户ID + * @return 选手信息 + */ + CompeteVo.GetPlayerInfo getInfo(@Param("userId") Long userId); +} diff --git a/mt/src/main/java/com/ccsens/mt/persist/dao/CompeteTeamDao.java b/mt/src/main/java/com/ccsens/mt/persist/dao/CompeteTeamDao.java new file mode 100644 index 00000000..d86f85d1 --- /dev/null +++ b/mt/src/main/java/com/ccsens/mt/persist/dao/CompeteTeamDao.java @@ -0,0 +1,70 @@ +package com.ccsens.mt.persist.dao; + +import com.ccsens.mt.bean.vo.CompeteVo; +import com.ccsens.mt.persist.mapper.CompeteTeamMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @description: + * @author: whj + * @time: 2020/9/3 10:40 + */ +public interface CompeteTeamDao extends CompeteTeamMapper { + + /** + * 统计用户参加项目下分组的数量 + * @param projectId 项目ID + * @param playerId 选手ID + * @param competeTimeId 比赛ID + * @return + */ + long countJoinTeam(@Param("projectId") Long projectId, @Param("playerId") Long playerId, @Param("competeTimeId") Long competeTimeId); + + /** + * 统计用户参加这一届下所有不限组别的队伍数 + * @param playerId 选手ID + * @param competeTimeId 比赛ID + * @return + */ + long countJoinProject(@Param("playerId")Long playerId, @Param("competeTimeId")Long competeTimeId); + + /** + * 根据团队ID查询成员信息 + * @param teamId 团队ID + * @return 成员信息 + */ + List queryMembers(@Param("teamId") Long teamId); + + /** + * 根据团队ID返回团队二维码 + * @param teamId 团队ID + * @return 二维码路径 + */ + String getQrCodeByTeamId(@Param("teamId") Long teamId); + + /** + * 查询用户本届比赛所有的单人项目 + * @param userId 用户ID + * @param competeTimeId 比赛ID + * @return 单人赛项目 + */ + List queryTiwn(@Param("userId") Long userId, @Param("competeTimeId") Long competeTimeId); + + /** + * 查询用户本届比赛所有的团体赛项目 + * @param userId 用户ID + * @param competeTimeId 比赛ID + * @return 团队项目(没有队员信息和队员总数) + */ + List queryTeam(@Param("userId") Long userId, @Param("competeTimeId") Long competeTimeId); + + /** + * 统计用户参加了多少个单人赛 + * @param playerId 选手ID + * @param competeTimeId 比赛ID + * @return + */ + long countTiwnTeam(@Param("playerId") Long playerId, @Param("competeTimeId") Long competeTimeId); +} diff --git a/mt/src/main/java/com/ccsens/mt/service/CompeteService.java b/mt/src/main/java/com/ccsens/mt/service/CompeteService.java index 9ce9de43..b763bd82 100644 --- a/mt/src/main/java/com/ccsens/mt/service/CompeteService.java +++ b/mt/src/main/java/com/ccsens/mt/service/CompeteService.java @@ -4,28 +4,32 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Snowflake; import com.ccsens.mt.bean.dto.CompeteDto; -import com.ccsens.mt.bean.po.CompeteCompany; -import com.ccsens.mt.bean.po.CompeteCompanyExample; -import com.ccsens.mt.bean.po.CompetePlayer; +import com.ccsens.mt.bean.po.*; import com.ccsens.mt.bean.vo.CompeteVo; +import com.ccsens.mt.persist.dao.CompetePlayerDao; +import com.ccsens.mt.persist.dao.CompeteTeamDao; import com.ccsens.mt.persist.dao.CompeteTimeDao; -import com.ccsens.mt.persist.mapper.CompeteCompanyMapper; +import com.ccsens.mt.persist.mapper.*; import com.ccsens.mt.util.Constant; -import com.ccsens.util.CodeEnum; -import com.ccsens.util.RedisKeyManager; -import com.ccsens.util.RedisUtil; +import com.ccsens.util.*; import com.ccsens.util.bean.dto.QueryDto; 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.io.IOException; import java.util.ArrayList; import java.util.List; /** * @author 逗 */ +@Slf4j @Service +@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public class CompeteService implements ICompeteService{ @Resource private CompeteTimeDao competeTimeDao; @@ -35,6 +39,19 @@ public class CompeteService implements ICompeteService{ private CompeteCompanyMapper competeCompanyMapper; @Resource private Snowflake snowflake; + @Resource + private CompeteTeamDao competeTeamDao; + @Resource + private CompetePlayerDao competePlayerDao; + @Resource + private CompeteTeamMemberMapper competeTeamMemberMapper; + @Resource + private CompeteProjectMapper competeProjectMapper; + @Resource + private CompeteProjectPlayerMapper competeProjectPlayerMapper; + @Resource + private CompeteGroupMapper competeGroupMapper; + /** * 查看第几届 @@ -141,8 +158,75 @@ public class CompeteService implements ICompeteService{ * 提交选择的比赛项目 */ @Override - public CompeteVo.CompetePlayerInfo saveCompeteProject(QueryDto params) { - return null; + public CompeteVo.CompetePlayerInfo saveCompeteProject(QueryDto params) throws IOException { + + CompeteProject project = competeProjectMapper.selectByPrimaryKey(params.getParam().getCompeteProjectId()); + log.info("项目信息:{}", project); + if (project == null) { + throw new BaseException(CodeEnum.PARAM_ERROR); + } + CompetePlayer player = getPlayer(params.getUserId()); + + + if (project.getTeam() == Constant.Compete.TEAM_NO) { + // 个人赛 + long joinedNum = competeTeamDao.countTiwnTeam(player.getId(), params.getParam().getCompeteTimeId()); + log.info("个人赛参赛数量:{}", joinedNum); + if (joinedNum >= Constant.Compete.TIWN_MAX_NUM) { + throw new BaseException(CodeEnum.JOINED_MORE); + } + CompeteProjectPlayer projectPlayer = new CompeteProjectPlayer(); + projectPlayer.setId(snowflake.nextId()); + projectPlayer.setPlayerId(player.getId()); + projectPlayer.setProjectId(project.getId()); + projectPlayer.setCompeteTimeId(params.getParam().getCompeteTimeId()); + projectPlayer.setGenderGroup(player.getGender()); + projectPlayer.setCertificate(params.getParam().getCertificate()); + competeProjectPlayerMapper.insertSelective(projectPlayer); + + } else { + // 团体赛 + pageJoinedTeam(project, player, params.getParam().getCompeteTimeId(), null ,false); + // 创建团队 + CompeteTeam team = new CompeteTeam(); + team.setId(snowflake.nextId()); + team.setCreator(player.getId()); + team.setProjectId(project.getId()); + team.setCompeteTimeId(params.getParam().getCompeteTimeId()); + team.setCertificate(params.getParam().getCertificate()); + team.setGenderGroup(player.getGender()); + String qrCode = PropUtil.signUpUrl + "home"; + String qrCodeVisit = QrCodeUtil.urlToQRCode(qrCode, PropUtil.path + "qrCode"); + team.setQrCode(qrCodeVisit); + competeTeamDao.insertSelective(team); + // 加入团队 + CompeteTeamMember teamMember = new CompeteTeamMember(); + teamMember.setId(snowflake.nextId()); + teamMember.setPlayerId(player.getId()); + teamMember.setCompeteTeamId(team.getId()); + teamMember.setCaptain(Constant.Compete.TEAM_LEADER_YES); + competeTeamMemberMapper.insertSelective(teamMember); + + } + + + CompeteGroup group = competeGroupMapper.selectByPrimaryKey(player.getCompeteGroupId()); + CompeteCompany company = competeCompanyMapper.selectByPrimaryKey(player.getCompanyId()); + CompeteVo.CompetePlayerInfo info = new CompeteVo.CompetePlayerInfo(player, group, company,getCompeteProjectAll(params.getUserId(), params.getParam().getCompeteTimeId())); + + + log.info("{}参加返回:{}", params.getUserId(), info); + return info; + } + + private CompetePlayer getPlayer(Long userId) { + CompetePlayerExample playerExample = new CompetePlayerExample(); + playerExample.createCriteria().andUserIdEqualTo(userId); + List players = competePlayerDao.selectByExample(playerExample); + if (CollectionUtil.isEmpty(players)) { + throw new BaseException(CodeEnum.BASE_INFO_LACK); + } + return players.get(0); } /** @@ -150,7 +234,24 @@ public class CompeteService implements ICompeteService{ */ @Override public CompeteVo.CompeteProjectAllByUser queryCompeteProjectAllByUser(QueryDto params) { - return null; + log.info("查看本人所有参赛的项目:{}", params); + return getCompeteProjectAll(params.getUserId(), params.getParam().getCompeteTimeId()); + } + + private CompeteVo.CompeteProjectAllByUser getCompeteProjectAll(Long userId, Long competeTimeId){ + List competeTiwnProjects = competeTeamDao.queryTiwn(userId, competeTimeId); + List competeTeamProjects = competeTeamDao.queryTeam(userId, competeTimeId); + //封装队员信息和总队员数 + competeTeamProjects.forEach(team -> { + List members = competeTeamDao.queryMembers(team.getTeamId()); + team.setMembers(members); + team.setMemberNums(members.size()); + }); + + CompeteVo.CompeteProjectAllByUser compete = new CompeteVo.CompeteProjectAllByUser(); + compete.setCompeteTiwnProjects(competeTiwnProjects); + compete.setCompeteTeamProjects(competeTeamProjects); + return compete; } /** @@ -158,7 +259,7 @@ public class CompeteService implements ICompeteService{ */ @Override public String getQrCodeByTeamId(QueryDto params) { - return null; + return competeTeamDao.getQrCodeByTeamId(params.getParam().getProjectPlayerId()); } /** @@ -166,14 +267,105 @@ public class CompeteService implements ICompeteService{ */ @Override public CompeteVo.GetPlayerInfo getCompetePlayerInfo(QueryDto params) { - return null; + return competePlayerDao.getInfo(params.getUserId()); } /** * 扫码加入团队 */ @Override - public CompeteVo.CompeteTeamProject joinCompeteGroup(QueryDto params) { - return null; + public CompeteVo.CompeteTeamProject joinCompeteGroup(QueryDto params) { + + log.info("扫码加入团队:{}", params); + CompetePlayer player = getPlayer(params.getUserId()); + + CompeteTeam team = competeTeamDao.selectByPrimaryKey(params.getParam().getId()); + log.info("团队信息:{}", team); + if (team == null) { + throw new BaseException(CodeEnum.PARAM_ERROR); + } + // 查找队长信息 + CompetePlayer creator = competePlayerDao.selectByPrimaryKey(team.getCreator()); + // 项目信息 + CompeteProject project = competeProjectMapper.selectByPrimaryKey(team.getProjectId()); + // 判断是否已加入其他团队 + pageJoinedTeam(project, player, team.getCompeteTimeId(), creator, true); + // 判断团队人数 + CompeteTeamMemberExample teamMemberExample = new CompeteTeamMemberExample(); + teamMemberExample.createCriteria().andCompeteTeamIdEqualTo(team.getId()); + long memberNum = competeTeamMemberMapper.countByExample(teamMemberExample); + log.info("已加入团队人数:{}", memberNum); + if (project.getMemberMax() != null && memberNum >= project.getMemberMax()) { + log.info("团队人数:{}已达到最大人数:{}", memberNum, project.getMemberMax()); + throw new BaseException(CodeEnum.TEAM_MEMBER_MORE); + } + // 加入团队 + CompeteTeamMember teamMember = new CompeteTeamMember(); + teamMember.setId(snowflake.nextId()); + teamMember.setPlayerId(player.getId()); + teamMember.setCompeteTeamId(team.getId()); + competeTeamMemberMapper.insertSelective(teamMember); + if (team.getGenderGroup() != Constant.Compete.GENDER_GROUP_MIX && team.getGenderGroup().byteValue() != player.getGender().byteValue()) { + log.info("选手性别{}和团队性别组{}不一致,修改为混合", player.getGender(), team.getGenderGroup()); + CompeteTeam updateTeam = new CompeteTeam(); + updateTeam.setId(team.getId()); + updateTeam.setGenderGroup(Constant.Compete.GENDER_GROUP_MIX); + competeTeamDao.updateByPrimaryKeySelective(updateTeam); + } + + // 查询分组信息 + List members = competeTeamDao.queryMembers(team.getId()); + CompeteProject parent = null; + if (project.getParentId() != null && project.getParentId() != 0L) { + parent = competeProjectMapper.selectByPrimaryKey(project.getParentId()); + } + + CompeteVo.CompeteTeamProject teamProject = new CompeteVo.CompeteTeamProject(team, Constant.Compete.TEAM_LEADER_NO, project, parent == null ? "" : parent.getName(), members); + return teamProject; + } + + /** + * 判断是否已加入其他团队 + * @param project 项目信息 + * @param competeTimeId 比赛ID + * @param player 选手信息 + * @param creator 队长信息 + */ + private void pageJoinedTeam(CompeteProject project, CompetePlayer player, Long competeTimeId, CompetePlayer creator, boolean pageLeader) { + long joinedTeam = 0; + if (project.getJoinRule() == Constant.Compete.PROJECT_JOIN_RULE_GROUP_LIMIT) { + // 同单位同组别 + // 1.与队长同单位且同组别 + if (pageLeader) { + if (!player.getCompanyId().equals(creator.getCompanyId())) { + log.info("单位不一样:{},{}",player.getCompanyId(), creator.getCompanyId()); + throw new BaseException(CodeEnum.TEAM_COMPANY_NOT_SAME); + } + if (player.getCompeteGroupId().longValue() != creator.getCompeteGroupId().longValue()) { + log.info("组别不一样:{},{}",player.getCompanyId(), creator.getCompanyId()); + throw new BaseException(CodeEnum.TEAM_GROUP_NOT_SAME); + } + } + + //2.只能参加项目下的一个团队 + joinedTeam = competeTeamDao.countJoinTeam(project.getId(), player.getId(), competeTimeId); + log.info("{}参加{}比赛的{}同组别项目数:{}", player.getId(), competeTimeId, project.getId(), joinedTeam); + + } else if (project.getJoinRule() == Constant.Compete.PROJECT_JOIN_RULE_GROUP_NOT_LIMIT) { + // 同单位不限组别 + // 1.用户与队长同单位 + if (pageLeader) { + if (!player.getCompanyId().equals(creator.getCompanyId())) { + log.info("单位不一样:{},{}", player.getCompanyId(), creator.getCompanyId()); + throw new BaseException(CodeEnum.TEAM_COMPANY_NOT_SAME); + } + } + // 2.只能加入一个项目的一个团队 + joinedTeam = competeTeamDao.countJoinProject(player.getId(), competeTimeId); + log.info("{}参加{}比赛的不限组别项目数:{}", player.getId(), competeTimeId, joinedTeam); + } + if (joinedTeam > 0) { + throw new BaseException(CodeEnum.JOINED_SAME); + } } } diff --git a/mt/src/main/java/com/ccsens/mt/service/ICompeteService.java b/mt/src/main/java/com/ccsens/mt/service/ICompeteService.java index 23621996..0646b98a 100644 --- a/mt/src/main/java/com/ccsens/mt/service/ICompeteService.java +++ b/mt/src/main/java/com/ccsens/mt/service/ICompeteService.java @@ -4,6 +4,7 @@ import com.ccsens.mt.bean.dto.CompeteDto; import com.ccsens.mt.bean.vo.CompeteVo; import com.ccsens.util.bean.dto.QueryDto; +import java.io.IOException; import java.util.List; /** @@ -56,7 +57,7 @@ public interface ICompeteService { * @param params * @return */ - CompeteVo.CompetePlayerInfo saveCompeteProject(QueryDto params); + CompeteVo.CompetePlayerInfo saveCompeteProject(QueryDto params) throws IOException; /** * 查看本人所有参赛的项目 @@ -84,5 +85,5 @@ public interface ICompeteService { * @param params * @return */ - CompeteVo.CompeteTeamProject joinCompeteGroup(QueryDto params); + CompeteVo.CompeteTeamProject joinCompeteGroup(QueryDto params); } 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 842bbd22..51e556c8 100644 --- a/mt/src/main/java/com/ccsens/mt/util/Constant.java +++ b/mt/src/main/java/com/ccsens/mt/util/Constant.java @@ -30,4 +30,21 @@ public class Constant { } public static final int VOTE_TOTAL = 2; + + public final static class Compete{ + public final static byte PROJECT_JOIN_RULE_GROUP_LIMIT = 0; + public final static byte PROJECT_JOIN_RULE_GROUP_NOT_LIMIT = 1; + public final static byte GENDER_GROUP_WOMAN = 0; + public final static byte GENDER_GROUP_MAN = 1; + public final static byte GENDER_GROUP_MIX = 2; + public final static byte TEAM_LEADER_YES = 1; + public final static byte TEAM_LEADER_NO = 0; + public final static byte TEAM_NO = 0; + public final static byte TEAM_YES = 1; + public final static int TIWN_MAX_NUM = 3; + + + + + } } diff --git a/mt/src/main/resources/application-dev.yml b/mt/src/main/resources/application-dev.yml index f8ff8692..0865be50 100644 --- a/mt/src/main/resources/application-dev.yml +++ b/mt/src/main/resources/application-dev.yml @@ -26,4 +26,6 @@ spring: timeout: 1000ms swagger: enable: true - +file: + path: /home/cloud/mt/uploads/ + signUpUrl: https://test.tall.wiki/signup/ diff --git a/mt/src/main/resources/application-prod.yml b/mt/src/main/resources/application-prod.yml index 66fae7bc..2976c702 100644 --- a/mt/src/main/resources/application-prod.yml +++ b/mt/src/main/resources/application-prod.yml @@ -31,4 +31,7 @@ eureka: ip-address: 192.144.182.42 gatewayUrl: https://www.tall.wiki/gateway/ -notGatewayUrl: https://www.tall.wiki/ \ No newline at end of file +notGatewayUrl: https://www.tall.wiki/ +file: + path: /home/cloud/mt/uploads/ + signUpUrl: https://www.tall.wiki/signup/ \ No newline at end of file diff --git a/mt/src/main/resources/application-test.yml b/mt/src/main/resources/application-test.yml index 8ef29ee0..7f8a933b 100644 --- a/mt/src/main/resources/application-test.yml +++ b/mt/src/main/resources/application-test.yml @@ -29,4 +29,6 @@ swagger: eureka: instance: ip-address: 192.168.0.99 - +file: + path: /home/cloud/mt/uploads/ + signUpUrl: https://test.tall.wiki/signup/ diff --git a/mt/src/main/resources/mapper_dao/CompetePlayerDao.xml b/mt/src/main/resources/mapper_dao/CompetePlayerDao.xml new file mode 100644 index 00000000..1ba0c914 --- /dev/null +++ b/mt/src/main/resources/mapper_dao/CompetePlayerDao.xml @@ -0,0 +1,29 @@ + + + + + + + \ No newline at end of file diff --git a/mt/src/main/resources/mapper_dao/CompeteTeamDao.xml b/mt/src/main/resources/mapper_dao/CompeteTeamDao.xml new file mode 100644 index 00000000..085e2867 --- /dev/null +++ b/mt/src/main/resources/mapper_dao/CompeteTeamDao.xml @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 28f628b2..d1934888 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ cloudutil util tall - + ht game mt diff --git a/util/src/main/java/com/ccsens/util/CodeEnum.java b/util/src/main/java/com/ccsens/util/CodeEnum.java index a2cd9785..49f0d752 100644 --- a/util/src/main/java/com/ccsens/util/CodeEnum.java +++ b/util/src/main/java/com/ccsens/util/CodeEnum.java @@ -140,6 +140,13 @@ public enum CodeEnum { NOT_CONFIG_OR_ERR(118,"缺少配置信息,或配置信息异常",true), GROUP_MEMBER_LIMIT(119,"当前组内人员已满,请选择其他组",true), GROUP_NOT_CHOICE(120,"请选择要加入的队伍",true), + JOINED_TEAM(121,"您已经加入队伍,无需重复加入",true), + TEAM_MEMBER_MORE(122,"加入队伍的人数已经达到上限,请选择其他队伍",true), + TEAM_COMPANY_NOT_SAME(123,"对不起,您和团队其他人不是同一个单位的", true), + TEAM_GROUP_NOT_SAME(124,"对不起,您和团队其他人不是同一个组别的", true), + BASE_INFO_LACK(125,"请先填写您的基本信息", true), + JOINED_MORE(126,"该类型比赛您参赛的数目已达上限", true), + JOINED_SAME(127,"您已经参加同类型的比赛了,不能再重复参加参赛", true), ; diff --git a/util/src/main/java/com/ccsens/util/PropUtil.java b/util/src/main/java/com/ccsens/util/PropUtil.java index 3d02c9c2..7ca41f38 100644 --- a/util/src/main/java/com/ccsens/util/PropUtil.java +++ b/util/src/main/java/com/ccsens/util/PropUtil.java @@ -22,6 +22,7 @@ public class PropUtil { public static String wxPrefix; public static String smsCode; public static String openWx; + public static String signUpUrl; @Value("${gatewayUrl:}") @@ -69,4 +70,8 @@ public class PropUtil { public void setOpenWx(String openWx) { PropUtil.openWx = openWx; } + @Value("${file.signUpUrl:}") + public void setSignUpUrl(String signUpUrl) { + PropUtil.signUpUrl = signUpUrl; + } } diff --git a/util/src/main/java/com/ccsens/util/WebConstant.java b/util/src/main/java/com/ccsens/util/WebConstant.java index 6afa7e7c..0e78721e 100644 --- a/util/src/main/java/com/ccsens/util/WebConstant.java +++ b/util/src/main/java/com/ccsens/util/WebConstant.java @@ -1001,4 +1001,27 @@ public class WebConstant { } //wbs表时间类型==================================================================/ + /** + * redis类型 + */ + public enum RedisType{ + /**redis类型**/ + STRING(0,"字符串类型"), + LIST_INDEX(1,"列表-某一个"), + LIST_RANGE(2,"列表-范围"), + SET(3,"集合"), + SORT_SET_RANGE(4,"有序集合-index"), + SORT_SET_SCORE(5,"有序集合-分数"), + HASH_ITEM(6, "哈希-某一项"), + HASH(7, "哈希-全部"), + ; + /**类型code*/ + public int type; + /**类型*/ + public String message; + RedisType(int type, String message) { + this.type = type; + this.message = message; + } + } } diff --git a/util/src/main/java/com/ccsens/util/redis/AbstractRedisService.java b/util/src/main/java/com/ccsens/util/redis/AbstractRedisService.java new file mode 100644 index 00000000..2407ebb6 --- /dev/null +++ b/util/src/main/java/com/ccsens/util/redis/AbstractRedisService.java @@ -0,0 +1,150 @@ +package com.ccsens.util.redis; + +import com.ccsens.util.RedisUtil; +import com.ccsens.util.WebConstant; +import lombok.extern.slf4j.Slf4j; + +import javax.annotation.Resource; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * redis查询 + * @author whj + */ +@Slf4j +public abstract class AbstractRedisService { + + @Resource + private RedisUtil redisUtil; + + public Object queryRedis(String key, WebConstant.RedisType type, Long expireTime, Object... indexArr) { + Object obj = queryByType(key, type, indexArr); + log.info("key:{},value:{}", key, obj); + if (!isEmpty(obj)) { + return obj; + } + synchronized (this) { + Object obj2 = queryByType(key, type, indexArr); + if (!isEmpty(obj2)) { + return obj2; + } + // 查询数据库业务 + Object o = queryDb(key); + log.info("Key:{}查询数据库的结果是:{}", key, o); + if (isEmpty(o)) { + return null; + } + saveByType(key, o, expireTime, type, indexArr); + return o; + } + } + + private boolean isEmpty(Object obj) { + if (obj == null) { + return true; + } + + if (obj instanceof Collection) { + Collection collection = (Collection)obj; + if (collection.isEmpty()) { + return true; + } + } + if (obj instanceof Map) { + Map map = (Map)obj; + return map.isEmpty(); + } + + return false; + } + + /** + * 根据redis_key 查询数据库中对应的值 + * @param key redis key + * @return value + */ + public abstract Object queryDb(String key); + + + /** + * 查询不同类型的值 + * @param key redis key + * @param type 查询redis类型 + * @param indexArr 查询list,zset, hash时需要的其他字段 + * @return value + */ + private Object queryByType(String key, WebConstant.RedisType type, Object... indexArr) { + switch (type) { + case STRING: return redisUtil.get(key); + case LIST_INDEX: return redisUtil.lGetIndex(key, (Long)indexArr[0]); + case LIST_RANGE: return redisUtil.lGet(key, (Long)indexArr[0], (Long)indexArr[1]); + case SET: return redisUtil.sGet(key); + case SORT_SET_RANGE: return redisUtil.zsGet(key, (Long)indexArr[0], (Long)indexArr[1]); + case SORT_SET_SCORE: return redisUtil.zsGetByScore(key, (Double) indexArr[0], (Double)indexArr[1]); + case HASH_ITEM: return redisUtil.hget(key, (String)indexArr[0]); + case HASH: return redisUtil.hmget(key); + default: return null; + } + } + + /** + * 保存redis的值 + * @param key redisKey + * @param value value + * @param expireTime 过期时间,null为永久 + * @param type 类型 + * @param hashItem 仅hash类型时需传值,读取某一个item时使用 + * + */ + private void saveByType(String key, Object value, Long expireTime, WebConstant.RedisType type, Object... hashItem) { + switch (type) { + case STRING: + if (expireTime == null) { + redisUtil.set(key, value); + } else { + redisUtil.set(key, value, expireTime); + } + break; + case LIST_INDEX: + if (expireTime == null) { + redisUtil.lSet(key, value); + } else { + redisUtil.lSet(key, value, expireTime); + } + break; + case LIST_RANGE: + if (expireTime == null) { + redisUtil.lSet(key, (List)value); + } else { + redisUtil.lSet(key, (List)value, expireTime); + } + break; + case SET: + case SORT_SET_RANGE: + case SORT_SET_SCORE: + if (expireTime == null) { + redisUtil.sSet(key, value); + } else { + redisUtil.sSet(key, value, expireTime); + } + break; + case HASH_ITEM: + if (expireTime == null) { + redisUtil.hset(key, (String)hashItem[0], value); + } else { + redisUtil.hset(key, (String)hashItem[0], value, expireTime); + } + break; + case HASH: + if (expireTime == null) { + redisUtil.hmset(key, (Map)value); + } else { + redisUtil.hmset(key, (Map)value, expireTime); + } + break; + default: + } + } +}