Эх сурвалжийг харах

1.23080902 上线版本
2.完善意见反馈 c端接口
3.修改token验证,
4.添加token最后一次登录验证

slambb 2 жил өмнө
parent
commit
8e2b215fbc
22 өөрчлөгдсөн 634 нэмэгдсэн , 311 устгасан
  1. 3 0
      .idea/misc.xml
  2. 5 10
      src/main/java/com/YuyeTech/HeartRate/aspect/AuthorizeFilter.java
  3. 2 0
      src/main/java/com/YuyeTech/HeartRate/dataobject/VersionCode.java
  4. 7 2
      src/main/java/com/YuyeTech/HeartRate/enums/PictureType.java
  5. 12 22
      src/main/java/com/YuyeTech/HeartRate/enums/ResultEnum.java
  6. 2 0
      src/main/java/com/YuyeTech/HeartRate/filter/gameFilter.java
  7. 1 1
      src/main/java/com/YuyeTech/HeartRate/form/FeedbackForm.java
  8. 15 0
      src/main/java/com/YuyeTech/HeartRate/game/cFeedBack/controller/CFeedBackController.java
  9. 40 0
      src/main/java/com/YuyeTech/HeartRate/game/cFeedBack/pojo/CFeedBack.java
  10. 9 0
      src/main/java/com/YuyeTech/HeartRate/game/cFeedBack/repository/CFeedBackRepository.java
  11. 8 0
      src/main/java/com/YuyeTech/HeartRate/game/cFeedBack/service/CFeedBackService.java
  12. 21 0
      src/main/java/com/YuyeTech/HeartRate/game/cFeedBack/service/CFeedBackServiceImpl.java
  13. 35 0
      src/main/java/com/YuyeTech/HeartRate/game/cFeedBack/vo/CFeedBackSimpleVo.java
  14. 35 0
      src/main/java/com/YuyeTech/HeartRate/game/cFeedBack/vo/CFeedBackVo.java
  15. 18 17
      src/main/java/com/YuyeTech/HeartRate/game/controller/BackstageManagerController.java
  16. 294 236
      src/main/java/com/YuyeTech/HeartRate/game/controller/LoginController.java
  17. 0 1
      src/main/java/com/YuyeTech/HeartRate/game/userinfo/controller/BackstageUserController.java
  18. 105 12
      src/main/java/com/YuyeTech/HeartRate/game/userinfo/controller/ManagerController.java
  19. 1 0
      src/main/java/com/YuyeTech/HeartRate/game/userinfo/projo/MainInfo.java
  20. 13 3
      src/main/java/com/YuyeTech/HeartRate/game/userinfo/service/MainInfoServiceImpl.java
  21. 1 0
      src/main/java/com/YuyeTech/HeartRate/game/userinfo/vo/MainInfoVo.java
  22. 7 7
      src/main/java/com/YuyeTech/HeartRate/utils/CodeDOM.java

+ 3 - 0
.idea/misc.xml

@@ -1,5 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
+  <component name="JavaScriptSettings">
+    <option name="languageLevel" value="ES6" />
+  </component>
   <component name="MavenProjectsManager">
     <option name="originalFiles">
       <list>

+ 5 - 10
src/main/java/com/YuyeTech/HeartRate/aspect/AuthorizeFilter.java

@@ -52,7 +52,7 @@ public class AuthorizeFilter implements Filter {
         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("********进入过滤器********");
+        log.info("********进入AuthorizeFilter过滤器********");
         HttpServletRequest req = (HttpServletRequest) servletRequest;
         String method = req.getMethod();
 //        log.info("method:{}",method);
@@ -71,19 +71,16 @@ public class AuthorizeFilter implements Filter {
         Matcher matcher = Pattern.compile(reg).matcher(path);
         //登录,获取验证码,不用登录的接口
         if (path.indexOf("login") > -1 ||
-                path.indexOf("getCode") > -1 ||
+                path.indexOf("getCode") > -1 || //获取code
+                path.indexOf("SMS_verify_code") >-1 || //验证code是否存在
+                path.indexOf("SMS_modify_password") > -1 || //修改密码时候根据code来修改,可以放行
                 path.indexOf("dontLogin") > -1 ||
                 path.indexOf("client_game") > -1 ||
                 path.indexOf("backstage") > -1 ||
-//                path.indexOf("css") > -1 ||
                 matcher.find()||
                 path.indexOf("bundles") > -1||
                 path.indexOf("plugins") > -1||
-                path.indexOf("angular.min.js") > -1 ||
-                /**
-                 * 3D视界接口放行
-                 */
-                path.indexOf("td") > -1
+                path.indexOf("angular.min.js") > -1
         ) {
             //登录情况直接放行
 //            log.info("********登录情况直接放行********");
@@ -91,8 +88,6 @@ public class AuthorizeFilter implements Filter {
             return;
         }
         if (null == token || token.isEmpty()) {
-//            log.info("Url =={} == {}",req.getRequestURI(),req.getServletPath());
-//          throw new AuthorizeException(ResultEnum.TOKEN_DOES_NOT_EXIST.getCode(), ResultEnum.TOKEN_DOES_NOT_EXIST.getMessage());
             ResultVO resultVO = ResultVOUtil.error(ResultEnum.TOKEN_IS_ILLEGAL.getCode(), ResultEnum.TOKEN_IS_ILLEGAL.getMessage());
             response.setCharacterEncoding("utf-8");
             response.getWriter().print(JsonUtils.toJson(resultVO));

+ 2 - 0
src/main/java/com/YuyeTech/HeartRate/dataobject/VersionCode.java

@@ -25,6 +25,8 @@ public class VersionCode {
     private Integer isShowGame;
     @Column(name="is_show_video")
     private Integer isShowVideo;
+    @Column(name="is_show_tool")
+    private Integer isShowTool;
     private String describe;
     private Date deleteTime;
     private Date createTime;

+ 7 - 2
src/main/java/com/YuyeTech/HeartRate/enums/PictureType.java

@@ -1,7 +1,7 @@
 package com.YuyeTech.HeartRate.enums;
 
 /**
- * 0:scroll,1:icon,2:cover,3:公共avatar,4:用户avatar
+ * 0:scroll,1:icon,2:cover,3:公共avatar,4:用户avatar,5:feedBack
  */
 public enum PictureType {
     /**
@@ -23,6 +23,11 @@ public enum PictureType {
     /**
      * 用户头像
      */
-    USER_AVATAR
+    USER_AVATAR,
+
+    /**
+     * 意见反馈
+     */
+    FEED_BACK,
 
 }

+ 12 - 22
src/main/java/com/YuyeTech/HeartRate/enums/ResultEnum.java

@@ -10,12 +10,16 @@ import lombok.Getter;
 @Getter
 public enum ResultEnum {
     SUCCESS(0,"成功"),
-    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"),
-    TOKEN_FILTER_ERROR(306,"登录异常!"),
+    TOKEN_FILTER_ERROR(306,"登录信息异常!"),
+
+    //redis部分
+    REDIS_IS_LOCK(307,"操作过于频繁,稍后再试!"),
+    REDIS_IS_LOCK_ERROR(308,"操作失败,稍后再试!"),
+    //特定接口访问部分限制
+    LOGIN_IP_IS_ERROR(309,"IP异常?!"),
 
     APPLE_LOGIN_VALIDATION_FAIL(311,"授权验证失败"),
     APPLE_LOGIN_TOKEN_FAIL(312,"授权解码失败"),
@@ -44,7 +48,6 @@ public enum ResultEnum {
     BOX_EMAIL_REVOKE_ERROR(324,"WEIXIN:注销用户失败!"),
     //wallets
     WALLETS_GET_ERROR(401,"获取WALLETS错误"),
-    WALLETS_MODIFY_ERROR(402,"修改WALLETS数据错误"),
     WALLETS_GOLD_INSUFFICIENT(404,"WALLETS钱包金币不足"),
     WALLETS_DIAMOND_INSUFFICIENT(405,"WALLETS钱包钻石不足"),
 
@@ -59,25 +62,12 @@ public enum ResultEnum {
     //signIn
     SIGN_IN_REPEAT(901,"重复签到"),
 
-    //******
-    NO_PARAMETERS_CARRIED(305,"输入对应参数"),
-
-    META_LOGIN_ERROR(306,"登录失败!"),
-    META_LOGIN_LIMIT(307,"禁止用户登录!"),
-    //setting部分
-    SETTING_IS_NULL(306,"配置信息不存在"),
-    //redis部分
-    REDIS_IS_LOCK(307,"操作过于频繁,稍后再试!"),
-    REDIS_IS_LOCK_ERROR(308,"操作失败,稍后再试!"),
-
-    //特定接口访问部分限制
-    LOGIN_IP_IS_ERROR(309,"IP异常?!"),
     //用户数据
-    USER_DOES_NOT_EXIST(400,"不能存在用户信息!"),
-    USER_VERIFICATION_ERROR(402,"登录验证失败异常!"),
-    USER_NOT_ADDRESS(403,"用户地址不存在!"),
-    USER_LIMIT_LOGIN(404,"用户限制登录!"),
-    USER_LOGIN_LOCK(405,"用户保存繁忙,请重试操作!"),
+    //USER_DOES_NOT_EXIST(400,"不能存在用户信息!"),
+    //USER_VERIFICATION_ERROR(402,"登录验证失败异常!"),
+    //USER_NOT_ADDRESS(403,"用户地址不存在!"),
+    //USER_LIMIT_LOGIN(404,"用户限制登录!"),
+    //USER_LOGIN_LOCK(405,"用户保存繁忙,请重试操作!"),
     USER_DATA_DOES_NOT_EXIST(400,"不存在用户关联信息!"),
     CODE_ERROR(406,"验证码异常!"),
     CODE_DELETE_ERROR(407,"验证码操作失败!")

+ 2 - 0
src/main/java/com/YuyeTech/HeartRate/filter/gameFilter.java

@@ -96,6 +96,8 @@ public class gameFilter implements Filter {
         // 存在game字段,需要检验token
         if (path.indexOf("login") > -1 ||
                 path.indexOf("getCode") > -1 ||
+                path.indexOf("SMS_verify_code") >-1 || //验证code是否存在
+                path.indexOf("SMS_modify_password") > -1 || //修改密码时候根据code来修改,可以放行
                 path.indexOf("dontLogin") > -1 ||
                 path.indexOf("client_game") > -1 ||
                 path.indexOf("findAll") > -1 ||

+ 1 - 1
src/main/java/com/YuyeTech/HeartRate/form/FeedbackForm.java

@@ -13,7 +13,7 @@ import javax.validation.constraints.NotBlank;
 @Data
 public class FeedbackForm {
 
-    private String userId;
+    //private String userId;
     @NotBlank(message = "用户名不能为空!")
     private String userName;
     @NotBlank(message = "反馈的问题不能为空!")

+ 15 - 0
src/main/java/com/YuyeTech/HeartRate/game/cFeedBack/controller/CFeedBackController.java

@@ -0,0 +1,15 @@
+package com.YuyeTech.HeartRate.game.cFeedBack.controller;
+
+import com.YuyeTech.HeartRate.common.controller.*;
+import com.YuyeTech.HeartRate.game.cFeedBack.pojo.CFeedBack;
+import com.YuyeTech.HeartRate.game.cFeedBack.vo.CFeedBackVo;
+import com.YuyeTech.HeartRate.game.cFeedBack.service.CFeedBackService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/cFeedBack/")
+public class CFeedBackController extends CommonController<CFeedBackVo, CFeedBack, Integer> {
+    @Autowired
+    private CFeedBackService cFeedBackService;
+}

+ 40 - 0
src/main/java/com/YuyeTech/HeartRate/game/cFeedBack/pojo/CFeedBack.java

@@ -0,0 +1,40 @@
+package com.YuyeTech.HeartRate.game.cFeedBack.pojo;
+
+import lombok.Data;
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+@Entity
+@Table(name = "c_feed_back")
+@Data
+public class CFeedBack implements Serializable {
+    @Id
+    @GeneratedValue(strategy= GenerationType.IDENTITY)
+    private Integer id;//
+
+    private String userId;//用户id
+
+    private String pictureId;//记录一组图片id
+
+    private Integer pictureType;//0:scroll,1:icon,2:cover,3:公共avatar,4:avatar,5:feedBack
+
+    private Integer isResolved;//0:未解决,1:已解决
+
+    private Integer isShow;//是否在列表显示
+
+    private String problemDescription;//问题描述
+
+    private String name;//称呼
+
+    private String telephoneNumber;//当前联系方式
+
+    private String versionName;//版本名称
+
+    private String versionCode;//版本号
+
+    private Date createTime;//创建时间
+
+    private Date updateTime;//修改时间
+
+}

+ 9 - 0
src/main/java/com/YuyeTech/HeartRate/game/cFeedBack/repository/CFeedBackRepository.java

@@ -0,0 +1,9 @@
+package com.YuyeTech.HeartRate.game.cFeedBack.repository;
+
+import com.YuyeTech.HeartRate.common.repository.*;
+import com.YuyeTech.HeartRate.game.cFeedBack.pojo.CFeedBack;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface CFeedBackRepository extends CommonRepository<CFeedBack, Integer> {
+}

+ 8 - 0
src/main/java/com/YuyeTech/HeartRate/game/cFeedBack/service/CFeedBackService.java

@@ -0,0 +1,8 @@
+package com.YuyeTech.HeartRate.game.cFeedBack.service;
+
+import com.YuyeTech.HeartRate.common.service.*;
+import com.YuyeTech.HeartRate.game.cFeedBack.pojo.CFeedBack;
+import com.YuyeTech.HeartRate.game.cFeedBack.vo.CFeedBackVo;
+
+public interface CFeedBackService extends CommonService<CFeedBackVo, CFeedBack, Integer> {
+}

+ 21 - 0
src/main/java/com/YuyeTech/HeartRate/game/cFeedBack/service/CFeedBackServiceImpl.java

@@ -0,0 +1,21 @@
+package com.YuyeTech.HeartRate.game.cFeedBack.service;
+
+import com.YuyeTech.HeartRate.common.service.*;
+import com.YuyeTech.HeartRate.game.cFeedBack.pojo.CFeedBack;
+import com.YuyeTech.HeartRate.game.cFeedBack.vo.CFeedBackVo;
+import com.YuyeTech.HeartRate.game.cFeedBack.repository.CFeedBackRepository;
+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 CFeedBackServiceImpl extends CommonServiceImpl<CFeedBackVo, CFeedBack, Integer> implements CFeedBackService{
+
+    @PersistenceContext
+    private EntityManager em;
+    @Autowired
+    private CFeedBackRepository cFeedBackRepository;
+}

+ 35 - 0
src/main/java/com/YuyeTech/HeartRate/game/cFeedBack/vo/CFeedBackSimpleVo.java

@@ -0,0 +1,35 @@
+package com.YuyeTech.HeartRate.game.cFeedBack.vo;
+
+import lombok.Data;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class CFeedBackSimpleVo implements Serializable {
+    private Integer id;//
+
+    private String userId;//用户id
+
+    private String pictureId;//记录一组图片id
+
+    private Integer pictureType;//0:scroll,1:icon,2:cover,3:公共avatar,4:avatar,5:feedBack
+
+    private Integer isResolved;//0:未解决,1:已解决
+
+    private Integer isShow;//是否在列表显示
+
+    private String problemDescription;//问题描述
+
+    private String name;//称呼
+
+    private String telephoneNumber;//当前联系方式
+
+    private String versionName;//版本名称
+
+    private String versionCode;//版本号
+
+    private Date createTime;//创建时间
+
+    private Date updateTime;//修改时间
+
+}

+ 35 - 0
src/main/java/com/YuyeTech/HeartRate/game/cFeedBack/vo/CFeedBackVo.java

@@ -0,0 +1,35 @@
+package com.YuyeTech.HeartRate.game.cFeedBack.vo;
+
+import com.YuyeTech.HeartRate. common.pojo.PageCondition;import lombok.Data;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class CFeedBackVo extends PageCondition implements Serializable {
+    private Integer id;//
+
+    private String userId;//用户id
+
+    private String pictureId;//记录一组图片id
+
+    private Integer pictureType;//0:scroll,1:icon,2:cover,3:公共avatar,4:avatar,5:feedBack
+
+    private Integer isResolved;//0:未解决,1:已解决
+
+    private Integer isShow;//是否在列表显示
+
+    private String problemDescription;//问题描述
+
+    private String name;//称呼
+
+    private String telephoneNumber;//当前联系方式
+
+    private String versionName;//版本名称
+
+    private String versionCode;//版本号
+
+    private Date createTime;//创建时间
+
+    private Date updateTime;//修改时间
+
+}

+ 18 - 17
src/main/java/com/YuyeTech/HeartRate/game/controller/BackstageManagerController.java

@@ -146,23 +146,24 @@ public class BackstageManagerController {
     }
 
 
-    @GetMapping("/backstage_delete_user")
-    public ModelAndView backstageDeleteUser(@RequestParam("userId") String userId, Map<String, Object> map) {
-
-        //1.删除头像W
-        UserInfo userInfo = userInfoService.findUserInfoById(userId, false);
-        if (!userInfo.getAvatarUrl().equals("publicAvatar/defaultAvatar.png") && userInfo.getAvatarUrl() != null && userInfo.getAvatarUrl().length() != 0) {
-            if (aliyunOSSUtil.deleteBlog(userInfo.getAvatarUrl())) {
-                log.info("删除头像成功");
-            }
-        }
-        //2.删除数据库数据
-        mainInfoService.deleteMainInfoById(userId,"backstage_delete_user");
-
-        map.put("msg", "删除用户信息成功");
-        map.put("url", "/backstage_user/list");
-        return new ModelAndView("common/success", map);
-    }
+    //@GetMapping("/backstage_delete_user")
+    //@Deprecated
+    //public ModelAndView backstageDeleteUser(@RequestParam("userId") String userId, Map<String, Object> map) {
+    //
+    //    //1.删除头像W
+    //    UserInfo userInfo = userInfoService.findUserInfoById(userId, false);
+    //    if (!userInfo.getAvatarUrl().equals("publicAvatar/defaultAvatar.png") && userInfo.getAvatarUrl() != null && userInfo.getAvatarUrl().length() != 0) {
+    //        if (aliyunOSSUtil.deleteBlog(userInfo.getAvatarUrl())) {
+    //            log.info("删除头像成功");
+    //        }
+    //    }
+    //    //2.删除数据库数据
+    //    mainInfoService.deleteMainInfoById(userId,"backstage_delete_user");
+    //
+    //    map.put("msg", "删除用户信息成功");
+    //    map.put("url", "/backstage_user/list");
+    //    return new ModelAndView("common/success", map);
+    //}
 
 
     /**

+ 294 - 236
src/main/java/com/YuyeTech/HeartRate/game/controller/LoginController.java

@@ -124,9 +124,7 @@ public class LoginController {
 //    }
 
     /**
-     * android 端登录,微信登录
-     * 只要带login,都不用权鉴
-     *
+     * android 微信登录
      * @param openid
      * @param unionid
      * @param response
@@ -160,6 +158,7 @@ public class LoginController {
             if (wxInfo == null) {
                 //先main_info主表添加信息
                 mainInfo = createMainInfo();
+                mainInfo.setToken(token);
                 mainInfoService.addMainInfo(mainInfo);
                 //微信表添加信息 wx_info
                 wxInfo = new WxInfo();
@@ -171,6 +170,15 @@ public class LoginController {
                 wxInfoService.addWxInfo(wxInfo);
             } else {
                 mainInfo = mainInfoService.findMainInfoById(wxInfo.getUserId());
+                //删除用户对应的token
+                Boolean bSuccess = redisSettingMap.deleteValue(RedisType.TOKEN,mainInfo.getToken());
+                if (!bSuccess) {
+                    //不存在的话不用处理
+                    log.info("client_wx_login,redis 不存在此用户 token。");
+                }
+                //更新token
+                mainInfo.setToken(token);
+                mainInfoService.addMainInfo(mainInfo);
             }
 
             //拿到用户userid
@@ -235,74 +243,75 @@ public class LoginController {
      * @param request
      * @return
      */
-    @GetMapping("/client_login")
-    public ResultVO client_login(@RequestParam("appid") String appid,
-                                 @RequestParam("code") String code,
-                                 @RequestParam("platfrom") String platFrom,
-                                 HttpServletResponse response,
-                                 HttpServletRequest request) {
-        //检查redis 的token 是否存在,存在则删除
-        String headToken = request.getHeader("token");
-        if (StringUtils.isNotBlank(headToken)) {
-//            Boolean bSuccess = redisTemplate.delete(String.format(RedisConstant.TOKEN_PREFIX, headToken));
-            Boolean bSuccess = redisSettingMap.deleteValue(RedisType.TOKEN,headToken);
-            if (!bSuccess) {
-                //删除不成功,redis不存在,是非法token
-//                throw new WxInfoException(ResultEnum.TOKEN_IS_ILLEGAL.getCode(), ResultEnum.TOKEN_IS_ILLEGAL.getMessage());
-                log.info("redis 没有对应的token");
-            }
-        }
-
-        //1.配置
-        //2.调用方法
-        final WxMaService wxService = WxMaConfiguration.getMaService(appid);
-
-        try {
-            //token
-            String token = UUID.randomUUID().toString();
-            Integer expire = RedisConstant.EXPIRE;//过期时间
-
-            Map<String, String> tokenMap = new HashMap<>();
-            if (StringUtils.equals(platFrom, "weixin")) {
-                WxMaJscode2SessionResult session = wxService.getUserService().getSessionInfo(code);
-                //1.openid 和数据库的对比,没有用户的话,添加新增用户
-                WxInfo wxInfo = wxInfoService.findWxInfoByOpenid(session.getOpenid());
-
-                if (wxInfo == null) {
-                    //先main_info主表添加信息
-                    MainInfo mainInfo = createMainInfo();
-                    mainInfoService.addMainInfo(mainInfo);
-                    //微信表添加信息 wx_info
-                    wxInfo = new WxInfo();
-                    wxInfo.setUserId(mainInfo.getUserId());
-                    wxInfo.setOpenid(session.getOpenid());
-                    wxInfo.setCreateTime(DateUtil.date());
-                    wxInfo.setUpdateTime(DateUtil.date());
-                    wxInfoService.addWxInfo(wxInfo);
-                }
-
-                //拿到微信对应的用户userid
-                tokenMap.put("userId", wxInfo.getUserId());
-                tokenMap.put("openid", session.getOpenid());
-                tokenMap.put("sessionKey", session.getSessionKey());
-                tokenMap.put("unionid", session.getUnionid());
-            }
-            //2.设置token 到redis
-            // redisTemplate.opsForValue().set(String.format(RedisConstant.TOKEN_PREFIX,token),session.getOpenid()+session.getSessionKey(),expire, TimeUnit.SECONDS);
-//            redisTemplate.opsForHash().putAll(redisSettingMap.getTokenKey(token), tokenMap);
-//            redisTemplate.expire(redisSettingMap.getTokenKey(token), expire, TimeUnit.SECONDS);
-            redisSettingMap.putToken(token,tokenMap);
-            //3.设置token到cookie
-            CookieUtil.set(response, CookieConstant.TOKEN, token, expire);
-            //TODO 可以增加自己的逻辑,关联业务相关数据
-            LoginVO loginVO = new LoginVO();
-            loginVO.setToken(token);
-            return ResultVOUtil.success(loginVO);
-        } catch (WxErrorException e) {
-            log.error(e.getMessage(), e);
-            return ResultVOUtil.error(500, e.toString());
-        }
-    }
+//    @GetMapping("/client_login")
+//    @Deprecated
+//    public ResultVO client_login(@RequestParam("appid") String appid,
+//                                 @RequestParam("code") String code,
+//                                 @RequestParam("platfrom") String platFrom,
+//                                 HttpServletResponse response,
+//                                 HttpServletRequest request) {
+//        //检查redis 的token 是否存在,存在则删除
+//        String headToken = request.getHeader("token");
+//        if (StringUtils.isNotBlank(headToken)) {
+////            Boolean bSuccess = redisTemplate.delete(String.format(RedisConstant.TOKEN_PREFIX, headToken));
+//            Boolean bSuccess = redisSettingMap.deleteValue(RedisType.TOKEN,headToken);
+//            if (!bSuccess) {
+//                //删除不成功,redis不存在,是非法token
+////                throw new WxInfoException(ResultEnum.TOKEN_IS_ILLEGAL.getCode(), ResultEnum.TOKEN_IS_ILLEGAL.getMessage());
+//                log.info("redis 没有对应的token");
+//            }
+//        }
+//
+//        //1.配置
+//        //2.调用方法
+//        final WxMaService wxService = WxMaConfiguration.getMaService(appid);
+//
+//        try {
+//            //token
+//            String token = UUID.randomUUID().toString();
+//            Integer expire = RedisConstant.EXPIRE;//过期时间
+//
+//            Map<String, String> tokenMap = new HashMap<>();
+//            if (StringUtils.equals(platFrom, "weixin")) {
+//                WxMaJscode2SessionResult session = wxService.getUserService().getSessionInfo(code);
+//                //1.openid 和数据库的对比,没有用户的话,添加新增用户
+//                WxInfo wxInfo = wxInfoService.findWxInfoByOpenid(session.getOpenid());
+//
+//                if (wxInfo == null) {
+//                    //先main_info主表添加信息
+//                    MainInfo mainInfo = createMainInfo();
+//                    mainInfoService.addMainInfo(mainInfo);
+//                    //微信表添加信息 wx_info
+//                    wxInfo = new WxInfo();
+//                    wxInfo.setUserId(mainInfo.getUserId());
+//                    wxInfo.setOpenid(session.getOpenid());
+//                    wxInfo.setCreateTime(DateUtil.date());
+//                    wxInfo.setUpdateTime(DateUtil.date());
+//                    wxInfoService.addWxInfo(wxInfo);
+//                }
+//
+//                //拿到微信对应的用户userid
+//                tokenMap.put("userId", wxInfo.getUserId());
+//                tokenMap.put("openid", session.getOpenid());
+//                tokenMap.put("sessionKey", session.getSessionKey());
+//                tokenMap.put("unionid", session.getUnionid());
+//            }
+//            //2.设置token 到redis
+//            // redisTemplate.opsForValue().set(String.format(RedisConstant.TOKEN_PREFIX,token),session.getOpenid()+session.getSessionKey(),expire, TimeUnit.SECONDS);
+////            redisTemplate.opsForHash().putAll(redisSettingMap.getTokenKey(token), tokenMap);
+////            redisTemplate.expire(redisSettingMap.getTokenKey(token), expire, TimeUnit.SECONDS);
+//            redisSettingMap.putToken(token,tokenMap);
+//            //3.设置token到cookie
+//            CookieUtil.set(response, CookieConstant.TOKEN, token, expire);
+//            //TODO 可以增加自己的逻辑,关联业务相关数据
+//            LoginVO loginVO = new LoginVO();
+//            loginVO.setToken(token);
+//            return ResultVOUtil.success(loginVO);
+//        } catch (WxErrorException e) {
+//            log.error(e.getMessage(), e);
+//            return ResultVOUtil.error(500, e.toString());
+//        }
+//    }
 
     /**
      * <pre>
@@ -364,22 +373,22 @@ public class LoginController {
      * @param phoneNumber
      * @return
      */
-    @GetMapping("/getCode")
-    @Deprecated
-    public ResultVO getCode(@RequestParam(value = "phoneNumber") String phoneNumber) {
-        Integer expire = RedisConstant.CODE_EXPIRE;//过期时间
-        String code = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
-        if (phoneNumber != null) {
-            aliyunSMSUtil.sendSms(phoneNumber, code);
-            //成功后保存code到redis
-//            redisTemplate.opsForValue().set(String.format(RedisConstant.SMS_PREFIX, phoneNumber), code, expire, TimeUnit.SECONDS);
-            redisSettingMap.setSMS(phoneNumber,code);
-            log.info("getCode:" + code);
-            return ResultVOUtil.success();
-        } else {
-            return ResultVOUtil.error(200, "获取code失败");
-        }
-    }
+//    @GetMapping("/getCode")
+//    @Deprecated
+//    public ResultVO getCode(@RequestParam(value = "phoneNumber") String phoneNumber) {
+//        Integer expire = RedisConstant.CODE_EXPIRE;//过期时间
+//        String code = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
+//        if (phoneNumber != null) {
+//            aliyunSMSUtil.sendSms(phoneNumber, code);
+//            //成功后保存code到redis
+////            redisTemplate.opsForValue().set(String.format(RedisConstant.SMS_PREFIX, phoneNumber), code, expire, TimeUnit.SECONDS);
+//            redisSettingMap.setSMS(phoneNumber,code);
+//            log.info("getCode:" + code);
+//            return ResultVOUtil.success();
+//        } else {
+//            return ResultVOUtil.error(200, "获取code失败");
+//        }
+//    }
 
     /**
      * 2021-09-18
@@ -392,7 +401,7 @@ public class LoginController {
     @GetMapping("/getCodeAccordingType")
     public ResultVO getCodeAccordingType(@RequestParam(value = "account") String account,
                                          @RequestParam(value = "type") Integer type) {
-        Integer expire = RedisConstant.CODE_EXPIRE;//过期时间
+        //Integer expire = RedisConstant.CODE_EXPIRE;//过期时间
         String code = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
         if (account != null) {
 
@@ -456,47 +465,47 @@ public class LoginController {
      * @param code
      * @return
      */
-    @GetMapping("/SMS_bind_phone")
-    @Deprecated
-    public ResultVO userBindPhoneNumber(@RequestParam("phoneNumber") String phoneNumber,
-                                        @RequestParam("code") String code,
-                                        @RequestParam("userId") String userId) {
-        String codeValue = redisSettingMap.getValue(RedisType.SMS,phoneNumber);
-        if (!StringUtils.equals(codeValue, code)) {
-            return ResultVOUtil.error(UserEnum.USER_CODE_ERROR.getCode(), UserEnum.USER_CODE_ERROR.getMessage());
-        }
-        log.info("codeValue:" + codeValue);
-
-        try {
-
-            MainInfo phoneMainInfo = mainInfoService.findMainInfoByPhoneNumber(phoneNumber);
-            if (phoneMainInfo != null) {
-                //如果存在,此手机号提示已注册
-                return ResultVOUtil.error(UserEnum.USER_HAS_REGISTER_PHONE.getCode(), UserEnum.USER_HAS_REGISTER_PHONE.getMessage());
-            }
-
-            MainInfo mainInfo = mainInfoService.findMainInfoById(userId);
-            //TODO 验证码登录流程
-            //如果不存在用户
-            if (mainInfo == null) {
-                return ResultVOUtil.error(UserEnum.USER_REGISTER_ERROR.getCode(), UserEnum.USER_REGISTER_ERROR.getMessage());
-            }
-
-            mainInfo.setTelephoneNumber(phoneNumber);
-            mainInfoService.addMainInfo(mainInfo);
-            //TODO 写入成功后,删除redis里面保存的code
-            Boolean bSuccess = redisSettingMap.deleteValue(RedisType.SMS,phoneNumber);
-            if (!bSuccess) {
-                //删除不成功,redis不存在
-                log.info("redis 没有对应的token");
-            }
-            return ResultVOUtil.success();
-
-        } catch (UserException e) {
-            return ResultVOUtil.error(UserEnum.USER_REGISTER_ERROR.getCode(), UserEnum.USER_REGISTER_ERROR.getMessage());
-        }
-
-    }
+    //@GetMapping("/SMS_bind_phone")
+    //@Deprecated
+    //public ResultVO userBindPhoneNumber(@RequestParam("phoneNumber") String phoneNumber,
+    //                                    @RequestParam("code") String code,
+    //                                    @RequestParam("userId") String userId) {
+    //    String codeValue = redisSettingMap.getValue(RedisType.SMS,phoneNumber);
+    //    if (!StringUtils.equals(codeValue, code)) {
+    //        return ResultVOUtil.error(UserEnum.USER_CODE_ERROR.getCode(), UserEnum.USER_CODE_ERROR.getMessage());
+    //    }
+    //    log.info("codeValue:" + codeValue);
+    //
+    //    try {
+    //
+    //        MainInfo phoneMainInfo = mainInfoService.findMainInfoByPhoneNumber(phoneNumber);
+    //        if (phoneMainInfo != null) {
+    //            //如果存在,此手机号提示已注册
+    //            return ResultVOUtil.error(UserEnum.USER_HAS_REGISTER_PHONE.getCode(), UserEnum.USER_HAS_REGISTER_PHONE.getMessage());
+    //        }
+    //
+    //        MainInfo mainInfo = mainInfoService.findMainInfoById(userId);
+    //        //TODO 验证码登录流程
+    //        //如果不存在用户
+    //        if (mainInfo == null) {
+    //            return ResultVOUtil.error(UserEnum.USER_REGISTER_ERROR.getCode(), UserEnum.USER_REGISTER_ERROR.getMessage());
+    //        }
+    //
+    //        mainInfo.setTelephoneNumber(phoneNumber);
+    //        mainInfoService.addMainInfo(mainInfo);
+    //        //TODO 写入成功后,删除redis里面保存的code
+    //        Boolean bSuccess = redisSettingMap.deleteValue(RedisType.SMS,phoneNumber);
+    //        if (!bSuccess) {
+    //            //删除不成功,redis不存在
+    //            log.info("redis 没有对应的token");
+    //        }
+    //        return ResultVOUtil.success();
+    //
+    //    } catch (UserException e) {
+    //        return ResultVOUtil.error(UserEnum.USER_REGISTER_ERROR.getCode(), UserEnum.USER_REGISTER_ERROR.getMessage());
+    //    }
+    //
+    //}
 
     /**
      * 通过验证码,绑定用户手机号码或者邮箱。
@@ -629,59 +638,59 @@ public class LoginController {
      * @param code
      * @return
      */
-    @GetMapping("/SMS_login")
-    @Deprecated
-    public ResultVO userRegistrationAndSMSLogin(String phoneNumber, String code) {
-        String codeValue = redisSettingMap.getValue(RedisType.SMS,phoneNumber);
-        if (!StringUtils.equals(codeValue, code)) {
-            log.warn("【code校验】Redis 中查找不到验证码 {},==,{}", codeValue, code);
-            return ResultVOUtil.error(UserEnum.USER_CODE_ERROR.getCode(), UserEnum.USER_CODE_ERROR.getMessage());
-        }
-        log.info("codeValue:" + codeValue);
-        //token
-        String token = UUID.randomUUID().toString();
-        Integer expire = RedisConstant.EXPIRE;//过期时间
-        Map<String, String> tokenMap = new HashMap<>();
-
-        try {
-            MainInfo mainInfo = mainInfoService.findMainInfoByPhoneNumber(phoneNumber);
-            //TODO 验证码登录流程
-            //如果不存在用户
-            if (mainInfo == null) {
-                //先main_info主表添加信息
-                mainInfo = createMainInfo();
-                mainInfo.setTelephoneNumber(phoneNumber);
-                mainInfoService.addMainInfo(mainInfo);
-            }
-            //TODO 写入成功后,删除redis里面保存的code
-            Boolean bSuccess = redisSettingMap.deleteValue(RedisType.SMS,phoneNumber);
-            if (!bSuccess) {
-                //删除不成功,redis不存在
-                log.info("redis 没有对应的token");
-            }
-
-            tokenMap.put("userId", mainInfo.getUserId());
-
-            redisTemplate.opsForHash().putAll(redisSettingMap.getTokenKey(token), tokenMap);
-            redisTemplate.expire(redisSettingMap.getTokenKey(token), expire, TimeUnit.SECONDS);
-
-            //返回一个token
-            LoginVO loginVO = new LoginVO();
-            loginVO.setToken(token);
-            loginVO.setNewUser(bUserInfoByUserId(mainInfo.getUserId()));
-            return ResultVOUtil.success(loginVO);
-
-        } catch (UserException e) {
-
-            log.error(e.getMessage(), e);
-            return ResultVOUtil.error(UserEnum.USER_REGISTER_ERROR.getCode(), UserEnum.USER_REGISTER_ERROR.getMessage());
-        }
-
-    }
+    //@GetMapping("/SMS_login")
+    //@Deprecated
+    //public ResultVO userRegistrationAndSMSLogin(String phoneNumber, String code) {
+    //    String codeValue = redisSettingMap.getValue(RedisType.SMS,phoneNumber);
+    //    if (!StringUtils.equals(codeValue, code)) {
+    //        log.warn("【code校验】Redis 中查找不到验证码 {},==,{}", codeValue, code);
+    //        return ResultVOUtil.error(UserEnum.USER_CODE_ERROR.getCode(), UserEnum.USER_CODE_ERROR.getMessage());
+    //    }
+    //    log.info("codeValue:" + codeValue);
+    //    //token
+    //    String token = UUID.randomUUID().toString();
+    //    Integer expire = RedisConstant.EXPIRE;//过期时间
+    //    Map<String, String> tokenMap = new HashMap<>();
+    //
+    //    try {
+    //        MainInfo mainInfo = mainInfoService.findMainInfoByPhoneNumber(phoneNumber);
+    //        //TODO 验证码登录流程
+    //        //如果不存在用户
+    //        if (mainInfo == null) {
+    //            //先main_info主表添加信息
+    //            mainInfo = createMainInfo();
+    //            mainInfo.setTelephoneNumber(phoneNumber);
+    //            mainInfoService.addMainInfo(mainInfo);
+    //        }
+    //        //TODO 写入成功后,删除redis里面保存的code
+    //        Boolean bSuccess = redisSettingMap.deleteValue(RedisType.SMS,phoneNumber);
+    //        if (!bSuccess) {
+    //            //删除不成功,redis不存在
+    //            log.info("redis 没有对应的token");
+    //        }
+    //
+    //        tokenMap.put("userId", mainInfo.getUserId());
+    //
+    //        redisTemplate.opsForHash().putAll(redisSettingMap.getTokenKey(token), tokenMap);
+    //        redisTemplate.expire(redisSettingMap.getTokenKey(token), expire, TimeUnit.SECONDS);
+    //
+    //        //返回一个token
+    //        LoginVO loginVO = new LoginVO();
+    //        loginVO.setToken(token);
+    //        loginVO.setNewUser(bUserInfoByUserId(mainInfo.getUserId()));
+    //        return ResultVOUtil.success(loginVO);
+    //
+    //    } catch (UserException e) {
+    //
+    //        log.error(e.getMessage(), e);
+    //        return ResultVOUtil.error(UserEnum.USER_REGISTER_ERROR.getCode(), UserEnum.USER_REGISTER_ERROR.getMessage());
+    //    }
+    //
+    //}
 
     /**
-     * 根据不同类型账号注册登录
-     * 手机或者邮箱
+     * 根据不同类型账号注册(ps:未注册的进行注册)->登录
+     * 手机或者邮箱 code登录
      * @param account
      * @param code
      * @param type
@@ -697,9 +706,8 @@ public class LoginController {
         log.info("codeValue:" + codeValue);
         //token
         String token = UUID.randomUUID().toString();
-        Integer expire = RedisConstant.EXPIRE;//过期时间
+        //Integer expire = RedisConstant.EXPIRE;//过期时间
         Map<String, String> tokenMap = new HashMap<>();
-
         try {
             MainInfo mainInfo = null;
             if(type.equals(0)){
@@ -707,7 +715,7 @@ public class LoginController {
             }else if(type.equals(1)){
                 mainInfo = mainInfoService.findMainInfoByEmail(account);
             }
-            //TODO 验证码登录流程
+            //验证码登录流程
             //如果不存在用户
             if (mainInfo == null) {
                 //先main_info主表添加信息
@@ -717,13 +725,24 @@ public class LoginController {
                 }else if(type.equals(1)){
                     mainInfo.setEmail(account);
                 }
+                mainInfo.setToken(token);
+                mainInfoService.addMainInfo(mainInfo);
+            } else {
+                //删除用户对应的token
+                Boolean bSuccess = redisSettingMap.deleteValue(RedisType.TOKEN,mainInfo.getToken());
+                if (!bSuccess) {
+                    //不存在的话不用处理
+                    log.info("SMS_login_from_type,redis 不存在此用户 token。");
+                }
+                //更新token
+                mainInfo.setToken(token);
                 mainInfoService.addMainInfo(mainInfo);
             }
-            //TODO 写入成功后,删除redis里面保存的code
+            //写入成功后,删除redis里面保存的code
             Boolean bSuccess =redisSettingMap.deleteValue(RedisType.SMS, account);
             if (!bSuccess) {
                 //删除不成功,redis不存在
-                log.info("redis 没有对应的token");
+                log.info("code删除不成功!");
             }
 
             tokenMap.put("userId", mainInfo.getUserId());
@@ -752,45 +771,45 @@ public class LoginController {
      * @param password
      * @return
      */
-    @GetMapping("/password_login")
-    @Deprecated
-    public ResultVO userPasswordLogin(String phoneNumber, String password) {
-        try {
-            MainInfo mainInfo = mainInfoService.findMainInfoByPhoneNumberAndPassword(phoneNumber, password);
-
-            //TODO 密码登录流程判断
-//            if(!StringUtils.equals(mainInfo.getTelephoneNumber(),phoneNumber)){
-//                return ResultVOUtil.error(UserEnum.USER_NOT_PHONE_NUMBER.getCode(),UserEnum.USER_NOT_PHONE_NUMBER.getMessage());
-//            }
-//            if(!StringUtils.equals(mainInfo.getPassword(),password)){
-//                return ResultVOUtil.error(UserEnum.USER_PASSWORD_ERROR.getCode(),UserEnum.USER_PASSWORD_ERROR.getMessage());
+//    @GetMapping("/password_login")
+//    @Deprecated
+//    public ResultVO userPasswordLogin(String phoneNumber, String password) {
+//        try {
+//            MainInfo mainInfo = mainInfoService.findMainInfoByPhoneNumberAndPassword(phoneNumber, password);
+//
+//            //TODO 密码登录流程判断
+////            if(!StringUtils.equals(mainInfo.getTelephoneNumber(),phoneNumber)){
+////                return ResultVOUtil.error(UserEnum.USER_NOT_PHONE_NUMBER.getCode(),UserEnum.USER_NOT_PHONE_NUMBER.getMessage());
+////            }
+////            if(!StringUtils.equals(mainInfo.getPassword(),password)){
+////                return ResultVOUtil.error(UserEnum.USER_PASSWORD_ERROR.getCode(),UserEnum.USER_PASSWORD_ERROR.getMessage());
+////            }
+//            if (mainInfo == null) {
+//                return ResultVOUtil.error(UserEnum.USER_PASSWORD_ERROR.getCode(), UserEnum.USER_PASSWORD_ERROR.getMessage());
 //            }
-            if (mainInfo == null) {
-                return ResultVOUtil.error(UserEnum.USER_PASSWORD_ERROR.getCode(), UserEnum.USER_PASSWORD_ERROR.getMessage());
-            }
-            //token
-            String token = UUID.randomUUID().toString();
-            Integer expire = RedisConstant.EXPIRE;//过期时间
-            Map<String, String> tokenMap = new HashMap<>();
-
-            //TODO 登录成功,返回对应的字段
-            tokenMap.put("userId", mainInfo.getUserId());
-            redisTemplate.opsForHash().putAll(redisSettingMap.getTokenKey(token), tokenMap);
-            redisTemplate.expire(redisSettingMap.getTokenKey(token), expire, TimeUnit.SECONDS);
-
-            //返回一个token
-            LoginVO loginVO = new LoginVO();
-            loginVO.setToken(token);
-            loginVO.setNewUser(bUserInfoByUserId(mainInfo.getUserId()));
-            return ResultVOUtil.success(loginVO);
-        } catch (UserException e) {
-
-            log.error(e.getMessage(), e);
-            return ResultVOUtil.error(UserEnum.USER_REGISTER_ERROR.getCode(), UserEnum.USER_REGISTER_ERROR.getMessage());
-        }
-
-
-    }
+//            //token
+//            String token = UUID.randomUUID().toString();
+//            Integer expire = RedisConstant.EXPIRE;//过期时间
+//            Map<String, String> tokenMap = new HashMap<>();
+//
+//            //TODO 登录成功,返回对应的字段
+//            tokenMap.put("userId", mainInfo.getUserId());
+//            redisTemplate.opsForHash().putAll(redisSettingMap.getTokenKey(token), tokenMap);
+//            redisTemplate.expire(redisSettingMap.getTokenKey(token), expire, TimeUnit.SECONDS);
+//
+//            //返回一个token
+//            LoginVO loginVO = new LoginVO();
+//            loginVO.setToken(token);
+//            loginVO.setNewUser(bUserInfoByUserId(mainInfo.getUserId()));
+//            return ResultVOUtil.success(loginVO);
+//        } catch (UserException e) {
+//
+//            log.error(e.getMessage(), e);
+//            return ResultVOUtil.error(UserEnum.USER_REGISTER_ERROR.getCode(), UserEnum.USER_REGISTER_ERROR.getMessage());
+//        }
+//
+//
+//    }
 
     /**
      * 根据手机号或者邮箱进行密码登录
@@ -812,16 +831,27 @@ public class LoginController {
             if (mainInfo == null) {
                 return ResultVOUtil.error(UserEnum.USER_PASSWORD_ERROR.getCode(), UserEnum.USER_PASSWORD_ERROR.getMessage());
             }
+            //刪除舊的token
+            Boolean bSuccess = redisSettingMap.deleteValue(RedisType.TOKEN,mainInfo.getToken());
+            if (!bSuccess) {
+                //不存在的话不用处理
+                log.info("password_login_type,redis 不存在此用户 token。");
+            }
+
             //token
             String token = UUID.randomUUID().toString();
-            Integer expire = RedisConstant.EXPIRE;//过期时间
+            //Integer expire = RedisConstant.EXPIRE;//过期时间
             Map<String, String> tokenMap = new HashMap<>();
-
             //TODO 登录成功,返回对应的字段
             tokenMap.put("userId", mainInfo.getUserId());
 //            redisTemplate.opsForHash().putAll(redisSettingMap.getTokenKey(token), tokenMap);
 //            redisTemplate.expire(redisSettingMap.getTokenKey(token), expire, TimeUnit.SECONDS);
             redisSettingMap.putToken(token,tokenMap);
+
+            //更新token
+            mainInfo.setToken(token);
+            mainInfoService.addMainInfo(mainInfo);
+
             //返回一个token
             LoginVO loginVO = new LoginVO();
             loginVO.setToken(token);
@@ -856,8 +886,7 @@ public class LoginController {
     }
 
     /**
-     * 删除token
-     *
+     * Client 退出操作时候,删除token
      * @param request
      * @return
      */
@@ -878,14 +907,17 @@ public class LoginController {
     }
 
 
-
-
+    /**
+     * 苹果登录
+     * @param identityToken
+     * @param response
+     * @param request
+     * @return
+     */
     @GetMapping("/client_apple_login")
     public ResultVO appleLogin(@RequestParam("identityToken") String identityToken,
                                    HttpServletResponse response,
                                    HttpServletRequest request) {
-
-
         //检查redis 的token 是否存在,存在则删除
         String headToken = request.getHeader("token");
         if (StringUtils.isNotBlank(headToken)) {
@@ -896,10 +928,7 @@ public class LoginController {
                 log.info("redis 没有对应的token");
             }
         }
-
         //todo 处理identityToken,判断是否是非法,暂时默认全部合法
-
-
         try {
             //验证identityToken
             if(!AppleUtil.verify(identityToken)){
@@ -928,6 +957,7 @@ public class LoginController {
             if (appleInfo == null) {
                 //先main_info主表添加信息
                 mainInfo = createMainInfo();
+                mainInfo.setToken(token);
                 mainInfoService.addMainInfo(mainInfo);
                 //微信表添加信息 wx_info
                 appleInfo = new AppleInfo();
@@ -938,6 +968,15 @@ public class LoginController {
                 appleInfoService.addAppleInfo(appleInfo);
             } else {
                 mainInfo = mainInfoService.findMainInfoById(appleInfo.getUserId());
+                //刪除舊的token
+                Boolean bSuccess = redisSettingMap.deleteValue(RedisType.TOKEN,mainInfo.getToken());
+                if (!bSuccess) {
+                    //不存在的话不用处理
+                    log.info("client_apple_login,redis 不存在此用户 token。");
+                }
+                //更新token
+                mainInfo.setToken(token);
+                mainInfoService.addMainInfo(mainInfo);
             }
 
             //拿到用户userid
@@ -1009,9 +1048,11 @@ public class LoginController {
             {
                 map.put("showGame",false);
                 map.put("showVideo",false);
+                map.put("showTool",false);
             }else{
                 map.put("showGame",versionCode.getIsShowGame().equals(1));
                 map.put("showVideo",versionCode.getIsShowVideo().equals(1));
+                map.put("showTool",versionCode.getIsShowTool().equals(1));
             }
             map.put("versionCode",versionCode.getCode());
             map.put("title",versionCode.getTitle());
@@ -1023,6 +1064,24 @@ public class LoginController {
 
     }
 
+    /**
+     * 验证一下当前是否存在修改密码的code
+     * 需要限制访问次数等
+     * @param account
+     * @param code
+     * @return
+     */
+    @GetMapping("/SMS_verify_code")
+    public ResultVO onlyVerifyCode(@RequestParam("account") String account,
+                                       @RequestParam("code") String code) {
+
+        String codeValue = redisSettingMap.getValue(RedisType.SMS, account);
+        if (!StringUtils.equals(codeValue, code)) {
+            return ResultVOUtil.error(UserEnum.USER_CODE_ERROR.getCode(), UserEnum.USER_CODE_ERROR.getMessage());
+        }
+        return ResultVOUtil.success();
+    }
+
 
     /**
      * 根据手机号或者邮箱获取验证码
@@ -1036,8 +1095,7 @@ public class LoginController {
     public ResultVO userModifyPassword(@RequestParam("account") String account,
                                     @RequestParam("code") String code,
                                     @RequestParam("type") Integer type,
-                                    @RequestParam("password") String password,
-                                    @RequestParam("userId") String userId) {
+                                    @RequestParam("password") String password) {
 
         String codeValue = redisSettingMap.getValue(RedisType.SMS, account);
         if (!StringUtils.equals(codeValue, code)) {

+ 0 - 1
src/main/java/com/YuyeTech/HeartRate/game/userinfo/controller/BackstageUserController.java

@@ -94,7 +94,6 @@ public class BackstageUserController {
 
     /**
      * 删除用户数据
-     *
      * @param userId
      * @return
      */

+ 105 - 12
src/main/java/com/YuyeTech/HeartRate/game/userinfo/controller/ManagerController.java

@@ -1,13 +1,21 @@
 package com.YuyeTech.HeartRate.game.userinfo.controller;
 
+import cn.hutool.core.date.DateUtil;
 import com.YuyeTech.HeartRate.VO.ResultVO;
 import com.YuyeTech.HeartRate.constant.RedisConstant;
+import com.YuyeTech.HeartRate.enums.PictureType;
 import com.YuyeTech.HeartRate.enums.RedisType;
 import com.YuyeTech.HeartRate.enums.ResultEnum;
 import com.YuyeTech.HeartRate.enums.UserEnum;
+import com.YuyeTech.HeartRate.form.FeedbackForm;
 import com.YuyeTech.HeartRate.game.TP_WxInfo.projo.WxInfo;
 import com.YuyeTech.HeartRate.game.TP_WxInfo.service.WxInfoService;
+import com.YuyeTech.HeartRate.game.cFeedBack.service.CFeedBackService;
+import com.YuyeTech.HeartRate.game.cFeedBack.vo.CFeedBackSimpleVo;
+import com.YuyeTech.HeartRate.game.cFeedBack.vo.CFeedBackVo;
 import com.YuyeTech.HeartRate.game.gameInfo.service.GameInfoService;
+import com.YuyeTech.HeartRate.game.imageInfo.projo.Pictures;
+import com.YuyeTech.HeartRate.game.imageInfo.service.PicturesService;
 import com.YuyeTech.HeartRate.game.userinfo.projo.MainInfo;
 import com.YuyeTech.HeartRate.game.userinfo.projo.UserInfo;
 import com.YuyeTech.HeartRate.game.userinfo.service.MainInfoService;
@@ -21,8 +29,17 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 管理数据库数据
@@ -55,8 +72,13 @@ public class ManagerController {
 
     @Autowired
     private WxInfoService wxInfoService;
+
+    @Autowired
+    private PicturesService picturesService;
+    @Autowired
+    private CFeedBackService cFeedBackService;
     /**
-     * 通过类型来判断删除
+     * Client 通过类型来判断删除,通常注销账户时候调用此接口
      * 1。电话:密码或者验证码
      * 2。邮箱:密码或者验证码
      * 3。微信:微信授权code
@@ -193,15 +215,86 @@ public class ManagerController {
 //    }
 //
 //
-//    @PostMapping("/upload_feedback")
-//    @ResponseBody
-//    public ResultVO toUploadBlogPost(@RequestParam(value = "files", required = false) MultipartFile[] files,
-//                                     @Valid FeedbackForm feedbackForm,
-//                                     Map<String, Object> map) {
-//
-//        log.info("{}",files.length);
-//
-//
-//        return ResultVOUtil.success();
-//    }
+
+    /**
+     * 意见反馈接口
+     * todo 后台需要处理对应的问题展示页面
+     * @param userId
+     * @param feedbackForm
+     * @param request
+     * @return
+     */
+    @PostMapping("/upload_feedback")
+    @ResponseBody
+    public ResultVO onUploadFeedback(@RequestParam("userId") String userId,
+                                     @Valid FeedbackForm feedbackForm,
+                                     HttpServletRequest request) {
+        MultipartHttpServletRequest req = (MultipartHttpServletRequest) request;
+        Map<String,MultipartFile> mapFile = req.getFileMap();
+        List<MultipartFile> files = new ArrayList<>();
+        if (!mapFile.isEmpty()){
+            for(Map.Entry<String,MultipartFile> result : mapFile.entrySet()){
+                files.add(result.getValue());
+            }
+            //uploadService.uploadProjectFile(coreFileListStr,resultList);
+        }
+        log.info("{}",files.size());
+        File uploadCarouselFile = null;
+        List<Pictures> picturesList = new ArrayList<>();
+        try {
+            for (int i = 0; i < files.size(); i++) {
+                //获得文件
+                MultipartFile multipartFile = files.get(i);
+                String fileName = multipartFile.getOriginalFilename();
+                if (!"".equals(fileName.trim())) {
+                    uploadCarouselFile = new File(fileName);
+                    FileOutputStream os = new FileOutputStream(uploadCarouselFile);
+                    os.write(multipartFile.getBytes());
+                    os.close();
+                    multipartFile.transferTo(uploadCarouselFile);
+                    //上传到OSS
+                    String pictureUrl = aliyunOSSUtil.upload(uploadCarouselFile, "feedBack");
+                    //1.向Pictures 添加数据
+                    Pictures pictures1 = new Pictures();
+                    pictures1.setPictureUrl(pictureUrl);
+                    pictures1.setPictureType(PictureType.FEED_BACK.ordinal());
+                    pictures1.setCreateTime(DateUtil.date());
+                    pictures1.setUpdateTime(DateUtil.date());
+                    pictures1 = picturesService.addPictureAndFlush(pictures1);
+                    picturesList.add(pictures1);
+                    log.info(aliyunOSSUtil.addDomainName(pictures1.getPictureUrl()));
+                }
+            }
+
+            CFeedBackVo cFeedBackVo = new CFeedBackVo();
+            cFeedBackVo.setUserId(userId);
+            List<String> pictureIds = picturesList.stream().map(e->e.getPictureId().toString()).collect(Collectors.toList());
+            cFeedBackVo.setPictureId(StringUtils.join(pictureIds,","));
+            cFeedBackVo.setPictureType(PictureType.FEED_BACK.ordinal());
+            cFeedBackVo.setProblemDescription(feedbackForm.getProblemDescription());
+            cFeedBackVo.setTelephoneNumber(feedbackForm.getPhoneNumber());
+            cFeedBackVo.setName(feedbackForm.getUserName());
+            cFeedBackVo.setVersionName(feedbackForm.getVersionName());
+            cFeedBackVo.setVersionCode(feedbackForm.getVersionCode());
+            cFeedBackVo.setIsResolved(0);
+            cFeedBackVo.setIsShow(1);
+            cFeedBackVo.setUpdateTime(DateUtil.date());
+            cFeedBackVo.setCreateTime(DateUtil.date());
+            cFeedBackService.saveReturnVo(cFeedBackVo);
+
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+            return ResultVOUtil.error(400,e.getMessage());
+        } catch (IOException e) {
+            e.printStackTrace();
+            return ResultVOUtil.error(400,e.getMessage());
+        } finally {
+            if (uploadCarouselFile != null)
+                uploadCarouselFile.delete();
+        }
+
+        Map map = new HashMap();
+        map.put("msg","意见反馈成功!");
+        return ResultVOUtil.success(map);
+    }
 }

+ 1 - 0
src/main/java/com/YuyeTech/HeartRate/game/userinfo/projo/MainInfo.java

@@ -22,6 +22,7 @@ public class MainInfo {
     private String telephoneNumber;
     private String email;
     private Integer status;//用户状态,0:正常,1:预删除
+    private String token;//最後登錄時候的token
     private Date createTime;
     private Date updateTime;
 }

+ 13 - 3
src/main/java/com/YuyeTech/HeartRate/game/userinfo/service/MainInfoServiceImpl.java

@@ -2,10 +2,8 @@ package com.YuyeTech.HeartRate.game.userinfo.service;
 
 import cn.hutool.core.date.DateUtil;
 import com.YuyeTech.HeartRate.common.service.CommonServiceImpl;
-import com.YuyeTech.HeartRate.enums.UserDeleteStatus;
+import com.YuyeTech.HeartRate.enums.*;
 import com.YuyeTech.HeartRate.game.TP_AppleInfo.projo.AppleInfo;
-import com.YuyeTech.HeartRate.enums.UserEnum;
-import com.YuyeTech.HeartRate.enums.UserStatus;
 import com.YuyeTech.HeartRate.exception.UserException;
 import com.YuyeTech.HeartRate.game.TP_AppleInfo.vo.AppleInfoVo;
 import com.YuyeTech.HeartRate.game.TP_WxInfo.projo.WxInfo;
@@ -21,6 +19,8 @@ import com.YuyeTech.HeartRate.game.TP_AppleInfo.service.AppleInfoService;
 import com.YuyeTech.HeartRate.game.TP_WxInfo.service.WxInfoService;
 import com.YuyeTech.HeartRate.service.FriendInfoService;
 import com.YuyeTech.HeartRate.utils.AliyunOSSUtil;
+import com.YuyeTech.HeartRate.utils.RedisSettingMap;
+import com.YuyeTech.HeartRate.utils.ResultVOUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -61,6 +61,9 @@ public class MainInfoServiceImpl extends CommonServiceImpl<MainInfoVo, MainInfo,
     @Autowired
     private FriendInfoService friendInfoService;
 
+    @Autowired
+    private RedisSettingMap redisSettingMap;
+
 
 
     @Override
@@ -164,6 +167,13 @@ public class MainInfoServiceImpl extends CommonServiceImpl<MainInfoVo, MainInfo,
                 //这里friendId 传入自己的id
                 friendInfoService.deleteFriendInfosByFriendId(userId);
 
+                //删除用户对应的token
+                Boolean bSuccess = redisSettingMap.deleteValue(RedisType.TOKEN,mainInfoVo.getToken());
+                if (!bSuccess) {
+                    //不存在的话不用处理
+                    log.info("删除用户时,redis 不存在此用户 token。");
+                }
+
                 userDeleteLog.setUpdateTime(DateUtil.date());
                 //记录一个log状态
                 userDeleteLog.setStatus(UserDeleteStatus.PENDING.ordinal());

+ 1 - 0
src/main/java/com/YuyeTech/HeartRate/game/userinfo/vo/MainInfoVo.java

@@ -18,6 +18,7 @@ public class MainInfoVo extends PageCondition implements Serializable {
     private String telephoneNumber;
     private String email;
     private Integer status;//用户状态,0:正常,1:预删除
+    private String token;//最後登錄時候的token
     private Date createTime;
     private Date updateTime;
 }

+ 7 - 7
src/main/java/com/YuyeTech/HeartRate/utils/CodeDOM.java

@@ -549,11 +549,11 @@ public class CodeDOM {
         return tableName + " 后台代码生成完毕!";
     }
 
-//    public static void main(String[] args) {
-//        String[] tables = {"food_recommend"};
-//        for (String table : tables) {
-//            String msg = new CodeDOM(table).create();
-//            System.out.println(msg);
-//        }
-//    }
+    //public static void main(String[] args) {
+    //    String[] tables = {"c_feed_back"};
+    //    for (String table : tables) {
+    //        String msg = new CodeDOM(table).create();
+    //        System.out.println(msg);
+    //    }
+    //}
 }