Commit 0382c323 authored by 李驰骋's avatar 李驰骋

工时计算调整为只在排班日历范围内的

parent ebbda24d
...@@ -252,14 +252,21 @@ public class ProStartWorkServiceImpl implements IProStartWorkService { ...@@ -252,14 +252,21 @@ public class ProStartWorkServiceImpl implements IProStartWorkService {
QueryWrapper<CalPlanWorkunit> calPlanWorkunitQueryWrapper = new QueryWrapper<>(); QueryWrapper<CalPlanWorkunit> calPlanWorkunitQueryWrapper = new QueryWrapper<>();
Date startDate = startWork.getStartDate(); Date startDate = startWork.getStartDate();
Date endDate = startWork.getEndDate(); Date endDate = startWork.getEndDate();
calPlanWorkunitQueryWrapper.between("start_date", startDate, endDate).eq("rest_flag", 1).eq("workunit_id", workunitId) calPlanWorkunitQueryWrapper.between("start_date", startDate, endDate).eq("rest_flag", 0).eq("workunit_id", workunitId)
.or() .or()
.between("end_date", startDate, endDate).eq("rest_flag", 1).eq("workunit_id", workunitId); .between("end_date", startDate, endDate).eq("rest_flag", 0).eq("workunit_id", workunitId);
List<CalPlanWorkunit> calPlanWorkunits = calPlanWorkunitService.selectListByQw(calPlanWorkunitQueryWrapper); List<CalPlanWorkunit> calPlanWorkunits = calPlanWorkunitService.selectListByQw(calPlanWorkunitQueryWrapper);
return this.computeWorkTime(startWork, calPlanWorkunits, workunitId);
}
private Map<String, Long> computeWorkTime(ProStartWork startWork, List<CalPlanWorkunit> calPlanWorkunits, Long workunitId) {
Date startDate = startWork.getStartDate();
Date endDate = startWork.getEndDate();
long startWorkDateTimeStamp = startDate.getTime(); long startWorkDateTimeStamp = startDate.getTime();
long startWorkendDateTimeStamp = endDate.getTime(); long startWorkendDateTimeStamp = endDate.getTime();
//统计排班日历内加工工时
List<CalPlanWorkunit> planWorkunitList = calPlanWorkunits.stream().filter(x -> x.getStartDate().getTime() < x.getEndDate().getTime()).collect(Collectors.toList()); List<CalPlanWorkunit> planWorkunitList = calPlanWorkunits.stream().filter(x -> x.getStartDate().getTime() < x.getEndDate().getTime()).collect(Collectors.toList());
LongSummaryStatistics breakTimeSum = planWorkunitList.stream().map(x -> { LongSummaryStatistics workTimeSum = planWorkunitList.stream().map(x -> {
long cPwStartTimeStamp = x.getStartDate().getTime(); long cPwStartTimeStamp = x.getStartDate().getTime();
long endTimeStamp = x.getEndDate().getTime(); long endTimeStamp = x.getEndDate().getTime();
if (cPwStartTimeStamp < startWorkDateTimeStamp) { if (cPwStartTimeStamp < startWorkDateTimeStamp) {
...@@ -272,8 +279,8 @@ public class ProStartWorkServiceImpl implements IProStartWorkService { ...@@ -272,8 +279,8 @@ public class ProStartWorkServiceImpl implements IProStartWorkService {
return endTimeStamp > cPwStartTimeStamp ? (endTimeStamp - cPwStartTimeStamp) : 0; return endTimeStamp > cPwStartTimeStamp ? (endTimeStamp - cPwStartTimeStamp) : 0;
}).collect(Collectors.summarizingLong(x -> x)); }).collect(Collectors.summarizingLong(x -> x));
long breakTimeSec = breakTimeSum.getSum(); long workTimeSec = workTimeSum.getSum();
long workTimeSec = startWorkendDateTimeStamp - startWorkDateTimeStamp - breakTimeSec; long breakTimeSec = startWorkendDateTimeStamp - startWorkDateTimeStamp - workTimeSec;
workTimeSec = workTimeSec < 0 ? 0L : workTimeSec; workTimeSec = workTimeSec < 0 ? 0L : workTimeSec;
Map<String, Long> map = new HashMap<>(); Map<String, Long> map = new HashMap<>();
map.put("breakTimeSec", breakTimeSec / 1000); map.put("breakTimeSec", breakTimeSec / 1000);
......
package com.bs.mes.pro;
import cn.hutool.core.date.DateUtil;
import com.ximai.mes.cal.domain.CalPlanWorkunit;
import com.ximai.mes.pro.domain.ProStartWork;
import com.ximai.mes.pro.schedule.Equipment;
import com.ximai.mes.pro.schedule.strategy.EvaluateEquipmentDeliveryTime;
import com.ximai.mes.pro.service.impl.ProStartWorkServiceImpl;
import org.junit.Assert;
import org.junit.Test;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class ProStartWorkServiceImplTest {
@Test public void computeWorkTime() throws Exception {
ProStartWorkServiceImpl proStartWorkService = new ProStartWorkServiceImpl();
Method methods = ProStartWorkServiceImpl.class.getDeclaredMethod("computeWorkTime", ProStartWork.class, List.class, Long.class);
methods.setAccessible(true);
// 测试1 加工时间超出上班时间
ProStartWork proStartWork = new ProStartWork();
List<CalPlanWorkunit> calPlanWorkunits = new ArrayList<>();
proStartWork.setStartDate(DateUtil.parse("2024-11-22 13:53","yyyy-MM-dd HH:mm"));
proStartWork.setEndDate(DateUtil.parse("2024-11-23 13:03","yyyy-MM-dd HH:mm"));
calPlanWorkunits.add(new CalPlanWorkunit(){
{
setStartDate(DateUtil.parse("2024-11-22 09:00","yyyy-MM-dd HH:mm"));
setEndDate(DateUtil.parse("2024-11-22 13:00","yyyy-MM-dd HH:mm"));
};
});
calPlanWorkunits.add(new CalPlanWorkunit(){
{
setStartDate(DateUtil.parse("2024-11-22 15:00","yyyy-MM-dd HH:mm"));
setEndDate(DateUtil.parse("2024-11-22 19:00","yyyy-MM-dd HH:mm"));
};
});
calPlanWorkunits.add(new CalPlanWorkunit(){
{
setStartDate(DateUtil.parse("2024-11-23 09:00","yyyy-MM-dd HH:mm"));
setEndDate(DateUtil.parse("2024-11-23 13:00","yyyy-MM-dd HH:mm"));
};
});
calPlanWorkunits.add(new CalPlanWorkunit(){
{
setStartDate(DateUtil.parse("2024-11-23 15:00","yyyy-MM-dd HH:mm"));
setEndDate(DateUtil.parse("2024-11-23 19:00","yyyy-MM-dd HH:mm"));
};
});
Map<String, Long> rst = (Map) methods.invoke(proStartWorkService, proStartWork, calPlanWorkunits, 0l);
Assert.assertEquals((240+240)*60, rst.get("workTimeSec").longValue());
Assert.assertEquals((proStartWork.getEndDate().getTime()-proStartWork.getStartDate().getTime())/1000-rst.get("workTimeSec").longValue(),
rst.get("breakTimeSec").longValue());
//测试2 加工时间在排班日历范围内
proStartWork.setEndDate(DateUtil.parse("2024-11-23 12:48","yyyy-MM-dd HH:mm"));
rst = (Map) methods.invoke(proStartWorkService, proStartWork, calPlanWorkunits, 0l);
Assert.assertEquals((228+240)*60, rst.get("workTimeSec").longValue());
Assert.assertEquals((proStartWork.getEndDate().getTime()-proStartWork.getStartDate().getTime())/1000-rst.get("workTimeSec").longValue(),
rst.get("breakTimeSec").longValue());
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment