package com.hxzk.gps.service.impl.User;
import cn.dev33.satoken.stp.StpUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hxzk.gps.controller.User.Results.*;
import com.hxzk.gps.entity.Fence.TbFence;
import com.hxzk.gps.entity.Role.Role;
import com.hxzk.gps.entity.System.TbSystemOperationLog;
import com.hxzk.gps.entity.User.TbUser;
import com.hxzk.gps.entity.User.dto.LoginResult;
import com.hxzk.gps.mapper.User.TbUserMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hxzk.gps.service.Company.TbCompanyService;
import com.hxzk.gps.service.Log.TbLoginLogService;
import com.hxzk.gps.service.Role.IRoleService;
import com.hxzk.gps.service.System.TbSystemOperationLogService;
import com.hxzk.gps.service.User.TbUserService;
import com.hxzk.gps.util.GetUser.UserInfoUtil;
import com.hxzk.gps.util.MessageUtils.MessageUtils;
import com.hxzk.gps.util.Result.ReturnMessage;
import com.hxzk.gps.util.Result.TableDto;
import com.hxzk.gps.controller.User.Results.UserTreeTableDto;
import com.hxzk.gps.controller.System.SystemLogUtil;
import com.hxzk.gps.util.Time.TimeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.*;
/**
*
* 服务实现类
*
*
* @author YuZhiTong
* @since 2025-04-17
*/
@Service
public class TbUserServiceImpl extends ServiceImpl implements TbUserService {
/*
* Service注入
* */
@Autowired
private TbUserMapper userMapper;
@Autowired
private TbCompanyService companyService;
@Autowired
private IRoleService roleService;
@Autowired
private TbSystemOperationLogService systemOperationLogService;
@Autowired
TbLoginLogService loginLogService;
/*
* 用户登录
* */
@Override
public LoginResult Login(String username, String password,String status,String clientIp) {
String message = "";
if (status.equals("3")){
message = MessageUtils.getMessage("Loginfreeze");
return new LoginResult(201, message, "000");
}
try {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("username", username);
queryWrapper.eq("password", password);
TbUser tbUser = baseMapper.selectOne(queryWrapper);
if (tbUser == null) {
message = MessageUtils.getMessage("LoginNull");
return new LoginResult(201, message, "000");
} else {
if (tbUser.getStatus().equals("1")){
message = MessageUtils.getMessage("Loginfreeze");
return new LoginResult(201, message, "000");
}
message = MessageUtils.getMessage("LoginSuccess");
StpUtil.login(tbUser.getUsername()+"-"+tbUser.getJuesename()+"-"+tbUser.getCompanyname()+"-"+tbUser.getCompanyid());
TbUser user = new TbUser();
user.setId(tbUser.getId());
user.setStatus(StpUtil.getTokenValue());
userMapper.updateById(user);
loginLogService.add(tbUser.getUsername(),clientIp,TimeUtil.GetTime(),tbUser.getCompanyname());
return new LoginResult(200, message, StpUtil.getTokenInfo().getTokenValue());
}
} catch (Exception e) {
message = MessageUtils.getMessage("LoginError");
return new LoginResult(201, message, "555");
}
}
@Override
public LoginResult phoneLogin(String phone, String clientIp) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("phone", phone);
TbUser tbUser = baseMapper.selectOne(queryWrapper);
StpUtil.login(tbUser.getUsername()+"-"+tbUser.getJuesename()+"-"+tbUser.getCompanyname()+"-"+tbUser.getCompanyid());
loginLogService.add(tbUser.getUsername(),clientIp,TimeUtil.GetTime(),tbUser.getCompanyname());
return new LoginResult(200, MessageUtils.getMessage("LoginSuccess"), StpUtil.getTokenInfo().getTokenValue());
}
/*
* 用户菜单导航
* */
@Override
public MenuListResult UserMenu() {
String username = UserInfoUtil.getUserName();
List menus = userMapper.FindUserRoleList(username);
Map menuMap = new HashMap<>();
for (MenuList menu : menus) {
menuMap.put(menu.getId(), menu);
}
MenuList root = new MenuList(); // Dummy root to collect all top-level menus
for (MenuList menu : menus) {
if (menu.getParentId() == null) {
root.getChildren().add(menu);
} else {
menuMap.get(menu.getParentId()).getChildren().add(menu);
}
}
String message = MessageUtils.getMessage("Success");
return new MenuListResult(200,message,root.getChildren());
}
/*
* 用户列表信息
* */
@Override
public UserResult FindUserInfo(UserTreeTableDto userTreeTableDto) {
// 创建查询包装器
QueryWrapper queryWrapper = new QueryWrapper<>();
// 处理部门 ID 为空的情况
if (StringUtils.isEmpty(userTreeTableDto.getDepartmentId())) {
List list = companyService.getChildCompanyIds(UserInfoUtil.getUserCompanyId());
queryWrapper.in("companyid", list);
} else {
queryWrapper.eq("companyid", userTreeTableDto.getDepartmentId());
}
// 处理用户名查询条件
Optional.ofNullable(userTreeTableDto.getUsername())
.ifPresent(username -> queryWrapper.like("username", username));
// 直接使用分页查询
Page page = PageHelper.startPage(userTreeTableDto.getPageNum(), userTreeTableDto.getPageSize())
.doSelectPage(() -> baseMapper.selectList(queryWrapper));
// 封装结果
TableDto tableDto = new TableDto(page.getResult(), page.getPageNum(), page.getPageSize(), page.getTotal());
String message = MessageUtils.getMessage("Success");
return new UserResult(200, message, tableDto);
}
/*
* 菜单列表信息
* */
@Override
public MenuListResult MenuAll() {
List menus = userMapper.FindUserRoleListAll();
Map menuMap = new HashMap<>();
for (MenuListDtoAll menu : menus) {
menuMap.put(menu.getId(), menu);
}
MenuListDtoAll root = new MenuListDtoAll(); // Dummy root to collect all top-level menus
for (MenuListDtoAll menu : menus) {
if (menu.getParentId() == null) {
root.getChildren().add(menu);
} else {
menuMap.get(menu.getParentId()).getChildren().add(menu);
}
}
return new MenuListResult(200,"成功",root.getChildren());
}
/*
* 添加用户
* */
@Override
public ReturnMessage add(TbUser user){
/*
声明操作状态
* */
boolean isSuccess = false;
/*
* 公司ID如果为空默认使用当前登录用户公司即可
* */
if (user.getCompanyid().equals("")){
user.setCompanyname(companyService.getChildCompanyName(UserInfoUtil.getUserCompanyId()));
user.setCompanyid(UserInfoUtil.getUserCompanyId());
}else{
user.setCompanyname(companyService.getChildCompanyName(user.getCompanyid()));
user.setCompanyid(user.getCompanyid());
}
user.setJueseid(user.getJuesename());
user.setJuesename(roleService.FindRoleName(user.getJuesename()));
/*
* 校验用户是否重复
* */
if (baseMapper.selectCount(new QueryWrapper()
.eq("username", user.getUsername())
.eq("companyname", user.getCompanyname())) > 0) {
return ReturnMessage.ReturnMessageError("UserRepeat");
}
try {
// 若用户不重复,插入用户并返回成功消息
user.setTime(TimeUtil.GetTime());
baseMapper.insert(user);
isSuccess = true;
}catch (Exception e){
}
return SystemLogUtil.handleAddResult(isSuccess,"UserAdd",user.getUsername());
}
@Override
public ReturnMessage update(TbUser user) {
/*
声明操作状态
* */
boolean isSuccess = false;
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("id",user.getId());
try {
if (user.getCompanyid().equals("")){
user.setCompanyid(UserInfoUtil.getUserCompanyId());
}
/*
* 更新时间覆盖
* */
user.setTime(TimeUtil.GetTime());
user.setJuesename(roleService.FindRoleName(user.getJuesename()));
isSuccess= true;
baseMapper.update(user,queryWrapper);
}catch (Exception e){
}
return SystemLogUtil.handleUpdateResult(isSuccess,"UserUpdate",user.getUsername());
}
@Override
public ReturnMessage delete(TbUser user) {
/*
声明操作状态
* */
boolean isSuccess = false;
try {
baseMapper.delete(new QueryWrapper().eq("id", user.getId()));
isSuccess = true;
}catch (Exception e){
}
return SystemLogUtil.handleDeleteResult(isSuccess,"UserDelete",user.getUsername());
}
/*
* 添加操作日志
* */
}