6539fbbee28621477eb17666557f88732577a3af.svn-base 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. package cn.com.goldenwater.dcproj.controller.system;
  2. import cn.com.goldenwater.core.web.BaseController;
  3. import cn.com.goldenwater.core.web.BaseResponse;
  4. import cn.com.goldenwater.dcproj.dao.BisInspOrgDao;
  5. import cn.com.goldenwater.dcproj.model.BisInspAll;
  6. import cn.com.goldenwater.dcproj.model.BisInspAllRlationPers;
  7. import cn.com.goldenwater.dcproj.model.BisInspOrg;
  8. import cn.com.goldenwater.dcproj.model.BisInspQrcodeLogin;
  9. import cn.com.goldenwater.dcproj.param.BisInspOrgParam;
  10. import cn.com.goldenwater.dcproj.service.BisInspAllRlationPersService;
  11. import cn.com.goldenwater.dcproj.service.BisInspQrcodeLoginService;
  12. import cn.com.goldenwater.dcproj.service.OlBisInspOrgService;
  13. import cn.com.goldenwater.dcproj.service.impl.system.OrganizationTreeImpl;
  14. import cn.com.goldenwater.dcproj.utils.JWTTokenUtil;
  15. import cn.com.goldenwater.dcproj.utils.MD5;
  16. import cn.com.goldenwater.dcproj.utils.UserMsgSectrityUtils;
  17. import cn.com.goldenwater.id.util.UuidUtil;
  18. import io.swagger.annotations.Api;
  19. import io.swagger.annotations.ApiOperation;
  20. import io.swagger.annotations.ApiParam;
  21. import org.apache.commons.lang3.StringUtils;
  22. import org.slf4j.Logger;
  23. import org.slf4j.LoggerFactory;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.beans.factory.annotation.Value;
  26. import org.springframework.data.redis.core.RedisTemplate;
  27. import org.springframework.util.Assert;
  28. import org.springframework.web.bind.annotation.PathVariable;
  29. import org.springframework.web.bind.annotation.RequestBody;
  30. import org.springframework.web.bind.annotation.RequestMapping;
  31. import org.springframework.web.bind.annotation.RequestMethod;
  32. import org.springframework.web.bind.annotation.RestController;
  33. import javax.servlet.http.HttpServletRequest;
  34. import java.util.ArrayList;
  35. import java.util.Date;
  36. import java.util.List;
  37. import java.util.concurrent.TimeUnit;
  38. /**
  39. * @author zhaohg
  40. * @date 2019-3-1
  41. */
  42. @Api(value = "扫码登录", tags = "009扫码登录")
  43. @RestController
  44. @RequestMapping("/qrcode/login")
  45. public class BisInspQrcodeLoginController extends BaseController {
  46. private Logger logger = LoggerFactory.getLogger(getClass());
  47. @Autowired
  48. private BisInspQrcodeLoginService bisInspQrcodeLoginService;
  49. @Autowired
  50. private BisInspOrgDao bisInspOrgDao;
  51. @Autowired
  52. private OrganizationTreeImpl organizationTree;
  53. @Autowired
  54. private BisInspAllRlationPersService bisInspAllRlationPersService;
  55. @Autowired
  56. private OlBisInspOrgService olBisInspOrgService;
  57. @Autowired
  58. private RedisTemplate redisTemplate;
  59. @Value("${qrcode-login.second-delay}")
  60. public long secondDelay;
  61. @Value("${sc.login.enabled:true}")
  62. private Boolean scLoginEnabled;
  63. @ApiOperation(value = "登记")
  64. @RequestMapping(value = "", method = RequestMethod.POST)
  65. public BaseResponse<String> insert() {
  66. BisInspQrcodeLogin bisInspQrcodeLogin = new BisInspQrcodeLogin();
  67. String uuid = UuidUtil.uuid();
  68. bisInspQrcodeLogin.setId(uuid);
  69. bisInspQrcodeLogin.setCreateTime(new Date());
  70. bisInspQrcodeLogin.setStatus(false);
  71. bisInspQrcodeLoginService.insert(bisInspQrcodeLogin);
  72. redisTemplate.opsForValue().set(uuid, bisInspQrcodeLogin);
  73. String key = MD5.getMD5(uuid + JWTTokenUtil.SECRET);
  74. redisTemplate.opsForValue().set(key, uuid);
  75. return buildSuccessResponse(key);
  76. }
  77. @ApiOperation(value = "授权", notes = "参数字段说明:{\n\r" +
  78. " \"id\":\"uuid\",\n\r" +
  79. " \"content\":\"授权内容\",\n\r" +
  80. " };\n\r" +
  81. "返回结构说明:{\n\r" +
  82. " \"success\":\"是否成功(true为成功,false为失败)\",\n\r" +
  83. " \"code\":\"错误代码(1001:授权码不存在,1002:授权码已过期,1003:已授权成功)\",\n\r" +
  84. " \"message\":\"描述信息\",\n\r" +
  85. " \"throwable\":\"异常信息\",\n\r" +
  86. " \"data(数据信息)\":\"二维码路径\",\n\r" +
  87. " }")
  88. @RequestMapping(value = "/auth", method = RequestMethod.POST)
  89. public BaseResponse update(@ApiParam(name = "bisInspQrcodeLogin", value = "BisInspQrcodeLogin", required = true) @RequestBody BisInspQrcodeLogin bisInspQrcodeLogin) {
  90. Assert.notNull(bisInspQrcodeLogin.getId(), "主键id为必填参数");
  91. Assert.notNull(bisInspQrcodeLogin.getContent(), "授权信息为必填参数");
  92. if (!bisInspQrcodeLogin.getContent().equals(getCurrentPersId())) {
  93. return buildFailResponse("授权信息有误!!");
  94. }
  95. //获取主键
  96. String uuid = (String) redisTemplate.opsForValue().get(bisInspQrcodeLogin.getId());
  97. if (StringUtils.isBlank(uuid)) {
  98. return buildFailResponse("授权失败");
  99. }
  100. String key = MD5.getMD5(uuid + JWTTokenUtil.SECRET);
  101. if (!bisInspQrcodeLogin.getId().equals(key)) {
  102. return buildFailResponse("授权失败");
  103. }
  104. BisInspQrcodeLogin qrcodeLogin = bisInspQrcodeLoginService.get(uuid);
  105. if (null == qrcodeLogin) {
  106. return buildFailResponse(1001, "授权码不存在");
  107. } else {
  108. Boolean status = qrcodeLogin.getStatus();
  109. Date createTime = qrcodeLogin.getCreateTime();
  110. Date now = new Date();
  111. long diff = now.getTime() - createTime.getTime();
  112. long valid = diff - secondDelay * 1000L;
  113. if (!status && 0L >= valid) {
  114. qrcodeLogin.setStatus(true);
  115. qrcodeLogin.setContent(bisInspQrcodeLogin.getContent());
  116. bisInspQrcodeLoginService.update(qrcodeLogin);
  117. redisTemplate.opsForValue().set(uuid, qrcodeLogin);
  118. return buildSuccessResponse(new ArrayList<>());
  119. } else if (!status && 0L < valid) {
  120. return buildFailResponse(1002, "授权码已过期");
  121. } else {
  122. return buildFailResponse(1003, "已授权成功");
  123. }
  124. }
  125. }
  126. @ApiOperation(value = "登录")
  127. @RequestMapping(value = "/{id}", method = RequestMethod.GET)
  128. public BaseResponse<BisInspAllRlationPers> get(
  129. @ApiParam(name = "id", value = "id", required = true) @PathVariable String id, HttpServletRequest request) {
  130. //通过密钥获取uuid
  131. String key = (String) redisTemplate.opsForValue().get(id);
  132. if (!MD5.getMD5(key + JWTTokenUtil.SECRET).equals(id)) {
  133. return buildFailResponse(1001, "授权失败");
  134. }
  135. BisInspQrcodeLogin bisInspQrcodeLogin = (BisInspQrcodeLogin) redisTemplate.opsForValue().get(key);
  136. if (null != bisInspQrcodeLogin && bisInspQrcodeLogin.getStatus() && StringUtils.isNotBlank(bisInspQrcodeLogin.getContent())) {
  137. String guid = bisInspQrcodeLogin.getContent();
  138. BisInspAllRlationPers bisInspAllRlationPers = bisInspAllRlationPersService.get(guid);
  139. if (bisInspAllRlationPers == null) {
  140. return buildFailResponse(1001, "授权失败", "", "");
  141. } else {
  142. //省级平台禁用四川用户登录,启用本地平台
  143. if (!scLoginEnabled) {
  144. if (bisInspAllRlationPers.getProvince().equals("510000000000")) {
  145. return buildFailResponse(10015, "四川省用户停用此平台,请访问本地部署平台。系统地址:http://101.207.130.194:37210", "", "");
  146. }
  147. }
  148. bisInspAllRlationPers.setPwd(null);
  149. if (StringUtils.isNotBlank(bisInspAllRlationPers.getGuid())) {
  150. List<BisInspAll> allNode = organizationTree.getAllNode(bisInspAllRlationPers.getGuid(), "", getCurrentOrgId(), "", "", "","","");
  151. bisInspAllRlationPers.setAllNode(allNode);
  152. }
  153. BisInspAllRlationPers pers = new BisInspAllRlationPers();
  154. pers.setGuid(bisInspAllRlationPers.getGuid());
  155. pers.setLoginTm(new Date());
  156. if (StringUtils.isBlank(bisInspAllRlationPers.getPersType())) {
  157. bisInspAllRlationPers.setPersType("3");
  158. pers.setPersType("3");
  159. }
  160. bisInspAllRlationPersService.update(pers);
  161. pers.setPwd(null);
  162. String token = UuidUtil.uuid();
  163. //bisInspAllRlationPersService.sendChannel(token, bisInspAllRlationPers, request, PlusEnum.ADD.getNumber());
  164. String accessToken = JWTTokenUtil.sign(bisInspAllRlationPersService.getLoginUser(bisInspAllRlationPers), pers.getGuid());
  165. redisTemplate.opsForValue().set(token, accessToken, JWTTokenUtil.maxAge, TimeUnit.MILLISECONDS);
  166. redisTemplate.opsForValue().set(token + bisInspAllRlationPers.getGuid(), accessToken, JWTTokenUtil.refreshmaxAge, TimeUnit.MILLISECONDS);
  167. bisInspQrcodeLoginService.delete(id);
  168. redisTemplate.delete(id);
  169. redisTemplate.delete(key);
  170. return buildSuccessResponse(getBisInspAllRlations(bisInspAllRlationPers), token);
  171. }
  172. }
  173. logger.info("fail-----2");
  174. return buildFailResponse(1001, "授权失败");
  175. }
  176. private BisInspAllRlationPers getBisInspAllRlations(BisInspAllRlationPers bisInspAllRlationPers) {
  177. if (StringUtils.isNotBlank(bisInspAllRlationPers.getOrgId())) {
  178. BisInspOrg bisInspOrg = olBisInspOrgService.getDefaultOrg(bisInspAllRlationPers.getOrgId());
  179. bisInspAllRlationPers.setDefaultOrg(bisInspOrg);
  180. BisInspOrgParam inspOrgParam = new BisInspOrgParam();
  181. inspOrgParam.setPersId(bisInspAllRlationPers.getGuid());
  182. List<BisInspOrg> inspOrgList = bisInspOrgDao.findPersOrgList(inspOrgParam);
  183. bisInspAllRlationPers.setAllOrg(inspOrgList);
  184. bisInspAllRlationPers.setPwd(null);
  185. }
  186. bisInspAllRlationPers.setMobilenumb(UserMsgSectrityUtils.blurPhone(bisInspAllRlationPers.getMobilenumb()));
  187. return bisInspAllRlationPers;
  188. }
  189. }