package com.ycl.platform.service.impl;
|
|
|
import com.alibaba.fastjson2.JSON;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ycl.platform.domain.dto.MonitorConstructionDTO;
|
import com.ycl.platform.domain.dto.ReportImportDTO;
|
import com.ycl.platform.domain.entity.MonitorConstruction;
|
import com.ycl.platform.mapper.IMonitorConstructionMapper;
|
import com.ycl.platform.service.IMonitorConstructionService;
|
import com.ycl.system.Result;
|
import com.ycl.utils.StringUtils;
|
import com.ycl.utils.poi.ExcelUtil;
|
import enumeration.ConstructionTypeEnum;
|
import jakarta.servlet.http.HttpServletResponse;
|
import lombok.RequiredArgsConstructor;
|
import lombok.SneakyThrows;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.collections.CollectionUtils;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import java.io.IOException;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Objects;
|
import java.util.stream.Collectors;
|
|
/**
|
* zgyw
|
*
|
* @author : zxl
|
* @date : 2025-10-20 13:58
|
**/
|
@Service
|
@Slf4j
|
@RequiredArgsConstructor
|
public class IMonitorConstructionServiceImpl extends ServiceImpl<IMonitorConstructionMapper, MonitorConstruction>
|
implements IMonitorConstructionService {
|
private final IMonitorConstructionMapper monitorConstructionMapper;
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public Result importExcel(MultipartFile file) {
|
log.info("进入导入逻辑");
|
ExcelUtil<MonitorConstructionDTO> excelUtil = new ExcelUtil<>(MonitorConstructionDTO.class);
|
List<MonitorConstructionDTO> list = null;
|
List<MonitorConstructionDTO> distinctList = null;
|
try {
|
list = excelUtil.importExcel(file.getInputStream());
|
distinctList = list.stream()
|
.filter(Objects::nonNull)//过滤掉null的对象
|
.filter(dto -> dto.getSerialNumber() != null)//过滤掉 getSerialNumber为null的对象
|
.collect(Collectors.toMap(
|
MonitorConstructionDTO::getSerialNumber,
|
dto -> dto,
|
(existing, replacement) -> existing
|
))
|
.values()
|
.stream()
|
.collect(Collectors.toList());
|
} catch (IOException e) {
|
log.error("请检查导入excel表格内容");
|
throw new RuntimeException("请检查导入excel表格内容");
|
}
|
|
List<MonitorConstruction> data = new ArrayList<>();
|
for (MonitorConstructionDTO dto : distinctList) {
|
MonitorConstruction monitorConstruction = new MonitorConstruction();
|
monitorConstruction.setSerialNumber(dto.getSerialNumber());
|
monitorConstruction.setTag(dto.getTag());
|
data.add(monitorConstruction);
|
}
|
List<String> serialNumbers = data.stream()
|
.map(MonitorConstruction::getSerialNumber)
|
.collect(Collectors.toList());
|
|
//删除已存在的设备对应标签
|
if (CollectionUtils.isNotEmpty(serialNumbers)) {
|
log.info("删除标签数据行数:{}",serialNumbers.size());
|
QueryWrapper<MonitorConstruction> queryWrapper = new QueryWrapper<>();
|
queryWrapper.in("serial_number", serialNumbers);
|
queryWrapper.eq("deleted",false);
|
baseMapper.delete(queryWrapper);
|
}
|
|
if (CollectionUtils.isNotEmpty(data)) {
|
//插入标签表中
|
log.info("插入标签数据行数:{}",data.size());
|
saveBatch(data);
|
}
|
return Result.ok();
|
}
|
|
|
@Override
|
public void getImportTemplate(HttpServletResponse httpServletResponse){
|
ExcelUtil<MonitorConstructionDTO> excelUtil = new ExcelUtil<>(MonitorConstructionDTO.class);
|
excelUtil.exportExcel(httpServletResponse, null, "设备标签模板");
|
}
|
|
@Override
|
public List<MonitorConstruction> getSerialNumberListByConstructionType(String constructionType) {
|
List<MonitorConstruction> list = new ArrayList<>();
|
if (ConstructionTypeEnum.PHASE_ONE_TWO.name().equals(constructionType)){
|
//一二期
|
list = new LambdaQueryChainWrapper<>(baseMapper).eq(MonitorConstruction::getDeleted, Boolean.FALSE)
|
.eq(MonitorConstruction::getTag, ConstructionTypeEnum.PHASE_ONE_TWO.getDesc())
|
.list();
|
|
}else if (ConstructionTypeEnum.PHASE_THREE.name().equals(constructionType)){
|
//三期
|
list = new LambdaQueryChainWrapper<>(baseMapper).eq(MonitorConstruction::getDeleted, Boolean.FALSE)
|
.eq(MonitorConstruction::getTag, ConstructionTypeEnum.PHASE_THREE.getDesc())
|
.list();
|
}else if (ConstructionTypeEnum.PHASE_FOURTH.name().equals(constructionType)){
|
//四期人脸
|
list = new LambdaQueryChainWrapper<>(baseMapper).eq(MonitorConstruction::getDeleted, Boolean.FALSE)
|
.eq(MonitorConstruction::getTag, ConstructionTypeEnum.PHASE_FOURTH.getDesc())
|
.list();
|
}else if (ConstructionTypeEnum.EASTERN_NEW_CITY.name().equals(constructionType)){
|
//东部新城
|
list = new LambdaQueryChainWrapper<>(baseMapper).eq(MonitorConstruction::getDeleted, Boolean.FALSE)
|
.eq(MonitorConstruction::getTag, ConstructionTypeEnum.EASTERN_NEW_CITY.getDesc())
|
.list();
|
}else if (ConstructionTypeEnum.CHECK_ENTER_SICHUAN.name().equals(constructionType)){
|
//入川即检
|
list = new LambdaQueryChainWrapper<>(baseMapper).eq(MonitorConstruction::getDeleted, Boolean.FALSE)
|
.eq(MonitorConstruction::getTag, ConstructionTypeEnum.CHECK_ENTER_SICHUAN.getDesc())
|
.list();
|
}else if (ConstructionTypeEnum.YAN_TAN_PHASE_TWO_FACE.name().equals(constructionType)){
|
//沿滩二期人脸
|
list = new LambdaQueryChainWrapper<>(baseMapper).eq(MonitorConstruction::getDeleted, Boolean.FALSE)
|
.eq(MonitorConstruction::getTag, ConstructionTypeEnum.YAN_TAN_PHASE_TWO_FACE.getDesc())
|
.list();
|
}
|
return list;
|
}
|
}
|