package com.matrix.system.shopXcx.api.action; import com.alibaba.fastjson.JSON; import com.matrix.component.tools.AES; import com.matrix.core.pojo.AjaxResult; import com.matrix.core.tools.LogUtil; import com.matrix.core.tools.StringUtils; import com.matrix.system.common.init.UserCacheManager; import com.matrix.system.hive.bean.SysVipInfo; import com.matrix.system.hive.dao.SysVipInfoDao; import com.matrix.system.shopXcx.api.pojo.BindingPhoneNumberPOJO; import com.matrix.system.shopXcx.api.tools.SMSVerifiTools; import com.matrix.system.shopXcx.api.vo.DataDecipheringVo; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.RandomStringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Objects; /** * @author jiangyouyao * @description 绑定手机号 * @date 2019-07-17 10:15 */ @CrossOrigin(origins = "*", maxAge = 3600) @Controller @RequestMapping(value = "wxapi/shopBindingPhoneNumber") public class WxBindingPhoneNumber { @Autowired private SMSVerifiTools sMSVerifiTools; @Autowired private SysVipInfoDao sysVipInfoDao; @Autowired private UserCacheManager userCacheManager; @Value("${evn}") private String evn; /** * 获取手机验证码 * * @param * @return */ @PostMapping("/getPhonVerifyCode/{phoneNumber}") @ResponseBody public AjaxResult getPhonVerifyCode(HttpServletRequest request, HttpServletResponse response, @PathVariable("phoneNumber") String phoneNumber) { //首先判断该手机号是否被绑定过 if (StringUtils.isBlank(phoneNumber)) { return new AjaxResult(AjaxResult.STATUS_FAIL, "手机号码不能为空"); } SysVipInfo sysVipInfo = new SysVipInfo(); sysVipInfo.setPhone(phoneNumber); List bizUsers = sysVipInfoDao.selectByModel(sysVipInfo); if (CollectionUtils.isNotEmpty(bizUsers) && bizUsers.size() > 0) { return new AjaxResult(AjaxResult.STATUS_FAIL, "该手机号已被绑定"); } //生成短信验证码 String randomCode = RandomStringUtils.randomNumeric(4); //将短信验证码保存到redis中,设置30分钟失效 //TODO 修复这个功能 //redisClient.saveValue("phonVerifyCode" + phoneNumber, randomCode, 1800); try { //编辑短信内容 String msg = "您的验证码为:" + randomCode + ",该验证码仅用于身份验证,30分钟内有效,请勿泄露于他人。"; //调用工具类发送短信发送短信码 sMSVerifiTools.sendMsg(phoneNumber, msg); LogUtil.info("调用了短信接口"); } catch (Exception e) { LogUtil.info("手机验证码发送失败。。。", e); return new AjaxResult(AjaxResult.STATUS_FAIL, "手机验证码发送失败"); } AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, "手机验证码发送成功"); return result; } /** * @param bindingPhoneNumber * @return 返回类型 AjaxResult * 绑定手机号码 * @author:jiangyouyao */ @PostMapping("/bindingPhoneNumber") @ResponseBody public AjaxResult bindingPhoneNumber(@RequestBody BindingPhoneNumberPOJO bindingPhoneNumber) { if (StringUtils.isBlank(bindingPhoneNumber.getPhoneNumber())) { return new AjaxResult(AjaxResult.STATUS_FAIL, "手机号码不能为空"); } SysVipInfo loginUser = userCacheManager.getLoginUser(); SysVipInfo oldeUser = sysVipInfoDao.selectByPhone(bindingPhoneNumber.getPhoneNumber(), loginUser.getCompanyId()); if(oldeUser!=null && !Objects.equals(oldeUser.getId(),loginUser.getId())){ oldeUser.setIsSales(loginUser.getIsSales()); oldeUser.setOpenId(loginUser.getOpenId()); oldeUser.setSessionKey(loginUser.getSessionKey()); oldeUser.setPhoto(loginUser.getAvatarUrl()); oldeUser.setAvatarUrl(loginUser.getAvatarUrl()); sysVipInfoDao.update(oldeUser); LogUtil.info("绑定手机号码删除老会员openId。。"+ JSON.toJSONString(loginUser)); // sysVipInfoDao.deleteLogicByIds(Arrays.asList(loginUser.getId())); loginUser.setOpenId("--"); loginUser.setPhone("--"); sysVipInfoDao.update(loginUser); String token = userCacheManager.saveUserInfo(oldeUser); AjaxResult result = AjaxResult.buildSuccessInstance("绑定成功"); result.putInMap("token",token); result.putInMap("userInfo",oldeUser); return result; }else{ //验证通过将手机号加入相应的用户数据中 SysVipInfo sysVipInfo = new SysVipInfo(); sysVipInfo.setId(loginUser.getId()); if(loginUser.getShopId()==null){ sysVipInfo.setShopId(bindingPhoneNumber.getShopId()); } sysVipInfo.setPhone(bindingPhoneNumber.getPhoneNumber()); sysVipInfoDao.update(sysVipInfo); return new AjaxResult(AjaxResult.STATUS_SUCCESS, "绑定成功"); } } /** * 手机号码解密 * * @param dataDecipheringVo * @return * @author JIANGYOUYAO * @email 935090232@qq.com * @date 2018年8月28日 */ @RequestMapping(value = "/deciphering") public @ResponseBody AjaxResult deciphering(@RequestBody DataDecipheringVo dataDecipheringVo) { SysVipInfo loginUser = userCacheManager.getLoginUser(); String session_key = loginUser.getSessionKey(); LogUtil.debug(dataDecipheringVo.toString()); String jsonResult = AES.wxDecrypt(dataDecipheringVo.getEncryptedData(), session_key, dataDecipheringVo.getIv()); AjaxResult result = new AjaxResult(); result.setStatus(AjaxResult.STATUS_SUCCESS); result.putInMap("decipher", jsonResult); return result; } }