QRCodeController.java 6.51 KB
package com.xkl.controller.qrcode;

import com.wordnik.swagger.annotations.ApiImplicitParam;
import com.wordnik.swagger.annotations.ApiImplicitParams;
import com.wordnik.swagger.annotations.ApiOperation;
import com.xkl.authorization.annotation.Authorization;
import com.xkl.authorization.annotation.CurrentUser;
import com.xkl.authorization.annotation.LogAnnotation;
import com.xkl.authorization.annotation.Sign;
import com.xkl.authorization.manager.ITokenManager;
import com.xkl.authorization.model.TokenModel;
import com.xkl.config.Constants;
import com.xkl.config.ResultStatus;
import com.xkl.domain.User;
import com.xkl.domain.XklMemberEntity;
import com.xkl.domain.XklMemberOpenidEntity;
import com.xkl.model.QrCodeModel;
import com.xkl.model.ResultModel;
import com.xkl.model.UsrInfoModel;
import com.xkl.repository.UserRepository;
import com.xkl.repository.XklMemberOpenidRespository;
import com.xkl.repository.XklMemberRespository;
import com.xkl.security.AntiXSS;
import com.xkl.service.ILoginService;
import com.xkl.service.IQRCodeService;
import com.xkl.tools.DatetimeTools;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;

/**
 * Created by zhaoyue on 2017/03/11.
 */
@RestController
@RequestMapping("/qrcode")
public class QRCodeController {
    @Autowired
    private IQRCodeService qrCodeService;
    @Autowired
    private ILoginService loginService;
    @Autowired
    private XklMemberOpenidRespository xklMemberOpenidRespository;
    @Autowired
    private UserRepository userRepository;
    @Autowired
    private XklMemberRespository xklMemberRespository;


    @LogAnnotation
    @AntiXSS
    @RequestMapping(value = "/getQrWithAccPwd", method = RequestMethod.GET)
    @ApiOperation(value = "使用用户名密码得到qrcode")
    public ResponseEntity<ResultModel> getQrWithAccPwd(HttpServletRequest request, @RequestParam String username, @RequestParam String password, @RequestParam long t) {
        Assert.notNull(username, "username can not be empty");
        Assert.notNull(password, "password can not be empty");

        User user = loginService.check(username, password);
        if (user == null) {//用户,密码错误
            return new ResponseEntity<>(ResultModel.error(ResultStatus.USERNAME_OR_PASSWORD_ERROR), HttpStatus.OK);
        } else {
            String qrCode = qrCodeService.getQRCodeWithAccount(user.getLoginAccount());
            QrCodeModel qrModel = new QrCodeModel(qrCode);
            return new ResponseEntity<>(ResultModel.ok(qrModel), HttpStatus.OK);
        }
    }
    @LogAnnotation
    @AntiXSS
    @Sign
    @RequestMapping(value = "/getQrWithOpenId", method = RequestMethod.GET)
    @ApiOperation(value = "使用openid获取qrCode")
    public ResponseEntity<ResultModel> getQrWithOpenId(HttpServletRequest request, @RequestParam String openId, @RequestParam int openIdType,
                                                       @RequestParam String sign, @RequestParam long t, @RequestParam int type) {
        if (!(boolean) request.getAttribute("signAspect")) {
            return new ResponseEntity<>(ResultModel.error(ResultStatus.SIGN_ERROR), HttpStatus.OK);
        }
        XklMemberOpenidEntity openidEntity = xklMemberOpenidRespository.findByOpenidAndType(openId, openIdType);
        // openId 未找到
        if (openidEntity == null) {
            return new ResponseEntity<>(ResultModel.ok(ResultStatus.OPENID_ERROR), HttpStatus.OK);
        }
        User user = userRepository.findOne(openidEntity.getAccountId());
        // 用户不存在
        if (user == null) {
            return new ResponseEntity<>(ResultModel.ok(ResultStatus.USER_NOT_FOUND), HttpStatus.OK);
        }
        String qrCode = qrCodeService.getQRCodeWithAccount(user.getLoginAccount());
        QrCodeModel qrModel = new QrCodeModel(qrCode);
        return new ResponseEntity<>(ResultModel.ok(qrModel), HttpStatus.OK);
    }


    @LogAnnotation
    @AntiXSS
    @Authorization
    @Sign
    @RequestMapping(value = "/getQrWithToken", method = RequestMethod.GET)
    @ApiOperation(value = "使用token得到qrcode")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "authorization", value = "请输入登录返回信息:userId_tokens", required = true, dataType = "string", paramType = "header"),
    })
    public ResponseEntity<ResultModel> getQrWithToken(HttpServletRequest request, @CurrentUser User user,
                                                      @RequestParam String sign, @RequestParam long t, @RequestParam int type) {
        if (!(boolean) request.getAttribute("signAspect")) {
            return new ResponseEntity<>(ResultModel.error(ResultStatus.SIGN_ERROR), HttpStatus.OK);
        }
        String qrCode = qrCodeService.getQRCodeWithAccount(user.getLoginAccount());
        QrCodeModel qrModel = new QrCodeModel(qrCode);
        return new ResponseEntity<>(ResultModel.ok(qrModel), HttpStatus.OK);
    }

    @LogAnnotation
    @AntiXSS
    @RequestMapping(value = "/getUsrInfoWithQr", method = RequestMethod.GET)
    @ApiOperation(value = "使用qrcode查询个人信息")
    public ResponseEntity<ResultModel> getUsrInfoWithQr(HttpServletRequest request,
                                                        @RequestParam String qrcode, @RequestParam long t) {
        String account = qrCodeService.getAccountWithQRCode(qrcode);
        User user = userRepository.findByLoginAccountAndStatus(account, true);
        if (user == null) {
            return new ResponseEntity<>(ResultModel.error(ResultStatus.USER_NOT_FOUND), HttpStatus.OK);
        }
        XklMemberEntity xklMemberEntity = xklMemberRespository.findOne((long) user.getMemberId());
        int age = DatetimeTools.getAge(xklMemberEntity.getBirthDate(), new Date());
        UsrInfoModel usrInfo = new UsrInfoModel(user.getLoginAccount(), xklMemberEntity.getName(),
                xklMemberEntity.getIdcard(), xklMemberEntity.getPhone(), xklMemberEntity.getSex(), age, qrcode, genWebloginUrl(qrcode));
        return new ResponseEntity<>(ResultModel.ok(usrInfo), HttpStatus.OK);
    }

    private static String genWebloginUrl(String qrcode) {
        return Constants.WEB_LOGIN_URL + qrcode.trim();
    }


}