package com.ruoyi.system.service.impl;
|
|
import cn.afterturn.easypoi.excel.ExcelImportUtil;
|
import cn.afterturn.easypoi.excel.entity.ImportParams;
|
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ruoyi.common.basic.PageDTO;
|
import com.ruoyi.common.exception.ServiceException;
|
import com.ruoyi.common.utils.BeanUtils;
|
import com.ruoyi.common.utils.CollUtils;
|
import com.ruoyi.common.utils.SecurityUtils;
|
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.system.domain.TbDept;
|
import com.ruoyi.system.dto.update.DeptFocusDTO;
|
import com.ruoyi.system.handler.DeptVerifyHandler;
|
import com.ruoyi.system.importExcel.DeptExcel;
|
import com.ruoyi.system.mapper.TbDeptMapper;
|
import com.ruoyi.system.query.DeptQuery;
|
import com.ruoyi.system.service.TbDeptService;
|
import com.ruoyi.system.vo.DeptVO;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import java.io.InputStream;
|
import java.util.*;
|
|
/**
|
* <p>
|
* 部门管理表 服务实现类
|
* </p>
|
*
|
* @author mitao
|
* @since 2024-03-13
|
*/
|
@Service
|
@RequiredArgsConstructor
|
public class TbDeptServiceImpl extends ServiceImpl<TbDeptMapper, TbDept> implements TbDeptService {
|
|
private final DeptVerifyHandler deptVerifyHandler;
|
|
@Override
|
public PageDTO<DeptVO> queryPage(DeptQuery query) {
|
Page<TbDept> page = new Page<>(query.getPageNum(), query.getPageSize());
|
Page<TbDept> tbDeptPage = this.lambdaQuery().like(StringUtils.isNotEmpty(query.getAreaName()), TbDept::getAreaName, query.getAreaName())
|
.like(StringUtils.isNotEmpty(query.getAccount()), TbDept::getAccount, query.getAccount())
|
.like(StringUtils.isNotEmpty(query.getPhone()), TbDept::getPhone, query.getPhone())
|
.orderByDesc(TbDept::getCreateTime)
|
.page(page);
|
if (CollUtils.isEmpty(tbDeptPage.getRecords())) {
|
return PageDTO.empty(page);
|
}
|
return PageDTO.of(tbDeptPage, DeptVO.class);
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void importExcel(MultipartFile file) throws Exception {
|
ImportParams importParams = new ImportParams();
|
//表格标题行数,默认0
|
importParams.setTitleRows(1);
|
//是否需要校验上传的Excel
|
importParams.setNeedVerify(true);
|
//使用自定义校验规则
|
importParams.setVerifyHandler(deptVerifyHandler);
|
InputStream inputStream = file.getInputStream();
|
ExcelImportResult<DeptExcel> result = ExcelImportUtil.importExcelMore(inputStream, DeptExcel.class, importParams);
|
inputStream.close();
|
List<DeptExcel> list = result.getList();
|
|
if (result.isVerifyFail() || CollectionUtils.isEmpty(list)) {
|
throw new ServiceException("文件校验失败,请检查数据填写是否完整");
|
}
|
List<String> strings = hasDuplicateAreaCode(list);
|
if (!CollectionUtils.isEmpty(strings)) {
|
throw new ServiceException(String.format("区划代码%s重复,请修改后重新导入", String.join(",", strings)));
|
}else {
|
List<TbDept> tbDeptList = BeanUtils.copyList(list, TbDept.class);
|
this.remove(null);
|
tbDeptList.forEach(dept->{
|
dept.setPassword(SecurityUtils.encryptPassword(dept.getPassword()));
|
});
|
this.saveBatch(tbDeptList);
|
}
|
}
|
|
/**
|
* 校验区划代码是否重复
|
* @param deptList 部门列表
|
* @return 重复的区划代码
|
*/
|
public List<String> hasDuplicateAreaCode(List<DeptExcel> deptList) {
|
Set<String> areaCodes = new HashSet<>();
|
List<String> result = new ArrayList<>();
|
for (DeptExcel dept : deptList) {
|
if (!areaCodes.add(dept.getAreaCode())) {
|
result.add(dept.getAreaCode());
|
}
|
}
|
return result;
|
}
|
|
@Override
|
public void focus(DeptFocusDTO dto) {
|
TbDept dept = this.getById(dto.getId());
|
if (Objects.isNull(dept)) {
|
throw new ServiceException("非法参数");
|
}
|
this.lambdaUpdate()
|
.eq(TbDept::getId, dto.getId())
|
.set(TbDept::getFocussed, dto.getFocussed())
|
.update();
|
}
|
}
|