package com.mindskip.xzs.controller.wx.student; import com.mindskip.xzs.base.RestResponse; import com.mindskip.xzs.configuration.property.SystemConfig; import com.mindskip.xzs.controller.wx.BaseWXApiController; import com.mindskip.xzs.domain.UserToken; import com.mindskip.xzs.domain.enums.UserStatusEnum; import com.mindskip.xzs.service.AuthenticationService; import com.mindskip.xzs.service.UserService; import com.mindskip.xzs.service.UserTokenService; import com.mindskip.xzs.utility.WxUtil; import com.mindskip.xzs.viewmodel.wx.student.user.BindInfo; import com.mindskip.xzs.domain.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import javax.validation.constraints.NotBlank; @Controller("WXStudentAuthController") @RequestMapping(value = "/api/wx/student/auth") @ResponseBody public class AuthController extends BaseWXApiController { private final SystemConfig systemConfig; private final AuthenticationService authenticationService; private final UserService userService; private final UserTokenService userTokenService; @Autowired public AuthController(SystemConfig systemConfig, AuthenticationService authenticationService, UserService userService, UserTokenService userTokenService) { this.systemConfig = systemConfig; this.authenticationService = authenticationService; this.userService = userService; this.userTokenService = userTokenService; } @RequestMapping(value = "/bind", method = RequestMethod.POST) public RestResponse bind(@Valid BindInfo model) { User user = userService.getUserByUserName(model.getUserName()); if (user == null) { return RestResponse.fail(2, "用户名或密码错误"); } boolean result = authenticationService.authUser(user, model.getUserName(), model.getPassword()); if (!result) { return RestResponse.fail(2, "用户名或密码错误"); } UserStatusEnum userStatusEnum = UserStatusEnum.fromCode(user.getStatus()); if (UserStatusEnum.Disable == userStatusEnum) { return RestResponse.fail(3, "用户被禁用"); } String code = model.getCode(); String openid = WxUtil.getOpenId(systemConfig.getWx().getAppid(), systemConfig.getWx().getSecret(), code); if (null == openid) { return RestResponse.fail(4, "获取微信OpenId失败"); } user.setWxOpenId(openid); UserToken userToken = userTokenService.bind(user); return RestResponse.ok(userToken.getToken()); } @RequestMapping(value = "/checkBind", method = RequestMethod.POST) public RestResponse checkBind(@Valid @NotBlank String code) { String openid = WxUtil.getOpenId(systemConfig.getWx().getAppid(), systemConfig.getWx().getSecret(), code); if (null == openid) { return RestResponse.fail(3, "获取微信OpenId失败"); } UserToken userToken = userTokenService.checkBind(openid); if (null != userToken) { return RestResponse.ok(userToken.getToken()); } return RestResponse.fail(2, "用户未绑定"); } @RequestMapping(value = "/unBind", method = RequestMethod.POST) public RestResponse unBind() { UserToken userToken = getUserToken(); userTokenService.unBind(userToken); return RestResponse.ok(); } }