fuliqi
2024-09-30 b5df1cee65f3e9dcf554efcd3f1642a8c79d1e76
ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java
@@ -1,11 +1,14 @@
package com.ycl.platform.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.dataListener.CurrencyDataListener;
import com.ycl.platform.base.AbsVo;
import com.ycl.platform.domain.entity.ReportAuditingRecord;
import com.ycl.platform.domain.entity.YwPeople;
import com.ycl.platform.domain.entity.YwPoint;
@@ -15,8 +18,11 @@
import com.ycl.platform.domain.query.YwPointQuery;
import com.ycl.platform.domain.result.BaseResult;
import com.ycl.platform.domain.vo.CheckTagVO;
import com.ycl.platform.domain.vo.DynamicColumnVO;
import com.ycl.platform.domain.vo.ReportAuditingRecordVO;
import com.ycl.platform.domain.vo.YwPointVO;
import com.ycl.platform.mapper.DynamicColumnMapper;
import com.ycl.platform.mapper.TMonitorMapper;
import com.ycl.platform.mapper.YwPeopleMapper;
import com.ycl.platform.mapper.YwPointMapper;
import com.ycl.platform.service.YwPointService;
@@ -34,12 +40,14 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@@ -53,19 +61,12 @@
public class YwPointServiceImpl extends ServiceImpl<YwPointMapper, YwPoint> implements YwPointService {
    private final SysDeptMapper sysDeptMapper;
    private final YwUnitService unitService;
    private final YwPeopleMapper ywPeopleMapper;
    private static final ExecutorService executorService = new ThreadPoolExecutor(8,
            24,
            5000,
            TimeUnit.SECONDS,
            new ArrayBlockingQueue<>(10),
            new ThreadPoolExecutor.CallerRunsPolicy()
    );
    private final TMonitorMapper monitorMapper;
    private final DynamicColumnMapper dynamicColumnMapper;
    /**
     * 添加
     *
     * @param form
     * @return
     */
@@ -75,7 +76,7 @@
        Date now = new Date();
        entity.setCreateTime(now);
        entity.setUpdateTime(now);
        if(baseMapper.insert(entity) > 0) {
        if (baseMapper.insert(entity) > 0) {
            return Result.ok("添加成功");
        }
        return Result.error("添加失败");
@@ -119,6 +120,7 @@
    /**
     * 修改
     *
     * @param form
     * @return
     */
@@ -135,12 +137,13 @@
    /**
     * 批量删除
     *
     * @param ids
     * @return
     */
    @Override
    public Result remove(List<String> ids) {
        if(baseMapper.deleteBatchIds(ids) > 0) {
        if (baseMapper.deleteBatchIds(ids) > 0) {
            return Result.ok("删除成功");
        }
        return Result.error("删除失败");
@@ -148,12 +151,13 @@
    /**
     * id删除
     *
     * @param id
     * @return
     */
    @Override
    public Result removeById(String id) {
        if(baseMapper.deleteById(id) > 0) {
        if (baseMapper.deleteById(id) > 0) {
            return Result.ok("删除成功");
        }
        return Result.error("删除失败");
@@ -161,6 +165,7 @@
    /**
     * 分页查询
     *
     * @param query
     * @return
     */
@@ -173,6 +178,7 @@
    /**
     * 根据id查找
     *
     * @param id
     * @return
     */
@@ -189,6 +195,7 @@
    /**
     * 列表
     *
     * @return
     */
    @Override
@@ -234,13 +241,71 @@
    public void export(YwPointQuery query, HttpServletResponse response) throws IOException {
        // 导出数据
        List<PointExport> exportData = baseMapper.export(query);
        EasyExcel.write(response.getOutputStream(), PointExport.class)
                .sheet("点位更换运维单位")
                .doWrite(exportData);
        //获取动态列数据
        List<String> dynamicsHeaders = dynamicColumnMapper.getHeader("t_yw_point");
        List<DynamicColumnVO> dynamics = dynamicColumnMapper.getData();
        Map<Integer, List<DynamicColumnVO>> dynamicMap = new HashMap<>();
        if (!CollectionUtils.isEmpty(dynamics)) {
            dynamicMap = dynamics.stream().filter(vo ->vo.getId()!=null).collect(Collectors.groupingBy(AbsVo::getId));
        }
        //定义表头列表
        LinkedHashSet<String> headers = new LinkedHashSet<>();
        headers.add("点位名称(可修改)");
        headers.add("国标码(不可修改)");
        headers.add("点位IP(可修改)");
        headers.add("是否省厅标签(可修改)");
        headers.add("是否重点指挥图像(可修改)");
        headers.add("是否部级标签(可修改)");
        List<String> headersList = new LinkedList<>();
        if (!CollectionUtils.isEmpty(dynamicsHeaders)) {
            //使用链表保证后续补充数据时获取数据顺序一致
            headersList.addAll(dynamicsHeaders);
            headers.addAll(headersList);
        }
        // 定义数据
        List<List<Object>> data = new ArrayList<>();
        for (PointExport export : exportData) {
            List<Object> list = new ArrayList<>();
            //需要保证顺序一致
            list.add(export.getPointName());
            list.add(export.getSerialNumber());
            list.add(export.getPointIP());
            list.add(export.getProvinceTagString());
            list.add(export.getImportantCommandImageTagString());
            list.add(export.getDeptTag());
            for (String header : headersList) {
                //创建一个变量记录找没找到这个header
                boolean flag = false;
                List<DynamicColumnVO> columnVOS = dynamicMap.get(export.getId());
                if (!CollectionUtils.isEmpty(columnVOS)) {
                    for (DynamicColumnVO columnVO : columnVOS) {
                        if (header.equals(columnVO.getLabelValue())) {
                            list.add(columnVO.getColumnValue());
                            flag = true;
                        }
                    }
                }
                //没找到用空串占位
                if (!flag) list.add("");
            }
            data.add(list);
        }
        List<List<String>> headList = new ArrayList<>();
        for (String header : headers) {
            headList.add(Collections.singletonList(header));
        }
        EasyExcel.write(response.getOutputStream())
                .head(headList) // 设置表头
                .sheet("点位更换运维单位") // 设置sheet名称
                .doWrite(data); // 写入数据
    }
    @Override
    public Result importData(MultipartFile file, Integer unitId, Date startTime, Date endTime, Boolean needUpdateUnit) throws IOException {
    public Result importData(MultipartFile file, Integer unitId, Date startTime, Date endTime, Boolean
            needUpdateUnit) throws IOException {
        Consumer<List<PointExport>> consumer = (dataList) -> {
            try {
                this.updatePoint(dataList, unitId, startTime, endTime, needUpdateUnit);
@@ -250,7 +315,7 @@
                e.printStackTrace();
            }
        };
        EasyExcel.read(file.getInputStream(), PointExport.class , new CurrencyDataListener(consumer)).headRowNumber(1).doReadAll();
        EasyExcel.read(file.getInputStream(), PointExport.class, new CurrencyDataListener(consumer)).headRowNumber(1).doReadAll();
        return Result.ok();
    }
@@ -266,7 +331,8 @@
     * @param unitId
     */
    @Transactional(rollbackFor = Exception.class)
    public void updatePoint(List<PointExport> dataList, Integer unitId, Date startTime, Date endTime, Boolean needUpdateUnit) throws ExecutionException, InterruptedException {
    public void updatePoint(List<PointExport> dataList, Integer unitId, Date startTime, Date endTime, Boolean
            needUpdateUnit) throws ExecutionException, InterruptedException {
        if (CollectionUtils.isEmpty(dataList)) {
            throw new RuntimeException("导入数据不能为空");
        }
@@ -294,7 +360,8 @@
        this.waitAllFinishAndGetResult(pointList);
    }
    public void waitAllFinishAndGetResult(List<YwPoint> dataList) throws InterruptedException, ExecutionException {
    public void waitAllFinishAndGetResult(List<YwPoint> dataList) throws
            InterruptedException, ExecutionException {
        int start = 0;
        Date startTime = new Date();
        while (true) {
@@ -324,4 +391,16 @@
            }
        }
    }
    @Override
    public <T extends BaseResult> void setNew(List<T> dataList) {
        List<String> gbList = dataList.stream().map(BaseResult::getNo).collect(Collectors.toList());
        Map<String, BaseResult> pointMap = dataList.stream().collect(Collectors.toMap(BaseResult::getNo, item -> item));
        List<String> dbGBList = monitorMapper.getGBbyGB(gbList);
        for (String s : gbList) {
            BaseResult baseResult = pointMap.get(s);
            baseResult.setNewDevice(!dbGBList.contains(s));
        }
    }
}