瀏覽代碼

增加传入时间段来获取时长的接口

seyason 2 年之前
父節點
當前提交
5e3dd33366

+ 60 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -104,7 +104,67 @@ public class ReportController {
         return msg;
     }
 
+    /**
+     * 通过传入时间段来获取时长
+     * @return
+     */
+    @RequestMapping("/getHoursByTimeRange")
+    public HttpRespMsg getHoursByTimeRange(String timeJsonStr) {
+        String token = request.getHeader("TOKEN");
 
+        HttpRespMsg msg = new HttpRespMsg();
+        JSONArray array = JSONArray.parseArray(timeJsonStr);
+        List<WorktimeItem> worktimeItemList = new ArrayList<>();
+        for (int i = 0; i < array.size(); i++) {
+            JSONObject object = array.getJSONObject(i);
+            WorktimeItem worktimeItem = new WorktimeItem();
+            worktimeItem.setStartTime(object.getString("startTime"));
+            worktimeItem.setEndTime(object.getString("endTime"));
+            worktimeItemList.add(worktimeItem);
+        }
+        User user = userMapper.selectById(token);
+        List<TimeAutoExclude> excludeTimeList = timeAutoExcludeMapper.selectList(new QueryWrapper<TimeAutoExclude>().eq("company_id", user.getCompanyId()));
+
+        int totalMinutes = 0;
+        for (WorktimeItem worktimeItem : worktimeItemList) {
+            String startTime = worktimeItem.getStartTime();
+            String endTime = worktimeItem.getEndTime();
+            SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
+            long time = 0;
+            try {
+                time = sdf.parse(endTime).getTime() - sdf.parse(startTime).getTime();
+            } catch (ParseException e) {
+                e.printStackTrace();
+            }
+            int excludeTime = 0;
+            if (excludeTimeList.size() > 0) {
+                for (TimeAutoExclude exclude : excludeTimeList) {
+                    if (!(exclude.getEndTime().compareTo(startTime) < 0 || exclude.getStartTime().compareTo(endTime) > 0)) {
+                        //有交叉的情况,结束时间取较早的,开始时间取较晚的
+                        String mEndTime = exclude.getEndTime().compareTo(endTime) <0 ? exclude.getEndTime() : endTime;
+                        String mStartTime = exclude.getStartTime().compareTo(startTime) > 0 ? exclude.getStartTime() : startTime;
+                        //落在休息时间范围内,需要计算去掉的时间
+                        long subtractTime = 0;
+                        try {
+                            subtractTime = sdf.parse(mEndTime).getTime() - sdf.parse(mStartTime).getTime();
+                        } catch (ParseException e) {
+                            e.printStackTrace();
+                        }
+                        excludeTime += subtractTime;
+                    }
+                }
+            }
+            if (excludeTime > 0) {
+                time -= excludeTime;//去掉休息时间
+            }
+            int minutes = (int)time/1000/60;
+            totalMinutes += minutes;
+        }
+        double hours = totalMinutes*1.0f/60;
+        DecimalFormat df = new DecimalFormat("0.00");
+        msg.data = df.format(hours);
+        return msg;
+    }
     /**
      * 根据时间 按照人分类 获取报告信息
      * date 日期 格式yyyy-mm-dd