Excel上传接口优化
This commit is contained in:
parent
0f39654327
commit
b8a4ca52dc
@ -30,127 +30,127 @@ public class EmployeeAttendanceBo {
|
||||
@ExcelProperty("UserId")
|
||||
@JsonProperty("UserId")
|
||||
private String userId;
|
||||
@ExcelProperty("day1")
|
||||
@ExcelProperty("1")
|
||||
@JsonProperty("1")
|
||||
private String day1;
|
||||
|
||||
@ExcelProperty("day2")
|
||||
@ExcelProperty("2")
|
||||
@JsonProperty("2")
|
||||
private String day2;
|
||||
|
||||
@ExcelProperty("day3")
|
||||
@ExcelProperty("3")
|
||||
@JsonProperty("3")
|
||||
private String day3;
|
||||
|
||||
@ExcelProperty("day4")
|
||||
@ExcelProperty("4")
|
||||
@JsonProperty("4")
|
||||
private String day4;
|
||||
|
||||
@ExcelProperty("day5")
|
||||
@ExcelProperty("5")
|
||||
@JsonProperty("5")
|
||||
private String day5;
|
||||
|
||||
@ExcelProperty("day6")
|
||||
@ExcelProperty("6")
|
||||
@JsonProperty("6")
|
||||
private String day6;
|
||||
|
||||
@ExcelProperty("day7")
|
||||
@ExcelProperty("7")
|
||||
@JsonProperty("7")
|
||||
private String day7;
|
||||
|
||||
@ExcelProperty("day8")
|
||||
@ExcelProperty("8")
|
||||
@JsonProperty("8")
|
||||
private String day8;
|
||||
|
||||
@ExcelProperty("day9")
|
||||
@ExcelProperty("9")
|
||||
@JsonProperty("9")
|
||||
private String day9;
|
||||
|
||||
@ExcelProperty("day10")
|
||||
@ExcelProperty("10")
|
||||
@JsonProperty("10")
|
||||
private String day10;
|
||||
|
||||
@ExcelProperty("day11")
|
||||
@ExcelProperty("11")
|
||||
@JsonProperty("11")
|
||||
private String day11;
|
||||
|
||||
@ExcelProperty("day12")
|
||||
@ExcelProperty("12")
|
||||
@JsonProperty("12")
|
||||
private String day12;
|
||||
|
||||
@ExcelProperty("day13")
|
||||
@ExcelProperty("13")
|
||||
@JsonProperty("13")
|
||||
private String day13;
|
||||
|
||||
@ExcelProperty("day14")
|
||||
@ExcelProperty("14")
|
||||
@JsonProperty("14")
|
||||
private String day14;
|
||||
|
||||
@ExcelProperty("day15")
|
||||
@ExcelProperty("15")
|
||||
@JsonProperty("15")
|
||||
private String day15;
|
||||
|
||||
@ExcelProperty("day16")
|
||||
@ExcelProperty("16")
|
||||
@JsonProperty("16")
|
||||
private String day16;
|
||||
|
||||
@ExcelProperty("day17")
|
||||
@ExcelProperty("17")
|
||||
@JsonProperty("17")
|
||||
private String day17;
|
||||
|
||||
@ExcelProperty("day18")
|
||||
@ExcelProperty("18")
|
||||
@JsonProperty("18")
|
||||
private String day18;
|
||||
|
||||
@ExcelProperty("day19")
|
||||
@ExcelProperty("19")
|
||||
@JsonProperty("19")
|
||||
private String day19;
|
||||
|
||||
@ExcelProperty("day20")
|
||||
@ExcelProperty("20")
|
||||
@JsonProperty("20")
|
||||
private String day20;
|
||||
|
||||
@ExcelProperty("day21")
|
||||
@ExcelProperty("21")
|
||||
@JsonProperty("21")
|
||||
private String day21;
|
||||
|
||||
@ExcelProperty("day22")
|
||||
@ExcelProperty("22")
|
||||
@JsonProperty("22")
|
||||
private String day22;
|
||||
|
||||
@ExcelProperty("day23")
|
||||
@ExcelProperty("23")
|
||||
@JsonProperty("23")
|
||||
private String day23;
|
||||
|
||||
@ExcelProperty("day24")
|
||||
@ExcelProperty("24")
|
||||
@JsonProperty("24")
|
||||
private String day24;
|
||||
|
||||
@ExcelProperty("day25")
|
||||
@ExcelProperty("25")
|
||||
@JsonProperty("25")
|
||||
private String day25;
|
||||
|
||||
@ExcelProperty("day26")
|
||||
@ExcelProperty("26")
|
||||
@JsonProperty("26")
|
||||
private String day26;
|
||||
|
||||
@ExcelProperty("day27")
|
||||
@ExcelProperty("27")
|
||||
@JsonProperty("27")
|
||||
private String day27;
|
||||
|
||||
@ExcelProperty("day28")
|
||||
@ExcelProperty("28")
|
||||
@JsonProperty("28")
|
||||
private String day28;
|
||||
|
||||
@ExcelProperty("day29")
|
||||
@ExcelProperty("29")
|
||||
@JsonProperty("29")
|
||||
private String day29;
|
||||
|
||||
@ExcelProperty("day30")
|
||||
@ExcelProperty("30")
|
||||
@JsonProperty("30")
|
||||
private String day30;
|
||||
|
||||
@ExcelProperty("day31")
|
||||
@ExcelProperty("31")
|
||||
@JsonProperty("31")
|
||||
private String day31;
|
||||
|
||||
|
||||
@ -58,12 +58,10 @@ public class ClockInRecordServiceImpl implements ClockInRecordService {
|
||||
**/
|
||||
@Override
|
||||
public String uploadRecord(MultipartFile file) throws IOException, ParseException {
|
||||
|
||||
List<Map<Integer, String>> dataList = new ArrayList<>();
|
||||
EasyExcel.read(file.getInputStream())
|
||||
.sheet()
|
||||
.registerReadListener(new AnalysisEventListener<Map<Integer, String>>() {
|
||||
List<Map<Integer, String>> dataList = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public void invoke(Map<Integer, String> data, AnalysisContext context) {
|
||||
|
||||
@ -83,43 +81,31 @@ public class ClockInRecordServiceImpl implements ClockInRecordService {
|
||||
|
||||
@Override
|
||||
public void doAfterAllAnalysed(AnalysisContext context) {
|
||||
// 处理数据完成后的操作
|
||||
String jsonData = JSON.toJSONString(dataList);
|
||||
// 存入Redis中
|
||||
redisService.setCacheObject(ClockInConstant.CLOCKIN_EXCEL_JSON,jsonData,5, TimeUnit.MINUTES);
|
||||
System.out.println(jsonData);
|
||||
}
|
||||
})
|
||||
.doRead();
|
||||
|
||||
String cacheObject = redisService.getCacheObject(ClockInConstant.CLOCKIN_EXCEL_JSON);
|
||||
JSONArray jsonArray = new JSONArray(cacheObject);
|
||||
|
||||
Map<Integer, String> sortedJsonObject = dataList.get(1);
|
||||
List<Map> mergedJsonList = new ArrayList<>();
|
||||
|
||||
// 依据键从小到大排序
|
||||
JSONObject titleObject = jsonArray.getJSONObject(1);
|
||||
Map<String, String> sortedJsonObject = new LinkedHashMap<>();
|
||||
|
||||
titleObject.keySet().stream()
|
||||
.sorted(Comparator.comparingInt(Integer::parseInt))
|
||||
.forEach(key -> {
|
||||
// 将排序后的键和对应的值加入新的JSONObject
|
||||
System.out.println(key + ": " + titleObject.getString(key));
|
||||
sortedJsonObject.put(key, titleObject.getString(key));
|
||||
});
|
||||
|
||||
// 合并键值对
|
||||
for (int i = 2; i < jsonArray.length(); i++) {
|
||||
for (int i = 2; i < dataList.size(); i++) {
|
||||
Map<String, String> mergedJson = new LinkedHashMap<>();
|
||||
Map<Integer, String> element = dataList.get(i);
|
||||
String name = element.get(0);
|
||||
ClockInStaff clockInStaff = clockInStaffService.getOne(QueryWrapper.create().eq("name", name));
|
||||
List<StaffClasses> staffClasses = new ArrayList<>();
|
||||
if (ObjectUtil.isNotNull(clockInStaff)) staffClasses = staffClassesService.list(QueryWrapper.create().eq("staff_id", clockInStaff.getId()));
|
||||
|
||||
|
||||
for (String key : sortedJsonObject.keySet()) {
|
||||
String newKey = titleObject.getString(key);
|
||||
|
||||
for (Integer key : sortedJsonObject.keySet()) {
|
||||
String newKey = sortedJsonObject.get(key);
|
||||
|
||||
|
||||
// 获取当前元素
|
||||
JSONObject element = jsonArray.getJSONObject(i);
|
||||
String value = element.getString(key);
|
||||
String value = element.get(key);
|
||||
// 时间列
|
||||
if (newKey.matches("-?\\d+(\\.\\d+)?") || newKey.equals("六") || newKey.equals("日")){
|
||||
// 工时
|
||||
@ -127,12 +113,9 @@ public class ClockInRecordServiceImpl implements ClockInRecordService {
|
||||
// 加班时间
|
||||
double overtime = 0.0;
|
||||
|
||||
String name = element.getString("0");
|
||||
// 匹配员工
|
||||
ClockInStaff clockInStaff = clockInStaffService.getOne(QueryWrapper.create().eq("name", name));
|
||||
// 查找班次
|
||||
if (ObjectUtil.isNotNull( clockInStaff)) {
|
||||
List<StaffClasses> staffClasses = staffClassesService.list(QueryWrapper.create().eq("staff_id", clockInStaff.getId()));
|
||||
for (StaffClasses staffClass : staffClasses) {
|
||||
Classes classes = classesService.getById(staffClass.getClassId());
|
||||
if (ObjectUtil.isNotNull(classes) && ObjectUtil.isNotEmpty(value)){
|
||||
@ -180,7 +163,6 @@ public class ClockInRecordServiceImpl implements ClockInRecordService {
|
||||
overtime = (double) timeDifferenceInMillis / (1000 * 60 * 60);
|
||||
}
|
||||
|
||||
System.out.println("lastTime==========="+ lastTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -210,4 +192,138 @@ public class ClockInRecordServiceImpl implements ClockInRecordService {
|
||||
|
||||
return jsonString;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*@Override
|
||||
public String uploadRecord(MultipartFile file) throws IOException, ParseException {
|
||||
*//*EasyExcel.read(file.getInputStream())
|
||||
.sheet()
|
||||
.registerReadListener(new AnalysisEventListener<EmployeeAttendanceBo>() {
|
||||
@Override
|
||||
public void invoke(EmployeeAttendanceBo bo, AnalysisContext context) {
|
||||
dataList.add(bo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doAfterAllAnalysed(AnalysisContext context) {
|
||||
// 处理数据完成后的操作
|
||||
|
||||
}
|
||||
})
|
||||
.doRead();*//*
|
||||
ExcelListener excelListener = new ExcelListener();
|
||||
EasyExcel.read(file.getInputStream(), EmployeeAttendanceBo.class, excelListener)
|
||||
.headRowNumber(3) // 从第三行开始读取数据
|
||||
.sheet().doReadSync();
|
||||
List<EmployeeAttendanceBo> dataList = excelListener.getDataList();
|
||||
|
||||
for (EmployeeAttendanceBo employeeAttendanceBo : dataList) {
|
||||
Class<?> clazz = employeeAttendanceBo.getClass();
|
||||
Field[] fields = clazz.getDeclaredFields();
|
||||
ClockInStaff clockInStaff = clockInStaffService.getOne(QueryWrapper.create().eq("name", employeeAttendanceBo.getName()));
|
||||
if (ObjectUtil.isNotNull(clockInStaff)){
|
||||
List<StaffClasses> staffClasses = staffClassesService.list(QueryWrapper.create().eq("staff_id", clockInStaff.getId()));
|
||||
for (Field field : fields) {
|
||||
if (field.getName().startsWith("day")) {
|
||||
try {
|
||||
field.setAccessible(true);
|
||||
String dayValue = (String) field.get(employeeAttendanceBo);
|
||||
|
||||
// 进行后续操作,例如输出或其他处理
|
||||
// 工时
|
||||
double manHour = 0.0;
|
||||
// 加班时间
|
||||
double overtime = 0.0;
|
||||
|
||||
|
||||
// 匹配员工
|
||||
// 查找班次
|
||||
if (ObjectUtil.isNotNull( clockInStaff)) {
|
||||
for (StaffClasses staffClass : staffClasses) {
|
||||
Classes classes = classesService.getById(staffClass.getClassId());
|
||||
if (ObjectUtil.isNotNull(classes) && ObjectUtil.isNotEmpty(dayValue)){
|
||||
// 计算工时
|
||||
String firstTime = dayValue.substring(0, 5);
|
||||
|
||||
// String lastTime = value.substring( value.length() - 5,value.length());
|
||||
String lastTime = dayValue.substring(dayValue.length() - 5).trim();
|
||||
|
||||
String pattern = "HH:mm";
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
|
||||
|
||||
Date firstTimeDate = dateFormat.parse(firstTime);
|
||||
Date lastTimeDate = dateFormat.parse(lastTime);
|
||||
Date overTimeDate = dateFormat.parse("21:00");
|
||||
|
||||
if (firstTimeDate.before(classes.getStartTime())){
|
||||
// 正常上班卡
|
||||
if (lastTimeDate.before(classes.getEndTime())){
|
||||
// 早退
|
||||
long timeDifferenceInMillis = lastTimeDate.getTime() - classes.getStartTime().getTime();
|
||||
manHour = manHour + (double) timeDifferenceInMillis / (1000 * 60 * 60);
|
||||
}else {
|
||||
// 正常下班
|
||||
long timeDifferenceInMillis = classes.getEndTime().getTime() - classes.getStartTime().getTime();
|
||||
manHour = manHour + (double) timeDifferenceInMillis / (1000 * 60 * 60);
|
||||
}
|
||||
}else {
|
||||
// 迟到
|
||||
if (lastTimeDate.before(classes.getEndTime())){
|
||||
// 早退
|
||||
long timeDifferenceInMillis = lastTimeDate.getTime() - firstTimeDate.getTime();
|
||||
manHour = manHour + (double) timeDifferenceInMillis / (1000 * 60 * 60);
|
||||
}else {
|
||||
// 正常下班
|
||||
long timeDifferenceInMillis = classes.getEndTime().getTime() - firstTimeDate.getTime();
|
||||
manHour = manHour + (double) timeDifferenceInMillis / (1000 * 60 * 60);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (lastTimeDate.after(overTimeDate)){
|
||||
// 加班
|
||||
long timeDifferenceInMillis = lastTimeDate.getTime() - overTimeDate.getTime();
|
||||
overtime = (double) timeDifferenceInMillis / (1000 * 60 * 60);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 保留两位小数
|
||||
DecimalFormat decimalFormat = new DecimalFormat("#.##");
|
||||
|
||||
// 使用format方法进行格式化
|
||||
String formatManHour = decimalFormat.format(manHour + overtime);
|
||||
String formatOverTime = decimalFormat.format(overtime);
|
||||
|
||||
dayValue = "工时:" + formatManHour;
|
||||
if (overtime != 0.0){
|
||||
//加班
|
||||
dayValue = dayValue + " " + "加班工时:" +formatOverTime;
|
||||
}
|
||||
|
||||
field.set(employeeAttendanceBo, dayValue);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
String jsonString = JSON.toJSONString(dataList);
|
||||
redisService.setCacheObject(ClockInConstant.MAN_TIME_JSON,jsonString,5,TimeUnit.MINUTES);
|
||||
|
||||
return jsonString;
|
||||
}*/
|
||||
}
|
||||
|
||||
@ -0,0 +1,28 @@
|
||||
package com.cpop.clockin.framework.constant.utils;
|
||||
|
||||
import com.alibaba.excel.context.AnalysisContext;
|
||||
import com.alibaba.excel.event.AnalysisEventListener;
|
||||
import com.cpop.clockin.business.bo.EmployeeAttendanceBo;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class ExcelListener extends AnalysisEventListener<EmployeeAttendanceBo> {
|
||||
|
||||
private final List<EmployeeAttendanceBo> dataList = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public void invoke(EmployeeAttendanceBo bo, AnalysisContext context) {
|
||||
dataList.add(bo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doAfterAllAnalysed(AnalysisContext context) {
|
||||
// 数据读取完毕后的处理
|
||||
}
|
||||
|
||||
public List<EmployeeAttendanceBo> getDataList() {
|
||||
return dataList;
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user