package org.xmx0632.deliciousfruit.api.v1; import java.math.BigDecimal; import java.util.Date; import java.util.Set; import javax.validation.ConstraintViolation; import javax.validation.Validator; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springside.modules.beanvalidator.BeanValidators; import org.springside.modules.mapper.BeanMapper; import org.springside.modules.utils.DateProvider; import org.xmx0632.deliciousfruit.api.v1.bo.RegisterRequest; import org.xmx0632.deliciousfruit.api.v1.bo.RegisterResponse; import org.xmx0632.deliciousfruit.api.v1.bo.Result; import org.xmx0632.deliciousfruit.api.v1.helper.PasswordHelper; import org.xmx0632.deliciousfruit.entity.UserAccount; import org.xmx0632.deliciousfruit.service.UserAccountService; /** * UserAccount的API的Controller. * * @author xmx0632 */ @Controller @RequestMapping(value = "/api/v1") public class UserAccountRegisterApiController { private static Logger log = LoggerFactory .getLogger(UserAccountRegisterApiController.class); private DateProvider dateProvider = DateProvider.DEFAULT; @Autowired private UserAccountService userAccountService; @Autowired private Validator validator; @RequestMapping(value = "/register", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseEntity<?> register( @RequestBody RegisterRequest registerRequest) { log.debug("Request:{}", registerRequest); String userName = ""; String phone = registerRequest.getPhone(); boolean isPhone = false; if (phone != null && !"".equals(phone.trim())) { userName = phone; isPhone = true; } else { userName = registerRequest.getEmail(); } long usernameCount = userAccountService.countByUsername(userName); log.debug("userName:{} usernameCount:{}", userName, usernameCount); if (usernameCount > 0) { log.debug("exist {} userAccount with username({})", usernameCount, userName); log.debug("username {} exist", userName); RegisterResponse response = RegisterResponse .createUsernameExistResponse("username exist"); response.setErr(null); log.debug("response:{}", response); return new ResponseEntity<RegisterResponse>(response, HttpStatus.OK); } UserAccount userAccount = new UserAccount(); BeanMapper.copy(registerRequest, userAccount); userAccount.setUsername(userName); userAccount.setMobile(registerRequest.getPhone()); userAccount.setEmail(registerRequest.getEmail()); // 调用JSR303 Bean Validator进行校验,如果出错返回json格式的错误信息. Set<ConstraintViolation<UserAccount>> failures = validator .validate(userAccount); if (!failures.isEmpty()) { RegisterResponse response = RegisterResponse .createFailResponse("invalid property"); response.setErr(BeanValidators.extractPropertyAndMessage(failures)); log.debug("response:{}", response); return new ResponseEntity<RegisterResponse>(response, HttpStatus.OK); } userAccount.setPlatform(UserAccount.PLATFORM_MOBILE); userAccount.setAccount(BigDecimal.ZERO); userAccount.setCredit(0); Date currentDate = dateProvider.getDate(); userAccount.setRegisterDate(currentDate); userAccount.setCreateTime(currentDate); userAccount.setGroupInfo(""); if (isPhone) { if (StringUtils.isNotBlank(registerRequest.getVerifycode())) { String encodedPassword = PasswordHelper.md5(registerRequest .getVerifycode()); userAccount.setPassword(encodedPassword); } } else { if (StringUtils.isNotBlank(registerRequest.getPwd())) { String encodedPassword = PasswordHelper.md5(registerRequest .getPwd()); userAccount.setPassword(encodedPassword); } } userAccountService.saveUserAccount(userAccount); RegisterResponse response = new RegisterResponse(); response.setResult(Result.SUCCESS_RESULT); log.debug("response:{}", response); return new ResponseEntity<RegisterResponse>(response, HttpStatus.OK); } }