package com.hxzk.gps.service.impl.Department;
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.DepartMent.Results.DepartMentResult;
import com.hxzk.gps.controller.DepartMent.dto.DpeartMentTreeTableDto;
import com.hxzk.gps.controller.Person.Results.PersonResult;
import com.hxzk.gps.controller.System.SystemLogUtil;
import com.hxzk.gps.entity.Department.TbDepartment;
import com.hxzk.gps.entity.Person.TbPerson;
import com.hxzk.gps.entity.System.TbSystemOperationLog;
import com.hxzk.gps.mapper.Department.TbDepartmentMapper;
import com.hxzk.gps.service.Company.TbCompanyService;
import com.hxzk.gps.service.Department.TbDepartmentService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hxzk.gps.service.System.TbSystemOperationLogService;
import com.hxzk.gps.util.AuToComplete;
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.util.Time.TimeUtil;
import com.hxzk.gps.util.UDP.UDP_Department;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
*
* 服务实现类
*
*
* @author YuZhiTong
* @since 2025-05-18
*/
@Service
public class TbDepartmentServiceImpl extends ServiceImpl implements TbDepartmentService {
@Autowired
TbCompanyService companyService;
@Autowired
TbSystemOperationLogService systemOperationLogService;
@Override
public DepartMentResult FindDepartmentInfo(DpeartMentTreeTableDto departmentTreeTableDto) {
// 创建查询包装器
QueryWrapper queryWrapper = new QueryWrapper<>();
// 处理部门 ID 为空的情况
if (StringUtils.isEmpty(departmentTreeTableDto.getDepartmentId())) {
List list = companyService.getChildCompanyIds(UserInfoUtil.getUserCompanyId());
queryWrapper.in("companyid", list);
} else {
queryWrapper.eq("companyid", departmentTreeTableDto.getDepartmentId());
}
// 处理部门名称查询条件
Optional.ofNullable(departmentTreeTableDto.getDepartmentname()).ifPresent(departmentname ->
queryWrapper.like("departmentname", departmentname));
// 使用PageHelper进行分页查询
Page page = PageHelper.startPage(departmentTreeTableDto.getPageNum(), departmentTreeTableDto.getPageSize())
.doSelectPage(() -> baseMapper.selectList(queryWrapper));
// 封装部门列表
TableDto tableDto = new TableDto(page.getResult(), page.getPageNum(), page.getPageSize(), page.getTotal());
// 获取成功消息
String message = MessageUtils.getMessage("Success");
// 返回结果
return new DepartMentResult(200, message, tableDto);
}
@Override
public List DepartmentAutocomplete(TbDepartment department) {
if (department.getCompanyid().equals("")){
department.setCompanyid(UserInfoUtil.getUserCompanyId());
}
List companyids = companyService.getChildCompanyIds(department.getCompanyid());
QueryWrapper queryWrapper = new QueryWrapper<>();
String id = Optional.ofNullable(department.getCompanyid())
.filter(s -> !s.isEmpty())
.orElse(UserInfoUtil.getUserCompanyId());
queryWrapper.in("companyid",companyids);
List departmentList = baseMapper.selectList(queryWrapper);
List addCustomerList = departmentList.stream()
.map(departments -> {
AuToComplete addCustomer = new AuToComplete();
addCustomer.setValue(departments.getDepartmentname());
addCustomer.setLink(String.valueOf(departments.getId()));
return addCustomer;
})
.collect(Collectors.toList());
return addCustomerList;
}
@Override
public TbDepartment FindOneDepartMent(TbPerson person) {
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("departmentname",person.getPDepartment());
queryWrapper.eq("company",Optional.ofNullable(person.getCompany()).orElse(UserInfoUtil.getUserCompany()));
return baseMapper.selectOne(queryWrapper);
}
/*
* 新增部门
* @param department 部门信息
* @return 结果信息
* */
@Override
public ReturnMessage add(TbDepartment department) {
/*
声明操作状态
* */
boolean isSuccess = false;
department.setCompanyid(UserInfoUtil.isNullGetCompanyId(department.getCompanyid()));
// 检查部门是否重复
if (isDepartmentRepeat(department)) {
return ReturnMessage.ReturnMessageError("DepartmentRepeat");
}
try {
department.setBaoliu5(UserInfoUtil.getUserName());
department.setAddtime(TimeUtil.GetTime());
baseMapper.insert(department);
/*
* 发送指令到CS
* */
UDP_Department.AddDepartment(department);
isSuccess = true;
}catch (Exception e){
}
return SystemLogUtil.handleAddResult(isSuccess,"DepartmentAdd",department.getDepartmentname());
}
/*
* 修改部门
* @param department 部门图标信息
* @return 结果信息
* */
@Override
public ReturnMessage update(TbDepartment department) {
/*
声明操作状态
* */
boolean isSuccess = false;
// 设置公司 ID
department.setCompanyid(UserInfoUtil.isNullGetCompanyId(department.getCompanyid()));
// 检查部门是否重复
if (isUpDepartmentRepeat(department)) {
return ReturnMessage.ReturnMessageError("DepartmentRepeat");
}
try {
// 更新部门信息
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("id", department.getId());
department.setAddtime(TimeUtil.GetTime());
baseMapper.update(department, queryWrapper);
/*
* 发送指令到CS
* */
UDP_Department.UpDepartment(department);
isSuccess = true;
}catch (Exception e){
}
return SystemLogUtil.handleUpdateResult(isSuccess,"DepartmentUpdate",department.getDepartmentname());
}
/*
* 删除部门
* @param department 部门信息
* @return 结果信息
* */
@Override
public ReturnMessage delete(TbDepartment department) {
/*
声明操作状态
* */
boolean isSuccess = false;
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("id",department.getId());
try {
baseMapper.delete(queryWrapper);
UDP_Department.DeDepartment(department);
isSuccess = true;
}catch (Exception e){
}
return SystemLogUtil.handleDeleteResult(isSuccess,"DepartmentDelete",department.getDepartmentname());
}
/**
* 检查部门是否重复
* @param department 部门信息
* @return 如果部门重复返回 true,否则返回 false
*/
private boolean isDepartmentRepeat(TbDepartment department) {
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("company", department.getCompany())
.eq("departmentname", department.getDepartmentname());
return baseMapper.selectCount(queryWrapper) > 0;
}
private boolean isUpDepartmentRepeat(TbDepartment department) {
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("company", department.getCompany())
.eq("departmentname", department.getDepartmentname());
return baseMapper.selectCount(queryWrapper) > 1;
}
}