@ -22,6 +22,7 @@ import com.greenorange.promotion.service.project.ProjectDetailService;
import com.greenorange.promotion.service.project.ProjectService ;
import com.greenorange.promotion.service.project.SubUserProjectCommissionService ;
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.tags.Tag ;
import jakarta.annotation.Resource ;
@ -65,6 +66,9 @@ public class ProjectDetailController {
@Resource
private ProjectService projectService ;
@Resource
private UserMainInfoService userMainInfoService ;
/**
* web端管理员添加项目明细
* @param projectDetailAddRequest 项目明细添加请求体
@ -89,6 +93,13 @@ public class ProjectDetailController {
// 获取所有的小程序用户
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 < > ( ) ;
Long projectDetailId = projectDetail . getId ( ) ;
@ -106,7 +117,11 @@ public class ProjectDetailController {
projectCommissionAddRequestList . add ( projectCommissionAddRequest ) ;
}
List < ProjectCommission > projectCommissions = commonService . convertList ( projectCommissionAddRequestList , ProjectCommission . class ) ;
projectCommissi onService. saveBatch ( projectCommissions ) ;
List < SubUserProjectCommission > userProjectCommissions = comm onService. convertList ( projectCommissions , SubUserProjectCommission . class );
for ( SubUserProjectCommission userProjectCommission : userProjectCommissions ) {
userProjectCommission . setSubUserId ( - 1L ) ;
}
// projectCommissionService.saveBatch(projectCommissions);
// 给所有用户添加一条下级项目明细抽佣表
List < SubUserProjectCommissionAddRequest > subUserProjectCommissionAddRequestList = new ArrayList < > ( ) ;
@ -122,80 +137,119 @@ public class ProjectDetailController {
subUserProjectCommissionAddRequestList . add ( subUserProjectCommissionAddRequest ) ;
}
List < SubUserProjectCommission > subUserProjectCommissions = commonService . convertList ( subUserProjectCommissionAddRequestList , SubUserProjectCommission . class ) ;
subUserProjectCommissionService. saveBatch( subUserProjectCommissions) ;
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 ( ) ;
// subUserProjectCommissionService. saveBatch( subUserProjectCommissions) ;
subUserProjectCommissions . addAll ( userProjectCommissions ) ;
// 对抽佣记录进行排序
projectCommissionService . sortSubProjectCommissions ( subUserProjectCommissions ) ;
// 设置抽佣比例和单价
// 封装Map集合( 键: 下级用户id, 值: 下级用户单价)
Map < Long , BigDecimal > subUserUnitPrice Map = 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 ( ) ;
Map < Long , BigDecimal > subUserProjectCommission Map = new HashMap < > ( ) ;
for ( SubUserProjectCommission subUserProjectCommission : subUserProjectCommissions ) {
Long userId = subUserProjectCommission . getUserId ( ) ;
Long subUserId = subUserProjectCommission . getSubUserId ( ) ;
// 获取当前用户的单价,并将当前记录修改为当前用户的单价
BigDecimal userUnitPric e = subUserUnitPric eMap. get ( userId ) ;
subUserProjectCommission . setMyUnitPrice ( userUnitPric e ) ;
// 计算下级用户的 单价
BigDecimal subUser UnitPrice = userUnitPrice . multiply ( BigDecimal . ONE . subtract ( currentCommissionRate ) ) ;
// 如果下级用户的单价小于项目明细最小结算价格,则设置下级用户的单价为项目明细最小结算价格
if ( subUserUnitPrice . compareTo ( projectMinSettlementPrice ) < 0 ) subUserUnitPrice = projectMinSettlementPrice ;
// 存储下级用户的单价
subUserUnitPrice Map. put ( subUserId , subUserUnitPrice ) ;
// 设置抽佣比例
BigDecimal uniteRat e = userCommissionRat eMap. get ( userId ) ;
subUserProjectCommission . setCurrentCommissionRate ( uniteRat e ) ;
// 设置 单价
BigDecimal my UnitPrice = subUserProjectCommissionMap . get ( userId ) ;
if ( myUnitPrice = = null ) myUnitPrice = subUserProjectCommission . getMyUnitPrice ( ) ;
subUserProjectCommission . setMyUnitPrice ( myUnitPrice ) ;
BigDecimal subUserUnitPrice = projectCommissionService . calculateFinalPrice ( myUnitPrice , uniteRate ) ;
if ( subUserId ! = - 1L ) subUserProjectCommission Map. put ( subUserId , subUserUnitPrice ) ;
}
// 更新下级用户项目明细抽佣表记录
subUserProjectCommissionService . updateBatchById ( subUserProjectCommissionList ) ;
// 更新用户项目明细抽佣表记录
List < ProjectCommission > projectCommissionList = commonService . findByFieldEqTargetField ( ProjectCommission : : getProjectDetailId , projectDetail . getId ( ) , projectCommissionService ) ;
for ( ProjectCommission p rojectCommission : p rojectCommissionList ) {
Long userId = p rojectCommission. getUserId ( ) ;
BigDecimal userUnitPrice = subUserUnitPriceMap . get ( userId ) ;
projectCommission . setMyUnitPrice ( userUnitPrice ) ;
}
projectCommissionService . updateBatchById ( p rojectCommissionList ) ;
long startTime = System . currentTimeMillis ( ) ;
// 批量更新下级用户项目明细抽佣记录
List < SubUser ProjectCommission> subP rojectCommissions = subUserP rojectCommissions . stream ( )
. filter ( subUserProjectCommission - > subUserP rojectCommission. getSub UserId ( ) ! = - 1L ) . toList ( ) ;
subUserProjectCommissionService . saveBatch ( subProjectCommissions ) ;
// 批量更新用户项目明细抽佣记录
List < SubUserProjectCommission > projectCommissionList = subUserP rojectCommissions . 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 ) ;
}
//
// /**
// * 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删除项目明细