| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- package cn.com.goldenwater.dcproj.controller.system;
- import cn.com.goldenwater.core.web.BaseController;
- import cn.com.goldenwater.core.web.BaseResponse;
- import cn.com.goldenwater.dcproj.dao.BisInspOrgDao;
- import cn.com.goldenwater.dcproj.model.BisInspAll;
- import cn.com.goldenwater.dcproj.model.BisInspAllRlationPers;
- import cn.com.goldenwater.dcproj.model.BisInspOrg;
- import cn.com.goldenwater.dcproj.model.BisInspQrcodeLogin;
- import cn.com.goldenwater.dcproj.param.BisInspOrgParam;
- import cn.com.goldenwater.dcproj.service.BisInspAllRlationPersService;
- import cn.com.goldenwater.dcproj.service.BisInspQrcodeLoginService;
- import cn.com.goldenwater.dcproj.service.OlBisInspOrgService;
- import cn.com.goldenwater.dcproj.service.impl.system.OrganizationTreeImpl;
- import cn.com.goldenwater.dcproj.utils.JWTTokenUtil;
- import cn.com.goldenwater.dcproj.utils.MD5;
- import cn.com.goldenwater.dcproj.utils.UserMsgSectrityUtils;
- import cn.com.goldenwater.id.util.UuidUtil;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import io.swagger.annotations.ApiParam;
- import org.apache.commons.lang3.StringUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.util.Assert;
- import org.springframework.web.bind.annotation.PathVariable;
- 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.RestController;
- import javax.servlet.http.HttpServletRequest;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- import java.util.concurrent.TimeUnit;
- /**
- * @author zhaohg
- * @date 2019-3-1
- */
- @Api(value = "扫码登录", tags = "009扫码登录")
- @RestController
- @RequestMapping("/qrcode/login")
- public class BisInspQrcodeLoginController extends BaseController {
- private Logger logger = LoggerFactory.getLogger(getClass());
- @Autowired
- private BisInspQrcodeLoginService bisInspQrcodeLoginService;
- @Autowired
- private BisInspOrgDao bisInspOrgDao;
- @Autowired
- private OrganizationTreeImpl organizationTree;
- @Autowired
- private BisInspAllRlationPersService bisInspAllRlationPersService;
- @Autowired
- private OlBisInspOrgService olBisInspOrgService;
- @Autowired
- private RedisTemplate redisTemplate;
- @Value("${qrcode-login.second-delay}")
- public long secondDelay;
- @Value("${sc.login.enabled:true}")
- private Boolean scLoginEnabled;
- @ApiOperation(value = "登记")
- @RequestMapping(value = "", method = RequestMethod.POST)
- public BaseResponse<String> insert() {
- BisInspQrcodeLogin bisInspQrcodeLogin = new BisInspQrcodeLogin();
- String uuid = UuidUtil.uuid();
- bisInspQrcodeLogin.setId(uuid);
- bisInspQrcodeLogin.setCreateTime(new Date());
- bisInspQrcodeLogin.setStatus(false);
- bisInspQrcodeLoginService.insert(bisInspQrcodeLogin);
- redisTemplate.opsForValue().set(uuid, bisInspQrcodeLogin);
- String key = MD5.getMD5(uuid + JWTTokenUtil.SECRET);
- redisTemplate.opsForValue().set(key, uuid);
- return buildSuccessResponse(key);
- }
- @ApiOperation(value = "授权", notes = "参数字段说明:{\n\r" +
- " \"id\":\"uuid\",\n\r" +
- " \"content\":\"授权内容\",\n\r" +
- " };\n\r" +
- "返回结构说明:{\n\r" +
- " \"success\":\"是否成功(true为成功,false为失败)\",\n\r" +
- " \"code\":\"错误代码(1001:授权码不存在,1002:授权码已过期,1003:已授权成功)\",\n\r" +
- " \"message\":\"描述信息\",\n\r" +
- " \"throwable\":\"异常信息\",\n\r" +
- " \"data(数据信息)\":\"二维码路径\",\n\r" +
- " }")
- @RequestMapping(value = "/auth", method = RequestMethod.POST)
- public BaseResponse update(@ApiParam(name = "bisInspQrcodeLogin", value = "BisInspQrcodeLogin", required = true) @RequestBody BisInspQrcodeLogin bisInspQrcodeLogin) {
- Assert.notNull(bisInspQrcodeLogin.getId(), "主键id为必填参数");
- Assert.notNull(bisInspQrcodeLogin.getContent(), "授权信息为必填参数");
- if (!bisInspQrcodeLogin.getContent().equals(getCurrentPersId())) {
- return buildFailResponse("授权信息有误!!");
- }
- //获取主键
- String uuid = (String) redisTemplate.opsForValue().get(bisInspQrcodeLogin.getId());
- if (StringUtils.isBlank(uuid)) {
- return buildFailResponse("授权失败");
- }
- String key = MD5.getMD5(uuid + JWTTokenUtil.SECRET);
- if (!bisInspQrcodeLogin.getId().equals(key)) {
- return buildFailResponse("授权失败");
- }
- BisInspQrcodeLogin qrcodeLogin = bisInspQrcodeLoginService.get(uuid);
- if (null == qrcodeLogin) {
- return buildFailResponse(1001, "授权码不存在");
- } else {
- Boolean status = qrcodeLogin.getStatus();
- Date createTime = qrcodeLogin.getCreateTime();
- Date now = new Date();
- long diff = now.getTime() - createTime.getTime();
- long valid = diff - secondDelay * 1000L;
- if (!status && 0L >= valid) {
- qrcodeLogin.setStatus(true);
- qrcodeLogin.setContent(bisInspQrcodeLogin.getContent());
- bisInspQrcodeLoginService.update(qrcodeLogin);
- redisTemplate.opsForValue().set(uuid, qrcodeLogin);
- return buildSuccessResponse(new ArrayList<>());
- } else if (!status && 0L < valid) {
- return buildFailResponse(1002, "授权码已过期");
- } else {
- return buildFailResponse(1003, "已授权成功");
- }
- }
- }
- @ApiOperation(value = "登录")
- @RequestMapping(value = "/{id}", method = RequestMethod.GET)
- public BaseResponse<BisInspAllRlationPers> get(
- @ApiParam(name = "id", value = "id", required = true) @PathVariable String id, HttpServletRequest request) {
- //通过密钥获取uuid
- String key = (String) redisTemplate.opsForValue().get(id);
- if (!MD5.getMD5(key + JWTTokenUtil.SECRET).equals(id)) {
- return buildFailResponse(1001, "授权失败");
- }
- BisInspQrcodeLogin bisInspQrcodeLogin = (BisInspQrcodeLogin) redisTemplate.opsForValue().get(key);
- if (null != bisInspQrcodeLogin && bisInspQrcodeLogin.getStatus() && StringUtils.isNotBlank(bisInspQrcodeLogin.getContent())) {
- String guid = bisInspQrcodeLogin.getContent();
- BisInspAllRlationPers bisInspAllRlationPers = bisInspAllRlationPersService.get(guid);
- if (bisInspAllRlationPers == null) {
- return buildFailResponse(1001, "授权失败", "", "");
- } else {
- //省级平台禁用四川用户登录,启用本地平台
- if (!scLoginEnabled) {
- if (bisInspAllRlationPers.getProvince().equals("510000000000")) {
- return buildFailResponse(10015, "四川省用户停用此平台,请访问本地部署平台。系统地址:http://101.207.130.194:37210", "", "");
- }
- }
- bisInspAllRlationPers.setPwd(null);
- if (StringUtils.isNotBlank(bisInspAllRlationPers.getGuid())) {
- List<BisInspAll> allNode = organizationTree.getAllNode(bisInspAllRlationPers.getGuid(), "", getCurrentOrgId(), "", "", "","","");
- bisInspAllRlationPers.setAllNode(allNode);
- }
- BisInspAllRlationPers pers = new BisInspAllRlationPers();
- pers.setGuid(bisInspAllRlationPers.getGuid());
- pers.setLoginTm(new Date());
- if (StringUtils.isBlank(bisInspAllRlationPers.getPersType())) {
- bisInspAllRlationPers.setPersType("3");
- pers.setPersType("3");
- }
- bisInspAllRlationPersService.update(pers);
- pers.setPwd(null);
- String token = UuidUtil.uuid();
- //bisInspAllRlationPersService.sendChannel(token, bisInspAllRlationPers, request, PlusEnum.ADD.getNumber());
- String accessToken = JWTTokenUtil.sign(bisInspAllRlationPersService.getLoginUser(bisInspAllRlationPers), pers.getGuid());
- redisTemplate.opsForValue().set(token, accessToken, JWTTokenUtil.maxAge, TimeUnit.MILLISECONDS);
- redisTemplate.opsForValue().set(token + bisInspAllRlationPers.getGuid(), accessToken, JWTTokenUtil.refreshmaxAge, TimeUnit.MILLISECONDS);
- bisInspQrcodeLoginService.delete(id);
- redisTemplate.delete(id);
- redisTemplate.delete(key);
- return buildSuccessResponse(getBisInspAllRlations(bisInspAllRlationPers), token);
- }
- }
- logger.info("fail-----2");
- return buildFailResponse(1001, "授权失败");
- }
- private BisInspAllRlationPers getBisInspAllRlations(BisInspAllRlationPers bisInspAllRlationPers) {
- if (StringUtils.isNotBlank(bisInspAllRlationPers.getOrgId())) {
- BisInspOrg bisInspOrg = olBisInspOrgService.getDefaultOrg(bisInspAllRlationPers.getOrgId());
- bisInspAllRlationPers.setDefaultOrg(bisInspOrg);
- BisInspOrgParam inspOrgParam = new BisInspOrgParam();
- inspOrgParam.setPersId(bisInspAllRlationPers.getGuid());
- List<BisInspOrg> inspOrgList = bisInspOrgDao.findPersOrgList(inspOrgParam);
- bisInspAllRlationPers.setAllOrg(inspOrgList);
- bisInspAllRlationPers.setPwd(null);
- }
- bisInspAllRlationPers.setMobilenumb(UserMsgSectrityUtils.blurPhone(bisInspAllRlationPers.getMobilenumb()));
- return bisInspAllRlationPers;
- }
- }
|