|
|
@@ -1,20 +1,17 @@
|
|
|
package com.tianhu.system.controller;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
-import com.tianhu.common.core.constant.Constants;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.tianhu.common.core.domain.R;
|
|
|
-import com.tianhu.common.core.enums.UserStatus;
|
|
|
import com.tianhu.common.core.utils.StringUtils;
|
|
|
import com.tianhu.common.security.service.TokenService;
|
|
|
-import com.tianhu.system.api.RemoteLogService;
|
|
|
+import com.tianhu.system.api.domain.SysDept;
|
|
|
import com.tianhu.system.api.domain.SysUser;
|
|
|
import com.tianhu.system.api.model.LoginUser;
|
|
|
import com.tianhu.system.domain.SysCompany;
|
|
|
+import com.tianhu.system.domain.SysUserCompanyRel;
|
|
|
import com.tianhu.system.domain.SysWeChat;
|
|
|
-import com.tianhu.system.service.IOwnSysUserService;
|
|
|
-import com.tianhu.system.service.ISysCompanyService;
|
|
|
-import com.tianhu.system.service.ISysPermissionService;
|
|
|
-import com.tianhu.system.service.ISysWeChatService;
|
|
|
+import com.tianhu.system.service.*;
|
|
|
import com.tianhu.system.utils.HttpUtil;
|
|
|
import com.tianhu.system.utils.SysConstant;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
@@ -25,9 +22,7 @@ import org.springframework.web.bind.annotation.RestController;
|
|
|
|
|
|
import java.io.UnsupportedEncodingException;
|
|
|
import java.net.URLEncoder;
|
|
|
-import java.util.HashSet;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Set;
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* 微信扫码登录
|
|
|
@@ -66,22 +61,22 @@ public class WxApiController {
|
|
|
private TokenService tokenService;
|
|
|
|
|
|
@Autowired
|
|
|
- private IOwnSysUserService iOwnSysUserService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
private ISysPermissionService permissionService;
|
|
|
|
|
|
@Autowired
|
|
|
- private RemoteLogService remoteLogService;
|
|
|
-
|
|
|
+ private ISysUserService userService;
|
|
|
@Autowired
|
|
|
- private ISysCompanyService iSysCompanyService;
|
|
|
+ private ISysUserCompanyRelService userCompanyRelService;
|
|
|
+ @Autowired
|
|
|
+ private ISysDeptService deptService;
|
|
|
+ @Autowired
|
|
|
+ private ISysCompanyService companyService;
|
|
|
|
|
|
/**
|
|
|
* 获取二维码
|
|
|
*/
|
|
|
@GetMapping("/login")
|
|
|
- public String qrCode(@RequestParam String state) throws UnsupportedEncodingException {
|
|
|
+ public String qrCode() throws UnsupportedEncodingException {
|
|
|
//%s表示占位符,需要我们设定值,其他则是固定式
|
|
|
String baseUrl = "https://open.weixin.qq.com/connect/qrconnect" +
|
|
|
"?appid=%s" +
|
|
|
@@ -95,7 +90,7 @@ public class WxApiController {
|
|
|
//自己设置的
|
|
|
// String state = "http://tianhu.adm.minpay.cc";
|
|
|
//给上面路径中的%s占位符赋值
|
|
|
- String retUrl = String.format(baseUrl, WEB_APP_ID, redirectUrl, state);
|
|
|
+ String retUrl = String.format(baseUrl, WEB_APP_ID, redirectUrl, "00");
|
|
|
//将结果返回,就可以生成二维码
|
|
|
return retUrl;
|
|
|
}
|
|
|
@@ -104,9 +99,9 @@ public class WxApiController {
|
|
|
* code回调
|
|
|
*/
|
|
|
@GetMapping("/callback")
|
|
|
- public R callback(@RequestParam String code, @RequestParam String hostname) throws Exception {
|
|
|
+ public R callback(@RequestParam String code) throws Exception {
|
|
|
//向认证服务器发送请求换取access_token和open_id
|
|
|
- /*String baseAccessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token" +
|
|
|
+ String baseAccessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token" +
|
|
|
"?appid=%s" +
|
|
|
"&secret=%s" +
|
|
|
"&code=%s" +
|
|
|
@@ -119,68 +114,104 @@ public class WxApiController {
|
|
|
JSONObject obj = JSONObject.parseObject(retUrl);
|
|
|
//判断是否有unionid
|
|
|
Object unionId = obj.get("unionid");
|
|
|
+
|
|
|
+ Map<String, Object> resMap = new HashMap<>();
|
|
|
+ resMap.put("unionId", unionId);
|
|
|
if (unionId != null) {
|
|
|
- SysWeChat sysWeChat = new SysWeChat();
|
|
|
- sysWeChat.setSwcWxUuid(obj.getString("unionid"));
|
|
|
//查询微信关联表找到员工信息
|
|
|
- List<SysWeChat> list = iSysWeChatService.selectSysWeChatList(sysWeChat);
|
|
|
+ LambdaQueryWrapper<SysWeChat> weChatLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ weChatLambdaQueryWrapper.eq(SysWeChat::getSwcWxUuid, unionId);
|
|
|
+ List<SysWeChat> list = iSysWeChatService.findSysWeChats(weChatLambdaQueryWrapper);
|
|
|
+ // 已扫码
|
|
|
if (list.size() == 1) {
|
|
|
- //员工id
|
|
|
- String staffCode = list.get(0).getSwcUserId();
|
|
|
- //获取当前操作人员
|
|
|
- LoginUser userInfo = tokenService.getLoginUser();
|
|
|
- String companyId = userInfo.getSysUser().getCompanyId();
|
|
|
- SysCompany company = iSysCompanyService.getById(companyId);
|
|
|
- if (StringUtils.isNull(company)){
|
|
|
- return R.fail("企业不存在");
|
|
|
- }else{
|
|
|
- //停用提示异常
|
|
|
- if("01".equals(company.getScyStatus())){
|
|
|
- return R.fail("企业状态异常,登录失败");
|
|
|
- //删除重新绑定
|
|
|
- }else if("99".equals(company.getScyStatus())){
|
|
|
- return R.fail("未绑定登录用户,请关注公众号绑定用户");
|
|
|
+ // 判断是否绑定登陆用户
|
|
|
+ SysWeChat weChat = list.get(0);
|
|
|
+ // 已绑定用户
|
|
|
+ if (StringUtils.isNotEmpty(weChat.getSwcUserId())) {
|
|
|
+ SysUser sysUser = userService.selectUserById(Long.parseLong(weChat.getSwcUserId()));
|
|
|
+ // 查询是否实名认证
|
|
|
+ LambdaQueryWrapper<SysUserCompanyRel> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ lambdaQueryWrapper.eq(SysUserCompanyRel::getSucrUserId, sysUser.getUserId());
|
|
|
+ List<SysUserCompanyRel> userCompanyRelList = userCompanyRelService.findSysUserCompanyRels(lambdaQueryWrapper);
|
|
|
+
|
|
|
+ // 未认证
|
|
|
+ if (userCompanyRelList.size() == 0) {
|
|
|
+ resMap.put("code", "0");
|
|
|
+ resMap.put("message", "用户未绑定企业");
|
|
|
+ LoginUser sysUserVo = new LoginUser();
|
|
|
+ sysUserVo.setSysUser(sysUser);
|
|
|
+ resMap.put("loginUser", sysUserVo);
|
|
|
+ tokenService.createToken(sysUserVo);
|
|
|
+ // 只绑定了一家企业
|
|
|
+ } else if (userCompanyRelList.size() == 1) {
|
|
|
+ resMap.put("code", "1");
|
|
|
+ resMap.put("message", "用户已绑定一家企业");
|
|
|
+
|
|
|
+ // 绑定企业
|
|
|
+ sysUser.setCompanyId(userCompanyRelList.get(0).getSucrCompanyId());
|
|
|
+ // 不是平台
|
|
|
+ if(!SysConstant.PLATFORM_NO.equals(sysUser.getCompanyId()) ){
|
|
|
+ // 绑定部门
|
|
|
+ sysUser.setDeptId(userCompanyRelList.get(0).getSucrDeptId());
|
|
|
+ SysDept dept = deptService.selectDeptById(userCompanyRelList.get(0).getSucrDeptId());
|
|
|
+ sysUser.setDept(dept);
|
|
|
+ // 存放企业类型
|
|
|
+ SysCompany company = companyService.getById(userCompanyRelList.get(0).getSucrCompanyId());
|
|
|
+ sysUser.setCompanyType(company.getScyType());
|
|
|
+ if ("01".equals(company.getScyStatus()) || "99".equals(company.getScyStatus())) {
|
|
|
+ return R.fail("企业状态异常,请联系管理员!");
|
|
|
+ }
|
|
|
+ sysUser.setCompanyStatus(company.getScyStatus());
|
|
|
+ // 平台用户
|
|
|
+ } else {
|
|
|
+ sysUser.setCompanyType("00");
|
|
|
+ sysUser.setCompanyStatus("00");
|
|
|
+ }
|
|
|
+ // 角色集合
|
|
|
+ Set<String> roles = permissionService.getRolePermission(sysUser.getUserId(), sysUser.getCompanyId());
|
|
|
+ Set<String> permissions = this.getPermissions(sysUser);
|
|
|
+
|
|
|
+ LoginUser sysUserVo = new LoginUser();
|
|
|
+ sysUserVo.setRoles(roles);
|
|
|
+ sysUserVo.setPermissions(permissions);
|
|
|
+ sysUserVo.setSysUser(sysUser);
|
|
|
+
|
|
|
+ resMap.put("loginUser", sysUserVo);
|
|
|
+ tokenService.createToken(sysUserVo);
|
|
|
+ // 绑定多加企业
|
|
|
+ } else {
|
|
|
+ LoginUser sysUserVo = new LoginUser();
|
|
|
+ sysUserVo.setSysUser(sysUser);
|
|
|
+ resMap.put("loginUser", sysUserVo);
|
|
|
+ tokenService.createToken(sysUserVo);
|
|
|
+
|
|
|
+ List<String> companyIdList = new ArrayList<>();
|
|
|
+ for (SysUserCompanyRel companyRel : userCompanyRelList) {
|
|
|
+ companyIdList.add(companyRel.getSucrCompanyId());
|
|
|
+ }
|
|
|
+ LambdaQueryWrapper<SysCompany> companyLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ companyLambdaQueryWrapper.in(SysCompany::getScyId, companyIdList);
|
|
|
+ List<SysCompany> companyList = companyService.findSysCompanys(companyLambdaQueryWrapper);
|
|
|
+
|
|
|
+ resMap.put("code", "2");
|
|
|
+ resMap.put("message", "用户已绑定" + userCompanyRelList.size() + "家企业");
|
|
|
+ resMap.put("companyList", companyList);
|
|
|
}
|
|
|
+ return R.ok(resMap);
|
|
|
+ // 未绑定用户
|
|
|
+ } else {
|
|
|
+ resMap.put("code", "3");
|
|
|
+ return R.ok(resMap);
|
|
|
}
|
|
|
- // 查询用户信息
|
|
|
- SysUser sysUser = iOwnSysUserService.selectUserByStaff(staffCode);
|
|
|
- //没有登录用户
|
|
|
- if (StringUtils.isNull(sysUser)) {
|
|
|
- return R.fail("未绑定登录用户,请关注公众号绑定用户");
|
|
|
- }
|
|
|
- if (!companyId.equals(sysUser.getCompanyId()))
|
|
|
- {
|
|
|
- return R.fail("未绑定登录用户,请关注公众号绑定用户");
|
|
|
- }
|
|
|
- if (UserStatus.DELETED.getCode().equals(sysUser.getDelFlag()))
|
|
|
- {
|
|
|
- return R.fail("未绑定登录用户,请关注公众号绑定用户");
|
|
|
- }
|
|
|
- if (UserStatus.DISABLE.getCode().equals(sysUser.getStatus()))
|
|
|
- {
|
|
|
- return R.fail("用户状态异常,登录失败");
|
|
|
- }
|
|
|
- remoteLogService.saveLogininfor(sysUser.getUserName(), Constants.LOGIN_SUCCESS, "登录成功", companyId);
|
|
|
- // 角色集合
|
|
|
- Set<String> roles = permissionService.getRolePermission(sysUser.getUserId());
|
|
|
- //权限集合
|
|
|
- Set<String> permissions = this.getPermissions(sysUser);
|
|
|
- //创建登录用户
|
|
|
- LoginUser sysUserVo = new LoginUser();
|
|
|
- sysUserVo.setSysUser(sysUser);
|
|
|
- sysUserVo.setRoles(roles);
|
|
|
- sysUserVo.setPermissions(permissions);
|
|
|
- //返回登录用户信息
|
|
|
- return R.ok(tokenService.createToken(sysUserVo));
|
|
|
+ // 未绑定用户
|
|
|
} else {
|
|
|
- //没有员工信息或有多个员工信息
|
|
|
- return R.fail("未绑定登录用户,请关注公众号绑定用户");
|
|
|
+ resMap.put("code", "3");
|
|
|
+ return R.ok(resMap);
|
|
|
}
|
|
|
} else {
|
|
|
//没有unionid
|
|
|
- return R.fail("未绑定登录用户,请关注公众号绑定用户");
|
|
|
- }*/
|
|
|
- return R.ok();
|
|
|
+ return R.fail("用户信息获取失败");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|