JdcProject/src/main/java/com/jdc/jdcproject/service/impl/DianjicheTimetableServiceImpl.java
2025-11-28 15:36:00 +08:00

122 lines
5.2 KiB
Java

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;
/**
* <p>
* 电机车作业时间统计台帐; 服务实现类
* </p>
*
* @author haoyanlu
* @since 2025-06-14
*/
@Service
public class DianjicheTimetableServiceImpl extends ServiceImpl<DianjicheTimetableMapper, DianjicheTimetable> 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<DianjicheTimetable> uploadsave(MultipartFile file) {
EasyExcelListener<Map<Integer, Object>> listener = new EasyExcelListener<Map<Integer, Object>>();
List<DianjicheTimetable> 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<Map<Integer, Object>> datas = listener.getDatas();
Map<Integer, Object> integerStringMap = datas.get(0);
String datestr = String.valueOf(integerStringMap.get(0)).replace("电机车作业时间统计台帐", "");
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd");
List<List<DianjicheTimetable>> 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<DianjicheTimetable> buildTimetable(Map<Integer, Object> row,Date parse) {
List<DianjicheTimetable> list = new ArrayList<>();
Set<Integer> processedShifts = new HashSet<>();
for (Map.Entry<Integer, Object> 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;
}
}