LoginController.java 46 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123
  1. package com.YuyeTech.TPlat.game.controller;
  2. import cn.binarywang.wx.miniapp.api.WxMaService;
  3. import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
  4. import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
  5. import cn.hutool.core.date.DateUtil;
  6. import com.YuyeTech.TPlat.dataobject.*;
  7. import com.YuyeTech.TPlat.enums.*;
  8. import com.YuyeTech.TPlat.form.ClientForm;
  9. import com.YuyeTech.TPlat.game.TP_AppleInfo.projo.AppleInfo;
  10. import com.YuyeTech.TPlat.game.TP_AppleInfo.service.AppleInfoService;
  11. import com.YuyeTech.TPlat.game.TP_WxInfo.projo.WxInfo;
  12. import com.YuyeTech.TPlat.game.TP_WxInfo.service.WxInfoService;
  13. import com.YuyeTech.TPlat.game.TP_WxInfo.vo.WxInfoVo;
  14. import com.YuyeTech.TPlat.game.userinfo.projo.MainInfo;
  15. import com.YuyeTech.TPlat.game.userinfo.projo.UserInfo;
  16. import com.YuyeTech.TPlat.game.userinfo.service.MainInfoService;
  17. import com.YuyeTech.TPlat.game.userinfo.service.UserInfoService;
  18. import com.YuyeTech.TPlat.service.*;
  19. import com.YuyeTech.TPlat.utils.*;
  20. import com.alibaba.fastjson.JSONObject;
  21. import com.YuyeTech.TPlat.VO.LoginVO;
  22. import com.YuyeTech.TPlat.VO.ResultVO;
  23. import com.YuyeTech.TPlat.VO.UserInfoVO;
  24. import com.YuyeTech.TPlat.config.WxMaConfiguration;
  25. import com.YuyeTech.TPlat.constant.CookieConstant;
  26. import com.YuyeTech.TPlat.constant.RedisConstant;
  27. import com.YuyeTech.TPlat.exception.UserException;
  28. import com.YuyeTech.TPlat.exception.WxInfoException;
  29. import freemarker.template.Template;
  30. import freemarker.template.TemplateException;
  31. import lombok.extern.slf4j.Slf4j;
  32. import me.chanjar.weixin.common.error.WxErrorException;
  33. import org.apache.commons.lang3.StringUtils;
  34. import org.springframework.beans.BeanUtils;
  35. import org.springframework.beans.factory.annotation.Autowired;
  36. import org.springframework.beans.factory.annotation.Value;
  37. import org.springframework.data.redis.core.StringRedisTemplate;
  38. import org.springframework.mail.MailException;
  39. import org.springframework.mail.javamail.JavaMailSender;
  40. import org.springframework.mail.javamail.MimeMessageHelper;
  41. import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
  42. import org.springframework.web.bind.annotation.*;
  43. import org.springframework.web.client.RestTemplate;
  44. import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
  45. import javax.mail.MessagingException;
  46. import javax.mail.internet.MimeMessage;
  47. import javax.servlet.http.HttpServletRequest;
  48. import javax.servlet.http.HttpServletResponse;
  49. import javax.validation.Valid;
  50. import java.io.IOException;
  51. import java.util.*;
  52. import java.util.concurrent.TimeUnit;
  53. /**
  54. * 登录
  55. *
  56. * @author:slambb
  57. * @date:2019/12/4
  58. */
  59. @RestController
  60. @RequestMapping("/program")
  61. @Slf4j
  62. public class LoginController {
  63. @Autowired
  64. private StringRedisTemplate redisTemplate;
  65. @Autowired
  66. private RedisSettingMap redisSettingMap;
  67. @Autowired
  68. private MainInfoService mainInfoService;
  69. @Autowired
  70. private WxInfoService wxInfoService;
  71. @Autowired
  72. private UserInfoService userInfoService;
  73. @Autowired
  74. private AliyunSMSUtil aliyunSMSUtil;
  75. @Autowired
  76. private AppleInfoService appleInfoService;
  77. @Autowired
  78. private ClientInfoService clientInfoService;
  79. @Autowired
  80. private VersionCodeService versionCodeService;
  81. @Value("${spring.mail.username}")
  82. private String mailUsername;
  83. @Autowired
  84. private JavaMailSender mailSender;
  85. @Autowired
  86. private FreeMarkerConfigurer freeMarkerConfigurer;
  87. // @GetMapping("/getSessionToken")
  88. // public ResultVO getSessionToken(@RequestParam("code") String code) {
  89. //
  90. // log.info("进入getSessionToken 方法。");
  91. // log.info("code={}", code);
  92. //
  93. // String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx463e58507db8f1ef&secret=ba04f48301d083e961d6f84cc696aeb2&code=" + code + "&grant_type=authorization_code";
  94. //
  95. // RestTemplate restTemplate = new RestTemplate();
  96. // String response = restTemplate.getForObject(url, String.class);
  97. // log.info("response={}", response);
  98. // ResultVO resultVO = new ResultVO();
  99. // resultVO.setCode(0);
  100. // resultVO.setMsg("成功");
  101. // resultVO.setData(response);
  102. //
  103. // return resultVO;
  104. //
  105. // }
  106. /**
  107. * android 端登录,微信登录
  108. * 只要带login,都不用权鉴
  109. *
  110. * @param openid
  111. * @param unionid
  112. * @param response
  113. * @param request
  114. * @return
  115. */
  116. @GetMapping("/client_wx_login")
  117. public ResultVO androidWxLogin(@RequestParam("openid") String openid,
  118. @RequestParam("unionid") String unionid,
  119. HttpServletResponse response,
  120. HttpServletRequest request) {
  121. //检查redis 的token 是否存在,存在则删除
  122. String headToken = request.getHeader("token");
  123. if (StringUtils.isNotBlank(headToken)) {
  124. // Boolean bSuccess = redisTemplate.delete(String.format(RedisConstant.TOKEN_PREFIX, headToken));
  125. Boolean bSuccess = redisSettingMap.deleteValue(RedisType.TOKEN,headToken);
  126. if (!bSuccess) {
  127. //删除不成功,redis不存在,是非法token
  128. log.info("redis 没有对应的token");
  129. }
  130. }
  131. try {
  132. String token = UUID.randomUUID().toString();
  133. Integer expire = RedisConstant.EXPIRE;//过期时间
  134. Map<String, String> tokenMap = new HashMap<>();
  135. //1.openid 和 wxInfo数据库的对比,没有用户的话,添加新增用户
  136. WxInfo wxInfo = wxInfoService.findWxInfoByOpenid(openid);
  137. //2. wxInfo 没有数据,添加新数据
  138. MainInfo mainInfo = new MainInfo();
  139. if (wxInfo == null) {
  140. //先main_info主表添加信息
  141. mainInfo = createMainInfo();
  142. mainInfoService.addMainInfo(mainInfo);
  143. //微信表添加信息 wx_info
  144. wxInfo = new WxInfo();
  145. wxInfo.setUserId(mainInfo.getUserId());
  146. wxInfo.setOpenid(openid);
  147. wxInfo.setUnionid(unionid);
  148. wxInfo.setCreateTime(DateUtil.date());
  149. wxInfo.setUpdateTime(DateUtil.date());
  150. wxInfoService.addWxInfo(wxInfo);
  151. // wxInfoService.saveReturnVo(CopyUtil.copy(wxInfo, WxInfoVo.class));
  152. } else {
  153. mainInfo = mainInfoService.findMainInfoById(wxInfo.getUserId());
  154. }
  155. //拿到用户userid
  156. tokenMap.put("userId", mainInfo.getUserId());
  157. tokenMap.put("openid", openid);
  158. tokenMap.put("unionid", unionid);
  159. //2.设置token 到redis
  160. // redisTemplate.opsForHash().putAll(redisSettingMap.getTokenKey(token), tokenMap);
  161. // redisTemplate.expire(redisSettingMap.getTokenKey(token), expire, TimeUnit.SECONDS);
  162. redisSettingMap.putToken(token,tokenMap);
  163. //3.设置token到cookie
  164. CookieUtil.set(response, CookieConstant.TOKEN, token, expire);
  165. //TODO 可以增加自己的逻辑,关联业务相关数据
  166. //用userInfo 来判断是否存在userInfo 表中,
  167. LoginVO loginVO = new LoginVO();
  168. loginVO.setToken(token);
  169. loginVO.setNewUser(bUserInfoByUserId(mainInfo.getUserId()));
  170. return ResultVOUtil.success(loginVO);
  171. } catch (UserException e) {
  172. log.error(e.getMessage(), e);
  173. return ResultVOUtil.error(e.getCode(), e.toString());
  174. }
  175. }
  176. /**
  177. * 统一创建mainInfo
  178. * @return
  179. */
  180. //调用创建一个mainInfo
  181. MainInfo createMainInfo() {
  182. String _id = KeyUtil.genUniqueKey();
  183. MainInfo mainInfo = new MainInfo();
  184. mainInfo.setUserId(_id);
  185. mainInfo.setUsername("u_" + _id);
  186. mainInfo.setPassword("p_" + _id);
  187. mainInfo.setStatus(UserStatus.NORMAL.ordinal());
  188. mainInfo.setCreateTime(DateUtil.date());
  189. mainInfo.setUpdateTime(DateUtil.date());
  190. return mainInfo;
  191. }
  192. /**
  193. * 查询是否存在userInfo对应用户数据,如果不存在。则判断为新用户
  194. * @param userId
  195. * @return
  196. */
  197. Boolean bUserInfoByUserId(String userId) {
  198. UserInfo saveUserInfo = userInfoService.findUserInfoById(userId, true);
  199. Boolean bNewUser = saveUserInfo == null ? true : false;
  200. return bNewUser;
  201. }
  202. /**
  203. * 小程序端登录
  204. *
  205. * @param appid
  206. * @param code
  207. * @param platFrom
  208. * @param response
  209. * @param request
  210. * @return
  211. */
  212. @GetMapping("/client_login")
  213. public ResultVO client_login(@RequestParam("appid") String appid,
  214. @RequestParam("code") String code,
  215. @RequestParam("platfrom") String platFrom,
  216. HttpServletResponse response,
  217. HttpServletRequest request) {
  218. //检查redis 的token 是否存在,存在则删除
  219. String headToken = request.getHeader("token");
  220. if (StringUtils.isNotBlank(headToken)) {
  221. // Boolean bSuccess = redisTemplate.delete(String.format(RedisConstant.TOKEN_PREFIX, headToken));
  222. Boolean bSuccess = redisSettingMap.deleteValue(RedisType.TOKEN,headToken);
  223. if (!bSuccess) {
  224. //删除不成功,redis不存在,是非法token
  225. // throw new WxInfoException(ResultEnum.TOKEN_IS_ILLEGAL.getCode(), ResultEnum.TOKEN_IS_ILLEGAL.getMessage());
  226. log.info("redis 没有对应的token");
  227. }
  228. }
  229. //1.配置
  230. //2.调用方法
  231. final WxMaService wxService = WxMaConfiguration.getMaService(appid);
  232. try {
  233. //token
  234. String token = UUID.randomUUID().toString();
  235. Integer expire = RedisConstant.EXPIRE;//过期时间
  236. Map<String, String> tokenMap = new HashMap<>();
  237. if (StringUtils.equals(platFrom, "weixin")) {
  238. WxMaJscode2SessionResult session = wxService.getUserService().getSessionInfo(code);
  239. //1.openid 和数据库的对比,没有用户的话,添加新增用户
  240. WxInfo wxInfo = wxInfoService.findWxInfoByOpenid(session.getOpenid());
  241. if (wxInfo == null) {
  242. //先main_info主表添加信息
  243. MainInfo mainInfo = createMainInfo();
  244. mainInfoService.addMainInfo(mainInfo);
  245. //微信表添加信息 wx_info
  246. wxInfo = new WxInfo();
  247. wxInfo.setUserId(mainInfo.getUserId());
  248. wxInfo.setOpenid(session.getOpenid());
  249. wxInfo.setCreateTime(DateUtil.date());
  250. wxInfo.setUpdateTime(DateUtil.date());
  251. wxInfoService.addWxInfo(wxInfo);
  252. // wxInfoService.saveReturnVo(CopyUtil.copy(wxInfo, WxInfoVo.class));
  253. }
  254. //拿到微信对应的用户userid
  255. tokenMap.put("userId", wxInfo.getUserId());
  256. tokenMap.put("openid", session.getOpenid());
  257. tokenMap.put("sessionKey", session.getSessionKey());
  258. tokenMap.put("unionid", session.getUnionid());
  259. }
  260. //2.设置token 到redis
  261. // redisTemplate.opsForValue().set(String.format(RedisConstant.TOKEN_PREFIX,token),session.getOpenid()+session.getSessionKey(),expire, TimeUnit.SECONDS);
  262. // redisTemplate.opsForHash().putAll(redisSettingMap.getTokenKey(token), tokenMap);
  263. // redisTemplate.expire(redisSettingMap.getTokenKey(token), expire, TimeUnit.SECONDS);
  264. redisSettingMap.putToken(token,tokenMap);
  265. //3.设置token到cookie
  266. CookieUtil.set(response, CookieConstant.TOKEN, token, expire);
  267. //TODO 可以增加自己的逻辑,关联业务相关数据
  268. LoginVO loginVO = new LoginVO();
  269. loginVO.setToken(token);
  270. return ResultVOUtil.success(loginVO);
  271. } catch (WxErrorException e) {
  272. log.error(e.getMessage(), e);
  273. return ResultVOUtil.error(500, e.toString());
  274. }
  275. }
  276. /**
  277. * <pre>
  278. * 获取用户信息接口
  279. * </pre>
  280. */
  281. @GetMapping("/wx_getUserInfo")
  282. public ResultVO wxGetUserInfo(
  283. @RequestParam("appid") String appid,
  284. @RequestParam("signature") String signature,
  285. @RequestParam("rawData") String rawData,
  286. @RequestParam("encryptedData") String encryptedData,
  287. @RequestParam("iv") String iv,
  288. @RequestParam("userId") String userId,
  289. HttpServletRequest request) {
  290. final WxMaService wxService = WxMaConfiguration.getMaService(appid);
  291. // String cookie= request.getHeader("cookies");
  292. //获取到请求后,查询cookie
  293. // Cookie cookie = CookieUtil.get(request, CookieConstant.TOKEN);
  294. String token = request.getHeader("token");
  295. Object sessionKey = redisTemplate.opsForHash().get(redisSettingMap.getTokenKey(token), "sessionKey");
  296. // 用户信息校验
  297. if (!wxService.getUserService().checkUserInfo(sessionKey.toString(), rawData, signature)) {
  298. // return "user check failed";
  299. throw new WxInfoException(WxInfoEnum.USER_WX_ENCRYPTED_DATA_ERROR);
  300. }
  301. // 解密用户信息
  302. WxMaUserInfo userInfo = wxService.getUserService().getUserInfo(sessionKey.toString(), encryptedData, iv);
  303. //解密用户信息时候,如果是新用户,则把用户信息存入数据库
  304. UserInfo saveUserInfo = userInfoService.findUserInfoById(userId, true);
  305. if (saveUserInfo == null) {
  306. saveUserInfo = new UserInfo();
  307. saveUserInfo.setUserId(request.getParameterValues("userId")[0]);
  308. saveUserInfo.setUsername(userInfo.getNickName());
  309. saveUserInfo.setGender(userInfo.getGender());
  310. saveUserInfo.setBirthday(new Date());
  311. saveUserInfo.setSignature("");
  312. saveUserInfo.setAvatarUrl(userInfo.getAvatarUrl());
  313. saveUserInfo.setHeight(0.0);
  314. saveUserInfo.setWeight(0.0);
  315. saveUserInfo.setRegisterTime(new Date());
  316. saveUserInfo.setStatus(1);//1为新注册
  317. saveUserInfo.setUpdateTime(DateUtil.date());
  318. userInfoService.addUserInfo(saveUserInfo);
  319. }
  320. // return JsonUtils.toJson(userInfo);
  321. //vo 返回给前端的字段筛选
  322. UserInfoVO userInfoVO = new UserInfoVO();
  323. BeanUtils.copyProperties(saveUserInfo, userInfoVO);
  324. return ResultVOUtil.success(userInfoVO);
  325. }
  326. /**
  327. * 获取验证码
  328. * deprecated since version 2.4.10
  329. * @param phoneNumber
  330. * @return
  331. */
  332. @GetMapping("/getCode")
  333. @Deprecated
  334. public ResultVO getCode(@RequestParam(value = "phoneNumber") String phoneNumber) {
  335. Integer expire = RedisConstant.CODE_EXPIRE;//过期时间
  336. String code = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
  337. if (phoneNumber != null) {
  338. aliyunSMSUtil.sendSms(phoneNumber, code);
  339. //成功后保存code到redis
  340. // redisTemplate.opsForValue().set(String.format(RedisConstant.SMS_PREFIX, phoneNumber), code, expire, TimeUnit.SECONDS);
  341. redisSettingMap.setSMS(phoneNumber,code);
  342. log.info("getCode:" + code);
  343. return ResultVOUtil.success();
  344. } else {
  345. return ResultVOUtil.error(200, "获取code失败");
  346. }
  347. }
  348. /**
  349. * 2021-09-18
  350. * 在手机号或者邮件中获取验证码。通用
  351. *
  352. * @param account
  353. * @param type 0 默认手机,1默认邮件
  354. * @return
  355. */
  356. @GetMapping("/getCodeAccordingType")
  357. public ResultVO getCodeAccordingType(@RequestParam(value = "account") String account,
  358. @RequestParam(value = "type") Integer type) {
  359. Integer expire = RedisConstant.CODE_EXPIRE;//过期时间
  360. String code = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
  361. if (account != null) {
  362. if(type.equals(0)){
  363. //发送验证码给 手机
  364. aliyunSMSUtil.sendSms(account, code);
  365. }else if(type.equals(1)){
  366. //发送验证码给 邮件
  367. //创建简单邮件消息
  368. // SimpleMailMessage message = new SimpleMailMessage();
  369. //邮件内容
  370. // message.setText("哔蹦平台登录的验证码:"+code+",请勿泄露给其他人!");
  371. //freemarker
  372. try {
  373. MimeMessage message = mailSender.createMimeMessage();
  374. MimeMessageHelper helper = new MimeMessageHelper(message);
  375. //谁发的
  376. helper.setFrom(mailUsername);
  377. //谁要接收
  378. helper.setTo(account);
  379. //邮件标题
  380. helper.setSubject("哔蹦平台验证码");
  381. //freemarker
  382. Template template = freeMarkerConfigurer.getConfiguration().getTemplate("/mail/sendSMS.ftl");
  383. Map<String, String> emailMap = new HashMap<>();
  384. emailMap.put("emailCode",code);
  385. String s = FreeMarkerTemplateUtils.processTemplateIntoString(template, emailMap);
  386. helper.setText(s,true);
  387. mailSender.send(message);
  388. } catch (MailException e) {
  389. return ResultVOUtil.error(200, "发送普通邮件方失败!");
  390. }catch (MessagingException e) {
  391. return ResultVOUtil.error(200, "发送普通邮件方失败!");
  392. } catch (IOException e) {
  393. return ResultVOUtil.error(200, "发送普通邮件方失败!");
  394. } catch (TemplateException e) {
  395. return ResultVOUtil.error(200, "发送普通邮件方失败!");
  396. }
  397. }
  398. //成功后保存code到redis
  399. redisSettingMap.setSMS(account,code);
  400. log.info("getCode:" + code);
  401. Map map = new HashMap();
  402. map.put("receiver",account);
  403. map.put("tip","发送验证码成功");
  404. map.put("type",type);
  405. return ResultVOUtil.success(map);
  406. } else {
  407. return ResultVOUtil.error(200, "获取code失败");
  408. }
  409. }
  410. /**
  411. * 验证码绑定号码
  412. * 2.4.12 版本后弃用
  413. * @param phoneNumber
  414. * @param code
  415. * @return
  416. */
  417. @GetMapping("/SMS_bind_phone")
  418. @Deprecated
  419. public ResultVO userBindPhoneNumber(@RequestParam("phoneNumber") String phoneNumber,
  420. @RequestParam("code") String code,
  421. @RequestParam("userId") String userId) {
  422. String codeValue = redisSettingMap.getValue(RedisType.SMS,phoneNumber);
  423. if (!StringUtils.equals(codeValue, code)) {
  424. return ResultVOUtil.error(UserEnum.USER_CODE_ERROR.getCode(), UserEnum.USER_CODE_ERROR.getMessage());
  425. }
  426. log.info("codeValue:" + codeValue);
  427. try {
  428. MainInfo phoneMainInfo = mainInfoService.findMainInfoByPhoneNumber(phoneNumber);
  429. if (phoneMainInfo != null) {
  430. //如果存在,此手机号提示已注册
  431. return ResultVOUtil.error(UserEnum.USER_HAS_REGISTER_PHONE.getCode(), UserEnum.USER_HAS_REGISTER_PHONE.getMessage());
  432. }
  433. MainInfo mainInfo = mainInfoService.findMainInfoById(userId);
  434. //TODO 验证码登录流程
  435. //如果不存在用户
  436. if (mainInfo == null) {
  437. return ResultVOUtil.error(UserEnum.USER_REGISTER_ERROR.getCode(), UserEnum.USER_REGISTER_ERROR.getMessage());
  438. }
  439. mainInfo.setTelephoneNumber(phoneNumber);
  440. mainInfoService.addMainInfo(mainInfo);
  441. //TODO 写入成功后,删除redis里面保存的code
  442. Boolean bSuccess = redisSettingMap.deleteValue(RedisType.SMS,phoneNumber);
  443. if (!bSuccess) {
  444. //删除不成功,redis不存在
  445. log.info("redis 没有对应的token");
  446. }
  447. return ResultVOUtil.success();
  448. } catch (UserException e) {
  449. return ResultVOUtil.error(UserEnum.USER_REGISTER_ERROR.getCode(), UserEnum.USER_REGISTER_ERROR.getMessage());
  450. }
  451. }
  452. /**
  453. * 通过验证码,绑定用户手机号码或者邮箱。
  454. * @param account
  455. * @param code
  456. * @return
  457. */
  458. @GetMapping("/SMS_bind_account")
  459. public ResultVO userBindAccount(@RequestParam("account") String account,
  460. @RequestParam("code") String code,
  461. @RequestParam("type") Integer type,
  462. @RequestParam("userId") String userId) {
  463. String codeValue = redisSettingMap.getValue(RedisType.SMS,account);
  464. if (!StringUtils.equals(codeValue, code)) {
  465. return ResultVOUtil.error(UserEnum.USER_CODE_ERROR.getCode(), UserEnum.USER_CODE_ERROR.getMessage());
  466. }
  467. log.info("codeValue:" + codeValue);
  468. try {
  469. MainInfo mainInfo = null;
  470. if(type.equals(0)){
  471. mainInfo = mainInfoService.findMainInfoByPhoneNumber(account);
  472. if (mainInfo != null) {
  473. //如果存在,此手机号提示已注册
  474. return ResultVOUtil.error(UserEnum.USER_HAS_REGISTER_PHONE.getCode(), UserEnum.USER_HAS_REGISTER_PHONE.getMessage());
  475. }
  476. }else if(type.equals(1)){
  477. mainInfo = mainInfoService.findMainInfoByEmail(account);
  478. if (mainInfo != null) {
  479. //如果存在,此手机号提示已注册
  480. return ResultVOUtil.error(UserEnum.USER_HAS_REGISTER_MAILBOX.getCode(), UserEnum.USER_HAS_REGISTER_MAILBOX.getMessage());
  481. }
  482. }
  483. mainInfo = mainInfoService.findMainInfoById(userId);
  484. //TODO 验证码登录流程
  485. //如果不存在用户
  486. if (mainInfo == null) {
  487. return ResultVOUtil.error(UserEnum.USER_REGISTER_ERROR.getCode(), UserEnum.USER_REGISTER_ERROR.getMessage());
  488. }
  489. if(type.equals(0)){
  490. mainInfo.setTelephoneNumber(account);
  491. }else if(type.equals(1)){
  492. mainInfo.setEmail(account);
  493. }
  494. mainInfoService.addMainInfo(mainInfo);
  495. //TODO 写入成功后,删除redis里面保存的code
  496. Boolean bSuccess = redisSettingMap.deleteValue(RedisType.SMS,account);
  497. if (!bSuccess) {
  498. //删除不成功,redis不存在
  499. log.info("redis 没有对应的token");
  500. }
  501. return ResultVOUtil.success();
  502. } catch (UserException e) {
  503. return ResultVOUtil.error(UserEnum.USER_REGISTER_ERROR.getCode(), UserEnum.USER_REGISTER_ERROR.getMessage());
  504. }
  505. }
  506. /**
  507. * 解绑用户手机号
  508. * @param userId
  509. * @return
  510. */
  511. @GetMapping("/delete_phone")
  512. public ResultVO userDeletePhoneNumber(@RequestParam("userId") String userId) {
  513. try {
  514. MainInfo mainInfo = mainInfoService.findMainInfoById(userId);
  515. //TODO 验证码登录流程
  516. //如果不存在用户
  517. if (mainInfo == null) {
  518. return ResultVOUtil.error(UserEnum.USER_REGISTER_ERROR.getCode(), UserEnum.USER_REGISTER_ERROR.getMessage());
  519. }
  520. mainInfo.setTelephoneNumber(null);
  521. mainInfoService.addMainInfo(mainInfo);
  522. return ResultVOUtil.success();
  523. } catch (UserException e) {
  524. return ResultVOUtil.error(UserEnum.USER_REGISTER_ERROR.getCode(), UserEnum.USER_REGISTER_ERROR.getMessage());
  525. }
  526. }
  527. /**
  528. * 绑定微信信息
  529. * @param openid
  530. * @param unionid
  531. * @param userId
  532. * @return
  533. */
  534. @GetMapping("/bind_wx_info")
  535. public ResultVO userBindWXInfo(@RequestParam("openid") String openid,
  536. @RequestParam("unionid") String unionid,
  537. @RequestParam("userId") String userId) {
  538. try {
  539. MainInfo mainInfo = mainInfoService.findMainInfoById(userId);
  540. //TODO 验证码登录流程
  541. //如果不存在用户
  542. if (mainInfo == null) {
  543. return ResultVOUtil.error(UserEnum.USER_REGISTER_ERROR.getCode(), UserEnum.USER_REGISTER_ERROR.getMessage());
  544. }
  545. //需要检查微信是否被绑定过,如果wxInfo 表存在openid 对应的用户,提示微信已绑定,用户需绑定其他微信账号
  546. WxInfo wxInfo = wxInfoService.findWxInfoByOpenid(openid);
  547. if (wxInfo == null) {
  548. wxInfo = new WxInfo();
  549. wxInfo.setUnionid(unionid);
  550. wxInfo.setOpenid(openid);
  551. wxInfo.setUserId(userId);
  552. wxInfo.setCreateTime(DateUtil.date());
  553. wxInfo.setUpdateTime(DateUtil.date());
  554. wxInfoService.addWxInfo(wxInfo);
  555. // wxInfoService.saveReturnVo(CopyUtil.copy(wxInfo, WxInfoVo.class));
  556. } else {
  557. //提示用户微信已被使用
  558. return ResultVOUtil.error(UserEnum.USER_HAS_REGISTER_WX.getCode(), UserEnum.USER_HAS_REGISTER_WX.getMessage());
  559. }
  560. return ResultVOUtil.success();
  561. } catch (UserException e) {
  562. return ResultVOUtil.error(UserEnum.USER_REGISTER_ERROR.getCode(), UserEnum.USER_REGISTER_ERROR.getMessage());
  563. }
  564. }
  565. /**
  566. * 验证码登录
  567. * 2.4.15 版本后弃用
  568. * @param phoneNumber
  569. * @param code
  570. * @return
  571. */
  572. @GetMapping("/SMS_login")
  573. @Deprecated
  574. public ResultVO userRegistrationAndSMSLogin(String phoneNumber, String code) {
  575. String codeValue = redisSettingMap.getValue(RedisType.SMS,phoneNumber);
  576. if (!StringUtils.equals(codeValue, code)) {
  577. log.warn("【code校验】Redis 中查找不到验证码 {},==,{}", codeValue, code);
  578. return ResultVOUtil.error(UserEnum.USER_CODE_ERROR.getCode(), UserEnum.USER_CODE_ERROR.getMessage());
  579. }
  580. log.info("codeValue:" + codeValue);
  581. //token
  582. String token = UUID.randomUUID().toString();
  583. Integer expire = RedisConstant.EXPIRE;//过期时间
  584. Map<String, String> tokenMap = new HashMap<>();
  585. try {
  586. MainInfo mainInfo = mainInfoService.findMainInfoByPhoneNumber(phoneNumber);
  587. //TODO 验证码登录流程
  588. //如果不存在用户
  589. if (mainInfo == null) {
  590. //先main_info主表添加信息
  591. mainInfo = createMainInfo();
  592. mainInfo.setTelephoneNumber(phoneNumber);
  593. mainInfoService.addMainInfo(mainInfo);
  594. }
  595. //TODO 写入成功后,删除redis里面保存的code
  596. Boolean bSuccess = redisSettingMap.deleteValue(RedisType.SMS,phoneNumber);
  597. if (!bSuccess) {
  598. //删除不成功,redis不存在
  599. log.info("redis 没有对应的token");
  600. }
  601. tokenMap.put("userId", mainInfo.getUserId());
  602. redisTemplate.opsForHash().putAll(redisSettingMap.getTokenKey(token), tokenMap);
  603. redisTemplate.expire(redisSettingMap.getTokenKey(token), expire, TimeUnit.SECONDS);
  604. //返回一个token
  605. LoginVO loginVO = new LoginVO();
  606. loginVO.setToken(token);
  607. loginVO.setNewUser(bUserInfoByUserId(mainInfo.getUserId()));
  608. return ResultVOUtil.success(loginVO);
  609. } catch (UserException e) {
  610. log.error(e.getMessage(), e);
  611. return ResultVOUtil.error(UserEnum.USER_REGISTER_ERROR.getCode(), UserEnum.USER_REGISTER_ERROR.getMessage());
  612. }
  613. }
  614. /**
  615. * 根据不同类型账号注册登录
  616. * 手机或者邮箱
  617. * @param account
  618. * @param code
  619. * @param type
  620. * @return
  621. */
  622. @GetMapping("/SMS_login_from_type")
  623. public ResultVO userRegistrationAndSMSLogin(String account, String code, Integer type) {
  624. String codeValue = redisSettingMap.getValue(RedisType.SMS,account);
  625. if (!StringUtils.equals(codeValue, code)) {
  626. log.warn("【code校验】Redis 中查找不到验证码 {},==,{}", codeValue, code);
  627. return ResultVOUtil.error(UserEnum.USER_CODE_ERROR.getCode(), UserEnum.USER_CODE_ERROR.getMessage());
  628. }
  629. log.info("codeValue:" + codeValue);
  630. //token
  631. String token = UUID.randomUUID().toString();
  632. Integer expire = RedisConstant.EXPIRE;//过期时间
  633. Map<String, String> tokenMap = new HashMap<>();
  634. try {
  635. MainInfo mainInfo = null;
  636. if(type.equals(0)){
  637. mainInfo = mainInfoService.findMainInfoByPhoneNumber(account);
  638. }else if(type.equals(1)){
  639. mainInfo = mainInfoService.findMainInfoByEmail(account);
  640. }
  641. //TODO 验证码登录流程
  642. //如果不存在用户
  643. if (mainInfo == null) {
  644. //先main_info主表添加信息
  645. mainInfo = createMainInfo();
  646. if(type.equals(0)){
  647. mainInfo.setTelephoneNumber(account);
  648. }else if(type.equals(1)){
  649. mainInfo.setEmail(account);
  650. }
  651. mainInfoService.addMainInfo(mainInfo);
  652. }
  653. //TODO 写入成功后,删除redis里面保存的code
  654. Boolean bSuccess =redisSettingMap.deleteValue(RedisType.SMS, account);
  655. if (!bSuccess) {
  656. //删除不成功,redis不存在
  657. log.info("redis 没有对应的token");
  658. }
  659. tokenMap.put("userId", mainInfo.getUserId());
  660. // redisTemplate.opsForHash().putAll(redisSettingMap.getTokenKey(token), tokenMap);
  661. // redisTemplate.expire(redisSettingMap.getTokenKey(token), expire, TimeUnit.SECONDS);
  662. redisSettingMap.putToken(token,tokenMap);
  663. //返回一个token
  664. LoginVO loginVO = new LoginVO();
  665. loginVO.setToken(token);
  666. loginVO.setNewUser(bUserInfoByUserId(mainInfo.getUserId()));
  667. return ResultVOUtil.success(loginVO);
  668. } catch (UserException e) {
  669. log.error(e.getMessage(), e);
  670. return ResultVOUtil.error(UserEnum.USER_REGISTER_ERROR.getCode(), UserEnum.USER_REGISTER_ERROR.getMessage());
  671. }
  672. }
  673. /**
  674. * 密码登录
  675. * 2.4.10 版本后弃用
  676. * @param phoneNumber
  677. * @param password
  678. * @return
  679. */
  680. @GetMapping("/password_login")
  681. @Deprecated
  682. public ResultVO userPasswordLogin(String phoneNumber, String password) {
  683. try {
  684. MainInfo mainInfo = mainInfoService.findMainInfoByPhoneNumberAndPassword(phoneNumber, password);
  685. //TODO 密码登录流程判断
  686. // if(!StringUtils.equals(mainInfo.getTelephoneNumber(),phoneNumber)){
  687. // return ResultVOUtil.error(UserEnum.USER_NOT_PHONE_NUMBER.getCode(),UserEnum.USER_NOT_PHONE_NUMBER.getMessage());
  688. // }
  689. // if(!StringUtils.equals(mainInfo.getPassword(),password)){
  690. // return ResultVOUtil.error(UserEnum.USER_PASSWORD_ERROR.getCode(),UserEnum.USER_PASSWORD_ERROR.getMessage());
  691. // }
  692. if (mainInfo == null) {
  693. return ResultVOUtil.error(UserEnum.USER_PASSWORD_ERROR.getCode(), UserEnum.USER_PASSWORD_ERROR.getMessage());
  694. }
  695. //token
  696. String token = UUID.randomUUID().toString();
  697. Integer expire = RedisConstant.EXPIRE;//过期时间
  698. Map<String, String> tokenMap = new HashMap<>();
  699. //TODO 登录成功,返回对应的字段
  700. tokenMap.put("userId", mainInfo.getUserId());
  701. redisTemplate.opsForHash().putAll(redisSettingMap.getTokenKey(token), tokenMap);
  702. redisTemplate.expire(redisSettingMap.getTokenKey(token), expire, TimeUnit.SECONDS);
  703. //返回一个token
  704. LoginVO loginVO = new LoginVO();
  705. loginVO.setToken(token);
  706. loginVO.setNewUser(bUserInfoByUserId(mainInfo.getUserId()));
  707. return ResultVOUtil.success(loginVO);
  708. } catch (UserException e) {
  709. log.error(e.getMessage(), e);
  710. return ResultVOUtil.error(UserEnum.USER_REGISTER_ERROR.getCode(), UserEnum.USER_REGISTER_ERROR.getMessage());
  711. }
  712. }
  713. /**
  714. * 根据手机号或者邮箱进行密码登录
  715. *
  716. * @param account
  717. * @param password
  718. * @return
  719. */
  720. @GetMapping("/password_login_type")
  721. public ResultVO userPasswordLoginOnTheType(String account, String password,Integer type) {
  722. try {
  723. MainInfo mainInfo = null;
  724. if(type.equals(0)){
  725. mainInfo = mainInfoService.findMainInfoByPhoneNumberAndPassword(account, password);
  726. }else if(type.equals(1)){
  727. mainInfo = mainInfoService.findMainInfoByEmailAndPassword(account, password);
  728. }
  729. if (mainInfo == null) {
  730. return ResultVOUtil.error(UserEnum.USER_PASSWORD_ERROR.getCode(), UserEnum.USER_PASSWORD_ERROR.getMessage());
  731. }
  732. //token
  733. String token = UUID.randomUUID().toString();
  734. Integer expire = RedisConstant.EXPIRE;//过期时间
  735. Map<String, String> tokenMap = new HashMap<>();
  736. //TODO 登录成功,返回对应的字段
  737. tokenMap.put("userId", mainInfo.getUserId());
  738. // redisTemplate.opsForHash().putAll(redisSettingMap.getTokenKey(token), tokenMap);
  739. // redisTemplate.expire(redisSettingMap.getTokenKey(token), expire, TimeUnit.SECONDS);
  740. redisSettingMap.putToken(token,tokenMap);
  741. //返回一个token
  742. LoginVO loginVO = new LoginVO();
  743. loginVO.setToken(token);
  744. loginVO.setNewUser(bUserInfoByUserId(mainInfo.getUserId()));
  745. return ResultVOUtil.success(loginVO);
  746. } catch (UserException e) {
  747. log.error(e.getMessage(), e);
  748. return ResultVOUtil.error(UserEnum.USER_REGISTER_ERROR.getCode(), UserEnum.USER_REGISTER_ERROR.getMessage());
  749. }
  750. }
  751. /**
  752. * 登录时候,用来验证一下信息。
  753. * @return 返回一个bool判断是否是新用户
  754. */
  755. @GetMapping("/Verification_Info")
  756. public ResultVO VerificationInfo(@RequestParam(value = "token", required = false) String token,
  757. @RequestParam("userId") String userId) {
  758. //如果有token,刷新信息
  759. // if (null == token || token.isEmpty())
  760. // {
  761. // Integer expire = RedisConstant.EXPIRE;//过期时间
  762. // redisTemplate.expire(String.format(RedisConstant.TOKEN_PREFIX, token), expire, TimeUnit.SECONDS);
  763. // }
  764. //todo 假如删除了用户的main_info 信息(正常流程是不会删除),会导致客户的一直判断跳转新用户界面,
  765. // 如果需要清空用户信息,清除main_info 信息后,要删除对应的token值,
  766. try {
  767. mainInfoService.findMainInfoById(userId);
  768. LoginVO loginVO = new LoginVO();
  769. loginVO.setNewUser(bUserInfoByUserId(userId));
  770. return ResultVOUtil.success(loginVO);
  771. }catch (UserException e){
  772. return ResultVOUtil.error(ResultEnum.TOKEN_FILTER_ERROR);
  773. }
  774. }
  775. /**
  776. * 删除token
  777. *
  778. * @param request
  779. * @return
  780. */
  781. @GetMapping("/delete_token")
  782. public ResultVO delectToken(HttpServletRequest request) {
  783. String headToken = request.getHeader("token");
  784. if (StringUtils.isNotBlank(headToken)) {
  785. // Boolean bSuccess = redisTemplate.delete(String.format(RedisConstant.TOKEN_PREFIX, headToken));
  786. Boolean bSuccess = redisSettingMap.deleteValue(RedisType.TOKEN,headToken);
  787. if (!bSuccess) {
  788. //删除不成功,redis不存在,是非法token
  789. log.info("redis 没有对应的token");
  790. return ResultVOUtil.error(ResultEnum.TOKEN_IS_ILLEGAL.getCode(), ResultEnum.TOKEN_IS_ILLEGAL.getMessage());
  791. }
  792. }
  793. return ResultVOUtil.success();
  794. }
  795. @GetMapping("/client_apple_login")
  796. public ResultVO appleLogin(@RequestParam("identityToken") String identityToken,
  797. HttpServletResponse response,
  798. HttpServletRequest request) {
  799. //检查redis 的token 是否存在,存在则删除
  800. String headToken = request.getHeader("token");
  801. if (StringUtils.isNotBlank(headToken)) {
  802. // Boolean bSuccess = redisTemplate.delete(String.format(RedisConstant.TOKEN_PREFIX, headToken));
  803. Boolean bSuccess = redisSettingMap.deleteValue(RedisType.TOKEN,headToken);
  804. if (!bSuccess) {
  805. //删除不成功,redis不存在,是非法token
  806. log.info("redis 没有对应的token");
  807. }
  808. }
  809. //todo 处理identityToken,判断是否是非法,暂时默认全部合法
  810. try {
  811. //验证identityToken
  812. if(!AppleUtil.verify(identityToken)){
  813. log.info("identityToken:{}",ResultEnum.APPLE_LOGIN_VALIDATION_FAIL.getMessage());
  814. return ResultVOUtil.error(ResultEnum.APPLE_LOGIN_VALIDATION_FAIL.getCode(),
  815. ResultEnum.APPLE_LOGIN_VALIDATION_FAIL.getMessage());
  816. }
  817. //对identityToken解码
  818. JSONObject json = AppleUtil.parserIdentityToken(identityToken);
  819. if(json == null){
  820. log.info("identityToken:{}",ResultEnum.APPLE_LOGIN_TOKEN_FAIL.getMessage());
  821. return ResultVOUtil.error(ResultEnum.APPLE_LOGIN_TOKEN_FAIL.getCode(),
  822. ResultEnum.APPLE_LOGIN_TOKEN_FAIL.getMessage());
  823. }
  824. log.info("验证通过的json信息:{}",json);
  825. String token = UUID.randomUUID().toString();
  826. Integer expire = RedisConstant.EXPIRE;//过期时间
  827. Map<String, String> tokenMap = new HashMap<>();
  828. //1.userID 和 appleInfo数据库的appleId对比,没有用户的话,添加新增用户
  829. AppleInfo appleInfo = appleInfoService.findByAppleId(json.getString("sub"));
  830. //2. appleInfo 没有数据,添加新数据
  831. MainInfo mainInfo = new MainInfo();
  832. if (appleInfo == null) {
  833. //先main_info主表添加信息
  834. mainInfo = createMainInfo();
  835. mainInfoService.addMainInfo(mainInfo);
  836. //微信表添加信息 wx_info
  837. appleInfo = new AppleInfo();
  838. appleInfo.setUserId(mainInfo.getUserId());
  839. appleInfo.setAppleId(json.getString("sub"));
  840. appleInfo.setCreateTime(DateUtil.date());
  841. appleInfo.setUpdateTime(DateUtil.date());
  842. appleInfoService.addAppleInfo(appleInfo);
  843. } else {
  844. mainInfo = mainInfoService.findMainInfoById(appleInfo.getUserId());
  845. }
  846. //拿到用户userid
  847. tokenMap.put("userId", mainInfo.getUserId());
  848. tokenMap.put("appleId", appleInfo.getAppleId());
  849. //2.设置token 到redis
  850. //String.format(RedisConstant.TOKEN_PREFIX, token)
  851. // redisTemplate.opsForHash().putAll(redisSettingMap.getTokenKey(token), tokenMap);
  852. // redisTemplate.expire(redisSettingMap.getTokenKey(token), expire, TimeUnit.SECONDS);
  853. redisSettingMap.putToken(token,tokenMap);
  854. //3.设置token到cookie
  855. CookieUtil.set(response, CookieConstant.TOKEN, token, expire);
  856. //TODO 可以增加自己的逻辑,关联业务相关数据
  857. //用userInfo 来判断是否存在userInfo 表中,
  858. LoginVO loginVO = new LoginVO();
  859. loginVO.setToken(token);
  860. loginVO.setNewUser(bUserInfoByUserId(mainInfo.getUserId()));
  861. return ResultVOUtil.success(loginVO);
  862. } catch (UserException e) {
  863. log.error(e.getMessage(), e);
  864. return ResultVOUtil.error(e.getCode(), e.toString());
  865. } catch (Exception e){
  866. log.error("app wxLogin error:" + e.getMessage(),e);
  867. return ResultVOUtil.error(500, "apple login 系统错误");
  868. }
  869. }
  870. /**
  871. * 更新用户使用的客户端信息
  872. * @param clientForm
  873. * @return
  874. */
  875. @PostMapping("/add_client_info")
  876. public ResultVO addClientInfo(
  877. @Valid ClientForm clientForm) {
  878. ClientInfo clientInfo = clientInfoService.findClientInfoByUserId(clientForm.getUserId());
  879. if(clientInfo == null){
  880. clientInfo = new ClientInfo();
  881. }
  882. BeanUtils.copyProperties(clientForm, clientInfo, PropertyUtil.getNullPropertyNames(clientForm));
  883. // log.info("==={}",clientInfo);
  884. clientInfo = clientInfoService.AddClientInfo(clientInfo);
  885. return ResultVOUtil.success(clientInfo);
  886. }
  887. @GetMapping("/get_version_code_state")
  888. public ResultVO getVersionCodeState(@RequestParam("code") String code,
  889. @RequestParam(value = "platform", required = false) Integer platform ) {
  890. try {
  891. VersionCode versionCode = versionCodeService.findByCode(code);
  892. if(versionCode == null){
  893. return ResultVOUtil.error(ResultEnum.VERSION_CODE_NULL.getCode(), ResultEnum.VERSION_CODE_NULL.getMessage());
  894. }
  895. HashMap map = new HashMap();
  896. //platform 0:android 1:ios 2:all
  897. //getLimitPlatform 0:全都限制,1:限制android,2:限制ios,3:都不限制
  898. if(versionCode.getLimitPlatform().equals(0)
  899. ||(platform.equals(0) && versionCode.getLimitPlatform().equals(1)) // android
  900. ||(platform.equals(1) && versionCode.getLimitPlatform().equals(2))) // ios
  901. {
  902. map.put("showGame",false);
  903. map.put("showVideo",false);
  904. }else{
  905. map.put("showGame",versionCode.getIsShowGame().equals(1));
  906. map.put("showVideo",versionCode.getIsShowVideo().equals(1));
  907. }
  908. map.put("versionCode",versionCode.getCode());
  909. map.put("title",versionCode.getTitle());
  910. return ResultVOUtil.success(map);
  911. } catch (UserException e) {
  912. return ResultVOUtil.error(ResultEnum.VERSION_CODE_ERROR.getCode(), ResultEnum.VERSION_CODE_ERROR.getMessage());
  913. }
  914. }
  915. /**
  916. * 根据手机号或者邮箱获取验证码
  917. * 用验证码修改密码
  918. *
  919. * @param account
  920. * @param code
  921. * @return
  922. */
  923. @GetMapping("/SMS_modify_password")
  924. public ResultVO userModifyPassword(@RequestParam("account") String account,
  925. @RequestParam("code") String code,
  926. @RequestParam("type") Integer type,
  927. @RequestParam("password") String password,
  928. @RequestParam("userId") String userId) {
  929. String codeValue = redisSettingMap.getValue(RedisType.SMS, account);
  930. if (!StringUtils.equals(codeValue, code)) {
  931. return ResultVOUtil.error(UserEnum.USER_CODE_ERROR.getCode(), UserEnum.USER_CODE_ERROR.getMessage());
  932. }
  933. log.info("userModifyPassword codeValue:" + codeValue);
  934. try {
  935. MainInfo mainInfo = null;
  936. if(type.equals(0)){
  937. mainInfo = mainInfoService.findMainInfoByPhoneNumber(account);
  938. }else if(type.equals(1)){
  939. mainInfo = mainInfoService.findMainInfoByEmail(account);
  940. }
  941. //如果不存在用户
  942. if (mainInfo == null) {
  943. return ResultVOUtil.error(UserEnum.USER_REGISTER_ERROR.getCode(), UserEnum.USER_REGISTER_ERROR.getMessage());
  944. }
  945. //设置密码
  946. mainInfo.setPassword(password);
  947. mainInfoService.addMainInfo(mainInfo);
  948. //TODO 写入成功后,删除redis里面保存的code
  949. Boolean bSuccess = redisSettingMap.deleteValue(RedisType.SMS, account);
  950. if (!bSuccess) {
  951. //删除不成功,redis不存在
  952. log.info("redis 没有对应的token");
  953. }
  954. return ResultVOUtil.success();
  955. } catch (UserException e) {
  956. return ResultVOUtil.error(UserEnum.USER_REGISTER_ERROR.getCode(), UserEnum.USER_REGISTER_ERROR.getMessage());
  957. }
  958. }
  959. /**
  960. * 根据手机号或者邮箱,加旧密码,修改成新密码
  961. *
  962. */
  963. @GetMapping("/modify_password_from_account")
  964. public ResultVO userModifyPasswordFromAccount(@RequestParam("account") String account,
  965. @RequestParam("type") Integer type,
  966. @RequestParam("oldPassword") String oldPassword,
  967. @RequestParam("newPassword") String newPassword,
  968. @RequestParam("userId") String userId) {
  969. try {
  970. MainInfo mainInfo = null;
  971. if(type.equals(0)){
  972. mainInfo = mainInfoService.findMainInfoByPhoneNumber(account);
  973. }else if(type.equals(1)){
  974. mainInfo = mainInfoService.findMainInfoByEmail(account);
  975. }
  976. //如果不存在用户
  977. if (mainInfo == null) {
  978. return ResultVOUtil.error(UserEnum.USER_MODIFY_ACCOUNT_ERROR.getCode(), UserEnum.USER_MODIFY_ACCOUNT_ERROR.getMessage());
  979. }
  980. if(!mainInfo.getPassword().equals(oldPassword))
  981. {
  982. //如果旧密码不对,提示
  983. return ResultVOUtil.error(UserEnum.USER_OLD_PASSWORD_ERROR.getCode(), UserEnum.USER_OLD_PASSWORD_ERROR.getMessage());
  984. }
  985. //设置密码
  986. mainInfo.setPassword(newPassword);
  987. mainInfoService.addMainInfo(mainInfo);
  988. return ResultVOUtil.success();
  989. } catch (UserException e) {
  990. return ResultVOUtil.error(UserEnum.USER_MODIFY_ERROR.getCode(), UserEnum.USER_MODIFY_ERROR.getMessage());
  991. }
  992. }
  993. }