|
@@ -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
|