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 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 subUserProjectCommissionList = commonService.findByFieldEqTargetField(SubUserProjectCommission::getProjectDetailId, projectDetailId, subUserProjectCommissionService); + // 封装Map集合(键:用户id-下级用户id,值:抽佣价格) + Map 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 projectSettlementList = new ArrayList<>(); + // 获取当前用户到根用户的路径 + List 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 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;