Commit 211773ff authored by liming's avatar liming

feat(初始化项目): 用户选装信息查询、保存

parent 60c7feeb
package com.antai.sport.http.server.constants;
/**
* @Author liming
* @Date 2021/8/23 15:42
* @Email lmmax@126.com
* @Description:
*/
public class UserSectionType {
public final static Integer ROLE = 1;
public final static Integer EQUIPMENT = 2;
}
...@@ -2,6 +2,7 @@ package com.antai.sport.http.server.game.api.business.sport.user; ...@@ -2,6 +2,7 @@ package com.antai.sport.http.server.game.api.business.sport.user;
import com.antai.sport.http.server.common.annotation.LoginSportUser; import com.antai.sport.http.server.common.annotation.LoginSportUser;
import com.antai.sport.http.server.common.base.Result; import com.antai.sport.http.server.common.base.Result;
import com.antai.sport.http.server.constants.UserSectionType;
import com.antai.sport.http.server.game.api.business.sport.user.dto.*; import com.antai.sport.http.server.game.api.business.sport.user.dto.*;
import com.antai.sport.http.server.repository.sport.entity.SportUser; import com.antai.sport.http.server.repository.sport.entity.SportUser;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
...@@ -10,6 +11,7 @@ import org.springframework.http.ResponseEntity; ...@@ -10,6 +11,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List;
import static com.antai.sport.http.server.common.util.ResultUtil.success; import static com.antai.sport.http.server.common.util.ResultUtil.success;
...@@ -40,7 +42,7 @@ public class SportUserController { ...@@ -40,7 +42,7 @@ public class SportUserController {
} }
@ApiOperation(value = "获取用户基本信息所需基础数据") @ApiOperation(value = "获取用户基本信息所需基础数据")
@GetMapping("/user/init/info") @GetMapping("/user/info/init")
public ResponseEntity<Result<RespRegisterInfo>> getUserInitInfo() { public ResponseEntity<Result<RespRegisterInfo>> getUserInitInfo() {
return success(sportUserService.getRegisterInfo()); return success(sportUserService.getRegisterInfo());
} }
...@@ -57,4 +59,30 @@ public class SportUserController { ...@@ -57,4 +59,30 @@ public class SportUserController {
public ResponseEntity<Result<RespBaseUserInfo>> getUserInfo(@LoginSportUser SportUser loginUser) { public ResponseEntity<Result<RespBaseUserInfo>> getUserInfo(@LoginSportUser SportUser loginUser) {
return success(new RespBaseUserInfo(loginUser)); return success(new RespBaseUserInfo(loginUser));
} }
@ApiOperation(value = "获取用户角色信息")
@GetMapping("/user/role")
public ResponseEntity<Result<List<RespSportSection>>> getUserRole(@LoginSportUser SportUser loginUser) {
return success(sportUserService.getUserSection(UserSectionType.ROLE, loginUser));
}
@ApiOperation(value = "获取用户装备信息")
@GetMapping("/user/equipment")
public ResponseEntity<Result<List<RespSportSection>>> getUserEquipment(@LoginSportUser SportUser loginUser) {
return success(sportUserService.getUserSection(UserSectionType.EQUIPMENT, loginUser));
}
@ApiOperation(value = "保存角色信息")
@PostMapping("/user/role")
public ResponseEntity<Result> saveUserRole(@LoginSportUser SportUser loginUser, @RequestBody List<ReqSaveUserSkin> param) {
sportUserService.saveUserSkin(UserSectionType.ROLE, loginUser, param);
return success();
}
@ApiOperation(value = "保存设备信息")
@PostMapping("/user/equipment")
public ResponseEntity<Result> saveUserEquipment(@LoginSportUser SportUser loginUser, @RequestBody List<ReqSaveUserSkin> param) {
sportUserService.saveUserSkin(UserSectionType.EQUIPMENT, loginUser, param);
return success();
}
} }
package com.antai.sport.http.server.game.api.business.sport.user;
import com.antai.sport.http.server.repository.sport.entity.SportUserSectionSkin;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.stereotype.Service;
/**
* @Author liming
* @Date 2021/8/23 18:02
* @Email lmmax@126.com
* @Description:
*/
@Service
public interface SportUserSectionSkinIService extends IService<SportUserSectionSkin> {
}
package com.antai.sport.http.server.game.api.business.sport.user;
import com.antai.sport.http.server.repository.sport.entity.SportUserSectionSkin;
import com.antai.sport.http.server.repository.sport.mapper.SportUserSectionSkinMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* @Author liming
* @Date 2021/8/23 18:03
* @Email lmmax@126.com
* @Description:
*/
@Service
public class SportUserSectionSkinService extends ServiceImpl<SportUserSectionSkinMapper, SportUserSectionSkin> implements SportUserSectionSkinIService {
}
...@@ -12,12 +12,15 @@ import com.antai.sport.http.server.common.vo.SysCodeDetailVO; ...@@ -12,12 +12,15 @@ import com.antai.sport.http.server.common.vo.SysCodeDetailVO;
import com.antai.sport.http.server.constants.DeleteStatus; import com.antai.sport.http.server.constants.DeleteStatus;
import com.antai.sport.http.server.constants.LoginMode; import com.antai.sport.http.server.constants.LoginMode;
import com.antai.sport.http.server.constants.SysCodeConstants; import com.antai.sport.http.server.constants.SysCodeConstants;
import com.antai.sport.http.server.game.api.business.sport.user.dto.ReqLogin; import com.antai.sport.http.server.game.api.business.sport.user.dto.*;
import com.antai.sport.http.server.game.api.business.sport.user.dto.ReqSaveUserInfo; import com.antai.sport.http.server.repository.sport.entity.SportSection;
import com.antai.sport.http.server.game.api.business.sport.user.dto.RespLogin; import com.antai.sport.http.server.repository.sport.entity.SportSectionSkin;
import com.antai.sport.http.server.game.api.business.sport.user.dto.RespRegisterInfo;
import com.antai.sport.http.server.repository.sport.entity.SportUser; import com.antai.sport.http.server.repository.sport.entity.SportUser;
import com.antai.sport.http.server.repository.sport.entity.SportUserSectionSkin;
import com.antai.sport.http.server.repository.sport.mapper.SportSectionMapper;
import com.antai.sport.http.server.repository.sport.mapper.SportSectionSkinMapper;
import com.antai.sport.http.server.repository.sport.mapper.SportUserMapper; import com.antai.sport.http.server.repository.sport.mapper.SportUserMapper;
import com.antai.sport.http.server.repository.sport.mapper.SportUserSectionSkinMapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
...@@ -27,8 +30,7 @@ import org.springframework.util.DigestUtils; ...@@ -27,8 +30,7 @@ import org.springframework.util.DigestUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.*;
import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
...@@ -47,6 +49,14 @@ public class SportUserService { ...@@ -47,6 +49,14 @@ public class SportUserService {
@Resource @Resource
private SportUserMapper sportUserMapper; private SportUserMapper sportUserMapper;
@Resource @Resource
private SportSectionMapper sportSectionMapper;
@Resource
private SportSectionSkinMapper sportSectionSkinMapper;
@Resource
private SportUserSectionSkinMapper sportUserSectionSkinMapper;
@Resource
private SportUserSectionSkinService sportUserSectionSkinService;
@Resource
private TokenService tokenService; private TokenService tokenService;
@Resource @Resource
private CommonSmsService commonSmsService; private CommonSmsService commonSmsService;
...@@ -162,4 +172,90 @@ public class SportUserService { ...@@ -162,4 +172,90 @@ public class SportUserService {
redisTemplate.delete("sport_user::" + loginUser.getPhone()); redisTemplate.delete("sport_user::" + loginUser.getPhone());
} }
/**
* @param loginUser
* @return
*/
public List<RespSportSection> getUserSection(Integer sectionType, SportUser loginUser) {
if (loginUser.getSex() == null) {
throw new BusinessException("请先选择姓名别");
}
List<RespSportSection> resultList = new ArrayList<>();
QueryWrapper<SportSection> sectionQueryWrapper = new QueryWrapper<>();
sectionQueryWrapper.eq("type", sectionType);
sectionQueryWrapper.orderBy(true, true, Arrays.asList("show_order", "id"));
List<SportSection> sectionList = sportSectionMapper.selectList(sectionQueryWrapper);
QueryWrapper<SportSectionSkin> sectionSkinQueryWrapper = new QueryWrapper<>();
sectionSkinQueryWrapper.eq("type", sectionType);
sectionSkinQueryWrapper.eq("sex", loginUser.getSex());
sectionSkinQueryWrapper.orderBy(true, true, Arrays.asList("show_order", "id"));
List<SportSectionSkin> sectionSkinList = sportSectionSkinMapper.selectList(sectionSkinQueryWrapper);
Map<Long, String> skinKeyMap = new HashMap<>();
Map<Long, List<RespSportSectionSkin>> sectionSkinMap = new HashMap<>();
for (SportSectionSkin item : sectionSkinList) {
skinKeyMap.put(item.getId(), item.getSkinKey());
if (!sectionSkinMap.containsKey(item.getSection())) {
sectionSkinMap.put(item.getSection(), new ArrayList<>());
}
sectionSkinMap.get(item.getSection()).add(new RespSportSectionSkin(item));
}
Map<Long, String> userSkinMap = new HashMap<>();
QueryWrapper<SportUserSectionSkin> userSkinQueryWrapper = new QueryWrapper();
userSkinQueryWrapper.eq("sport_user_id", loginUser.getId());
userSkinQueryWrapper.eq("type", sectionType);
List<SportUserSectionSkin> userSkinList = sportUserSectionSkinMapper.selectList(userSkinQueryWrapper);
for (SportUserSectionSkin item : userSkinList) {
if (skinKeyMap.containsKey(item.getSkin())) {
userSkinMap.put(item.getSection(), skinKeyMap.get(item.getSkin()));
}
}
for (SportSection item : sectionList) {
if (sectionSkinMap.containsKey(item.getId())) {
RespSportSection section = new RespSportSection(item);
section.setSkinList(sectionSkinMap.get(item.getId()));
if (userSkinMap.containsKey(item.getId())) {
section.setSkinKey(userSkinMap.get(item.getId()));
} else {
section.setSkinKey(section.getSkinList().get(0).getKey());
}
resultList.add(section);
}
}
return resultList;
}
/**
* 保存用户皮肤
*
* @param sectionType
* @param loginUser
* @param skinList
*/
public void saveUserSkin(Integer sectionType, SportUser loginUser, List<ReqSaveUserSkin> skinList) {
List<Long> delUserSectionList = new ArrayList<>(skinList.size());
List<SportUserSectionSkin> saveList = new ArrayList<>();
for (ReqSaveUserSkin item : skinList) {
delUserSectionList.add(item.getSection());
SportUserSectionSkin userSkin = new SportUserSectionSkin();
userSkin.setSportUserId(loginUser.getId());
userSkin.setSection(item.getSection());
userSkin.setSkin(item.getSkin());
userSkin.setType(sectionType);
saveList.add(userSkin);
}
QueryWrapper<SportUserSectionSkin> userSkinQueryWrapper = new QueryWrapper<>();
userSkinQueryWrapper.eq("sport_user_id", loginUser.getId());
userSkinQueryWrapper.in("section", delUserSectionList);
sportUserSectionSkinMapper.delete(userSkinQueryWrapper);
sportUserSectionSkinService.saveBatch(saveList);
}
} }
package com.antai.sport.http.server.game.api.business.sport.user.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author liming
* @Date 2021/8/23 17:41
* @Email lmmax@126.com
* @Description:
*/
@Data
public class ReqSaveUserSkin {
@ApiModelProperty(value = "部位id")
private Long section;
@ApiModelProperty(value = "皮肤id")
private Long skin;
}
package com.antai.sport.http.server.game.api.business.sport.user.dto;
import com.antai.sport.http.server.repository.sport.entity.SportSection;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @Author liming
* @Date 2021/8/23 15:48
* @Email lmmax@126.com
* @Description:
*/
@Data
public class RespSportSection {
public RespSportSection(SportSection sportSection) {
this.id = sportSection.getId();
this.type = sportSection.getType();
this.name = sportSection.getName();
this.key = sportSection.getSectionKey();
}
@ApiModelProperty("部位id")
private Long id;
@ApiModelProperty("部位类型")
private Integer type;
@ApiModelProperty("部位名称")
private String name;
@ApiModelProperty("部位key")
private String key;
@ApiModelProperty("当前选中皮肤key")
private String skinKey;
@ApiModelProperty("皮肤列表")
List<RespSportSectionSkin> skinList;
}
package com.antai.sport.http.server.game.api.business.sport.user.dto;
import com.antai.sport.http.server.repository.sport.entity.SportSectionSkin;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author liming
* @Date 2021/8/23 15:48
* @Email lmmax@126.com
* @Description:
*/
@Data
public class RespSportSectionSkin {
public RespSportSectionSkin(SportSectionSkin sportSectionSkin) {
this.id = sportSectionSkin.getId();
this.name = sportSectionSkin.getName();
this.key = sportSectionSkin.getSkinKey();
}
@ApiModelProperty("皮肤id")
private Long id;
@ApiModelProperty("皮肤名称")
private String name;
@ApiModelProperty("皮肤key")
private String key;
}
package com.antai.sport.http.server.repository.sport.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 用户默认选装
* </p>
*
* @author liming
* @since 2021-08-23
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SportDefaultSectionSkin implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 性别
*/
private Integer sex;
/**
* 类型 1.身体部位 2.设备
*/
private Integer type;
/**
* 部位
*/
private Long section;
/**
* 皮肤
*/
private Long skin;
/**
* 备注
*/
private String remark;
/**
* 排序号
*/
private Integer showOrder;
/**
* 删除标记
*/
@TableLogic
private Integer deleted;
/**
* 数据版本号
*/
private Integer version;
/**
* 创建人
*/
private Long ctUserId;
/**
* 创建时间
*/
private LocalDateTime ctDate;
/**
* 最后修改人
*/
private Long lmUserId;
/**
* 最后修改时间
*/
private LocalDateTime lmDate;
}
package com.antai.sport.http.server.repository.sport.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 用户选装部位
* </p>
*
* @author liming
* @since 2021-08-23
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SportSection implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 类型 1.身体部位 2.设备
*/
private Integer type;
/**
* 名称
*/
private String name;
/**
* 部位Key
*/
private String sectionKey;
/**
* 备注
*/
private String remark;
/**
* 排序号
*/
private Integer showOrder;
/**
* 删除标记
*/
@TableLogic
private Integer deleted;
/**
* 数据版本号
*/
private Integer version;
/**
* 创建人
*/
private Long ctUserId;
/**
* 创建时间
*/
private LocalDateTime ctDate;
/**
* 最后修改人
*/
private Long lmUserId;
/**
* 最后修改时间
*/
private LocalDateTime lmDate;
}
package com.antai.sport.http.server.repository.sport.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 用户选装部位皮肤
* </p>
*
* @author liming
* @since 2021-08-23
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SportSectionSkin implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 性别
*/
private Integer sex;
/**
* 类型 1.身体部位 2.设备
*/
private Integer type;
/**
* 部位
*/
private Long section;
/**
* 名称
*/
private String name;
/**
* 游戏中的标识
*/
private String skinKey;
/**
* 备注
*/
private String remark;
/**
* 排序号
*/
private Integer showOrder;
/**
* 删除标记
*/
@TableLogic
private Integer deleted;
/**
* 数据版本号
*/
private Integer version;
/**
* 创建人
*/
private Long ctUserId;
/**
* 创建时间
*/
private LocalDateTime ctDate;
/**
* 最后修改人
*/
private Long lmUserId;
/**
* 最后修改时间
*/
private LocalDateTime lmDate;
}
package com.antai.sport.http.server.repository.sport.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 用户选装外观
* </p>
*
* @author liming
* @since 2021-08-23
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SportUserSectionSkin implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 用户id
*/
private Long sportUserId;
/**
* 类型 1.身体部位 2.设备
*/
private Integer type;
/**
* 部位
*/
private Long section;
/**
* 皮肤
*/
private Long skin;
/**
* 删除标记
*/
@TableLogic
private Integer deleted;
/**
* 数据版本号
*/
private Integer version;
/**
* 创建时间
*/
private LocalDateTime ctDate;
}
package com.antai.sport.http.server.repository.sport.mapper;
import com.antai.sport.http.server.repository.sport.entity.SportDefaultSectionSkin;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 用户默认选装 Mapper 接口
* </p>
*
* @author liming
* @since 2021-08-23
*/
public interface SportDefaultSectionSkinMapper extends BaseMapper<SportDefaultSectionSkin> {
}
package com.antai.sport.http.server.repository.sport.mapper;
import com.antai.sport.http.server.repository.sport.entity.SportSection;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 用户选装部位 Mapper 接口
* </p>
*
* @author liming
* @since 2021-08-23
*/
public interface SportSectionMapper extends BaseMapper<SportSection> {
}
package com.antai.sport.http.server.repository.sport.mapper;
import com.antai.sport.http.server.repository.sport.entity.SportSectionSkin;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 用户选装部位皮肤 Mapper 接口
* </p>
*
* @author liming
* @since 2021-08-23
*/
public interface SportSectionSkinMapper extends BaseMapper<SportSectionSkin> {
}
package com.antai.sport.http.server.repository.sport.mapper;
import com.antai.sport.http.server.repository.sport.entity.SportUserSectionSkin;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 用户选装外观 Mapper 接口
* </p>
*
* @author liming
* @since 2021-08-23
*/
public interface SportUserSectionSkinMapper extends BaseMapper<SportUserSectionSkin> {
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.antai.sport.http.server.repository.sport.mapper.SportDefaultSectionSkinMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.antai.sport.http.server.repository.sport.mapper.SportSectionMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.antai.sport.http.server.repository.sport.mapper.SportSectionSkinMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.antai.sport.http.server.repository.sport.mapper.SportUserSectionSkinMapper">
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment