|
@@ -24,6 +24,7 @@ import java.time.LocalTime;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@RequestMapping("/dataCollect")
|
|
@RequestMapping("/dataCollect")
|
|
@RestController
|
|
@RestController
|
|
@@ -344,7 +345,8 @@ public class DataCollectController {
|
|
userFvTime.setWorkDate(null==resultSet.getDate("attendance_date")?null:LocalDate.parse(sdfYmd.format(resultSet.getDate("attendance_date")), DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
|
userFvTime.setWorkDate(null==resultSet.getDate("attendance_date")?null:LocalDate.parse(sdfYmd.format(resultSet.getDate("attendance_date")), DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
|
if (pageBO.getJobNumber() != null) {
|
|
if (pageBO.getJobNumber() != null) {
|
|
//用户单独刷新某天的
|
|
//用户单独刷新某天的
|
|
- List<LeaveSheet> sheetList = getUserDayLeaveSheet(sdfYmd.format(resultSet.getDate("attendance_date")), pageBO.getJobNumber());
|
|
|
|
|
|
+ String date = sdfYmd.format(resultSet.getDate("attendance_date"));
|
|
|
|
+ List<LeaveSheet> sheetList = getLeaveSheetInRange(date, date, pageBO.getJobNumber());
|
|
if (sheetList != null && sheetList.size() > 0) {
|
|
if (sheetList != null && sheetList.size() > 0) {
|
|
//获取请假的最晚时间点作为考勤开始时间
|
|
//获取请假的最晚时间点作为考勤开始时间
|
|
LeaveSheet leaveSheet = sheetList.get(0);
|
|
LeaveSheet leaveSheet = sheetList.get(0);
|
|
@@ -393,6 +395,24 @@ public class DataCollectController {
|
|
resList.add(userFvTime);
|
|
resList.add(userFvTime);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ if (pageBO.getJobNumber() == null) {
|
|
|
|
+ //取请假的记录,合并处理考勤开始时间
|
|
|
|
+ List<LeaveSheet> leaveSheetList = getLeaveSheetInRange(pageBO.getStartDate(), pageBO.getEndDate(), null);
|
|
|
|
+ if (leaveSheetList != null && leaveSheetList.size() > 0) {
|
|
|
|
+ for (LeaveSheet leaveSheet : leaveSheetList) {
|
|
|
|
+ List<UserFvTime> userFvTimeList = resList.stream().filter(userFvTime -> leaveSheet.getStartDate().isEqual(userFvTime.getWorkDate())).collect(Collectors.toList());
|
|
|
|
+ if (userFvTimeList != null && userFvTimeList.size() > 0) {
|
|
|
|
+ //有记录的话,更新考勤开始时间
|
|
|
|
+ UserFvTime userFvTime = userFvTimeList.get(0);
|
|
|
|
+ if (userFvTime.getStartTime() == null || userFvTime.getStartTime().compareTo(leaveSheet.getEndTime()) < 0) {
|
|
|
|
+ userFvTime.setStartTime(leaveSheet.getEndTime());
|
|
|
|
+ userFvTime.setWorkHours(calculateWorkHoursFromTime(userFvTime));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
} catch (SQLException e) {
|
|
} catch (SQLException e) {
|
|
System.err.println("数据库操作错误: " + e.getMessage());
|
|
System.err.println("数据库操作错误: " + e.getMessage());
|
|
}
|
|
}
|
|
@@ -531,7 +551,7 @@ public class DataCollectController {
|
|
return resList;
|
|
return resList;
|
|
}
|
|
}
|
|
|
|
|
|
- private List<LeaveSheet> getUserDayLeaveSheet(String date, String empNo) {
|
|
|
|
|
|
+ private List<LeaveSheet> getLeaveSheetInRange(String startDate, String endDate, String empNo) {
|
|
String sqlQuery = "select distinct ahlo.id,ahlo.company_id,ahlo.emp_no,ahlo.emp_name " +
|
|
String sqlQuery = "select distinct ahlo.id,ahlo.company_id,ahlo.emp_no,ahlo.emp_name " +
|
|
" ,ahlo.begin_date,ahlo.end_date,ahlo.begin_time,ahlo.end_time,ahlo.leave_category_name " +
|
|
" ,ahlo.begin_date,ahlo.end_date,ahlo.begin_time,ahlo.end_time,ahlo.leave_category_name " +
|
|
" ,ahlo.audit_status,ahlo.reason, eic.emp_no as operator_id " +
|
|
" ,ahlo.audit_status,ahlo.reason, eic.emp_no as operator_id " +
|
|
@@ -539,13 +559,20 @@ public class DataCollectController {
|
|
" from att_holiday_leave_order ahlo " +
|
|
" from att_holiday_leave_order ahlo " +
|
|
" left join emp_info eie on ahlo.emp_origin_id = eie.origin_id " +
|
|
" left join emp_info eie on ahlo.emp_origin_id = eie.origin_id " +
|
|
" left join emp_info eic on ahlo.create_id = eic.origin_id " +
|
|
" left join emp_info eic on ahlo.create_id = eic.origin_id " +
|
|
- " where ahlo.audit_status = 3 and ahlo.is_delete = 0 and ahlo.create_date = ? and ahlo.emp_no = ? and ahlo.end_time is not null order by ahlo.end_time desc limit 1";
|
|
|
|
|
|
+ " where ahlo.audit_status = 3 and ahlo.is_delete = 0 and ahlo.end_time is not null and ahlo.total_day > 0 and ahlo.total_day < 1 and date_format(ahlo.begin_date,'%Y-%m-%d') between ? and ?";
|
|
|
|
+ if (empNo != null) {
|
|
|
|
+ sqlQuery += "and ahlo.emp_no = ?";
|
|
|
|
+ }
|
|
|
|
+ sqlQuery += " order by ahlo.end_time desc";
|
|
SimpleDateFormat sdfYmd = new SimpleDateFormat("yyyy-MM-dd");
|
|
SimpleDateFormat sdfYmd = new SimpleDateFormat("yyyy-MM-dd");
|
|
List<LeaveSheet> resList = new ArrayList<>();
|
|
List<LeaveSheet> resList = new ArrayList<>();
|
|
try (Connection connection = mysqlDataSource.getConnection()) {
|
|
try (Connection connection = mysqlDataSource.getConnection()) {
|
|
PreparedStatement queryStmt = connection.prepareStatement(sqlQuery);
|
|
PreparedStatement queryStmt = connection.prepareStatement(sqlQuery);
|
|
- queryStmt.setString(1, date);
|
|
|
|
- queryStmt.setString(2, empNo);
|
|
|
|
|
|
+ queryStmt.setString(1, startDate);
|
|
|
|
+ queryStmt.setString(2, endDate);
|
|
|
|
+ if (empNo != null) {
|
|
|
|
+ queryStmt.setString(3, empNo);
|
|
|
|
+ }
|
|
try (ResultSet resultSet = queryStmt.executeQuery()) {
|
|
try (ResultSet resultSet = queryStmt.executeQuery()) {
|
|
while (resultSet.next()) {
|
|
while (resultSet.next()) {
|
|
LeaveSheet leaveSheet = new LeaveSheet();
|
|
LeaveSheet leaveSheet = new LeaveSheet();
|