diff --git a/suimangCApi/src/main/java/com/iformall/controller/WxUserGrantController.java b/suimangCApi/src/main/java/com/iformall/controller/WxUserGrantController.java index 4617921..a4859a9 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/WxUserGrantController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/WxUserGrantController.java @@ -150,7 +150,7 @@ public class WxUserGrantController extends BaseController { String encryptPassword = new PasswordHelper().encryptPassword(password); if(!encryptPassword.equals(basicInfo.getPassword())){ - return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "手机号或密码错误"); + return new ResultData(ErrorCode.USER_PASSWD_ERR.getCode(), "手机号或密码错误"); } wxCUserBasicInfoService.handleLoginUser(basicInfo); Map resultMap = new HashMap(); @@ -190,13 +190,13 @@ public class WxUserGrantController extends BaseController { return new ResultData(ErrorCode.USER_IS_EMPTY); } if(EnumCUserBasicInfoStatus.NOT_ACTIVE.getCode().equals(basicInfo.getStatus())){ - return new ResultData(ErrorCode.MEMBER_IS_LOCKED.getCode(),"该用户未激活"); + return new ResultData(ErrorCode.MEMBER_IS_NOT_ACTIVE); } String encryptPassword = new PasswordHelper().encryptPassword(password); if(!encryptPassword.equals(basicInfo.getPassword())){ - return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "邮箱或密码错误"); + return new ResultData(ErrorCode.USER_PASSWD_ERR.getCode(), "邮箱或密码错误"); } wxCUserBasicInfoService.handleLoginUser(basicInfo); Map resultMap = new HashMap(); @@ -205,6 +205,45 @@ public class WxUserGrantController extends BaseController { return new ResultData(resultMap); } + @AuthIgnore + @ApiOperation(value = "手机验证码登录", notes = "{\"phone\",\"string\",\"code\",\"string\"}") + @PostMapping("/doLoginByPhone") + public ResultData doLoginByPhone(@RequestBody Map params, HttpServletResponse response) { + String ipaddress = getIpAddr(); + logger.debug("[" + ipaddress + "] WxUserGrantController::doLoginByPhone"); + // String phone,String code,String pwd + String phone = params.get("phone"); + String code = params.get("code"); + + if (StringUtils.isBlank(phone)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "手机号不能为空"); + } + if (StringUtils.isBlank(code)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空"); + } + + // check 验证码正确 + boolean isValidCode = false; + try { + isValidCode = wxMsgValidationcodeService.checkCodeValid(phone,code); + } catch (Exception e) { + return new ResultData(Result.ERROR, e.getMessage()); + } + if(isValidCode) { + WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.findInfoByPhone(getTenantInfo(), phone); + if(basicInfo == null){ + basicInfo = wxCUserBasicInfoService.register(getTenantInfo(),phone,null); + } + wxCUserBasicInfoService.handleLoginUser(basicInfo); + Map resultMap = new HashMap(); +// resultMap.put("phone", basicInfo.getPhone()); + resultMap.put("token", basicInfo.getToken()); + return new ResultData(resultMap); + } else { + return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND); + } + } + @AuthIgnore @ApiOperation("发送手机验证码") @GetMapping("sendLoginPhoneCode") @@ -261,66 +300,73 @@ public class WxUserGrantController extends BaseController { return wxMsgValidationcodeService.sendvalidationcode(wxMsgValidationcode); } + + @AuthIgnore - @ApiOperation(value = "手机验证码登录", notes = "{\"phone\",\"string\",\"code\",\"string\"}") - @PostMapping("/doLoginByPhone") - public ResultData doLoginByPhone(@RequestBody Map params, HttpServletResponse response) { + @ApiOperation(value = "手机号注册", notes = "{\"phone\",\"string\",\"code\",\"string\"}") + @PostMapping("/doRegisterByPhone") + public ResultData doRegisterByPhone(@RequestBody Map params, HttpServletResponse response) { String ipaddress = getIpAddr(); - logger.debug("[" + ipaddress + "] WxUserGrantController::doLoginByPhone"); + logger.debug("[" + ipaddress + "] WxUserGrantController::doRegisterByPhone"); // String phone,String code,String pwd String phone = params.get("phone"); + String password = params.get("password"); String code = params.get("code"); if (StringUtils.isBlank(phone)) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "手机号不能为空"); } - if (StringUtils.isBlank(code)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空"); + if (StringUtils.isBlank(password)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "密码不能为空"); } +// if (StringUtils.isBlank(code)) { +// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空"); +// } + WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.findInfoByPhone(getTenantInfo(), phone); + if(basicInfo != null){ + return new ResultData(ErrorCode.USER_PHONE_IS_FOUND); + } + // check 验证码正确 - boolean isValidCode = false; - try { - isValidCode = wxMsgValidationcodeService.checkCodeValid(phone,code); - } catch (Exception e) { - return new ResultData(Result.ERROR, e.getMessage()); - } - if(isValidCode) { - WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.findInfoByPhone(getTenantInfo(), phone); - if(basicInfo == null){ - basicInfo = wxCUserBasicInfoService.register(getTenantInfo(),phone,null); - } - wxCUserBasicInfoService.handleLoginUser(basicInfo); - Map resultMap = new HashMap(); - resultMap.put("phone", basicInfo.getPhone()); - resultMap.put("token", basicInfo.getToken()); - return new ResultData(resultMap); - } else { - return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND); - } +// boolean isValidCode = false; +// try { +// isValidCode = wxMsgValidationcodeService.checkCodeValid(phone,code); +// } catch (Exception e) { +// return new ResultData(Result.ERROR, e.getMessage()); +// } +// if(isValidCode) { + basicInfo = wxCUserBasicInfoService.register(getTenantInfo(),phone,password); + return new ResultData(); +// } else { +// return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND); +// } } @AuthIgnore - @ApiOperation(value = "手机号注册", notes = "{\"phone\",\"string\",\"code\",\"string\"}") - @PostMapping("/doRegisterByPhone") - public ResultData doRegisterByPhone(@RequestBody Map params, HttpServletResponse response) { + @ApiOperation(value = "邮箱注册", notes = "{\"email\",\"string\",\"code\",\"string\"}") + @PostMapping("/doRegisterByEmail") + public ResultData doRegisterByEmail(@RequestBody Map params, HttpServletResponse response) { String ipaddress = getIpAddr(); - logger.debug("[" + ipaddress + "] WxUserGrantController::doRegisterByPhone"); - // String phone,String code,String pwd - String phone = params.get("phone"); + logger.debug("[" + ipaddress + "] WxUserGrantController::doRegisterByEmail"); + // String name,String username,String password + String name = params.get("name"); + String email = params.get("email"); String password = params.get("password"); String code = params.get("code"); - if (StringUtils.isBlank(phone)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "手机号不能为空"); + if (StringUtils.isBlank(email)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "邮箱不能为空"); } if (StringUtils.isBlank(password)) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "密码不能为空"); } + // if (StringUtils.isBlank(code)) { // return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空"); // } - WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.findInfoByPhone(getTenantInfo(), phone); + + WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.findInfoByEmail(getTenantInfo(), email); if(basicInfo != null){ return new ResultData(ErrorCode.USER_PHONE_IS_FOUND); } @@ -334,13 +380,83 @@ public class WxUserGrantController extends BaseController { // return new ResultData(Result.ERROR, e.getMessage()); // } // if(isValidCode) { - basicInfo = wxCUserBasicInfoService.register(getTenantInfo(),phone,password); - return new ResultData(); + basicInfo = wxCUserBasicInfoService.registerEmail(getTenantInfo(),email,password); + return new ResultData(); +// } else { +// return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND); +// } + } + + @AuthIgnore + @ApiOperation(value = "发送激活邮件", notes = "{\"email\",\"string\",\"code\",\"string\"}") + @PostMapping("/sendRegisterEmail") + public ResultData sendRegisterEmail(@RequestBody Map params, HttpServletResponse response) { + String ipaddress = getIpAddr(); + logger.debug("[" + ipaddress + "] WxUserGrantController::sendRegisterEmail"); + // String name,String username,String password + String email = params.get("email"); + String code = params.get("code"); + + if (StringUtils.isBlank(email)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "邮箱不能为空"); + } + +// if (StringUtils.isBlank(code)) { +// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空"); +// } + + WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.findInfoByEmail(getTenantInfo(), email); + if(basicInfo == null){ + return new ResultData(ErrorCode.USER_IS_EMPTY); + } + if(!EnumCUserBasicInfoStatus.NOT_ACTIVE.getCode().equals(basicInfo.getStatus())){ + return new ResultData(ErrorCode.MEMBER_IS_ACTIVE); + } + + + // check 验证码正确 +// boolean isValidCode = false; +// try { +// isValidCode = wxMsgValidationcodeService.checkCodeValid(phone,code); +// } catch (Exception e) { +// return new ResultData(Result.ERROR, e.getMessage()); +// } +// if(isValidCode) { + wxCUserBasicInfoService.sendTicketEmail(basicInfo,EnumMsgModel.EMAIL_ACTIVATION); + return new ResultData(); // } else { // return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND); // } } + @AuthIgnore + @ApiOperation(value = "激活", notes = "") + @PostMapping("/doActivation") + public ResultData doActivation(@RequestBody Map params, HttpServletResponse response) { + String ipaddress = getIpAddr(); + logger.debug("[" + ipaddress + "] WxUserGrantController::doActivation"); + // + String ticket = params.get("ticket"); + String key = Constant.ticketPrev + ticket; + Long userId = RedisCacheUtils.getCacheLong(redisTemplate, key); + if(userId == null){ + return new ResultData(ErrorCode.NET_TICKET_INVALID.getCode(),"ticket已过期"); + } + WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.getById(userId, getTenantInfo().getFinalTenantId()); + if(basicInfo == null){ + return new ResultData(ErrorCode.USER_IS_EMPTY); + } + if(!EnumCUserBasicInfoStatus.NOT_ACTIVE.getCode().equals(basicInfo.getStatus())){ + return new ResultData(ErrorCode.MEMBER_IS_ACTIVE); + } + + wxCUserBasicInfoService.handleLoginUser(basicInfo); + Map resultMap = new HashMap(); +// resultMap.put("username", basicInfo.getEmail()); + resultMap.put("token", basicInfo.getToken()); + return new ResultData(resultMap); + } + @AuthIgnore @ApiOperation(value = "手机验证码修改密码", notes = "{\"phone\",\"string\",\"code\",\"string\"}") @PostMapping("/updPass") @@ -385,6 +501,126 @@ public class WxUserGrantController extends BaseController { } } + @ApiOperation(value = "旧密码修改密码", notes = "{\"oldpwd\",\"string\",\"newpwd\",\"string\"}") + @PostMapping("/oldUpdPass") + public ResultData oldUpdPass(@RequestBody Map params, HttpServletResponse response) { + String ipaddress = getIpAddr(); + logger.debug("[" + ipaddress + "] WxUserGrantController::oldUpdPass"); + + WxCUserBasicInfo basicInfo = getCUser(); + // + String oldpwd = params.get("oldpwd"); +// String code = params.get("code"); + String newpwd = params.get("newpwd"); + + if (StringUtils.isBlank(oldpwd)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "旧密码不能为空"); + } +// if (StringUtils.isBlank(code)) { +// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空"); +// } + if (StringUtils.isBlank(newpwd)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "新密码不能为空"); + } + + String encryptPassword = new PasswordHelper().encryptPassword(oldpwd); + + if(!encryptPassword.equals(basicInfo.getPassword())){ + return new ResultData(ErrorCode.PASSWORD_ERROR.getCode(), "旧密码错误"); + } + + + // check 验证码正确 +// boolean isValidCode = false; +// try { +// isValidCode = wxMsgValidationcodeService.checkCodeValid(phone,code); +// } catch (Exception e) { +// return new ResultData(Result.ERROR, e.getMessage()); +// } +// if(isValidCode) { + String newEncryptPassword = new PasswordHelper().encryptPassword(newpwd); + WxCUserBasicInfo basicInfoUpd = new WxCUserBasicInfo(); + basicInfoUpd.setId(basicInfo.getId()); + basicInfoUpd.setPassword(newEncryptPassword); + wxCUserBasicInfoService.update(basicInfoUpd); + return new ResultData(); +// } else { +// return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND); +// } + } + + @AuthIgnore + @ApiOperation(value = "发送修改密码邮件", notes = "{\"email\",\"string\",\"code\",\"string\"}") + @PostMapping("/sendUpdPwdEmail") + public ResultData sendUpdPwdEmail(@RequestBody Map params, HttpServletResponse response) { + String ipaddress = getIpAddr(); + logger.debug("[" + ipaddress + "] WxUserGrantController::sendUpdPwdEmail"); + // String name,String username,String password + String email = params.get("email"); + String code = params.get("code"); + + if (StringUtils.isBlank(email)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "邮箱不能为空"); + } + +// if (StringUtils.isBlank(code)) { +// return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空"); +// } + + WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.findInfoByEmail(getTenantInfo(), email); + if(basicInfo == null){ + return new ResultData(ErrorCode.USER_IS_EMPTY); + } + if(EnumCUserBasicInfoStatus.NOT_ACTIVE.getCode().equals(basicInfo.getStatus())){ + return new ResultData(ErrorCode.MEMBER_IS_NOT_ACTIVE); + } + + + // check 验证码正确 +// boolean isValidCode = false; +// try { +// isValidCode = wxMsgValidationcodeService.checkCodeValid(phone,code); +// } catch (Exception e) { +// return new ResultData(Result.ERROR, e.getMessage()); +// } +// if(isValidCode) { + wxCUserBasicInfoService.sendTicketEmail(basicInfo,EnumMsgModel.EMAIL_UPD_PWD); + return new ResultData(); +// } else { +// return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND); +// } + } + + @AuthIgnore + @ApiOperation(value = "修改密码", notes = "{\"username\",\"string\",\"code\",\"string\"}") + @PostMapping("/doUpdPass") + public ResultData doUpdPass(@RequestBody Map params, HttpServletResponse response) { + String ipaddress = getIpAddr(); + logger.debug("[" + ipaddress + "] WxUserGrantController::doUpdPass"); + // + String ticket = params.get("ticket"); + String key = Constant.ticketPrev + ticket; + Long userId = RedisCacheUtils.getCacheLong(redisTemplate, key); + if(userId == null){ + return new ResultData(ErrorCode.NET_TICKET_INVALID.getCode(),"已过期"); + } + WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.getById(userId, getTenantInfo().getFinalTenantId()); + if(basicInfo == null){ + return new ResultData(ErrorCode.USER_IS_EMPTY); + } + String pwd = params.get("pwd"); + if (StringUtils.isBlank(pwd)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "密码不能为空"); + } + + String encryptPassword = new PasswordHelper().encryptPassword(pwd); + WxCUserBasicInfo basicInfoUpd = new WxCUserBasicInfo(); + basicInfoUpd.setId(basicInfo.getId()); + basicInfoUpd.setPassword(encryptPassword); + wxCUserBasicInfoService.update(basicInfoUpd); + return new ResultData(); + } + @ApiOperation("登出") @GetMapping("/logout") public ResultData logout() { diff --git a/suimangService/src/main/java/com/iformall/common/ErrorCode.java b/suimangService/src/main/java/com/iformall/common/ErrorCode.java index b776ee6..db59bbb 100644 --- a/suimangService/src/main/java/com/iformall/common/ErrorCode.java +++ b/suimangService/src/main/java/com/iformall/common/ErrorCode.java @@ -61,6 +61,7 @@ public enum ErrorCode{ LOGIN_DENIED(1051, "登录失败"), NET_TOKEN_INVALID(1052, "TOKEN无效"), NET_TOKEN_EMPTY(1053, "TOKEN不能为空"), + NET_TICKET_INVALID(1054, "ticket已过期"), /** * 第三方开发者 @@ -99,6 +100,8 @@ public enum ErrorCode{ USER_BIRTHDATE_AFTER(2109, "出生日期大于当前日期"), USER_APPINFO_NOT_EXIST(2110,"当前登录用户APP为空"), USER_APPINFO_NOFUND_PAYACCOUNT(2111,"当前app找不到payAccount"), + MEMBER_IS_NOT_ACTIVE(2112, "当前会员未激活"), + MEMBER_IS_ACTIVE(2113, "当前会员已激活"), /** * 商场/商户 diff --git a/suimangService/src/main/java/com/iformall/enums/EnumMsgModel.java b/suimangService/src/main/java/com/iformall/enums/EnumMsgModel.java index a8c1cac..c20b4bf 100644 --- a/suimangService/src/main/java/com/iformall/enums/EnumMsgModel.java +++ b/suimangService/src/main/java/com/iformall/enums/EnumMsgModel.java @@ -41,6 +41,9 @@ public enum EnumMsgModel { COUPON_ORDER_SUCCESS(32,"购买成功提醒"), COUPON_ORDER_REFUND(33,"提交退款提醒"), + + EMAIL_ACTIVATION(66, "会员邮箱激活"), + EMAIL_UPD_PWD(67, "会员忘记密码"), ; public static EnumMsgModel getEnum(Integer code) { diff --git a/suimangService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java b/suimangService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java index 790e338..5d9b64a 100644 --- a/suimangService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java +++ b/suimangService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java @@ -10,6 +10,7 @@ import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.vo.CUserBaseInfoT; import com.iformall.domain.vo.UserCountVo; import com.iformall.domain.vo.WxTagsGroupVo; +import com.iformall.enums.EnumMsgModel; import com.iformall.enums.EnumScoreType; import javax.servlet.http.HttpServletRequest; @@ -189,5 +190,12 @@ public interface WxCUserBasicInfoService { WxCUserBasicInfo register(TenantEntity tenantInfo, String phone, String pwd); + WxCUserBasicInfo registerEmail(TenantEntity tenantInfo, String email, String password); + + /** + * 发送激活邮件,修改密码邮件 + */ + void sendTicketEmail(WxCUserBasicInfo basicInfo, EnumMsgModel type); + } diff --git a/suimangService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java index 58811c2..875ee4a 100644 --- a/suimangService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java @@ -27,6 +27,7 @@ import cn.afterturn.easypoi.handler.inter.IExcelExportServer; import com.iformall.utils.Constant; import com.iformall.utils.PasswordHelper; import com.iformall.utils.RedisCacheUtils; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.compress.utils.Lists; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -34,10 +35,17 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import javax.mail.MessagingException; +import javax.mail.internet.MimeMessage; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.text.ParseException; @@ -109,6 +117,14 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService,IExc @Autowired private MqBaseProducer mqBaseProducer; + @Autowired + WxMsgValidationcodeModelMapper wxMsgValidationcodeModelMapper; + + @Autowired + private JavaMailSender sender; + @Value("${spring.mail.username}") + private String from; + @Autowired @Qualifier("objectCommonRedisTemplate") RedisTemplate redisTemplate; @@ -802,12 +818,18 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService,IExc Date now = new Date(); WxCUserBasicInfo basicInfoUpd = new WxCUserBasicInfo(); basicInfoUpd.setId(basicInfo.getId()); + if(EnumCUserBasicInfoStatus.NOT_ACTIVE.getCode().equals(basicInfo.getStatus())){ + basicInfoUpd.setStatus(EnumCUserBasicInfoStatus.NORMAL.getCode()); + } basicInfoUpd.createToken(now); basicInfoUpd.setLoginCount(basicInfo.getLoginCount()+1); basicInfoUpd.setActiveTime(now); basicInfoUpd.setUpdateDate(now); wxCUserBasicInfoMapper.updateById(basicInfoUpd); + if(basicInfoUpd.getStatus() != null){ + basicInfo.setStatus(basicInfoUpd.getStatus()); + } basicInfo.setToken(basicInfoUpd.getToken()); // basicInfo.setExpireTime(basicInfoUpd.getExpireTime()); basicInfo.setLoginCount(basicInfoUpd.getLoginCount()); @@ -860,6 +882,69 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService,IExc throw new MallinkException(ErrorCode.USER_PHONE_IS_FOUND); } + @Override + @Transactional(propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) + public WxCUserBasicInfo registerEmail(TenantEntity tenantInfo, String email, String pwd) { + if (StringUtils.isBlank(email)){ + throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "邮箱为空"); + } + + WxCUserBasicInfo basicInfo = this.findInfoByEmail(tenantInfo, email); + if(basicInfo == null){ + basicInfo = new WxCUserBasicInfo(); +// basicInfo.setTenantId("," + tenantEntity.getTenantId() + ","); + basicInfo.setFinalTenantId(tenantInfo.getFinalTenantId()); + basicInfo.setEmail(email); + if(StringUtils.isNotBlank(pwd)){ + String encryptPassword = new PasswordHelper().encryptPassword(email, pwd); + basicInfo.setPassword(encryptPassword); + } + basicInfo.setStatus(EnumCUserBasicInfoStatus.NOT_ACTIVE.getCode());//未激活 + this.save(basicInfo); + + this.sendTicketEmail(basicInfo,EnumMsgModel.EMAIL_ACTIVATION); + + return basicInfo; + } + throw new MallinkException(ErrorCode.USER_NAME_IS_FOUND); + } + + @Override + public void sendTicketEmail(WxCUserBasicInfo basicInfo,EnumMsgModel type){ + //ticket + String ticket = UUID.randomUUID().toString(); + String key = Constant.ticketPrev + ticket; + RedisCacheUtils.cache(redisTemplate, key, basicInfo.getId(), Constant.H_EXPIRE); + + WxMsgValidationcodeModel wxMsgValidationcodeModel = new WxMsgValidationcodeModel(); + wxMsgValidationcodeModel.setType(type.getCode()); + wxMsgValidationcodeModel.setOpen(EnumMsgOpen.OPEN.getCode()); + List modelList = wxMsgValidationcodeModelMapper.findList(wxMsgValidationcodeModel); + if(CollectionUtils.isEmpty(modelList)){ + throw new MallinkException(ErrorCode.TEMPLATE_NOT_FOUND.getCode(),"邮件模板未找到"); + } + wxMsgValidationcodeModel = modelList.get(0); + + String msg = wxMsgValidationcodeModel.getContent(); + + msg = msg.replace("{ticket}", ticket);// + msg = msg.replace("{bg}", wxMsgValidationcodeModel.getEmailBgImg()); + + try{ + MimeMessage message = sender.createMimeMessage(); + MimeMessageHelper helper = new MimeMessageHelper(message, true); + helper.setFrom(from); + helper.setTo(basicInfo.getEmail()); + helper.setSubject(wxMsgValidationcodeModel.getSignature()); + helper.setText(msg, true); + sender.send(message); + } catch (MessagingException e) { + e.printStackTrace(); + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"发送邮件失败"); + } + + } + @Override public WxCUserBasicInfo getById(Long id,String finalTenantId) { diff --git a/suimangService/src/main/java/com/iformall/utils/Constant.java b/suimangService/src/main/java/com/iformall/utils/Constant.java index 1b22f47..fe53f66 100644 --- a/suimangService/src/main/java/com/iformall/utils/Constant.java +++ b/suimangService/src/main/java/com/iformall/utils/Constant.java @@ -43,6 +43,7 @@ public class Constant { public static final String tokenPrev = "weapp:token:"; public static final String captchaPrev = "weapp:captcha:"; public static final String codePrev = "weapp:code:"; + public static final String ticketPrev = "weapp:ticket:"; // 微信C授权积分状态缓存 public static final String wx_user_authorize_state = "weapp:wxuser:authorizestate:";