|
@@ -21,7 +21,11 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import javax.annotation.Resource;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.time.Duration;
|
|
|
import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.time.temporal.ChronoUnit;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -58,10 +62,21 @@ public class DeviceLogServiceImpl extends ServiceImpl<DeviceLogMapper, DeviceLog
|
|
|
HashMap<String, Object> hashMap = new HashMap<>();
|
|
|
hashMap.put("companyId", user.getCompanyId());
|
|
|
hashMap.put("usageUserId", user.getId());
|
|
|
- hashMap.put("startDate",deviceLog.getStartTime());
|
|
|
- hashMap.put("endDate", deviceLog.getEndTime());
|
|
|
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
+
|
|
|
+ hashMap.put("startDate",deviceLog.getStartTime().format(dateTimeFormatter));
|
|
|
+ hashMap.put("endDate", deviceLog.getEndTime().format(dateTimeFormatter));
|
|
|
|
|
|
ArrayList<HashMap<String,Object>> maps =deviceLogMapper.getDeviceLogList(hashMap);
|
|
|
+ if(maps != null && !maps.isEmpty()){
|
|
|
+ for (HashMap<String, Object> map : maps) {
|
|
|
+ if(map.get("endTime") != null){
|
|
|
+ map.put("usageStatus",false);
|
|
|
+ }else {
|
|
|
+ map.put("usageStatus",true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
httpRespMsg.setData(maps);
|
|
|
return httpRespMsg;
|
|
|
}
|
|
@@ -89,7 +104,7 @@ public class DeviceLogServiceImpl extends ServiceImpl<DeviceLogMapper, DeviceLog
|
|
|
deviceLog.setStartTime(device.getStartTime());
|
|
|
deviceLog.setCreateDate(LocalDate.now());
|
|
|
deviceLog.setDeviceId(selectedDevice.getId());
|
|
|
- deviceLog.setProjectId(selectedDevice.getProjectId());
|
|
|
+ deviceLog.setProjectId(device.getProjectId());
|
|
|
deviceLog.setUsageUserId(user.getId());
|
|
|
deviceLogMapper.insert(deviceLog);
|
|
|
|
|
@@ -110,17 +125,122 @@ public class DeviceLogServiceImpl extends ServiceImpl<DeviceLogMapper, DeviceLog
|
|
|
return httpRespMsg;
|
|
|
}
|
|
|
DeviceLog deviceLog = deviceLogMapper.selectById(device.getDeviceLogId());
|
|
|
- deviceLog.setEndTime(device.getEndTime());
|
|
|
- deviceLog.setUseTime(device.getUseTime());
|
|
|
- deviceLogMapper.update(null,new UpdateWrapper<DeviceLog>()
|
|
|
- .set("end_time",deviceLog.getEndTime()).set("use_time",deviceLog.getUseTime())
|
|
|
- .eq("id",deviceLog.getId()));
|
|
|
- selectedDevice.setUsageStatus(false);
|
|
|
- selectedDevice.setUsageUserId(null);
|
|
|
- deviceMapper.update(null,new UpdateWrapper<Device>()
|
|
|
- .eq("id",selectedDevice.getId())
|
|
|
- .set("usage_status",selectedDevice.getUsageStatus())
|
|
|
- .set("usage_user_id",selectedDevice.getUsageUserId()));
|
|
|
+
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
|
|
|
+ DateTimeFormatter formatterDate = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
+ LocalDateTime endTime = device.getEndTime();
|
|
|
+ LocalDateTime startTime = device.getStartTime();
|
|
|
+ // 判断同一天
|
|
|
+ boolean isSameDay = startTime.toLocalDate().isEqual(endTime.toLocalDate());
|
|
|
+ // 判断同一个月
|
|
|
+ boolean isSameMonth = startTime.getMonth() == endTime.getMonth() && startTime.getYear() == endTime.getYear();
|
|
|
+ // 计算天数间隔
|
|
|
+ long daysBetween = ChronoUnit.DAYS.between(startTime.toLocalDate(), endTime.toLocalDate());
|
|
|
+ System.out.println("同一天: " + isSameDay);
|
|
|
+ System.out.println("同一个月: " + isSameMonth);
|
|
|
+ System.out.println("天数间隔: " + daysBetween);
|
|
|
+ // 将时间分组
|
|
|
+ List<LocalDateTime[]> groupedTimes = new ArrayList<>();
|
|
|
+
|
|
|
+ LocalDateTime currentStart = startTime;
|
|
|
+ while (currentStart.isBefore(endTime)) {
|
|
|
+ LocalDateTime nextEnd = currentStart.toLocalDate().atTime(23, 59, 59); // 当天的最后时间
|
|
|
+
|
|
|
+ if (nextEnd.isAfter(endTime)) {
|
|
|
+ nextEnd = endTime; // 如果超过了结束时间,使用结束时间
|
|
|
+ }
|
|
|
+
|
|
|
+ groupedTimes.add(new LocalDateTime[]{currentStart, nextEnd});
|
|
|
+ currentStart = currentStart.toLocalDate().plusDays(1).atStartOfDay(); // 移动到下一天的开始时间
|
|
|
+ }
|
|
|
+ System.out.println("长度: " + groupedTimes.size());
|
|
|
+
|
|
|
+ // 输出分组结果
|
|
|
+ for (LocalDateTime[] group : groupedTimes) {
|
|
|
+ String formatStart = group[0].format(formatter);
|
|
|
+ String formatEnd = group[1].format(formatter);
|
|
|
+
|
|
|
+ Duration duration = Duration.between(group[0], group[1]);
|
|
|
+ double hours = duration.toMinutes() / 60.0; // 转换为小时
|
|
|
+ // 四舍五入保留一位小数
|
|
|
+ hours = Math.round(hours * 10.0) / 10.0;
|
|
|
+ String createDate = group[0].format(formatterDate);
|
|
|
+ System.out.println("开始时间: " + formatStart + ", 结束时间: " + formatEnd+",时间差:"+hours+",日期:"+createDate);
|
|
|
+ }
|
|
|
+
|
|
|
+ //当天的
|
|
|
+ if (groupedTimes.size()==1) {
|
|
|
+ deviceLog.setEndTime(device.getEndTime());
|
|
|
+ deviceLog.setStartTime(device.getStartTime());
|
|
|
+ Duration duration = Duration.between(deviceLog.getStartTime(), deviceLog.getEndTime());
|
|
|
+ double hours = duration.toMinutes() / 60.0; // 转换为小时
|
|
|
+ // 四舍五入保留一位小数
|
|
|
+ hours = Math.round(hours * 10.0) / 10.0;
|
|
|
+
|
|
|
+ deviceLogMapper.update(null,new UpdateWrapper<DeviceLog>()
|
|
|
+ .set("start_time",deviceLog.getStartTime())
|
|
|
+ .set("end_time",deviceLog.getEndTime()).set("use_time",hours)
|
|
|
+ .eq("id",deviceLog.getId()));
|
|
|
+ selectedDevice.setUsageStatus(false);
|
|
|
+ selectedDevice.setUsageUserId(null);
|
|
|
+ deviceMapper.update(null,new UpdateWrapper<Device>()
|
|
|
+ .eq("id",selectedDevice.getId())
|
|
|
+ .set("usage_status",selectedDevice.getUsageStatus())
|
|
|
+ .set("usage_user_id",selectedDevice.getUsageUserId()));
|
|
|
+ }
|
|
|
+ //间隔好几天
|
|
|
+ else {
|
|
|
+ for (int i = 0; i < groupedTimes.size(); i++) {
|
|
|
+ if (i==0){
|
|
|
+ String formatStart = groupedTimes.get(i)[0].format(formatter);
|
|
|
+ String formatEnd = groupedTimes.get(i)[1].format(formatter);
|
|
|
+ Duration duration = Duration.between(groupedTimes.get(i)[0], groupedTimes.get(i)[1]);
|
|
|
+ double hours = duration.toMinutes() / 60.0; // 转换为小时
|
|
|
+ // 四舍五入保留一位小数
|
|
|
+ hours = Math.round(hours * 10.0) / 10.0;
|
|
|
+ String createDate = groupedTimes.get(i)[0].format(formatterDate);
|
|
|
+
|
|
|
+ deviceLog.setStartTime(LocalDateTime.parse(formatStart, formatter));
|
|
|
+ deviceLog.setEndTime(LocalDateTime.parse(formatEnd, formatter));
|
|
|
+ deviceLog.setCreateDate(LocalDate.parse(createDate, formatterDate));
|
|
|
+ deviceLog.setUseTime(hours);
|
|
|
+
|
|
|
+ deviceLogMapper.update(null,new UpdateWrapper<DeviceLog>()
|
|
|
+ .set("start_time",deviceLog.getStartTime())
|
|
|
+ .set("end_time",deviceLog.getEndTime())
|
|
|
+ .set("use_time",hours)
|
|
|
+ .set("create_date",createDate)
|
|
|
+ .eq("id",deviceLog.getId()));
|
|
|
+
|
|
|
+
|
|
|
+ }else {
|
|
|
+ String formatStart = groupedTimes.get(i)[0].format(formatter);
|
|
|
+ String formatEnd = groupedTimes.get(i)[1].format(formatter);
|
|
|
+ Duration duration = Duration.between(groupedTimes.get(i)[0], groupedTimes.get(i)[1]);
|
|
|
+ double hours = duration.toMinutes() / 60.0; // 转换为小时
|
|
|
+ // 四舍五入保留一位小数
|
|
|
+ hours = Math.round(hours * 10.0) / 10.0;
|
|
|
+ String createDate = groupedTimes.get(i)[0].format(formatterDate);
|
|
|
+
|
|
|
+ DeviceLog deviceLogNew = new DeviceLog();
|
|
|
+ deviceLogNew.setDeviceId(deviceLog.getDeviceId());
|
|
|
+ deviceLogNew.setProjectId(deviceLog.getProjectId());
|
|
|
+ deviceLogNew.setStartTime(LocalDateTime.parse(formatStart, formatter));
|
|
|
+ deviceLogNew.setEndTime(LocalDateTime.parse(formatEnd, formatter));
|
|
|
+ deviceLogNew.setCreateDate(LocalDate.parse(createDate, formatterDate));
|
|
|
+ deviceLogNew.setUsageUserId(deviceLog.getUsageUserId());
|
|
|
+ deviceLogNew.setUseTime(hours);
|
|
|
+ deviceLogMapper.insert(deviceLogNew);
|
|
|
+ }
|
|
|
+
|
|
|
+ selectedDevice.setUsageStatus(false);
|
|
|
+ selectedDevice.setUsageUserId(null);
|
|
|
+ deviceMapper.update(null,new UpdateWrapper<Device>()
|
|
|
+ .eq("id",selectedDevice.getId())
|
|
|
+ .set("usage_status",selectedDevice.getUsageStatus())
|
|
|
+ .set("usage_user_id",selectedDevice.getUsageUserId()));
|
|
|
+ }
|
|
|
+ }
|
|
|
return httpRespMsg;
|
|
|
}
|
|
|
|