|
|
@ -39,6 +39,8 @@ import org.springframework.web.servlet.ModelAndView; |
|
|
|
import javax.annotation.Resource; |
|
|
|
import javax.annotation.Resource; |
|
|
|
import javax.servlet.http.HttpServletRequest; |
|
|
|
import javax.servlet.http.HttpServletRequest; |
|
|
|
import javax.servlet.http.HttpServletResponse; |
|
|
|
import javax.servlet.http.HttpServletResponse; |
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
|
|
|
|
import java.text.ParseException; |
|
|
|
import java.text.SimpleDateFormat; |
|
|
|
import java.text.SimpleDateFormat; |
|
|
|
import java.util.Arrays; |
|
|
|
import java.util.Arrays; |
|
|
|
import java.util.Date; |
|
|
|
import java.util.Date; |
|
|
@ -62,6 +64,14 @@ public class TaskController extends JeecgController<Task, ITaskService> { |
|
|
|
private static final String ADMIN = "admin"; |
|
|
|
private static final String ADMIN = "admin"; |
|
|
|
private static final String FORMAT = "yyyy/MM/dd HH:mm:ss"; |
|
|
|
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 |
|
|
|
@Resource |
|
|
|
private IProjectxService iProjectxService; |
|
|
|
private IProjectxService iProjectxService; |
|
|
|
|
|
|
|
|
|
|
@ -180,25 +190,127 @@ public class TaskController extends JeecgController<Task, ITaskService> { |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 提交任务,更新状态,同时计算实际任务时长 |
|
|
|
* 提交任务,更新状态,同时计算实际任务时长 |
|
|
|
* 计算一整天、一上午、一下午的工作时间;计算有多个个这样的整段时间,之后算头和尾时间 |
|
|
|
* 计算一整天,之后算头和尾时间 |
|
|
|
* @param task |
|
|
|
* @param task |
|
|
|
* @return |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
@ApiOperation(value = "任务管理-更新状态", notes = "任务管理-更新状态") |
|
|
|
@ApiOperation(value = "任务管理-更新状态", notes = "任务管理-更新状态") |
|
|
|
@PutMapping(value = "/updateWorkStatus") |
|
|
|
@PutMapping(value = "/updateWorkStatus") |
|
|
|
public Result<?> updateWorkStatus(@RequestBody Task task) { |
|
|
|
public Result<?> updateWorkStatus(@RequestBody Task task) { |
|
|
|
|
|
|
|
Date time = new Date(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (task.getWorkStatus() == 3){ |
|
|
|
//获取数据
|
|
|
|
//获取数据
|
|
|
|
Task oldTask = taskService.query().eq("id", task.getId()).one(); |
|
|
|
Task oldTask = taskService.query().eq("id", task.getId()).one(); |
|
|
|
Date startTime = oldTask.getStartTime(); |
|
|
|
Date startTime = oldTask.getStartTime(); |
|
|
|
Date endTime = new Date(); |
|
|
|
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); |
|
|
|
task.setUpdateTime(endTime); |
|
|
|
|
|
|
|
task.setSubmitTime(endTime); |
|
|
|
|
|
|
|
taskService.updateById(task); |
|
|
|
taskService.updateById(task); |
|
|
|
return Result.OK("编辑成功!"); |
|
|
|
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删除 |
|
|
|
* 通过id删除 |
|
|
|
* |
|
|
|
* |
|
|
|