diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/activity/service/ShopActivityCutpriceService.java b/mall-shop/src/main/java/com/suisung/mall/shop/activity/service/ShopActivityCutpriceService.java index 8956404d..30a64a88 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/activity/service/ShopActivityCutpriceService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/activity/service/ShopActivityCutpriceService.java @@ -50,11 +50,19 @@ public interface ShopActivityCutpriceService extends IBaseService queryWrapper = new QueryWrapper<>(); queryWrapper.eq("user_id", user_id).eq("ac_id", ac_id); @@ -522,6 +524,11 @@ public class ShopActivityCutpriceServiceImpl extends BaseServiceImpl updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("ac_id", ac_id); - updateWrapper.set("state", state); + // 根据 ac_id 或 activity_id 条件更新状态,避免重复更新相同状态 + if (ac_id != null && ac_id > 0) { + updateWrapper.eq("ac_id", ac_id); + } + if (activity_id != null && activity_id > 0) { + updateWrapper.eq("activity_id", activity_id); + } + updateWrapper.ne("state", state).set("state", state); return update(updateWrapper); } catch (Exception e) { - log.error("更新砍价订单状态失败,ac_id={}, state={}", ac_id, state, e); - throw new ApiException(I18nUtil._("更新砍价订单状态失败")); + log.error("更新砍价订单状态失败,ac_id={}, activity_id={}, state={}", ac_id, activity_id, state, e); + return false; } } + /** + * 砍价活动结束后,定时修改砍价订单状态 定时任务(包括多个状态业务变更) + *

+ * 砍价订单状态:1-砍价已完成下单;2-砍价未下单已取消;3-砍价助力进行中;4-砍价过期失效;6-砍价助力已完成待下单; + *

+ * 1、某个砍价订单未超时情况下,更改(3-砍价助力进行中,砍到最低价时)的状态为 (6-砍价助力已完成待下单) + * 2、某个砍价订单超时的情况下,定时更改(3-砍价助力进行中)的状态为 (4-砍价过期失效) + * 3、砍价活动结束后,定时更改(3-砍价助力进行中和6-砍价助力已完成待下单)的状态为 (4-砍价过期失效和2-砍价未下单已取消;) + * + * @return 成功更新的操作次数 + */ + @Override + public Integer autoUpdateCutPriceStateJob() { + int successCount = 0; + log.info("开始执行砍价订单状态定时更新任务"); + try { + // 1、某个砍价订单未超时情况下,更改(3-砍价助力进行中,砍到最低价时)的状态为 (6-砍价助力已完成待下单) + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("state", CommonConstant.CutPrice_Order_State_ING) + .ge("expired_at", System.currentTimeMillis()) + .apply("ac_sale_price <= ac_mix_limit_price") + .set("state", CommonConstant.CutPrice_Order_State_CutFinished); + + log.debug("准备执行更新操作1:将状态3且未过期且达到最低价的砍价订单更新为状态6"); + if (update(updateWrapper)) { + log.info("成功更新砍价订单状态为【砍价助力已完成待下单】,条件:state={}, ac_sale_price<=ac_mix_limit_price", + CommonConstant.CutPrice_Order_State_ING); + successCount++; + } else { + log.debug("更新操作1未匹配到任何记录"); + } + + // 2、某个砍价订单超时的情况下,定时更改(3-砍价助力进行中)的状态为 (4-砍价过期失效) + updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("state", CommonConstant.CutPrice_Order_State_ING) + .lt("expired_at", System.currentTimeMillis()) + .set("state", CommonConstant.CutPrice_Order_State_Expired); + + log.debug("准备执行更新操作2:将状态3且已过期的砍价订单更新为状态4"); + if (update(updateWrapper)) { + log.info("成功更新砍价订单状态为【砍价过期失效】,条件:state={}, expired_at<{}", + CommonConstant.CutPrice_Order_State_ING, System.currentTimeMillis()); + successCount++; + } else { + log.debug("更新操作2未匹配到任何记录"); + } + + // 3、砍价活动结束后,定时更改(3-砍价助力进行中和6-砍价助力已完成待下单)的状态为 (4-砍价过期失效和2-砍价未下单已取消;) + // 处理状态3(砍价助力进行中) -> 状态4(砍价过期失效) + updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("state", CommonConstant.CutPrice_Order_State_ING) + .exists("SELECT 1 FROM shop_store_activity_base WHERE shop_store_activity_base.activity_id = shop_activity_cutprice.activity_id AND shop_store_activity_base.activity_endtime < NOW()") + .set("state", CommonConstant.CutPrice_Order_State_Expired); + + log.debug("准备执行更新操作3:将状态3且活动已结束的砍价订单更新为状态4"); + if (update(updateWrapper)) { + log.info("成功更新砍价订单状态为【砍价过期失效】,条件:state={}, activity_endtime 状态2(砍价未下单已取消) + updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("state", CommonConstant.CutPrice_Order_State_CutFinished) + .exists("SELECT 1 FROM shop_store_activity_base WHERE shop_store_activity_base.activity_id = shop_activity_cutprice.activity_id AND shop_store_activity_base.activity_endtime < NOW()") + .set("state", CommonConstant.CutPrice_Order_State_Canceled); + + log.debug("准备执行更新操作4:将状态6且活动已结束的砍价订单更新为状态2"); + if (update(updateWrapper)) { + log.info("成功更新砍价订单状态为【砍价未下单已取消】,条件:state={}, activity_endtime