package com.jdc.jdcproject.service.impl; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelReader; import com.alibaba.excel.read.metadata.ReadSheet; import com.jdc.jdcproject.entity.DianjicheTimetable; import com.jdc.jdcproject.mapper.DianjicheTimetableMapper; import com.jdc.jdcproject.service.IDianjicheTimetableService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jdc.jdcproject.utils.EasyExcelListener; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; /** *

* 电机车作业时间统计台帐; 服务实现类 *

* * @author haoyanlu * @since 2025-06-14 */ @Service public class DianjicheTimetableServiceImpl extends ServiceImpl implements IDianjicheTimetableService { private static Integer toInteger(Object obj) { if (obj == null) return 0; if (obj instanceof Number) return ((Number) obj).intValue(); try { return Integer.parseInt(obj.toString()); } catch (NumberFormatException e) { return 0; } } @Override public List uploadsave(MultipartFile file) { EasyExcelListener> listener = new EasyExcelListener>(); List flatList = new ArrayList<>(); try (ExcelReader excelReader = EasyExcel.read(file.getInputStream()).build()) { ReadSheet readSheet = EasyExcel.readSheet(4).headRowNumber(6).registerReadListener(listener).build(); excelReader.read(readSheet); List> datas = listener.getDatas(); Map integerStringMap = datas.get(0); String datestr = String.valueOf(integerStringMap.get(0)).replace("电机车作业时间统计台帐", ""); SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd"); List> dianjicheTimetables = new ArrayList<>(); for (int i = 6; i < datas.size(); i++) { if (!datas.get(i).get(0).equals("上旬") && !datas.get(i).get(0).equals("中旬") && !datas.get(i).get(0).equals("下旬") && !datas.get(i).get(0).equals("月计")) { Date parse = format.parse(datestr + datas.get(i).get(0)); dianjicheTimetables.add(buildTimetable(datas.get(i),parse)); } } flatList = dianjicheTimetables.stream() .filter(subList -> subList != null) // 过滤null子列表 .flatMap(List::stream) // 扁平化流 .collect(Collectors.toList()); } catch (Exception e) { throw new RuntimeException(e); } return flatList; } private static List buildTimetable(Map row,Date parse) { List list = new ArrayList<>(); Set processedShifts = new HashSet<>(); for (Map.Entry entry : row.entrySet()) { if (6 <= entry.getKey() && entry.getKey() <11) { if (!processedShifts.contains(0)){ DianjicheTimetable tt = new DianjicheTimetable(); tt.setDate(parse); tt.setShiftId(0); tt.setUnits(toInteger(row.get(6))); tt.setTotaltime(toInteger(row.get(7))); tt.setProductiontime(toInteger(row.get(8))); tt.setNonProductivetime(toInteger(row.get(9))); list.add(tt); processedShifts.add(0); } }else if (11 <= entry.getKey() && entry.getKey() < 16 ){ if (!processedShifts.contains(1)){ DianjicheTimetable tt = new DianjicheTimetable(); tt.setDate(parse); tt.setShiftId(1); tt.setUnits(toInteger(row.get(11))); tt.setTotaltime(toInteger(row.get(12))); tt.setProductiontime(toInteger(row.get(13))); tt.setNonProductivetime(toInteger(row.get(14))); list.add(tt); processedShifts.add(1); } }else if (16 <= entry.getKey() && entry.getKey() < 20){ if (!processedShifts.contains(2)){ DianjicheTimetable tt = new DianjicheTimetable(); tt.setDate(parse); tt.setShiftId(2); tt.setUnits(toInteger(row.get(16))); tt.setTotaltime(toInteger(row.get(17))); tt.setProductiontime(toInteger(row.get(18))); tt.setNonProductivetime(toInteger(row.get(19))); list.add(tt); processedShifts.add(2); } } } return list; } }