Browse Source

加工中心工时 2022年11月14日 sxm

master
[li_she] 3 years ago
parent
commit
2daa699b08
  1. 3
      src/main/java/com/alteams/common/utils/DateUtils.java
  2. 91
      src/main/java/com/alteams/modules/shoporder/service/impl/OrderTimeHistServiceImpl.java
  3. 2
      src/main/java/com/alteams/modules/shoporder/vo/WorkCenterTimeVo.java
  4. 73
      src/main/resources/mapper/shoporder/OrderTimeHistDao.xml

3
src/main/java/com/alteams/common/utils/DateUtils.java

@ -2,6 +2,7 @@
package com.alteams.common.utils; package com.alteams.common.utils;
import cn.hutool.core.date.DateUtil;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.joda.time.LocalDate; import org.joda.time.LocalDate;
@ -203,6 +204,6 @@ public class DateUtils {
public static void main(String[] args) throws ParseException{ 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")));
} }
} }

91
src/main/java/com/alteams/modules/shoporder/service/impl/OrderTimeHistServiceImpl.java

@ -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;
} }
} }

2
src/main/java/com/alteams/modules/shoporder/vo/WorkCenterTimeVo.java

@ -15,10 +15,12 @@ public class WorkCenterTimeVo {
private String workCenterNo; private String workCenterNo;
private Date eventTime; private Date eventTime;
private Date tillTime;
private Double totalTime; private Double totalTime;
private Date startEndDate; private Date startEndDate;
private Date startDate; private Date startDate;
private String status; private String status;
private String contract;
} }

73
src/main/resources/mapper/shoporder/OrderTimeHistDao.xml

@ -363,64 +363,39 @@
order by HistSeqNo order by HistSeqNo
</select> </select>
<select id="workCenterTimeHist" resultType="com.alteams.modules.shoporder.vo.WorkCenterTimeVo"> <select id="workCenterTimeHist" resultType="com.alteams.modules.shoporder.vo.WorkCenterTimeVo">
SELECT WorkCenterNo work_center_no, WorkCenterNo centerno, EventTime event_time, ROUND(TotalTime/60 , 1)
total_time, 1 seq1, 1
seq2
FROM SFDC_TimeHist
SELECT
WorkCenterNo Work_Center_No,
EventTime Event_Time,
ISNULL( TillTime, GETDATE( ) ) Till_Time,
ROUND((CASE
WHEN TillTime IS NULL THEN DATEDIFF(MINUTE, EventTime,GETDATE( ) )
ELSE TotalTime
END)/60,1) Total_Time
FROM
SFDC_TimeHist
<where> <where>
WorkCenterNo like 'C%'
<if test="workCenterNo != null and workCenterNo != ''">
and WorkCenterNo = #{workCenterNo}
Site = #{contract} AND WorkCenterNo like 'C%'
<if test=" status != null and status!= '' ">
AND EventType != 'R'
</if> </if>
<if test=" startDate != null ">
and EventTime >= #{ startDate}
</if>
<if test=" startEndDate != null">
and EventTime <![CDATA[ <= ]]> #{ startEndDate}
</if>
<if test=" status != null and status!= '' ">
and EventType != 'R'
</if>
</where>
UNION ALL
SELECT '小计 - ' + WorkCenterNo, WorkCenterNo, null, SUM(ROUND(TotalTime/60 , 1)), 1 seq1, 2 seq2
FROM SFDC_TimeHist
<where>
WorkCenterNo like 'C%'
<if test="workCenterNo != null and workCenterNo != ''"> <if test="workCenterNo != null and workCenterNo != ''">
and WorkCenterNo = #{workCenterNo}
AND WorkCenterNo = #{workCenterNo}
</if> </if>
<if test=" startDate != null ">
and EventTime >= #{ startDate}
</if>
<if test=" startEndDate != null">
and EventTime <![CDATA[ <= ]]> #{ startEndDate}
</if>
<if test=" status != null and status!= '' ">
and EventType != 'R'
</if>
</where>
GROUP BY WorkCenterNo
UNION ALL
SELECT '汇总', '', null EventTime, SUM(ROUND(TotalTime/60 , 1)) QtyPrd, 3 seq1, 3 seq2
FROM SFDC_TimeHist
<where>
AND EventTime >= #{startDate} AND TillTime <![CDATA[ <= ]]> #{ startEndDate}
OR (ISNULL( TillTime, GETDATE( ) ) >= #{startDate} AND EventTime <![CDATA[ <= ]]> #{ startEndDate} AND
WorkCenterNo like 'C%' WorkCenterNo like 'C%'
<if test="workCenterNo != null and workCenterNo != ''"> <if test="workCenterNo != null and workCenterNo != ''">
and WorkCenterNo = #{workCenterNo}
AND WorkCenterNo = #{workCenterNo}
</if> </if>
<if test=" startDate != null ">
and EventTime >= #{ startDate}
</if>
<if test=" startEndDate != null">
and EventTime <![CDATA[ <= ]]> #{ startEndDate}
</if>
<if test=" status != null and status!= '' ">
and EventType != 'R'
)
OR (TillTime >= #{ startEndDate} AND EventTime <![CDATA[ <= ]]> #{startDate} AND WorkCenterNo like 'C%'
<if test="workCenterNo != null and workCenterNo != ''">
AND WorkCenterNo = #{workCenterNo}
</if> </if>
)
</where> </where>
ORDER BY seq1, centerno, seq2
ORDER BY WorkCenterNo,EventTime
</select> </select>
Loading…
Cancel
Save