Commit ed42e81f by 谢春璐

fix

parent 4e2b90fd
......@@ -48,47 +48,71 @@ public class FileController {
try {
ExcelRead inst = ExcelRead.getInst();
List<MultipartFile> files = ((MultipartHttpServletRequest) request)
.getFiles("file");
MultipartFile insideFile = ((MultipartHttpServletRequest) request).getFile("inside");
MultipartFile outFile = ((MultipartHttpServletRequest) request).getFile("outside");
//补卡
MultipartFile repairFile = ((MultipartHttpServletRequest) request).getFile("repair");
//请假
MultipartFile leaveFile = ((MultipartHttpServletRequest) request).getFile("leave");
//加班
MultipartFile overtimeFile = ((MultipartHttpServletRequest) request).getFile("overtime");
List<Staff> staffList = new ArrayList<>();
Map<String, Set<String>> repairMap = new HashMap<>();
Map<String, Set<String>> leaveMap = new HashMap<>();
Map<String, Set<String>> overtimeMap = new HashMap<>();
files = files.stream().filter(f -> StringUtils.isNotBlank(f.getOriginalFilename()))
.collect(Collectors.toList());
for (MultipartFile file : files) {
try {
InputStream inputStream = file.getInputStream();
String fileName = file.getOriginalFilename();
ExcelData data = null;
List<Staff> staffs = new ArrayList<>(0);
if (fileName.contains("上下班打卡_日报")) {
data = inst.parse(inputStream, fileName, false, 2);
staffs = fileService.wechatWorkInStatistics(data);
} else if (fileName.contains("外出打卡_日报")) {
data = inst.parse(inputStream, fileName, false, 2);
staffs = fileService.wechatWorkOutStatistics(data);
} else if (fileName.contains("审批记录")) {//加班
data = inst.parse(inputStream, fileName, false, 0);
overtimeMap = fileService.overtimeRecord(data);
} else if (fileName.contains("考勤导出")) {
data = inst.parse(inputStream, fileName, false, 0);
staffs = fileService.workRecord(data);
} else if (fileName.contains("钉钉")) {
data = inst.parse(inputStream, fileName, false, 2);
staffs = fileService.dingdingWorkStatistics(data);
}
InputStream inputStream;
String fileName;
ExcelData data;
List<Staff> staffs;
try {
if (Objects.nonNull(insideFile) && StringUtils.isNotEmpty(insideFile.getOriginalFilename())) {
inputStream = insideFile.getInputStream();
fileName = insideFile.getOriginalFilename();
data = inst.parse(inputStream, fileName, false, 2);
staffs = fileService.wechatWorkInStatistics(data);
staffList.addAll(staffs);
}
if (Objects.nonNull(outFile) && StringUtils.isNotEmpty(outFile.getOriginalFilename())) {
inputStream = outFile.getInputStream();
fileName = outFile.getOriginalFilename();
} catch (IOException e) {
e.printStackTrace();
data = inst.parse(inputStream, fileName, false, 2);
staffs = fileService.wechatWorkOutStatistics(data);
staffList.addAll(staffs);
}
if (Objects.nonNull(repairFile) && StringUtils.isNotEmpty(repairFile.getOriginalFilename())) {
inputStream = repairFile.getInputStream();
fileName = repairFile.getOriginalFilename();
data = inst.parse(inputStream, fileName, false, 0);
repairMap = fileService.repairRecord(data);
}
if (Objects.nonNull(leaveFile) && StringUtils.isNotEmpty(leaveFile.getOriginalFilename())) {
inputStream = leaveFile.getInputStream();
fileName = leaveFile.getOriginalFilename();
data = inst.parse(inputStream, fileName, false, 0);
leaveMap = fileService.leaveRecord(data);
}
if (Objects.nonNull(overtimeFile) && StringUtils
.isNotEmpty(overtimeFile.getOriginalFilename())) {
inputStream = overtimeFile.getInputStream();
fileName = overtimeFile.getOriginalFilename();
data = inst.parse(inputStream, fileName, false, 0);
overtimeMap = fileService.overtimeRecord(data);
}
} catch (Exception e) {
e.printStackTrace();
}
List<Staff> staffList1 = fileService.staffListCollect(staffList);
return fileService.checkExport(staffList1, overtimeMap);
return fileService.checkExport(staffList1, overtimeMap, repairMap, leaveMap);
} catch (Exception e) {
try {
......
......@@ -16,7 +16,8 @@ import org.springframework.http.ResponseEntity;
public interface FileService {
ResponseEntity<byte[]> checkExport(List<Staff> staffList, Map<String, Set<String>> map) throws Exception;
ResponseEntity<byte[]> checkExport(List<Staff> staffList, Map<String, Set<String>> overtimeMap,
Map<String, Set<String>> repairMap, Map<String, Set<String>> leaveMap) throws Exception;
List<Staff> wechatWorkOutStatistics(ExcelData data);
......@@ -29,4 +30,8 @@ public interface FileService {
List<Staff> dingdingWorkStatistics(ExcelData data);
Map<String, Set<String>> overtimeRecord(ExcelData data);
Map<String, Set<String>> repairRecord(ExcelData data);
Map<String, Set<String>> leaveRecord(ExcelData data);
}
......@@ -324,7 +324,8 @@ public class FileServiceImpl implements FileService {
}
@Override
public ResponseEntity<byte[]> checkExport(List<Staff> staffList, Map<String, Set<String>> overtimeMap)
public ResponseEntity<byte[]> checkExport(List<Staff> staffList, Map<String, Set<String>> overtimeMap,
Map<String, Set<String>> repairMap, Map<String, Set<String>> leaveMap)
throws Exception {
ExcelData data = new ExcelData();
......@@ -367,7 +368,11 @@ public class FileServiceImpl implements FileService {
String[] d = new String[titleStrArr.length];
//查看此人是否有加班数据
Set<String> strings = overtimeMap.get(staff.getName());
Set<String> overtimeDate = overtimeMap.get(staff.getName());
//查看此人是否有补打卡数据
Set<String> repairDate = repairMap.get(staff.getName());
//查看此人是否有请假数据
Set<String> leaveDate = leaveMap.get(staff.getName());
for (String title : titleList) {
if ("姓名".equalsIgnoreCase(title)) {
......@@ -383,10 +388,12 @@ public class FileServiceImpl implements FileService {
String today = title.substring(0, title.indexOf("("));
String detail = "";
Boolean isOverTime = false;
Boolean isRepair = false;
Boolean isleave = false;
// 判断当天是否有加班数据
if (Objects.nonNull(strings) && !strings.isEmpty()) {
List<String> overtime = strings.stream().filter(s -> s.equalsIgnoreCase(today))
if (Objects.nonNull(overtimeDate) && !overtimeDate.isEmpty()) {
List<String> overtime = overtimeDate.stream().filter(s -> s.equalsIgnoreCase(today))
.collect(Collectors.toList());
if (Objects.nonNull(overtime) && overtime.size() > 0) {
......@@ -394,6 +401,38 @@ public class FileServiceImpl implements FileService {
}
}
// 判断当天是否有补打卡数据
if (Objects.nonNull(repairDate) && !repairDate.isEmpty()) {
List<String> repair = repairDate.stream().filter(s -> s.equalsIgnoreCase(today))
.collect(Collectors.toList());
if (Objects.nonNull(repair) && repair.size() > 0) {
isRepair = true;
}
}
// 判断当天是否有请假数据
if (Objects.nonNull(leaveDate) && !leaveDate.isEmpty()) {
List<String> leave = leaveDate.stream().filter(s -> s.equalsIgnoreCase(today))
.collect(Collectors.toList());
if (Objects.nonNull(leave) && leave.size() > 0) {
isleave = true;
}
}
if (isOverTime) {
detail = detail.concat("加班");
}
if (isleave) {
detail = detail.concat("请假");
}
if (isRepair) {
detail = detail.concat("补打卡");
}
for (WorkCheck check : staff.getWorkCheckList()) {
if (today.equalsIgnoreCase(
......@@ -402,12 +441,10 @@ public class FileServiceImpl implements FileService {
isExist = true;
if (!isWeekend) {
detail = check.getState().concat(",").concat(check.getApprove());
detail = detail.concat(check.getState().concat(","));
}
if (isOverTime) {
detail.concat("加班");
}
d[index] = detail.concat("(")
.concat(DateUtils.getHHmmTime(DateUtils.parseDate(check.getOnTime()))).concat("~")
......@@ -423,15 +460,7 @@ public class FileServiceImpl implements FileService {
}
if (!isExist) {
if (isWeekend) {
if (isOverTime) {
d[index] = "加班";
} else {
d[index] = "未加班";
}
} else {
d[index] = "无记录";
}
d[index] = detail;
}
}
}
......@@ -467,7 +496,7 @@ public class FileServiceImpl implements FileService {
Set<String> dateList = new HashSet<>();
value.stream().filter(strings -> strings[9].equalsIgnoreCase("已通过"))
value.stream()
.forEach(strings1 -> {
try {
......@@ -489,4 +518,75 @@ public class FileServiceImpl implements FileService {
return overtimeData;
}
@Override
public Map<String, Set<String>> repairRecord(ExcelData data) {
//1. 根据员工姓名分组
Map<String, List<String[]>> map = data.getDatas().stream().collect(Collectors.groupingBy(d -> d[2]));
Map<String, Set<String>> repairData = new HashMap<>();
map.entrySet().forEach(entry -> {
String name = entry.getKey();
List<String[]> value = entry.getValue();
Set<String> dateList = new HashSet<>();
value.stream()
.forEach(strings1 -> {
try {
String date = DateUtils
.formatDate(DateUtils.parseDate(strings1[6], DateUtils.yyyyMMddHHmm1),
DateUtils.yyyyMMdd);
dateList.add(date);
} catch (Exception e) {
e.printStackTrace();
}
});
repairData.put(name, dateList);
});
return repairData;
}
@Override
public Map<String, Set<String>> leaveRecord(ExcelData data) {
//1. 根据员工姓名分组
Map<String, List<String[]>> map = data.getDatas().stream().collect(Collectors.groupingBy(d -> d[2]));
Map<String, Set<String>> leaveData = new HashMap<>();
map.entrySet().forEach(entry -> {
String name = entry.getKey();
List<String[]> value = entry.getValue();
Set<String> dateList = new HashSet<>();
value.stream()
.forEach(strings1 -> {
try {
String start = DateUtils
.formatDate(DateUtils
.parseDate(strings1[6].substring(0, strings1[6].lastIndexOf(" ")), DateUtils.yyyyMMdd1),
DateUtils.yyyyMMdd);
String end = DateUtils
.formatDate(DateUtils
.parseDate(strings1[7].substring(0, strings1[7].lastIndexOf(" ")), DateUtils.yyyyMMdd1),
DateUtils.yyyyMMdd);
dateList.addAll(DateUtils.getAllDatesOfTwoDate(start, end));
} catch (Exception e) {
e.printStackTrace();
}
});
leaveData.put(name, dateList);
});
return leaveData;
}
}
......@@ -6,6 +6,12 @@
<meta charset="UTF-8">
<title>考勤</title>
</head>
<style>
span {
font-size: larger;
color: red;
}
</style>
<body>
<form enctype="multipart/form-data" method="post" action="/upload">
......@@ -15,25 +21,34 @@
<tbody>
<tr>
<th scope="row">企业微信上下班打卡记录:</th>
<td><input type="file" name="file"/></td>
<th scope="row">企业微信<span>上下班打卡</span>记录:</th>
<td><input type="file" name="inside"/></td>
</tr>
<tr>
<th scope="row">企业微信外出打卡记录:</th>
<td><input type="file" name="file"/></td>
<th scope="row">企业微信<span>外出打卡</span>记录:</th>
<td><input type="file" name="outside"/></td>
</tr>
<tr>
<th scope="row">企业微信加班审批记录:</th>
<td><input type="file" name="file"/></td>
<th scope="row">企业微信<span>补打卡</span>审批记录:</th>
<td><input type="file" name="repair"/></td>
</tr>
<tr>
<th scope="row">企业微信<span>请假</span>审批记录:</th>
<td><input type="file" name="leave"/></td>
</tr>
<tr>
<th scope="row">企业微信<span>加班</span>审批记录:</th>
<td><input type="file" name="overtime"/></td>
</tr>
<!--<tr>
<th scope="row">打卡机考勤记录:</th>
<td><input type="file" name="file"/></td>
</tr>
<tr>
<th scope="row">钉钉打卡记录:</th>
<td><input type="file" name="file"/></td>
</tr>
</tr>-->
</tbody>
</table>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment