时间判断。

This commit is contained in:
kuang.yife 2023-05-04 11:02:49 +08:00
parent 83754b9d2c
commit cd21ae9d17
2 changed files with 60 additions and 14 deletions

View File

@ -3,7 +3,7 @@ package com.ghy.quartz.service;
public interface OrderService {
// 更新超时环境订单
void overTimeOrder(String orderStatus);
void overTimeOrder(String orderStatus) throws Exception;
// 自动完成和分账
void autoFinishOrder();

View File

@ -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;
}
}
/**
* 处理订单超时与扣款
*