|
|
@ -1,10 +1,13 @@ |
|
|
package com.alteams.modules.shoporder.service.impl; |
|
|
package com.alteams.modules.shoporder.service.impl; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.date.DateUnit; |
|
|
|
|
|
import cn.hutool.core.date.DateUtil; |
|
|
import cn.hutool.core.util.NumberUtil; |
|
|
import cn.hutool.core.util.NumberUtil; |
|
|
import com.alteams.common.constant.OrderTimeHistConstant; |
|
|
import com.alteams.common.constant.OrderTimeHistConstant; |
|
|
import com.alteams.common.exception.ResponseEnum; |
|
|
import com.alteams.common.exception.ResponseEnum; |
|
|
import com.alteams.common.exception.XJException; |
|
|
import com.alteams.common.exception.XJException; |
|
|
|
|
|
import com.alteams.common.utils.DateUtils; |
|
|
import com.alteams.datasource.annotation.DataSource; |
|
|
import com.alteams.datasource.annotation.DataSource; |
|
|
import com.alteams.modules.ifsapp.vo.IfsShopOrderVo; |
|
|
import com.alteams.modules.ifsapp.vo.IfsShopOrderVo; |
|
|
import com.alteams.modules.shoporder.dao.OrderTimeHistDao; |
|
|
import com.alteams.modules.shoporder.dao.OrderTimeHistDao; |
|
|
@ -23,7 +26,11 @@ import org.springframework.transaction.annotation.Transactional; |
|
|
import org.springframework.util.CollectionUtils; |
|
|
import org.springframework.util.CollectionUtils; |
|
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
import java.math.BigDecimal; |
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
|
import java.util.Date; |
|
|
import java.util.List; |
|
|
import java.util.List; |
|
|
|
|
|
import java.util.Map; |
|
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
@Service("orderTimeHistService") |
|
|
@Service("orderTimeHistService") |
|
|
@DataSource("slave2") |
|
|
@DataSource("slave2") |
|
|
@ -449,6 +456,88 @@ public class OrderTimeHistServiceImpl extends ServiceImpl<OrderTimeHistDao, Orde |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public List<WorkCenterTimeVo> workCenterTimeHist(WorkCenterTimeVo workCenterTimeVo) { |
|
|
public List<WorkCenterTimeVo> workCenterTimeHist(WorkCenterTimeVo workCenterTimeVo) { |
|
|
return this.baseMapper.workCenterTimeHist(workCenterTimeVo); |
|
|
|
|
|
|
|
|
List<WorkCenterTimeVo> workCenterTimeVos = new ArrayList<>(); |
|
|
|
|
|
long between = DateUtil.between(workCenterTimeVo.getStartDate(), workCenterTimeVo.getStartEndDate(), DateUnit.DAY); |
|
|
|
|
|
// 获取到整个范围内的列表 |
|
|
|
|
|
List<WorkCenterTimeVo> workCenterTimeVosList = this.baseMapper.workCenterTimeHist(workCenterTimeVo); |
|
|
|
|
|
Map<String, List<WorkCenterTimeVo>> workCenterTimeMap = workCenterTimeVosList.stream().collect(Collectors.groupingBy(WorkCenterTimeVo::getWorkCenterNo)); |
|
|
|
|
|
// 外层循环加工中心 |
|
|
|
|
|
for (String workCenterNo : workCenterTimeMap.keySet()) { |
|
|
|
|
|
WorkCenterTimeVo sumWork = new WorkCenterTimeVo(); |
|
|
|
|
|
sumWork.setWorkCenterNo("小计 - "+workCenterNo); |
|
|
|
|
|
Double sumTime = 0.0; |
|
|
|
|
|
// 内层循环日期 |
|
|
|
|
|
for (int i = 0; i <= between; i++) { |
|
|
|
|
|
WorkCenterTimeVo workCenterDayTime = getWorkCenterDayTime(workCenterNo, workCenterTimeMap.get(workCenterNo), DateUtil.offsetDay(workCenterTimeVo.getStartDate(), i)); |
|
|
|
|
|
sumTime += workCenterDayTime.getTotalTime(); |
|
|
|
|
|
workCenterTimeVos.add(workCenterDayTime); |
|
|
|
|
|
} |
|
|
|
|
|
sumWork.setTotalTime(sumTime); |
|
|
|
|
|
workCenterTimeVos.add(sumWork); |
|
|
|
|
|
} |
|
|
|
|
|
if (CollectionUtils.isEmpty(workCenterTimeVos)) { |
|
|
|
|
|
return workCenterTimeVos; |
|
|
|
|
|
} |
|
|
|
|
|
// 合计信息 |
|
|
|
|
|
WorkCenterTimeVo workCenterSumTime = new WorkCenterTimeVo(); |
|
|
|
|
|
Double timeSum = workCenterTimeVos.stream().filter(item -> item.getWorkCenterNo().indexOf("小计")==0).collect(Collectors.summingDouble(WorkCenterTimeVo::getTotalTime)); |
|
|
|
|
|
workCenterSumTime.setTotalTime(timeSum); |
|
|
|
|
|
workCenterSumTime.setWorkCenterNo("合计"); |
|
|
|
|
|
workCenterTimeVos.add(workCenterSumTime); |
|
|
|
|
|
return workCenterTimeVos; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 传入数据获取 当天机台时间 |
|
|
|
|
|
* |
|
|
|
|
|
* @param workCenterTimeVo |
|
|
|
|
|
* @param date |
|
|
|
|
|
* @return |
|
|
|
|
|
*/ |
|
|
|
|
|
private WorkCenterTimeVo getWorkCenterDayTime(String workCenterNo, List<WorkCenterTimeVo> workCenterTimeVo, Date date) { |
|
|
|
|
|
WorkCenterTimeVo workCenterDayTime = new WorkCenterTimeVo(); |
|
|
|
|
|
workCenterDayTime.setWorkCenterNo(workCenterNo); |
|
|
|
|
|
workCenterDayTime.setEventTime(date); |
|
|
|
|
|
workCenterDayTime.setTotalTime(0.0); |
|
|
|
|
|
List<WorkCenterTimeVo> theDay = workCenterTimeVo.stream() |
|
|
|
|
|
.map(item -> { |
|
|
|
|
|
|
|
|
|
|
|
double between = 0.0; |
|
|
|
|
|
double dayTime = 24*60; |
|
|
|
|
|
// 开始时间是当天,结束时间大于当天 |
|
|
|
|
|
if (DateUtils.differentDays(item.getEventTime(), date) == 0 && DateUtils.differentDays(date,item.getTillTime()) > 0) { |
|
|
|
|
|
between = (dayTime - (double) DateUtil.between(date, item.getEventTime(), DateUnit.MINUTE))/60; |
|
|
|
|
|
} |
|
|
|
|
|
// 开始不是当天 ,结束当天 |
|
|
|
|
|
if (DateUtils.differentDays(item.getEventTime(), date) < 0 && DateUtils.differentDays(item.getTillTime(), date) == 0) { |
|
|
|
|
|
between = (double) DateUtil.between(date, item.getTillTime(), DateUnit.MINUTE)/60; |
|
|
|
|
|
} |
|
|
|
|
|
// 开始时间大于当天 |
|
|
|
|
|
if (DateUtils.differentDays(date,item.getEventTime() ) > 0) { |
|
|
|
|
|
between = 0.0; |
|
|
|
|
|
} |
|
|
|
|
|
// 开始时间小于当天 |
|
|
|
|
|
if (DateUtils.differentDays(date,item.getEventTime()) < 0 && DateUtils.differentDays(date,item.getTillTime()) > 0) { |
|
|
|
|
|
between = 24.0; |
|
|
|
|
|
} |
|
|
|
|
|
// 开始当天 ,结束当天 |
|
|
|
|
|
if (DateUtils.differentDays(item.getEventTime(), date) == 0 && DateUtils.differentDays(item.getTillTime(), date) == 0) { |
|
|
|
|
|
between = (double) DateUtil.between(item.getEventTime(), item.getTillTime(), DateUnit.MINUTE)/60; |
|
|
|
|
|
} |
|
|
|
|
|
// 结束日期等于当天 |
|
|
|
|
|
if ( DateUtils.differentDays(date,item.getTillTime()) == 0) { |
|
|
|
|
|
between = (double) DateUtil.between(date, item.getTillTime(), DateUnit.MINUTE)/60; |
|
|
|
|
|
} |
|
|
|
|
|
// 开始时间小于等于 |
|
|
|
|
|
item.setTotalTime(between); |
|
|
|
|
|
return item; |
|
|
|
|
|
}).collect(Collectors.toList()); |
|
|
|
|
|
if (!CollectionUtils.isEmpty(theDay)) { |
|
|
|
|
|
Double theDayTimeSum = theDay.stream().collect(Collectors.summingDouble(WorkCenterTimeVo::getTotalTime)); |
|
|
|
|
|
workCenterDayTime.setTotalTime(theDayTimeSum); |
|
|
|
|
|
} |
|
|
|
|
|
return workCenterDayTime; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |