fix: 计算超时时,不能一味的按照+13h来算,而是应该按照从早上8点开始计算
This commit is contained in:
parent
5c54c87ea3
commit
0975f12e39
|
|
@ -72,22 +72,35 @@ public class OrderServiceImpl implements OrderService {
|
||||||
List<OrderMaster> orderMasters = orderMasterService.selectByStatus(orderMasterTimeoutStatus);
|
List<OrderMaster> orderMasters = orderMasterService.selectByStatus(orderMasterTimeoutStatus);
|
||||||
log.info("扫描到{}条未完成的主订单", orderMasters.size());
|
log.info("扫描到{}条未完成的主订单", orderMasters.size());
|
||||||
for (OrderMaster orderMaster : orderMasters) {
|
for (OrderMaster orderMaster : orderMasters) {
|
||||||
executor.execute(() -> checkTimeout(orderMaster));
|
try {
|
||||||
|
checkTimeout(orderMaster);
|
||||||
|
}catch (Exception e){
|
||||||
|
log.error("主单超时定时任务执行:单号:{},错误原因:{}", orderMaster.getCode(), e.getMessage());
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询符合超时的子单
|
// 查询符合超时的子单
|
||||||
List<OrderDetail> orders = orderDetailService.selectByStatus(timeoutOrderStatus);
|
List<OrderDetail> orders = orderDetailService.selectByStatus(timeoutOrderStatus);
|
||||||
log.info("扫描到{}条未完成的子订单", orders.size());
|
log.info("扫描到{}条未完成的子订单", orders.size());
|
||||||
for (OrderDetail order : orders) {
|
for (OrderDetail order : orders) {
|
||||||
executor.execute(() -> checkTimeout(order));
|
try {
|
||||||
|
checkTimeout(order);
|
||||||
|
}catch (Exception e){
|
||||||
|
log.error("子单超时定时任务执行:单号:{},错误原因:{}", order.getCode(), e.getMessage());
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
// @Transactional(rollbackFor = Exception.class)
|
||||||
public void checkTimeout(OrderMaster order) {
|
public void checkTimeout(OrderMaster order) {
|
||||||
|
log.info("主单超时开始:单号:{}, 内容:{}", order.getCode(), order);
|
||||||
Date now = new Date();
|
Date now = new Date();
|
||||||
// 待接单状态的超时逻辑
|
// 待接单状态的超时逻辑
|
||||||
if (ZERO.equals(order.getOrderStatus())) {
|
if (ZERO.equals(order.getOrderStatus())) {
|
||||||
|
log.info("单号:{},状态:{},创建时间:{},更新时间:{}", order.getCode(), order.getOrderStatus(), order.getCreateTime(), order.getUpdateTime());
|
||||||
Date createTime = order.getCreateTime();
|
Date createTime = order.getCreateTime();
|
||||||
Date overTime30min = getOverTime(createTime, 30 * 60 * 1000);
|
Date overTime30min = getOverTime(createTime, 30 * 60 * 1000);
|
||||||
Date overTime1h = getOverTime(createTime, 30 * 60 * 1000);
|
Date overTime1h = getOverTime(createTime, 30 * 60 * 1000);
|
||||||
|
|
@ -96,6 +109,7 @@ public class OrderServiceImpl implements OrderService {
|
||||||
flag = getOverTime(order.getUpdateTime(), 45 * 60 * 1000).before(now);
|
flag = getOverTime(order.getUpdateTime(), 45 * 60 * 1000).before(now);
|
||||||
}else {
|
}else {
|
||||||
flag = getOverTime(createTime, 45 * 60 * 1000).before(now);
|
flag = getOverTime(createTime, 45 * 60 * 1000).before(now);
|
||||||
|
log.info("判断时间:{},当前时间:{},结果:{}", getOverTime(createTime, 45 * 60 * 1000), now, flag);
|
||||||
}
|
}
|
||||||
// 是否已经超时
|
// 是否已经超时
|
||||||
boolean timeout = ONE.equals(order.getTimeout());
|
boolean timeout = ONE.equals(order.getTimeout());
|
||||||
|
|
@ -118,6 +132,7 @@ public class OrderServiceImpl implements OrderService {
|
||||||
|
|
||||||
// 未派单状态的超时逻辑
|
// 未派单状态的超时逻辑
|
||||||
if (ONE.equals(order.getOrderStatus())) {
|
if (ONE.equals(order.getOrderStatus())) {
|
||||||
|
log.info("单号:{},状态:{},创建时间:{},更新时间:{}", order.getCode(), order.getOrderStatus(), order.getCreateTime(), order.getUpdateTime());
|
||||||
Date updateTime = order.getUpdateTime();
|
Date updateTime = order.getUpdateTime();
|
||||||
Date overTime30min = getOverTime(updateTime, 30 * 60 * 1000);
|
Date overTime30min = getOverTime(updateTime, 30 * 60 * 1000);
|
||||||
Date overTime4h = getOverTime(updateTime, 4 * 60 * 60 * 1000);
|
Date overTime4h = getOverTime(updateTime, 4 * 60 * 60 * 1000);
|
||||||
|
|
@ -164,14 +179,16 @@ public class OrderServiceImpl implements OrderService {
|
||||||
*
|
*
|
||||||
* @param order 订单信息
|
* @param order 订单信息
|
||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
// @Transactional(rollbackFor = Exception.class)
|
||||||
public void checkTimeout(OrderDetail order) {
|
public void checkTimeout(OrderDetail order) {
|
||||||
|
log.info("子单超时开始:单号:{}, 内容:{}", order.getCode(), order);
|
||||||
Date now = new Date();
|
Date now = new Date();
|
||||||
// 是否超时
|
// 是否超时
|
||||||
boolean timeout = ONE.equals(order.getTimeout());
|
boolean timeout = ONE.equals(order.getTimeout());
|
||||||
// 超时扣款次数
|
// 超时扣款次数
|
||||||
Integer times = order.getTimeoutFineTimes();
|
Integer times = order.getTimeoutFineTimes();
|
||||||
if (!timeout) {
|
if (!timeout) {
|
||||||
|
log.info("单号:{},状态:{},创建时间:{},更新时间:{}", order.getCode(), order.getOrderStatus(), order.getCreateTime(), order.getUpdateTime());
|
||||||
// 待上门超时
|
// 待上门超时
|
||||||
if(order.getOrderStatus().equals(OrderStatus.GOING.code())){
|
if(order.getOrderStatus().equals(OrderStatus.GOING.code())){
|
||||||
// 服务中状态要按预计上门时间计算4h超时
|
// 服务中状态要按预计上门时间计算4h超时
|
||||||
|
|
@ -291,16 +308,21 @@ public class OrderServiceImpl implements OrderService {
|
||||||
* @return 超时时间
|
* @return 超时时间
|
||||||
*/
|
*/
|
||||||
private Date getOverTime(Date orderTime, int time) {
|
private Date getOverTime(Date orderTime, int time) {
|
||||||
Date date = DateUtils.addMilliseconds(orderTime, time);
|
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = Calendar.getInstance();
|
||||||
calendar.setTime(date);
|
calendar.setTime(orderTime);
|
||||||
int hour = calendar.get(Calendar.HOUR_OF_DAY);
|
int hour = calendar.get(Calendar.HOUR_OF_DAY);
|
||||||
if (hour < 8 || hour > 18) {
|
if(hour < 8 || hour > 18){
|
||||||
// 超过19点的单,需要加上13个小时
|
// 设置时间为今天的 8 点
|
||||||
return DateUtils.addHours(date, 13);
|
Calendar newCalendar = Calendar.getInstance();
|
||||||
} else {
|
newCalendar.set(Calendar.HOUR_OF_DAY, 8);
|
||||||
return date;
|
newCalendar.set(Calendar.MINUTE, 0);
|
||||||
|
newCalendar.set(Calendar.SECOND, 0);
|
||||||
|
newCalendar.set(Calendar.MILLISECOND, 0);
|
||||||
|
|
||||||
|
// 获取早上 8 点的 Date 对象
|
||||||
|
orderTime = newCalendar.getTime();
|
||||||
}
|
}
|
||||||
|
return DateUtils.addMilliseconds(orderTime, time);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue