Ver Fonte

修改可见的积分详情

Yangzw há 9 meses atrás
pai
commit
0d397edb35
11 ficheiros alterados com 80 adições e 27 exclusões
  1. 2 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/CaclEnum.java
  2. 2 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralSaveReqVO.java
  3. 6 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/ptprofitlog/vo/PtProfitLogRespVO.java
  4. 6 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/ptprofitlog/vo/PtProfitLogSaveReqVO.java
  5. 4 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/integral/IntegralDO.java
  6. 8 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/ptprofitlog/PtProfitLogDO.java
  7. 3 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/ptprofitlog/PtProfitLogMapper.java
  8. 11 2
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralService.java
  9. 20 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralServiceImpl.java
  10. 5 22
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/order/TradeOrderItemDO.java
  11. 13 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderUpdateServiceImpl.java

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

@@ -27,6 +27,8 @@ public enum CaclEnum {
     ORDER_REFUND_INTEGRAL_ANCESTER(20,"订单退款-撤回直推奖","订单退款,收回消费者的推荐人,获得的冻结积分"),
     ORDER_PAY_INTEGRAL_CONSUMER(21, "购物获得","消费者购物,获得冻结积分"),//购物者本人 获得积分
     SMALL_QUOTA_CRASH_SETTLE(22, "合赢奖结算获得","每天计算的合赢奖7天后结算"),
+    ORDER_PAY_FREEZE_HIGH_QUOTA(23, "购物获得","消费者购物,获得冻结峰值"),
+    ORDER_REFUND_ORDER_PAY_FREEZE_HIGH_QUOTA(24, "订单退款-撤回峰值奖","消费者购物,获得冻结峰值")
     ;
 
     /**

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

@@ -36,4 +36,6 @@ public class IntegralSaveReqVO {
     @Schema(description = "用户昵称", example = "赵六")
     private String nickName;
 
+    @Schema(description = "冻结的最高可获取积分", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Long freezeHighQuota;
 }

+ 6 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/ptprofitlog/vo/PtProfitLogRespVO.java

@@ -76,4 +76,10 @@ public class PtProfitLogRespVO {
 
     @Schema(description = "产生积分的用户ID,例如:下订单的用户ID", example = "31502")
     private Long generateUserId;
+
+    @Schema(description = "变动的冻结最大可用额度")
+    private Long freezeHighQuota;
+
+    @Schema(description = "变动后的冻结最大可用额度")
+    private Long afterFreezeHighQuota;
 }

+ 6 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/ptprofitlog/vo/PtProfitLogSaveReqVO.java

@@ -50,4 +50,10 @@ public class PtProfitLogSaveReqVO {
     @Schema(description = "计算百分比模板")
     private String percentTemplate;
 
+    @Schema(description = "变动的冻结最大可用额度")
+    private Long freezeHighQuota;
+
+    @Schema(description = "变动后的冻结最大可用额度")
+    private Long afterFreezeHighQuota;
+
 }

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

@@ -51,5 +51,8 @@ public class IntegralDO extends BaseDO {
      * 合赢奖累计获取积分
      */
     private Long accumulatedQuota = 0L;
-
+    /**
+     * 冻结的最高可获取积分
+     */
+    private Long freezeHighQuota;
 }

+ 8 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/ptprofitlog/PtProfitLogDO.java

@@ -84,5 +84,12 @@ public class PtProfitLogDO extends BaseDO {
      */
     private Long ancestorQuotaAmount;
 
-
+    /**
+     * 变动的冻结最大可用额度
+     */
+    private Long freezeHighQuota;
+    /**
+     * 变动后的冻结最大可用额度
+     */
+    private Long afterFreezeHighQuota;
 }

+ 3 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/ptprofitlog/PtProfitLogMapper.java

@@ -92,7 +92,9 @@ public interface PtProfitLogMapper extends BaseMapperX<PtProfitLogDO> {
         List<Integer> profitStatus = Arrays.asList(
                 DIRECT_REFERRAL_QUOTA.getType(),
                 RECOMMENDED_PERSON_QUOTA.getType(),
-                SMALL_QUOTA_CRASH.getType());
+                SMALL_QUOTA_CRASH.getType(),
+                ORDER_PAY_FREEZE_HIGH_QUOTA.getType(),
+                ORDER_REFUND_ORDER_PAY_FREEZE_HIGH_QUOTA.getType());
         return selectPage(pageReqVO, new LambdaQueryWrapperX<PtProfitLogDO>()
                 .eqIfPresent(PtProfitLogDO::getUserId, pageReqVO.getUserId())
                 .inIfPresent(PtProfitLogDO::getProfitStatus, profitStatus)

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

@@ -1,11 +1,9 @@
 package cn.newfeifan.mall.module.distri.service.integral;
 
-import java.util.*;
 import javax.validation.*;
 import cn.newfeifan.mall.module.distri.controller.admin.integral.vo.*;
 import cn.newfeifan.mall.module.distri.dal.dataobject.integral.IntegralDO;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
-import cn.newfeifan.mall.framework.common.pojo.PageParam;
 import cn.newfeifan.mall.module.distri.enums.CaclEnum;
 import cn.newfeifan.mall.module.distri.enums.SocialStatusUpdateEnum;
 
@@ -88,4 +86,15 @@ public interface IntegralService {
      */
     String updateUserSocialStatus(Long userId, SocialStatusUpdateEnum socialStatusUpdateEnum, Integer socialStatusPoint,
                                    Long ObjectId);
+
+    /**
+     * 修改用户身价
+     * @param generateUserId 导致产生积分变动的用户ID
+     * @param userId 身价变动类别
+     * @param caclEnum 变化类型
+     * @param totalFreezeHighQuota 冻结峰值
+     * @param tradeOrderId 订单ID
+     * @param orderNum 订单号
+     */
+    void updateIntegralFreezeHighQuota(Long generateUserId, Long userId, CaclEnum caclEnum, Long totalFreezeHighQuota, Long tradeOrderId, String orderNum);
 }

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

@@ -1,6 +1,7 @@
 package cn.newfeifan.mall.module.distri.service.integral;
 
 import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.newfeifan.mall.module.distri.controller.app.ptprofitlog.vo.PtProfitLogSaveReqVO;
 import cn.newfeifan.mall.module.distri.dal.dataobject.duser.DuserDO;
 import cn.newfeifan.mall.module.distri.dal.mysql.duser.DuserMapper;
 import cn.newfeifan.mall.module.distri.dal.mysql.ptprofit.PtProfitMapper;
@@ -172,4 +173,23 @@ public class IntegralServiceImpl implements IntegralService {
 
         return newSocialStatusName;
     }
+
+    @Override
+    public void updateIntegralFreezeHighQuota(Long generateUserId, Long userId, CaclEnum caclEnum, Long totalFreezeHighQuota, Long tradeOrderId, String orderNum) {
+        IntegralDO integralDO = integralMapper.selectOne(new LambdaQueryWrapper<IntegralDO>().eq(IntegralDO::getUserId, userId));
+        integralDO.setFreezeHighQuota(integralDO.getFreezeHighQuota() + totalFreezeHighQuota);
+        integralMapper.updateById(integralDO);
+
+        //记录用户的积分变动日志
+        PtProfitLogSaveReqVO profitLogSaveReqVO = PtProfitLogSaveReqVO.builder()
+                .freezeHighQuota(totalFreezeHighQuota)
+                .afterFreezeHighQuota(integralDO.getFreezeHighQuota())
+                .userId(userId)
+                .generateUserId(generateUserId)
+                .profitStatus(caclEnum.getType())
+                .orderId(tradeOrderId)
+                .orderNo(orderNum)
+                .build();
+        ptProfitLogService.createPtProfitLog(profitLogSaveReqVO);
+    }
 }

+ 5 - 22
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/order/TradeOrderItemDO.java

@@ -42,6 +42,11 @@ public class TradeOrderItemDO extends BaseDO {
     //推荐用户获得积分 add by Ben 20240604
     private Long ancestorIncreaseIntegral;
 
+    /**
+     * 用户获得冻结最大可用额度
+     */
+    private Long freezeHighQuota;
+
     // ========== 订单项基本信息 ==========
     /**
      * 编号
@@ -49,19 +54,16 @@ public class TradeOrderItemDO extends BaseDO {
     private Long id;
     /**
      * 用户编号
-     *
      * 关联 MemberUserDO 的 id 编号
      */
     private Long userId;
     /**
      * 订单编号
-     *
      * 关联 {@link TradeOrderDO#getId()}
      */
     private Long orderId;
     /**
      * 购物车项编号
-     *
      * 关联 {@link CartDO#getId()}
      */
     private Long cartId;
@@ -69,25 +71,21 @@ public class TradeOrderItemDO extends BaseDO {
     // ========== 商品基本信息; 冗余较多字段,减少关联查询 ==========
     /**
      * 商品 SPU 编号
-     *
      * 关联 ProductSkuDO 的 spuId 编号
      */
     private Long spuId;
     /**
      * 商品 SPU 名称
-     *
      * 冗余 ProductSkuDO 的 spuName 编号
      */
     private String spuName;
     /**
      * 商品 SKU 编号
-     *
      * 关联 ProductSkuDO 的 id 编号
      */
     private Long skuId;
     /**
      * 属性数组,JSON 格式
-     *
      * 冗余 ProductSkuDO 的 properties 字段
      */
     @TableField(typeHandler = PropertyTypeHandler.class)
@@ -102,7 +100,6 @@ public class TradeOrderItemDO extends BaseDO {
     private Integer count;
     /**
      * 是否评价
-     *
      * true - 已评价
      * false - 未评价
      */
@@ -112,14 +109,12 @@ public class TradeOrderItemDO extends BaseDO {
 
     /**
      * 商品原价(单),单位:分
-     *
      * 对应 ProductSkuDO 的 price 字段
      * 对应 taobao 的 order.price 字段
      */
     private Integer price;
     /**
      * 优惠金额(总),单位:分
-     *
      * 对应 taobao 的 order.discount_fee 字段
      */
     private Integer discountPrice;
@@ -129,13 +124,11 @@ public class TradeOrderItemDO extends BaseDO {
     private Integer deliveryPrice;
     /**
      * 订单调价(总),单位:分
-     *
      * 正数,加价;负数,减价
      */
     private Integer adjustPrice;
     /**
      * 应付金额(总),单位:分
-     *
      * = {@link #price} * {@link #count}
      * - {@link #couponPrice}
      * - {@link #pointPrice}
@@ -150,25 +143,21 @@ public class TradeOrderItemDO extends BaseDO {
 
     /**
      * 优惠劵减免金额,单位:分
-     *
      * 对应 taobao 的 trade.coupon_fee 字段
      */
     private Integer couponPrice;
     /**
      * 积分抵扣的金额,单位:分
-     *
      * 对应 taobao 的 trade.point_fee 字段
      */
     private Integer pointPrice;
     /**
      * 使用的积分
-     *
      * 目的:用于后续取消或者售后订单时,需要归还赠送
      */
     private Integer usePoint;
     /**
      * 赠送的积分
-     *
      * 目的:用于后续取消或者售后订单时,需要扣减赠送
      */
     private Integer givePoint;
@@ -181,13 +170,11 @@ public class TradeOrderItemDO extends BaseDO {
 
     /**
      * 售后单编号
-     *
      * 关联 {@link AfterSaleDO#getId()} 字段
      */
     private Long afterSaleId;
     /**
      * 售后状态
-     *
      * 枚举 {@link TradeOrderItemAfterSaleStatusEnum}
      */
     private Integer afterSaleStatus;
@@ -203,26 +190,22 @@ public class TradeOrderItemDO extends BaseDO {
 
         /**
          * 属性编号
-         *
          * 关联 ProductPropertyDO 的 id 编号
          */
         private Long propertyId;
         /**
          * 属性名字
-         *
          * 关联 ProductPropertyDO 的 name 字段
          */
         private String propertyName;
 
         /**
          * 属性值编号
-         *
          * 关联 ProductPropertyValueDO 的 id 编号
          */
         private Long valueId;
         /**
          * 属性值名字
-         *
          * 关联 ProductPropertyValueDO 的 name 字段
          */
         private String valueName;

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

@@ -1107,6 +1107,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 
             Long totalAncestorFreezeAmount = 0L;//推荐人总的冻结积分
 
+            Long totalFreezeHighQuota = 0L;//冻结峰值
+
             for (TradeOrderItemDO tradeOrderItemDO : TradeOrderItemList) {
                 ProductSkuDO productSkuDO = skuDOMap.get(tradeOrderItemDO.getSkuId());
                 //这类商品的总推广费
@@ -1128,14 +1130,22 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                                 grossProfitAncestorQuotaPerc//消费者自得额度 百分比
                         );
 
+                //峰值为毛利的十倍
+                BigDecimal grossProfit = new BigDecimal(promotionExpenses).multiply(new BigDecimal(grossProfitPerc)).setScale(4, RoundingMode.DOWN);
+                BigDecimal freezeHighQuota = grossProfit.multiply(new BigDecimal("10"));
+                freezeHighQuota = money2Integral(freezeHighQuota);
+                Long freezeHighQuotaInt = freezeHighQuota.longValue();
+
                 totalFreezeAmount += itemFreezeAmount;
                 totalAncestorFreezeAmount += ancestorItemFreezeAmount;
+                totalFreezeHighQuota += freezeHighQuotaInt;
 
                 //记录用户在此订单项获得的冻结积分
                 TradeOrderItemDO toid = new TradeOrderItemDO();
                 toid.setId(tradeOrderItemDO.getId());
                 toid.setIncreaseIntegral(itemFreezeAmount);
                 toid.setAncestorIncreaseIntegral(ancestorItemFreezeAmount);//20240504 add by Ben
+                toid.setFreezeHighQuota(freezeHighQuotaInt);
                 tradeOrderItemMapper.updateById(toid);
             }
 
@@ -1148,6 +1158,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 
             //修改推荐人(上级)获得的冻结积分
             integralService.updateUserIntegral(tradeOrderDO.getUserId(), ancesterUserId, CaclEnum.ORDER_PAY_INTEGRAL_ANCESTER, 0L, totalAncestorFreezeAmount, tradeOrderId, OrderNum);
+
+            //修改购物者本人获得的冻结峰值
+            integralService.updateIntegralFreezeHighQuota(tradeOrderDO.getUserId(), tradeOrderDO.getUserId(),CaclEnum.ORDER_PAY_FREEZE_HIGH_QUOTA,totalFreezeHighQuota,tradeOrderId,OrderNum);
             log.warn("[TradeOrderUpdateServiceImpl.updateOrderPaid]$$$:[tradeOrderId({}),ancesterUserId({}),totalAncestorFreezeAmount({})]" + new Date(),
                     tradeOrderId, ancesterUserId, totalAncestorFreezeAmount);