时间判断。
This commit is contained in:
parent
83754b9d2c
commit
cd21ae9d17
|
|
@ -3,7 +3,7 @@ package com.ghy.quartz.service;
|
||||||
public interface OrderService {
|
public interface OrderService {
|
||||||
|
|
||||||
// 更新超时环境订单
|
// 更新超时环境订单
|
||||||
void overTimeOrder(String orderStatus);
|
void overTimeOrder(String orderStatus) throws Exception;
|
||||||
|
|
||||||
// 自动完成和分账
|
// 自动完成和分账
|
||||||
void autoFinishOrder();
|
void autoFinishOrder();
|
||||||
|
|
|
||||||
|
|
@ -23,10 +23,8 @@ import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Collections;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
|
|
@ -54,25 +52,23 @@ public class OrderServiceImpl implements OrderService {
|
||||||
private ISysDeptConfigService sysDeptConfigService;
|
private ISysDeptConfigService sysDeptConfigService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void overTimeOrder(String orderStatus) {
|
public void overTimeOrder(String orderStatus) throws Exception{
|
||||||
// 这是半小时前的时间
|
|
||||||
Date halfHour = new Date(System.currentTimeMillis() - 30 * 60 * 1000);
|
|
||||||
// 这是4小时前的时间
|
|
||||||
Date fourHour = new Date(System.currentTimeMillis() - 4 * 60 * 60 * 1000);
|
|
||||||
|
|
||||||
// 查询符合超时的单
|
// 查询符合超时的单
|
||||||
List<OrderDetail> orders = orderDetailService.selectByStatus(timeoutOrderStatus);
|
List<OrderDetail> orders = orderDetailService.selectByStatus(timeoutOrderStatus);
|
||||||
for (OrderDetail order : orders) {
|
for (OrderDetail order : orders) {
|
||||||
if (order.getOrderStatus().equals(OrderStatus.SERVER.code())) {
|
if (order.getOrderStatus().equals(OrderStatus.SERVER.code())) {
|
||||||
// 服务中状态要按预计上门时间计算超时 4h超时并且扣款
|
// 服务中状态要按预计上门时间计算超时 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));
|
executor.execute(() -> orderTimeout(order, true));
|
||||||
}
|
}
|
||||||
} else if (timeoutOrderStatus.contains(order.getOrderStatus())) {
|
} else if (timeoutOrderStatus.contains(order.getOrderStatus())) {
|
||||||
// 其它状态用update_time判断超时 30min超时 4h扣款
|
// 其它状态用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));
|
executor.execute(() -> orderTimeout(order, true));
|
||||||
} else if (order.getUpdateTime().before(halfHour)) {
|
} else if (fourOverTimeSec < System.currentTimeMillis()) {
|
||||||
executor.execute(() -> orderTimeout(order, false));
|
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