浏览代码

更新文件

slambb 4 年之前
父节点
当前提交
d1131d92ef
共有 91 个文件被更改,包括 2430 次插入121 次删除
  1. 8 0
      pom.xml
  2. 2 0
      src/main/java/com/td/boss/BossApplication.java
  3. 32 29
      src/main/java/com/td/boss/aspect/SafetyAspect.java
  4. 14 1
      src/main/java/com/td/boss/common/pojo/Result.java
  5. 24 0
      src/main/java/com/td/boss/config/enums/ResultEnum.java
  6. 4 12
      src/main/java/com/td/boss/config/security/CaptchaFilterConfig.java
  7. 8 5
      src/main/java/com/td/boss/config/security/SecurityConfig.java
  8. 34 0
      src/main/java/com/td/boss/config/token/WebConfig.java
  9. 90 0
      src/main/java/com/td/boss/filter/gameFilter.java
  10. 165 0
      src/main/java/com/td/boss/game/combosses/controller/ComBossesController.java
  11. 9 1
      src/main/java/com/td/boss/game/combosses/pojo/ComBosses.java
  12. 14 0
      src/main/java/com/td/boss/game/combosses/repository/ComBossesRepository.java
  13. 11 0
      src/main/java/com/td/boss/game/combosses/service/ComBossesService.java
  14. 41 0
      src/main/java/com/td/boss/game/combosses/service/ComBossesServiceImpl.java
  15. 19 0
      src/main/java/com/td/boss/game/combosses/vo/BossesVo.java
  16. 5 1
      src/main/java/com/td/boss/game/combosses/vo/ComBossesVo.java
  17. 15 0
      src/main/java/com/td/boss/game/combossesbattle/controller/ComBossesBattleController.java
  18. 31 0
      src/main/java/com/td/boss/game/combossesbattle/pojo/ComBossesBattle.java
  19. 9 0
      src/main/java/com/td/boss/game/combossesbattle/repository/ComBossesBattleRepository.java
  20. 12 0
      src/main/java/com/td/boss/game/combossesbattle/service/ComBossesBattleService.java
  21. 27 0
      src/main/java/com/td/boss/game/combossesbattle/service/ComBossesBattleServiceImpl.java
  22. 26 0
      src/main/java/com/td/boss/game/combossesbattle/vo/ComBossesBattleVo.java
  23. 63 0
      src/main/java/com/td/boss/game/combossesdescribe/controller/ComBossesDescribeController.java
  24. 26 0
      src/main/java/com/td/boss/game/combossesdescribe/pojo/ComBossesDescribe.java
  25. 9 0
      src/main/java/com/td/boss/game/combossesdescribe/repository/ComBossesDescribeRepository.java
  26. 12 0
      src/main/java/com/td/boss/game/combossesdescribe/service/ComBossesDescribeService.java
  27. 28 0
      src/main/java/com/td/boss/game/combossesdescribe/service/ComBossesDescribeServiceImpl.java
  28. 24 0
      src/main/java/com/td/boss/game/combossesdescribe/vo/BossesDescribeVo.java
  29. 22 0
      src/main/java/com/td/boss/game/combossesdescribe/vo/ComBossesDescribeVo.java
  30. 15 0
      src/main/java/com/td/boss/game/comequipattributes/controller/ComEquipAttributesController.java
  31. 27 0
      src/main/java/com/td/boss/game/comequipattributes/pojo/ComEquipAttributes.java
  32. 13 0
      src/main/java/com/td/boss/game/comequipattributes/repository/ComEquipAttributesRepository.java
  33. 16 0
      src/main/java/com/td/boss/game/comequipattributes/service/ComEquipAttributesService.java
  34. 36 0
      src/main/java/com/td/boss/game/comequipattributes/service/ComEquipAttributesServiceImpl.java
  35. 23 0
      src/main/java/com/td/boss/game/comequipattributes/vo/ComEquipAttributesVo.java
  36. 12 0
      src/main/java/com/td/boss/game/comequipchest/controller/ComEquipChestController.java
  37. 8 6
      src/main/java/com/td/boss/game/comequipchest/pojo/ComEquipChest.java
  38. 4 0
      src/main/java/com/td/boss/game/comequipchest/repository/ComEquipChestRepository.java
  39. 11 0
      src/main/java/com/td/boss/game/comequipchest/service/ComEquipChestService.java
  40. 14 0
      src/main/java/com/td/boss/game/comequipchest/service/ComEquipChestServiceImpl.java
  41. 7 5
      src/main/java/com/td/boss/game/comequipchest/vo/ComEquipChestVo.java
  42. 47 0
      src/main/java/com/td/boss/game/comequips/controller/ComEquipsController.java
  43. 4 1
      src/main/java/com/td/boss/game/comequips/pojo/ComEquips.java
  44. 7 0
      src/main/java/com/td/boss/game/comequips/service/ComEquipsService.java
  45. 6 0
      src/main/java/com/td/boss/game/comequips/service/ComEquipsServiceImpl.java
  46. 26 0
      src/main/java/com/td/boss/game/comequiptype/controller/ComEquipTypeController.java
  47. 22 0
      src/main/java/com/td/boss/game/comequiptype/pojo/ComEquipType.java
  48. 9 0
      src/main/java/com/td/boss/game/comequiptype/repository/ComEquipTypeRepository.java
  49. 16 0
      src/main/java/com/td/boss/game/comequiptype/service/ComEquipTypeService.java
  50. 29 0
      src/main/java/com/td/boss/game/comequiptype/service/ComEquipTypeServiceImpl.java
  51. 18 0
      src/main/java/com/td/boss/game/comequiptype/vo/ComEquipTypeVo.java
  52. 4 0
      src/main/java/com/td/boss/game/comgeneralattributes/pojo/ComGeneralAttributes.java
  53. 4 0
      src/main/java/com/td/boss/game/comgeneralattributes/repository/ComGeneralAttributesRepository.java
  54. 10 0
      src/main/java/com/td/boss/game/comgeneralattributes/service/ComGeneralAttributesService.java
  55. 9 0
      src/main/java/com/td/boss/game/comgeneralattributes/service/ComGeneralAttributesServiceImpl.java
  56. 4 0
      src/main/java/com/td/boss/game/comgeneralattributes/vo/ComGeneralAttributesVo.java
  57. 498 0
      src/main/java/com/td/boss/game/complayergoods/controller/ComPlayerGoodsController.java
  58. 34 0
      src/main/java/com/td/boss/game/complayergoods/pojo/ComPlayerGoods.java
  59. 14 0
      src/main/java/com/td/boss/game/complayergoods/repository/ComPlayerGoodsRepository.java
  60. 25 0
      src/main/java/com/td/boss/game/complayergoods/service/ComPlayerGoodsService.java
  61. 38 0
      src/main/java/com/td/boss/game/complayergoods/service/ComPlayerGoodsServiceImpl.java
  62. 26 0
      src/main/java/com/td/boss/game/complayergoods/vo/ComPlayerGoodsVo.java
  63. 21 0
      src/main/java/com/td/boss/game/complayergoods/vo/PlayerGoodsVo.java
  64. 102 0
      src/main/java/com/td/boss/game/complayers/controller/ComPlayersController.java
  65. 5 0
      src/main/java/com/td/boss/game/complayers/pojo/ComPlayers.java
  66. 4 0
      src/main/java/com/td/boss/game/complayers/repository/ComPlayersRepository.java
  67. 11 0
      src/main/java/com/td/boss/game/complayers/service/ComPlayersService.java
  68. 12 0
      src/main/java/com/td/boss/game/complayers/service/ComPlayersServiceImpl.java
  69. 35 0
      src/main/java/com/td/boss/game/comrewards/controller/ComRewardsController.java
  70. 28 0
      src/main/java/com/td/boss/game/comrewards/pojo/ComRewards.java
  71. 13 0
      src/main/java/com/td/boss/game/comrewards/repository/ComRewardsRepository.java
  72. 16 0
      src/main/java/com/td/boss/game/comrewards/service/ComRewardsService.java
  73. 26 0
      src/main/java/com/td/boss/game/comrewards/service/ComRewardsServiceImpl.java
  74. 23 0
      src/main/java/com/td/boss/game/comrewards/vo/ComRewardsVo.java
  75. 54 8
      src/main/java/com/td/boss/game/comusers/controller/ComUsersController.java
  76. 2 0
      src/main/java/com/td/boss/game/comusers/pojo/ComUsers.java
  77. 4 0
      src/main/java/com/td/boss/game/comusers/repository/ComUsersRepository.java
  78. 7 0
      src/main/java/com/td/boss/game/comusers/service/ComUsersService.java
  79. 13 0
      src/main/java/com/td/boss/game/comusers/service/ComUsersServiceImpl.java
  80. 2 0
      src/main/java/com/td/boss/game/comusers/vo/ComUsersVo.java
  81. 0 21
      src/main/java/com/td/boss/openapi/controller/OpenApiController.java
  82. 0 11
      src/main/java/com/td/boss/openapi/service/OpenApiService.java
  83. 0 12
      src/main/java/com/td/boss/openapi/service/OpenApiServiceImpl.java
  84. 2 2
      src/main/java/com/td/boss/util/CodeDOM.java
  85. 31 0
      src/main/java/com/td/boss/util/JsonUtils.java
  86. 16 0
      src/main/java/com/td/boss/util/KeyUtil.java
  87. 70 0
      src/main/java/com/td/boss/util/MyExceptionHandler.java
  88. 48 0
      src/main/java/com/td/boss/util/NumUtil.java
  89. 59 0
      src/main/java/com/td/boss/util/TokenRequestWrapper.java
  90. 0 2
      src/main/resources/application.properties
  91. 6 4
      src/main/resources/application.yml

+ 8 - 0
pom.xml

@@ -117,9 +117,17 @@
             <artifactId>oshi-json</artifactId>
             <version>3.6.1</version>
         </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.60</version>
+        </dependency>
+
     </dependencies>
 
     <build>
+        <finalName>TDBoss</finalName>
         <plugins>
             <plugin>
                 <groupId>org.springframework.boot</groupId>

+ 2 - 0
src/main/java/com/td/boss/BossApplication.java

@@ -14,6 +14,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.ApplicationRunner;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cache.annotation.EnableCaching;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.scheduling.annotation.EnableAsync;
@@ -35,6 +36,7 @@ import java.net.UnknownHostException;
 import java.util.List;
 
 @EnableAsync//开启异步调用
+@EnableCaching// 开启缓存,需要显示的指定
 @SpringBootApplication
 public class BossApplication {
 

+ 32 - 29
src/main/java/com/td/boss/aspect/SafetyAspect.java

@@ -163,35 +163,38 @@ public class SafetyAspect {
         }
     }
 
+//
+//    @Pointcut(value = "execution(public * com.td.boss.game.*.controller.*.*(..))")
+//    public void gameAspect(){}
+//
+//    @Before(value = "gameAspect()")
+//    public void gameBefore(JoinPoint joinPoint) throws Exception {
+//        //获取上下文request,获取token并解析
+//        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+//        HttpServletRequest request = requestAttributes.getRequest();
+//        //todo  token 操作
+//        final String requestHeader = request.getHeader(this.tokenHeader);
+//        String userId = null;
+//        String authToken = null;
+//
+//        if (requestHeader != null && requestHeader.startsWith("Bearer ")) {
+//            authToken = requestHeader.substring(7);
+//            try {
+//                userId = jwtTokenUtil.getUserIdFromToken(authToken);
+//                log.info("userId:{}", userId);
+//                //todo 如果需要校验的话,取本地或者数据库一个userId校验
+//                log.info("validateToken:{}", jwtTokenUtil.validateToken(authToken, userId));
+//                //获取参数并赋值
+//                Object[] args1 = joinPoint.getArgs();
+//            } catch (ExpiredJwtException e) {
+//            }
+//        }else{
+////            throw  new ExpiredJwtException(null,null,"error");
+////            throw new AuthorizeException(ResultEnum.TOKEN_IS_ILLEGAL.getCode(),
+////                    ResultEnum.TOKEN_IS_ILLEGAL.getMessage());
+//        }
+//    }
+
 
-    @Pointcut(value = "execution(public * com.td.boss.game.*.controller.*.*(..))")
-    public void gameAspect(){}
-
-    @Before(value = "gameAspect()")
-    public void before(JoinPoint joinPoint) throws Exception {
-        //获取上下文request,获取token并解析
-        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
-        HttpServletRequest request = requestAttributes.getRequest();
-        //todo  token 操作
-        final String requestHeader = request.getHeader(this.tokenHeader);
-        String userId = null;
-        String authToken = null;
-        if (requestHeader != null && requestHeader.startsWith("Bearer ")) {
-            authToken = requestHeader.substring(7);
-            try {
-                userId = jwtTokenUtil.getUserIdFromToken(authToken);
-                log.info("userId:{}", userId);
-                //todo 如果需要校验的话,取本地或者数据库一个userId校验
-                log.info("validateToken:{}", jwtTokenUtil.validateToken(authToken, userId));
-                //获取参数并赋值
-                Object[] args = joinPoint.getArgs();
-            } catch (ExpiredJwtException e) {
-            }
-        }else{
-            throw  new ExpiredJwtException(null,null,"error");
-//            throw new AuthorizeException(ResultEnum.TOKEN_IS_ILLEGAL.getCode(),
-//                    ResultEnum.TOKEN_IS_ILLEGAL.getMessage());
-        }
-    }
 
 }

+ 14 - 1
src/main/java/com/td/boss/common/pojo/Result.java

@@ -23,6 +23,11 @@ public class Result<T> implements Serializable {
      */
     private String msg = "操作成功";
 
+    /**
+     * 通信code
+     */
+    private Integer code = 0;
+
     /**
      * 通过静态方法获取实例
      */
@@ -37,7 +42,9 @@ public class Result<T> implements Serializable {
     public static <T> Result<T> of(T data, boolean flag, String msg) {
         return new Result<>(data, flag, msg);
     }
-
+    public static <T> Result<T> of(T data, boolean flag, String msg,Integer code) {
+        return new Result<>(data, flag, msg,code);
+    }
     @Deprecated
     public Result() {
 
@@ -58,4 +65,10 @@ public class Result<T> implements Serializable {
         this.msg = msg;
     }
 
+    private Result(T data, boolean flag, String msg ,Integer code) {
+        this.data = data;
+        this.flag = flag;
+        this.msg = msg;
+        this.code = code;
+    }
 }

+ 24 - 0
src/main/java/com/td/boss/config/enums/ResultEnum.java

@@ -10,9 +10,33 @@ import lombok.Getter;
 @Getter
 public enum ResultEnum {
     SUCCESS(0,"成功"),
+    //token数据
     TOKEN_SUCCESS(300,"用户授权认证通过!"),
     TOKEN_IS_ILLEGAL(301,"用户授权认证没有通过!客户端请求参数TOKEN信息无效"),
     TOKEN_DOES_NOT_EXIST(302,"用户授权认证没有通过!客户端请求参数中无TOKEN信息"),
+    TOKEN_OUT_OF_DATE(303,"用户授权认证没有通过!TOKEN过期,重新获取"),
+    TOKEN_DOES_NOT_HAVE_USER_ID(304,"用户授权认证没有通过!TOKEN不存在用户id"),
+    NO_PARAMETERS_CARRIED(305,"输入对应参数"),
+    //用户数据
+    USER_DOES_NOT_EXIST(400,"不能存在用户信息!"),
+    USER_ENERGY_IS_INSUFFICIENT(401,"用户能量不足!"),
+    //角色数据
+    PLAYER_DOES_NOT_EXIST(500,"不能存在角色信息!"),
+    PLAYER_DOES_NOT_ATTRIBUTES(501,"battle player 数据不存在!"),
+
+    PLAYER_GOODS_LIMIT_ERROR(510,"背包超过预设长度!"),
+    PLAYER_NO_CHEST_INFO(511,"没有对应宝箱信息"),
+    PLAYER_NO_EQUIP_TYPE(512,"没有对应装备信息"),
+    PLAYER_GOODS_NO_CHEST(513,"背包没有对应宝箱"),
+    PLAYER_GOODS_NOT_CHEST_TYPE(514,"不是宝箱类型对象"),
+    PLAYER_GOODS_WEAR_NUM_ERROR(515,"请输入对应的参数,isWear:0或者1"),
+    PLAYER_GOODS_NO_QUIP_REQUIRED(516,"不用获取多余装备"),
+    //boss数据
+    BOSS_DOES_NOT_EXIST(600,"不存在boss信息!"),
+    BOSS_HEALTH_IS_ZERO(601,"boss血量为零!"),
+    BOSS_NOT_ATTRIBUTES(602,"bossId对应的属性不存在!"),
+
+    BOSS_DESCRIBE_LIST_ZERO(603,"bosses 描述的表格数据不存在!"),
 
     ;
     private Integer code;

+ 4 - 12
src/main/java/com/td/boss/config/security/CaptchaFilterConfig.java

@@ -46,6 +46,10 @@ public class CaptchaFilterConfig implements Filter {
     @Autowired
     private UserConfig userConfig;
 
+    @Autowired
+    private JwtTokenUtil jwtTokenUtil;
+    @Value("${jwt.token}")
+    private String tokenHeader;
 
     @Override
     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
@@ -53,18 +57,6 @@ public class CaptchaFilterConfig implements Filter {
         HttpServletResponse response = (HttpServletResponse) servletResponse;
         HttpSession session = request.getSession();
 
-//        if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
-//
-//            UserDetails userDetails = userConfig.loadUserByUsername(username);
-//
-//            if (jwtTokenUtil.validateToken(authToken, userDetails)) {
-//                UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
-//                SecurityContextHolder.getContext().setAuthentication(authentication);
-//            }
-//
-//        }
-
-
         /*
             注:详情可在SessionManagementFilter中进行断点调试查看
             security框架会在session的attribute存储登录信息,先从session.getAttribute(this.springSecurityContextKey)中获取登录用户信息

+ 8 - 5
src/main/java/com/td/boss/config/security/SecurityConfig.java

@@ -8,6 +8,7 @@ import org.springframework.security.access.AccessDecisionVoter;
 import org.springframework.security.access.vote.RoleVoter;
 import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.builders.WebSecurity;
 import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
 import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
 import org.springframework.security.web.access.intercept.FilterSecurityInterceptor;
@@ -52,6 +53,12 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
     @Autowired
     private DataSource dataSource;
 
+    @Override
+    public void configure(WebSecurity web) throws Exception {
+        // game 走 token验证流程
+        web.ignoring().antMatchers("/game/**");
+    }
+
     @Override
     protected void configure(AuthenticationManagerBuilder auth) throws Exception {
         auth
@@ -92,19 +99,15 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
                 //定制url访问权限,动态权限读取,参考:https://www.jianshu.com/p/0a06496e75ea
                 .addFilterAfter(dynamicallyUrlInterceptor(), FilterSecurityInterceptor.class)
                 .authorizeRequests()
-
                 //无需权限访问
-                .antMatchers("/favicon.ico","/common/**", "/webjars/**", "/getVerifyCodeImage","/error/*","/openApi/*","/game/**").permitAll()
-
+                .antMatchers("/favicon.ico","/common/**", "/webjars/**", "/getVerifyCodeImage","/error/*").permitAll()
                 //其他接口需要登录后才能访问
                 .anyRequest().authenticated()
                 .and();
-
         http.sessionManagement()
                 //session无效处理策略
                 .invalidSessionStrategy(myInvalidSessionStrategy)
                 .and();
-
         http
                 //开启记住我
                 .rememberMe()

+ 34 - 0
src/main/java/com/td/boss/config/token/WebConfig.java

@@ -0,0 +1,34 @@
+package com.td.boss.config.token;
+
+import com.td.boss.filter.gameFilter;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.filter.DelegatingFilterProxy;
+
+import javax.servlet.Filter;
+
+/**
+ * @author:slambb
+ * @date:2021/03/27
+ */
+@Configuration
+public class WebConfig {
+
+    @Bean
+    public Filter gameFilter() {
+        return new gameFilter();
+    }
+
+
+    @Bean
+    public FilterRegistrationBean authorizeFilterRegistration() {
+        FilterRegistrationBean registration = new FilterRegistrationBean();
+        registration.setFilter(new DelegatingFilterProxy("gameFilter"));
+        registration.addUrlPatterns("/*");
+        registration.setName("gameFilter");
+        registration.setOrder(1);
+        return registration;
+    }
+
+}

+ 90 - 0
src/main/java/com/td/boss/filter/gameFilter.java

@@ -0,0 +1,90 @@
+package com.td.boss.filter;
+
+
+import com.td.boss.common.pojo.Result;
+import com.td.boss.config.enums.ResultEnum;
+import com.td.boss.util.JsonUtils;
+import com.td.boss.util.JwtTokenUtil;
+import com.td.boss.util.TokenRequestWrapper;
+import io.jsonwebtoken.ExpiredJwtException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.util.StringUtils;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * @author:slambb
+ * @date:2021/03/27
+ */
+@Slf4j
+public class gameFilter implements Filter {
+    @Value("${jwt.token}")
+    private String tokenHeader;
+
+    @Autowired
+    private JwtTokenUtil jwtTokenUtil;
+
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException {
+    }
+    @Override
+    public void destroy() {
+    }
+    @Override
+    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+        //处理跨域请求
+        HttpServletResponse response = (HttpServletResponse) servletResponse;
+        response.setHeader("Access-Control-Allow-Origin", "*");
+        response.setHeader("Access-Control-Allow-Credentials", "true");
+        response.setHeader("Access-Control-Allow-Methods", "POST, GET, PATCH, DELETE, PUT");
+        response.setHeader("Access-Control-Max-Age", "3600");
+        response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept , token");
+//        log.info("********进入过滤器********");
+        HttpServletRequest req = (HttpServletRequest) servletRequest;
+        String method = req.getMethod();
+        if (method.equals("OPTIONS")) {
+            response.setStatus(200);
+            return;
+        }
+        String token = req.getHeader(tokenHeader);
+        String path = req.getServletPath();
+        //登录,获取验证码,不用登录的接口
+        if (!(path.indexOf("game") > -1) || path.indexOf("loginToken") > -1) {
+            //登录情况直接放行
+            filterChain.doFilter(servletRequest, response);
+            return;
+        }
+        if (null == token || token.isEmpty() || !token.startsWith("Bearer ")) {
+            //没有token信息
+            response.setCharacterEncoding("utf-8");
+            response.getWriter().print( JsonUtils.toJson (Result.of(null,false,ResultEnum.TOKEN_DOES_NOT_EXIST.getMessage(),ResultEnum.TOKEN_DOES_NOT_EXIST.getCode())));
+            return;
+        } else {
+            String authToken = token.substring(7);
+            try {
+                String userId = jwtTokenUtil.getUserIdFromToken(authToken);
+                log.info("userId:{}", userId);
+                //todo 后面需要校验时间,加入可切换 secret 校验
+                log.info("validateToken:{}", jwtTokenUtil.validateToken(authToken, userId));
+                if (!StringUtils.isEmpty(userId)) {
+                    filterChain.doFilter(new TokenRequestWrapper((HttpServletRequest) servletRequest, userId), response);
+                } else {
+                    //不存在用户信息
+                    response.setCharacterEncoding("utf-8");
+                    response.getWriter().print(JsonUtils.toJson(Result.of(authToken,false,ResultEnum.TOKEN_DOES_NOT_HAVE_USER_ID.getMessage(),ResultEnum.TOKEN_DOES_NOT_HAVE_USER_ID.getCode())));
+                }
+            } catch (ExpiredJwtException e) {
+                //token过期
+                response.setCharacterEncoding("utf-8");
+                response.getWriter().print(JsonUtils.toJson(Result.of(null,false,ResultEnum.TOKEN_OUT_OF_DATE.getMessage(), ResultEnum.TOKEN_OUT_OF_DATE.getCode())));
+            }
+
+        }
+
+    }
+}

+ 165 - 0
src/main/java/com/td/boss/game/combosses/controller/ComBossesController.java

@@ -1,15 +1,180 @@
 package com.td.boss.game.combosses.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import com.td.boss.common.controller.*;
+import com.td.boss.common.pojo.Result;
+import com.td.boss.config.enums.ResultEnum;
 import com.td.boss.game.combosses.pojo.ComBosses;
+import com.td.boss.game.combosses.vo.BossesVo;
 import com.td.boss.game.combosses.vo.ComBossesVo;
 import com.td.boss.game.combosses.service.ComBossesService;
+import com.td.boss.game.combossesbattle.pojo.ComBossesBattle;
+import com.td.boss.game.combossesbattle.service.ComBossesBattleService;
+import com.td.boss.game.comgeneralattributes.pojo.ComGeneralAttributes;
+import com.td.boss.game.comgeneralattributes.service.ComGeneralAttributesService;
+import com.td.boss.game.comusers.pojo.ComUsers;
+import com.td.boss.game.comusers.service.ComUsersService;
+import com.td.boss.game.comusers.vo.ComUsersVo;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
+import java.math.BigInteger;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 @RestController
 @RequestMapping("/game/comBosses/")
 public class ComBossesController extends CommonController<ComBossesVo, ComBosses, Integer> {
     @Autowired
     private ComBossesService comBossesService;
+
+    @Autowired
+    private ComGeneralAttributesService comGeneralAttributesService;
+
+    @Autowired
+    private ComBossesBattleService comBossesBattleService;
+
+    @Autowired
+    private ComUsersService comUsersService;
+
+
+    @GetMapping("getTotalKill")
+    public Result<Map> getTotalKill(@RequestParam("bossId") Integer bossId) {
+        ComBosses comBosses = comBossesService.findById(bossId);
+        Map map = new HashMap();
+        if (comBosses == null) {
+            return Result.of(null, false, ResultEnum.BOSS_DOES_NOT_EXIST.getMessage(),ResultEnum.BOSS_DOES_NOT_EXIST.getCode());
+        }
+        map.put("totalKill", comBosses.getAllHealth());
+        return Result.of(map);
+    }
+
+    /**
+     * 获取世界boss 属性,后台控制显示
+     *
+     * @param bossId
+     * @return
+     */
+    @GetMapping("getWorldBossAttribute")
+    public Result<Map> getWorldBossAttribute(@RequestParam("bossId") Integer bossId) {
+        ComBosses comBosses = comBossesService.findById(bossId);
+        Map map = new HashMap();
+        if (comBosses == null) {
+            return Result.of(null, false, ResultEnum.BOSS_DOES_NOT_EXIST.getMessage(),ResultEnum.BOSS_DOES_NOT_EXIST.getCode());
+        }
+
+        map.put("allHealth", comBosses.getAllHealth());
+        map.put("restHealth", comBosses.getRestHealth());
+        map.put("allTime", comBosses.getAllTime());
+        map.put("restTime", comBosses.getRestTime());
+        map.put("attributeType", comBosses.getAttributeType());
+
+        return Result.of(map);
+    }
+    /**
+     * 获取战斗中boss属性
+     *
+     * @param attributeType
+     * @return
+     */
+    @GetMapping("getBattleBossAttribute")
+    public Result<ComGeneralAttributes> getBattleBossAttribute(@RequestParam("attributeType") Integer attributeType) {
+
+        ComGeneralAttributes comBosses = comGeneralAttributesService.findByType(attributeType);
+        if (comBosses == null) {
+            return Result.of(null, false, ResultEnum.BOSS_DOES_NOT_EXIST.getMessage(),ResultEnum.BOSS_DOES_NOT_EXIST.getCode());
+        }
+        return Result.of(comBosses);
+    }
+
+    /**
+     * 获取全部 boss 总属性
+     * @return
+     */
+    @GetMapping("getBossAllInfo")
+    public Result<List<BossesVo>> getBossAllInfo() {
+        List<ComBosses>  comBossesList = comBossesService.findAll();
+        if (comBossesList.size() == 0) {
+            return Result.of(null, false, ResultEnum.BOSS_DOES_NOT_EXIST.getMessage(),ResultEnum.BOSS_DOES_NOT_EXIST.getCode());
+        }
+
+       List<BossesVo> bossesVoList = comBossesList.stream().map(e->{
+           BossesVo bossesVo = new BossesVo();
+           //获取战斗相关属性
+           ComGeneralAttributes generalAttributes = comGeneralAttributesService.findByType(e.getAttributeType());
+           bossesVo.setName(e.getName());
+           bossesVo.setAllHealth(e.getAllHealth());
+           bossesVo.setRestHealth(e.getRestHealth());
+           bossesVo.setAllTime(e.getAllTime());
+           bossesVo.setRestTime(e.getRestTime());
+           bossesVo.setAttributes(generalAttributes);
+           return bossesVo;
+        }).collect(Collectors.toList());
+
+        return Result.of(bossesVoList);
+    }
+
+    /**
+     * 进入战斗模式
+     * @param userId
+     * @param playerId
+     * @param bossId
+     * @return
+     */
+    @GetMapping("intoCombat")
+    @Transactional
+    public Result<Map> intoCombat(@RequestParam("userId") String userId,
+                                    @RequestParam("playerId") Integer playerId,
+                                    @RequestParam("bossId") Integer bossId) {
+        //todo 目前用悲观锁处理com_boss的属性问题
+        //1.判断用户体力是否充足
+        ComUsersVo comUsersVo = comUsersService.findByUserId(userId);
+        if(comUsersVo.getEnergy()<=0){
+            return Result.of(null,false,ResultEnum.USER_ENERGY_IS_INSUFFICIENT.getMessage(),ResultEnum.USER_ENERGY_IS_INSUFFICIENT.getCode());
+        }
+        //2.进入格斗,comBoss 表中,即世界boss血量减一,进入战斗状态
+        //计算boss,获取boss属性时候
+        ComBosses comBosses = comBossesService.intoCombat(bossId);
+        if (comBosses == null) {
+            return Result.of(null, false, ResultEnum.BOSS_DOES_NOT_EXIST.getMessage(), ResultEnum.BOSS_DOES_NOT_EXIST.getCode());
+        }
+        if (comBosses.getAllHealth() <= 0) {
+            return Result.of(null, false, ResultEnum.BOSS_HEALTH_IS_ZERO.getMessage(), ResultEnum.BOSS_HEALTH_IS_ZERO.getCode());
+        }
+        //更新体力值
+        comUsersVo.setEnergy(comUsersVo.getEnergy() -1);
+        comUsersService.save(comUsersVo);
+        //3.bosses产生战斗时候,创建一个新数据
+        ComBossesBattle comBossesBattle = new ComBossesBattle();
+        comBossesBattle.setPlayerId(playerId);
+        comBossesBattle.setIsState(0);//(1:成功,0:失败)默认是失败状态,击败boss后设置成功状态
+        comBossesBattle.setIsBattle(0); //(1:战斗结束,0:战斗持续中)
+        comBossesBattle.setReduceHp(1);
+        comBossesBattle.setReduceEnergy(1); //消耗一点体力
+        Long timeTemp = System.currentTimeMillis();
+        BigInteger bigInt = new BigInteger(timeTemp.toString());
+        comBossesBattle.setStartTime(bigInt);
+        comBossesBattle = comBossesBattleService.addComBossesBattle(comBossesBattle);
+
+        //返回部分参数
+        Map userMap = new HashMap();
+        userMap.put("energy",comUsersVo.getEnergy());
+        Map battleStateMap = new HashMap();
+        battleStateMap.put("isState",comBossesBattle.getIsState());
+        battleStateMap.put("isBattle",comBossesBattle.getIsBattle());
+        battleStateMap.put("reduceHP",comBossesBattle.getReduceHp());
+        battleStateMap.put("reduceEnergy",comBossesBattle.getReduceEnergy());
+        battleStateMap.put("startTime",comBossesBattle.getStartTime());
+        Map map = new HashMap();
+        map.put("userInfo",userMap);
+        map.put("battleState",battleStateMap);
+//        map.put("bosses",comBosses);
+
+        return Result.of(map);
+    }
+
 }

+ 9 - 1
src/main/java/com/td/boss/game/combosses/pojo/ComBosses.java

@@ -3,6 +3,7 @@ package com.td.boss.game.combosses.pojo;
 import lombok.Data;
 import javax.persistence.*;
 import java.io.Serializable;
+import java.math.BigInteger;
 import java.util.Date;
 
 @Entity
@@ -17,6 +18,13 @@ public class ComBosses implements Serializable {
 
     private Integer allHealth;//boss的总血量
 
-    private Date allTime;//boos 存在的时间
+    private Integer restHealth; //boss的剩余血量
 
+    private BigInteger allTime;//boss 存在的时间
+
+    private BigInteger restTime; //boss 剩余的时间
+
+    private Integer battleCount; //正常战斗计数(只要用户获取战斗增加次数,战斗失败返还相应次数)
+
+    private Integer attributeType; //属性表类型,默认1为boss
 }

+ 14 - 0
src/main/java/com/td/boss/game/combosses/repository/ComBossesRepository.java

@@ -2,8 +2,22 @@ package com.td.boss.game.combosses.repository;
 
 import com.td.boss.common.repository.*;
 import com.td.boss.game.combosses.pojo.ComBosses;
+import org.springframework.data.jpa.repository.Lock;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
+import javax.persistence.LockModeType;
+import java.util.Optional;
+
 @Repository
 public interface ComBossesRepository extends CommonRepository<ComBosses, Integer> {
+
+    /**
+     * 添加jpa行锁,获取boss当前信息
+     * @param id
+     * @return
+     */
+    @Lock(value = LockModeType.PESSIMISTIC_WRITE)
+    @Query("select a from ComBosses a where a.id = :id")
+    Optional<ComBosses> findComBossesWithPessimisticLock(Integer id);
 }

+ 11 - 0
src/main/java/com/td/boss/game/combosses/service/ComBossesService.java

@@ -1,8 +1,19 @@
 package com.td.boss.game.combosses.service;
 
+import com.td.boss.common.pojo.Result;
 import com.td.boss.common.service.*;
 import com.td.boss.game.combosses.pojo.ComBosses;
 import com.td.boss.game.combosses.vo.ComBossesVo;
 
+import java.util.List;
+
 public interface ComBossesService extends CommonService<ComBossesVo, ComBosses, Integer> {
+
+    List<ComBosses> findAll();
+
+    ComBosses findById(Integer id);
+
+
+    ComBosses intoCombat(Integer bossesId);
+
 }

+ 41 - 0
src/main/java/com/td/boss/game/combosses/service/ComBossesServiceImpl.java

@@ -1,14 +1,21 @@
 package com.td.boss.game.combosses.service;
 
+import com.td.boss.common.pojo.Result;
 import com.td.boss.common.service.*;
 import com.td.boss.game.combosses.pojo.ComBosses;
 import com.td.boss.game.combosses.vo.ComBossesVo;
 import com.td.boss.game.combosses.repository.ComBossesRepository;
+import com.td.boss.game.combossesbattle.pojo.ComBossesBattle;
+import com.td.boss.game.combossesbattle.repository.ComBossesBattleRepository;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
+import java.util.List;
+import java.util.Optional;
 
 @Service
 @Transactional
@@ -18,4 +25,38 @@ public class ComBossesServiceImpl extends CommonServiceImpl<ComBossesVo, ComBoss
     private EntityManager em;
     @Autowired
     private ComBossesRepository comBossesRepository;
+
+
+    @Override
+    public List<ComBosses> findAll() {
+        return comBossesRepository.findAll(Sort.by(Sort.Direction.DESC,"id"));
+    }
+
+    /**
+     * 获取bosses 数据,存入缓存中。
+     * @param id
+     * @return
+     */
+    @Override
+    public ComBosses findById(Integer id) {
+        return comBossesRepository.findById(id).orElse(null);
+    }
+    /**
+     * 添加事务回退
+     * @param bossesId
+     * @return
+     */
+    @Override
+    public ComBosses intoCombat(Integer bossesId) {
+        Optional<ComBosses> comBossesOptional = comBossesRepository.findComBossesWithPessimisticLock(bossesId);
+        if(!comBossesOptional.isPresent()){
+            return null;
+        }
+        ComBosses comBosses = comBossesOptional.get();
+        //设置boss属性 剩余血量,减一。
+        comBosses.setRestHealth(comBosses.getRestHealth() -1);
+        comBosses.setBattleCount(comBosses.getBattleCount() +1);
+        return  comBossesRepository.save(comBosses);
+
+    }
 }

+ 19 - 0
src/main/java/com/td/boss/game/combosses/vo/BossesVo.java

@@ -0,0 +1,19 @@
+package com.td.boss.game.combosses.vo;
+
+import com.td.boss.common.pojo.PageCondition;
+import com.td.boss.game.comgeneralattributes.pojo.ComGeneralAttributes;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.Map;
+
+@Data
+public class BossesVo implements Serializable {
+    private String name;//角色名词
+    private Integer allHealth;//boss的总血量
+    private Integer restHealth; //boss的剩余血量
+    private BigInteger allTime;//boss 存在的时间
+    private BigInteger restTime; //boss 剩余的时间
+    private ComGeneralAttributes attributes;//boss属性
+}

+ 5 - 1
src/main/java/com/td/boss/game/combosses/vo/ComBossesVo.java

@@ -2,6 +2,7 @@ package com.td.boss.game.combosses.vo;
 
 import com.td.boss. common.pojo.PageCondition;import lombok.Data;
 import java.io.Serializable;
+import java.math.BigInteger;
 import java.util.Date;
 
 @Data
@@ -12,6 +13,9 @@ public class ComBossesVo extends PageCondition implements Serializable {
 
     private Integer allHealth;//boss的总血量
 
-    private Date allTime;//boos 存在的时间
+    private Integer restHealth; //boss的剩余血量
 
+    private BigInteger allTime;//boss 存在的时间
+
+    private BigInteger restTime; //boss 剩余的时间
 }

+ 15 - 0
src/main/java/com/td/boss/game/combossesbattle/controller/ComBossesBattleController.java

@@ -0,0 +1,15 @@
+package com.td.boss.game.combossesbattle.controller;
+
+import com.td.boss.common.controller.*;
+import com.td.boss.game.combossesbattle.pojo.ComBossesBattle;
+import com.td.boss.game.combossesbattle.vo.ComBossesBattleVo;
+import com.td.boss.game.combossesbattle.service.ComBossesBattleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/game/comBossesBattle/")
+public class ComBossesBattleController extends CommonController<ComBossesBattleVo, ComBossesBattle, Integer> {
+    @Autowired
+    private ComBossesBattleService comBossesBattleService;
+}

+ 31 - 0
src/main/java/com/td/boss/game/combossesbattle/pojo/ComBossesBattle.java

@@ -0,0 +1,31 @@
+package com.td.boss.game.combossesbattle.pojo;
+
+import lombok.Data;
+import javax.persistence.*;
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.Date;
+
+@Entity
+@Table(name = "com_bosses_battle")
+@Data
+public class ComBossesBattle implements Serializable {
+    @Id
+    @GeneratedValue(strategy= GenerationType.IDENTITY)
+    private Integer id;//战斗表id
+
+    private Integer playerId;//战斗表对应的角色id
+
+    private Integer isState;//战斗状态(1:成功,0:失败)
+
+    private Integer isBattle;//战斗状态(1:战斗结束,0:战斗持续中)
+
+    private Integer reduceHp;//战斗扣除对应的boss 血量,战斗不成功归还对应血量
+
+    private Integer reduceEnergy;//战斗扣除用户相应的体力
+
+    private BigInteger allTime;//战斗持续时间
+
+    private BigInteger startTime;//战斗开始时间
+
+}

+ 9 - 0
src/main/java/com/td/boss/game/combossesbattle/repository/ComBossesBattleRepository.java

@@ -0,0 +1,9 @@
+package com.td.boss.game.combossesbattle.repository;
+
+import com.td.boss.common.repository.*;
+import com.td.boss.game.combossesbattle.pojo.ComBossesBattle;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ComBossesBattleRepository extends CommonRepository<ComBossesBattle, Integer> {
+}

+ 12 - 0
src/main/java/com/td/boss/game/combossesbattle/service/ComBossesBattleService.java

@@ -0,0 +1,12 @@
+package com.td.boss.game.combossesbattle.service;
+
+import com.td.boss.common.service.*;
+import com.td.boss.game.combossesbattle.pojo.ComBossesBattle;
+import com.td.boss.game.combossesbattle.vo.ComBossesBattleVo;
+
+import java.util.Optional;
+
+public interface ComBossesBattleService extends CommonService<ComBossesBattleVo, ComBossesBattle, Integer> {
+
+    ComBossesBattle addComBossesBattle(ComBossesBattle comBossesBattle);
+}

+ 27 - 0
src/main/java/com/td/boss/game/combossesbattle/service/ComBossesBattleServiceImpl.java

@@ -0,0 +1,27 @@
+package com.td.boss.game.combossesbattle.service;
+
+import com.td.boss.common.service.*;
+import com.td.boss.game.combossesbattle.pojo.ComBossesBattle;
+import com.td.boss.game.combossesbattle.vo.ComBossesBattleVo;
+import com.td.boss.game.combossesbattle.repository.ComBossesBattleRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import java.util.Optional;
+
+@Service
+@Transactional
+public class ComBossesBattleServiceImpl extends CommonServiceImpl<ComBossesBattleVo, ComBossesBattle, Integer> implements ComBossesBattleService{
+
+    @PersistenceContext
+    private EntityManager em;
+    @Autowired
+    private ComBossesBattleRepository comBossesBattleRepository;
+
+    @Override
+    public ComBossesBattle addComBossesBattle(ComBossesBattle comBossesBattle) {
+        return comBossesBattleRepository.save(comBossesBattle);
+    }
+}

+ 26 - 0
src/main/java/com/td/boss/game/combossesbattle/vo/ComBossesBattleVo.java

@@ -0,0 +1,26 @@
+package com.td.boss.game.combossesbattle.vo;
+
+import com.td.boss. common.pojo.PageCondition;import lombok.Data;
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.Date;
+
+@Data
+public class ComBossesBattleVo extends PageCondition implements Serializable {
+    private Integer id;//战斗表id
+
+    private Integer userId;//战斗表对应的用户id
+
+    private Integer isState;//战斗状态(1:成功,0:失败)
+
+    private Integer isBattle;//战斗状态(1:战斗结束,0:战斗持续中)
+
+    private Integer reduceHp;//战斗扣除对应的boss 血量,战斗不成功归还对应血量
+
+    private Integer reduceEnergy;//战斗扣除用户相应的体力
+
+    private BigInteger allTime;//战斗持续时间
+
+    private BigInteger startTime;//战斗开始时间
+
+}

+ 63 - 0
src/main/java/com/td/boss/game/combossesdescribe/controller/ComBossesDescribeController.java

@@ -0,0 +1,63 @@
+package com.td.boss.game.combossesdescribe.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.td.boss.common.controller.*;
+import com.td.boss.common.pojo.Result;
+import com.td.boss.config.enums.ResultEnum;
+import com.td.boss.game.combossesdescribe.pojo.ComBossesDescribe;
+import com.td.boss.game.combossesdescribe.vo.BossesDescribeVo;
+import com.td.boss.game.combossesdescribe.vo.ComBossesDescribeVo;
+import com.td.boss.game.combossesdescribe.service.ComBossesDescribeService;
+import com.td.boss.game.comequiptype.pojo.ComEquipType;
+import com.td.boss.game.comequiptype.service.ComEquipTypeService;
+import com.td.boss.util.CopyUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@RestController
+@RequestMapping("/game/comBossesDescribe/")
+public class ComBossesDescribeController extends CommonController<ComBossesDescribeVo, ComBossesDescribe, Integer> {
+    @Autowired
+    private ComBossesDescribeService comBossesDescribeService;
+
+    @Autowired
+    private ComEquipTypeService comEquipTypeService;
+
+    @GetMapping("getComBossesDescribeList")
+    public Result<List<BossesDescribeVo>> getComBossesDescribeList() {
+        List<ComBossesDescribe> comBossesDescribeList = comBossesDescribeService.findAllByDescId();
+        Map map = new HashMap();
+        if (comBossesDescribeList.size() == 0) {
+            return Result.of(null, false, ResultEnum.BOSS_DESCRIBE_LIST_ZERO.getMessage(), ResultEnum.BOSS_DESCRIBE_LIST_ZERO.getCode());
+        }
+
+        //获取装备类型
+        List<ComEquipType> comEquipTypeList = comEquipTypeService.findAllComEquipType();
+
+        List<BossesDescribeVo> bossesDescribeVoList = comBossesDescribeList.stream().map(e -> {
+            BossesDescribeVo bossesDescribeVo = new BossesDescribeVo();
+            bossesDescribeVo.setAllHealth(e.getAllHealth());
+            bossesDescribeVo.setBossesId(e.getBossesId());
+            bossesDescribeVo.setDescribe(e.getDescribe());
+            bossesDescribeVo.setName(e.getName());
+            bossesDescribeVo.setLevelName(e.getLevelName());
+            List<ComEquipType> result = new ArrayList<>();
+            Map<Integer, Integer> rewardEquips = JSONObject.parseObject(e.getRewardEquips(), new TypeReference<Map<Integer, Integer>>() {
+            });
+            Set<Map.Entry<Integer, Integer>> entries = rewardEquips.entrySet();
+            for (Map.Entry<Integer, Integer> entry : entries) {
+                //key 是comEquipType中的装备类型,value 是代表装备level,暂时可不用
+//                System.out.println(entry.getKey() + ":" + entry.getValue());
+                result.add(comEquipTypeList.stream().filter(type -> type.getType().equals(entry.getKey())).findFirst().get());
+            }
+            bossesDescribeVo.setRewardEquips(result);
+            return bossesDescribeVo;
+        }).collect(Collectors.toList());
+
+        return Result.of(bossesDescribeVoList);
+    }
+}

+ 26 - 0
src/main/java/com/td/boss/game/combossesdescribe/pojo/ComBossesDescribe.java

@@ -0,0 +1,26 @@
+package com.td.boss.game.combossesdescribe.pojo;
+
+import lombok.Data;
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+@Entity
+@Table(name = "com_bosses_describe")
+@Data
+public class ComBossesDescribe implements Serializable {
+    @Id
+    private Integer id;//
+
+    private Integer bossesId;//关联bosses 
+
+    private String name;//boss名字
+
+    private String levelName;//关卡名称
+
+    private Integer allHealth;//boss 血量
+
+    private String rewardEquips;//奖励的装备
+
+    private String describe;//关卡boss描述
+}

+ 9 - 0
src/main/java/com/td/boss/game/combossesdescribe/repository/ComBossesDescribeRepository.java

@@ -0,0 +1,9 @@
+package com.td.boss.game.combossesdescribe.repository;
+
+import com.td.boss.common.repository.*;
+import com.td.boss.game.combossesdescribe.pojo.ComBossesDescribe;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ComBossesDescribeRepository extends CommonRepository<ComBossesDescribe, Integer> {
+}

+ 12 - 0
src/main/java/com/td/boss/game/combossesdescribe/service/ComBossesDescribeService.java

@@ -0,0 +1,12 @@
+package com.td.boss.game.combossesdescribe.service;
+
+import com.td.boss.common.service.*;
+import com.td.boss.game.combossesdescribe.pojo.ComBossesDescribe;
+import com.td.boss.game.combossesdescribe.vo.ComBossesDescribeVo;
+
+import java.util.List;
+
+public interface ComBossesDescribeService extends CommonService<ComBossesDescribeVo, ComBossesDescribe, Integer> {
+
+    List<ComBossesDescribe> findAllByDescId();
+}

+ 28 - 0
src/main/java/com/td/boss/game/combossesdescribe/service/ComBossesDescribeServiceImpl.java

@@ -0,0 +1,28 @@
+package com.td.boss.game.combossesdescribe.service;
+
+import com.td.boss.common.service.*;
+import com.td.boss.game.combossesdescribe.pojo.ComBossesDescribe;
+import com.td.boss.game.combossesdescribe.vo.ComBossesDescribeVo;
+import com.td.boss.game.combossesdescribe.repository.ComBossesDescribeRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Sort;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import java.util.List;
+
+@Service
+@Transactional
+public class ComBossesDescribeServiceImpl extends CommonServiceImpl<ComBossesDescribeVo, ComBossesDescribe, Integer> implements ComBossesDescribeService{
+
+    @PersistenceContext
+    private EntityManager em;
+    @Autowired
+    private ComBossesDescribeRepository comBossesDescribeRepository;
+
+    @Override
+    public List<ComBossesDescribe> findAllByDescId() {
+        return comBossesDescribeRepository.findAll(Sort.by(Sort.Direction.DESC,"id"));
+    }
+}

+ 24 - 0
src/main/java/com/td/boss/game/combossesdescribe/vo/BossesDescribeVo.java

@@ -0,0 +1,24 @@
+package com.td.boss.game.combossesdescribe.vo;
+
+import com.td.boss.common.pojo.PageCondition;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class BossesDescribeVo  implements Serializable {
+
+    private Integer bossesId;//关联bosses 
+
+    private String name;//boss名字
+
+    private String levelName;//关卡名称
+
+    private Integer allHealth;//boss 血量
+
+    private List rewardEquips;//奖励的装备
+
+    private String describe;//关卡boss描述
+}

+ 22 - 0
src/main/java/com/td/boss/game/combossesdescribe/vo/ComBossesDescribeVo.java

@@ -0,0 +1,22 @@
+package com.td.boss.game.combossesdescribe.vo;
+
+import com.td.boss. common.pojo.PageCondition;import lombok.Data;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class ComBossesDescribeVo extends PageCondition implements Serializable {
+    private Integer id;//
+
+    private Integer bossesId;//关联bosses 
+
+    private String name;//boss名字
+
+    private String levelName;//关卡名称
+
+    private Integer allHealth;//boss 血量
+
+    private String rewardEquips;//奖励的装备
+
+    private String describe;//关卡boss描述
+}

+ 15 - 0
src/main/java/com/td/boss/game/comequipattributes/controller/ComEquipAttributesController.java

@@ -0,0 +1,15 @@
+package com.td.boss.game.comequipattributes.controller;
+
+import com.td.boss.common.controller.*;
+import com.td.boss.game.comequipattributes.pojo.ComEquipAttributes;
+import com.td.boss.game.comequipattributes.vo.ComEquipAttributesVo;
+import com.td.boss.game.comequipattributes.service.ComEquipAttributesService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/game/comEquipAttributes/")
+public class ComEquipAttributesController extends CommonController<ComEquipAttributesVo, ComEquipAttributes, Integer> {
+    @Autowired
+    private ComEquipAttributesService comEquipAttributesService;
+}

+ 27 - 0
src/main/java/com/td/boss/game/comequipattributes/pojo/ComEquipAttributes.java

@@ -0,0 +1,27 @@
+package com.td.boss.game.comequipattributes.pojo;
+
+import lombok.Data;
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+@Entity
+@Table(name = "com_equip_attributes")
+@Data
+public class ComEquipAttributes implements Serializable {
+    @Id
+    private Integer id;//
+
+    private String name;//属性名称
+
+    private Integer type;//属性类型,设定好(1-10)血量1,蓝2,攻击3,防御4,连击率5,暴击率6,闪避回蓝7,格挡回血8,被动回血9,被动回蓝10
+
+    private Integer value;//当前属性值
+
+    private Integer min;//属性最小值
+
+    private Integer max;//属性最大值
+
+    private Integer isAvailable;//是否可用(0:不可用,1:可用)
+
+}

+ 13 - 0
src/main/java/com/td/boss/game/comequipattributes/repository/ComEquipAttributesRepository.java

@@ -0,0 +1,13 @@
+package com.td.boss.game.comequipattributes.repository;
+
+import com.td.boss.common.repository.*;
+import com.td.boss.game.comequipattributes.pojo.ComEquipAttributes;
+import org.springframework.stereotype.Repository;
+
+import java.util.Optional;
+
+@Repository
+public interface ComEquipAttributesRepository extends CommonRepository<ComEquipAttributes, Integer> {
+
+    Optional<ComEquipAttributes> findByType(Integer type);
+}

+ 16 - 0
src/main/java/com/td/boss/game/comequipattributes/service/ComEquipAttributesService.java

@@ -0,0 +1,16 @@
+package com.td.boss.game.comequipattributes.service;
+
+import com.td.boss.common.service.*;
+import com.td.boss.game.comequipattributes.pojo.ComEquipAttributes;
+import com.td.boss.game.comequipattributes.vo.ComEquipAttributesVo;
+import com.td.boss.game.comgeneralattributes.pojo.ComGeneralAttributes;
+
+import java.util.List;
+
+public interface ComEquipAttributesService extends CommonService<ComEquipAttributesVo, ComEquipAttributes, Integer> {
+
+    ComEquipAttributes findByType(Integer type);
+
+
+    List<ComEquipAttributes> findAll();
+}

+ 36 - 0
src/main/java/com/td/boss/game/comequipattributes/service/ComEquipAttributesServiceImpl.java

@@ -0,0 +1,36 @@
+package com.td.boss.game.comequipattributes.service;
+
+import com.td.boss.common.service.*;
+import com.td.boss.game.comequipattributes.pojo.ComEquipAttributes;
+import com.td.boss.game.comequipattributes.vo.ComEquipAttributesVo;
+import com.td.boss.game.comequipattributes.repository.ComEquipAttributesRepository;
+import com.td.boss.game.comgeneralattributes.pojo.ComGeneralAttributes;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import java.util.List;
+
+@Service
+@Transactional
+public class ComEquipAttributesServiceImpl extends CommonServiceImpl<ComEquipAttributesVo, ComEquipAttributes, Integer> implements ComEquipAttributesService{
+
+    @PersistenceContext
+    private EntityManager em;
+    @Autowired
+    private ComEquipAttributesRepository comEquipAttributesRepository;
+
+    @Override
+    @Cacheable(value = "comEquipAttributesType",key = "#type")
+    public ComEquipAttributes findByType(Integer type) {
+        return comEquipAttributesRepository.findByType(type).orElse(null);
+    }
+
+    @Override
+    @Cacheable(value = "comEquipAttributesAll")
+    public List<ComEquipAttributes> findAll() {
+        return comEquipAttributesRepository.findAll();
+    }
+}

+ 23 - 0
src/main/java/com/td/boss/game/comequipattributes/vo/ComEquipAttributesVo.java

@@ -0,0 +1,23 @@
+package com.td.boss.game.comequipattributes.vo;
+
+import com.td.boss. common.pojo.PageCondition;import lombok.Data;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class ComEquipAttributesVo extends PageCondition implements Serializable {
+    private Integer id;//
+
+    private String name;//属性名称
+
+    private String type;//属性类型,设定好(1-10)血量1,蓝2,攻击3,防御4,连击率5,暴击率6,闪避回蓝7,格挡回血8,被动回血9,被动回蓝10
+
+    private Integer value;//当前属性值
+
+    private Integer min;//属性最小值
+
+    private Integer max;//属性最大值
+
+    private String isAvailable;//是否可用(0:不可用,1:可用)
+
+}

+ 12 - 0
src/main/java/com/td/boss/game/comequipchest/controller/ComEquipChestController.java

@@ -1,12 +1,24 @@
 package com.td.boss.game.comequipchest.controller;
 
 import com.td.boss.common.controller.*;
+import com.td.boss.common.pojo.Result;
+import com.td.boss.config.enums.ResultEnum;
 import com.td.boss.game.comequipchest.pojo.ComEquipChest;
 import com.td.boss.game.comequipchest.vo.ComEquipChestVo;
 import com.td.boss.game.comequipchest.service.ComEquipChestService;
+import com.td.boss.game.complayergoods.pojo.ComPlayerGoods;
+import com.td.boss.game.complayergoods.service.ComPlayerGoodsService;
+import com.td.boss.util.KeyUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.stream.Collectors;
+
 @RestController
 @RequestMapping("/game/comEquipChest/")
 public class ComEquipChestController extends CommonController<ComEquipChestVo, ComEquipChest, Integer> {

+ 8 - 6
src/main/java/com/td/boss/game/comequipchest/pojo/ComEquipChest.java

@@ -12,16 +12,18 @@ public class ComEquipChest implements Serializable {
     @Id
     private Integer id;//
 
-    private String type;//宝箱类型(1:金,2:银,3:铜,4:铁,0:纸)
+    private String name;//宝箱名字
 
-    private String red;//
+    private Integer type;//宝箱类型(1:金,2:银,3:铜,4:铁,0:纸)
 
-    private String yellow;//
+    private Integer red;//
 
-    private String blue;//
+    private Integer yellow;//
 
-    private String green;//
+    private Integer blue;//
 
-    private String white;//
+    private Integer green;//
+
+    private Integer white;//
 
 }

+ 4 - 0
src/main/java/com/td/boss/game/comequipchest/repository/ComEquipChestRepository.java

@@ -4,6 +4,10 @@ import com.td.boss.common.repository.*;
 import com.td.boss.game.comequipchest.pojo.ComEquipChest;
 import org.springframework.stereotype.Repository;
 
+import java.util.Optional;
+
 @Repository
 public interface ComEquipChestRepository extends CommonRepository<ComEquipChest, Integer> {
+
+    Optional<ComEquipChest> findByType(Integer type);
 }

+ 11 - 0
src/main/java/com/td/boss/game/comequipchest/service/ComEquipChestService.java

@@ -4,5 +4,16 @@ import com.td.boss.common.service.*;
 import com.td.boss.game.comequipchest.pojo.ComEquipChest;
 import com.td.boss.game.comequipchest.vo.ComEquipChestVo;
 
+import java.util.List;
+
 public interface ComEquipChestService extends CommonService<ComEquipChestVo, ComEquipChest, Integer> {
+
+    /**
+     * 查询全部宝箱
+     * @return
+     */
+    List<ComEquipChest> findAllEquipChest();
+
+
+    ComEquipChest findByType(Integer type);
 }

+ 14 - 0
src/main/java/com/td/boss/game/comequipchest/service/ComEquipChestServiceImpl.java

@@ -5,10 +5,12 @@ import com.td.boss.game.comequipchest.pojo.ComEquipChest;
 import com.td.boss.game.comequipchest.vo.ComEquipChestVo;
 import com.td.boss.game.comequipchest.repository.ComEquipChestRepository;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
+import java.util.List;
 
 @Service
 @Transactional
@@ -18,4 +20,16 @@ public class ComEquipChestServiceImpl extends CommonServiceImpl<ComEquipChestVo,
     private EntityManager em;
     @Autowired
     private ComEquipChestRepository comEquipChestRepository;
+
+    @Override
+    @Cacheable(value = "comEquipChestAll")
+    public List<ComEquipChest> findAllEquipChest() {
+        return comEquipChestRepository.findAll();
+    }
+
+    @Override
+    @Cacheable(value = "comEquipChestType",key = "#type")
+    public ComEquipChest findByType(Integer type) {
+        return comEquipChestRepository.findByType(type).orElse(null);
+    }
 }

+ 7 - 5
src/main/java/com/td/boss/game/comequipchest/vo/ComEquipChestVo.java

@@ -8,16 +8,18 @@ import java.util.Date;
 public class ComEquipChestVo extends PageCondition implements Serializable {
     private Integer id;//
 
+    private String name;//宝箱名字
+
     private String type;//宝箱类型(1:金,2:银,3:铜,4:铁,0:纸)
 
-    private String red;//
+    private Integer red;//
 
-    private String yellow;//
+    private Integer yellow;//
 
-    private String blue;//
+    private Integer blue;//
 
-    private String green;//
+    private Integer green;//
 
-    private String white;//
+    private Integer white;//
 
 }

+ 47 - 0
src/main/java/com/td/boss/game/comequips/controller/ComEquipsController.java

@@ -1,15 +1,62 @@
 package com.td.boss.game.comequips.controller;
 
 import com.td.boss.common.controller.*;
+import com.td.boss.common.pojo.Result;
 import com.td.boss.game.comequips.pojo.ComEquips;
 import com.td.boss.game.comequips.vo.ComEquipsVo;
 import com.td.boss.game.comequips.service.ComEquipsService;
+import com.td.boss.game.comequiptype.pojo.ComEquipType;
+import com.td.boss.game.comequiptype.service.ComEquipTypeService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
 @RestController
 @RequestMapping("/game/comEquips/")
 public class ComEquipsController extends CommonController<ComEquipsVo, ComEquips, Integer> {
     @Autowired
     private ComEquipsService comEquipsService;
+
+    @Autowired
+    private ComEquipTypeService comEquipTypeService;
+
+    @PostMapping("create")
+    public Result<Map> createPlayer(@RequestParam(value = "playerId") Integer playerId,
+                                    @RequestParam(value = "chestType",required = false) Integer chestType) {
+
+
+        //todo 可根据宝箱类型获取装备,列如属性差别等
+        List<ComEquipType> comEquipTypeList = comEquipTypeService.findAllComEquipType();
+        //随机一个装备类型
+        Integer random = new Random().nextInt(comEquipTypeList.size());
+        ComEquipType comEquipType = comEquipTypeList.get(random);
+
+        ComEquips comEquips = new ComEquips();
+        comEquips.setPlayerId(playerId);
+        comEquips.setName(comEquipType.getName());
+        comEquips.setType(comEquipType.getType());
+
+        //todo 主属性,按装备类型分
+
+//        comEquips = comEquipsService.addComEquips(userId);
+//        if(player == null){
+//            //player 不存在
+//            player = new ComPlayers();
+//            player.setUserId(userId);
+//            player.setAttributeType(0);
+//        }
+//        player.setAvatar(avatar);
+//        player.setName(name);
+//        ComPlayers addPlayer = comPlayersService.addComPlayers(player);
+
+        Map map = new HashMap();
+//        map.put("avatar",addPlayer.getAvatar());
+//        map.put("name",addPlayer.getName());
+//        map.put("attributeType",addPlayer.getAttributeType());
+        return Result.of(map);
+    }
 }

+ 4 - 1
src/main/java/com/td/boss/game/comequips/pojo/ComEquips.java

@@ -17,6 +17,9 @@ public class ComEquips implements Serializable {
 
     private String name;//装备名词
 
-    private String describe;//装备描述
+    private String mainProperty; //主要属性,对应属性类型
 
+    private String addonProperty; //副属性,对应属性类型
+
+    private Integer type; //装备类型
 }

+ 7 - 0
src/main/java/com/td/boss/game/comequips/service/ComEquipsService.java

@@ -5,4 +5,11 @@ import com.td.boss.game.comequips.pojo.ComEquips;
 import com.td.boss.game.comequips.vo.ComEquipsVo;
 
 public interface ComEquipsService extends CommonService<ComEquipsVo, ComEquips, Integer> {
+
+    /**
+     * 创建一个装备
+     * @param comEquips
+     * @return
+     */
+    ComEquips addComEquips(ComEquips comEquips);
 }

+ 6 - 0
src/main/java/com/td/boss/game/comequips/service/ComEquipsServiceImpl.java

@@ -18,4 +18,10 @@ public class ComEquipsServiceImpl extends CommonServiceImpl<ComEquipsVo, ComEqui
     private EntityManager em;
     @Autowired
     private ComEquipsRepository comEquipsRepository;
+
+    @Override
+    @Transactional
+    public ComEquips addComEquips(ComEquips comEquips) {
+        return comEquipsRepository.save(comEquips);
+    }
 }

+ 26 - 0
src/main/java/com/td/boss/game/comequiptype/controller/ComEquipTypeController.java

@@ -0,0 +1,26 @@
+package com.td.boss.game.comequiptype.controller;
+
+import com.td.boss.common.controller.*;
+import com.td.boss.common.pojo.Result;
+import com.td.boss.config.enums.ResultEnum;
+import com.td.boss.game.comequiptype.pojo.ComEquipType;
+import com.td.boss.game.comequiptype.vo.ComEquipTypeVo;
+import com.td.boss.game.comequiptype.service.ComEquipTypeService;
+import com.td.boss.game.complayergoods.pojo.ComPlayerGoods;
+import com.td.boss.game.complayergoods.service.ComPlayerGoodsService;
+import com.td.boss.util.KeyUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Random;
+import java.util.stream.Collectors;
+
+@RestController
+@RequestMapping("/game/comEquipType/")
+public class ComEquipTypeController extends CommonController<ComEquipTypeVo, ComEquipType, Integer> {
+    @Autowired
+    private ComPlayerGoodsService comPlayerGoodsService;
+
+}

+ 22 - 0
src/main/java/com/td/boss/game/comequiptype/pojo/ComEquipType.java

@@ -0,0 +1,22 @@
+package com.td.boss.game.comequiptype.pojo;
+
+import lombok.Data;
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+@Entity
+@Table(name = "com_equip_type")
+@Data
+public class ComEquipType implements Serializable {
+    @Id
+    private Integer id;//
+
+    private String name;//装备名字
+
+    private Integer type;//类型(1头盔:主属性加格挡回血量, 2项链:主属性加暴击率 3衣服:主属性加防御 4 腰带:主属性加蓝5左手武器:主属性加攻击 6右手武器:主属性加连击率 7手套:主属性被动回蓝 8裤子:主属性加血 9鞋子:主属性加闪避回蓝量 10护膝:主属性被动回血)
+
+    private String describe;//装备描述
+
+    private Integer property; //主属性关联属性表
+}

+ 9 - 0
src/main/java/com/td/boss/game/comequiptype/repository/ComEquipTypeRepository.java

@@ -0,0 +1,9 @@
+package com.td.boss.game.comequiptype.repository;
+
+import com.td.boss.common.repository.*;
+import com.td.boss.game.comequiptype.pojo.ComEquipType;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ComEquipTypeRepository extends CommonRepository<ComEquipType, Integer> {
+}

+ 16 - 0
src/main/java/com/td/boss/game/comequiptype/service/ComEquipTypeService.java

@@ -0,0 +1,16 @@
+package com.td.boss.game.comequiptype.service;
+
+import com.td.boss.common.service.*;
+import com.td.boss.game.comequiptype.pojo.ComEquipType;
+import com.td.boss.game.comequiptype.vo.ComEquipTypeVo;
+
+import java.util.List;
+
+public interface ComEquipTypeService extends CommonService<ComEquipTypeVo, ComEquipType, Integer> {
+
+    /**
+     * 查找全部类型
+     * @return
+     */
+    List<ComEquipType> findAllComEquipType();
+}

+ 29 - 0
src/main/java/com/td/boss/game/comequiptype/service/ComEquipTypeServiceImpl.java

@@ -0,0 +1,29 @@
+package com.td.boss.game.comequiptype.service;
+
+import com.td.boss.common.service.*;
+import com.td.boss.game.comequiptype.pojo.ComEquipType;
+import com.td.boss.game.comequiptype.vo.ComEquipTypeVo;
+import com.td.boss.game.comequiptype.repository.ComEquipTypeRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import java.util.List;
+
+@Service
+@Transactional
+public class ComEquipTypeServiceImpl extends CommonServiceImpl<ComEquipTypeVo, ComEquipType, Integer> implements ComEquipTypeService{
+
+    @PersistenceContext
+    private EntityManager em;
+    @Autowired
+    private ComEquipTypeRepository comEquipTypeRepository;
+
+    @Override
+    @Cacheable(value = "comEquipTypeAll")
+    public List<ComEquipType> findAllComEquipType() {
+        return comEquipTypeRepository.findAll();
+    }
+}

+ 18 - 0
src/main/java/com/td/boss/game/comequiptype/vo/ComEquipTypeVo.java

@@ -0,0 +1,18 @@
+package com.td.boss.game.comequiptype.vo;
+
+import com.td.boss. common.pojo.PageCondition;import lombok.Data;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class ComEquipTypeVo extends PageCondition implements Serializable {
+    private Integer id;//
+
+    private String name;//装备名字
+
+    private String type;//类型(1头盔:主属性加格挡回血量, 2项链:主属性加暴击率3衣服:主属性加防御 4腰带:主属性加蓝5左手武器:主属性加攻击 6右手武器:主属性加连击率 7手套:主属性被动回蓝 8裤子:主属性加血 9鞋子:主属性加闪避回蓝量 10护膝:主属性被动回血)
+
+    private String describe;//装备描述
+
+    private Integer property; //主属性关联属性表
+}

+ 4 - 0
src/main/java/com/td/boss/game/comgeneralattributes/pojo/ComGeneralAttributes.java

@@ -12,6 +12,10 @@ public class ComGeneralAttributes implements Serializable {
     @Id
     private Integer id;//
 
+    private String name; //所属类型的名字
+
+    private Integer type;//类型(0:玩家属性,1:boss属性)
+
     private Integer healthPoint;//血单位(HP)
 
     private Integer magicPoint;//魔法值(MP)

+ 4 - 0
src/main/java/com/td/boss/game/comgeneralattributes/repository/ComGeneralAttributesRepository.java

@@ -4,6 +4,10 @@ import com.td.boss.common.repository.*;
 import com.td.boss.game.comgeneralattributes.pojo.ComGeneralAttributes;
 import org.springframework.stereotype.Repository;
 
+import java.util.Optional;
+
 @Repository
 public interface ComGeneralAttributesRepository extends CommonRepository<ComGeneralAttributes, Integer> {
+
+    Optional<ComGeneralAttributes> findByType(Integer type);
 }

+ 10 - 0
src/main/java/com/td/boss/game/comgeneralattributes/service/ComGeneralAttributesService.java

@@ -4,5 +4,15 @@ import com.td.boss.common.service.*;
 import com.td.boss.game.comgeneralattributes.pojo.ComGeneralAttributes;
 import com.td.boss.game.comgeneralattributes.vo.ComGeneralAttributesVo;
 
+import java.util.List;
+
 public interface ComGeneralAttributesService extends CommonService<ComGeneralAttributesVo, ComGeneralAttributes, Integer> {
+
+    /**
+     * 根据所属属性来获取对象
+     * @param type
+     * @return
+     */
+    ComGeneralAttributes findByType(Integer type);
+
 }

+ 9 - 0
src/main/java/com/td/boss/game/comgeneralattributes/service/ComGeneralAttributesServiceImpl.java

@@ -5,10 +5,12 @@ import com.td.boss.game.comgeneralattributes.pojo.ComGeneralAttributes;
 import com.td.boss.game.comgeneralattributes.vo.ComGeneralAttributesVo;
 import com.td.boss.game.comgeneralattributes.repository.ComGeneralAttributesRepository;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
+import java.util.List;
 
 @Service
 @Transactional
@@ -18,4 +20,11 @@ public class ComGeneralAttributesServiceImpl extends CommonServiceImpl<ComGenera
     private EntityManager em;
     @Autowired
     private ComGeneralAttributesRepository comGeneralAttributesRepository;
+
+    @Override
+    @Cacheable(value = "comGeneralAttributesType",key = "#type")
+    public ComGeneralAttributes findByType(Integer type) {
+        return comGeneralAttributesRepository.findByType(type).orElse(null);
+    }
+
 }

+ 4 - 0
src/main/java/com/td/boss/game/comgeneralattributes/vo/ComGeneralAttributesVo.java

@@ -8,6 +8,10 @@ import java.util.Date;
 public class ComGeneralAttributesVo extends PageCondition implements Serializable {
     private Integer id;//
 
+    private String name; //所属类型的名字
+
+    private Integer type;//类型(0:玩家属性,1:boss属性)
+
     private Integer healthPoint;//血单位(HP)
 
     private Integer magicPoint;//魔法值(MP)

+ 498 - 0
src/main/java/com/td/boss/game/complayergoods/controller/ComPlayerGoodsController.java

@@ -0,0 +1,498 @@
+package com.td.boss.game.complayergoods.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.td.boss.common.controller.*;
+import com.td.boss.common.pojo.Result;
+import com.td.boss.config.enums.ResultEnum;
+import com.td.boss.game.comequipattributes.pojo.ComEquipAttributes;
+import com.td.boss.game.comequipattributes.service.ComEquipAttributesService;
+import com.td.boss.game.comequipchest.pojo.ComEquipChest;
+import com.td.boss.game.comequipchest.service.ComEquipChestService;
+import com.td.boss.game.comequiptype.pojo.ComEquipType;
+import com.td.boss.game.comequiptype.service.ComEquipTypeService;
+import com.td.boss.game.complayergoods.pojo.ComPlayerGoods;
+import com.td.boss.game.complayergoods.vo.ComPlayerGoodsVo;
+import com.td.boss.game.complayergoods.service.ComPlayerGoodsService;
+import com.td.boss.game.complayergoods.vo.PlayerGoodsVo;
+import com.td.boss.util.JsonUtils;
+import com.td.boss.util.KeyUtil;
+import com.td.boss.util.NumUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+import oshi.json.util.JsonUtil;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Slf4j
+@RestController
+@RequestMapping("/game/comPlayerGoods/")
+public class ComPlayerGoodsController extends CommonController<ComPlayerGoodsVo, ComPlayerGoods, String> {
+    @Autowired
+    private ComPlayerGoodsService comPlayerGoodsService;
+
+    @Autowired
+    private ComEquipChestService comEquipChestService;
+
+    @Autowired
+    private ComEquipTypeService comEquipTypeService;
+
+    @Autowired
+    private ComEquipAttributesService comEquipAttributesService;
+
+
+    /**
+     * 获取宝箱,存入背包
+     * 如果参数不存在type,就random一个宝箱返回
+     * @param playerId
+     * @param type
+     * @return
+     */
+    @GetMapping("getChest")
+    public Result<Map> getChest(@RequestParam("playerId") Integer playerId,
+                                @RequestParam(value = "type",required = false)Integer type) {
+        //todo 查询全部宝箱出来后,暂时先随机返回一个宝箱奖励
+        List<ComEquipChest> comEquipChests = comEquipChestService.findAllEquipChest();
+        if (comEquipChests.size() == 0) {
+            return Result.of(null, false, ResultEnum.PLAYER_NO_CHEST_INFO.getMessage(), ResultEnum.PLAYER_NO_CHEST_INFO.getCode());
+        }
+        ComEquipChest comEquipChest = new ComEquipChest();
+        //如果type存在,生成type类型宝箱
+        if(type != null){
+            for(ComEquipChest tempChest : comEquipChests){
+                if(type == tempChest.getType()){
+                    comEquipChest = tempChest;
+                    break;
+                }
+            }
+
+        }else{
+            comEquipChest =  comEquipChests.get(new Random().nextInt(comEquipChests.size()));
+        }
+        Map resultMap = new HashMap();
+        resultMap.put("name",comEquipChest.getName());
+        resultMap.put("type",comEquipChest.getType());
+        //先获取玩家全部背包数据
+        List<ComPlayerGoods> comPlayerGoodsList = comPlayerGoodsService.findAllByPlayerId(playerId);
+        //1.背包不存在物品,直接添加
+        if (comPlayerGoodsList.size() == 0) {
+            //背包没有数据,创建一个新宝箱存储到背包
+            ComPlayerGoods comPlayerGoods = new ComPlayerGoods();
+            comPlayerGoods.setGoodsId(KeyUtil.genUniqueKey());
+            comPlayerGoods.setPlayerId(playerId);
+            comPlayerGoods.setAmount(1);
+            comPlayerGoods.setGoodsType(0);
+            comPlayerGoods.setGoodsIndex(comEquipChest.getType());
+            comPlayerGoods.setName(comEquipChest.getName());
+            comPlayerGoods.setPosition(0);
+            comPlayerGoodsService.addComPlayerGoods(comPlayerGoods);
+            //返回给前端展示
+            resultMap.put("goodsId",comPlayerGoods.getGoodsId());
+            return Result.of(resultMap);
+        }
+        //如果背包不为空,先获取position 背包位置
+        List<Integer> posList = comPlayerGoodsList.stream().map(e -> e.getPosition()).collect(Collectors.toList());
+        int limit = 100;
+        if (posList.size() > limit) {
+            //超过预设格子的长度
+            return Result.of(null, false, ResultEnum.PLAYER_GOODS_LIMIT_ERROR.getMessage(), ResultEnum.PLAYER_GOODS_LIMIT_ERROR.getCode());
+        }
+
+        //从背包数据获取对象
+        ComPlayerGoods getComPlayerGoods = null;
+        for (ComPlayerGoods temp : comPlayerGoodsList) {
+            if (temp.getGoodsIndex() == comEquipChest.getType() && temp.getGoodsType() == 0) {
+                getComPlayerGoods = temp;
+                break;
+            }
+        }
+        //2.如果背包匹配不到数据,添加
+        if (getComPlayerGoods == null) {
+            //背包没有数据,创建一个新宝箱存储到背包
+            getComPlayerGoods = new ComPlayerGoods();
+            getComPlayerGoods.setGoodsId(KeyUtil.genUniqueKey());
+            getComPlayerGoods.setPlayerId(playerId);
+            getComPlayerGoods.setAmount(1);
+            getComPlayerGoods.setGoodsType(0);
+            getComPlayerGoods.setGoodsIndex(comEquipChest.getType());
+            getComPlayerGoods.setName(comEquipChest.getName());
+            //需要判断添加位置
+            //todo 暂时设定 100 个格子,用于存放物品
+            int addPos = 0;
+            for (int i = 0; i < limit; i++) {
+                //获取第一个匹配的空位置,返回addPos
+                if (!posList.contains(i)) {
+                    addPos = i;
+                    log.info("占用的位置addPos:" + addPos);
+                    break;
+                }
+            }
+            getComPlayerGoods.setPosition(addPos);
+            comPlayerGoodsService.addComPlayerGoods(getComPlayerGoods);
+            //返回给前端展示
+            resultMap.put("goodsId",getComPlayerGoods.getGoodsId());
+            return Result.of(resultMap);
+        }
+
+        //3.如果存在物品,更新对应物品
+        getComPlayerGoods.setAmount(getComPlayerGoods.getAmount() + 1);
+        comPlayerGoodsService.addComPlayerGoods(getComPlayerGoods);
+        //返回给前端展示
+        resultMap.put("goodsId",getComPlayerGoods.getGoodsId());
+        return Result.of(resultMap);
+    }
+
+    /**
+     * 获取装备,存入背包
+     *
+     * @param playerId
+     * @return
+     */
+    @GetMapping("getRandomEquip")
+    public Result<Map> getEquip(@RequestParam(value = "userId") String userId,@RequestParam("playerId") Integer playerId) {
+        //todo 查询全部装备出来后,暂时先随机返回一个装备奖励
+        List<ComEquipType> comEquipTypeList = comEquipTypeService.findAllComEquipType();
+        if (comEquipTypeList.size() == 0) {
+            return Result.of(null, false, ResultEnum.PLAYER_NO_EQUIP_TYPE.getMessage(), ResultEnum.PLAYER_NO_EQUIP_TYPE.getCode());
+        }
+        ComEquipType comEquipType = comEquipTypeList.get(new Random().nextInt(comEquipTypeList.size()));
+
+        //获取装备属性计算方式
+        ComEquipAttributes mainEquipAttributes = comEquipAttributesService.findByType(comEquipType.getProperty());
+
+        //过滤主属性
+        List<ComEquipAttributes> comEquipAttributesList = comEquipAttributesService.findAll().stream()
+                .filter(e -> !e.getType().equals(mainEquipAttributes.getType())).collect(Collectors.toList());
+        Random random = new Random();
+        Map resultMap = new HashMap();
+        String mainPro, addonPro = null;
+        //计算主属性
+        int max = mainEquipAttributes.getMax();
+        int min = mainEquipAttributes.getMin();
+        int randomMainPro = random.nextInt(max - min + 1) + min;
+        Map mainMap = new HashMap();
+        mainMap.put(mainEquipAttributes.getName(),randomMainPro);
+        mainPro = JSONObject.toJSONString(mainMap);
+        Map addonMap = new HashMap();
+        Integer randomIndex = new Random().nextInt(100);
+        Integer level = 0;//装备等级(0 白色 ,1 绿色, 2 蓝色 ,3黄色,4红色 )
+        if (randomIndex <= 20) {
+            //红色装备:随机三条副属性1-4
+            addonMap =  getAddonProperty(comEquipAttributesList, 4);
+            addonPro = JSONObject.toJSONString(addonMap);
+            level = 4;
+        } else if (randomIndex <= 40) {
+            //黄色装备:随机两条副属性1-3
+            addonMap =  getAddonProperty(comEquipAttributesList, 3);
+            addonPro = JSONObject.toJSONString(addonMap);
+            level = 3;
+        } else if (randomIndex <= 60) {
+            //蓝色装备:随机一条副属性1-2
+            addonMap =  getAddonProperty(comEquipAttributesList, 2);
+            addonPro = JSONObject.toJSONString(addonMap);
+            level = 2;
+        } else if (randomIndex <= 80) {
+            //绿色装备:随机一条副属性1-1
+            addonMap =  getAddonProperty(comEquipAttributesList, 1);
+            addonPro = JSONObject.toJSONString(addonMap);
+            level = 1;
+        } else {
+            //白色装备:主属性1
+        }
+
+        //先获取玩家全部背包数据
+        List<ComPlayerGoods> comPlayerGoodsList = comPlayerGoodsService.findAllByPlayerId(playerId);
+        //1.背包不存在物品,直接添加
+        if (comPlayerGoodsList.size() == 0) {
+            //背包没有数据,创建一个新宝箱存储到背包
+            ComPlayerGoods comPlayerGoods = new ComPlayerGoods();
+            comPlayerGoods.setGoodsId(KeyUtil.genUniqueKey());
+            comPlayerGoods.setPlayerId(playerId);
+            comPlayerGoods.setAmount(1);
+            comPlayerGoods.setGoodsType(1); //设置装备类型
+            comPlayerGoods.setGoodsIndex(comEquipType.getType());
+            comPlayerGoods.setName(comEquipType.getName());
+            comPlayerGoods.setPosition(0);
+            comPlayerGoods.setMainProperty(mainPro);
+            comPlayerGoods.setAddonProperty(addonPro);
+            comPlayerGoods.setLevel(level);
+            comPlayerGoodsService.addComPlayerGoods(comPlayerGoods);
+            //返回给前端展示
+            resultMap.put("name",comPlayerGoods.getName());
+            resultMap.put("amount",comPlayerGoods.getAmount());
+            resultMap.put("position",comPlayerGoods.getPosition());
+            resultMap.put("mainProperty",mainMap);
+            resultMap.put("addonProperty",addonMap);
+            resultMap.put("level",level);
+            return Result.of(resultMap);
+        }
+        //如果背包不为空,先获取position 背包位置
+        List<Integer> posList = comPlayerGoodsList.stream().map(e -> e.getPosition()).collect(Collectors.toList());
+        int limit = 100;
+        if (posList.size() > limit) {
+            //超过预设格子的长度
+            return Result.of(null, false, ResultEnum.PLAYER_GOODS_LIMIT_ERROR.getMessage(), ResultEnum.PLAYER_GOODS_LIMIT_ERROR.getCode());
+        }
+
+        //从背包数据获取对象
+        ComPlayerGoods getComPlayerGoods = new ComPlayerGoods();
+        getComPlayerGoods.setGoodsId(KeyUtil.genUniqueKey());
+        getComPlayerGoods.setPlayerId(playerId);
+        getComPlayerGoods.setAmount(1);
+        getComPlayerGoods.setGoodsType(1);//装备设置1
+        getComPlayerGoods.setGoodsIndex(comEquipType.getType());
+        getComPlayerGoods.setName(comEquipType.getName());
+        //需要判断添加位置
+        //todo 暂时设定 100 个格子,用于存放物品
+        int addPos = 0;
+        for (int i = 0; i < limit; i++) {
+            //获取第一个匹配的空位置,返回addPos
+            if (!posList.contains(i)) {
+                addPos = i;
+                log.info("占用的位置addPos:" + addPos);
+                break;
+            }
+        }
+        getComPlayerGoods.setPosition(addPos);
+        getComPlayerGoods.setMainProperty(mainPro);
+        getComPlayerGoods.setAddonProperty(addonPro);
+        getComPlayerGoods.setLevel(level);
+        comPlayerGoodsService.addComPlayerGoods(getComPlayerGoods);
+        //返回给前端展示
+        resultMap.put("name",getComPlayerGoods.getName());
+        resultMap.put("amount",getComPlayerGoods.getAmount());
+        resultMap.put("position",getComPlayerGoods.getPosition());
+        resultMap.put("mainProperty",mainMap);
+        resultMap.put("addonProperty",addonMap);
+        resultMap.put("level",level);
+        return Result.of(resultMap);
+
+    }
+
+    /**
+     * 开启宝箱,获取装备
+     * @param playerId
+     * @param goodsId
+     * @param openType
+     * @return
+     */
+    @GetMapping("openChest")
+    public Result<Map> openChest(
+            @RequestParam("playerId") Integer playerId,
+            @RequestParam("goodsId") String goodsId,
+            @RequestParam(value = "openType",defaultValue = "limit") String openType
+    ) {
+        Map resultMap = new HashMap();
+
+        //先获取玩家全部背包数据
+        List<ComPlayerGoods> comPlayerGoodsList = comPlayerGoodsService.findAllByPlayerId(playerId);
+        //先判断背包是否存对应宝箱对象
+        ComPlayerGoods comPlayerGoodsChest = comPlayerGoodsList.stream().filter(e->e.getGoodsId().equals(goodsId)).findFirst().orElse(null);
+        if (comPlayerGoodsChest == null) {
+            return Result.of(null, false, ResultEnum.PLAYER_GOODS_NO_CHEST.getMessage(), ResultEnum.PLAYER_GOODS_NO_CHEST.getCode());
+        }
+        if(comPlayerGoodsChest.getGoodsType() !=0){
+            //如果不是chest类型,返回错误提示
+            return Result.of(null, false, ResultEnum.PLAYER_GOODS_NOT_CHEST_TYPE.getMessage(), ResultEnum.PLAYER_GOODS_NOT_CHEST_TYPE.getCode());
+        }
+        //1.获取宝箱对应的概率
+        ComEquipChest comEquipChest = comEquipChestService.findByType(comPlayerGoodsChest.getGoodsIndex());
+        if (comEquipChest == null) {
+            return Result.of(null, false, ResultEnum.PLAYER_NO_CHEST_INFO.getMessage(), ResultEnum.PLAYER_NO_CHEST_INFO.getCode());
+        }
+        Random random =  new Random();
+        //2.获取随机的的装备,并设置属性.属性根据不同装备计算
+        //todo  根据条件区分
+        ComEquipType comEquipType = null;
+        List<ComEquipType> comEquipTypeList = comEquipTypeService.findAllComEquipType();
+        if(openType.equals("noLimit")){
+            //随机装备
+            comEquipType = comEquipTypeList.get(random.nextInt(comEquipTypeList.size()));
+        }else {
+            //获取背包的装备,随机返回剩余的
+            List<Integer>  goodsIndexList =  comPlayerGoodsList.stream()
+                    .filter(e->e.getGoodsType().equals(1)).map(e->e.getGoodsIndex()).collect(Collectors.toList());
+            List<ComEquipType> otherComEquipTypeList = comEquipTypeList.stream().filter(e->!goodsIndexList.contains(e.getType())).collect(Collectors.toList());
+
+            if(otherComEquipTypeList.size() == 0){
+                // todo 如果已经获取完装备,暂时返回一个提示,理论上宝箱不应该发放10个。
+                return Result.of(null,false,ResultEnum.PLAYER_GOODS_NO_QUIP_REQUIRED.getMessage(),ResultEnum.PLAYER_GOODS_NO_QUIP_REQUIRED.getCode());
+            }
+            comEquipType = otherComEquipTypeList.get(random.nextInt(otherComEquipTypeList.size()));
+        }
+
+        //3.获取装备属性计算方式
+        ComEquipAttributes mainEquipAttributes = comEquipAttributesService.findByType(comEquipType.getProperty());
+        //过滤主属性
+        List<ComEquipAttributes> comEquipAttributesList = comEquipAttributesService.findAll().stream()
+                .filter(e -> !e.getType().equals(mainEquipAttributes.getType())).collect(Collectors.toList());
+        String mainPro, addonPro = null;
+        //计算主属性
+        int max = mainEquipAttributes.getMax();
+        int min = mainEquipAttributes.getMin();
+        int randomMainPro = random.nextInt(max - min + 1) + min;
+        Map mainMap = new HashMap();
+        mainMap.put(mainEquipAttributes.getName(),randomMainPro);
+        mainPro = JSONObject.toJSONString(mainMap);
+        Map addonMap = new HashMap();
+        Integer randomIndex = new Random().nextInt(100);
+        Integer level = 0;//装备等级(0 白色 ,1 绿色, 2 蓝色 ,3黄色,4红色 )
+        if (randomIndex <= comEquipChest.getRed()) { //5
+            //红色装备:随机三条副属性1-4
+            addonMap =  getAddonProperty(comEquipAttributesList, 4);
+            addonPro = JSONObject.toJSONString(addonMap);
+            level = 4;
+        } else if (randomIndex <= comEquipChest.getRed()+comEquipChest.getYellow()) { //10
+            //黄色装备:随机两条副属性1-3
+            addonMap =  getAddonProperty(comEquipAttributesList, 3);
+            addonPro = JSONObject.toJSONString(addonMap);
+            level = 3;
+        } else if (randomIndex <= comEquipChest.getRed()+comEquipChest.getYellow()+comEquipChest.getBlue()) {
+            //蓝色装备:随机一条副属性1-2
+            addonMap =  getAddonProperty(comEquipAttributesList, 2);
+            addonPro = JSONObject.toJSONString(addonMap);
+            level = 2;
+        } else if (randomIndex <= comEquipChest.getRed()+comEquipChest.getYellow()+comEquipChest.getBlue()+comEquipChest.getGreen()) {
+            //绿色装备:随机一条副属性1-1
+            addonMap =  getAddonProperty(comEquipAttributesList, 1);
+            addonPro = JSONObject.toJSONString(addonMap);
+            level = 1;
+        } else {
+            //白色装备:主属性1
+        }
+
+        //开箱子,背包定不为空,先获取position 背包位置
+        List<Integer> posList = comPlayerGoodsList.stream().map(e -> e.getPosition()).collect(Collectors.toList());
+        int limit = 100;
+        if (posList.size() > limit) {
+            //超过预设格子的长度
+            return Result.of(null, false, ResultEnum.PLAYER_GOODS_LIMIT_ERROR.getMessage(), ResultEnum.PLAYER_GOODS_LIMIT_ERROR.getCode());
+        }
+        //直接存储新的装备,装备由于属性随机,不用添加Amount
+        ComPlayerGoods getEquip = new ComPlayerGoods();
+        getEquip.setGoodsId(KeyUtil.genUniqueKey());
+        getEquip.setPlayerId(comPlayerGoodsChest.getPlayerId());
+        getEquip.setAmount(1);
+        getEquip.setGoodsType(1);
+        getEquip.setGoodsIndex(comEquipType.getType());
+        getEquip.setName(comEquipType.getName());
+        //需要判断添加位置
+        //todo 暂时设定 100 个格子,用于存放物品
+        int addPos = 0;
+        for (int i = 0; i < limit; i++) {
+            //获取第一个匹配的空位置,返回addPos
+            if (!posList.contains(i)) {
+                addPos = i;
+                log.info("占用的位置addPos:" + addPos);
+                break;
+            }
+        }
+        getEquip.setPosition(addPos);
+        getEquip.setMainProperty(mainPro);
+        getEquip.setAddonProperty(addonPro);
+        getEquip.setLevel(level);
+        comPlayerGoodsService.addComPlayerGoods(getEquip);
+
+        //添加装备成功,处理宝箱
+        int amount = comPlayerGoodsChest.getAmount();
+        if (amount - 1 > 0) {
+            comPlayerGoodsChest.setAmount(amount - 1);
+            comPlayerGoodsService.addComPlayerGoods(comPlayerGoodsChest);
+        } else {
+            //删除
+            comPlayerGoodsService.delete(comPlayerGoodsChest.getGoodsId());
+        }
+        //返回给前端展示
+        resultMap.put("name",getEquip.getName());
+        resultMap.put("amount",getEquip.getAmount());
+        resultMap.put("position",getEquip.getPosition());
+        resultMap.put("mainProperty",mainMap);
+        resultMap.put("addonProperty",addonMap);
+        resultMap.put("level",level);
+        return Result.of(resultMap);
+    }
+
+
+    private Map getAddonProperty(List<ComEquipAttributes> comEquipAttributesList, Integer Number) {
+        int[] randomArray = NumUtil.randomArray(0, comEquipAttributesList.size()-1, Number);
+        Map<String, Object> map = new HashMap();
+        for (int index : randomArray) {
+            ComEquipAttributes comEquipAttributes = comEquipAttributesList.get(index);
+            int max = comEquipAttributes.getMax();
+            int min = comEquipAttributes.getMin();
+            int randomAddonPro = new Random().nextInt(max - min + 1) + min;
+            map.put(comEquipAttributes.getName(), randomAddonPro);
+        }
+        return map;
+    }
+
+
+    /**
+     * 获取用户背包
+     * @param playerId
+     * @return
+     */
+    @GetMapping("getPlayerGoods")
+    public Result<List<PlayerGoodsVo>> getPlayerGoods(@RequestParam("playerId") Integer playerId) {
+        //todo 先获取玩家全部背包数据,暂时不做分页处理,因为玩家数据最多 100 条
+        List<PlayerGoodsVo> playerGoodsList = comPlayerGoodsService.findAllByPlayerId(playerId).stream().map(e->{
+            PlayerGoodsVo playerGoodsVo = new PlayerGoodsVo();
+            playerGoodsVo.setGoodsId(e.getGoodsId());
+            playerGoodsVo.setGoodsIndex(e.getGoodsIndex());
+            playerGoodsVo.setGoodsType(e.getGoodsType());
+            playerGoodsVo.setName(e.getName());
+            playerGoodsVo.setAmount(e.getAmount());
+            playerGoodsVo.setPosition(e.getPosition());
+            playerGoodsVo.setLevel(e.getLevel());
+            Map<String,Integer> mainPro = JSONObject.parseObject(e.getMainProperty(),new TypeReference<Map<String,Integer>>(){});
+            playerGoodsVo.setMainProperty(mainPro);
+            Map<String,Integer> addonPro = JSONObject.parseObject(e.getAddonProperty(),new TypeReference<Map<String,Integer>>(){});
+            playerGoodsVo.setAddonProperty(addonPro);
+            playerGoodsVo.setIsWear(e.getIsWear());
+            return  playerGoodsVo;
+        }).collect(Collectors.toList());
+
+        //返回给前端展示
+        return Result.of(playerGoodsList);
+    }
+
+    /**
+     * 穿戴装备
+     * @param goodsId
+     * @param isWear
+     * @return
+     */
+    @PostMapping("wearableEquip")
+    public Result<PlayerGoodsVo> WearableEquip(@RequestParam("goodsId") String goodsId, @RequestParam("isWear") Integer isWear
+    ) {
+        if(isWear != 0 && isWear != 1){
+            return Result.of(null,false,ResultEnum.PLAYER_GOODS_WEAR_NUM_ERROR.getMessage(),ResultEnum.PLAYER_GOODS_WEAR_NUM_ERROR.getCode());
+        }
+
+        ComPlayerGoods wearableEquip =  comPlayerGoodsService.findById(goodsId);
+        wearableEquip.setIsWear(isWear);
+
+        wearableEquip =  comPlayerGoodsService.addComPlayerGoods(wearableEquip);
+
+        PlayerGoodsVo playerGoodsVo = new PlayerGoodsVo();
+        playerGoodsVo.setGoodsId(wearableEquip.getGoodsId());
+        playerGoodsVo.setGoodsIndex(wearableEquip.getGoodsIndex());
+        playerGoodsVo.setGoodsType(wearableEquip.getGoodsType());
+        playerGoodsVo.setName(wearableEquip.getName());
+        playerGoodsVo.setAmount(wearableEquip.getAmount());
+        playerGoodsVo.setPosition(wearableEquip.getPosition());
+        playerGoodsVo.setLevel(wearableEquip.getLevel());
+        Map<String,Integer> mainPro = JSONObject.parseObject(wearableEquip.getMainProperty(),new TypeReference<Map<String,Integer>>(){});
+        playerGoodsVo.setMainProperty(mainPro);
+        Map<String,Integer> addonPro = JSONObject.parseObject(wearableEquip.getAddonProperty(),new TypeReference<Map<String,Integer>>(){});
+        playerGoodsVo.setAddonProperty(addonPro);
+        playerGoodsVo.setIsWear(wearableEquip.getIsWear());
+        //返回给前端展示
+        return Result.of(playerGoodsVo);
+    }
+
+}

+ 34 - 0
src/main/java/com/td/boss/game/complayergoods/pojo/ComPlayerGoods.java

@@ -0,0 +1,34 @@
+package com.td.boss.game.complayergoods.pojo;
+
+import lombok.Data;
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+@Entity
+@Table(name = "com_player_goods")
+@Data
+public class ComPlayerGoods implements Serializable {
+    @Id
+    private String goodsId;//背包物品id,字符串
+
+    private Integer goodsIndex;//背包物品下标,类型
+
+    private Integer goodsType;// 对应装备类型(0:宝箱,1:装备)
+
+    private Integer playerId;//玩家角色id
+
+    private String name;//名字
+
+    private Integer amount;//数量
+
+    private Integer position;//背包位置
+
+    private Integer level;//装备等级(0 白色 ,1 绿色, 2 蓝色 ,3黄色,4红色 )
+
+    private String mainProperty;//主要属性,对应属性类型
+
+    private String addonProperty;//副属性,对应属性类型
+
+    private Integer isWear;//是否穿戴状态(0:否,1是)
+}

+ 14 - 0
src/main/java/com/td/boss/game/complayergoods/repository/ComPlayerGoodsRepository.java

@@ -0,0 +1,14 @@
+package com.td.boss.game.complayergoods.repository;
+
+import com.td.boss.common.repository.*;
+import com.td.boss.game.complayergoods.pojo.ComPlayerGoods;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Optional;
+
+@Repository
+public interface ComPlayerGoodsRepository extends CommonRepository<ComPlayerGoods, String> {
+
+    List<ComPlayerGoods> findAllByPlayerId(Integer playerId);
+}

+ 25 - 0
src/main/java/com/td/boss/game/complayergoods/service/ComPlayerGoodsService.java

@@ -0,0 +1,25 @@
+package com.td.boss.game.complayergoods.service;
+
+import com.td.boss.common.service.*;
+import com.td.boss.game.complayergoods.pojo.ComPlayerGoods;
+import com.td.boss.game.complayergoods.vo.ComPlayerGoodsVo;
+
+import java.util.List;
+
+public interface ComPlayerGoodsService extends CommonService<ComPlayerGoodsVo, ComPlayerGoods, String> {
+
+    /**
+     * 向背包添加一个物品
+     * @param comPlayerGoods
+     * @return
+     */
+    ComPlayerGoods addComPlayerGoods(ComPlayerGoods comPlayerGoods);
+
+    /**
+     * 寻找玩家的背包数据
+     * @return
+     */
+    ComPlayerGoods findById(String goodsId);
+
+    List<ComPlayerGoods> findAllByPlayerId(Integer playerId);
+}

+ 38 - 0
src/main/java/com/td/boss/game/complayergoods/service/ComPlayerGoodsServiceImpl.java

@@ -0,0 +1,38 @@
+package com.td.boss.game.complayergoods.service;
+
+import com.td.boss.common.service.*;
+import com.td.boss.game.complayergoods.pojo.ComPlayerGoods;
+import com.td.boss.game.complayergoods.vo.ComPlayerGoodsVo;
+import com.td.boss.game.complayergoods.repository.ComPlayerGoodsRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import java.util.List;
+
+@Service
+@Transactional
+public class ComPlayerGoodsServiceImpl extends CommonServiceImpl<ComPlayerGoodsVo, ComPlayerGoods, String> implements ComPlayerGoodsService{
+
+    @PersistenceContext
+    private EntityManager em;
+    @Autowired
+    private ComPlayerGoodsRepository comPlayerGoodsRepository;
+
+    @Override
+    @Transactional
+    public ComPlayerGoods addComPlayerGoods(ComPlayerGoods comPlayerGoods) {
+        return comPlayerGoodsRepository.save(comPlayerGoods);
+    }
+
+    @Override
+    public ComPlayerGoods findById(String goodsId) {
+        return comPlayerGoodsRepository.findById(goodsId).orElse(null);
+    }
+
+    @Override
+    public List<ComPlayerGoods> findAllByPlayerId(Integer playerId) {
+        return comPlayerGoodsRepository.findAllByPlayerId(playerId);
+    }
+}

+ 26 - 0
src/main/java/com/td/boss/game/complayergoods/vo/ComPlayerGoodsVo.java

@@ -0,0 +1,26 @@
+package com.td.boss.game.complayergoods.vo;
+
+import com.td.boss. common.pojo.PageCondition;import lombok.Data;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class ComPlayerGoodsVo extends PageCondition implements Serializable {
+    private String goodsId;//背包物品id,字符串
+
+    private Integer goodsIndex;//背包物品下标
+
+    private Integer playerId;//玩家角色id
+
+    private String name;//名字
+
+    private Integer amount;//数量
+
+    private Integer position;//背包位置
+
+    private Integer level;//装备等级(0 白色 ,1 绿色, 2 蓝色 ,3黄色,4红色 )
+
+    private String mainProperty;//主要属性,对应属性类型
+
+    private String addonProperty;//副属性,对应属性类型
+}

+ 21 - 0
src/main/java/com/td/boss/game/complayergoods/vo/PlayerGoodsVo.java

@@ -0,0 +1,21 @@
+package com.td.boss.game.complayergoods.vo;
+
+import com.td.boss.common.pojo.PageCondition;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Map;
+
+@Data
+public class PlayerGoodsVo implements Serializable {
+    private String goodsId;//背包物品id,字符串
+    private Integer goodsIndex;//背包物品下标,类型
+    private Integer goodsType;// 对应装备类型(0:宝箱,1:装备)
+    private String name;//名字
+    private Integer amount;//数量
+    private Integer position;//背包位置
+    private Integer level;//装备等级(0 白色 ,1 绿色, 2 蓝色 ,3黄色,4红色 )
+    private Map mainProperty;//主要属性,对应属性类型
+    private Map addonProperty;//副属性,对应属性类型
+    private Integer isWear;
+}

+ 102 - 0
src/main/java/com/td/boss/game/complayers/controller/ComPlayersController.java

@@ -1,15 +1,117 @@
 package com.td.boss.game.complayers.controller;
 
 import com.td.boss.common.controller.*;
+import com.td.boss.common.pojo.Result;
+import com.td.boss.config.enums.ResultEnum;
+import com.td.boss.game.comgeneralattributes.pojo.ComGeneralAttributes;
+import com.td.boss.game.comgeneralattributes.service.ComGeneralAttributesService;
 import com.td.boss.game.complayers.pojo.ComPlayers;
 import com.td.boss.game.complayers.vo.ComPlayersVo;
 import com.td.boss.game.complayers.service.ComPlayersService;
+import com.td.boss.util.CopyUtil;
+import net.bytebuddy.asm.Advice;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.HashMap;
+import java.util.Map;
+
 @RestController
 @RequestMapping("/game/comPlayers/")
 public class ComPlayersController extends CommonController<ComPlayersVo, ComPlayers, Integer> {
     @Autowired
     private ComPlayersService comPlayersService;
+
+    @Autowired
+    private ComGeneralAttributesService comGeneralAttributesService;
+    /**
+     * 创建玩家
+     * @param userId
+     * @return
+     */
+    @PostMapping("createPlayer")
+    public Result<Map> createPlayer(@RequestParam(value = "userId") String userId,
+                                    @RequestParam(value = "name")String name,
+                                    @RequestParam(value = "avatar")String avatar) {
+        //todo 疑问avatar获取渠道?
+        ComPlayers player = comPlayersService.findByUserId(userId);
+        if(player == null){
+            //player 不存在
+            player = new ComPlayers();
+            player.setUserId(userId);
+            player.setAttributeType(0);
+        }
+        player.setAvatar(avatar);
+        player.setName(name);
+        ComPlayers addPlayer = comPlayersService.addComPlayers(player);
+
+        Map map = new HashMap();
+        map.put("avatar",addPlayer.getAvatar());
+        map.put("name",addPlayer.getName());
+        map.put("attributeType",addPlayer.getAttributeType());
+        return Result.of(map);
+    }
+
+
+    /**
+     * 获取玩家信息
+     * @param userId
+     * @return
+     */
+    @GetMapping("getPlayer")
+    public Result<Map> getPlayer(@RequestParam(value = "userId") String userId) {
+        ComPlayers player = comPlayersService.findByUserId(userId);
+        if(player == null){
+            //player 不存在
+            return  Result.of(null,false,ResultEnum.PLAYER_DOES_NOT_EXIST.getMessage(),ResultEnum.PLAYER_DOES_NOT_EXIST.getCode());
+        }
+        Map map = new HashMap();
+        map.put("playerId",player.getId());
+        map.put("avatar",player.getAvatar());
+        map.put("name",player.getName());
+        map.put("attributeType",player.getAttributeType());
+        return Result.of(map);
+    }
+
+
+    @GetMapping("getBattlePlayerAttribute")
+    public Result<ComGeneralAttributes> getBattlePlayerAttribute(@RequestParam("attributeType") Integer attributeType ) {
+
+        ComGeneralAttributes playerAttribute = comGeneralAttributesService.findByType(attributeType);
+        if(playerAttribute == null){
+            return Result.of(null,false, ResultEnum.PLAYER_DOES_NOT_ATTRIBUTES.getMessage(),ResultEnum.PLAYER_DOES_NOT_ATTRIBUTES.getCode());
+        }
+        return Result.of(playerAttribute);
+    }
+
+
+
+    /**
+     * 获取玩家信息并且携带属性
+     * @param userId
+     * @return
+     */
+    @GetMapping("getPlayerAndBattleAttribute")
+    public Result<Map> getPlayerAndBattleAttribute(@RequestParam(value = "userId") String userId,
+                                                   @RequestParam(value = "name")String name,
+                                                   @RequestParam(value = "avatar")String avatar) {
+        ComPlayers player = comPlayersService.findByUserId(userId);
+        if(player == null){
+            // todo player 如果角色不存在的话,直接创建一个。
+            player = new ComPlayers();
+            player.setUserId(userId);
+            player.setAttributeType(0);
+            player.setAvatar(avatar);
+            player.setName(name);
+            player = comPlayersService.addComPlayers(player);
+        }
+        ComGeneralAttributes playerAttribute = comGeneralAttributesService.findByType(player.getAttributeType());
+
+        Map map = new HashMap();
+        map.put("playerId",player.getId());
+        map.put("avatar",player.getAvatar());
+        map.put("name",player.getName());
+        map.put("attribute",playerAttribute);
+        return Result.of(map);
+    }
 }

+ 5 - 0
src/main/java/com/td/boss/game/complayers/pojo/ComPlayers.java

@@ -15,6 +15,11 @@ public class ComPlayers implements Serializable {
 
     private String userId;//创建该角色的用户id
 
+    private String avatar; //玩家头像,画像
+
     private String name;//角色名词
 
+    private Integer attributeType;//属性表类型,默认0为player
+
+
 }

+ 4 - 0
src/main/java/com/td/boss/game/complayers/repository/ComPlayersRepository.java

@@ -4,6 +4,10 @@ import com.td.boss.common.repository.*;
 import com.td.boss.game.complayers.pojo.ComPlayers;
 import org.springframework.stereotype.Repository;
 
+import java.util.Optional;
+
 @Repository
 public interface ComPlayersRepository extends CommonRepository<ComPlayers, Integer> {
+
+    Optional<ComPlayers> findByUserId(String userId);
 }

+ 11 - 0
src/main/java/com/td/boss/game/complayers/service/ComPlayersService.java

@@ -5,4 +5,15 @@ import com.td.boss.game.complayers.pojo.ComPlayers;
 import com.td.boss.game.complayers.vo.ComPlayersVo;
 
 public interface ComPlayersService extends CommonService<ComPlayersVo, ComPlayers, Integer> {
+
+    /**
+     * 根据用户id查询玩家角色
+     * @param userId
+     * @return
+     */
+    ComPlayers findByUserId(String userId);
+
+    ComPlayers addComPlayers(ComPlayers comPlayers);
+
+
 }

+ 12 - 0
src/main/java/com/td/boss/game/complayers/service/ComPlayersServiceImpl.java

@@ -18,4 +18,16 @@ public class ComPlayersServiceImpl extends CommonServiceImpl<ComPlayersVo, ComPl
     private EntityManager em;
     @Autowired
     private ComPlayersRepository comPlayersRepository;
+
+    @Override
+    public ComPlayers findByUserId(String userId) {
+        return comPlayersRepository.findByUserId(userId).orElse(null);
+    }
+
+    @Override
+    @Transactional
+    public ComPlayers addComPlayers(ComPlayers comPlayers) {
+        ComPlayers player =  comPlayersRepository.saveAndFlush(comPlayers);
+        return player;
+    }
 }

+ 35 - 0
src/main/java/com/td/boss/game/comrewards/controller/ComRewardsController.java

@@ -0,0 +1,35 @@
+package com.td.boss.game.comrewards.controller;
+
+import com.td.boss.common.controller.*;
+import com.td.boss.common.pojo.Result;
+import com.td.boss.game.combosses.pojo.ComBosses;
+import com.td.boss.game.comrewards.pojo.ComRewards;
+import com.td.boss.game.comrewards.vo.ComRewardsVo;
+import com.td.boss.game.comrewards.service.ComRewardsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/game/comRewards/")
+public class ComRewardsController extends CommonController<ComRewardsVo, ComRewards, Integer> {
+    @Autowired
+    private ComRewardsService comRewardsService;
+
+    @GetMapping("getBossReward")
+    public Result<Map> getBossReward(@RequestParam("userId") String userId ) {
+        ComRewards comRewards = comRewardsService.findByUserIdAndType(userId,0);
+        Map map = new HashMap();
+        if(comRewards == null){
+            return Result.of(null,false,"bosses 奖励不存在!");
+        }
+
+        map.put("mnt",comRewards.getMnt());
+        map.put("mnw",comRewards.getMnw());
+        map.put("bgb",comRewards.getBgb());
+        map.put("mns",comRewards.getMns());
+        return Result.of(map);
+    }
+}

+ 28 - 0
src/main/java/com/td/boss/game/comrewards/pojo/ComRewards.java

@@ -0,0 +1,28 @@
+package com.td.boss.game.comrewards.pojo;
+
+import lombok.Data;
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+@Entity
+@Table(name = "com_rewards")
+@Data
+public class ComRewards implements Serializable {
+    @Id
+    @GeneratedValue(strategy= GenerationType.IDENTITY)
+    private Integer id;//奖励id
+
+    private String userId;//用户id
+
+    private Integer type;//奖励类型,比如 0 boss奖励..和其他
+
+    private Integer mnt;//
+
+    private Integer mnw;//
+
+    private Integer bgb;//
+
+    private Integer mns;//
+
+}

+ 13 - 0
src/main/java/com/td/boss/game/comrewards/repository/ComRewardsRepository.java

@@ -0,0 +1,13 @@
+package com.td.boss.game.comrewards.repository;
+
+import com.td.boss.common.repository.*;
+import com.td.boss.game.comrewards.pojo.ComRewards;
+import org.springframework.stereotype.Repository;
+
+import java.util.Optional;
+
+@Repository
+public interface ComRewardsRepository extends CommonRepository<ComRewards, Integer> {
+
+   Optional<ComRewards> findByUserIdAndType(String userId, Integer type);
+}

+ 16 - 0
src/main/java/com/td/boss/game/comrewards/service/ComRewardsService.java

@@ -0,0 +1,16 @@
+package com.td.boss.game.comrewards.service;
+
+import com.td.boss.common.service.*;
+import com.td.boss.game.comrewards.pojo.ComRewards;
+import com.td.boss.game.comrewards.vo.ComRewardsVo;
+
+public interface ComRewardsService extends CommonService<ComRewardsVo, ComRewards, Integer> {
+
+    /**
+     * 根据userId 和 type寻找奖励
+     * @param userId
+     * @param type
+     * @return
+     */
+    ComRewards findByUserIdAndType(String userId,Integer type);
+}

+ 26 - 0
src/main/java/com/td/boss/game/comrewards/service/ComRewardsServiceImpl.java

@@ -0,0 +1,26 @@
+package com.td.boss.game.comrewards.service;
+
+import com.td.boss.common.service.*;
+import com.td.boss.game.comrewards.pojo.ComRewards;
+import com.td.boss.game.comrewards.vo.ComRewardsVo;
+import com.td.boss.game.comrewards.repository.ComRewardsRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+@Service
+@Transactional
+public class ComRewardsServiceImpl extends CommonServiceImpl<ComRewardsVo, ComRewards, Integer> implements ComRewardsService{
+
+    @PersistenceContext
+    private EntityManager em;
+    @Autowired
+    private ComRewardsRepository comRewardsRepository;
+
+    @Override
+    public ComRewards findByUserIdAndType(String userId, Integer type) {
+        return comRewardsRepository.findByUserIdAndType(userId,type).orElse(null);
+    }
+}

+ 23 - 0
src/main/java/com/td/boss/game/comrewards/vo/ComRewardsVo.java

@@ -0,0 +1,23 @@
+package com.td.boss.game.comrewards.vo;
+
+import com.td.boss. common.pojo.PageCondition;import lombok.Data;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class ComRewardsVo extends PageCondition implements Serializable {
+    private Integer id;//奖励id
+
+    private String userId;//用户id
+
+    private String type;//奖励类型,比如 0 boss奖励..和其他
+
+    private Integer mnt;//
+
+    private Integer mnw;//
+
+    private Integer bgb;//
+
+    private Integer mns;//
+
+}

+ 54 - 8
src/main/java/com/td/boss/game/comusers/controller/ComUsersController.java

@@ -2,13 +2,20 @@ package com.td.boss.game.comusers.controller;
 
 import com.td.boss.common.controller.*;
 import com.td.boss.common.pojo.Result;
+import com.td.boss.config.enums.ResultEnum;
 import com.td.boss.game.comusers.pojo.ComUsers;
 import com.td.boss.game.comusers.vo.ComUsersVo;
 import com.td.boss.game.comusers.service.ComUsersService;
 import com.td.boss.util.JwtTokenUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.HashMap;
+import java.util.Map;
+
+@Slf4j
 @RestController
 @RequestMapping("/game/comUsers/")
 public class ComUsersController extends CommonController<ComUsersVo, ComUsers, String> {
@@ -18,16 +25,55 @@ public class ComUsersController extends CommonController<ComUsersVo, ComUsers, S
     @Autowired
     private JwtTokenUtil jwtTokenUtil;
 
+    @Value("${spring.profiles.active}")
+    private String active;
+
 
-    @GetMapping("test")
-    public Result<String> test() {
-        return Result.of("无需登录的接口:comUsers测试数据!");
+    @GetMapping("loginToken")
+    public Result<Map> userLogin(@RequestParam(value = "loginId",required = false)String loginId) {
+        log.info("login active:"+active);
+        //todo 正常流程下,需要获取验证登录过的信息来处理token,这里暂时走测试信息流程
+        String userId ;
+        if(active.equals("dev")){
+            if(loginId == null || !loginId.equals("1")){
+                return Result.of(null,false,"请输入参数 loginId = '1' ",ResultEnum.NO_PARAMETERS_CARRIED.getCode());
+            }
+            //如果测试环境中,提供测试账号
+            userId = "1";
+        }else{
+            //todo 正式环境未处理
+            userId = "";
+        }
+        final String token = jwtTokenUtil.generateToken(userId);
+        Map map = new HashMap();
+        map.put("active",active);
+        map.put("token",token);
+        return Result.of(map);
     }
 
-    @PostMapping("login")
-    public Result<String> userLogin() {
-        //todo 后续在 comUsersService 取出 id 生成token
-        final String token = jwtTokenUtil.generateToken("slambb");
-        return Result.of(token);
+
+    /**
+     * 获取用户信息
+     * @param userId
+     * @return
+     */
+    @GetMapping("getUserInfo")
+    public Result<Map> getUserInfo(@RequestParam(value = "userId") String userId) {
+        Map map = new HashMap();
+        ComUsersVo comUsersVo = comUsersService.findByUserId(userId);
+
+        if(comUsersVo == null){
+            return Result.of(null,false, ResultEnum.USER_DOES_NOT_EXIST.getMessage(),ResultEnum.USER_DOES_NOT_EXIST.getCode());
+        }
+
+        map.put("energy",comUsersVo.getEnergy());
+        map.put("purchaseEnergy",comUsersVo.getPurchaseEnergy());
+        map.put("mnt",comUsersVo.getMnt());
+        map.put("mnw",comUsersVo.getMnw());
+        map.put("bgb",comUsersVo.getBgb());
+        map.put("mns",comUsersVo.getMns());
+
+        return Result.of(map);
     }
+
 }

+ 2 - 0
src/main/java/com/td/boss/game/comusers/pojo/ComUsers.java

@@ -14,6 +14,8 @@ public class ComUsers implements Serializable {
 
     private Integer energy;//用户体力值
 
+    private Integer purchaseEnergy;//用户精力值(钱对应精力值)
+
     private Integer mnt;//
 
     private Integer mnw;//

+ 4 - 0
src/main/java/com/td/boss/game/comusers/repository/ComUsersRepository.java

@@ -4,6 +4,10 @@ import com.td.boss.common.repository.*;
 import com.td.boss.game.comusers.pojo.ComUsers;
 import org.springframework.stereotype.Repository;
 
+import java.util.Optional;
+
 @Repository
 public interface ComUsersRepository extends CommonRepository<ComUsers, String> {
+
+    Optional<ComUsers> findByUserId(String userId);
 }

+ 7 - 0
src/main/java/com/td/boss/game/comusers/service/ComUsersService.java

@@ -5,4 +5,11 @@ import com.td.boss.game.comusers.pojo.ComUsers;
 import com.td.boss.game.comusers.vo.ComUsersVo;
 
 public interface ComUsersService extends CommonService<ComUsersVo, ComUsers, String> {
+
+    /**
+     * 获取游戏用户信息
+     * @param userId
+     * @return
+     */
+    ComUsersVo findByUserId(String userId);
 }

+ 13 - 0
src/main/java/com/td/boss/game/comusers/service/ComUsersServiceImpl.java

@@ -4,11 +4,13 @@ import com.td.boss.common.service.*;
 import com.td.boss.game.comusers.pojo.ComUsers;
 import com.td.boss.game.comusers.vo.ComUsersVo;
 import com.td.boss.game.comusers.repository.ComUsersRepository;
+import com.td.boss.util.CopyUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
+import java.util.Optional;
 
 @Service
 @Transactional
@@ -18,4 +20,15 @@ public class ComUsersServiceImpl extends CommonServiceImpl<ComUsersVo, ComUsers,
     private EntityManager em;
     @Autowired
     private ComUsersRepository comUsersRepository;
+
+
+    @Override
+    public ComUsersVo findByUserId(String userId) {
+        Optional<ComUsers>  comUsers =  comUsersRepository.findById(userId);
+        if(comUsers == null){
+            return null;
+        }else{
+            return CopyUtil.copy(comUsers.get(), ComUsersVo.class);
+        }
+    }
 }

+ 2 - 0
src/main/java/com/td/boss/game/comusers/vo/ComUsersVo.java

@@ -10,6 +10,8 @@ public class ComUsersVo extends PageCondition implements Serializable {
 
     private Integer energy;//用户体力值
 
+    private Integer purchaseEnergy;//用户精力值(钱对应精力值)
+
     private Integer mnt;//
 
     private Integer mnw;//

+ 0 - 21
src/main/java/com/td/boss/openapi/controller/OpenApiController.java

@@ -1,21 +0,0 @@
-package com.td.boss.openapi.controller;
-
-import com.td.boss.common.pojo.Result;
-import com.td.boss.openapi.service.OpenApiService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping("/openApi/")
-public class OpenApiController {
-
-    @Autowired
-    private OpenApiService openApiService;
-
-    @GetMapping("test")
-    public Result<String> test() {
-        return openApiService.test();
-    }
-}

+ 0 - 11
src/main/java/com/td/boss/openapi/service/OpenApiService.java

@@ -1,11 +0,0 @@
-package com.td.boss.openapi.service;
-
-import com.td.boss.common.pojo.Result;
-
-public interface OpenApiService {
-    /**
-     * open api test测试
-     * @return 测试数据
-     */
-    Result<String> test();
-}

+ 0 - 12
src/main/java/com/td/boss/openapi/service/OpenApiServiceImpl.java

@@ -1,12 +0,0 @@
-package com.td.boss.openapi.service;
-
-import com.td.boss.common.pojo.Result;
-import org.springframework.stereotype.Service;
-
-@Service
-public class OpenApiServiceImpl implements OpenApiService {
-    @Override
-    public Result<String> test() {
-        return Result.of("无需登录的接口:OpenApi测试数据!");
-    }
-}

+ 2 - 2
src/main/java/com/td/boss/util/CodeDOM.java

@@ -530,8 +530,8 @@ public class CodeDOM {
 
     public static void main(String[] args) {
 //        String[] tables = {"sys_user","sys_menu","sys_authority","sys_user_menu","sys_user_authority","sys_shortcut_menu","sys_setting"};
-        String[] tables = {"com_bosses","com_equip_chest","com_equips","com_general_attributes","com_players","com_users"};
-
+//        String[] tables = {"com_bosses","com_bosses_battle","com_equip_attributes", "com_equip_chest","com_equip_type","com_equips","com_general_attributes","com_player_goods","com_players","com_users","com_rewards"};
+        String[] tables = {"com_bosses_describe"};
         for (String table : tables) {
             String msg = new CodeDOM(table).create();
             System.out.println(msg);

+ 31 - 0
src/main/java/com/td/boss/util/JsonUtils.java

@@ -0,0 +1,31 @@
+package com.td.boss.util;
+
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+
+
+/**
+ * JsonUtils工具类
+ * @author:slambb
+ * @date:2021/03/27
+ */
+public class JsonUtils {
+    private static final ObjectMapper JSON = new ObjectMapper();
+
+    static {
+        JSON.setSerializationInclusion(Include.NON_NULL);
+        JSON.configure(SerializationFeature.INDENT_OUTPUT, Boolean.TRUE);
+    }
+
+    public static String toJson(Object obj) {
+        try {
+            return JSON.writeValueAsString(obj);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+}

+ 16 - 0
src/main/java/com/td/boss/util/KeyUtil.java

@@ -0,0 +1,16 @@
+package com.td.boss.util;
+
+import java.util.Random;
+
+/**
+ * @author:slambb
+ * @date:2019/12/6
+ */
+public class KeyUtil {
+
+    public static  synchronized  String genUniqueKey(){
+        Random random = new Random();
+        Integer number = random.nextInt(900000)+100000;
+        return  System.currentTimeMillis()+String.valueOf(number);
+    }
+}

+ 70 - 0
src/main/java/com/td/boss/util/MyExceptionHandler.java

@@ -0,0 +1,70 @@
+package com.td.boss.util;
+
+import com.td.boss.common.pojo.Result;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.BindException;
+import org.springframework.validation.ObjectError;
+import org.springframework.web.bind.MissingServletRequestParameterException;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver;
+
+import java.util.List;
+
+/**
+ * 捕获异常
+ * @author:slambb
+ * @date:2021/03/27
+ */
+@ControllerAdvice
+@Slf4j
+public class MyExceptionHandler {
+
+//    //拦截登录异常
+//    @ExceptionHandler(value = AuthorizeException.class)
+//    @ResponseBody
+//    public ResultVO handlerAuthorizeException(AuthorizeException e){
+//        log.info("捕获信息异常{},{}",e.getCode(),e.getMessage());
+//        return ResultVOUtil.error(e.getCode(),e.getMessage());
+//    }
+//
+//    //用户信息异常
+//    @ExceptionHandler(value = UserException.class)
+//    @ResponseBody
+//    public ResultVO handlerUserException(UserException e){
+//
+//        return ResultVOUtil.error(e.getCode(),e.getMessage());
+//    }
+//
+//    //表单错误
+//    @ExceptionHandler(value = BindException.class)
+//    @ResponseBody
+//    public ResultVO handlerBindException(BindException e){
+////        log.info(e.getMessage());
+////        log.info(e.getAllErrors().toString());
+//        List<ObjectError> errors=e.getAllErrors();
+//        String msg=errors.get(0).getDefaultMessage();//获取自错误信息
+//        return ResultVOUtil.error(200 ,msg);
+//    }
+
+
+    //捕获设置了形参,但是在访问该方法时,没有传参的异常
+    @ExceptionHandler(value = MissingServletRequestParameterException.class)
+    @ResponseBody
+    public Result<String> handlerServletRequestParameterException(MissingServletRequestParameterException e){
+        return Result.of(null,false,e.getMessage());
+
+
+    }
+
+    //捕获设置了形参,但是在访问该方法时,没有传参的异常
+    @ExceptionHandler(value = IllegalArgumentException.class)
+    @ResponseBody
+    public Result<String> handlerServletRequestParameterException(IllegalArgumentException e){
+        return Result.of(null,false,e.getMessage());
+
+
+    }
+
+}

+ 48 - 0
src/main/java/com/td/boss/util/NumUtil.java

@@ -0,0 +1,48 @@
+package com.td.boss.util;
+
+import java.util.Random;
+
+/**
+ * @author:slambb
+ * @date:2021/3/29
+ */
+public class NumUtil {
+
+    /**
+     * 随机指定范围内N个不重复的数
+     * 在初始化的无重复待选数组中随机产生一个数放入结果中,
+     * 将待选数组被随机到的数,用待选数组(len-1)下标对应的数替换
+     * 然后从len-2里随机产生下一个随机数,如此类推
+     * @param max  指定范围最大值
+     * @param min  指定范围最小值
+     * @param n  随机数个数
+     * @return int[] 随机数结果集
+     */
+    public static int[] randomArray(int min,int max,int n){
+        int len = max-min+1;
+
+        if(max < min || n > len){
+            return null;
+        }
+
+        //初始化给定范围的待选数组
+        int[] source = new int[len];
+        for (int i = min; i < min+len; i++){
+            source[i-min] = i;
+        }
+
+        int[] result = new int[n];
+        Random rd = new Random();
+        int index = 0;
+        for (int i = 0; i < result.length; i++) {
+            //待选数组0到(len-2)随机一个下标
+            index = Math.abs(rd.nextInt() % len--);
+            //将随机到的数放入结果集
+            result[i] = source[index];
+            //将待选数组中被随机到的数,用待选数组(len-1)下标对应的数替换
+            source[index] = source[len];
+        }
+        return result;
+    }
+
+}

+ 59 - 0
src/main/java/com/td/boss/util/TokenRequestWrapper.java

@@ -0,0 +1,59 @@
+package com.td.boss.util;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+
+/**
+ * @author:slambb
+ * @date:2019/12/27
+ */
+@Slf4j
+public class TokenRequestWrapper extends HttpServletRequestWrapper {
+
+    @Value("${jwt.token}")
+    private String tokenHeader;
+
+    private String paramsUserId;
+
+    public TokenRequestWrapper(HttpServletRequest request,String userId) {
+        super(request);
+        paramsUserId = userId;
+    }
+
+    /**
+     * 修改此方法主要是因为当RequestMapper中的参数为pojo类型时,
+     * 会通过此方法获取所有的请求参数并进行遍历,对pojo属性赋值
+     *
+     * @return
+     */
+    @Override
+    public Enumeration<String> getParameterNames() {
+        Enumeration<String> enumeration = super.getParameterNames();
+        ArrayList<String> list = Collections.list(enumeration);
+        String token = super.getHeader(tokenHeader);
+        log.info("getParameterNames token=="+token +" = "+ tokenHeader);
+        //当有token字段时动态的添加uid字段
+        if (token !=null) {
+            list.add("userId");
+            return Collections.enumeration(list);
+        } else {
+            return super.getParameterNames();
+        }
+    }
+
+    @Override
+    public String[] getParameterValues(String name) {
+        if ("userId".equals(name)) {
+            return new String[]{paramsUserId};
+        }
+        return super.getParameterValues(name);
+    }
+
+}

+ 0 - 2
src/main/resources/application.properties

@@ -1,2 +0,0 @@
-#把日志级别设置成debug,方便调试
-#logging.level.root=debug

+ 6 - 4
src/main/resources/application.yml

@@ -2,7 +2,7 @@
 
 #内置Tomcat容器配置
 server:
-  port: 8888
+  port: 25001
   servlet:
     #应用路径,配置应用路径,可方便进行反向代理
     context-path:
@@ -21,6 +21,8 @@ spring:
   #mvc接收参数时对日期进行格式化
   mvc:
     date-format: yyyy-MM-dd HH:mm:ss
+    servlet:
+      load-on-startup: 100
 
   #jackson对响应回去的日期参数进行格式化
   jackson:
@@ -33,9 +35,9 @@ spring:
 
 # token 参数
 jwt:
-  secret: secret
-  expiration: 7200000
-  token: Authorization
+  secret: secret        # 密钥
+  expiration: 7200000   # 过期时间
+  token: Authorization  # 请求头
 
 #是否需要输入验证码
 captcha: