瀏覽代碼

Merge branch 'dev/2024/0624/update-admin-Y' of feifan/mall-backend-admin into master

修改超时订单未退回积分
Yangzw 8 月之前
父節點
當前提交
8492f1b16f
共有 13 個文件被更改,包括 130 次插入12 次删除
  1. 7 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/IntegralController.java
  2. 2 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralPageReqVO.java
  3. 4 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralRespVO.java
  4. 3 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralSaveReqVO.java
  5. 4 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/integral/IntegralDO.java
  6. 15 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralService.java
  7. 35 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralServiceImpl.java
  8. 4 3
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ordercalc/OrderCalcServiceImpl.java
  9. 9 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptprofitlog/PtProfitLogService.java
  10. 22 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptprofitlog/PtProfitLogServiceImpl.java
  11. 7 7
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/admin/order/TradeOrderController.java
  12. 11 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderUpdateServiceImpl.java
  13. 7 1
      sql/mysql/建空库SQL/13_20240617.sql

+ 7 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/IntegralController.java

@@ -92,4 +92,11 @@ public class IntegralController {
                         BeanUtils.toBean(list, IntegralRespVO.class));
     }
 
+    @GetMapping("/initializeIntegralHighQuotaTotal")
+    @Operation(summary = "初始化累计积分峰值")
+    @PreAuthorize("@ss.hasPermission('distri:integral:initializeIntegralHighQuotaTotal')")
+    public CommonResult<String> initializeIntegralHighQuotaTotal() {
+        integralService.initializeIntegralHighQuotaTotal();
+        return success("success");
+    }
 }

+ 2 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralPageReqVO.java

@@ -45,5 +45,6 @@ public class IntegralPageReqVO extends PageParam {
     @Schema(description = "最高可获取积分")
     private Long highQuota;
 
-
+    @Schema(description = "累计获取的峰值")
+    private Long highQuotaTotal;
 }

+ 4 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralRespVO.java

@@ -53,4 +53,8 @@ public class IntegralRespVO {
     @Schema(description = "最高可获取积分", requiredMode = Schema.RequiredMode.REQUIRED)
     @ExcelProperty("最高可获取积分")
     private Long highQuota;
+
+    @Schema(description = "累计获取的峰值")
+    @ExcelProperty("累计获取的峰值")
+    private Long highQuotaTotal;
 }

+ 3 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralSaveReqVO.java

@@ -46,4 +46,7 @@ public class IntegralSaveReqVO {
 
     @Schema(description = "冻结的最高可获取积分", requiredMode = Schema.RequiredMode.REQUIRED)
     private Long freezeHighQuota;
+
+    @Schema(description = "累计获取的峰值")
+    private Long highQuotaTotal;
 }

+ 4 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/integral/IntegralDO.java

@@ -64,4 +64,8 @@ public class IntegralDO extends BaseDO {
      * 冻结的最高可获取积分
      */
     private Long freezeHighQuota;
+    /**
+     * 累计获取的峰值
+     */
+    private Long highQuotaTotal;
 }

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

@@ -95,4 +95,19 @@ public interface IntegralService {
      * @param payTime
      */
     void updateIntegralFreezeHighQuota(Long generateUserId, Long userId, CaclEnum caclEnum, Long totalFreezeHighQuota, Long tradeOrderId, String orderNum, LocalDateTime payTime);
+
+    /**
+     * 初始化累计积分峰值
+     */
+    void initializeIntegralHighQuotaTotal();
+
+    /**
+     * 修改用户积分
+     * @param userId 用户ID
+     * @param caclEnum 变化类型
+     * @param payIntegral 变化积分
+     * @param tradeOrderId 订单ID
+     * @param orderNum 订单号
+     */
+    void updateUserIntegral(Long userId, CaclEnum caclEnum, Long payIntegral, Long tradeOrderId, String orderNum);
 }

+ 35 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralServiceImpl.java

@@ -4,6 +4,7 @@ import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.newfeifan.mall.module.distri.dal.dataobject.ptprofitlog.PtProfitLogDO;
 import cn.newfeifan.mall.module.distri.dal.mysql.ptprofitlog.PtProfitLogMapper;
 import cn.newfeifan.mall.module.distri.enums.CaclEnum;
+import cn.newfeifan.mall.module.distri.service.ptprofitlog.PtProfitLogService;
 import cn.newfeifan.mall.module.distri.service.sharepath.SharePathService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.springframework.context.annotation.Lazy;
@@ -24,6 +25,7 @@ import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
 import cn.newfeifan.mall.module.distri.dal.mysql.integral.IntegralMapper;
 
 import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.newfeifan.mall.module.distri.enums.CaclEnum.DIRECT_REFERRAL_QUOTA;
 import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
 
 /**
@@ -45,6 +47,9 @@ public class IntegralServiceImpl implements IntegralService {
     @Lazy
     private SharePathService sharePathService;
 
+    @Resource
+    private PtProfitLogService ptProfitLogService;
+
     @Override
     public Long createIntegral(IntegralSaveReqVO createReqVO) {
         // 插入
@@ -163,4 +168,34 @@ public class IntegralServiceImpl implements IntegralService {
         }
     }
 
+    @Override
+    public void initializeIntegralHighQuotaTotal() {
+        List<IntegralDO> integralDOS = integralMapper.selectList();
+        for (IntegralDO integralDO : integralDOS) {
+            List<PtProfitLogDO> ptProfitLogDOS = ptProfitLogMapper.selectList(new LambdaQueryWrapper<PtProfitLogDO>()
+                    .eq(PtProfitLogDO::getUserId, integralDO.getUserId())
+                    .eq(PtProfitLogDO::getProfitStatus, DIRECT_REFERRAL_QUOTA.getType())
+            );
+            for (PtProfitLogDO ptProfitLogDO : ptProfitLogDOS) {
+                integralDO.setHighQuotaTotal(integralDO.getHighQuotaTotal() + ptProfitLogDO.getMaxAvailablePointsAmount());
+            }
+
+            integralMapper.updateById(integralDO);
+            if(ptProfitLogDOS.size() > 1){
+                System.out.println("用户编号:[" + integralDO.getUserId() + "]");
+            }
+        }
+    }
+
+    @Override
+    public void updateUserIntegral(Long userId, CaclEnum caclEnum, Long payIntegral, Long tradeOrderId, String orderNum) {
+        //退还订单支付过期积分
+        IntegralDO integralDO = integralMapper.selectOne(new LambdaQueryWrapper<IntegralDO>().eq(IntegralDO::getUserId, userId));
+        integralDO.setCurrentQuota(integralDO.getCurrentQuota() + payIntegral);
+
+        integralMapper.updateById(integralDO);
+
+        ptProfitLogService.addMessage(userId,userId,caclEnum,payIntegral,integralDO.getCurrentQuota(),0L,0L,null,tradeOrderId,orderNum);
+    }
+
 }

+ 4 - 3
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ordercalc/OrderCalcServiceImpl.java

@@ -421,7 +421,7 @@ public class OrderCalcServiceImpl implements OrderCalcService {
                     ptReplenish = ancestorQuotaInt - ancestorHighQuota;
                 }
             }
-            changeUserWallet(integralSaveReqVOS, integralDO, integralDOAncestor, ptIntegral, amount,
+            changeUserWallet(integralDO, integralDOAncestor, ptIntegral, amount,
                     descendantQuotaInt, highQuotaInt, grossProfitAfterBonusInt, platformQuotaInt);
 
             // ========== 修改平台信息 =================
@@ -595,7 +595,6 @@ public class OrderCalcServiceImpl implements OrderCalcService {
     /**
      * 修改用户钱包
      *
-     * @param integralSaveReqVOS 、
      * @param integralDO 当前用户钱包
      * @param integralDOAncestor 推荐人钱包
      * @param pt pt钱包
@@ -605,11 +604,13 @@ public class OrderCalcServiceImpl implements OrderCalcService {
      * @param ptA pt收益
      * @param ptB pt服务费
      */
-    private void changeUserWallet(List<IntegralSaveReqVO> integralSaveReqVOS, IntegralDO integralDO, IntegralDO integralDOAncestor, IntegralDO pt,
+    private void changeUserWallet(IntegralDO integralDO, IntegralDO integralDOAncestor, IntegralDO pt,
                                   Long ancestorQuota, Long descendantQuota, Long highQuota, Long ptA, Long ptB) {
         // 修改用户钱包
         // 增加直推人额度
         integralDO.setHighQuota(integralDO.getHighQuota() + highQuota);
+        //增加累计峰值
+        integralDO.setHighQuota(integralDO.getHighQuotaTotal() + highQuota);
         integralDO.setFreezeHighQuota(integralDO.getFreezeHighQuota() - highQuota);
         // todo 增加累计额度
 

+ 9 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptprofitlog/PtProfitLogService.java

@@ -79,4 +79,13 @@ public interface PtProfitLogService {
 
     String getTotalLog(List<Long> sonsId);
 
+    //记录用户的积分变动日志
+    void addMessage(Long generateUserId,//导致产生积分变动的用户ID
+                    Long userId, //实际变动积分的用户ID
+                    CaclEnum caclEnum, Long amount,
+                    Long afterAmount, Long freezeAmount,
+                    Long afterFreezeAmount, String percentTemplate,
+                    Long tradeOrderId,
+                    String OrderNum
+    );
 }

+ 22 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptprofitlog/PtProfitLogServiceImpl.java

@@ -184,4 +184,26 @@ public class PtProfitLogServiceImpl implements PtProfitLogService {
         return sum + "";
     }
 
+    @Override
+    public void addMessage(Long generateUserId,//导致产生积分变动的用户ID
+                           Long userId, //实际变动积分的用户ID
+                           CaclEnum caclEnum, Long amount, Long afterAmount,
+                           Long freezeAmount, Long afterFreezeAmount,
+                           String percentTemplate,
+                           Long tradeOrderId,
+                           String OrderNum
+    ) {
+        PtProfitLogSaveReqVO ptProfitLog = PtProfitLogSaveReqVO.builder()
+                .afterAmount(afterAmount)
+                .amount(amount)
+                .percentTemplate(percentTemplate)
+                .userId(userId)
+                .generateUserId(generateUserId)
+                .profitStatus(caclEnum.getType()).orderId(tradeOrderId).orderNo(OrderNum)
+                .freezeAmount(freezeAmount).afterFreezeAmount(afterFreezeAmount)
+                .build();
+        ptProfitLogMapper.insert(BeanUtils.toBean(ptProfitLog, PtProfitLogDO.class));
+
+    }
+
 }

+ 7 - 7
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/admin/order/TradeOrderController.java

@@ -334,13 +334,13 @@ public class TradeOrderController {
         return success("success");
     }
 
-    @GetMapping("/calcOrderItem")
-    @Operation(summary = "计算所有订单的订单项的可获得峰值")
-    public CommonResult<String> calcOrderItem() {
-        tradeOrderUpdateService.updateOrderItemByFreezeHighQuota();
-
-        return success("success");
-    }
+//    @GetMapping("/calcOrderItem")
+//    @Operation(summary = "计算所有订单的订单项的可获得峰值")
+//    public CommonResult<String> calcOrderItem() {
+//        tradeOrderUpdateService.updateOrderItemByFreezeHighQuota();
+//
+//        return success("success");
+//    }
 
 
 }

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

@@ -640,6 +640,17 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         for (TradeOrderDO order : orders) {
             try {
                 getSelf().cancelOrderBySystem(order);
+
+                //退回订单已支付的积分 add by Ben
+                Long payIntegral = order.getPayIntegral().longValue();//每个订单使用的积分
+                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,tradeOrderId,orderNum);
+                }
+
                 count++;
             } catch (Throwable e) {
                 log.error("[cancelOrderBySystem][order({}) 过期订单异常]", order.getId(), e);

+ 7 - 1
sql/mysql/建空库SQL/13_20240617.sql

@@ -39,4 +39,10 @@ ALTER TABLE distri_pt_profit_log
 ADD COLUMN after_freeze_high_quota BIGINT DEFAULT NULL COMMENT '变动后的冻结最大可用额度';
 
 ALTER TABLE trade_order_item
-    ADD COLUMN freeze_high_quota BIGINT DEFAULT NULL COMMENT '用户获得冻结最大可用额度';
+    ADD COLUMN freeze_high_quota BIGINT DEFAULT NULL COMMENT '用户获得冻结最大可用额度';
+
+ALTER TABLE trade_order_item
+    ADD COLUMN high_precision_price DECIMAL(11,6) DEFAULT 0 COMMENT '高精度价格';
+
+ALTER TABLE distri_integral
+    ADD COLUMN `high_quota_total` bigint(11) DEFAULT '0' COMMENT '累计获取的峰值';