Browse Source

修复订单取消/退款之后优惠券没有返还问题 (#397)

Tyson 5 years ago
parent
commit
a2f77152d8

+ 13 - 4
litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/service/AdminOrderService.java

@@ -10,11 +10,9 @@ import org.linlinjava.litemall.core.notify.NotifyService;
 import org.linlinjava.litemall.core.notify.NotifyType;
 import org.linlinjava.litemall.core.util.JacksonUtil;
 import org.linlinjava.litemall.core.util.ResponseUtil;
-import org.linlinjava.litemall.db.domain.LitemallComment;
-import org.linlinjava.litemall.db.domain.LitemallOrder;
-import org.linlinjava.litemall.db.domain.LitemallOrderGoods;
-import org.linlinjava.litemall.db.domain.UserVo;
+import org.linlinjava.litemall.db.domain.*;
 import org.linlinjava.litemall.db.service.*;
+import org.linlinjava.litemall.db.util.CouponUserConstant;
 import org.linlinjava.litemall.db.util.OrderUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -50,6 +48,8 @@ public class AdminOrderService {
     private NotifyService notifyService;
     @Autowired
     private LogHelper logHelper;
+    @Autowired
+    private LitemallCouponUserService couponUserService;
 
     public Object list(Integer userId, String orderSn, LocalDateTime start, LocalDateTime end, List<Short> orderStatusArray,
                        Integer page, Integer limit, String sort, String order) {
@@ -159,6 +159,15 @@ public class AdminOrderService {
             }
         }
 
+        // 返还优惠券
+        List<LitemallCouponUser> couponUsers = couponUserService.findByOid(orderId);
+        for (LitemallCouponUser couponUser: couponUsers) {
+            // 优惠券状态设置为可使用
+            couponUser.setStatus(CouponUserConstant.STATUS_USABLE);
+            couponUser.setUpdateTime(LocalDateTime.now());
+            couponUserService.update(couponUser);
+        }
+
         //TODO 发送邮件和短信通知,这里采用异步发送
         // 退款成功通知用户, 例如“您申请的订单退款 [ 单号:{1} ] 已成功,请耐心等待到账。”
         // 注意订单号只发后6位

+ 6 - 0
litemall-db/src/main/java/org/linlinjava/litemall/db/service/LitemallCouponUserService.java

@@ -91,4 +91,10 @@ public class LitemallCouponUserService {
         example.or().andStatusEqualTo(CouponUserConstant.STATUS_USABLE).andEndTimeLessThan(LocalDateTime.now()).andDeletedEqualTo(false);
         return couponUserMapper.selectByExample(example);
     }
+
+    public List<LitemallCouponUser> findByOid(Integer orderId) {
+        LitemallCouponUserExample example = new LitemallCouponUserExample();
+        example.or().andOrderIdEqualTo(orderId).andDeletedEqualTo(false);
+        return couponUserMapper.selectByExample(example);
+    }
 }

+ 20 - 0
litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java

@@ -534,6 +534,9 @@ public class WxOrderService {
             }
         }
 
+        // 返还优惠券
+        releaseCoupon(orderId);
+
         return ResponseUtil.ok();
     }
 
@@ -1013,4 +1016,21 @@ public class WxOrderService {
         return ResponseUtil.ok();
     }
 
+    /**
+     * 取消订单/退款返还优惠券
+     * <br/>
+     * @param orderId
+     * @return void
+     * @author Tyson
+     * @date 2020/6/8/0008 1:41
+     */
+    public void releaseCoupon(Integer orderId) {
+        List<LitemallCouponUser> couponUsers = couponUserService.findByOid(orderId);
+        for (LitemallCouponUser couponUser: couponUsers) {
+            // 优惠券状态设置为可使用
+            couponUser.setStatus(CouponUserConstant.STATUS_USABLE);
+            couponUser.setUpdateTime(LocalDateTime.now());
+            couponUserService.update(couponUser);
+        }
+    }
 }

+ 6 - 0
litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/task/OrderUnpaidTask.java

@@ -11,6 +11,7 @@ import org.linlinjava.litemall.db.service.LitemallGoodsProductService;
 import org.linlinjava.litemall.db.service.LitemallOrderGoodsService;
 import org.linlinjava.litemall.db.service.LitemallOrderService;
 import org.linlinjava.litemall.db.util.OrderUtil;
+import org.linlinjava.litemall.wx.service.WxOrderService;
 
 import java.time.LocalDateTime;
 import java.util.List;
@@ -36,6 +37,7 @@ public class OrderUnpaidTask extends Task {
         LitemallOrderService orderService = BeanUtil.getBean(LitemallOrderService.class);
         LitemallOrderGoodsService orderGoodsService = BeanUtil.getBean(LitemallOrderGoodsService.class);
         LitemallGoodsProductService productService = BeanUtil.getBean(LitemallGoodsProductService.class);
+        WxOrderService wxOrderService = BeanUtil.getBean(WxOrderService.class);
 
         LitemallOrder order = orderService.findById(this.orderId);
         if(order == null){
@@ -62,6 +64,10 @@ public class OrderUnpaidTask extends Task {
                 throw new RuntimeException("商品货品库存增加失败");
             }
         }
+
+        //返还优惠券
+        wxOrderService.releaseCoupon(orderId);
+
         logger.info("系统结束处理延时任务---订单超时未付款---" + this.orderId);
     }
 }