package com.pz.web.controller.system; import cn.dev33.satoken.annotation.SaIgnore; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.pz.common.constant.Constants; import com.pz.common.core.domain.R; import com.pz.common.core.domain.entity.SysMenu; import com.pz.common.core.domain.entity.SysUser; import com.pz.common.core.domain.model.EmailLoginBody; import com.pz.common.core.domain.model.LoginBody; import com.pz.common.core.domain.model.LoginUser; import com.pz.common.core.domain.model.SmsLoginBody; import com.pz.common.helper.LoginHelper; import com.pz.merchant.domain.Company; import com.pz.merchant.mapper.CompanyMapper; import com.pz.system.domain.vo.CityVo; import com.pz.system.domain.vo.RouterVo; import com.pz.system.mapper.CityMapper; import com.pz.system.service.ISysMenuService; import com.pz.system.service.ISysRoleService; import com.pz.system.service.ISysUserService; import com.pz.system.service.SysLoginService; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import javax.validation.constraints.NotBlank; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; /** * 登录验证 * * @author Lion Li */ @Validated @RequiredArgsConstructor @RestController public class SysLoginController { private final SysLoginService loginService; private final ISysMenuService menuService; private final ISysUserService userService; private final ISysRoleService iSysRoleService; private final CompanyMapper companyMapper; private final CityMapper cityMapper; /** * 登录方法 * * @param loginBody 登录信息 * @return 结果 */ @SaIgnore @PostMapping("/login") public R<Map<String, Object>> login(@Validated @RequestBody LoginBody loginBody) { Map<String, Object> ajax = new HashMap<>(); // 生成令牌 String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), loginBody.getUuid()); ajax.put(Constants.TOKEN, token); return R.ok(ajax); } /** * 邮件登录 * * @param body 登录信息 * @return 结果 */ @PostMapping("/emailLogin") public R<Map<String, Object>> emailLogin(@Validated @RequestBody EmailLoginBody body) { Map<String, Object> ajax = new HashMap<>(); // 生成令牌 String token = loginService.emailLogin(body.getEmail(), body.getEmailCode()); ajax.put(Constants.TOKEN, token); return R.ok(ajax); } /** * 小程序登录(示例) * * @param xcxCode 小程序code * @return 结果 */ @SaIgnore @PostMapping("/xcxLogin") public R<Map<String, Object>> xcxLogin(@NotBlank(message = "{xcx.code.not.blank}") String xcxCode) { Map<String, Object> ajax = new HashMap<>(); // 生成令牌 String token = loginService.xcxLogin(xcxCode); ajax.put(Constants.TOKEN, token); return R.ok(ajax); } /** * 退出登录 */ @SaIgnore @PostMapping("/logout") public R<Void> logout() { loginService.logout(); return R.ok("退出成功"); } /** * 获取用户信息 * * @return 用户信息 */ @GetMapping("getInfo") public R<Map<String, Object>> getInfo() { LoginUser loginUser = LoginHelper.getLoginUser(); SysUser user = userService.selectUserById(loginUser.getUserId()); Optional.ofNullable(iSysRoleService.getRoleByUserId(user.getUserId())) .ifPresent(sysRole -> { user.setRoleId(sysRole.getRoleId()); }); Map<String, Object> ajax = new HashMap<>(); ajax.put("user", user); ajax.put("roles", loginUser.getRolePermission()); ajax.put("permissions", loginUser.getMenuPermission()); //获取当前商户用户城市 Optional.ofNullable(companyMapper.selectVoOne(Wrappers.<Company>lambdaQuery().eq(Company::getUid, user.getUserId()))) .ifPresent(companyVo -> { CityVo cityVo = cityMapper.selectVoById(companyVo.getCityId()); ajax.put("cityName", cityVo.getName()); }); return R.ok(ajax); } /** * 获取路由信息 * * @return 路由信息 */ @GetMapping("getRouters") public R<List<RouterVo>> getRouters() { Long userId = LoginHelper.getUserId(); List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId); return R.ok(menuService.buildMenus(menus)); } }