From 4f907c00decb0465cd817aa893d13c00eeda4c6e Mon Sep 17 00:00:00 2001 From: Junling Bu Date: Thu, 11 Apr 2019 23:04:39 +0800 Subject: [PATCH] =?UTF-8?q?fix[litemall-admin-api]:=20=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=9A=84=E6=97=B6=E9=97=B4=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E8=B5=B7=E4=BD=9C=E7=94=A8=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../litemall/admin/job/CouponJob.java | 2 + .../litemall/admin/job/OrderJob.java | 47 ++++++------------- .../litemall/core/system/SystemConfig.java | 19 +++++--- .../db/service/LitemallOrderService.java | 18 ++++--- 4 files changed, 40 insertions(+), 46 deletions(-) diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/job/CouponJob.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/job/CouponJob.java index bc7c4f7f..447b8ea2 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/job/CouponJob.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/job/CouponJob.java @@ -27,6 +27,8 @@ public class CouponJob { /** * 每隔一个小时检查 + * TODO + * 注意,因为是相隔一个小时检查,因此导致优惠券真正超时时间可能比设定时间延迟1个小时 */ @Scheduled(fixedDelay = 60 * 60 * 1000) public void checkCouponExpired() { diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/job/OrderJob.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/job/OrderJob.java index 30f7b01a..a29536ee 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/job/OrderJob.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/job/OrderJob.java @@ -2,6 +2,7 @@ package org.linlinjava.litemall.admin.job; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.linlinjava.litemall.core.system.SystemConfig; import org.linlinjava.litemall.db.domain.LitemallGoodsProduct; import org.linlinjava.litemall.db.domain.LitemallOrder; import org.linlinjava.litemall.db.domain.LitemallOrderGoods; @@ -34,27 +35,19 @@ public class OrderJob { /** * 自动取消订单 *

- * 定时检查订单未付款情况,如果超时半个小时则自动取消订单 + * 定时检查订单未付款情况,如果超时 LITEMALL_ORDER_UNPAID 分钟则自动取消订单 * 定时时间是每次相隔半个小时。 *

- * 注意,因为是相隔半小时检查,因此导致有订单是超时一个小时以后才设置取消状态。 * TODO - * 这里可以进一步地配合用户订单查询时订单未付款检查,如果订单超时半小时则取消。 + * 注意,因为是相隔半小时检查,因此导致订单真正超时时间是 [LITEMALL_ORDER_UNPAID, 30 + LITEMALL_ORDER_UNPAID] */ @Scheduled(fixedDelay = 30 * 60 * 1000) @Transactional public void checkOrderUnpaid() { logger.info("系统开启任务检查订单是否已经超期自动取消订单"); - List orderList = orderService.queryUnpaid(); + List orderList = orderService.queryUnpaid(SystemConfig.getOrderUnpaid()); for (LitemallOrder order : orderList) { - LocalDateTime add = order.getAddTime(); - LocalDateTime now = LocalDateTime.now(); - LocalDateTime expired = add.plusMinutes(30); - if (expired.isAfter(now)) { - continue; - } - // 设置订单已取消状态 order.setOrderStatus(OrderUtil.STATUS_AUTO_CANCEL); order.setEndTime(LocalDateTime.now()); @@ -67,7 +60,6 @@ public class OrderJob { List orderGoodsList = orderGoodsService.queryByOid(orderId); for (LitemallOrderGoods orderGoods : orderGoodsList) { Integer productId = orderGoods.getProductId(); - LitemallGoodsProduct product = productService.findById(productId); Short number = orderGoods.getNumber(); if (productService.addStock(productId, number) == 0) { throw new RuntimeException("商品货品库存增加失败"); @@ -80,30 +72,22 @@ public class OrderJob { /** * 自动确认订单 *

- * 定时检查订单未确认情况,如果超时七天则自动确认订单 + * 定时检查订单未确认情况,如果超时 LITEMALL_ORDER_UNCONFIRM 天则自动确认订单 * 定时时间是每天凌晨3点。 *

- * 注意,因为是相隔一天检查,因此导致有订单是超时八天以后才设置自动确认。 - * 这里可以进一步地配合用户订单查询时订单未确认检查,如果订单超时7天则自动确认。 - * 但是,这里可能不是非常必要。相比订单未付款检查中存在商品资源有限所以应该 - * 早点清理未付款情况,这里八天再确认是可以的。。 + * TODO + * 注意,因为是相隔一天检查,因此导致订单真正超时时间是 [LITEMALL_ORDER_UNCONFIRM, 1 + LITEMALL_ORDER_UNCONFIRM] */ @Scheduled(cron = "0 0 3 * * ?") public void checkOrderUnconfirm() { logger.info("系统开启任务检查订单是否已经超期自动确认收货"); - List orderList = orderService.queryUnconfirm(); + List orderList = orderService.queryUnconfirm(SystemConfig.getOrderUnconfirm()); for (LitemallOrder order : orderList) { - LocalDateTime ship = order.getShipTime(); - LocalDateTime now = LocalDateTime.now(); - LocalDateTime expired = ship.plusDays(7); - if (expired.isAfter(now)) { - continue; - } // 设置订单已取消状态 order.setOrderStatus(OrderUtil.STATUS_AUTO_CONFIRM); - order.setConfirmTime(now); + order.setConfirmTime(LocalDateTime.now()); if (orderService.updateWithOptimisticLocker(order) == 0) { logger.info("订单 ID=" + order.getId() + " 数据已经更新,放弃自动确认收货"); } else { @@ -115,22 +99,19 @@ public class OrderJob { /** * 可评价订单商品超期 *

- * 定时检查订单商品评价情况,如果确认商品超时七天则取消可评价状态 + * 定时检查订单商品评价情况,如果确认商品超时 LITEMALL_ORDER_COMMENT 天则取消可评价状态 * 定时时间是每天凌晨4点。 + *

+ * TODO + * 注意,因为是相隔一天检查,因此导致订单真正超时时间是 [LITEMALL_ORDER_COMMENT, 1 + LITEMALL_ORDER_COMMENT] */ @Scheduled(cron = "0 0 4 * * ?") public void checkOrderComment() { logger.info("系统开启任务检查订单是否已经超期未评价"); LocalDateTime now = LocalDateTime.now(); - List orderList = orderService.queryComment(); + List orderList = orderService.queryComment(SystemConfig.getOrderComment()); for (LitemallOrder order : orderList) { - LocalDateTime confirm = order.getConfirmTime(); - LocalDateTime expired = confirm.plusDays(7); - if (expired.isAfter(now)) { - continue; - } - order.setComments((short) 0); orderService.updateWithOptimisticLocker(order); diff --git a/litemall-core/src/main/java/org/linlinjava/litemall/core/system/SystemConfig.java b/litemall-core/src/main/java/org/linlinjava/litemall/core/system/SystemConfig.java index 3536fdab..6f96ff3f 100644 --- a/litemall-core/src/main/java/org/linlinjava/litemall/core/system/SystemConfig.java +++ b/litemall-core/src/main/java/org/linlinjava/litemall/core/system/SystemConfig.java @@ -1,14 +1,7 @@ package org.linlinjava.litemall.core.system; -import org.linlinjava.litemall.db.domain.LitemallSystem; -import org.linlinjava.litemall.db.service.LitemallSystemConfigService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; import java.math.BigDecimal; import java.util.HashMap; -import java.util.List; import java.util.Map; /** @@ -91,6 +84,18 @@ public class SystemConfig { return getConfigBigDec(LITEMALL_EXPRESS_FREIGHT_MIN); } + public static Integer getOrderUnpaid() { + return getConfigInt(LITEMALL_ORDER_UNPAID); + } + + public static Integer getOrderUnconfirm() { + return getConfigInt(LITEMALL_ORDER_UNCONFIRM); + } + + public static Integer getOrderComment() { + return getConfigInt(LITEMALL_ORDER_COMMENT); + } + public static String getMallName() { return getConfig(LITEMALL_MALL_NAME); } diff --git a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallOrderService.java b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallOrderService.java index 34b70b41..466de49f 100644 --- a/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallOrderService.java +++ b/litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallOrderService.java @@ -121,15 +121,19 @@ public class LitemallOrderService { return (int) litemallOrderMapper.countByExample(example); } - public List queryUnpaid() { + public List queryUnpaid(int minutes) { + LocalDateTime now = LocalDateTime.now(); + LocalDateTime expired = now.minusMinutes(minutes); LitemallOrderExample example = new LitemallOrderExample(); - example.or().andOrderStatusEqualTo(OrderUtil.STATUS_CREATE).andDeletedEqualTo(false); + example.or().andOrderStatusEqualTo(OrderUtil.STATUS_CREATE).andAddTimeLessThan(expired).andDeletedEqualTo(false); return litemallOrderMapper.selectByExample(example); } - public List queryUnconfirm() { + public List queryUnconfirm(int days) { + LocalDateTime now = LocalDateTime.now(); + LocalDateTime expired = now.minusDays(days); LitemallOrderExample example = new LitemallOrderExample(); - example.or().andOrderStatusEqualTo(OrderUtil.STATUS_SHIP).andShipTimeIsNotNull().andDeletedEqualTo(false); + example.or().andOrderStatusEqualTo(OrderUtil.STATUS_SHIP).andShipTimeLessThan(expired).andDeletedEqualTo(false); return litemallOrderMapper.selectByExample(example); } @@ -171,9 +175,11 @@ public class LitemallOrderService { } - public List queryComment() { + public List queryComment(int days) { + LocalDateTime now = LocalDateTime.now(); + LocalDateTime expired = now.minusDays(days); LitemallOrderExample example = new LitemallOrderExample(); - example.or().andCommentsGreaterThan((short) 0).andDeletedEqualTo(false); + example.or().andCommentsGreaterThan((short) 0).andConfirmTimeLessThan(expired).andDeletedEqualTo(false); return litemallOrderMapper.selectByExample(example); } }