| package com.mzl.flower.web.register; | 
|   | 
| import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; | 
| import com.mzl.flower.base.BaseController; | 
| import com.mzl.flower.base.R; | 
| import com.mzl.flower.base.ReturnDataDTO; | 
| import com.mzl.flower.base.cache.StringCacheClient; | 
| import com.mzl.flower.config.exception.ValidationException; | 
| import com.mzl.flower.constant.Constants; | 
| import com.mzl.flower.dto.request.register.RegisterCustomerDTO; | 
| import com.mzl.flower.dto.request.register.RegisterDTO; | 
| import com.mzl.flower.dto.request.register.RegisterPartnerDTO; | 
| import com.mzl.flower.entity.system.User; | 
| import com.mzl.flower.service.register.RegisterService; | 
| import com.mzl.flower.service.system.UserService; | 
| import com.mzl.flower.service.system.WeChatService; | 
| import io.swagger.annotations.Api; | 
| import io.swagger.annotations.ApiOperation; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.apache.commons.lang3.StringUtils; | 
| import org.springframework.http.ResponseEntity; | 
| import org.springframework.validation.annotation.Validated; | 
| import org.springframework.web.bind.annotation.PostMapping; | 
| import org.springframework.web.bind.annotation.RequestBody; | 
| import org.springframework.web.bind.annotation.RequestMapping; | 
| import org.springframework.web.bind.annotation.RestController; | 
|   | 
| @RestController | 
| @RequestMapping("/api/register") | 
| @Api(value = "注册管理", tags = "注册管理") | 
| @Validated | 
| @Slf4j | 
| public class RegisterController extends BaseController { | 
|   | 
|     public static final String SMS_CODE_KEY = "SMS-CODE-KEY"; | 
|   | 
|     public static final String SEPARATOR = ":"; | 
|   | 
|     private final RegisterService registerService; | 
|   | 
|     private final StringCacheClient stringCacheClient; | 
|   | 
|     private final WeChatService weChatService; | 
|   | 
|     private final UserService userService; | 
|   | 
|     public RegisterController(RegisterService registerService, StringCacheClient stringCacheClient, WeChatService weChatService, UserService userService) { | 
|         this.registerService = registerService; | 
|         this.stringCacheClient = stringCacheClient; | 
|         this.weChatService = weChatService; | 
|         this.userService = userService; | 
|     } | 
|   | 
|   | 
|     @PostMapping("/supplier") | 
|     @ApiOperation(value = "供应商账号注册") | 
|     public ResponseEntity<ReturnDataDTO<String>> registerSupplier(@Validated @RequestBody RegisterDTO dto) { | 
|         //从缓存中获取验证码 | 
|         String smsCacheCode = stringCacheClient.get(SMS_CODE_KEY + SEPARATOR + Constants.USER_TYPE.supplier.name() + SEPARATOR + dto.getTel()); | 
|         if (StringUtils.isBlank(smsCacheCode)) { | 
|             throw new ValidationException("手机验证码已过期"); | 
|         } | 
|         if (!StringUtils.equals(dto.getSmsCode(), smsCacheCode)) { | 
|             throw new ValidationException("手机验证码不正确"); | 
|         } | 
|         registerService.registerUser(dto, Constants.USER_TYPE.supplier.name()); | 
|         //删除缓存中的验证码 | 
|         stringCacheClient.delete(SMS_CODE_KEY + SEPARATOR + Constants.USER_TYPE.supplier.name() + SEPARATOR + dto.getTel()); | 
|         return returnData(R.SUCCESS.getCode(),null); | 
|     } | 
|   | 
|   | 
|     @PostMapping("/partner") | 
|     @ApiOperation(value = "合伙人账号注册") | 
|     public ResponseEntity<ReturnDataDTO<String>> registerPartner(@Validated @RequestBody RegisterPartnerDTO dto) { | 
|         //从缓存中获取验证码 | 
|         String smsCacheCode = stringCacheClient.get(SMS_CODE_KEY + SEPARATOR + Constants.USER_TYPE.partner.name() + SEPARATOR + dto.getTel()); | 
|         if (StringUtils.isBlank(smsCacheCode)) { | 
|             throw new ValidationException("手机验证码已过期"); | 
|         } | 
|         if (!StringUtils.equals(dto.getSmsCode(), smsCacheCode)) { | 
|             throw new ValidationException("手机验证码不正确"); | 
|         } | 
|         registerService.registerPartnerUser(dto); | 
|   | 
|         //删除缓存中的验证码 | 
|         stringCacheClient.delete(SMS_CODE_KEY + SEPARATOR + Constants.USER_TYPE.partner.name() + SEPARATOR + dto.getTel()); | 
|         return returnData(R.SUCCESS.getCode(),null); | 
|     } | 
|   | 
|   | 
|     @PostMapping("/customer") | 
|     @ApiOperation(value = "商户账号注册") | 
|     public ResponseEntity<ReturnDataDTO<String>> registerCustomer(@Validated @RequestBody RegisterCustomerDTO dto) throws Exception{ | 
|         //从缓存中获取验证码 | 
|         String smsCacheCode = stringCacheClient.get(SMS_CODE_KEY + SEPARATOR + Constants.USER_TYPE.customer.name() + SEPARATOR + dto.getTel()); | 
|         if (StringUtils.isBlank(smsCacheCode)) { | 
|             throw new ValidationException("手机验证码已过期"); | 
|         } | 
|         if (!StringUtils.equals(dto.getSmsCode(), smsCacheCode)) { | 
|             throw new ValidationException("手机验证码不正确"); | 
|         } | 
|         WxMaJscode2SessionResult session = weChatService.getWxMaSessionInfo(dto.getWxcode()); | 
|         String openId = session.getOpenid(); | 
|         String sessionKey = session.getSessionKey(); | 
|         String unionId = session.getUnionid(); | 
|   | 
|         registerService.registerCustomerUser(dto, Constants.USER_TYPE.customer.name(),openId,sessionKey,unionId); | 
|   | 
|         //删除缓存中的验证码 | 
|         stringCacheClient.delete(SMS_CODE_KEY + SEPARATOR + Constants.USER_TYPE.customer.name() + SEPARATOR + dto.getTel()); | 
|         return returnData(R.SUCCESS.getCode(),null); | 
|     } | 
| } |