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.utils.CollUtils;
|
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.system.domain.TbDept;
|
import com.ruoyi.system.handler.DeptVerifyHandler;
|
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<TbDept> result = ExcelImportUtil.importExcelMore(inputStream, TbDept.class, importParams);
|
inputStream.close();
|
List<TbDept> list = result.getList();
|
if (Objects.requireNonNull(result).isVerfiyFail() || CollectionUtils.isEmpty(list)) {
|
throw new RuntimeException("文件校验失败,请检查数据填写是否完整");
|
}
|
List<String> strings = hasDuplicateAreaCode(list);
|
if (!CollectionUtils.isEmpty(strings)) {
|
throw new RuntimeException(String.format("区划代码%s重复,请修改后重新导入", String.join(",", strings)));
|
}else {
|
this.remove(null);
|
this.saveBatch(list);
|
}
|
}
|
|
/**
|
* 校验区划代码是否重复
|
* @param deptList 部门列表
|
* @return 重复的区划代码
|
*/
|
public List<String> hasDuplicateAreaCode(List<TbDept> deptList) {
|
Set<String> areaCodes = new HashSet<>();
|
List<String> result = new ArrayList<>();
|
for (TbDept dept : deptList) {
|
if (!areaCodes.add(dept.getAreaCode())) {
|
result.add(dept.getAreaCode());
|
}
|
}
|
return result;
|
}
|
}
|