Bladeren bron

Merge branch 'dev/2024/0806/update-app-Y' of feifan/mall-backend-app into master

用户下单即算即得,直接获得可用积分而不是冻结积分
Yangzw 7 maanden geleden
bovenliggende
commit
f338bda5e3
13 gewijzigde bestanden met toevoegingen van 477 en 62 verwijderingen
  1. 18 10
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/integral/vo/IntegralSaveReqVO.java
  2. 16 9
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ordercalc/vo/OrderCalcSaveReqVO.java
  3. 3 5
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptprofit/vo/PtProfitSaveReqVO.java
  4. 29 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptprofitlogdetails/vo/PtProfitLogDetailsSaveReqVO.java
  5. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/ptprofitlog/vo/PtProfitLogSaveReqVO.java
  6. 2 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/ptprofit/PtProfitMapper.java
  7. 6 3
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/ptprofitlog/PtProfitLogMapper.java
  8. 3 3
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralServiceImpl.java
  9. 9 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharepath/SharePathService.java
  10. 9 13
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharepath/SharePathServiceImpl.java
  11. 0 8
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/order/AppTradeOrderController.java
  12. 12 0
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/order/TradeOrderItemDO.java
  13. 358 9
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderUpdateServiceImpl.java

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

@@ -3,6 +3,8 @@ package cn.newfeifan.mall.module.distri.controller.admin.integral.vo;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 
+import javax.validation.constraints.NotNull;
+
 
 @Schema(description = "管理后台 - 推荐用户积分新增/修改 Request VO")
 @Data
@@ -17,25 +19,31 @@ public class IntegralSaveReqVO {
     @Schema(description = "用户ID", example = "19778")
     private Long userId;
 
-    @Schema(description = "当前积分")
-    private Long currentQuota;
-
-    @Schema(description = "冻结积分")
-    private Long freezeQuota;
-
     @Schema(description = "用户类型", example = "17348")
     private Long categoryId;
 
-    @Schema(description = "最高可获取积分")
-    private Long highQuota;
-
-
     @Schema(description = "用户名称", example = "赵六")
     private String name;
 
     @Schema(description = "用户昵称", example = "赵六")
     private String nickName;
 
+    @Schema(description = "当前积分", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "当前积分不能为空")
+    private Long currentQuota;
+
+    @Schema(description = "冻结积分")
+    private Long freezeQuota;
+
+    @Schema(description = "合赢奖累计获取积分")
+    private Long accumulatedQuota;
+
+    @Schema(description = "直推奖累计获取积分")
+    private Long ancestorQuota;
+
+    @Schema(description = "最高可获取积分", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Long highQuota;
+
     @Schema(description = "冻结的最高可获取积分", requiredMode = Schema.RequiredMode.REQUIRED)
     private Long freezeHighQuota;
 

+ 16 - 9
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ordercalc/vo/OrderCalcSaveReqVO.java

@@ -3,8 +3,6 @@ package cn.newfeifan.mall.module.distri.controller.admin.ordercalc.vo;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 
-import java.util.*;
-import javax.validation.constraints.*;
 
 @Schema(description = "管理后台 - 订单产生数据计算新增/修改 Request VO")
 @Data
@@ -23,26 +21,35 @@ public class OrderCalcSaveReqVO {
     private Long userId;
 
     @Schema(description = "售价", example = "10413")
-    private Integer price;
+    private Long price;
 
     @Schema(description = "成本")
-    private Integer cost;
+    private Long cost;
 
     @Schema(description = "毛利 = 成本 * 0.38... (推广费用)")
-    private Integer grossProfit;
+    private Long grossProfit;
 
     @Schema(description = "推广-用户额度")
-    private Integer grossProfitUserQuota;
+    private Long grossProfitUserQuota;
 
     @Schema(description = "推广-推荐人额度")
-    private Integer grossProfitAncestorQuota;
+    private Long grossProfitAncestorQuota;
 
     @Schema(description = "推广-合赢奖额度(浮动)")
-    private Integer grossProfitBonusQuota;
+    private Long grossProfitBonusQuota;
 
     @Schema(description = "推广-平台分成额度(浮动)")
-    private Integer grossProfitPlatformQuota;
+    private Long grossProfitPlatformQuota;
     @Schema(description = "计算百分比模板")
     private String percentTemplate;
 
+    @Schema(description = "用户昵称", example = "王五")
+    private String nickName;
+    @Schema(description = "订单ID", example = "21497")
+    private Long orderId;
+    @Schema(description = "购买数量", example = "10152")
+    private Integer productCount;
+    @Schema(description = "下单人姓名", example = "赵六")
+    private String name;
+
 }

+ 3 - 5
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptprofit/vo/PtProfitSaveReqVO.java

@@ -3,8 +3,6 @@ package cn.newfeifan.mall.module.distri.controller.admin.ptprofit.vo;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 
-import java.util.*;
-import javax.validation.constraints.*;
 
 @Schema(description = "管理后台 - 平台利润新增/修改 Request VO")
 @Data
@@ -17,12 +15,12 @@ public class PtProfitSaveReqVO {
     private Long id;
 
     @Schema(description = "平台收益(0.3888 之外的收益)")
-    private Integer ptAdd;
+    private Long ptAdd;
 
     @Schema(description = "平台服务费(毛利下的百分比收益)")
-    private Integer ptGrossAdd;
+    private Long ptGrossAdd;
 
     @Schema(description = "平台总收益")
-    private Integer ptTotalAdd;
+    private Long ptTotalAdd;
 
 }

+ 29 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptprofitlogdetails/vo/PtProfitLogDetailsSaveReqVO.java

@@ -0,0 +1,29 @@
+package cn.newfeifan.mall.module.distri.controller.admin.ptprofitlogdetails.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 平台利润记录详情新增/修改 Request VO")
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class PtProfitLogDetailsSaveReqVO {
+
+    @Schema(description = "详情编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "32357")
+    private Long id;
+
+    @Schema(description = "平台利润记录编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "19955")
+    @NotNull(message = "平台利润记录编号不能为空")
+    private Long distriPtProfitLogId;
+
+    @Schema(description = "订单项编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "9530")
+    @NotNull(message = "订单项编号不能为空")
+    private Long orderItemId;
+
+}

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

@@ -47,6 +47,18 @@ public class PtProfitLogSaveReqVO {
     @Schema(description = "变动后冻结积分钱包的余额")
     private Long afterFreezeAmount;
 
+    @Schema(description = "合赢奖超出额度")
+    private Long accumulatedQuotaAmount;
+
+    @Schema(description = "直推奖超出额度")
+    private Long ancestorQuotaAmount;
+
+    @Schema(description = "最大可用积分变化值")
+    private Long maxAvailablePointsAmount;
+
+    @Schema(description = "最大可用积分额度")
+    private Long afterMaxAvailablePointsAmount;
+
     @Schema(description = "计算百分比模板")
     private String percentTemplate;
 

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

@@ -30,7 +30,8 @@ public interface PtProfitMapper extends BaseMapperX<PtProfitDO> {
     }
 
     @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 ")
+            "WHERE user_id=#{userId}")
+//            "WHERE (current_quota + #{amount2})>=0 and user_id=#{userId} and (freeze_quota + #{freeze_mount2})>=0 ")
     int updateUserIntegral(@Param("amount") Long amount,
                            @Param("amount2") Long amount2,
                            @Param("freeze_mount") Long freezeAmount,

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

@@ -46,6 +46,8 @@ public interface PtProfitLogMapper extends BaseMapperX<PtProfitLogDO> {
                     ORDER_REFUND_INTEGRAL.getType(),
                     ORDER_CANCEL_BY_USER_REFUND_INTEGRAL.getType(),
                     ORDER_CANCEL_BY_SYSTEM_REFUND_INTEGRAL.getType(),
+                    ORDER_REFUND_INTEGRAL_CONSUMER.getType(),
+                    ORDER_REFUND_INTEGRAL_ANCESTER.getType(),
                     MANUAL_RETURN_INTEGRAL.getType(),
                     WITHDRAWAL.getType(),
                     WITHDRAWAL_ERROR.getType()
@@ -58,8 +60,8 @@ public interface PtProfitLogMapper extends BaseMapperX<PtProfitLogDO> {
                     DIRECT_REFERRAL_QUOTA.getType(),
                     SMALL_QUOTA_CRASH.getType(),
                     ORDER_PAY_INTEGRAL_ANCESTER.getType(),
-                    ORDER_REFUND_INTEGRAL_CONSUMER.getType(),
-                    ORDER_REFUND_INTEGRAL_ANCESTER.getType(),
+//                    ORDER_REFUND_INTEGRAL_CONSUMER.getType(),
+//                    ORDER_REFUND_INTEGRAL_ANCESTER.getType(),
                     ORDER_PAY_INTEGRAL_CONSUMER.getType());
 //            queryWrapper.ne(PtProfitLogDO::getFreezeAmount,0);
         }
@@ -103,7 +105,8 @@ public interface PtProfitLogMapper extends BaseMapperX<PtProfitLogDO> {
                 DIRECT_REFERRAL_QUOTA.getType(),
                 RECOMMENDED_PERSON_QUOTA.getType(),
                 SMALL_QUOTA_CRASH.getType(),
-                ORDER_PAY_FREEZE_HIGH_QUOTA.getType(),
+//                ORDER_PAY_FREEZE_HIGH_QUOTA.getType(),
+                ORDER_REFUND_INTEGRAL_ANCESTER.getType(),
                 ORDER_REFUND_ORDER_PAY_FREEZE_HIGH_QUOTA.getType(),
                 MANUAL_RETURN_INTEGRAL.getType());
         return selectPage(pageReqVO, new LambdaQueryWrapperX<PtProfitLogDO>()

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

@@ -133,9 +133,9 @@ public class IntegralServiceImpl implements IntegralService {
             afterAmount = (Long)currentQuotaObj;
             afterFreezeAmount = (Long)freezeQuotaObj;
 
-            if(afterAmount<0||afterFreezeAmount<0){
-                throw new RuntimeException("用户钱包为负数:用户IO为"+userId+"的用户可用钱包为"+afterAmount+",冻结钱包为"+afterFreezeAmount);
-            }
+//            if(afterAmount<0||afterFreezeAmount<0){
+//                throw new RuntimeException("用户钱包为负数:用户IO为"+userId+"的用户可用钱包为"+afterAmount+",冻结钱包为"+afterFreezeAmount);
+//            }
 
             //记录用户的积分变动日志
             ptProfitLogService.addMessage(generateUserId,//导致产生积分变动的用户ID

+ 9 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharepath/SharePathService.java

@@ -64,7 +64,7 @@ public interface SharePathService {
 
     /**
      * 转让分销用户关系
-     * @param sharePathtransFerenceRelaReqVO
+     * @param sharePathtransFerenceRelaReqVO 转让关系
      */
     void transferenceRela(SharePathtransFerenceRelaReqVO sharePathtransFerenceRelaReqVO);
 
@@ -74,4 +74,12 @@ public interface SharePathService {
     Boolean hasParent(Long userId);
 
     AppSharePathRespVO getTeam(PageParam pageParam);
+
+    /**
+     * 通过直推人, 获取当前的直推关系
+     *
+     * @param userId 用户id
+     * @return 推荐人
+     */
+    SharePathDO getSharePathByDescendant(Long userId);
 }

+ 9 - 13
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharepath/SharePathServiceImpl.java

@@ -209,6 +209,15 @@ public class SharePathServiceImpl implements SharePathService {
                 .descendants(result).build();
     }
 
+    @Override
+    public SharePathDO getSharePathByDescendant(Long userId) {
+        List<SharePathDO> sharePathDOS = sharePathMapper.selectList(new LambdaQueryWrapperX<SharePathDO>().eqIfPresent(SharePathDO::getDescendant, userId)
+                .eqIfPresent(SharePathDO::getDepth, 1));
+        if (sharePathDOS.isEmpty()) {
+            return null;
+        }
+        return sharePathDOS.get(0);    }
+
     /**
      * 获取本用户兄弟分区的剩余额度值
      *
@@ -254,19 +263,6 @@ public class SharePathServiceImpl implements SharePathService {
         return yesterdayCrash == null ? 0 : yesterdayCrash.getSonPrice();
     }
 
-    /**
-     * 获取最高可获取积分
-     *
-     * @param sharePath 对象
-     * @param userId    用户编号
-     */
-    private void setHighQuota(SharePathRespVO sharePath, Long userId) {
-        IntegralDO integralDO = integralService.selectByUser(userId);
-        if (integralDO != null) {
-            sharePath.setHigh_quota(integralDO.getHighQuota());
-        }
-    }
-
     private void getSocialStatus(SharePathRespVO sharePathRespVO, Long userId) {
         if (Objects.equals(userId, PT_ID)) return;
         DuserDO duser = duserService.getDuserByUser(userId);

+ 0 - 8
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/order/AppTradeOrderController.java

@@ -86,14 +86,6 @@ public class AppTradeOrderController {
         return getPayOrderRespVOCommonResult(id, newPayOrderDO, oldPayOrderDO);
     }
 
-    @GetMapping("/getPayOrderByStatus3")
-    @Operation(summary = "获得支付订单2")
-    @Parameter(name = "id", description = "支付订单编号", required = true, example = "1024")
-    public CommonResult<PayOrderRespVO> getPayOrderByStatus3(@RequestParam("id") Long id) {
-        log.info("getPayOrderByStatus3:=========id:{}",id);
-        return null;
-    }
-
     @PostMapping("/getFuYouPayOrderByStatus")
     @Operation(summary = "查询富友支付订单状态")
     @Parameter(name = "payOrderNo", description = "支付订单编号", required = true, example = "16103-202407151500201")

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

@@ -14,6 +14,7 @@ import lombok.experimental.Accessors;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -180,6 +181,17 @@ public class TradeOrderItemDO extends BaseDO {
     private Integer afterSaleStatus;
 
 //    @TableField(exist = false)
+
+    /**
+     * 是否分配积分、身价权益,已分配是1,未分配为0
+     */
+    private Boolean distributeBenefit;
+
+    /**
+     *
+     */
+    private LocalDateTime transitionTime;
+
     /**
      * 高精度价格
      */

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

@@ -9,15 +9,26 @@ import cn.hutool.core.util.RandomUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import cn.newfeifan.mall.framework.common.core.KeyValue;
 import cn.newfeifan.mall.framework.common.enums.UserTypeEnum;
+import cn.newfeifan.mall.framework.common.exception.ErrorCode;
 import cn.newfeifan.mall.framework.common.util.json.JsonUtils;
 import cn.newfeifan.mall.framework.common.util.number.MoneyUtils;
 import cn.newfeifan.mall.module.distri.constant.DistriConstants;
+import cn.newfeifan.mall.module.distri.controller.admin.integral.vo.IntegralSaveReqVO;
+import cn.newfeifan.mall.module.distri.controller.admin.ptprofit.vo.PtProfitSaveReqVO;
+import cn.newfeifan.mall.module.distri.controller.app.ptprofitlog.vo.PtProfitLogSaveReqVO;
 import cn.newfeifan.mall.module.distri.dal.dataobject.integral.IntegralDO;
 import cn.newfeifan.mall.module.distri.dal.dataobject.orderpercentage.OrderPercentageDO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.ptprofit.PtProfitDO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.sharepath.SharePathDO;
 import cn.newfeifan.mall.module.distri.dal.mysql.integral.IntegralMapper;
 import cn.newfeifan.mall.module.distri.dal.mysql.orderpercentage.OrderPercentageMapper;
 import cn.newfeifan.mall.module.distri.enums.CaclEnum;
+import cn.newfeifan.mall.module.distri.enums.SocialStatusEnum;
+import cn.newfeifan.mall.module.distri.service.duser.DuserService;
 import cn.newfeifan.mall.module.distri.service.integral.IntegralService;
+import cn.newfeifan.mall.module.distri.service.ptprofit.PtProfitService;
+import cn.newfeifan.mall.module.distri.service.ptprofitlog.PtProfitLogService;
+import cn.newfeifan.mall.module.distri.service.sharepath.SharePathService;
 import cn.newfeifan.mall.module.member.api.address.MemberAddressApi;
 import cn.newfeifan.mall.module.member.api.address.dto.MemberAddressRespDTO;
 import cn.newfeifan.mall.module.member.service.user.MemberUserService;
@@ -74,11 +85,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.BeanUtils;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.math.RoundingMode;
 import java.text.DecimalFormat;
 import java.time.LocalDateTime;
@@ -168,6 +181,17 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
     @Resource
     private AdminUserService adminUserService;
 
+    @Resource
+    private PtProfitService ptProfitService;
+    @Resource
+    private PtProfitLogService ptProfitLogService;
+    @Resource
+    @Lazy
+    private SharePathService sharePathService;
+    @Resource
+    @Lazy
+    private DuserService duserService;
+
     // =================== Order ===================
 
     /**
@@ -276,8 +300,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 
         //把店铺id和店铺名称查出来放到map中
         List<Long> shopIds = new ArrayList<>();
-        for (Long shopid : shopSkuIds.keySet()) {
-            shopIds.add(shopid);
+        for (Long shopId : shopSkuIds.keySet()) {
+            shopIds.add(shopId);
         }
         List<ShopDO> shopDOList = shopMapper.selectListById(shopIds);
         Map<Long, String> shopNameMap = new HashMap<>();//key为店铺id,value为店铺名
@@ -361,7 +385,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
     /**
      * 虚拟商品自走程序
      *
-     * @param address
+     * @param address 地址
      * @param items   商品项数组
      * @return AppTradeOrderSettlementRespVO
      */
@@ -548,6 +572,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
     @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_CREATE)
     public TradeOrderDO createOrder(Long userId, AppTradeOrderCreateReqVO createReqVO) {
 
+        if(createReqVO.getPayIntegral() != null && createReqVO.getPayIntegral() < 0){
+            ErrorCode ERROR = new ErrorCode(1_011_000_013, "抵扣佣金不能小于0");
+            throw exception(ERROR);
+        }
+
         //校验最大值 start  add by Ben
         //查询订单提成比例
         QueryWrapper<OrderPercentageDO> queryWrapper = new QueryWrapper<>();
@@ -744,13 +773,13 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
             // 购买增加销量
             orderItems.forEach(orderItem -> {
                         orderItem.setOrderId(order.getId());
-                ProductSkuDO sku = productSkuMapper.selectById(orderItem.getSkuId());
-                sku.setSalesCount(sku.getSalesCount() + orderItem.getCount());
-                productSkuMapper.updateById(sku);
+                        ProductSkuDO sku = productSkuMapper.selectById(orderItem.getSkuId());
+                        sku.setSalesCount(sku.getSalesCount() + orderItem.getCount());
+                        productSkuMapper.updateById(sku);
 
-                ProductSpuDO spu = productSpuMapper.selectById(orderItem.getSpuId());
-                spu.setSalesCount(spu.getSalesCount() + orderItem.getCount());
-                productSpuMapper.updateById(spu);
+                        ProductSpuDO spu = productSpuMapper.selectById(orderItem.getSpuId());
+                        spu.setSalesCount(spu.getSalesCount() + orderItem.getCount());
+                        productSpuMapper.updateById(spu);
                     }
             );
 
@@ -1243,9 +1272,329 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         rs.add(allTradeOrderTotalFreezeAmount);
         rs.add(newSocialStatus);
 
+        // 七天获得变为即算即得,后续如果恢复把这里注释即可,并打开平台定时任务得订单结算
+//        CompletableFuture.runAsync(() -> {
+            calc(TradeOrderDOList, orderPercentageDO, JsonUtils.toJsonString(orderPercentageDO));
+//        });
+
         return rs;
     }
 
+    /**
+     * 计算订单支付成功后,订单项的冻结积分转换
+     * @param tradeOrderDOList 订单列表
+     * @param orderPercentageDO 参数百分比
+     * @param percentTemplate 计算百分比模板
+     */
+    private void calc(List<TradeOrderDO> tradeOrderDOList, OrderPercentageDO orderPercentageDO, String percentTemplate) {
+        // 平台收益日志
+        List<PtProfitLogSaveReqVO> ptProfitLogSaveReqVOS = new ArrayList<>();
+
+        BigDecimal oneHundred = new BigDecimal(BigInteger.ONE);
+
+
+        // 计算,毛利中100 之外的百分比
+        BigDecimal otherOneHundred = oneHundred.subtract(new BigDecimal(orderPercentageDO.getGrossProfitUserQuotaPerc()))
+                .subtract(new BigDecimal(orderPercentageDO.getGrossProfitAncestorQuotaPerc()))
+                .subtract(new BigDecimal(orderPercentageDO.getGrossProfitPlatformQuotaPerc()));
+
+
+        tradeOrderDOList.forEach(k -> {
+            PtProfitDO ptProfitDO = ptProfitService.getPtProfit();
+            // 平台收益
+            List<PtProfitSaveReqVO> ptProfitSaveReqVOS = new ArrayList<>();
+
+            List<TradeOrderItemDO> tradeOrderItemDOS = tradeOrderItemMapper.selectListByOrderId(k.getId());
+
+            // 计算
+            // 计算利润: (价格 - 成本价格) * 产品数量
+            //用户自得和直推奖不用计算,从orderItem里面获取
+            final BigDecimal[] profit = {new BigDecimal("0"), new BigDecimal("0"), new BigDecimal("0"), new BigDecimal("0")};
+            tradeOrderItemDOS.forEach(j -> {
+                BigDecimal onePrice = new BigDecimal(j.getPrice());
+                BigDecimal oneCostPrice = new BigDecimal(j.getCostPrice());
+                BigDecimal productCount = new BigDecimal(j.getCount());
+                BigDecimal oneGrossProfit = onePrice.subtract(oneCostPrice).multiply(productCount);
+                profit[0] = profit[0].add(oneGrossProfit);  // 注意这里的改动
+                profit[1] = profit[1].add(new BigDecimal(j.getIncreaseIntegral()));     //自得积分
+                profit[2] = profit[2].add(new BigDecimal(j.getAncestorIncreaseIntegral()));     //直推奖
+                profit[3] = profit[3].add(new BigDecimal(j.getFreezeHighQuota()));     //用户获得冻结最大可用额度
+
+                // 遍历订单项拿到订单项编号
+                //将当前订单项设置为已分配权益
+                TradeOrderItemDO item = new TradeOrderItemDO();
+                item.setId(j.getId());
+                item.setDistributeBenefit(true);
+                tradeOrderItemMapper.updateById(item);
+            });
+
+
+            // 计算毛利: 利润 * 1
+            BigDecimal grossProfit = profit[0].multiply(new BigDecimal(orderPercentageDO.getGrossProfitPerc())).setScale(4, RoundingMode.DOWN);
+
+            // 计算平台收益
+            BigDecimal grossProfitAfterBonus = profit[0].multiply(oneHundred.subtract(new BigDecimal(orderPercentageDO.getGrossProfitPerc()))).setScale(4, RoundingMode.DOWN);
+
+            if (otherOneHundred.compareTo(new BigDecimal(BigInteger.ZERO)) > 0) {
+                grossProfitAfterBonus = grossProfitAfterBonus.add(grossProfit.multiply(otherOneHundred).setScale(4, RoundingMode.DOWN));
+            }
+
+            // 用户所得: 毛利 * 0.35
+            BigDecimal descendantQuota = profit[1];
+
+            // 直推奖: 毛利 * 0.3 (上一级)
+            BigDecimal ancestorQuota = profit[2];
+
+            // 平台服务费: 毛利 * 0.05
+            BigDecimal platformQuota = grossProfit.multiply(new BigDecimal(orderPercentageDO.getGrossProfitPlatformQuotaPerc())).setScale(4, RoundingMode.DOWN);
+
+
+            // 计算当前下单人的毛利的十倍
+//            BigDecimal highQuota = grossProfit.multiply(new BigDecimal("10")).setScale(4, RoundingMode.DOWN);
+            BigDecimal highQuota = profit[3];
+
+            // 乘以 10000 并转换为整数
+            Long ancestorQuotaInt = ancestorQuota.longValue();
+            Long descendantQuotaInt = descendantQuota.longValue();
+            Long highQuotaInt = highQuota.longValue();
+            Long grossProfitAfterBonusInt = grossProfitAfterBonus.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).longValue();
+            Long platformQuotaInt = platformQuota.multiply(new BigDecimal("10000")).setScale(0, RoundingMode.DOWN).longValue();
+
+
+            // 获取当前下单人关系
+            SharePathDO sharePath = getSharePath(k.getUserId());
+            // 如果sharePath为空, 则说明没有直推人关系
+            IntegralDO integralDOAncestor = integralService.selectByUser(sharePath.getAncestor());      //父级
+            IntegralDO integralDO = integralService.selectByUser(sharePath.getDescendant());            //自己
+            IntegralDO ptIntegral = integralService.selectByUser(1L);                         //pt
+
+
+            // ========== 身价计算 ==============
+            //推荐人身价计算
+            double orderAncestorSocialStatus = Double.parseDouble(orderPercentageDO.getOrderAncestorSocialStatus());
+            double ancestorSocial = k.getTotalPrice() * orderAncestorSocialStatus / 100;
+            duserService.updateDuserSocial(integralDOAncestor.getUserId(), (long) ancestorSocial, SocialStatusEnum.SHOPPING_ANCESTOR_SOCIAL.getStatus());
+
+            //自得身价计算
+            double orderUserSocialStatus = Double.parseDouble(orderPercentageDO.getOrderUserSocialStatus());
+            double descendantSocial = k.getTotalPrice() * orderUserSocialStatus / 100;
+            duserService.updateDuserSocial(integralDO.getUserId(), (long) descendantSocial, SocialStatusEnum.SHOPPING_SOCIAL.getStatus());
+
+            /*
+            原本这里有添加到distri_order_calc表的记录,但是现在要合赢奖和(直推奖、自得奖)分开,所以现在搬走了
+             */
+
+            // ========== 修改用户钱包 =================
+
+            //直推奖也要限制额度
+            Long ancestorHighQuota = integralDOAncestor.getHighQuota() + new BigDecimal(orderPercentageDO.getBaseMaxQuota()).longValue();//加上基础的最大额度值
+
+            //amount用于记录本次添加的值
+            Long amount = 0L;
+            //平台需要补回的收益
+            Long ptReplenish = ancestorQuotaInt;
+
+            //如果直推人的可获取额度大于0,则能够获取
+            if (ancestorHighQuota.compareTo(0L) > 0) {
+                if (ancestorHighQuota.compareTo(ancestorQuotaInt) > 0) {
+                    //如果最大额度 > 直推人可获取额度,则直接获取
+                    amount = ancestorQuotaInt;
+                    //平台没有需要补回的收益
+                    ptReplenish = 0L;
+                } else {
+                    //如果最大额度 < 直推人可获取额度,则获取自己的最大额度
+                    amount = ancestorHighQuota;
+                    //用户本次没有拿到的直推奖
+                    ptReplenish = ancestorQuotaInt - ancestorHighQuota;
+                }
+            }
+            changeUserWallet(integralDO, integralDOAncestor, ptIntegral, amount,
+                    descendantQuotaInt, highQuotaInt, grossProfitAfterBonusInt, platformQuotaInt, ptReplenish);
+
+            // ========== 修改平台信息 =================
+            // 每个订单计算的过程
+            // 增加平台收益
+            // 平台服务费
+            PtProfitSaveReqVO ptProfitSaveReqVO =
+                    PtProfitSaveReqVO.builder()
+                            .ptAdd(platformQuotaInt)
+                            .ptGrossAdd(grossProfitAfterBonusInt)
+                            .ptTotalAdd(platformQuotaInt + grossProfitAfterBonusInt).build();
+
+
+            // 当直推人获取的积分额度不足时,平台收益要加回来,并生成log
+            if (ptReplenish.compareTo(0L) > 0) {
+                calcIntegral(ptProfitSaveReqVOS, ptProfitSaveReqVO, ptReplenish,
+                        k.getId(), k.getNo());
+            }
+
+            ptProfitSaveReqVOS.add(ptProfitSaveReqVO);
+            // ========== 增加日志记录 =================
+
+            // 平台记录
+            // 平台总收益
+            // 平台总收益
+            PtProfitLogSaveReqVO ptTotal = PtProfitLogSaveReqVO.builder()
+                    .orderId(k.getId())
+                    .profitStatus(CaclEnum.PLATFORM_TOTAL_ADD.getType())
+                    .orderNo(k.getNo())
+                    .amount(platformQuotaInt + grossProfitAfterBonusInt)
+                    .afterAmount(ptProfitDO.getPtTotalAdd() + platformQuotaInt + grossProfitAfterBonusInt)
+                    .percentTemplate(percentTemplate)
+                    .generateUserId(integralDO.getUserId())
+                    .build();
+            // 平台收益
+            PtProfitLogSaveReqVO ptGrossAddLog = PtProfitLogSaveReqVO.builder()
+                    .orderId(k.getId())
+                    .profitStatus(CaclEnum.PLATFORM_REVENUE.getType())
+                    .orderNo(k.getNo())
+                    .amount(grossProfitAfterBonusInt)
+                    .afterAmount(ptProfitDO.getPtGrossAdd() + ptProfitSaveReqVO.getPtGrossAdd())
+                    .percentTemplate(percentTemplate)
+                    .generateUserId(integralDO.getUserId())
+                    .build();
+
+            // 平台服务费
+            PtProfitLogSaveReqVO ptAddLog = PtProfitLogSaveReqVO.builder()
+                    .orderId(k.getId())
+                    .profitStatus(CaclEnum.PLATFORM_SERVICE_FEE.getType())
+                    .orderNo(k.getNo())
+                    .amount(platformQuotaInt)
+                    .afterAmount(ptProfitDO.getPtAdd() + ptProfitSaveReqVO.getPtAdd())
+                    .percentTemplate(percentTemplate)
+                    .generateUserId(integralDO.getUserId())
+                    .build();
+
+
+            // 直推奖记录
+            PtProfitLogSaveReqVO tjrLog = PtProfitLogSaveReqVO.builder()
+                    .orderId(k.getId())
+                    .profitStatus(CaclEnum.RECOMMENDED_PERSON_QUOTA.getType())
+                    .orderNo(k.getNo())
+                    .userId(sharePath.getAncestor())
+                    .amount(amount)
+                    .afterAmount(integralDOAncestor.getCurrentQuota())
+                    .freezeAmount(-amount)
+                    .afterFreezeAmount(integralDOAncestor.getFreezeQuota())
+                    .ancestorQuotaAmount(ptReplenish)
+                    .maxAvailablePointsAmount(-amount)
+                    .afterMaxAvailablePointsAmount(ancestorHighQuota - amount)
+                    .percentTemplate(percentTemplate)
+                    .generateUserId(integralDO.getUserId())
+                    .build();
+
+
+            // 用户自得记录 + 户冻结积分转化成可用 + 扣减最高可用额度记录
+            PtProfitLogSaveReqVO ztrLog = PtProfitLogSaveReqVO.builder()
+                    .orderId(k.getId())
+                    .profitStatus(CaclEnum.DIRECT_REFERRAL_QUOTA.getType())
+                    .orderNo(k.getNo())
+                    .userId(sharePath.getDescendant())
+                    .amount(descendantQuotaInt)
+                    .afterAmount(integralDO.getCurrentQuota())
+                    .freezeAmount(-descendantQuotaInt)
+                    .afterFreezeAmount(integralDO.getFreezeQuota())
+                    .maxAvailablePointsAmount(highQuotaInt)
+                    .afterMaxAvailablePointsAmount(integralDO.getHighQuota() + new BigDecimal(orderPercentageDO.getBaseMaxQuota()).longValue())
+                    .freezeHighQuota(-highQuotaInt)
+                    .afterFreezeHighQuota(integralDO.getFreezeHighQuota())
+                    .percentTemplate(percentTemplate)
+                    .generateUserId(integralDO.getUserId())
+                    .build();
+
+            ptProfitLogSaveReqVOS.add(ptTotal);
+            ptProfitLogSaveReqVOS.add(ptGrossAddLog);
+            ptProfitLogSaveReqVOS.add(ptAddLog);
+            ptProfitLogSaveReqVOS.add(tjrLog);
+            ptProfitLogSaveReqVOS.add(ztrLog);
+
+
+            PtProfitDO ptProfit = ptProfitService.getPtProfit();
+            // 计算总积分
+            Long total = ptProfitSaveReqVOS.stream().mapToLong(PtProfitSaveReqVO::getPtTotalAdd).sum();
+            Long add = ptProfitSaveReqVOS.stream().mapToLong(PtProfitSaveReqVO::getPtAdd).sum();
+            Long grossAdd = ptProfitSaveReqVOS.stream().mapToLong(PtProfitSaveReqVO::getPtGrossAdd).sum();
+            ptProfit.setPtAdd(ptProfit.getPtAdd() + add);
+            ptProfit.setPtTotalAdd(ptProfit.getPtTotalAdd() + total);
+            ptProfit.setPtGrossAdd(ptProfit.getPtGrossAdd() + grossAdd);
+            PtProfitSaveReqVO ptProfitSaveReqVO2 = PtProfitSaveReqVO.builder()
+                    .id(ptProfitDO.getId())
+                    .ptTotalAdd(ptProfit.getPtTotalAdd())
+                    .ptAdd(ptProfit.getPtAdd())
+                    .ptGrossAdd(ptProfit.getPtGrossAdd()).build();
+            ptProfitService.updatePtProfit(ptProfitSaveReqVO2);
+        });
+
+        // 信息整合
+        ptProfitLogService.saveBatch(ptProfitLogSaveReqVOS);
+    }
+
+    /**
+     * 在用户获取直推奖的时候溢出的需要加入到平台,并记录log
+     */
+    private void calcIntegral(List<PtProfitSaveReqVO> ptProfitSaveReqVOS, PtProfitSaveReqVO ptProfitSaveReqVO
+            , Long ancestorQuotaInt, Long orderId, String orderNo) {
+        ptProfitSaveReqVO.setPtGrossAdd(ptProfitSaveReqVO.getPtGrossAdd() + ancestorQuotaInt);
+        ptProfitSaveReqVO.setPtTotalAdd(ptProfitSaveReqVO.getPtGrossAdd() + ptProfitSaveReqVO.getPtAdd());
+
+        PtProfitLogSaveReqVO ptProfitLog = PtProfitLogSaveReqVO.builder()
+                .orderId(orderId)
+                .profitStatus(CaclEnum.GROSS_PROFIT_ANCESTOR_QUOTA_PERC_EXCEED_MAXIMUM_LIMIT.getType())
+                .orderNo(orderNo)
+                .amount(ancestorQuotaInt)
+                .afterAmount(ptProfitSaveReqVOS.stream().mapToLong(PtProfitSaveReqVO::getPtGrossAdd).sum() + ancestorQuotaInt)
+                .build();
+        ptProfitLogService.createPtProfitLog(ptProfitLog);
+    }
+
+    /**
+     * 修改用户钱包
+     *
+     * @param integralDO         当前用户钱包
+     * @param integralDOAncestor 推荐人钱包
+     * @param pt                 pt钱包
+     * @param ancestorQuota      推荐人额度
+     * @param descendantQuota    直推人额度
+     * @param highQuota          最大可用额度
+     * @param ptA                pt收益
+     * @param ptB                pt服务费
+     * @param ptReplenish        超出没有获取到的积分
+     */
+    private void changeUserWallet(IntegralDO integralDO, IntegralDO integralDOAncestor, IntegralDO pt,
+                                  Long ancestorQuota, Long descendantQuota, Long highQuota, Long ptA, Long ptB, Long ptReplenish) {
+        // 修改用户钱包
+        // 增加直推人额度
+        integralDO.setHighQuota(integralDO.getHighQuota() + highQuota);
+        //增加累计峰值
+        integralDO.setHighQuotaTotal(integralDO.getHighQuotaTotal() + highQuota);
+        integralDO.setFreezeHighQuota(integralDO.getFreezeHighQuota() - highQuota);
+
+        integralDO.setCurrentQuota(integralDO.getCurrentQuota() + descendantQuota);
+        integralDO.setFreezeQuota(integralDO.getFreezeQuota() - descendantQuota);
+        // 增加推荐人额度
+        integralDOAncestor.setCurrentQuota(integralDOAncestor.getCurrentQuota() + ancestorQuota);
+        // 减少推荐人的可获取额度
+        integralDOAncestor.setHighQuota(integralDOAncestor.getHighQuota() - ancestorQuota);
+        integralDOAncestor.setAncestorQuota(integralDOAncestor.getAncestorQuota() + ancestorQuota);
+        integralDOAncestor.setFreezeQuota(integralDOAncestor.getFreezeQuota() - ancestorQuota - ptReplenish);
+        integralService.updateIntegral(cn.newfeifan.mall.framework.common.util.object.BeanUtils.toBean(integralDOAncestor, IntegralSaveReqVO.class));
+
+        // 增加平台额度
+        pt.setCurrentQuota(pt.getCurrentQuota() + ptA + ptB);
+
+//        integralSaveReqVOS.add(BeanUtils.toBean(integralDO, IntegralSaveReqVO.class));
+//        integralSaveReqVOS.add(BeanUtils.toBean(integralDOAncestor, IntegralSaveReqVO.class));
+
+        integralService.updateIntegral(cn.newfeifan.mall.framework.common.util.object.BeanUtils.toBean(integralDO, IntegralSaveReqVO.class));
+        integralService.updateIntegral(cn.newfeifan.mall.framework.common.util.object.BeanUtils.toBean(pt, IntegralSaveReqVO.class));
+
+    }
+
+    // 获取当前订单的下单人的直推关系
+    public SharePathDO getSharePath(Long userId) {
+        return sharePathService.getSharePathByDescendant(userId);
+    }
+
 
     @Override
     @Transactional(rollbackFor = Exception.class)