后台服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

797 line
32 KiB

  1. package com.iformall.controller;
  2. import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
  3. import com.alibaba.fastjson.JSON;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.google.code.kaptcha.Constants;
  6. import com.google.code.kaptcha.Producer;
  7. import com.iformall.annotation.AuthIgnore;
  8. import com.iformall.annotation.TenantIgnore;
  9. import com.iformall.common.ErrorCode;
  10. import com.iformall.common.Result;
  11. import com.iformall.common.ResultData;
  12. import com.iformall.domain.po.*;
  13. import com.iformall.domain.po.sm.InviteCodeInfo;
  14. import com.iformall.enums.*;
  15. import com.iformall.service.*;
  16. import com.iformall.service.cuser.CUserServiceFactory;
  17. import com.iformall.service.sm.InviteCodeInfoService;
  18. import com.iformall.service.sm.InviteCodeService;
  19. import com.iformall.service.sm.UserConsumptionPackageService;
  20. import com.iformall.service.sm.UserCreateVideoNumService;
  21. import com.iformall.utils.Constant;
  22. import com.iformall.utils.IPUtil;
  23. import com.iformall.utils.PasswordHelper;
  24. import com.iformall.utils.RedisCacheUtils;
  25. import io.swagger.annotations.Api;
  26. import io.swagger.annotations.ApiImplicitParam;
  27. import io.swagger.annotations.ApiImplicitParams;
  28. import io.swagger.annotations.ApiOperation;
  29. import org.apache.commons.io.IOUtils;
  30. import org.apache.commons.lang3.StringUtils;
  31. import org.apache.shiro.SecurityUtils;
  32. import org.slf4j.Logger;
  33. import org.slf4j.LoggerFactory;
  34. import org.springframework.beans.factory.annotation.Autowired;
  35. import org.springframework.beans.factory.annotation.Qualifier;
  36. import org.springframework.data.redis.core.RedisTemplate;
  37. import org.springframework.web.bind.annotation.*;
  38. import org.springframework.web.context.request.RequestContextHolder;
  39. import org.springframework.web.context.request.ServletRequestAttributes;
  40. import javax.imageio.ImageIO;
  41. import javax.servlet.ServletOutputStream;
  42. import javax.servlet.http.HttpServletRequest;
  43. import javax.servlet.http.HttpServletResponse;
  44. import javax.servlet.http.HttpSession;
  45. import java.awt.image.BufferedImage;
  46. import java.io.IOException;
  47. import java.util.Date;
  48. import java.util.HashMap;
  49. import java.util.List;
  50. import java.util.Map;
  51. @RestController
  52. @RequestMapping("/api/user")
  53. @Api(description = "用户登陆相关接口")
  54. public class WxUserGrantController extends BaseController {
  55. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  56. @Autowired
  57. private Producer producer;
  58. @Autowired
  59. @Qualifier("objectCommonRedisTemplate")
  60. RedisTemplate<String, Object> redisTemplate;
  61. @Autowired
  62. private WxCUserBasicInfoService wxCUserBasicInfoService;
  63. @Autowired
  64. private WxMsgValidationcodeService wxMsgValidationcodeService;
  65. @Autowired
  66. WxLevelConfigService wxLevelConfigService;
  67. @Autowired
  68. WxCUserTagsService wxCUserTagsService;
  69. @Autowired
  70. WxAppinfoService wxAppinfoService;
  71. @Autowired
  72. WxAuthorizerInfoService wxAuthorizerInfoService;
  73. @Autowired
  74. WxMerchantService wxMerchantService;
  75. @Autowired
  76. WxCouponOrderService wxCouponOrderService;
  77. @Autowired
  78. WxCreditHistoryService wxCreditHistoryService;
  79. @Autowired
  80. WxMallService mallService;
  81. @Autowired
  82. private QrCodeService qrCodeService;
  83. @Autowired
  84. private UserCreateVideoNumService userCreateVideoNumService;
  85. @Autowired
  86. private InviteCodeService inviteCodeService;
  87. @Autowired
  88. private InviteCodeInfoService inviteCodeInfoService;
  89. @Autowired
  90. private UserConsumptionPackageService userConsumptionPackageService;
  91. @Autowired
  92. private WxCUserAuthorityService wxCUserAuthorityService;
  93. @AuthIgnore
  94. @ApiOperation("验证码")
  95. @GetMapping("/captcha.jpg")
  96. public void captcha(HttpServletRequest request, HttpServletResponse response) {
  97. logger.debug("[" + getIpAddr() + "] WxUserGrantController::captcha");
  98. response.setHeader("Cache-Control", "no-store, no-cache");
  99. response.setContentType("image/jpeg");
  100. //生成文字验证码
  101. String text = producer.createText();
  102. //生成图片验证码
  103. BufferedImage image = producer.createImage(text);
  104. //保存到redis
  105. // String ipAddr = getIpAddr();
  106. // String key = Constant.captchaPrev + ":" + ipAddr;
  107. // RedisCacheUtils.cache(redisTemplate, key, text, 60);
  108. HttpSession session = request.getSession();
  109. session.setAttribute(Constants.KAPTCHA_SESSION_KEY, text);
  110. ServletOutputStream out = null;
  111. try {
  112. out = response.getOutputStream();
  113. ImageIO.write(image, "jpg", out);
  114. } catch (IOException e) {
  115. e.printStackTrace();
  116. } finally {
  117. IOUtils.closeQuietly(out);
  118. }
  119. }
  120. /**
  121. * 用户登录
  122. * 手机号+密码登陆
  123. *
  124. * @param map
  125. * @return
  126. */
  127. @AuthIgnore
  128. @PostMapping("/login")
  129. @ApiOperation(value = "用户登录", notes = "{\"phone\":\"string\",\"password\":\"string\",\"code\":\"string\"}")
  130. public ResultData loginByPhone(@RequestBody Map<String, String> map, HttpServletRequest request) {
  131. String ipAddr = getIpAddr();
  132. logger.debug("[" + ipAddr + "] WxUserGrantController::loginByPhone");
  133. String code = map.get("code");
  134. if (StringUtils.isBlank(code)) {
  135. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "请输入验证码");
  136. }
  137. HttpSession session = request.getSession();
  138. Object kaptcha = session.getAttribute(Constants.KAPTCHA_SESSION_KEY);
  139. if(kaptcha == null){
  140. return new ResultData(ErrorCode.KAPCHA_NOT_VALID);
  141. }
  142. session.removeAttribute(Constants.KAPTCHA_SESSION_KEY);
  143. if(!kaptcha.toString().equals(code)){
  144. return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "验证码不正确");
  145. }
  146. // String key = Constant.captchaPrev + ":" + ipAddr;
  147. // String code1 = RedisCacheUtils.getCacheString(redisTemplate, key);
  148. // if (StringUtils.isBlank(code1)) {
  149. // return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "验证码已过期");
  150. // }
  151. // if (!code1.equals(code)) {
  152. // return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "验证码不正确");
  153. // }
  154. String phone = map.get("phone");
  155. String password = map.get("password");
  156. if (StringUtils.isBlank(phone) || StringUtils.isBlank(password)) {
  157. return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "手机号或密码为空");
  158. }
  159. WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.findInfoByPhone(getTenantInfo(), phone);
  160. if (basicInfo == null) {
  161. return new ResultData(ErrorCode.USER_IS_EMPTY);
  162. }
  163. if(StringUtils.isBlank(basicInfo.getPassword())){
  164. return new ResultData(ErrorCode.USER_PASSWD_ERR.getCode(),"该用户未设置密码,请用其他方式登陆");
  165. }
  166. String encryptPassword = new PasswordHelper().encryptPassword(password);
  167. if (!encryptPassword.equals(basicInfo.getPassword())) {
  168. return new ResultData(ErrorCode.USER_PASSWD_ERR.getCode(), "手机号或密码错误");
  169. }
  170. wxCUserBasicInfoService.handleLoginUser(basicInfo);
  171. Map resultMap = new HashMap();
  172. // resultMap.put("phone", basicInfo.getPhone());
  173. resultMap.put("token", basicInfo.getToken());
  174. return new ResultData(resultMap);
  175. }
  176. /**
  177. * 用户登录
  178. * 邮箱+密码登陆
  179. *
  180. * @param map
  181. * @return
  182. */
  183. @AuthIgnore
  184. @PostMapping("/loginByEmail")
  185. @ApiOperation(value = "用户登录", notes = "{\"email\":\"string\",\"password\":\"string\",\"code\":\"string\"}")
  186. public ResultData loginByEmail(@RequestBody Map<String, String> map, HttpServletRequest request) {
  187. String ipAddr = getIpAddr();
  188. logger.debug("[" + ipAddr + "] WxUserGrantController::loginByEmail");
  189. String code = map.get("code");
  190. if (StringUtils.isBlank(code)) {
  191. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "请输入验证码");
  192. }
  193. HttpSession session = request.getSession();
  194. Object kaptcha = session.getAttribute(Constants.KAPTCHA_SESSION_KEY);
  195. if(kaptcha == null){
  196. return new ResultData(ErrorCode.KAPCHA_NOT_VALID);
  197. }
  198. session.removeAttribute(Constants.KAPTCHA_SESSION_KEY);
  199. if(!kaptcha.toString().equals(code)){
  200. return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "验证码不正确");
  201. }
  202. // String key = Constant.captchaPrev + ":" + ipAddr;
  203. // String code1 = RedisCacheUtils.getCacheString(redisTemplate, key);
  204. // if (StringUtils.isBlank(code1)) {
  205. // return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "验证码已过期");
  206. // }
  207. // if (!code1.equals(code)) {
  208. // return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "验证码不正确");
  209. // }
  210. String email = map.get("email");
  211. String password = map.get("password");
  212. if (StringUtils.isBlank(email) || StringUtils.isBlank(password)) {
  213. return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "邮箱或密码为空");
  214. }
  215. WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.findInfoByEmail(getTenantInfo(), email);
  216. if (basicInfo == null) {
  217. return new ResultData(ErrorCode.USER_IS_EMPTY);
  218. }
  219. if (EnumCUserBasicInfoStatus.NOT_ACTIVE.getCode().equals(basicInfo.getStatus())) {
  220. return new ResultData(ErrorCode.MEMBER_IS_NOT_ACTIVE);
  221. }
  222. String encryptPassword = new PasswordHelper().encryptPassword(password);
  223. if (!encryptPassword.equals(basicInfo.getPassword())) {
  224. return new ResultData(ErrorCode.USER_PASSWD_ERR.getCode(), "邮箱或密码错误");
  225. }
  226. wxCUserBasicInfoService.handleLoginUser(basicInfo);
  227. Map resultMap = new HashMap();
  228. // resultMap.put("phone", basicInfo.getPhone());
  229. resultMap.put("token", basicInfo.getToken());
  230. return new ResultData(resultMap);
  231. }
  232. /**
  233. * 用户登录
  234. * 手机+验证码登陆
  235. *
  236. * @param map
  237. * @return
  238. */
  239. @AuthIgnore
  240. @ApiOperation(value = "手机验证码登录", notes = "{\"phone\",\"string\",\"code\",\"string\"}")
  241. @PostMapping("/doLoginByPhone")
  242. public ResultData doLoginByPhone(@RequestBody Map<String, String> map, HttpServletResponse response) {
  243. String ipaddress = getIpAddr();
  244. logger.debug("[" + ipaddress + "] WxUserGrantController::doLoginByPhone");
  245. // String phone,String code,String pwd
  246. String phone = map.get("phone");
  247. String code = map.get("code");
  248. if (StringUtils.isBlank(phone)) {
  249. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "手机号不能为空");
  250. }
  251. if (StringUtils.isBlank(code)) {
  252. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空");
  253. }
  254. // check 验证码正确
  255. boolean isValidCode = false;
  256. try {
  257. isValidCode = wxMsgValidationcodeService.checkCodeValid(phone, code);
  258. } catch (Exception e) {
  259. return new ResultData(Result.ERROR, e.getMessage());
  260. }
  261. if (isValidCode) {
  262. WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.findInfoByPhone(getTenantInfo(), phone);
  263. if (basicInfo == null) {
  264. basicInfo = wxCUserBasicInfoService.register(getTenantInfo(), phone, null);
  265. }
  266. wxCUserBasicInfoService.handleLoginUser(basicInfo);
  267. Map resultMap = new HashMap();
  268. // resultMap.put("phone", basicInfo.getPhone());
  269. resultMap.put("token", basicInfo.getToken());
  270. return new ResultData(resultMap);
  271. } else {
  272. return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND);
  273. }
  274. }
  275. /**
  276. * 获取用户信息
  277. * @return
  278. */
  279. @PostMapping("/getBasicInfo")
  280. @ApiOperation(value = "用户登录", notes = "")
  281. public ResultData getBasicInfo() {
  282. logger.debug("[" + getIpAddr() + "] WxUserGrantController::getBasicInfo");
  283. WxCUserBasicInfo basicInfo = getCUser();
  284. basicInfo.setPassword(null);
  285. basicInfo.setIdCard(null);
  286. return new ResultData(basicInfo);
  287. }
  288. @AuthIgnore
  289. @ApiOperation("发送手机验证码")
  290. @GetMapping("sendLoginPhoneCode")
  291. @ApiImplicitParams({
  292. @ApiImplicitParam(name = "phone", value = "手机号", dataType = "String", paramType = "query", required = true)})
  293. public ResultData sendLoginPhoneCode(String phone) {
  294. logger.debug("[" + getIpAddr() + "] WxUserGrantController::sendlogincode");
  295. if (StringUtils.isBlank(phone)) {
  296. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "请输入手机号");
  297. }
  298. WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode();
  299. wxMsgValidationcode.setPhone(phone);
  300. wxMsgValidationcode.setType(EnumMsgModel.VALIDATION_CODE.getCode());
  301. return wxMsgValidationcodeService.sendvalidationcode(wxMsgValidationcode);
  302. }
  303. /**
  304. * 需要效验用户及图片验证码
  305. *
  306. * @param phone
  307. * @return
  308. */
  309. @AuthIgnore
  310. @ApiOperation("发送修改密码验证码")
  311. @GetMapping("sendPhoneCode")
  312. @ApiImplicitParams({
  313. @ApiImplicitParam(name = "phone", value = "手机号", dataType = "String", paramType = "query", required = true)})
  314. public ResultData sendPhoneCode(String phone, String code, HttpServletRequest request) {
  315. String ipAddr = getIpAddr();
  316. logger.debug("[" + ipAddr + "] WxUserGrantController::sendPhoneCode");
  317. if (StringUtils.isBlank(phone)) {
  318. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "请输入手机号");
  319. }
  320. if (StringUtils.isBlank(code)) {
  321. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "请输入验证码");
  322. }
  323. HttpSession session = request.getSession();
  324. Object kaptcha = session.getAttribute(Constants.KAPTCHA_SESSION_KEY);
  325. if(kaptcha == null){
  326. return new ResultData(ErrorCode.KAPCHA_NOT_VALID);
  327. }
  328. session.removeAttribute(Constants.KAPTCHA_SESSION_KEY);
  329. if(!kaptcha.toString().equals(code)){
  330. return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "验证码不正确");
  331. }
  332. // String key = Constant.captchaPrev + ":" + ipAddr;
  333. // String code1 = RedisCacheUtils.getCacheString(redisTemplate, key);
  334. // if (StringUtils.isBlank(code1)) {
  335. // return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "验证码已过期");
  336. // }
  337. // if (!code1.equals(code)) {
  338. // return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "验证码不正确");
  339. // }
  340. WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.findInfoByPhone(getTenantInfo(), phone);
  341. if (basicInfo == null) {
  342. return new ResultData(ErrorCode.USER_IS_EMPTY.getCode(), "该手机号未注册");
  343. }
  344. WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode();
  345. wxMsgValidationcode.setPhone(phone);
  346. wxMsgValidationcode.setType(EnumMsgModel.VALIDATION_CODE.getCode());
  347. return wxMsgValidationcodeService.sendvalidationcode(wxMsgValidationcode);
  348. }
  349. @AuthIgnore
  350. @ApiOperation(value = "手机号注册", notes = "{\"phone\",\"string\",\"code\",\"string\"}")
  351. @PostMapping("/doRegisterByPhone")
  352. public ResultData doRegisterByPhone(@RequestBody Map<String, String> params, HttpServletResponse response) {
  353. String ipaddress = getIpAddr();
  354. logger.debug("[" + ipaddress + "] WxUserGrantController::doRegisterByPhone");
  355. // String phone,String code,String pwd
  356. String phone = params.get("phone");
  357. String password = params.get("password");
  358. String code = params.get("code");
  359. if (StringUtils.isBlank(phone)) {
  360. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "手机号不能为空");
  361. }
  362. if (StringUtils.isBlank(password)) {
  363. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "密码不能为空");
  364. }
  365. // if (StringUtils.isBlank(code)) {
  366. // return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空");
  367. // }
  368. WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.findInfoByPhone(getTenantInfo(), phone);
  369. if (basicInfo != null) {
  370. return new ResultData(ErrorCode.MEMBER_IS_FOUND);
  371. }
  372. // check 验证码正确
  373. // boolean isValidCode = false;
  374. // try {
  375. // isValidCode = wxMsgValidationcodeService.checkCodeValid(phone,code);
  376. // } catch (Exception e) {
  377. // return new ResultData(Result.ERROR, e.getMessage());
  378. // }
  379. // if(isValidCode) {
  380. basicInfo = wxCUserBasicInfoService.register(getTenantInfo(), phone, password);
  381. Boolean aBoolean = userCreateVideoNumService.initializationUserCreateVideoNum(basicInfo.getId());
  382. if (!aBoolean) {
  383. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "初始化创建视频时间表失败");
  384. }
  385. return new ResultData();
  386. // } else {
  387. // return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND);
  388. // }
  389. }
  390. @AuthIgnore
  391. @ApiOperation(value = "邮箱注册", notes = "{\"email\",\"string\",\"code\",\"string\"}")
  392. @PostMapping("/doRegisterByEmail")
  393. public ResultData doRegisterByEmail(@RequestBody Map<String, String> params, HttpServletResponse response) {
  394. String ipaddress = getIpAddr();
  395. logger.debug("[" + ipaddress + "] WxUserGrantController::doRegisterByEmail");
  396. // String name,String username,String password
  397. String name = params.get("name");
  398. String email = params.get("email");
  399. String password = params.get("password");
  400. String code = params.get("code");
  401. if (StringUtils.isBlank(email)) {
  402. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "邮箱不能为空");
  403. }
  404. if (StringUtils.isBlank(password)) {
  405. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "密码不能为空");
  406. }
  407. // if (StringUtils.isBlank(code)) {
  408. // return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空");
  409. // }
  410. WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.findInfoByEmail(getTenantInfo(), email);
  411. if (basicInfo != null) {
  412. return new ResultData(ErrorCode.MEMBER_IS_FOUND);
  413. }
  414. // check 验证码正确
  415. // boolean isValidCode = false;
  416. // try {
  417. // isValidCode = wxMsgValidationcodeService.checkCodeValid(phone,code);
  418. // } catch (Exception e) {
  419. // return new ResultData(Result.ERROR, e.getMessage());
  420. // }
  421. // if(isValidCode) {
  422. basicInfo = wxCUserBasicInfoService.registerEmail(getTenantInfo(), email, password);
  423. Boolean aBoolean = userCreateVideoNumService.initializationUserCreateVideoNum(basicInfo.getId());
  424. if (!aBoolean) {
  425. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "初始化创建视频时间表失败");
  426. }
  427. return new ResultData();
  428. // } else {
  429. // return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND);
  430. // }
  431. }
  432. @AuthIgnore
  433. @ApiOperation(value = "发送激活邮件", notes = "{\"email\",\"string\",\"code\",\"string\"}")
  434. @PostMapping("/sendRegisterEmail")
  435. public ResultData sendRegisterEmail(@RequestBody Map<String, String> params, HttpServletResponse response) {
  436. String ipaddress = getIpAddr();
  437. logger.debug("[" + ipaddress + "] WxUserGrantController::sendRegisterEmail");
  438. // String name,String username,String password
  439. String email = params.get("email");
  440. String code = params.get("code");
  441. if (StringUtils.isBlank(email)) {
  442. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "邮箱不能为空");
  443. }
  444. // if (StringUtils.isBlank(code)) {
  445. // return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空");
  446. // }
  447. WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.findInfoByEmail(getTenantInfo(), email);
  448. if (basicInfo == null) {
  449. return new ResultData(ErrorCode.USER_IS_EMPTY);
  450. }
  451. if (!EnumCUserBasicInfoStatus.NOT_ACTIVE.getCode().equals(basicInfo.getStatus())) {
  452. return new ResultData(ErrorCode.MEMBER_IS_ACTIVE);
  453. }
  454. // check 验证码正确
  455. // boolean isValidCode = false;
  456. // try {
  457. // isValidCode = wxMsgValidationcodeService.checkCodeValid(phone,code);
  458. // } catch (Exception e) {
  459. // return new ResultData(Result.ERROR, e.getMessage());
  460. // }
  461. // if(isValidCode) {
  462. wxCUserBasicInfoService.sendTicketEmail(basicInfo, EnumMsgModel.EMAIL_ACTIVATION);
  463. return new ResultData();
  464. // } else {
  465. // return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND);
  466. // }
  467. }
  468. @AuthIgnore
  469. @ApiOperation(value = "激活", notes = "")
  470. @PostMapping("/doActivation")
  471. public ResultData doActivation(@RequestBody Map<String, String> params, HttpServletResponse response) {
  472. String ipaddress = getIpAddr();
  473. logger.debug("[" + ipaddress + "] WxUserGrantController::doActivation");
  474. //
  475. String ticket = params.get("ticket");
  476. String key = Constant.ticketPrev + ticket;
  477. Long userId = RedisCacheUtils.getCacheLong(redisTemplate, key);
  478. if (userId == null) {
  479. return new ResultData(ErrorCode.NET_TICKET_INVALID.getCode(), "ticket已过期");
  480. }
  481. WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.getById(userId);
  482. if (basicInfo == null) {
  483. return new ResultData(ErrorCode.USER_IS_EMPTY);
  484. }
  485. // if(!EnumCUserBasicInfoStatus.NOT_ACTIVE.getCode().equals(basicInfo.getStatus())){
  486. // return new ResultData(ErrorCode.MEMBER_IS_ACTIVE);
  487. // }
  488. wxCUserBasicInfoService.handleLoginUser(basicInfo);
  489. Map resultMap = new HashMap();
  490. // resultMap.put("username", basicInfo.getEmail());
  491. resultMap.put("token", basicInfo.getToken());
  492. return new ResultData(resultMap);
  493. }
  494. @AuthIgnore
  495. @ApiOperation(value = "手机验证码修改密码", notes = "{\"phone\",\"string\",\"code\",\"string\"}")
  496. @PostMapping("/updPass")
  497. public ResultData updPass(@RequestBody Map<String, String> params, HttpServletResponse response) {
  498. String ipaddress = getIpAddr();
  499. logger.debug("[" + ipaddress + "] WxUserGrantController::doLoginByPhone");
  500. // String phone,String code,String pwd
  501. String phone = params.get("phone");
  502. String code = params.get("code");
  503. String pwd = params.get("pwd");
  504. if (StringUtils.isBlank(phone)) {
  505. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "手机号不能为空");
  506. }
  507. if (StringUtils.isBlank(code)) {
  508. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空");
  509. }
  510. if (StringUtils.isBlank(pwd)) {
  511. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "密码不能为空");
  512. }
  513. WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.findInfoByPhone(getTenantInfo(), phone);
  514. if (basicInfo == null) {
  515. return new ResultData(ErrorCode.USER_PHONE_IS_NOT_FOUND.getCode(), "手机号还未注册");
  516. }
  517. // check 验证码正确
  518. boolean isValidCode = false;
  519. try {
  520. isValidCode = wxMsgValidationcodeService.checkCodeValid(phone, code);
  521. } catch (Exception e) {
  522. return new ResultData(Result.ERROR, e.getMessage());
  523. }
  524. if (isValidCode) {
  525. String encryptPassword = new PasswordHelper().encryptPassword(pwd);
  526. WxCUserBasicInfo basicInfoUpd = new WxCUserBasicInfo();
  527. basicInfoUpd.setId(basicInfo.getId());
  528. basicInfoUpd.setPassword(encryptPassword);
  529. wxCUserBasicInfoService.update(basicInfoUpd);
  530. return new ResultData();
  531. } else {
  532. return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND);
  533. }
  534. }
  535. @ApiOperation(value = "旧密码修改密码", notes = "{\"oldpwd\",\"string\",\"newpwd\",\"string\"}")
  536. @PostMapping("/oldUpdPass")
  537. public ResultData oldUpdPass(@RequestBody Map<String, String> params, HttpServletResponse response) {
  538. String ipaddress = getIpAddr();
  539. logger.debug("[" + ipaddress + "] WxUserGrantController::oldUpdPass");
  540. WxCUserBasicInfo basicInfo = getCUser();
  541. //
  542. String oldpwd = params.get("oldpwd");
  543. // String code = params.get("code");
  544. String newpwd = params.get("newpwd");
  545. if (StringUtils.isBlank(oldpwd)) {
  546. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "旧密码不能为空");
  547. }
  548. // if (StringUtils.isBlank(code)) {
  549. // return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空");
  550. // }
  551. if (StringUtils.isBlank(newpwd)) {
  552. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "新密码不能为空");
  553. }
  554. String encryptPassword = new PasswordHelper().encryptPassword(oldpwd);
  555. if (!encryptPassword.equals(basicInfo.getPassword())) {
  556. return new ResultData(ErrorCode.PASSWORD_ERROR.getCode(), "旧密码错误");
  557. }
  558. // check 验证码正确
  559. // boolean isValidCode = false;
  560. // try {
  561. // isValidCode = wxMsgValidationcodeService.checkCodeValid(phone,code);
  562. // } catch (Exception e) {
  563. // return new ResultData(Result.ERROR, e.getMessage());
  564. // }
  565. // if(isValidCode) {
  566. String newEncryptPassword = new PasswordHelper().encryptPassword(newpwd);
  567. WxCUserBasicInfo basicInfoUpd = new WxCUserBasicInfo();
  568. basicInfoUpd.setId(basicInfo.getId());
  569. basicInfoUpd.setPassword(newEncryptPassword);
  570. wxCUserBasicInfoService.update(basicInfoUpd);
  571. return new ResultData();
  572. // } else {
  573. // return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND);
  574. // }
  575. }
  576. @AuthIgnore
  577. @ApiOperation(value = "发送修改密码邮件", notes = "{\"email\",\"string\",\"code\",\"string\"}")
  578. @PostMapping("/sendUpdPwdEmail")
  579. public ResultData sendUpdPwdEmail(@RequestBody Map<String, String> params, HttpServletResponse response) {
  580. String ipaddress = getIpAddr();
  581. logger.debug("[" + ipaddress + "] WxUserGrantController::sendUpdPwdEmail");
  582. // String name,String username,String password
  583. String email = params.get("email");
  584. String code = params.get("code");
  585. if (StringUtils.isBlank(email)) {
  586. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "邮箱不能为空");
  587. }
  588. // if (StringUtils.isBlank(code)) {
  589. // return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空");
  590. // }
  591. WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.findInfoByEmail(getTenantInfo(), email);
  592. if (basicInfo == null) {
  593. return new ResultData(ErrorCode.USER_IS_EMPTY);
  594. }
  595. if (EnumCUserBasicInfoStatus.NOT_ACTIVE.getCode().equals(basicInfo.getStatus())) {
  596. return new ResultData(ErrorCode.MEMBER_IS_NOT_ACTIVE);
  597. }
  598. // check 验证码正确
  599. // boolean isValidCode = false;
  600. // try {
  601. // isValidCode = wxMsgValidationcodeService.checkCodeValid(phone,code);
  602. // } catch (Exception e) {
  603. // return new ResultData(Result.ERROR, e.getMessage());
  604. // }
  605. // if(isValidCode) {
  606. wxCUserBasicInfoService.sendTicketEmail(basicInfo, EnumMsgModel.EMAIL_UPD_PWD);
  607. return new ResultData();
  608. // } else {
  609. // return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND);
  610. // }
  611. }
  612. @AuthIgnore
  613. @ApiOperation(value = "修改密码", notes = "{\"username\",\"string\",\"code\",\"string\"}")
  614. @PostMapping("/doUpdPass")
  615. public ResultData doUpdPass(@RequestBody Map<String, String> params, HttpServletResponse response) {
  616. String ipaddress = getIpAddr();
  617. logger.debug("[" + ipaddress + "] WxUserGrantController::doUpdPass");
  618. //
  619. String ticket = params.get("ticket");
  620. String key = Constant.ticketPrev + ticket;
  621. Long userId = RedisCacheUtils.getCacheLong(redisTemplate, key);
  622. if (userId == null) {
  623. return new ResultData(ErrorCode.NET_TICKET_INVALID.getCode(), "已过期");
  624. }
  625. WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.getById(userId);
  626. if (basicInfo == null) {
  627. return new ResultData(ErrorCode.USER_IS_EMPTY);
  628. }
  629. String pwd = params.get("pwd");
  630. if (StringUtils.isBlank(pwd)) {
  631. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "密码不能为空");
  632. }
  633. String encryptPassword = new PasswordHelper().encryptPassword(pwd);
  634. WxCUserBasicInfo basicInfoUpd = new WxCUserBasicInfo();
  635. basicInfoUpd.setId(basicInfo.getId());
  636. basicInfoUpd.setPassword(encryptPassword);
  637. wxCUserBasicInfoService.update(basicInfoUpd);
  638. return new ResultData();
  639. }
  640. @ApiOperation("登出")
  641. @GetMapping("/logout")
  642. public ResultData logout() {
  643. logger.debug("[" + getIpAddr() + "] WxUserGrantController::logout");
  644. wxCUserBasicInfoService.logout(getCUser());
  645. return new ResultData();
  646. }
  647. @ApiOperation("生成邀请码")
  648. @GetMapping("/inviteCode")
  649. public ResultData inviteCode() {
  650. logger.debug("[" + getIpAddr() + "] WxUserGrantController::inviteCode");
  651. String code = inviteCodeService.inviteCode(getMemberId());
  652. return new ResultData(code);
  653. }
  654. @ApiOperation("使用邀请码")
  655. @GetMapping("/useCode")
  656. @ApiImplicitParam(name = "code", value = "code", dataType = "String", paramType = "query", required = true)
  657. public ResultData useCode(String code) {
  658. logger.debug("[" + getIpAddr() + "] WxUserGrantController::useCode");
  659. return inviteCodeInfoService.useCode(getCUser(), code);
  660. }
  661. @ApiOperation("是否使用邀请码判断")
  662. @GetMapping("/isUse")
  663. public ResultData isUse() {
  664. logger.debug("[" + getIpAddr() + "] WxUserGrantController::isUse");
  665. Boolean use = inviteCodeInfoService.isUse(getCUser());
  666. return new ResultData(use);
  667. }
  668. @ApiOperation("查询哪些用户使用了当前账户的邀请码")
  669. @GetMapping("/getUseCodeUser")
  670. public ResultData getUseCodeUser() {
  671. logger.debug("[" + getIpAddr() + "] WxUserGrantController::getUseCodeUser");
  672. List<InviteCodeInfo> useCodeUser = inviteCodeInfoService.getUseCodeUser(getCUser());
  673. return new ResultData(useCodeUser);
  674. }
  675. @ApiOperation("编辑用户头像和名称")
  676. @PostMapping("/updUserInfo")
  677. public ResultData updUserInfo(@RequestBody WxCUserBasicInfo wxCUserBasicInfo) {
  678. logger.debug("[" + getIpAddr() + "] WxUserGrantController::updUserInfo");
  679. wxCUserBasicInfoService.updUserInfo(wxCUserBasicInfo, getMemberId());
  680. return new ResultData();
  681. }
  682. @ApiOperation("获取用户头像和名称")
  683. @GetMapping("/getUserInfo")
  684. public ResultData getUserInfo() {
  685. logger.debug("[" + getIpAddr() + "] WxUserGrantController::getUserInfo");
  686. WxCUserBasicInfo userBasicInfo = wxCUserBasicInfoService.getById(getMemberId());
  687. return new ResultData(userBasicInfo);
  688. }
  689. @AuthIgnore
  690. @ApiOperation("套餐档次查询")
  691. @GetMapping("/getPackageInfo")
  692. @Deprecated
  693. public ResultData getPackageInfo() {
  694. logger.debug("[" + getIpAddr() + "] WxUserGrantController::getPackageInfo");
  695. return new ResultData(userConsumptionPackageService.getPackageInfo());
  696. }
  697. }