From 2daa699b08a9469a6d437ef6c0682bf1fc6917c3 Mon Sep 17 00:00:00 2001 From: "[li_she]" <[li.she@xujiesoft.com]> Date: Mon, 14 Nov 2022 15:31:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=B7=A5=E4=B8=AD=E5=BF=83=E5=B7=A5?= =?UTF-8?q?=E6=97=B6=202022=E5=B9=B411=E6=9C=8814=E6=97=A5=20sxm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/alteams/common/utils/DateUtils.java | 3 +- .../impl/OrderTimeHistServiceImpl.java | 91 ++++++++++++++++++- .../shoporder/vo/WorkCenterTimeVo.java | 2 + .../mapper/shoporder/OrderTimeHistDao.xml | 73 +++++---------- 4 files changed, 118 insertions(+), 51 deletions(-) diff --git a/src/main/java/com/alteams/common/utils/DateUtils.java b/src/main/java/com/alteams/common/utils/DateUtils.java index 2aa1edb..2407fd2 100644 --- a/src/main/java/com/alteams/common/utils/DateUtils.java +++ b/src/main/java/com/alteams/common/utils/DateUtils.java @@ -2,6 +2,7 @@ package com.alteams.common.utils; +import cn.hutool.core.date.DateUtil; import org.apache.commons.lang.StringUtils; import org.joda.time.DateTime; import org.joda.time.LocalDate; @@ -203,6 +204,6 @@ public class DateUtils { public static void main(String[] args) throws ParseException{ - System.out.println(differentDays(new Date(),new Date())); + System.out.println(differentDays(DateUtil.parse("2022-11-17 12:00:00"),DateUtil.parse("2022-11-15"))); } } diff --git a/src/main/java/com/alteams/modules/shoporder/service/impl/OrderTimeHistServiceImpl.java b/src/main/java/com/alteams/modules/shoporder/service/impl/OrderTimeHistServiceImpl.java index 85b817c..2190a3c 100644 --- a/src/main/java/com/alteams/modules/shoporder/service/impl/OrderTimeHistServiceImpl.java +++ b/src/main/java/com/alteams/modules/shoporder/service/impl/OrderTimeHistServiceImpl.java @@ -1,10 +1,13 @@ 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 com.alteams.common.constant.OrderTimeHistConstant; import com.alteams.common.exception.ResponseEnum; import com.alteams.common.exception.XJException; +import com.alteams.common.utils.DateUtils; import com.alteams.datasource.annotation.DataSource; import com.alteams.modules.ifsapp.vo.IfsShopOrderVo; import com.alteams.modules.shoporder.dao.OrderTimeHistDao; @@ -23,7 +26,11 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; @Service("orderTimeHistService") @DataSource("slave2") @@ -449,6 +456,88 @@ public class OrderTimeHistServiceImpl extends ServiceImpl workCenterTimeHist(WorkCenterTimeVo workCenterTimeVo) { - return this.baseMapper.workCenterTimeHist(workCenterTimeVo); + List workCenterTimeVos = new ArrayList<>(); + long between = DateUtil.between(workCenterTimeVo.getStartDate(), workCenterTimeVo.getStartEndDate(), DateUnit.DAY); + // 获取到整个范围内的列表 + List workCenterTimeVosList = this.baseMapper.workCenterTimeHist(workCenterTimeVo); + Map> 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, Date date) { + WorkCenterTimeVo workCenterDayTime = new WorkCenterTimeVo(); + workCenterDayTime.setWorkCenterNo(workCenterNo); + workCenterDayTime.setEventTime(date); + workCenterDayTime.setTotalTime(0.0); + List 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; } + } \ No newline at end of file diff --git a/src/main/java/com/alteams/modules/shoporder/vo/WorkCenterTimeVo.java b/src/main/java/com/alteams/modules/shoporder/vo/WorkCenterTimeVo.java index 9cabff3..6d271e4 100644 --- a/src/main/java/com/alteams/modules/shoporder/vo/WorkCenterTimeVo.java +++ b/src/main/java/com/alteams/modules/shoporder/vo/WorkCenterTimeVo.java @@ -15,10 +15,12 @@ public class WorkCenterTimeVo { private String workCenterNo; private Date eventTime; + private Date tillTime; private Double totalTime; private Date startEndDate; private Date startDate; private String status; + private String contract; } diff --git a/src/main/resources/mapper/shoporder/OrderTimeHistDao.xml b/src/main/resources/mapper/shoporder/OrderTimeHistDao.xml index 18ca60f..e676308 100644 --- a/src/main/resources/mapper/shoporder/OrderTimeHistDao.xml +++ b/src/main/resources/mapper/shoporder/OrderTimeHistDao.xml @@ -363,64 +363,39 @@ order by HistSeqNo