项目明细调整

This commit is contained in:
chen-xin-zhi 2025-05-10 15:28:41 +08:00
parent a79cd3d502
commit 2ad1060fab
14 changed files with 270 additions and 62 deletions

View File

@ -23,6 +23,7 @@ import com.greenorange.promotion.model.dto.projectNotification.ProjectNotificati
import com.greenorange.promotion.model.entity.Project; import com.greenorange.promotion.model.entity.Project;
import com.greenorange.promotion.model.entity.ProjectDetail; import com.greenorange.promotion.model.entity.ProjectDetail;
import com.greenorange.promotion.model.entity.ProjectNotification; import com.greenorange.promotion.model.entity.ProjectNotification;
import com.greenorange.promotion.model.vo.project.ProjectPageVO;
import com.greenorange.promotion.model.vo.project.ProjectVO; import com.greenorange.promotion.model.vo.project.ProjectVO;
import com.greenorange.promotion.service.common.CommonService; import com.greenorange.promotion.service.common.CommonService;
import com.greenorange.promotion.service.project.ProjectDetailService; import com.greenorange.promotion.service.project.ProjectDetailService;
@ -101,20 +102,20 @@ public class ProjectController {
return ResultUtils.success(true); return ResultUtils.success(true);
} }
/** // /**
* web端管理员批量删除项目 // * web端管理员批量删除项目
* @param commonBatchRequest 项目批量删除请求体 // * @param commonBatchRequest 项目批量删除请求体
* @return 是否删除成功 // * @return 是否删除成功
*/ // */
@PostMapping("delBatch") // @PostMapping("delBatch")
@Operation(summary = "web端管理员批量删除项目", description = "参数项目批量删除请求体权限管理员方法名delBatchProject") // @Operation(summary = "web端管理员批量删除项目", description = "参数项目批量删除请求体权限管理员方法名delBatchProject")
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) // @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
@SysLog(title = "项目管理", content = "web端管理员批量删除项目") // @SysLog(title = "项目管理", content = "web端管理员批量删除项目")
public BaseResponse<Boolean> delBatchProject(@Valid @RequestBody CommonBatchRequest commonBatchRequest) { // public BaseResponse<Boolean> delBatchProject(@Valid @RequestBody CommonBatchRequest commonBatchRequest) {
List<Long> ids = commonBatchRequest.getIds(); // List<Long> ids = commonBatchRequest.getIds();
projectService.removeByIds(ids); // projectService.removeByIds(ids);
return ResultUtils.success(true); // return ResultUtils.success(true);
} // }
/** /**
* web端管理员根据id查询项目 * web端管理员根据id查询项目
@ -142,15 +143,15 @@ public class ProjectController {
@Operation(summary = "Web端管理员分页查询项目", description = "参数项目查询请求体权限管理员方法名listProjectByPage") @Operation(summary = "Web端管理员分页查询项目", description = "参数项目查询请求体权限管理员方法名listProjectByPage")
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
@SysLog(title = "项目管理", content = "Web端管理员分页查询项目") @SysLog(title = "项目管理", content = "Web端管理员分页查询项目")
public BaseResponse<Page<ProjectVO>> listProjectByPage(@Valid @RequestBody ProjectQueryRequest projectQueryRequest) { public BaseResponse<Page<ProjectPageVO>> listProjectByPage(@Valid @RequestBody ProjectQueryRequest projectQueryRequest) {
long current = projectQueryRequest.getCurrent(); long current = projectQueryRequest.getCurrent();
long pageSize = projectQueryRequest.getPageSize(); long pageSize = projectQueryRequest.getPageSize();
QueryWrapper<Project> queryWrapper = projectService.getQueryWrapper(projectQueryRequest); QueryWrapper<Project> queryWrapper = projectService.getQueryWrapper(projectQueryRequest);
Page<Project> page = projectService.page(new Page<>(current, pageSize), queryWrapper); Page<Project> page = projectService.page(new Page<>(current, pageSize), queryWrapper);
List<Project> projectList = page.getRecords(); List<Project> projectList = page.getRecords();
List<ProjectVO> projectVOList = commonService.convertList(projectList, ProjectVO.class); List<ProjectPageVO> projectPageVOS = commonService.convertList(projectList, ProjectPageVO.class);
Page<ProjectVO> voPage = new Page<>(current, pageSize); Page<ProjectPageVO> voPage = new Page<>(current, pageSize);
voPage.setRecords(projectVOList); voPage.setRecords(projectPageVOS);
voPage.setPages(page.getPages()); voPage.setPages(page.getPages());
voPage.setTotal(page.getTotal()); voPage.setTotal(page.getTotal());
return ResultUtils.success(voPage); return ResultUtils.success(voPage);

View File

@ -10,13 +10,19 @@ import com.greenorange.promotion.common.ResultUtils;
import com.greenorange.promotion.constant.UserConstant; import com.greenorange.promotion.constant.UserConstant;
import com.greenorange.promotion.exception.ThrowUtils; import com.greenorange.promotion.exception.ThrowUtils;
import com.greenorange.promotion.model.dto.CommonBatchRequest; import com.greenorange.promotion.model.dto.CommonBatchRequest;
import com.greenorange.promotion.model.dto.projectCommission.ProjectCommissionAddRequest;
import com.greenorange.promotion.model.dto.projectCommission.ProjectCommissionUpdateRequest;
import com.greenorange.promotion.model.dto.projectDetail.ProjectDetailAddRequest; import com.greenorange.promotion.model.dto.projectDetail.ProjectDetailAddRequest;
import com.greenorange.promotion.model.dto.projectDetail.ProjectDetailQueryRequest; import com.greenorange.promotion.model.dto.projectDetail.ProjectDetailQueryRequest;
import com.greenorange.promotion.model.dto.projectDetail.ProjectDetailUpdateRequest; import com.greenorange.promotion.model.dto.projectDetail.ProjectDetailUpdateRequest;
import com.greenorange.promotion.model.entity.ProjectDetail; import com.greenorange.promotion.model.dto.subUserProjectCommission.SubUserProjectCommissionAddRequest;
import com.greenorange.promotion.model.entity.*;
import com.greenorange.promotion.model.vo.projectDetail.ProjectDetailVO; import com.greenorange.promotion.model.vo.projectDetail.ProjectDetailVO;
import com.greenorange.promotion.service.common.CommonService; import com.greenorange.promotion.service.common.CommonService;
import com.greenorange.promotion.service.project.ProjectCommissionService;
import com.greenorange.promotion.service.project.ProjectDetailService; import com.greenorange.promotion.service.project.ProjectDetailService;
import com.greenorange.promotion.service.project.SubUserProjectCommissionService;
import com.greenorange.promotion.service.user.UserInfoService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@ -29,7 +35,9 @@ import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/** /**
@ -47,6 +55,15 @@ public class ProjectDetailController {
@Resource @Resource
private CommonService commonService; private CommonService commonService;
@Resource
private ProjectCommissionService projectCommissionService;
@Resource
private SubUserProjectCommissionService subUserProjectCommissionService;
@Resource
private UserInfoService userInfoService;
/** /**
* web端管理员添加项目明细 * web端管理员添加项目明细
* @param projectDetailAddRequest 项目明细添加请求体 * @param projectDetailAddRequest 项目明细添加请求体
@ -59,6 +76,47 @@ public class ProjectDetailController {
public BaseResponse<Boolean> addProjectDetail(@Valid @RequestBody ProjectDetailAddRequest projectDetailAddRequest) { public BaseResponse<Boolean> addProjectDetail(@Valid @RequestBody ProjectDetailAddRequest projectDetailAddRequest) {
ProjectDetail projectDetail = commonService.copyProperties(projectDetailAddRequest, ProjectDetail.class); ProjectDetail projectDetail = commonService.copyProperties(projectDetailAddRequest, ProjectDetail.class);
projectDetailService.save(projectDetail); projectDetailService.save(projectDetail);
// 获取所有的小程序用户
LambdaQueryWrapper<UserInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(UserInfo::getUserRole, UserConstant.DEFAULT_ROLE);
List<UserInfo> userInfoList = userInfoService.list(lambdaQueryWrapper);
// 获取参数信息
List<ProjectCommissionAddRequest> projectCommissionAddRequestList = new ArrayList<>();
Long projectDetailId = projectDetail.getId();
BigDecimal projectSettlementPrice = projectDetail.getProjectSettlementPrice();
Long projectId = projectDetail.getProjectId();
// 给所有用户添加一条项目明细
for (UserInfo userInfo : userInfoList) {
ProjectCommissionAddRequest projectCommissionAddRequest = ProjectCommissionAddRequest.builder()
.projectDetailId(projectDetailId)
.myUnitPrice(projectSettlementPrice)
.projectId(projectId)
.userId(userInfo.getId())
.build();
projectCommissionAddRequestList.add(projectCommissionAddRequest);
}
List<ProjectCommission> projectCommissions = commonService.convertList(projectCommissionAddRequestList, ProjectCommission.class);
projectCommissionService.saveBatch(projectCommissions);
// 给所有用户添加一条下级项目明细抽佣表
userInfoList = userInfoList.stream().filter(userInfo -> userInfo.getParentUserId() != null).collect(Collectors.toList());
List<SubUserProjectCommissionAddRequest> subUserProjectCommissionAddRequestList = new ArrayList<>();
for (UserInfo userInfo : userInfoList) {
SubUserProjectCommissionAddRequest subUserProjectCommissionAddRequest = SubUserProjectCommissionAddRequest.builder()
.projectDetailId(projectDetailId)
.myUnitPrice(projectSettlementPrice)
.projectId(projectId)
.subUserId(userInfo.getId())
.userId(userInfo.getParentUserId())
.build();
subUserProjectCommissionAddRequestList.add(subUserProjectCommissionAddRequest);
}
List<SubUserProjectCommission> subUserProjectCommissions = commonService.convertList(subUserProjectCommissionAddRequestList, SubUserProjectCommission.class);
subUserProjectCommissionService.saveBatch(subUserProjectCommissions);
return ResultUtils.success(true); return ResultUtils.success(true);
} }
@ -73,7 +131,58 @@ public class ProjectDetailController {
@SysLog(title = "项目明细管理", content = "web端管理员根据id修改项目明细信息") @SysLog(title = "项目明细管理", content = "web端管理员根据id修改项目明细信息")
public BaseResponse<Boolean> updateProjectDetail(@Valid @RequestBody ProjectDetailUpdateRequest projectDetailUpdateRequest) { public BaseResponse<Boolean> updateProjectDetail(@Valid @RequestBody ProjectDetailUpdateRequest projectDetailUpdateRequest) {
ProjectDetail projectDetail = commonService.copyProperties(projectDetailUpdateRequest, ProjectDetail.class); ProjectDetail projectDetail = commonService.copyProperties(projectDetailUpdateRequest, ProjectDetail.class);
// 1.更新项目明细的结算价格
projectDetailService.updateById(projectDetail); projectDetailService.updateById(projectDetail);
// 2.更新抽佣比例如果抽佣比例比原来小
LambdaQueryWrapper<SubUserProjectCommission> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(SubUserProjectCommission::getProjectDetailId, projectDetail.getId());
List<SubUserProjectCommission> subUserProjectCommissionList = subUserProjectCommissionService.list(lambdaQueryWrapper);
for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissionList) {
BigDecimal currentCommissionRate = subUserProjectCommission.getCurrentCommissionRate();
BigDecimal maxCommissionRate = projectDetail.getMaxCommissionRate();
if (currentCommissionRate.compareTo(maxCommissionRate) > 0) subUserProjectCommission.setCurrentCommissionRate(maxCommissionRate);
}
// 3.用Map集合存储上级用户对下级用户的抽佣比例
Map<String, BigDecimal> commissionRateMap = new HashMap<>();
for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissionList) {
Long userId = subUserProjectCommission.getUserId();
Long subUserId = subUserProjectCommission.getSubUserId();
BigDecimal currentCommissionRate = subUserProjectCommission.getCurrentCommissionRate();
String key = userId + "-" + subUserId;
commissionRateMap.put(key, currentCommissionRate);
}
// 获取所有的小程序用户
LambdaQueryWrapper<UserInfo> userInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
userInfoLambdaQueryWrapper.eq(UserInfo::getUserRole, UserConstant.DEFAULT_ROLE);
List<UserInfo> userInfoList = userInfoService.list(userInfoLambdaQueryWrapper);
// 用来存储每个用户的上级列表
Map<Long, List<Long>> userParentMap = new HashMap<>();
for (UserInfo userInfo : userInfoList) {
String superUserList = userInfo.getSuperUserList();
if (superUserList != null) userParentMap.put(userInfo.getId(), Arrays.stream(superUserList.split(",")).map(Long::parseLong).collect(Collectors.toList()));
}
// 4.更新所有用户的结算价格
for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissionList) {
Long userId = subUserProjectCommission.getUserId();
List<Long> parentIds = userParentMap.get(userId);
parentIds.add(userId);
BigDecimal totalRate = BigDecimal.ONE;
for (int i = 0; i < parentIds.size() - 1; i ++ ) {
String key = parentIds.get(i) + "-" + parentIds.get(i + 1);
BigDecimal commissionRate = commissionRateMap.get(key);
totalRate = totalRate.multiply(BigDecimal.ONE.subtract(commissionRate));
}
BigDecimal projectSettlementPrice = projectDetail.getProjectSettlementPrice();
BigDecimal projectMinSettlementPrice = projectDetail.getProjectMinSettlementPrice();
BigDecimal finallySettlementPrice = projectSettlementPrice.multiply(totalRate);
if (finallySettlementPrice.compareTo(projectMinSettlementPrice) < 0) finallySettlementPrice = projectMinSettlementPrice;
subUserProjectCommission.setMyUnitPrice(finallySettlementPrice);
}
subUserProjectCommissionService.updateBatchById(subUserProjectCommissionList);
// 修改对应的项目明细抽佣记录
return ResultUtils.success(true); return ResultUtils.success(true);
} }
@ -89,6 +198,15 @@ public class ProjectDetailController {
public BaseResponse<Boolean> delProjectDetail(@Valid @RequestBody CommonRequest commonRequest) { public BaseResponse<Boolean> delProjectDetail(@Valid @RequestBody CommonRequest commonRequest) {
Long id = commonRequest.getId(); Long id = commonRequest.getId();
projectDetailService.removeById(id); projectDetailService.removeById(id);
// 删除对应的项目明细抽佣记录
LambdaQueryWrapper<ProjectCommission> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(ProjectCommission::getProjectDetailId, id);
projectCommissionService.remove(lambdaQueryWrapper);
// 删除对应的下级用户的项目明细抽佣记录
LambdaQueryWrapper<SubUserProjectCommission> subUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
subUserLambdaQueryWrapper.eq(SubUserProjectCommission::getProjectDetailId, id);
subUserProjectCommissionService.remove(subUserLambdaQueryWrapper);
return ResultUtils.success(true); return ResultUtils.success(true);
} }

View File

@ -89,6 +89,9 @@ public class PromoCodeController {
@SysLog(title = "推广码管理", content = "web端管理员根据id删除推广码") @SysLog(title = "推广码管理", content = "web端管理员根据id删除推广码")
public BaseResponse<Boolean> delPromoCode(@Valid @RequestBody CommonRequest commonRequest) { public BaseResponse<Boolean> delPromoCode(@Valid @RequestBody CommonRequest commonRequest) {
Long id = commonRequest.getId(); Long id = commonRequest.getId();
PromoCode promoCode = promoCodeService.getById(id);
Boolean promoCodeStatus = promoCode.getPromoCodeStatus();
ThrowUtils.throwIf(promoCodeStatus, ErrorCode.OPERATION_ERROR, "当前推广码正在使用中,无法删除");
promoCodeService.removeById(id); promoCodeService.removeById(id);
return ResultUtils.success(true); return ResultUtils.success(true);
} }
@ -104,6 +107,10 @@ public class PromoCodeController {
@SysLog(title = "推广码管理", content = "web端管理员批量删除推广码") @SysLog(title = "推广码管理", content = "web端管理员批量删除推广码")
public BaseResponse<Boolean> delBatchPromoCode(@Valid @RequestBody CommonBatchRequest commonBatchRequest) { public BaseResponse<Boolean> delBatchPromoCode(@Valid @RequestBody CommonBatchRequest commonBatchRequest) {
List<Long> ids = commonBatchRequest.getIds(); List<Long> ids = commonBatchRequest.getIds();
LambdaQueryWrapper<PromoCode> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(PromoCode::getId, ids).eq(PromoCode::getPromoCodeStatus, true);
List<PromoCode> promoCodeList = promoCodeService.list(lambdaQueryWrapper);
ThrowUtils.throwIf(promoCodeList.size() > 0, ErrorCode.OPERATION_ERROR, "当前推广码正在使用中,无法删除");
promoCodeService.removeByIds(ids); promoCodeService.removeByIds(ids);
return ResultUtils.success(true); return ResultUtils.success(true);
} }

View File

@ -3,7 +3,10 @@ package com.greenorange.promotion.model.dto.projectCommission;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Min; import jakarta.validation.constraints.Min;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
@ -20,6 +23,9 @@ import java.math.BigDecimal;
"projectId", "projectId",
"userId", "userId",
}) })
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ProjectCommissionAddRequest implements Serializable { public class ProjectCommissionAddRequest implements Serializable {
/** /**

View File

@ -45,7 +45,7 @@ public class ProjectDetailAddRequest implements Serializable {
* 最大抽佣比例 * 最大抽佣比例
*/ */
@Schema(description = "最大抽佣比例", example = "2") @Schema(description = "最大抽佣比例", example = "2")
private Integer maxCommissionRate; private BigDecimal maxCommissionRate;
/** /**
* 项目ID * 项目ID

View File

@ -48,7 +48,7 @@ public class ProjectDetailQueryRequest extends PageRequest implements Serializab
* 最大抽佣比例 * 最大抽佣比例
*/ */
@Schema(description = "最大抽佣比例", example = "2") @Schema(description = "最大抽佣比例", example = "2")
private Integer maxCommissionRate; private BigDecimal maxCommissionRate;
/** /**
* 项目ID * 项目ID

View File

@ -53,7 +53,7 @@ public class ProjectDetailUpdateRequest implements Serializable {
* 最大抽佣比例 * 最大抽佣比例
*/ */
@Schema(description = "最大抽佣比例", example = "2") @Schema(description = "最大抽佣比例", example = "2")
private Integer maxCommissionRate; private BigDecimal maxCommissionRate;
/** /**
* 项目ID * 项目ID

View File

@ -3,7 +3,10 @@ package com.greenorange.promotion.model.dto.subUserProjectCommission;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Min; import jakarta.validation.constraints.Min;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
@ -21,6 +24,9 @@ import java.math.BigDecimal;
"projectId", "projectId",
"userId", "userId",
}) })
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class SubUserProjectCommissionAddRequest implements Serializable { public class SubUserProjectCommissionAddRequest implements Serializable {
/** /**

View File

@ -40,7 +40,7 @@ public class ProjectDetail implements Serializable {
/** /**
* 最大抽佣比例 * 最大抽佣比例
*/ */
private Integer maxCommissionRate; private BigDecimal maxCommissionRate;
/** /**
* 项目ID * 项目ID

View File

@ -37,7 +37,7 @@ public class PromoCode implements Serializable {
private Long projectId; private Long projectId;
/** /**
* 推广码状态 * 推广码状态(true:占用false:空闲)
*/ */
private Boolean promoCodeStatus; private Boolean promoCodeStatus;

View File

@ -0,0 +1,71 @@
package com.greenorange.promotion.model.vo.project;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class ProjectPageVO implements Serializable {
/**
* 项目 ID
*/
@Schema(description = "项目 ID", example = "1")
private Long id;
/**
* 项目名称
*/
@Schema(description = "项目名称", example = "美团省钱包")
private String projectName;
/**
* 项目价格
*/
@Schema(description = "项目价格", example = "6.88")
private BigDecimal projectPrice;
/**
* 当前推广人数
*/
@Schema(description = "当前推广人数", example = "10")
private Integer currentPromotionCount;
/**
* 项目图片URL
*/
@Schema(description = "项目图片URL", example = "http://xxx.png")
private String projectImage;
/**
* 项目结算周期
*/
@Schema(description = "项目结算周期", example = "2")
private Integer projectSettlementCycle;
/**
* 最大推广人数
*/
@Schema(description = "最大推广人数", example = "200")
private Integer maxPromoterCount;
/**
* 项目状态[项目运行(running)|人数已满(full)|项目暂停(paused)]
*/
@Schema(description = "项目状态[项目运行(running)|人数已满(full)|项目暂停(paused)]", example = "running")
private String projectStatus;
/**
* 是否上架
*/
@Schema(description = "是否上架", example = "true")
private Boolean isShelves;
@Serial
private static final long serialVersionUID = 1L;
}

View File

@ -27,18 +27,30 @@ public class ProjectVO implements Serializable {
@Schema(description = "项目名称", example = "美团省钱包") @Schema(description = "项目名称", example = "美团省钱包")
private String projectName; private String projectName;
/**
* 项目价格
*/
@Schema(description = "项目价格", example = "0.72")
private BigDecimal projectPrice;
/** /**
* 项目图片URL * 项目图片URL
*/ */
@Schema(description = "项目图片URL", example = "http://xxx.png") @Schema(description = "项目图片URL", example = "http://xxx.png")
private String projectImage; private String projectImage;
/**
* 项目结算周期
*/
@Schema(description = "项目结算周期", example = "2")
private Integer projectSettlementCycle;
/**
* 最大推广人数
*/
@Schema(description = "最大推广人数", example = "200")
private Integer maxPromoterCount;
/**
* 项目状态[项目运行(running)|人数已满(full)|项目暂停(paused)]
*/
@Schema(description = "项目状态[项目运行(running)|人数已满(full)|项目暂停(paused)]", example = "running")
private String projectStatus;
/** /**
* 项目简介 * 项目简介
*/ */
@ -69,36 +81,6 @@ public class ProjectVO implements Serializable {
@Schema(description = "申请推广码说明(富文本)", example = "富文本") @Schema(description = "申请推广码说明(富文本)", example = "富文本")
private String applyPromoCodeDesc; private String applyPromoCodeDesc;
/**
* 项目结算周期
*/
@Schema(description = "项目结算周期", example = "2")
private Integer projectSettlementCycle;
/**
* 当前推广人数
*/
@Schema(description = "当前推广人数", example = "150")
private Integer currentPromotionCount;
/**
* 最大推广人数
*/
@Schema(description = "最大推广人数", example = "200")
private Integer maxPromoterCount;
/**
* 项目状态[项目运行(running)|人数已满(full)|项目暂停(paused)]
*/
@Schema(description = "项目状态[项目运行(running)|人数已满(full)|项目暂停(paused)]", example = "running")
private String projectStatus;
/**
* 是否上架
*/
@Schema(description = "是否上架", example = "1")
private Boolean isShelves;
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -44,7 +44,7 @@ public class ProjectDetailVO implements Serializable {
* 最大抽佣比例 * 最大抽佣比例
*/ */
@Schema(description = "最大抽佣比例", example = "2") @Schema(description = "最大抽佣比例", example = "2")
private Integer maxCommissionRate; private BigDecimal maxCommissionRate;
/** /**
* 项目ID * 项目ID

View File

@ -0,0 +1,17 @@
package com.greenorange.promotion.bigdecimal;
import org.junit.jupiter.api.Test;
import java.math.BigDecimal;
public class BT {
@Test
public void test() {
BigDecimal b1 = new BigDecimal("0.72");
BigDecimal b2 = new BigDecimal("0.66");
BigDecimal b3 = new BigDecimal("0.44");
System.out.println(b1.multiply(b2).multiply(b3).multiply(b1).multiply(b1).multiply(b2));
}
}