时间判断。
This commit is contained in:
parent
83754b9d2c
commit
cd21ae9d17
|
|
@ -3,7 +3,7 @@ package com.ghy.quartz.service;
|
|||
public interface OrderService {
|
||||
|
||||
// 更新超时环境订单
|
||||
void overTimeOrder(String orderStatus);
|
||||
void overTimeOrder(String orderStatus) throws Exception;
|
||||
|
||||
// 自动完成和分账
|
||||
void autoFinishOrder();
|
||||
|
|
|
|||
|
|
@ -23,10 +23,8 @@ import org.springframework.util.CollectionUtils;
|
|||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
|
|
@ -54,25 +52,23 @@ public class OrderServiceImpl implements OrderService {
|
|||
private ISysDeptConfigService sysDeptConfigService;
|
||||
|
||||
@Override
|
||||
public void overTimeOrder(String orderStatus) {
|
||||
// 这是半小时前的时间
|
||||
Date halfHour = new Date(System.currentTimeMillis() - 30 * 60 * 1000);
|
||||
// 这是4小时前的时间
|
||||
Date fourHour = new Date(System.currentTimeMillis() - 4 * 60 * 60 * 1000);
|
||||
|
||||
public void overTimeOrder(String orderStatus) throws Exception{
|
||||
// 查询符合超时的单
|
||||
List<OrderDetail> orders = orderDetailService.selectByStatus(timeoutOrderStatus);
|
||||
for (OrderDetail order : orders) {
|
||||
if (order.getOrderStatus().equals(OrderStatus.SERVER.code())) {
|
||||
// 服务中状态要按预计上门时间计算超时 4h超时并且扣款
|
||||
if (order.getExpectTimeStart().before(fourHour)) {
|
||||
long overTimeSec = this.getOverTimeSec(order.getExpectTimeStart(), 4 * 60 * 60 * 1000);
|
||||
if (overTimeSec < System.currentTimeMillis()) {
|
||||
executor.execute(() -> orderTimeout(order, true));
|
||||
}
|
||||
} else if (timeoutOrderStatus.contains(order.getOrderStatus())) {
|
||||
// 其它状态用update_time判断超时 30min超时 4h扣款
|
||||
if (fourHour.after(order.getUpdateTime())) {
|
||||
long halfOverTimeSec = this.getOverTimeSec(order.getUpdateTime(), 30 * 60 * 1000);
|
||||
long fourOverTimeSec = this.getOverTimeSec(order.getUpdateTime(), 4 * 60 * 60 * 1000);
|
||||
if (halfOverTimeSec < System.currentTimeMillis()) {
|
||||
executor.execute(() -> orderTimeout(order, true));
|
||||
} else if (order.getUpdateTime().before(halfHour)) {
|
||||
} else if (fourOverTimeSec < System.currentTimeMillis()) {
|
||||
executor.execute(() -> orderTimeout(order, false));
|
||||
}
|
||||
}
|
||||
|
|
@ -80,6 +76,56 @@ public class OrderServiceImpl implements OrderService {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param orderTime 单据时间/可能为上门开始时间
|
||||
* @param time 超时时间,0.5h/4h/8h等
|
||||
* @return 最低限制时间
|
||||
* @throws Exception
|
||||
*/
|
||||
private long getOverTimeSec(Date orderTime, long time) throws Exception{
|
||||
long overTime = orderTime.getTime();
|
||||
// 隔夜需要加上13个小时
|
||||
long isNight = 13 * 60 * 60 * 1000;
|
||||
//设置日期格式
|
||||
SimpleDateFormat df = new SimpleDateFormat("HH:mm");
|
||||
Date nowTime =df.parse(df.format(new Date()));
|
||||
// 早上8点-晚上19点
|
||||
Date amBeginTime = df.parse("08:00");
|
||||
Date pmEndTime = df.parse("19:00");
|
||||
//设置当前时间
|
||||
Calendar date = Calendar.getInstance();
|
||||
date.setTime(nowTime);
|
||||
//设置开始时间
|
||||
Calendar beginTime = Calendar.getInstance();
|
||||
beginTime.setTime(amBeginTime);
|
||||
//设置结束时间
|
||||
Calendar endTime = Calendar.getInstance();
|
||||
endTime.setTime(pmEndTime);
|
||||
// 符合时间区间
|
||||
if(date.after(beginTime) && date.before(endTime)){
|
||||
// 当日单
|
||||
if(checkIsTodayOrder(orderTime)){
|
||||
overTime = overTime + time;
|
||||
}else {
|
||||
overTime = overTime + isNight + time;
|
||||
}
|
||||
}
|
||||
return overTime;
|
||||
}
|
||||
|
||||
private Boolean checkIsTodayOrder(Date orderTime) throws Exception{
|
||||
// 订单日期
|
||||
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
||||
Date orderDate = df.parse(df.format(orderTime));
|
||||
// 当前日期
|
||||
Date now = df.parse(df.format(new Date()));
|
||||
if(orderDate.before(now)){
|
||||
return false;
|
||||
}else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理订单超时与扣款
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in New Issue