From 1a14df829625e6a0e591501a883955740f6faf0b Mon Sep 17 00:00:00 2001
From: chen-xin-zhi <3588068430@qq.com>
Date: Thu, 15 May 2025 08:34:50 +0800
Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E7=AC=AC=E4=B8=80?=
 =?UTF-8?q?=E7=89=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../ProjectSettlementController.java          | 46 +++++++++++++++++--
 .../userInfo/UserInfoController.java          |  1 +
 .../dto/userInfo/UserInfoAddRequest.java      |  3 +-
 3 files changed, 45 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/greenorange/promotion/controller/projectSettlement/ProjectSettlementController.java b/src/main/java/com/greenorange/promotion/controller/projectSettlement/ProjectSettlementController.java
index 5d51017..6ac9948 100644
--- a/src/main/java/com/greenorange/promotion/controller/projectSettlement/ProjectSettlementController.java
+++ b/src/main/java/com/greenorange/promotion/controller/projectSettlement/ProjectSettlementController.java
@@ -15,7 +15,9 @@ import com.greenorange.promotion.model.dto.projectSettlement.ProjectSettlementUp
 import com.greenorange.promotion.model.entity.*;
 import com.greenorange.promotion.model.vo.projectSettlement.ProjectSettlementVO;
 import com.greenorange.promotion.service.common.CommonService;
+import com.greenorange.promotion.service.project.ProjectDetailService;
 import com.greenorange.promotion.service.project.PromoCodeApplyService;
+import com.greenorange.promotion.service.project.SubUserProjectCommissionService;
 import com.greenorange.promotion.service.settle.FundsChangeService;
 import com.greenorange.promotion.service.settle.ProjectSettlementService;
 import com.greenorange.promotion.service.userInfo.UserInfoService;
@@ -32,6 +34,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -63,6 +67,13 @@ public class ProjectSettlementController {
     @Resource
     private UserInfoService userInfoService;
 
+    @Resource
+    private ProjectDetailService projectDetailService;
+
+    @Resource
+    private SubUserProjectCommissionService subUserProjectCommissionService;
+
+
 
     /**
      * 小程序端用户根据推广码申请记录id查询结算记录
@@ -111,9 +122,8 @@ public class ProjectSettlementController {
         projectSettlementService.save(projectSettlement);
 
         // 查询对应的推广码申请记录
-        Long pid = projectSettlement.getPromoCodeApplyId();
-        LambdaQueryWrapper<PromoCodeApply> lambdaQueryWrapper = commonService.buildQueryWrapperByField(PromoCodeApply::getId, pid, promoCodeApplyService);
-        PromoCodeApply promoCodeApply = promoCodeApplyService.getOne(lambdaQueryWrapper);
+        Long applyId = projectSettlement.getPromoCodeApplyId();
+        PromoCodeApply promoCodeApply = promoCodeApplyService.getById(applyId);
         // 获取推广码申请记录的参数
         String projectName = promoCodeApply.getProjectName();
         Long userId = promoCodeApply.getUserId();
@@ -122,8 +132,36 @@ public class ProjectSettlementController {
         // 获取项目结算记录的参数
         BigDecimal settlementRevenue = projectSettlement.getSettlementRevenue();
         Long projectSettlementId = projectSettlement.getId();
-
+        // 获取项目明细的结算价格
+        Long projectDetailId = projectSettlement.getProjectDetailId();
+        ProjectDetail projectDetail = projectDetailService.getById(projectDetailId);
+        BigDecimal projectSettlementPrice = projectDetail.getProjectSettlementPrice();
+        BigDecimal projectMinSettlementPrice = projectDetail.getProjectMinSettlementPrice();
         // 批量添加上级用户的项目结算记录
+        List<SubUserProjectCommission> subUserProjectCommissionList = commonService.findByFieldEqTargetField(SubUserProjectCommission::getProjectDetailId, projectDetailId, subUserProjectCommissionService);
+        // 封装Map集合(键:用户id-下级用户id,值:抽佣价格)
+        Map<String, BigDecimal> subUserProjectCommissionMap = new HashMap<>();
+        for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissionList) {
+            Long uid = subUserProjectCommission.getUserId();
+            Long subUid = subUserProjectCommission.getSubUserId();
+            BigDecimal myUnitPrice = subUserProjectCommission.getMyUnitPrice();
+            BigDecimal currentCommissionRate = subUserProjectCommission.getCurrentCommissionRate();
+            subUserProjectCommissionMap.put(uid + "-" + subUid, myUnitPrice.multiply(currentCommissionRate));
+        }
+        List<ProjectSettlement> projectSettlementList = new ArrayList<>();
+        // 获取当前用户到根用户的路径
+        List<Long> pathToRoot = userInfoService.findPathToRoot(userId);
+        for (int i = 0; i < pathToRoot.size() - 1; i ++ ) {
+            Long uid = pathToRoot.get(i);
+            Long subUid = pathToRoot.get(i + 1);
+            BigDecimal commissionRatePrice = subUserProjectCommissionMap.get(uid + "-" + subUid);
+            ProjectSettlement projectSettle = commonService.copyProperties(projectSettlementAddRequest, ProjectSettlement.class);
+            projectSettle.setSettlementRevenue(commissionRatePrice);
+            projectSettle.setRevenueSource(true);
+            projectSettle.setSuperId(projectSettlementId);
+            projectSettlementList.add(projectSettle);
+        }
+        projectSettlementService.saveBatch(projectSettlementList);
 
         // 添加资金变动记录
         FundsChange fundsChange = FundsChange.builder()
diff --git a/src/main/java/com/greenorange/promotion/controller/userInfo/UserInfoController.java b/src/main/java/com/greenorange/promotion/controller/userInfo/UserInfoController.java
index 6a2ba97..3a0aa4b 100644
--- a/src/main/java/com/greenorange/promotion/controller/userInfo/UserInfoController.java
+++ b/src/main/java/com/greenorange/promotion/controller/userInfo/UserInfoController.java
@@ -288,6 +288,7 @@ public class UserInfoController {
     @SysLog(title = "用户管理", content = "web端管理员添加用户")
     public BaseResponse<Boolean> addUserInfo(@Valid @RequestBody UserInfoAddRequest userInfoAddRequest) {
         UserInfo userInfo = commonService.copyProperties(userInfoAddRequest, UserInfo.class);
+        userInfo.setParentUserId(-1L);
         userInfoService.save(userInfo);
         return ResultUtils.success(true);
     }
diff --git a/src/main/java/com/greenorange/promotion/model/dto/userInfo/UserInfoAddRequest.java b/src/main/java/com/greenorange/promotion/model/dto/userInfo/UserInfoAddRequest.java
index 8b87074..ba52660 100644
--- a/src/main/java/com/greenorange/promotion/model/dto/userInfo/UserInfoAddRequest.java
+++ b/src/main/java/com/greenorange/promotion/model/dto/userInfo/UserInfoAddRequest.java
@@ -4,6 +4,7 @@ import com.greenorange.promotion.annotation.UserEnumValue;
 import com.greenorange.promotion.model.enums.UserRoleEnum;
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Pattern;
 import jakarta.validation.constraints.Size;
 import lombok.Data;
 
@@ -58,7 +59,7 @@ public class UserInfoAddRequest implements Serializable {
     /**
      * 用户角色
      */
-    @UserEnumValue(enumClass = UserRoleEnum.class)
+    @Pattern(regexp = "admin", message = "用户角色只能为 admin")
     @Schema(description = "用户角色", example = "user")
     private String userRole;