| | |
| | | |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | |
| | | import com.ruoyi.system.service.ISysUserService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import com.ruoyi.common.constant.Constants; |
| | | import com.ruoyi.common.core.domain.AjaxResult; |
| | | import com.ruoyi.common.core.domain.entity.SysDept; |
| | | import com.ruoyi.common.core.domain.entity.SysMenu; |
| | | import com.ruoyi.common.core.domain.entity.SysUser; |
| | | import com.ruoyi.common.core.domain.model.LoginBody; |
| | |
| | | import com.ruoyi.framework.web.service.SysLoginService; |
| | | import com.ruoyi.framework.web.service.SysPermissionService; |
| | | import com.ruoyi.framework.web.service.TokenService; |
| | | import com.ruoyi.framework.web.service.WechatLoginService; |
| | | import com.ruoyi.system.service.ISysDeptService; |
| | | import com.ruoyi.system.service.ISysMenuService; |
| | | import com.ruoyi.common.annotation.Anonymous; |
| | | |
| | | /** |
| | | * 登录验证 |
| | |
| | | private SysLoginService loginService; |
| | | |
| | | @Autowired |
| | | private ISysUserService userService; |
| | | @Autowired |
| | | private ISysMenuService menuService; |
| | | |
| | | @Autowired |
| | |
| | | |
| | | @Autowired |
| | | private TokenService tokenService; |
| | | |
| | | @Autowired |
| | | private ISysDeptService deptService; |
| | | |
| | | @Autowired |
| | | private WechatLoginService wechatLogin; |
| | | |
| | | /** |
| | | * 微信一键登录 - 通过OpenID和UnionID登录 |
| | | * 使用WechatLoginService进行认证 |
| | | * |
| | | * @param requestBody 包含openId和unionId的请求体 |
| | | * @return 结果 |
| | | */ |
| | | @Anonymous |
| | | @PostMapping("/wechat/login/openid") |
| | | public AjaxResult loginByOpenId(@RequestBody java.util.Map<String, Object> requestBody) |
| | | { |
| | | String openId = (String) requestBody.get("openId"); |
| | | String unionId = (String) requestBody.get("unionId"); |
| | | |
| | | if (com.ruoyi.common.utils.StringUtils.isEmpty(openId)) |
| | | { |
| | | return AjaxResult.error("缺少openId参数"); |
| | | } |
| | | |
| | | try |
| | | { |
| | | // 调用WechatLoginService进行认证 |
| | | String token = wechatLogin.loginByOpenId(openId, unionId); |
| | | |
| | | AjaxResult ajax = AjaxResult.success("登录成功"); |
| | | ajax.put(Constants.TOKEN, token); |
| | | return ajax; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return AjaxResult.error(e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 微信手机号登录(推荐使用) |
| | | * |
| | | * @param requestBody 包含loginCode(微信登录code)和phoneCode(手机号授权code) |
| | | * @return 结果 |
| | | */ |
| | | @Anonymous |
| | | @PostMapping("/wechat/login/phone") |
| | | public AjaxResult loginByWechatPhone(@RequestBody java.util.Map<String, Object> requestBody) |
| | | { |
| | | String loginCode = (String) requestBody.get("loginCode"); |
| | | String phoneCode = (String) requestBody.get("phoneCode"); |
| | | |
| | | if (com.ruoyi.common.utils.StringUtils.isEmpty(loginCode)) |
| | | { |
| | | return AjaxResult.error("缺少微信登录code"); |
| | | } |
| | | |
| | | if (com.ruoyi.common.utils.StringUtils.isEmpty(phoneCode)) |
| | | { |
| | | return AjaxResult.error("缺少手机号授权code"); |
| | | } |
| | | |
| | | try |
| | | { |
| | | // 调用WechatLoginService进行认证 |
| | | java.util.Map<String, Object> loginResult = wechatLogin.loginByWechatPhone(loginCode, phoneCode); |
| | | |
| | | AjaxResult ajax = AjaxResult.success("登录成功"); |
| | | ajax.put(Constants.TOKEN, loginResult.get("token")); |
| | | ajax.put("openId", loginResult.get("openId")); |
| | | if (loginResult.containsKey("unionId")) |
| | | { |
| | | ajax.put("unionId", loginResult.get("unionId")); |
| | | } |
| | | return ajax; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return AjaxResult.error(e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 登录方法 |
| | |
| | | { |
| | | LoginUser loginUser = SecurityUtils.getLoginUser(); |
| | | SysUser user = loginUser.getUser(); |
| | | // 计算可管理分公司列表(基于 OA_OrderClass 与 sys_dept.service/dispatch_order_class) |
| | | java.util.List<SysDept> branchCompanies = new java.util.ArrayList<>(); |
| | | java.util.Set<Long> seen = new java.util.HashSet<>(); |
| | | if (com.ruoyi.common.utils.StringUtils.isNotEmpty(user.getOaOrderClass())) { |
| | | String[] codes = user.getOaOrderClass().split(","); |
| | | for (String raw : codes) { |
| | | String code = raw.trim(); |
| | | if (code.isEmpty()) continue; |
| | | SysDept cond1 = new SysDept(); |
| | | cond1.setParentId(100L); |
| | | cond1.setServiceOrderClass(code); |
| | | java.util.List<SysDept> list1 = deptService.selectDeptList(cond1); |
| | | for (SysDept d : list1) { if (seen.add(d.getDeptId())) branchCompanies.add(d); } |
| | | SysDept cond2 = new SysDept(); |
| | | cond2.setParentId(100L); |
| | | cond2.setDispatchOrderClass(code); |
| | | java.util.List<SysDept> list2 = deptService.selectDeptList(cond2); |
| | | for (SysDept d : list2) { if (seen.add(d.getDeptId())) branchCompanies.add(d); } |
| | | } |
| | | } |
| | | // 角色集合 |
| | | Set<String> roles = permissionService.getRolePermission(user); |
| | | // 权限集合 |
| | |
| | | loginUser.setPermissions(permissions); |
| | | tokenService.refreshToken(loginUser); |
| | | } |
| | | |
| | | // 获取用户所在的分公司信息 |
| | | Long branchCompanyId = null; |
| | | String branchCompanyName = null; |
| | | if (user.getDeptId() != null) |
| | | { |
| | | SysDept dept = deptService.selectDeptById(user.getDeptId()); |
| | | if (dept != null) |
| | | { |
| | | // 判断当前部门是否就是分公司(parent_id = 100) |
| | | if (dept.getParentId() != null && dept.getParentId() == 100) |
| | | { |
| | | branchCompanyId = dept.getDeptId(); |
| | | branchCompanyName = dept.getDeptName(); |
| | | } |
| | | else if (dept.getAncestors() != null && !dept.getAncestors().isEmpty()) |
| | | { |
| | | // 从 ancestors 解析分公司ID |
| | | // ancestors 格式:"0,100,分公司ID,子部门ID" |
| | | String[] ancestorIds = dept.getAncestors().split(","); |
| | | // 找到100后面的那个ID就是分公司ID |
| | | for (int i = 0; i < ancestorIds.length; i++) |
| | | { |
| | | if ("100".equals(ancestorIds[i]) && i + 1 < ancestorIds.length) |
| | | { |
| | | try |
| | | { |
| | | Long companyId = Long.parseLong(ancestorIds[i + 1]); |
| | | SysDept branchCompany = deptService.selectDeptById(companyId); |
| | | if (branchCompany != null) |
| | | { |
| | | branchCompanyId = branchCompany.getDeptId(); |
| | | branchCompanyName = branchCompany.getDeptName(); |
| | | } |
| | | } |
| | | catch (NumberFormatException e) |
| | | { |
| | | // 解析失败,忽略 |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | AjaxResult ajax = AjaxResult.success(); |
| | | ajax.put("user", user); |
| | | ajax.put("roles", roles); |
| | | ajax.put("permissions", permissions); |
| | | ajax.put("branchCompanyId", branchCompanyId); |
| | | ajax.put("branchCompanyName", branchCompanyName); |
| | | ajax.put("branchCompanies", branchCompanies); |
| | | ajax.put("oaUserId", user.getOaUserId()); |
| | | return ajax; |
| | | } |
| | | |