122 lines
5.2 KiB
Java
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;
|
||
|
|
}
|
||
|
|
}
|