|
@@ -17,8 +17,10 @@ import java.sql.PreparedStatement;
|
|
|
import java.sql.ResultSet;
|
|
|
import java.sql.SQLException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
+import java.time.Duration;
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.time.LocalTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
@@ -324,7 +326,7 @@ public class DataCollectController {
|
|
|
|
|
|
@RequestMapping("/getWorkDayDataSum")
|
|
|
public String getWorkDayDataSum() {
|
|
|
- String sqlCount = "select count(*) from att_work_hour_day where create_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) ";
|
|
|
+ String sqlCount = "select count(*) from att_work_hour_day where create_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) and come1 is not null and go1 is not null";
|
|
|
int totalCount = 0;
|
|
|
try (Connection connection = mysqlDataSource.getConnection()) {
|
|
|
PreparedStatement countStmt = connection.prepareStatement(sqlCount);
|
|
@@ -341,11 +343,11 @@ public class DataCollectController {
|
|
|
|
|
|
@RequestMapping("/getWorkDayDataList")
|
|
|
public List<UserFvTime> getWorkDayDataList(@RequestBody PageBO pageBO) {
|
|
|
- String sqlQuery = " select id,emp_no,emp_name,attendance_date,earliest_clock_date,last_clock_date,if(worktime_total_hour=0,off_hour,worktime_total_hour) as worktime_total_hour,overtime_total_hour " +
|
|
|
- " from att_work_hour_day where create_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) order by id limit ?,? ";
|
|
|
+ String sqlQuery = " select id,emp_no,emp_name,attendance_date,come1,go1,if(worktime_total_hour=0,off_hour,worktime_total_hour) as worktime_total_hour,overtime_total_hour " +
|
|
|
+ " from att_work_hour_day where create_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) and come1 is not null and go1 is not null order by id limit ?,? ";
|
|
|
List<UserFvTime> resList = new ArrayList<>();
|
|
|
- SimpleDateFormat sdfAll = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
SimpleDateFormat sdfYmd = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+
|
|
|
try (Connection connection = mysqlDataSource.getConnection()) {
|
|
|
PreparedStatement queryStmt = connection.prepareStatement(sqlQuery);
|
|
|
int pageSize = pageBO.getPageSize();
|
|
@@ -360,9 +362,9 @@ public class DataCollectController {
|
|
|
userFvTime.setProcinstId(resultSet.getString("id"));
|
|
|
userFvTime.setUserId(resultSet.getString("emp_no"));
|
|
|
userFvTime.setWorkDate(null==resultSet.getDate("attendance_date")?null:LocalDate.parse(sdfYmd.format(resultSet.getDate("attendance_date")), DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
|
|
- userFvTime.setStartTime(null==resultSet.getDate("earliest_clock_date")?null:sdfAll.format(resultSet.getDate("earliest_clock_date")));
|
|
|
- userFvTime.setEndTime(null==resultSet.getDate("last_clock_date")?null:sdfAll.format(resultSet.getDate("last_clock_date")));
|
|
|
- userFvTime.setWorkHours(null==resultSet.getBigDecimal("worktime_total_hour")?null:resultSet.getBigDecimal("worktime_total_hour").setScale(2, RoundingMode.HALF_UP).floatValue());
|
|
|
+ userFvTime.setStartTime(resultSet.getString("come1"));
|
|
|
+ userFvTime.setEndTime(resultSet.getString("go1"));
|
|
|
+ userFvTime.setWorkHours(calculateWorkHoursFromTime(userFvTime));
|
|
|
userFvTime.setOverTimeSeconds(null==resultSet.getBigDecimal("worktime_total_hour")?null:resultSet.getBigDecimal("worktime_total_hour").setScale(1,RoundingMode.HALF_UP)
|
|
|
.multiply(new BigDecimal("3600")).longValue());
|
|
|
|
|
@@ -376,6 +378,36 @@ public class DataCollectController {
|
|
|
return resList;
|
|
|
}
|
|
|
|
|
|
+ private float calculateWorkHoursFromTime(UserFvTime userFvTime) {
|
|
|
+ String baseMorningEnd = "12:00";
|
|
|
+ String baseAfternoonStart = "13:00";
|
|
|
+ double restTime = 1.0;
|
|
|
+ //12:00-13:00为休息时间,根据StartTime和endTime计算工作时长
|
|
|
+ DateTimeFormatter df = DateTimeFormatter.ofPattern("HH:mm");
|
|
|
+ LocalTime startCardTime = LocalTime.parse(userFvTime.getStartTime(),df);
|
|
|
+ LocalTime endCardTime = LocalTime.parse(userFvTime.getEndTime(),df);
|
|
|
+// System.out.println(", startTime="+startCardTime.format(df)
|
|
|
+// +"endTime="+endCardTime.format(df));
|
|
|
+ BigDecimal bigDecimal = new BigDecimal(Duration.between(startCardTime,endCardTime).toMinutes());
|
|
|
+// System.out.println("打卡时长(分钟):" + bigDecimal);
|
|
|
+ //开始时间在上午,结束时间在下午,要减去午休时长
|
|
|
+ if (startCardTime.compareTo(LocalTime.parse(baseMorningEnd,df)) <= 0 && endCardTime.compareTo(LocalTime.parse(baseAfternoonStart,df)) >= 0) {
|
|
|
+ //重新计算打卡工时时,需要减去中间午休时间
|
|
|
+ bigDecimal = bigDecimal.divide(BigDecimal.valueOf(60),1,BigDecimal.ROUND_HALF_UP).subtract(new BigDecimal(restTime));
|
|
|
+// System.out.println("午休时间:"+restTime+", 减去后,工作时长="+bigDecimal);
|
|
|
+ } else {
|
|
|
+ bigDecimal = bigDecimal.divide(BigDecimal.valueOf(60),1,BigDecimal.ROUND_HALF_UP);
|
|
|
+ }
|
|
|
+ double time = bigDecimal.doubleValue();
|
|
|
+ if (time < 0) {
|
|
|
+ time = 0;
|
|
|
+ } else {
|
|
|
+ BigDecimal decimal = new BigDecimal(time);
|
|
|
+ time = decimal.setScale(0, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
|
+ }
|
|
|
+ return (float)time;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
|
|
|
|