QRCodeController.java
6.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
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();
}
}