Pārlūkot izejas kodu

update: 增加退回未支付订单积分功能。

Ben 11 mēneši atpakaļ
vecāks
revīzija
280d221746

+ 3 - 1
feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/CaclEnum.java

@@ -15,9 +15,11 @@ public enum CaclEnum {
     SMALL_QUOTA_CRASH(7, "小区额度分配"),
     AFTER_CRASH_CALC_PT_TOTAL_QUOTA(8, "碰撞后计算平台总收益"),
     ORDER_PAY_INTEGRAL(9,"购物使用积分"),//支付了一部分积分作购物用
-    ORDER_REFUND_INTEGRAL(10,"订单退款,积分退回"),
+    ORDER_REFUND_INTEGRAL(10,"订单退款,积分退回"),//订单已支付,用户退款申请通过,则退回商品项使用的积分
     ORDER_INTEGRAL_UNFREEZE(11,"订单积分到账"),//购物收货7天后,冻结积分变为可用积分
     ORDER_GET_FREEZE_INTEGRAL(12,"购物返积分"),//购物获得冻结积分
+    ORDER_CANCEL_BY_USER_REFUND_INTEGRAL(13,"取消订单,退回积分"),//用户手动取消未支付订单,退回购物使用的积分
+    ORDER_CANCEL_BY_SYSTEM_REFUND_INTEGRAL(14,"订单超时未支付,退回积分")//订单超时未支付,退回购物使用的积分
     ;
 
     /**

+ 1 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/ptprofit/PtProfitMapper.java

@@ -31,7 +31,7 @@ public interface PtProfitMapper extends BaseMapperX<PtProfitDO> {
                 .orderByDesc(PtProfitDO::getId));
     }
 
-    @Update("UPDATE distri_integral SET current_quota = current_quota + #{amount},freeze_quota = freeze_quota + #{freeze_mount} WHERE (current_quota + #{amount2})>0 and user_id=#{userId} and (freeze_quota + #{freeze_mount2})>0 ")
+    @Update("UPDATE distri_integral SET current_quota = current_quota + #{amount},freeze_quota = freeze_quota + #{freeze_mount} WHERE (current_quota + #{amount2})>=0 and user_id=#{userId} and (freeze_quota + #{freeze_mount2})>=0 ")
     int updateUserIntegral(@Param("amount") int amount,
                            @Param("amount2") int amount2,
                            @Param("freeze_mount") int freezeAmount,

+ 2 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralService.java

@@ -67,10 +67,11 @@ public interface IntegralService {
      * @param userId 要修改积分的用户
      * @param caclEnum 导致积分变化的事件类型枚举
      * @param amount 用户积分变化金额,可为负数
+     * @param freezeAmount 用户冻结积分变化金额,可为负数
      * @return 返回是否执行成功。执行失败,通常是就是用户积分不足,没积分抵扣
      */
     Boolean updateUserIntegral(Long userId, CaclEnum caclEnum, Integer amount, Integer freezeAmount,
                                Long tradeOrderId,
-                               String OrderNum
+                               String orderNum
                                );
 }

+ 32 - 3
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderUpdateServiceImpl.java

@@ -800,7 +800,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
     public void updateOrderPaid(Long id1, Long payOrderId) {
 
 
-        System.out.println("#########updateOrderPaid####payOrderId:"+payOrderId);
+//        System.out.println("#########updateOrderPaid####payOrderId:"+payOrderId);
 
         //add by Ben 根据支付订单id,查询所有 支付订单 对应的 订单
         List<TradeOrderDO> TradeOrderDOList = tradeOrderMapper.selectList("pay_order_id", payOrderId);
@@ -809,7 +809,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 
             Long tradeOrderId = tradeOrderDO.getId();
 
-            System.out.println("#########updateOrderPaid####tradeOrderId:"+tradeOrderId);
+//            System.out.println("#########updateOrderPaid####tradeOrderId:"+tradeOrderId);
 
             // 1. 校验并获得交易订单(可支付)
             KeyValue<TradeOrderDO, PayOrderRespDTO> orderResult = validateOrderPayable(tradeOrderId, payOrderId);
@@ -822,7 +822,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                     new TradeOrderDO().setStatus(TradeOrderStatusEnum.UNDELIVERED.getStatus()).setPayStatus(true)
                             .setPayTime(LocalDateTime.now()).setPayChannelCode(payOrder.getChannelCode()));
 
-            System.out.println("#########updateOrderPaid####updateCount:"+updateCount);
+//            System.out.println("#########updateOrderPaid####updateCount:"+updateCount);
 
             if (updateCount == 0) {
                 throw exception(ORDER_UPDATE_PAID_STATUS_NOT_UNPAID);
@@ -1084,6 +1084,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         return order;
     }
 
+    /**
+     * 用户手动取消订单
+     * @param userId 用户编号
+     * @param id     订单编号
+     */
     @Override
     @Transactional(rollbackFor = Exception.class)
     @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_CANCEL)
@@ -1100,8 +1105,21 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 
         // 2. 取消订单
         cancelOrder0(order, TradeOrderCancelTypeEnum.MEMBER_CANCEL);
+
+        //3.退回订单已支付的积分 add by Ben
+        Integer payIntegral = order.getPayIntegral();//每个订单使用的积分
+        Long tradeOrderId = order.getId();
+        String orderNum = order.getNo();
+        //如果订单有使用积分,则退回积分
+        if(payIntegral>0) {
+            integralService.updateUserIntegral(userId, CaclEnum.ORDER_CANCEL_BY_USER_REFUND_INTEGRAL, payIntegral, 0, tradeOrderId, orderNum);
+        }
     }
 
+    /**
+     * 订单超时未支付,自动取消
+     * @return
+     */
     @Override
     public int cancelOrderBySystem() {
         // 1. 查询过期的待支付订单
@@ -1117,6 +1135,17 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         for (TradeOrderDO order : orders) {
             try {
                 getSelf().cancelOrderBySystem(order);
+
+                //退回订单已支付的积分 add by Ben
+                Integer payIntegral = order.getPayIntegral();//每个订单使用的积分
+                Long tradeOrderId = order.getId();
+                String orderNum = order.getNo();
+                Long userId = order.getUserId();
+                //如果订单有使用积分,则退回积分
+                if(payIntegral>0) {
+                    integralService.updateUserIntegral(userId, CaclEnum.ORDER_CANCEL_BY_SYSTEM_REFUND_INTEGRAL, payIntegral, 0, tradeOrderId, orderNum);
+                }
+
                 count++;
             } catch (Throwable e) {
                 log.error("[cancelOrderBySystem][order({}) 过期订单异常]", order.getId(), e);