diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/task/controller/TaskController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/task/controller/TaskController.java index b405c25..e81391d 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/task/controller/TaskController.java +++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/task/controller/TaskController.java @@ -39,6 +39,8 @@ import org.springframework.web.servlet.ModelAndView; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; @@ -62,6 +64,14 @@ public class TaskController extends JeecgController { private static final String ADMIN = "admin"; private static final String FORMAT = "yyyy/MM/dd HH:mm:ss"; + private static final long DAYWORKTIME = 35*60*60*100*2; + private static final long DAYTIME = 24*60*60*1000; + + private static final String MORINGSTART = " 08:30:00"; + private static final String MORINGEND = " 12:00:00"; + private static final String AFTERNOONSTART = " 14:30:00"; + private static final String AFTERNOONEND= " 18:00:00"; + @Resource private IProjectxService iProjectxService; @@ -180,25 +190,127 @@ public class TaskController extends JeecgController { /** * 提交任务,更新状态,同时计算实际任务时长 - * 计算一整天、一上午、一下午的工作时间;计算有多个个这样的整段时间,之后算头和尾时间 + * 计算一整天,之后算头和尾时间 * @param task * @return */ @ApiOperation(value = "任务管理-更新状态", notes = "任务管理-更新状态") @PutMapping(value = "/updateWorkStatus") public Result updateWorkStatus(@RequestBody Task task) { - //获取数据 - Task oldTask = taskService.query().eq("id", task.getId()).one(); - Date startTime = oldTask.getStartTime(); - Date endTime = new Date(); - - //更新数据 - task.setUpdateTime(endTime); - task.setSubmitTime(endTime); + Date time = new Date(); + + if (task.getWorkStatus() == 3){ + //获取数据 + Task oldTask = taskService.query().eq("id", task.getId()).one(); + Date startTime = oldTask.getStartTime(); + long realTime = 0; + try { + realTime = realDuration(startTime, time); + } catch (ParseException e) { + throw new RuntimeException(e); + } + + //设置更新数据 + double realTimeHour = (double)realTime/(60*60*1000); + realTimeHour = new BigDecimal(realTimeHour).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); + task.setRealDuration(realTimeHour); + task.setSubmitTime(time); + } + + task.setUpdateTime(time); taskService.updateById(task); return Result.OK("编辑成功!"); } + //计算真实时间, 单位:小时 + private long realDuration(Date startTime, Date endTime) throws ParseException { + long workTime = 0; + long millisecond = endTime.getTime() - startTime.getTime(); + //统计整天时间 + workTime += (millisecond / DAYTIME) * DAYWORKTIME; + millisecond = millisecond % DAYTIME; + + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("HH:mm:ss"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + String time = dateFormat.format(new Date()); + String start = sdf1.format(startTime); + String time0 = time + " " + start; + + startTime = sdf.parse(time0); + String time1 = time + MORINGSTART; + String time2 = time + MORINGEND; + String time3 = time + AFTERNOONSTART; + String time4 = time + AFTERNOONEND; + Date date3 = sdf.parse(time3); + Date date2 = sdf.parse(time2); + Date date1 = sdf.parse(time1); + Date date4 = sdf.parse(time4); + + //从start往后推到end,要判断大量情况 + if (startTime.compareTo(endTime) > 0){ + //时间跨度两天,但总时间不超过24小时 + if (startTime.compareTo(date1) <= 0) + startTime = date1; //任务发布在8点前,从8点开始算 + if (startTime.compareTo(date2) <= 0){ + //早上有工作时间 + workTime += date2.getTime() - startTime.getTime(); + //跨度两天,下午必有任务时间 + workTime += DAYWORKTIME/2; + //第二天下午必没有工作时间,判断第二天早上是否有部分工作时间 + if (endTime.compareTo(date1) > 0) + workTime += endTime.getTime() - date1.getTime(); //第二天早上有工作时间 + return workTime; //计算完成,返回结果 + } + + //上午没有工作时间 + if (startTime.compareTo(date3) <= 0) + startTime = date3; //任务发布时间在12点后,14点前 + if (startTime.compareTo(date4) <= 0) //下午有工作时间 + workTime += date4.getTime() - startTime.getTime(); + if (endTime.compareTo(date1) <= 0) + return workTime; //第二天没有工作时间 + if (endTime.compareTo(date2) <= 0){ + workTime += endTime.getTime() - date1.getTime(); //第二天上午有部分工作时间 + return workTime; //必然下午没有工作时间 + } + workTime += DAYWORKTIME/2; //第二天上午工作时间占满 + if (endTime.compareTo(date3) <= 0) + return workTime; //下午没有工作时间 + if (endTime.compareTo(date4) >= 0) + endTime = date4; //下午干满了 + workTime += endTime.getTime() - date3.getTime(); + return workTime; + }else { + //时间跨度没有超过两天 + if (startTime.compareTo(date1) <= 0) + startTime = date1; //发布任务在8点之前 + if (startTime.compareTo(date2) <= 0){ + //上午发布的任务 + if (endTime.compareTo(date2) <= 0){ + //上午提交的任务 + workTime += endTime.getTime() - startTime.getTime(); + return workTime; + } + workTime += date2.getTime() - startTime.getTime(); //上午没有提交任务 + if (endTime.compareTo(date3) <= 0) + return workTime; //中午12点后14点前提交任务 + if (endTime.compareTo(date4) >= 0) + endTime = date4; //时间偏移 + workTime += endTime.getTime() - date3.getTime(); //下午工作时间 + return workTime; + }else { + //下午发布的任务 + if (startTime.compareTo(date3) <= 0) + startTime = date3; //12点之后,14点之前发布任务 + if (endTime.compareTo(date4) >= 0) + endTime = date4; //时间偏移 + workTime += endTime.getTime() - startTime.getTime(); + return workTime; + } + } + } + /** * 通过id删除 *