Commit fd5e1071 by 谢春璐

添加解析钉钉打卡记录

parent 2d6c5e36
...@@ -50,31 +50,35 @@ public class FileController { ...@@ -50,31 +50,35 @@ public class FileController {
List<Staff> staffList = new ArrayList<>(); List<Staff> staffList = new ArrayList<>();
files = files.stream().filter(f -> StringUtils.isNotBlank(f.getOriginalFilename())).collect(Collectors.toList()); files = files.stream().filter(f -> StringUtils.isNotBlank(f.getOriginalFilename()))
files.forEach(file -> { .collect(Collectors.toList());
try { files.forEach(file -> {
try {
InputStream inputStream = file.getInputStream();
String fileName = file.getOriginalFilename(); InputStream inputStream = file.getInputStream();
ExcelData data = null; String fileName = file.getOriginalFilename();
List<Staff> staffs = new ArrayList<>(0); ExcelData data = null;
List<Staff> staffs = new ArrayList<>(0);
if (fileName.contains("上下班打卡_日报")) {
data = inst.parse(inputStream, fileName, false, 2); if (fileName.contains("上下班打卡_日报")) {
staffs = fileService.wechatWorkInStatistics(data); data = inst.parse(inputStream, fileName, false, 2);
} else if (fileName.contains("外出打卡_日报")) { staffs = fileService.wechatWorkInStatistics(data);
data = inst.parse(inputStream, fileName, false, 2); } else if (fileName.contains("外出打卡_日报")) {
staffs = fileService.wechatWorkOutStatistics(data); data = inst.parse(inputStream, fileName, false, 2);
} else if (fileName.contains("考勤导出")) { staffs = fileService.wechatWorkOutStatistics(data);
data = inst.parse(inputStream, fileName, false, 0); } else if (fileName.contains("考勤导出")) {
staffs = fileService.workRecord(data); data = inst.parse(inputStream, fileName, false, 0);
} staffs = fileService.workRecord(data);
staffList.addAll(staffs); } else if (fileName.contains("钉钉签到")) {
data = inst.parse(inputStream, fileName, false, 2);
} catch (IOException e) { staffs = fileService.dingdingWorkStatistics(data);
e.printStackTrace();
} }
}); staffList.addAll(staffs);
} catch (IOException e) {
e.printStackTrace();
}
});
List<Staff> staffList1 = fileService.staffListCollect(staffList); List<Staff> staffList1 = fileService.staffListCollect(staffList);
return fileService.checkExport(staffList1); return fileService.checkExport(staffList1);
......
...@@ -21,4 +21,6 @@ public interface FileService { ...@@ -21,4 +21,6 @@ public interface FileService {
List<Staff> workRecord(ExcelData data); List<Staff> workRecord(ExcelData data);
List<Staff> staffListCollect(List<Staff> staffList); List<Staff> staffListCollect(List<Staff> staffList);
List<Staff> dingdingWorkStatistics(ExcelData data);
} }
...@@ -167,6 +167,52 @@ public class FileServiceImpl implements FileService { ...@@ -167,6 +167,52 @@ public class FileServiceImpl implements FileService {
} }
/** /**
* 钉钉考勤记录处理
*/
@Override
public List<Staff> dingdingWorkStatistics(ExcelData data) {
//1. 拿到数据后根据姓名和日期分组
Map<String, Map<String, List<String[]>>> map = data.getDatas().stream()
.collect(Collectors.groupingBy(d -> d[0], Collectors.groupingBy(
d -> d[4])));
//2. 取出最大时间和最小时间,计算考勤状态,生成workcheck
List<Staff> staffList = new ArrayList<>();
map.entrySet().forEach(entry -> {
Staff staff = new Staff();
staff.setName(entry.getKey());
entry.getValue().entrySet().forEach(entry2 -> {
List<Date> dateList = entry2.getValue().stream().map(e -> DateUtils.parseDate(e[4].concat(" ").concat(e[5])))
.collect(Collectors.toList());
WorkCheck workCheck = new WorkCheck();
workCheck.setDate(entry2.getKey());
// 上班时间算一天当中最小的时间
Date minDate = dateList.stream().min(Comparator.comparing(d -> d.getTime())).get();
workCheck.setOnTime(DateUtils.formatDate(minDate, DateUtils.yyyyMMddHHmm));
//下班时间算一天当中最大的时间
Date maxDate = dateList.stream().max(Comparator.comparing(d -> d.getTime())).get();
workCheck.setOffTime(DateUtils.formatDate(maxDate, DateUtils.yyyyMMddHHmm));
workCheck.setState(caculateWorkState(workCheck));
staff.getWorkCheckList().add(workCheck);
});
staff.getWorkCheckList().sort(Comparator.comparing(WorkCheck::getDate));
staffList.add(staff);
});
return staffList;
}
/**
* 计算出勤状态(迟到、早退、迟到和早退、正常) * 计算出勤状态(迟到、早退、迟到和早退、正常)
*/ */
private String caculateWorkState(WorkCheck workCheck) { private String caculateWorkState(WorkCheck workCheck) {
...@@ -336,7 +382,6 @@ public class FileServiceImpl implements FileService { ...@@ -336,7 +382,6 @@ public class FileServiceImpl implements FileService {
} }
} }
} }
} }
datas.add(d); datas.add(d);
......
...@@ -10,19 +10,31 @@ ...@@ -10,19 +10,31 @@
<body> <body>
<form enctype="multipart/form-data" method="post" action="/upload"> <form enctype="multipart/form-data" method="post" action="/upload">
<div class="container" style="padding-top: 20%;"> <div class="container" style="padding-top: 10%;">
<h4>上传文件类型支持:1 .打卡机导出表 2 .企业微信上下班打卡记录 3 .企业微信外出打卡记录
</h4>
<p></p>
<div class="row align-items-center"> <div class="row align-items-center">
<div class="col"> <table class="table table-bordered">
<p>文件1:<input type="file" name="file"/></p> <tbody>
<p>文件2:<input type="file" name="file"/></p> <tr>
<p>文件3:<input type="file" name="file"/></p> <th scope="row">打卡机考勤记录:</th>
</div> <td><input type="file" name="file"/></td>
<div class="col"> </tr>
<button type="submit" class="btn btn-outline-primary btn-lg btn-block">生成考勤记录</button> <tr>
</div> <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>
<th scope="row">钉钉打卡记录:</th>
<td><input type="file" name="file"/></td>
</tr>
</tbody>
</table>
<button type="submit" class="btn btn-outline-primary btn-lg btn-block">生成考勤记录</button>
</div> </div>
</div> </div>
</form> </form>
......
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