修复的功能

1.web端管理员添加项目明细后,项目明细价格根据小程序用户的抽佣比例自动调整
This commit is contained in:
2025-06-16 10:25:41 +08:00
parent d18d87f81d
commit 460dced912
5 changed files with 218 additions and 72 deletions

View File

@ -22,6 +22,7 @@ import com.greenorange.promotion.service.project.ProjectDetailService;
import com.greenorange.promotion.service.project.ProjectService; import com.greenorange.promotion.service.project.ProjectService;
import com.greenorange.promotion.service.project.SubUserProjectCommissionService; import com.greenorange.promotion.service.project.SubUserProjectCommissionService;
import com.greenorange.promotion.service.userInfo.UserInfoService; import com.greenorange.promotion.service.userInfo.UserInfoService;
import com.greenorange.promotion.service.userInfo.UserMainInfoService;
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;
@ -65,6 +66,9 @@ public class ProjectDetailController {
@Resource @Resource
private ProjectService projectService; private ProjectService projectService;
@Resource
private UserMainInfoService userMainInfoService;
/** /**
* web端管理员添加项目明细 * web端管理员添加项目明细
* @param projectDetailAddRequest 项目明细添加请求体 * @param projectDetailAddRequest 项目明细添加请求体
@ -89,6 +93,13 @@ public class ProjectDetailController {
// 获取所有的小程序用户 // 获取所有的小程序用户
List<UserInfo> userInfoList = commonService.findByFieldEqTargetField(UserInfo::getUserRole, UserConstant.DEFAULT_ROLE, userInfoService); List<UserInfo> userInfoList = commonService.findByFieldEqTargetField(UserInfo::getUserRole, UserConstant.DEFAULT_ROLE, userInfoService);
List<UserMainInfo> userMainInfoList = commonService.findByFieldInTargetField(userInfoList, userMainInfoService, UserInfo::getId, UserMainInfo::getUserId);
// 封装Map(键用户id, 值:抽佣比例)
Map<Long, BigDecimal> userCommissionRateMap = new HashMap<>();
for (UserMainInfo userMainInfo : userMainInfoList) {
userCommissionRateMap.put(userMainInfo.getUserId(), userMainInfo.getUniteRate());
}
// 获取参数信息 // 获取参数信息
List<ProjectCommissionAddRequest> projectCommissionAddRequestList = new ArrayList<>(); List<ProjectCommissionAddRequest> projectCommissionAddRequestList = new ArrayList<>();
Long projectDetailId = projectDetail.getId(); Long projectDetailId = projectDetail.getId();
@ -106,7 +117,11 @@ public class ProjectDetailController {
projectCommissionAddRequestList.add(projectCommissionAddRequest); projectCommissionAddRequestList.add(projectCommissionAddRequest);
} }
List<ProjectCommission> projectCommissions = commonService.convertList(projectCommissionAddRequestList, ProjectCommission.class); List<ProjectCommission> projectCommissions = commonService.convertList(projectCommissionAddRequestList, ProjectCommission.class);
projectCommissionService.saveBatch(projectCommissions); List<SubUserProjectCommission> userProjectCommissions = commonService.convertList(projectCommissions, SubUserProjectCommission.class);
for (SubUserProjectCommission userProjectCommission : userProjectCommissions) {
userProjectCommission.setSubUserId(-1L);
}
// projectCommissionService.saveBatch(projectCommissions);
// 给所有用户添加一条下级项目明细抽佣表 // 给所有用户添加一条下级项目明细抽佣表
List<SubUserProjectCommissionAddRequest> subUserProjectCommissionAddRequestList = new ArrayList<>(); List<SubUserProjectCommissionAddRequest> subUserProjectCommissionAddRequestList = new ArrayList<>();
@ -122,80 +137,119 @@ public class ProjectDetailController {
subUserProjectCommissionAddRequestList.add(subUserProjectCommissionAddRequest); subUserProjectCommissionAddRequestList.add(subUserProjectCommissionAddRequest);
} }
List<SubUserProjectCommission> subUserProjectCommissions = commonService.convertList(subUserProjectCommissionAddRequestList, SubUserProjectCommission.class); List<SubUserProjectCommission> subUserProjectCommissions = commonService.convertList(subUserProjectCommissionAddRequestList, SubUserProjectCommission.class);
subUserProjectCommissionService.saveBatch(subUserProjectCommissions); // subUserProjectCommissionService.saveBatch(subUserProjectCommissions);
subUserProjectCommissions.addAll(userProjectCommissions);
return ResultUtils.success(true); // 对抽佣记录进行排序
} projectCommissionService.sortSubProjectCommissions(subUserProjectCommissions);
// 设置抽佣比例和单价
/**
* web端管理员根据id修改项目明细信息
* @param projectDetailUpdateRequest 项目明细更新请求体
* @return 是否更新成功
*/
@PostMapping("update")
@Operation(summary = "web端管理员更新项目明细", description = "参数项目明细更新请求体权限管理员方法名updateProjectDetail")
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
@SysLog(title = "项目明细管理", content = "web端管理员根据id修改项目明细信息")
public BaseResponse<Boolean> updateProjectDetail(@Valid @RequestBody ProjectDetailUpdateRequest projectDetailUpdateRequest) {
// 更新项目明细的结算价格
Long projectDetailId = projectDetailUpdateRequest.getId();
ProjectDetail sourceProjectDetail = projectDetailService.getById(projectDetailId);
ProjectDetail projectDetail = commonService.copyProperties(projectDetailUpdateRequest, ProjectDetail.class);
// 1.更新项目明细的结算价格
projectDetailService.updateById(projectDetail);
// 更新项目的价格
Long projectId = projectDetail.getProjectId();
Project project = projectService.getById(projectId);
project.setProjectPrice(project.getProjectPrice().subtract(sourceProjectDetail.getProjectSettlementPrice()).add(projectDetail.getProjectSettlementPrice()));
projectService.updateById(project);
// 2.更新抽佣比例(如果抽佣比例比原来小)
List<SubUserProjectCommission> subUserProjectCommissionList = commonService.findByFieldEqTargetField(SubUserProjectCommission::getProjectDetailId, projectDetail.getId(), subUserProjectCommissionService);
for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissionList) {
BigDecimal currentCommissionRate = subUserProjectCommission.getCurrentCommissionRate();
BigDecimal maxCommissionRate = projectDetail.getMaxCommissionRate();
if (currentCommissionRate.compareTo(maxCommissionRate) > 0) subUserProjectCommission.setCurrentCommissionRate(maxCommissionRate);
}
// 将下级用户项目明细抽佣列表根据父级用户id进行排序升序
subUserProjectCommissionList.sort(Comparator.comparing(SubUserProjectCommission::getUserId));
// 更新下级用户项目明细抽佣表记录
BigDecimal projectSettlementPrice = projectDetail.getProjectSettlementPrice();
BigDecimal projectMinSettlementPrice = projectDetail.getProjectMinSettlementPrice();
// 封装Map集合下级用户id下级用户单价 // 封装Map集合下级用户id下级用户单价
Map<Long, BigDecimal> subUserUnitPriceMap = new HashMap<>(); Map<Long, BigDecimal> subUserProjectCommissionMap = new HashMap<>();
// 获取小程序用户的根用户 for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissions) {
List<UserInfo> userInfoList = commonService.findByFieldEqTargetField(UserInfo::getUserRole, UserConstant.DEFAULT_ROLE, userInfoService);
UserInfo rootUserInfo = userInfoList.get(0);
// 存储根用户的单价
subUserUnitPriceMap.put(rootUserInfo.getId(), projectSettlementPrice);
for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissionList) {
// 记录上级用户的对下级用户的抽佣比例
BigDecimal currentCommissionRate = subUserProjectCommission.getCurrentCommissionRate();
Long userId = subUserProjectCommission.getUserId(); Long userId = subUserProjectCommission.getUserId();
Long subUserId = subUserProjectCommission.getSubUserId(); Long subUserId = subUserProjectCommission.getSubUserId();
// 获取当前用户的单价,并将当前记录修改为当前用户的单价 // 设置抽佣比例
BigDecimal userUnitPrice = subUserUnitPriceMap.get(userId); BigDecimal uniteRate = userCommissionRateMap.get(userId);
subUserProjectCommission.setMyUnitPrice(userUnitPrice); subUserProjectCommission.setCurrentCommissionRate(uniteRate);
// 计算下级用户的单价 // 设置单价
BigDecimal subUserUnitPrice = userUnitPrice.multiply(BigDecimal.ONE.subtract(currentCommissionRate)); BigDecimal myUnitPrice = subUserProjectCommissionMap.get(userId);
// 如果下级用户的单价小于项目明细最小结算价格,则设置下级用户的单价为项目明细最小结算价格 if (myUnitPrice == null) myUnitPrice = subUserProjectCommission.getMyUnitPrice();
if (subUserUnitPrice.compareTo(projectMinSettlementPrice) < 0) subUserUnitPrice = projectMinSettlementPrice; subUserProjectCommission.setMyUnitPrice(myUnitPrice);
// 存储下级用户的单价 BigDecimal subUserUnitPrice = projectCommissionService.calculateFinalPrice(myUnitPrice, uniteRate);
subUserUnitPriceMap.put(subUserId, subUserUnitPrice); if (subUserId != -1L) subUserProjectCommissionMap.put(subUserId, subUserUnitPrice);
} }
// 更新下级用户项目明细抽佣表记录
subUserProjectCommissionService.updateBatchById(subUserProjectCommissionList); long startTime = System.currentTimeMillis();
// 更新用户项目明细抽佣表记录
List<ProjectCommission> projectCommissionList = commonService.findByFieldEqTargetField(ProjectCommission::getProjectDetailId, projectDetail.getId(), projectCommissionService); // 批量更新下级用户项目明细抽佣记录
for (ProjectCommission projectCommission : projectCommissionList) { List<SubUserProjectCommission> subProjectCommissions = subUserProjectCommissions.stream()
Long userId = projectCommission.getUserId(); .filter(subUserProjectCommission -> subUserProjectCommission.getSubUserId() != -1L).toList();
BigDecimal userUnitPrice = subUserUnitPriceMap.get(userId); subUserProjectCommissionService.saveBatch(subProjectCommissions);
projectCommission.setMyUnitPrice(userUnitPrice); // 批量更新用户项目明细抽佣记录
}
projectCommissionService.updateBatchById(projectCommissionList); List<SubUserProjectCommission> projectCommissionList = subUserProjectCommissions.stream()
.filter(subUserProjectCommission -> subUserProjectCommission.getSubUserId() == -1L).toList();
List<ProjectCommission> commissionList = commonService.convertList(projectCommissionList, ProjectCommission.class);
projectCommissionService.saveBatch(commissionList);
// 获取结束时间戳
long endTime = System.currentTimeMillis();
// 计算执行时间
long executionTime = endTime - startTime;
System.out.println("程序执行时间: " + executionTime + " 毫秒");
return ResultUtils.success(true); return ResultUtils.success(true);
} }
//
// /**
// * web端管理员根据id修改项目明细信息
// * @param projectDetailUpdateRequest 项目明细更新请求体
// * @return 是否更新成功
// */
// @PostMapping("update")
// @Operation(summary = "web端管理员更新项目明细", description = "参数项目明细更新请求体权限管理员方法名updateProjectDetail")
// @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
// @SysLog(title = "项目明细管理", content = "web端管理员根据id修改项目明细信息")
// public BaseResponse<Boolean> updateProjectDetail(@Valid @RequestBody ProjectDetailUpdateRequest projectDetailUpdateRequest) {
//
// // 更新项目明细的结算价格
// Long projectDetailId = projectDetailUpdateRequest.getId();
// ProjectDetail sourceProjectDetail = projectDetailService.getById(projectDetailId);
// ProjectDetail projectDetail = commonService.copyProperties(projectDetailUpdateRequest, ProjectDetail.class);
// // 1.更新项目明细的结算价格
// projectDetailService.updateById(projectDetail);
// // 更新项目的价格
// Long projectId = projectDetail.getProjectId();
// Project project = projectService.getById(projectId);
// project.setProjectPrice(project.getProjectPrice().subtract(sourceProjectDetail.getProjectSettlementPrice()).add(projectDetail.getProjectSettlementPrice()));
// projectService.updateById(project);
// // 2.更新抽佣比例(如果抽佣比例比原来小)
// List<SubUserProjectCommission> subUserProjectCommissionList = commonService.findByFieldEqTargetField(SubUserProjectCommission::getProjectDetailId, projectDetail.getId(), subUserProjectCommissionService);
// for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissionList) {
// BigDecimal currentCommissionRate = subUserProjectCommission.getCurrentCommissionRate();
// BigDecimal maxCommissionRate = projectDetail.getMaxCommissionRate();
// if (currentCommissionRate.compareTo(maxCommissionRate) > 0) subUserProjectCommission.setCurrentCommissionRate(maxCommissionRate);
// }
// // 将下级用户项目明细抽佣列表根据父级用户id进行排序升序
// subUserProjectCommissionList.sort(Comparator.comparing(SubUserProjectCommission::getUserId));
// // 更新下级用户项目明细抽佣表记录
// BigDecimal projectSettlementPrice = projectDetail.getProjectSettlementPrice();
// BigDecimal projectMinSettlementPrice = projectDetail.getProjectMinSettlementPrice();
// // 封装Map集合下级用户id下级用户单价
// Map<Long, BigDecimal> subUserUnitPriceMap = new HashMap<>();
// // 获取小程序用户的根用户
// List<UserInfo> userInfoList = commonService.findByFieldEqTargetField(UserInfo::getUserRole, UserConstant.DEFAULT_ROLE, userInfoService);
// UserInfo rootUserInfo = userInfoList.get(0);
// // 存储根用户的单价
// subUserUnitPriceMap.put(rootUserInfo.getId(), projectSettlementPrice);
// for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissionList) {
// // 记录上级用户的对下级用户的抽佣比例
// BigDecimal currentCommissionRate = subUserProjectCommission.getCurrentCommissionRate();
// Long userId = subUserProjectCommission.getUserId();
// Long subUserId = subUserProjectCommission.getSubUserId();
// // 获取当前用户的单价,并将当前记录修改为当前用户的单价
// BigDecimal userUnitPrice = subUserUnitPriceMap.get(userId);
// subUserProjectCommission.setMyUnitPrice(userUnitPrice);
// // 计算下级用户的单价
// BigDecimal subUserUnitPrice = userUnitPrice.multiply(BigDecimal.ONE.subtract(currentCommissionRate));
// // 如果下级用户的单价小于项目明细最小结算价格,则设置下级用户的单价为项目明细最小结算价格
// if (subUserUnitPrice.compareTo(projectMinSettlementPrice) < 0) subUserUnitPrice = projectMinSettlementPrice;
// // 存储下级用户的单价
// subUserUnitPriceMap.put(subUserId, subUserUnitPrice);
// }
// // 更新下级用户项目明细抽佣表记录
// subUserProjectCommissionService.updateBatchById(subUserProjectCommissionList);
// // 更新用户项目明细抽佣表记录
// List<ProjectCommission> projectCommissionList = commonService.findByFieldEqTargetField(ProjectCommission::getProjectDetailId, projectDetail.getId(), projectCommissionService);
// for (ProjectCommission projectCommission : projectCommissionList) {
// Long userId = projectCommission.getUserId();
// BigDecimal userUnitPrice = subUserUnitPriceMap.get(userId);
// projectCommission.setMyUnitPrice(userUnitPrice);
// }
// projectCommissionService.updateBatchById(projectCommissionList);
//
// return ResultUtils.success(true);
// }
/** /**
* web端管理员根据id删除项目明细 * web端管理员根据id删除项目明细

View File

@ -17,6 +17,7 @@ import com.greenorange.promotion.model.dto.CommonStringRequest;
import com.greenorange.promotion.model.dto.userInfo.*; import com.greenorange.promotion.model.dto.userInfo.*;
import com.greenorange.promotion.model.entity.UserInfo; import com.greenorange.promotion.model.entity.UserInfo;
import com.greenorange.promotion.model.entity.UserMainInfo; import com.greenorange.promotion.model.entity.UserMainInfo;
import com.greenorange.promotion.model.vo.userInfo.SuperUserInfoVO;
import com.greenorange.promotion.model.vo.userInfo.UserInfoVO; import com.greenorange.promotion.model.vo.userInfo.UserInfoVO;
import com.greenorange.promotion.model.vo.userMainInfo.UserMainInfoVO; import com.greenorange.promotion.model.vo.userMainInfo.UserMainInfoVO;
import com.greenorange.promotion.service.common.CommonService; import com.greenorange.promotion.service.common.CommonService;
@ -406,6 +407,8 @@ public class UserInfoController {
} }
// /** // /**
// * (小程序端)查询当前用户到根节点的userId路径 // * (小程序端)查询当前用户到根节点的userId路径
// * @param commonRequest 用户id // * @param commonRequest 用户id
@ -423,6 +426,23 @@ public class UserInfoController {
/**
* 小程序端用户获取上级用户信息
* @return 上级用户信息
*/
@PostMapping("getSuper")
@Operation(summary = "小程序端用户获取上级用户信息", description = "参数用户表查询请求体权限管理员boss, admin),方法名:queryUserInfoById")
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
public BaseResponse<SuperUserInfoVO> getSuperUserInfo(HttpServletRequest request) {
Long userId = (Long) request.getAttribute("userId");
UserInfo userInfo = userInfoService.getById(userId);
Long parentUserId = userInfo.getParentUserId();
if (parentUserId != 0) {
userInfo = userInfoService.getById(parentUserId);
}
SuperUserInfoVO superUserInfoVO = commonService.copyProperties(userInfo, SuperUserInfoVO.class);
return ResultUtils.success(superUserInfoVO);
}

View File

@ -0,0 +1,30 @@
package com.greenorange.promotion.model.vo.userInfo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 上级用户信息 视图对象
*/
@Data
@Schema(description = "上级用户信息 视图对象")
public class SuperUserInfoVO implements Serializable {
/**
* 用户昵称
*/
@Schema(description = "用户昵称", example = "chenxinzhi")
private String nickName;
/**
* 手机号
*/
@Schema(description = "手机号", example = "15888610253")
private String phoneNumber;
@Serial
private static final long serialVersionUID = 1L;
}

View File

@ -5,8 +5,12 @@ import com.greenorange.promotion.model.dto.projectCommission.ProjectCommissionUp
import com.greenorange.promotion.model.dto.subUserProjectCommission.SubUserProjectCommissionUpdateRequest; import com.greenorange.promotion.model.dto.subUserProjectCommission.SubUserProjectCommissionUpdateRequest;
import com.greenorange.promotion.model.entity.ProjectCommission; import com.greenorange.promotion.model.entity.ProjectCommission;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.greenorange.promotion.model.entity.SubUserProjectCommission;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.List;
/** /**
* @author 35880 * @author 35880
* @description 针对表【project_commission(项目明细抽佣表)】的数据库操作Service * @description 针对表【project_commission(项目明细抽佣表)】的数据库操作Service
@ -31,4 +35,35 @@ public interface ProjectCommissionService extends IService<ProjectCommission> {
* 小程序用户一键设置项目的的抽佣比例 * 小程序用户一键设置项目的的抽佣比例
*/ */
void uniteProjectCommissionRate(ProjectCommissionUniteUpdateRequest projectCommissionUniteUpdateRequest, HttpServletRequest request); void uniteProjectCommissionRate(ProjectCommissionUniteUpdateRequest projectCommissionUniteUpdateRequest, HttpServletRequest request);
/**
* 批量修改下级用户的单价
*/
void batchUpdateSubUserMyUnitPrice(List<SubUserProjectCommission> subCommissionList);
/**
* 批量修改用户的单价
*/
void batchUpdateMyUnitPrice(List<ProjectCommission> projectCommissionList);
/**
* 对项目抽佣记录进行排序(根据userId, subUserId进行排序
*/
void sortSubProjectCommissions(List<SubUserProjectCommission> subProjectCommissions);
/**
* 对项目抽佣记录进行排序(根据projectDetailId, userId, subUserId进行排序
*/
void sortProjectDetailAndSubProjectCommissions(List<SubUserProjectCommission> subProjectCommissions);
/**
* 根据价格和抽佣比例计算最终价格
*/
BigDecimal calculateFinalPrice(BigDecimal price, BigDecimal commissionRate);
} }

View File

@ -373,7 +373,8 @@ public class ProjectCommissionServiceImpl extends ServiceImpl<ProjectCommissionM
@Override
@Transactional
public void batchUpdateSubUserMyUnitPrice(List<SubUserProjectCommission> subCommissionList) { public void batchUpdateSubUserMyUnitPrice(List<SubUserProjectCommission> subCommissionList) {
StringBuilder sql = new StringBuilder("UPDATE sub_user_project_commission SET myUnitPrice = CASE id "); StringBuilder sql = new StringBuilder("UPDATE sub_user_project_commission SET myUnitPrice = CASE id ");
@ -400,6 +401,8 @@ public class ProjectCommissionServiceImpl extends ServiceImpl<ProjectCommissionM
@Override
@Transactional
public void batchUpdateMyUnitPrice(List<ProjectCommission> projectCommissionList) { public void batchUpdateMyUnitPrice(List<ProjectCommission> projectCommissionList) {
StringBuilder sql = new StringBuilder("UPDATE project_commission SET myUnitPrice = CASE id "); StringBuilder sql = new StringBuilder("UPDATE project_commission SET myUnitPrice = CASE id ");
@ -425,23 +428,27 @@ public class ProjectCommissionServiceImpl extends ServiceImpl<ProjectCommissionM
@Override
// 封装排序方法 // 封装排序方法
private void sortSubProjectCommissions(List<SubUserProjectCommission> subProjectCommissions) { public void sortSubProjectCommissions(List<SubUserProjectCommission> subProjectCommissions) {
// 先根据userId升序排序 // 先根据userId升序排序
// 如果userId相同再根据subUserId升序排序 // 如果userId相同再根据subUserId升序排序
Collections.sort(subProjectCommissions, Comparator.comparingLong(SubUserProjectCommission::getUserId).thenComparingLong(SubUserProjectCommission::getSubUserId)); Collections.sort(subProjectCommissions, Comparator.comparingLong(SubUserProjectCommission::getUserId).thenComparingLong(SubUserProjectCommission::getSubUserId));
} }
@Override
// 封装排序方法 // 封装排序方法
private void sortProjectDetailAndSubProjectCommissions(List<SubUserProjectCommission> subProjectCommissions) { public void sortProjectDetailAndSubProjectCommissions(List<SubUserProjectCommission> subProjectCommissions) {
// 先根据userId升序排序 // 先根据userId升序排序
// 如果userId相同再根据subUserId升序排序 // 如果userId相同再根据subUserId升序排序
Collections.sort(subProjectCommissions, Comparator.comparingLong(SubUserProjectCommission::getProjectDetailId).thenComparingLong(SubUserProjectCommission::getUserId).thenComparingLong(SubUserProjectCommission::getSubUserId)); Collections.sort(subProjectCommissions, Comparator.comparingLong(SubUserProjectCommission::getProjectDetailId).thenComparingLong(SubUserProjectCommission::getUserId).thenComparingLong(SubUserProjectCommission::getSubUserId));
} }
@Override
// 封装方法:根据价格和抽佣比例计算最终价格 // 封装方法:根据价格和抽佣比例计算最终价格
private BigDecimal calculateFinalPrice(BigDecimal price, BigDecimal commissionRate) { public BigDecimal calculateFinalPrice(BigDecimal price, BigDecimal commissionRate) {
// 计算抽佣比例对应的系数 // 计算抽佣比例对应的系数
BigDecimal commissionFactor = BigDecimal.ONE.subtract(commissionRate.divide(BigDecimal.valueOf(100))); BigDecimal commissionFactor = BigDecimal.ONE.subtract(commissionRate.divide(BigDecimal.valueOf(100)));