添加的新功能
1.小程序用户修改项目的抽佣比例 2.小程序用户修改下级用户的项目明细抽佣比例 3.小程序用户一键设置项目的的抽佣比例
This commit is contained in:
@ -37,10 +37,8 @@ import org.springframework.web.bind.annotation.*;
|
|||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
import java.util.stream.Collectors;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -140,6 +138,39 @@ public class ProjectCommissionController {
|
|||||||
return ResultUtils.success(projectCommissionVOList);
|
return ResultUtils.success(projectCommissionVOList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 小程序用户修改项目的抽佣比例
|
||||||
|
// * @param projectCommissionUpdateRequest 项目明细抽佣更新请求体
|
||||||
|
// * @return 是否添加成功
|
||||||
|
// */
|
||||||
|
// @PostMapping("update/rate")
|
||||||
|
// @Operation(summary = "小程序用户修改项目的抽佣比例", description = "参数:项目明细抽佣更新请求体,权限:管理员,方法名:updateProjectCommissionRate")
|
||||||
|
// @RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||||
|
//// @SysLog(title = "项目明细抽佣管理", content = "小程序用户修改项目的抽佣比例")
|
||||||
|
// public BaseResponse<Boolean> updateProjectCommissionRate(@Valid @RequestBody ProjectCommissionUpdateRequest projectCommissionUpdateRequest, HttpServletRequest request) {
|
||||||
|
// Long id = projectCommissionUpdateRequest.getId();
|
||||||
|
// BigDecimal currentCommissionRate = projectCommissionUpdateRequest.getCurrentCommissionRate();
|
||||||
|
// // 校验当前抽佣比例不能大于最大抽佣比例
|
||||||
|
// ProjectCommission projectCommission = projectCommissionService.getById(id);
|
||||||
|
// Long projectDetailId = projectCommission.getProjectDetailId();
|
||||||
|
// ProjectDetail projectDetail = projectDetailService.getById(projectDetailId);
|
||||||
|
// BigDecimal maxCommissionRate = projectDetail.getMaxCommissionRate();
|
||||||
|
// ThrowUtils.throwIf(currentCommissionRate.compareTo(maxCommissionRate) > 0, ErrorCode.OPERATION_ERROR, "当前抽佣比例不能大于最大抽佣比例");
|
||||||
|
// projectCommission.setCurrentCommissionRate(currentCommissionRate);
|
||||||
|
// projectCommissionService.updateById(projectCommission);
|
||||||
|
//
|
||||||
|
// // 批量更新下级用户的项目明细抽佣比例
|
||||||
|
// Long userId = (Long) request.getAttribute("userId");
|
||||||
|
// Map<SFunction<SubUserProjectCommission, ?>, Object> fieldConditions = Map.of(SubUserProjectCommission::getProjectDetailId, projectDetailId, SubUserProjectCommission::getUserId, userId);
|
||||||
|
// List<SubUserProjectCommission> subUserProjectCommissionList = commonService.findByFieldEqTargetFields(fieldConditions, subUserProjectCommissionService);
|
||||||
|
// for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissionList) {
|
||||||
|
// subUserProjectCommission.setCurrentCommissionRate(currentCommissionRate);
|
||||||
|
// }
|
||||||
|
// subUserProjectCommissionService.updateBatchById(subUserProjectCommissionList);
|
||||||
|
// return ResultUtils.success(true);
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 小程序用户修改项目的抽佣比例
|
* 小程序用户修改项目的抽佣比例
|
||||||
@ -151,30 +182,11 @@ public class ProjectCommissionController {
|
|||||||
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||||
// @SysLog(title = "项目明细抽佣管理", content = "小程序用户修改项目的抽佣比例")
|
// @SysLog(title = "项目明细抽佣管理", content = "小程序用户修改项目的抽佣比例")
|
||||||
public BaseResponse<Boolean> updateProjectCommissionRate(@Valid @RequestBody ProjectCommissionUpdateRequest projectCommissionUpdateRequest, HttpServletRequest request) {
|
public BaseResponse<Boolean> updateProjectCommissionRate(@Valid @RequestBody ProjectCommissionUpdateRequest projectCommissionUpdateRequest, HttpServletRequest request) {
|
||||||
Long id = projectCommissionUpdateRequest.getId();
|
projectCommissionService.updateProjectCommissionRate(projectCommissionUpdateRequest);
|
||||||
BigDecimal currentCommissionRate = projectCommissionUpdateRequest.getCurrentCommissionRate();
|
|
||||||
// 校验当前抽佣比例不能大于最大抽佣比例
|
|
||||||
ProjectCommission projectCommission = projectCommissionService.getById(id);
|
|
||||||
Long projectDetailId = projectCommission.getProjectDetailId();
|
|
||||||
ProjectDetail projectDetail = projectDetailService.getById(projectDetailId);
|
|
||||||
BigDecimal maxCommissionRate = projectDetail.getMaxCommissionRate();
|
|
||||||
ThrowUtils.throwIf(currentCommissionRate.compareTo(maxCommissionRate) > 0, ErrorCode.OPERATION_ERROR, "当前抽佣比例不能大于最大抽佣比例");
|
|
||||||
projectCommission.setCurrentCommissionRate(currentCommissionRate);
|
|
||||||
projectCommissionService.updateById(projectCommission);
|
|
||||||
|
|
||||||
// 批量更新下级用户的项目明细抽佣比例
|
|
||||||
Long userId = (Long) request.getAttribute("userId");
|
|
||||||
Map<SFunction<SubUserProjectCommission, ?>, Object> fieldConditions = Map.of(SubUserProjectCommission::getProjectDetailId, projectDetailId, SubUserProjectCommission::getUserId, userId);
|
|
||||||
List<SubUserProjectCommission> subUserProjectCommissionList = commonService.findByFieldEqTargetFields(fieldConditions, subUserProjectCommissionService);
|
|
||||||
for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissionList) {
|
|
||||||
subUserProjectCommission.setCurrentCommissionRate(currentCommissionRate);
|
|
||||||
}
|
|
||||||
subUserProjectCommissionService.updateBatchById(subUserProjectCommissionList);
|
|
||||||
return ResultUtils.success(true);
|
return ResultUtils.success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 小程序用户查看下级用户的项目明细抽佣情况
|
* 小程序用户查看下级用户的项目明细抽佣情况
|
||||||
* @param commonRequest 项目id
|
* @param commonRequest 项目id
|
||||||
@ -249,6 +261,30 @@ public class ProjectCommissionController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * 小程序用户修改下级用户的项目明细抽佣比例
|
||||||
|
// * @param subUserProjectCommissionUpdateRequest 下级用户项目明细抽佣更新请求体
|
||||||
|
// * @return 是否添加成功
|
||||||
|
// */
|
||||||
|
// @PostMapping("update/sub/rate")
|
||||||
|
// @Operation(summary = "小程序用户修改下级用户的项目明细抽佣比例", description = "参数:下级用户项目明细抽佣更新请求体,权限:管理员,方法名:updateSubUserProjectCommissionRate")
|
||||||
|
// @RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||||
|
//// @SysLog(title = "项目明细抽佣管理", content = "小程序用户修改下级用户的项目明细抽佣比例")
|
||||||
|
// public BaseResponse<Boolean> updateSubUserProjectCommissionRate(@Valid @RequestBody SubUserProjectCommissionUpdateRequest subUserProjectCommissionUpdateRequest) {
|
||||||
|
// Long id = subUserProjectCommissionUpdateRequest.getId();
|
||||||
|
// BigDecimal currentCommissionRate = subUserProjectCommissionUpdateRequest.getCurrentCommissionRate();
|
||||||
|
// // 校验当前抽佣比例不能大于最大抽佣比例
|
||||||
|
// SubUserProjectCommission subUserProjectCommission = subUserProjectCommissionService.getById(id);
|
||||||
|
// Long projectDetailId = subUserProjectCommission.getProjectDetailId();
|
||||||
|
// ProjectDetail projectDetail = projectDetailService.getById(projectDetailId);
|
||||||
|
// BigDecimal maxCommissionRate = projectDetail.getMaxCommissionRate();
|
||||||
|
// ThrowUtils.throwIf(currentCommissionRate.compareTo(maxCommissionRate) > 0, ErrorCode.OPERATION_ERROR, "当前抽佣比例不能大于最大抽佣比例");
|
||||||
|
// subUserProjectCommission.setCurrentCommissionRate(currentCommissionRate);
|
||||||
|
// subUserProjectCommissionService.updateById(subUserProjectCommission);
|
||||||
|
// return ResultUtils.success(true);
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 小程序用户修改下级用户的项目明细抽佣比例
|
* 小程序用户修改下级用户的项目明细抽佣比例
|
||||||
* @param subUserProjectCommissionUpdateRequest 下级用户项目明细抽佣更新请求体
|
* @param subUserProjectCommissionUpdateRequest 下级用户项目明细抽佣更新请求体
|
||||||
@ -259,20 +295,63 @@ public class ProjectCommissionController {
|
|||||||
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||||
// @SysLog(title = "项目明细抽佣管理", content = "小程序用户修改下级用户的项目明细抽佣比例")
|
// @SysLog(title = "项目明细抽佣管理", content = "小程序用户修改下级用户的项目明细抽佣比例")
|
||||||
public BaseResponse<Boolean> updateSubUserProjectCommissionRate(@Valid @RequestBody SubUserProjectCommissionUpdateRequest subUserProjectCommissionUpdateRequest) {
|
public BaseResponse<Boolean> updateSubUserProjectCommissionRate(@Valid @RequestBody SubUserProjectCommissionUpdateRequest subUserProjectCommissionUpdateRequest) {
|
||||||
Long id = subUserProjectCommissionUpdateRequest.getId();
|
projectCommissionService.updateSubUserProjectCommissionRate(subUserProjectCommissionUpdateRequest);
|
||||||
BigDecimal currentCommissionRate = subUserProjectCommissionUpdateRequest.getCurrentCommissionRate();
|
|
||||||
// 校验当前抽佣比例不能大于最大抽佣比例
|
|
||||||
SubUserProjectCommission subUserProjectCommission = subUserProjectCommissionService.getById(id);
|
|
||||||
Long projectDetailId = subUserProjectCommission.getProjectDetailId();
|
|
||||||
ProjectDetail projectDetail = projectDetailService.getById(projectDetailId);
|
|
||||||
BigDecimal maxCommissionRate = projectDetail.getMaxCommissionRate();
|
|
||||||
ThrowUtils.throwIf(currentCommissionRate.compareTo(maxCommissionRate) > 0, ErrorCode.OPERATION_ERROR, "当前抽佣比例不能大于最大抽佣比例");
|
|
||||||
subUserProjectCommission.setCurrentCommissionRate(currentCommissionRate);
|
|
||||||
subUserProjectCommissionService.updateById(subUserProjectCommission);
|
|
||||||
return ResultUtils.success(true);
|
return ResultUtils.success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * 小程序用户一键设置项目的的抽佣比例
|
||||||
|
// * @param projectCommissionUniteUpdateRequest 统一抽佣比例
|
||||||
|
// * @return 是否添加成功
|
||||||
|
// */
|
||||||
|
// @PostMapping("update/unite/rate")
|
||||||
|
// @Operation(summary = "小程序用户一键设置项目的的抽佣比例", description = "参数:统一抽佣比例,权限:管理员,方法名:uniteProjectCommissionRate")
|
||||||
|
// @RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||||
|
//// @SysLog(title = "项目明细抽佣管理", content = "小程序用户一键设置项目的的抽佣比例")
|
||||||
|
// public BaseResponse<Boolean> uniteProjectCommissionRate(@Valid @RequestBody ProjectCommissionUniteUpdateRequest projectCommissionUniteUpdateRequest, HttpServletRequest request) {
|
||||||
|
// Long userId = (Long) request.getAttribute("userId");
|
||||||
|
// BigDecimal uniteCommissionRate = projectCommissionUniteUpdateRequest.getUniteCommissionRate();
|
||||||
|
//
|
||||||
|
// // 修改项目的统一抽佣比例
|
||||||
|
// LambdaUpdateWrapper<UserMainInfo> userMainInfoLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
|
||||||
|
// userMainInfoLambdaUpdateWrapper.eq(UserMainInfo::getUserId, userId).set(UserMainInfo::getUniteRate, uniteCommissionRate);
|
||||||
|
// userMainInfoService.update(userMainInfoLambdaUpdateWrapper);
|
||||||
|
//
|
||||||
|
// LambdaQueryWrapper<ProjectCommission> projectCommissionLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
// projectCommissionLambdaQueryWrapper.eq(ProjectCommission::getUserId, userId);
|
||||||
|
// List<ProjectCommission> projectCommissionList = projectCommissionService.list(projectCommissionLambdaQueryWrapper);
|
||||||
|
//
|
||||||
|
// List<ProjectDetail> projectDetailList = commonService.findByFieldInTargetField(projectCommissionList, projectDetailService, ProjectCommission::getProjectDetailId, ProjectDetail::getId);
|
||||||
|
// // 封装map集合(键:项目明细id, 值:项目明细最大抽佣比例)
|
||||||
|
// Map<Long, BigDecimal> map = new HashMap<>();
|
||||||
|
// for (ProjectDetail projectDetail : projectDetailList) {
|
||||||
|
// map.put(projectDetail.getId(), projectDetail.getMaxCommissionRate());
|
||||||
|
// }
|
||||||
|
// for (ProjectCommission projectCommission : projectCommissionList) {
|
||||||
|
// Long projectDetailId = projectCommission.getProjectDetailId();
|
||||||
|
// BigDecimal maxCommissionRate = map.get(projectDetailId);
|
||||||
|
// BigDecimal setCommissionRate = uniteCommissionRate.compareTo(maxCommissionRate) > 0 ? maxCommissionRate : uniteCommissionRate;
|
||||||
|
// projectCommission.setCurrentCommissionRate(setCommissionRate);
|
||||||
|
// }
|
||||||
|
// projectCommissionService.updateBatchById(projectCommissionList);
|
||||||
|
//
|
||||||
|
// // 修改下级用户的项目明细抽佣比例
|
||||||
|
// LambdaQueryWrapper<SubUserProjectCommission> subUserProjectCommissionLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
// subUserProjectCommissionLambdaQueryWrapper.eq(SubUserProjectCommission::getUserId, userId);
|
||||||
|
// List<SubUserProjectCommission> subUserProjectCommissionList = subUserProjectCommissionService.list(subUserProjectCommissionLambdaQueryWrapper);
|
||||||
|
// for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissionList) {
|
||||||
|
// Long projectDetailId = subUserProjectCommission.getProjectDetailId();
|
||||||
|
// BigDecimal maxCommissionRate = map.get(projectDetailId);
|
||||||
|
// BigDecimal setCommissionRate = uniteCommissionRate.compareTo(maxCommissionRate) > 0 ? maxCommissionRate : uniteCommissionRate;
|
||||||
|
// subUserProjectCommission.setCurrentCommissionRate(setCommissionRate);
|
||||||
|
// }
|
||||||
|
// subUserProjectCommissionService.updateBatchById(subUserProjectCommissionList);
|
||||||
|
// return ResultUtils.success(true);
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 小程序用户一键设置项目的的抽佣比例
|
* 小程序用户一键设置项目的的抽佣比例
|
||||||
* @param projectCommissionUniteUpdateRequest 统一抽佣比例
|
* @param projectCommissionUniteUpdateRequest 统一抽佣比例
|
||||||
@ -283,43 +362,7 @@ public class ProjectCommissionController {
|
|||||||
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||||
// @SysLog(title = "项目明细抽佣管理", content = "小程序用户一键设置项目的的抽佣比例")
|
// @SysLog(title = "项目明细抽佣管理", content = "小程序用户一键设置项目的的抽佣比例")
|
||||||
public BaseResponse<Boolean> uniteProjectCommissionRate(@Valid @RequestBody ProjectCommissionUniteUpdateRequest projectCommissionUniteUpdateRequest, HttpServletRequest request) {
|
public BaseResponse<Boolean> uniteProjectCommissionRate(@Valid @RequestBody ProjectCommissionUniteUpdateRequest projectCommissionUniteUpdateRequest, HttpServletRequest request) {
|
||||||
Long userId = (Long) request.getAttribute("userId");
|
projectCommissionService.uniteProjectCommissionRate(projectCommissionUniteUpdateRequest, request);
|
||||||
BigDecimal uniteCommissionRate = projectCommissionUniteUpdateRequest.getUniteCommissionRate();
|
|
||||||
|
|
||||||
// 修改项目的统一抽佣比例
|
|
||||||
LambdaUpdateWrapper<UserMainInfo> userMainInfoLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
|
|
||||||
userMainInfoLambdaUpdateWrapper.eq(UserMainInfo::getUserId, userId).set(UserMainInfo::getUniteRate, uniteCommissionRate);
|
|
||||||
userMainInfoService.update(userMainInfoLambdaUpdateWrapper);
|
|
||||||
|
|
||||||
LambdaQueryWrapper<ProjectCommission> projectCommissionLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
||||||
projectCommissionLambdaQueryWrapper.eq(ProjectCommission::getUserId, userId);
|
|
||||||
List<ProjectCommission> projectCommissionList = projectCommissionService.list(projectCommissionLambdaQueryWrapper);
|
|
||||||
|
|
||||||
List<ProjectDetail> projectDetailList = commonService.findByFieldInTargetField(projectCommissionList, projectDetailService, ProjectCommission::getProjectDetailId, ProjectDetail::getId);
|
|
||||||
// 封装map集合(键:项目明细id, 值:项目明细最大抽佣比例)
|
|
||||||
Map<Long, BigDecimal> map = new HashMap<>();
|
|
||||||
for (ProjectDetail projectDetail : projectDetailList) {
|
|
||||||
map.put(projectDetail.getId(), projectDetail.getMaxCommissionRate());
|
|
||||||
}
|
|
||||||
for (ProjectCommission projectCommission : projectCommissionList) {
|
|
||||||
Long projectDetailId = projectCommission.getProjectDetailId();
|
|
||||||
BigDecimal maxCommissionRate = map.get(projectDetailId);
|
|
||||||
BigDecimal setCommissionRate = uniteCommissionRate.compareTo(maxCommissionRate) > 0 ? maxCommissionRate : uniteCommissionRate;
|
|
||||||
projectCommission.setCurrentCommissionRate(setCommissionRate);
|
|
||||||
}
|
|
||||||
projectCommissionService.updateBatchById(projectCommissionList);
|
|
||||||
|
|
||||||
// 修改下级用户的项目明细抽佣比例
|
|
||||||
LambdaQueryWrapper<SubUserProjectCommission> subUserProjectCommissionLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
||||||
subUserProjectCommissionLambdaQueryWrapper.eq(SubUserProjectCommission::getUserId, userId);
|
|
||||||
List<SubUserProjectCommission> subUserProjectCommissionList = subUserProjectCommissionService.list(subUserProjectCommissionLambdaQueryWrapper);
|
|
||||||
for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissionList) {
|
|
||||||
Long projectDetailId = subUserProjectCommission.getProjectDetailId();
|
|
||||||
BigDecimal maxCommissionRate = map.get(projectDetailId);
|
|
||||||
BigDecimal setCommissionRate = uniteCommissionRate.compareTo(maxCommissionRate) > 0 ? maxCommissionRate : uniteCommissionRate;
|
|
||||||
subUserProjectCommission.setCurrentCommissionRate(setCommissionRate);
|
|
||||||
}
|
|
||||||
subUserProjectCommissionService.updateBatchById(subUserProjectCommissionList);
|
|
||||||
return ResultUtils.success(true);
|
return ResultUtils.success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,8 @@ package com.greenorange.promotion.mapper;
|
|||||||
|
|
||||||
import com.greenorange.promotion.model.entity.ProjectCommission;
|
import com.greenorange.promotion.model.entity.ProjectCommission;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.apache.ibatis.annotations.Update;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author 35880
|
* @author 35880
|
||||||
@ -11,6 +13,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|||||||
*/
|
*/
|
||||||
public interface ProjectCommissionMapper extends BaseMapper<ProjectCommission> {
|
public interface ProjectCommissionMapper extends BaseMapper<ProjectCommission> {
|
||||||
|
|
||||||
|
|
||||||
|
@Update("${sql}")
|
||||||
|
void executeUpdate(@Param("sql") String sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,6 +2,8 @@ package com.greenorange.promotion.mapper;
|
|||||||
|
|
||||||
import com.greenorange.promotion.model.entity.SubUserProjectCommission;
|
import com.greenorange.promotion.model.entity.SubUserProjectCommission;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.apache.ibatis.annotations.Update;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author 35880
|
* @author 35880
|
||||||
@ -11,6 +13,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|||||||
*/
|
*/
|
||||||
public interface SubUserProjectCommissionMapper extends BaseMapper<SubUserProjectCommission> {
|
public interface SubUserProjectCommissionMapper extends BaseMapper<SubUserProjectCommission> {
|
||||||
|
|
||||||
|
@Update("${sql}")
|
||||||
|
void executeUpdate(@Param("sql") String sql);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -69,4 +69,5 @@ public class SubUserProjectCommission implements Serializable {
|
|||||||
|
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
}
|
}
|
@ -1,7 +1,11 @@
|
|||||||
package com.greenorange.promotion.service.project;
|
package com.greenorange.promotion.service.project;
|
||||||
|
|
||||||
|
import com.greenorange.promotion.model.dto.projectCommission.ProjectCommissionUniteUpdateRequest;
|
||||||
|
import com.greenorange.promotion.model.dto.projectCommission.ProjectCommissionUpdateRequest;
|
||||||
|
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 jakarta.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author 35880
|
* @author 35880
|
||||||
@ -10,4 +14,21 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
|||||||
*/
|
*/
|
||||||
public interface ProjectCommissionService extends IService<ProjectCommission> {
|
public interface ProjectCommissionService extends IService<ProjectCommission> {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改项目的抽佣比例
|
||||||
|
*/
|
||||||
|
void updateProjectCommissionRate(ProjectCommissionUpdateRequest projectCommissionUpdateRequest);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改下级用户的项目明细抽佣比例
|
||||||
|
*/
|
||||||
|
void updateSubUserProjectCommissionRate(SubUserProjectCommissionUpdateRequest subUserProjectCommissionUpdateRequest);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序用户一键设置项目的的抽佣比例
|
||||||
|
*/
|
||||||
|
void uniteProjectCommissionRate(ProjectCommissionUniteUpdateRequest projectCommissionUniteUpdateRequest, HttpServletRequest request);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package com.greenorange.promotion.service.project;
|
package com.greenorange.promotion.service.project;
|
||||||
|
|
||||||
|
import com.greenorange.promotion.model.dto.subUserProjectCommission.SubUserProjectCommissionUpdateRequest;
|
||||||
import com.greenorange.promotion.model.entity.SubUserProjectCommission;
|
import com.greenorange.promotion.model.entity.SubUserProjectCommission;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import org.apache.ibatis.annotations.Update;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author 35880
|
* @author 35880
|
||||||
@ -10,4 +12,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
|||||||
*/
|
*/
|
||||||
public interface SubUserProjectCommissionService extends IService<SubUserProjectCommission> {
|
public interface SubUserProjectCommissionService extends IService<SubUserProjectCommission> {
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,34 @@
|
|||||||
package com.greenorange.promotion.service.project.impl;
|
package com.greenorange.promotion.service.project.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.greenorange.promotion.model.entity.ProjectCommission;
|
import com.greenorange.promotion.common.ErrorCode;
|
||||||
import com.greenorange.promotion.service.project.ProjectCommissionService;
|
import com.greenorange.promotion.common.ResultUtils;
|
||||||
|
import com.greenorange.promotion.exception.ThrowUtils;
|
||||||
import com.greenorange.promotion.mapper.ProjectCommissionMapper;
|
import com.greenorange.promotion.mapper.ProjectCommissionMapper;
|
||||||
|
import com.greenorange.promotion.mapper.SubUserProjectCommissionMapper;
|
||||||
|
import com.greenorange.promotion.model.dto.projectCommission.ProjectCommissionUniteUpdateRequest;
|
||||||
|
import com.greenorange.promotion.model.dto.projectCommission.ProjectCommissionUpdateRequest;
|
||||||
|
import com.greenorange.promotion.model.dto.subUserProjectCommission.SubUserProjectCommissionUpdateRequest;
|
||||||
|
import com.greenorange.promotion.model.entity.ProjectCommission;
|
||||||
|
import com.greenorange.promotion.model.entity.ProjectDetail;
|
||||||
|
import com.greenorange.promotion.model.entity.SubUserProjectCommission;
|
||||||
|
import com.greenorange.promotion.model.entity.UserMainInfo;
|
||||||
|
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.SubUserProjectCommissionService;
|
||||||
|
import com.greenorange.promotion.service.userInfo.UserMainInfoService;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author 35880
|
* @author 35880
|
||||||
@ -15,6 +39,418 @@ import org.springframework.stereotype.Service;
|
|||||||
public class ProjectCommissionServiceImpl extends ServiceImpl<ProjectCommissionMapper, ProjectCommission>
|
public class ProjectCommissionServiceImpl extends ServiceImpl<ProjectCommissionMapper, ProjectCommission>
|
||||||
implements ProjectCommissionService{
|
implements ProjectCommissionService{
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SubUserProjectCommissionService subUserProjectCommissionService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ProjectDetailService projectDetailService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private CommonService commonService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private UserMainInfoService userMainInfoService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SubUserProjectCommissionMapper subUserProjectCommissionMapper;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改项目的抽佣比例
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public void updateProjectCommissionRate(ProjectCommissionUpdateRequest projectCommissionUpdateRequest) {
|
||||||
|
Long id = projectCommissionUpdateRequest.getId();
|
||||||
|
BigDecimal currentCommissionRate = projectCommissionUpdateRequest.getCurrentCommissionRate();
|
||||||
|
// 获取当前项目明细信息
|
||||||
|
ProjectCommission projectCommission = this.getById(id);
|
||||||
|
ThrowUtils.throwIf(projectCommission == null, ErrorCode.OPERATION_ERROR, "项目明细抽佣信息不存在");
|
||||||
|
Long projectDetailId = projectCommission.getProjectDetailId();
|
||||||
|
ProjectDetail projectDetail = projectDetailService.getById(projectDetailId);
|
||||||
|
BigDecimal maxCommissionRate = projectDetail.getMaxCommissionRate();
|
||||||
|
ThrowUtils.throwIf(currentCommissionRate.compareTo(maxCommissionRate) > 0, ErrorCode.OPERATION_ERROR, "当前抽佣比例不能大于最大抽佣比例");
|
||||||
|
BigDecimal projectMinSettlementPrice = projectDetail.getProjectMinSettlementPrice();
|
||||||
|
// 查询项目明细列表
|
||||||
|
List<ProjectCommission> projectCommissionList = commonService.findByFieldEqTargetField(ProjectCommission::getProjectDetailId, projectDetailId, this);
|
||||||
|
List<SubUserProjectCommission> subUserProjectCommissions = commonService.convertList(projectCommissionList, SubUserProjectCommission.class);
|
||||||
|
for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissions) {
|
||||||
|
subUserProjectCommission.setSubUserId(-1L);
|
||||||
|
}
|
||||||
|
List<SubUserProjectCommission> subProjectCommissions = commonService.findByFieldEqTargetField(SubUserProjectCommission::getProjectDetailId, projectDetailId, subUserProjectCommissionService);
|
||||||
|
subProjectCommissions.addAll(subUserProjectCommissions);
|
||||||
|
sortSubProjectCommissions(subProjectCommissions);
|
||||||
|
Iterator<SubUserProjectCommission> iterator = subProjectCommissions.iterator();
|
||||||
|
Long initSubUserId = projectCommission.getUserId();
|
||||||
|
// 1.封装一个Map集合(键:下级用户id,值:当前用户的单价)
|
||||||
|
Map<Long, BigDecimal> subUserUnitPriceMap = new HashMap<>();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
SubUserProjectCommission commission = iterator.next();
|
||||||
|
if (!Objects.equals(commission.getUserId(), initSubUserId)) {
|
||||||
|
if (commission.getSubUserId() != -1L) subUserUnitPriceMap.put(commission.getSubUserId(), calculateFinalPrice(commission.getMyUnitPrice(), commission.getCurrentCommissionRate()).max(projectMinSettlementPrice));
|
||||||
|
iterator.remove(); // 使用迭代器的 remove() 方法移除
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 开始更新集合
|
||||||
|
for (SubUserProjectCommission subProjectCommission : subProjectCommissions) {
|
||||||
|
Long userId = subProjectCommission.getUserId();
|
||||||
|
Long subUserId = subProjectCommission.getSubUserId();
|
||||||
|
// 初始化map
|
||||||
|
if (userId.equals(initSubUserId)) {
|
||||||
|
subProjectCommission.setCurrentCommissionRate(currentCommissionRate);
|
||||||
|
if (subUserId != -1L) subUserUnitPriceMap.put(subUserId, calculateFinalPrice(subProjectCommission.getMyUnitPrice(), subProjectCommission.getCurrentCommissionRate()).max(projectMinSettlementPrice));
|
||||||
|
} else {
|
||||||
|
BigDecimal unitPrice = subUserUnitPriceMap.get(userId);
|
||||||
|
subProjectCommission.setMyUnitPrice(unitPrice);
|
||||||
|
if (subUserId != -1L) subUserUnitPriceMap.put(subUserId, calculateFinalPrice(unitPrice, subProjectCommission.getCurrentCommissionRate()).max(projectMinSettlementPrice));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
long startTime = System.currentTimeMillis();
|
||||||
|
// 更新当前用户的项目明细抽佣表和下级用户项目明细抽佣表
|
||||||
|
List<SubUserProjectCommission> subUserProCommissions = subProjectCommissions.stream()
|
||||||
|
.filter(subProjectCommission -> subProjectCommission.getSubUserId() != -1L && subProjectCommission.getUserId().equals(initSubUserId)).toList();
|
||||||
|
subUserProjectCommissionService.updateBatchById(subUserProCommissions);
|
||||||
|
|
||||||
|
List<SubUserProjectCommission> projectCommissions = subProjectCommissions.stream()
|
||||||
|
.filter(subProjectCommission -> subProjectCommission.getSubUserId() == -1L && subProjectCommission.getUserId().equals(initSubUserId)).toList();
|
||||||
|
List<ProjectCommission> projectCommissionsList = commonService.convertList(projectCommissions, ProjectCommission.class);
|
||||||
|
this.updateBatchById(projectCommissionsList);
|
||||||
|
// 获取结束时间戳
|
||||||
|
long endTime = System.currentTimeMillis();
|
||||||
|
// 计算执行时间
|
||||||
|
long executionTime = endTime - startTime;
|
||||||
|
System.out.println("程序执行时间: " + executionTime + " 毫秒");
|
||||||
|
|
||||||
|
|
||||||
|
startTime = System.currentTimeMillis();
|
||||||
|
// 更新下级用户项目明细记录
|
||||||
|
List<SubUserProjectCommission> subUserProjectCommissionList = subProjectCommissions.stream().filter(subProjectCommission -> subProjectCommission.getSubUserId() != -1L).toList();
|
||||||
|
// subUserProjectCommissionService.updateBatchById(subUserProjectCommissionList);
|
||||||
|
batchUpdateSubUserMyUnitPrice(subUserProjectCommissionList);
|
||||||
|
|
||||||
|
// 更新用户项目明细抽佣记录
|
||||||
|
List<SubUserProjectCommission> restProjectCommissions = subProjectCommissions.stream().filter(subProjectCommission -> subProjectCommission.getSubUserId() == -1L).toList();
|
||||||
|
List<ProjectCommission> proCommissions = commonService.convertList(restProjectCommissions, ProjectCommission.class);
|
||||||
|
// this.updateBatchById(proCommissions);
|
||||||
|
batchUpdateMyUnitPrice(proCommissions);
|
||||||
|
|
||||||
|
// 获取结束时间戳
|
||||||
|
endTime = System.currentTimeMillis();
|
||||||
|
// 计算执行时间
|
||||||
|
executionTime = endTime - startTime;
|
||||||
|
System.out.println("程序执行时间: " + executionTime + " 毫秒");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改下级用户的项目明细抽佣比例
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public void updateSubUserProjectCommissionRate(SubUserProjectCommissionUpdateRequest subUserProjectCommissionUpdateRequest) {
|
||||||
|
Long id = subUserProjectCommissionUpdateRequest.getId();
|
||||||
|
BigDecimal currentCommissionRate = subUserProjectCommissionUpdateRequest.getCurrentCommissionRate();
|
||||||
|
// 获取当前项目明细信息
|
||||||
|
SubUserProjectCommission subUserProjectCommission = subUserProjectCommissionService.getById(id);
|
||||||
|
ThrowUtils.throwIf(subUserProjectCommission == null, ErrorCode.OPERATION_ERROR, "下级用户项目明细抽佣信息不存在");
|
||||||
|
Long projectDetailId = subUserProjectCommission.getProjectDetailId();
|
||||||
|
ProjectDetail projectDetail = projectDetailService.getById(projectDetailId);
|
||||||
|
BigDecimal maxCommissionRate = projectDetail.getMaxCommissionRate();
|
||||||
|
ThrowUtils.throwIf(currentCommissionRate.compareTo(maxCommissionRate) > 0, ErrorCode.OPERATION_ERROR, "当前抽佣比例不能大于最大抽佣比例");
|
||||||
|
BigDecimal projectMinSettlementPrice = projectDetail.getProjectMinSettlementPrice();
|
||||||
|
// 查询项目明细列表
|
||||||
|
List<ProjectCommission> projectCommissionList = commonService.findByFieldEqTargetField(ProjectCommission::getProjectDetailId, projectDetailId, this);
|
||||||
|
List<SubUserProjectCommission> subUserProjectCommissions = commonService.convertList(projectCommissionList, SubUserProjectCommission.class);
|
||||||
|
for (SubUserProjectCommission subProjectCommission : subUserProjectCommissions) {
|
||||||
|
subProjectCommission.setSubUserId(-1L);
|
||||||
|
}
|
||||||
|
List<SubUserProjectCommission> subProjectCommissions = commonService.findByFieldEqTargetField(SubUserProjectCommission::getProjectDetailId, projectDetailId, subUserProjectCommissionService);
|
||||||
|
subProjectCommissions.addAll(subUserProjectCommissions);
|
||||||
|
sortSubProjectCommissions(subProjectCommissions);
|
||||||
|
Iterator<SubUserProjectCommission> iterator = subProjectCommissions.iterator();
|
||||||
|
Long initSubUserId = subUserProjectCommission.getUserId();
|
||||||
|
// 1.封装一个Map集合(键:下级用户id,值:当前用户的单价)
|
||||||
|
Map<Long, BigDecimal> subUserUnitPriceMap = new HashMap<>();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
SubUserProjectCommission commission = iterator.next();
|
||||||
|
if (!Objects.equals(commission.getUserId(), initSubUserId)) {
|
||||||
|
if (commission.getSubUserId() != -1L) subUserUnitPriceMap.put(commission.getSubUserId(), calculateFinalPrice(commission.getMyUnitPrice(), commission.getCurrentCommissionRate()).max(projectMinSettlementPrice));
|
||||||
|
iterator.remove(); // 使用迭代器的 remove() 方法移除
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 开始更新集合
|
||||||
|
for (SubUserProjectCommission subProjectCommission : subProjectCommissions) {
|
||||||
|
Long userId = subProjectCommission.getUserId();
|
||||||
|
Long subUserId = subProjectCommission.getSubUserId();
|
||||||
|
// 初始化map
|
||||||
|
if (userId.equals(initSubUserId)) {
|
||||||
|
// 仅设置单条抽佣比例
|
||||||
|
if (subProjectCommission.getId().equals(id)) subProjectCommission.setCurrentCommissionRate(currentCommissionRate);
|
||||||
|
if (subUserId != -1L) subUserUnitPriceMap.put(subUserId, calculateFinalPrice(subProjectCommission.getMyUnitPrice(), subProjectCommission.getCurrentCommissionRate()).max(projectMinSettlementPrice));
|
||||||
|
} else {
|
||||||
|
BigDecimal unitPrice = subUserUnitPriceMap.get(userId);
|
||||||
|
subProjectCommission.setMyUnitPrice(unitPrice);
|
||||||
|
if (subUserId != -1L) subUserUnitPriceMap.put(subUserId, calculateFinalPrice(unitPrice, subProjectCommission.getCurrentCommissionRate()).max(projectMinSettlementPrice));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
long startTime = System.currentTimeMillis();
|
||||||
|
// 更新当前用户的下级用户项目明细抽佣表
|
||||||
|
List<SubUserProjectCommission> subUserProCommissions = subProjectCommissions.stream()
|
||||||
|
.filter(subProjectCommission -> subProjectCommission.getSubUserId() != -1L && subProjectCommission.getUserId().equals(initSubUserId)).toList();
|
||||||
|
subUserProjectCommissionService.updateBatchById(subUserProCommissions);
|
||||||
|
|
||||||
|
// 获取结束时间戳
|
||||||
|
long endTime = System.currentTimeMillis();
|
||||||
|
// 计算执行时间
|
||||||
|
long executionTime = endTime - startTime;
|
||||||
|
System.out.println("程序执行时间: " + executionTime + " 毫秒");
|
||||||
|
|
||||||
|
startTime = System.currentTimeMillis();
|
||||||
|
// 更新下级用户项目明细记录
|
||||||
|
List<SubUserProjectCommission> subUserProjectCommissionList = subProjectCommissions.stream().filter(subProjectCommission -> subProjectCommission.getSubUserId() != -1L).toList();
|
||||||
|
// subUserProjectCommissionService.updateBatchById(subUserProjectCommissionList);
|
||||||
|
batchUpdateSubUserMyUnitPrice(subUserProjectCommissionList);
|
||||||
|
|
||||||
|
// 更新用户项目明细抽佣记录
|
||||||
|
List<SubUserProjectCommission> projectCommissions = subProjectCommissions.stream().filter(subProjectCommission -> subProjectCommission.getSubUserId() == -1L).toList();
|
||||||
|
List<ProjectCommission> proCommissions = commonService.convertList(projectCommissions, ProjectCommission.class);
|
||||||
|
// this.updateBatchById(proCommissions);
|
||||||
|
batchUpdateMyUnitPrice(proCommissions);
|
||||||
|
|
||||||
|
endTime = System.currentTimeMillis();
|
||||||
|
// 计算执行时间
|
||||||
|
executionTime = endTime - startTime;
|
||||||
|
System.out.println("程序执行时间: " + executionTime + " 毫秒");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序用户一键设置项目的的抽佣比例
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public void uniteProjectCommissionRate(ProjectCommissionUniteUpdateRequest projectCommissionUniteUpdateRequest, HttpServletRequest request) {
|
||||||
|
long startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
Long userId = (Long) request.getAttribute("userId");
|
||||||
|
BigDecimal uniteCommissionRate = projectCommissionUniteUpdateRequest.getUniteCommissionRate();
|
||||||
|
ThrowUtils.throwIf(uniteCommissionRate.compareTo(BigDecimal.valueOf(10)) > 0, ErrorCode.OPERATION_ERROR, "抽佣比例不能大于10%");
|
||||||
|
|
||||||
|
// 修改项目的统一抽佣比例
|
||||||
|
LambdaUpdateWrapper<UserMainInfo> userMainInfoLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
|
||||||
|
userMainInfoLambdaUpdateWrapper.eq(UserMainInfo::getUserId, userId).set(UserMainInfo::getUniteRate, uniteCommissionRate);
|
||||||
|
userMainInfoService.update(userMainInfoLambdaUpdateWrapper);
|
||||||
|
|
||||||
|
LambdaQueryWrapper<ProjectCommission> projectCommissionLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
projectCommissionLambdaQueryWrapper.eq(ProjectCommission::getUserId, userId);
|
||||||
|
List<ProjectCommission> projectCommissionList = this.list(projectCommissionLambdaQueryWrapper);
|
||||||
|
|
||||||
|
List<ProjectDetail> projectDetailList = commonService.findByFieldInTargetField(projectCommissionList, projectDetailService, ProjectCommission::getProjectDetailId, ProjectDetail::getId);
|
||||||
|
// 封装map集合(键:项目明细id, 值:项目明细最大抽佣比例)
|
||||||
|
Map<Long, BigDecimal> map = new HashMap<>();
|
||||||
|
Map<Long, BigDecimal> minPriceMap = new HashMap<>();
|
||||||
|
for (ProjectDetail projectDetail : projectDetailList) {
|
||||||
|
map.put(projectDetail.getId(), projectDetail.getMaxCommissionRate());
|
||||||
|
minPriceMap.put(projectDetail.getId(), projectDetail.getProjectMinSettlementPrice());
|
||||||
|
}
|
||||||
|
for (ProjectCommission projectCommission : projectCommissionList) {
|
||||||
|
Long projectDetailId = projectCommission.getProjectDetailId();
|
||||||
|
BigDecimal maxCommissionRate = map.get(projectDetailId);
|
||||||
|
BigDecimal setCommissionRate = uniteCommissionRate.compareTo(maxCommissionRate) > 0 ? maxCommissionRate : uniteCommissionRate;
|
||||||
|
projectCommission.setCurrentCommissionRate(setCommissionRate);
|
||||||
|
}
|
||||||
|
this.updateBatchById(projectCommissionList);
|
||||||
|
|
||||||
|
// 获取结束时间戳
|
||||||
|
long endTime = System.currentTimeMillis();
|
||||||
|
// 计算执行时间
|
||||||
|
long executionTime = endTime - startTime;
|
||||||
|
System.out.println("程序执行时间: " + executionTime + " 毫秒");
|
||||||
|
|
||||||
|
startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
// 修改下级用户的项目明细抽佣比例
|
||||||
|
LambdaQueryWrapper<SubUserProjectCommission> subUserProjectCommissionLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
subUserProjectCommissionLambdaQueryWrapper.eq(SubUserProjectCommission::getUserId, userId);
|
||||||
|
List<SubUserProjectCommission> subUserProjectCommissionList = subUserProjectCommissionService.list(subUserProjectCommissionLambdaQueryWrapper);
|
||||||
|
for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissionList) {
|
||||||
|
Long projectDetailId = subUserProjectCommission.getProjectDetailId();
|
||||||
|
BigDecimal maxCommissionRate = map.get(projectDetailId);
|
||||||
|
BigDecimal setCommissionRate = uniteCommissionRate.compareTo(maxCommissionRate) > 0 ? maxCommissionRate : uniteCommissionRate;
|
||||||
|
subUserProjectCommission.setCurrentCommissionRate(setCommissionRate);
|
||||||
|
}
|
||||||
|
subUserProjectCommissionService.updateBatchById(subUserProjectCommissionList);
|
||||||
|
// 更新项目明细抽佣表和下级项目明细抽佣表的单价
|
||||||
|
List<ProjectCommission> projectCommissions = this.list();
|
||||||
|
List<SubUserProjectCommission> subUserProjectCommissions = commonService.convertList(projectCommissions, SubUserProjectCommission.class);
|
||||||
|
for (SubUserProjectCommission subProjectCommission : subUserProjectCommissions) {
|
||||||
|
subProjectCommission.setSubUserId(-1L);
|
||||||
|
}
|
||||||
|
List<SubUserProjectCommission> subProjectCommissions = subUserProjectCommissionService.list();
|
||||||
|
|
||||||
|
// 获取结束时间戳
|
||||||
|
endTime = System.currentTimeMillis();
|
||||||
|
// 计算执行时间
|
||||||
|
executionTime = endTime - startTime;
|
||||||
|
System.out.println("程序执行时间: " + executionTime + " 毫秒");
|
||||||
|
|
||||||
|
|
||||||
|
subProjectCommissions.addAll(subUserProjectCommissions);
|
||||||
|
sortProjectDetailAndSubProjectCommissions(subProjectCommissions);
|
||||||
|
// 1.封装一个Map集合(键:项目明细-下级用户id,值:当前用户的单价)
|
||||||
|
Iterator<SubUserProjectCommission> iterator = subProjectCommissions.iterator();
|
||||||
|
Map<String, BigDecimal> subUserUnitPriceMap = new HashMap<>();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
SubUserProjectCommission commission = iterator.next();
|
||||||
|
Long projectDetailId = commission.getProjectDetailId();
|
||||||
|
BigDecimal projectMinSettlementPrice = minPriceMap.get(projectDetailId);
|
||||||
|
if (commission.getUserId() < userId) {
|
||||||
|
if (commission.getSubUserId() != -1L) subUserUnitPriceMap.put(projectDetailId + "-" + commission.getSubUserId(), calculateFinalPrice(commission.getMyUnitPrice(), commission.getCurrentCommissionRate()).max(projectMinSettlementPrice));
|
||||||
|
iterator.remove(); // 使用迭代器的 remove() 方法移除
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (SubUserProjectCommission subProjectCommission : subProjectCommissions) {
|
||||||
|
Long projectDetailId = subProjectCommission.getProjectDetailId();
|
||||||
|
BigDecimal projectMinSettlementPrice = minPriceMap.get(projectDetailId);
|
||||||
|
Long uid = subProjectCommission.getUserId();
|
||||||
|
Long subUserId = subProjectCommission.getSubUserId();
|
||||||
|
if (uid.equals(userId)) {
|
||||||
|
if (subUserId != -1L) subUserUnitPriceMap.put(projectDetailId + "-" + subUserId, calculateFinalPrice(subProjectCommission.getMyUnitPrice(), subProjectCommission.getCurrentCommissionRate()).max(projectMinSettlementPrice));
|
||||||
|
} else {
|
||||||
|
BigDecimal unitPrice = subUserUnitPriceMap.get(projectDetailId + "-" + uid);
|
||||||
|
subProjectCommission.setMyUnitPrice(unitPrice);
|
||||||
|
if (subUserId != -1L) subUserUnitPriceMap.put(projectDetailId + "-" + subUserId, calculateFinalPrice(unitPrice, subProjectCommission.getCurrentCommissionRate()).max(projectMinSettlementPrice));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 更新下级用户项目明细记录
|
||||||
|
List<SubUserProjectCommission> subCommissionList = subProjectCommissions.stream()
|
||||||
|
.filter(subProjectCommission -> subProjectCommission.getSubUserId() != -1L).toList();
|
||||||
|
// 获取开始时间戳
|
||||||
|
startTime = System.currentTimeMillis();
|
||||||
|
// subUserProjectCommissionService.updateBatchById(subCommissionList);
|
||||||
|
batchUpdateSubUserMyUnitPrice(subCommissionList);
|
||||||
|
|
||||||
|
// 获取结束时间戳
|
||||||
|
endTime = System.currentTimeMillis();
|
||||||
|
// 计算执行时间
|
||||||
|
executionTime = endTime - startTime;
|
||||||
|
System.out.println("程序执行时间: " + executionTime + " 毫秒");
|
||||||
|
|
||||||
|
|
||||||
|
startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
// 更新用户项目明细抽佣记录
|
||||||
|
List<SubUserProjectCommission> proCommissions = subProjectCommissions.stream().filter(subProjectCommission -> subProjectCommission.getSubUserId() == -1L).toList();
|
||||||
|
List<ProjectCommission> proCommissionList = commonService.convertList(proCommissions, ProjectCommission.class);
|
||||||
|
// this.updateBatchById(proCommissionList);
|
||||||
|
batchUpdateMyUnitPrice(proCommissionList);
|
||||||
|
|
||||||
|
// 获取结束时间戳
|
||||||
|
endTime = System.currentTimeMillis();
|
||||||
|
// 计算执行时间
|
||||||
|
executionTime = endTime - startTime;
|
||||||
|
System.out.println("程序执行时间: " + executionTime + " 毫秒");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void batchUpdateSubUserMyUnitPrice(List<SubUserProjectCommission> subCommissionList) {
|
||||||
|
StringBuilder sql = new StringBuilder("UPDATE sub_user_project_commission SET myUnitPrice = CASE id ");
|
||||||
|
|
||||||
|
// 为每个记录构建 WHEN 条件
|
||||||
|
for (SubUserProjectCommission subUserProjectCommission : subCommissionList) {
|
||||||
|
sql.append("WHEN ").append(subUserProjectCommission.getId())
|
||||||
|
.append(" THEN ").append(subUserProjectCommission.getMyUnitPrice()).append(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
sql.append("END WHERE id IN (");
|
||||||
|
|
||||||
|
// 添加所有 ID 到 WHERE 条件
|
||||||
|
for (int i = 0; i < subCommissionList.size(); i++) {
|
||||||
|
sql.append(subCommissionList.get(i).getId());
|
||||||
|
if (i < subCommissionList.size() - 1) {
|
||||||
|
sql.append(",");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sql.append(");");
|
||||||
|
|
||||||
|
// 执行 SQL 语句
|
||||||
|
subUserProjectCommissionMapper.executeUpdate(sql.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void batchUpdateMyUnitPrice(List<ProjectCommission> projectCommissionList) {
|
||||||
|
StringBuilder sql = new StringBuilder("UPDATE project_commission SET myUnitPrice = CASE id ");
|
||||||
|
|
||||||
|
// 为每条记录构建 WHEN ... THEN ...
|
||||||
|
for (ProjectCommission pc : projectCommissionList) {
|
||||||
|
sql.append("WHEN ").append(pc.getId())
|
||||||
|
.append(" THEN ").append(pc.getMyUnitPrice()).append(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
sql.append("END WHERE id IN (");
|
||||||
|
// 拼接所有 id 到 IN 列表
|
||||||
|
for (int i = 0; i < projectCommissionList.size(); i++) {
|
||||||
|
sql.append(projectCommissionList.get(i).getId());
|
||||||
|
if (i < projectCommissionList.size() - 1) {
|
||||||
|
sql.append(",");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sql.append(")");
|
||||||
|
|
||||||
|
// 执行拼好的 SQL
|
||||||
|
this.baseMapper.executeUpdate(sql.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 封装排序方法
|
||||||
|
private void sortSubProjectCommissions(List<SubUserProjectCommission> subProjectCommissions) {
|
||||||
|
// 先根据userId升序排序
|
||||||
|
// 如果userId相同,再根据subUserId升序排序
|
||||||
|
Collections.sort(subProjectCommissions, Comparator.comparingLong(SubUserProjectCommission::getUserId).thenComparingLong(SubUserProjectCommission::getSubUserId));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 封装排序方法
|
||||||
|
private void sortProjectDetailAndSubProjectCommissions(List<SubUserProjectCommission> subProjectCommissions) {
|
||||||
|
// 先根据userId升序排序
|
||||||
|
// 如果userId相同,再根据subUserId升序排序
|
||||||
|
Collections.sort(subProjectCommissions, Comparator.comparingLong(SubUserProjectCommission::getProjectDetailId).thenComparingLong(SubUserProjectCommission::getUserId).thenComparingLong(SubUserProjectCommission::getSubUserId));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 封装方法:根据价格和抽佣比例计算最终价格
|
||||||
|
private BigDecimal calculateFinalPrice(BigDecimal price, BigDecimal commissionRate) {
|
||||||
|
// 计算抽佣比例对应的系数
|
||||||
|
BigDecimal commissionFactor = BigDecimal.ONE.subtract(commissionRate.divide(BigDecimal.valueOf(100)));
|
||||||
|
|
||||||
|
// 计算最终价格
|
||||||
|
return price.multiply(commissionFactor);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,10 +1,25 @@
|
|||||||
package com.greenorange.promotion.service.project.impl;
|
package com.greenorange.promotion.service.project.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import com.greenorange.promotion.common.ErrorCode;
|
||||||
|
import com.greenorange.promotion.exception.ThrowUtils;
|
||||||
|
import com.greenorange.promotion.mapper.ProjectCommissionMapper;
|
||||||
|
import com.greenorange.promotion.mapper.UserInfoMapper;
|
||||||
|
import com.greenorange.promotion.model.dto.subUserProjectCommission.SubUserProjectCommissionUpdateRequest;
|
||||||
|
import com.greenorange.promotion.model.entity.ProjectCommission;
|
||||||
import com.greenorange.promotion.model.entity.SubUserProjectCommission;
|
import com.greenorange.promotion.model.entity.SubUserProjectCommission;
|
||||||
|
import com.greenorange.promotion.model.entity.UserInfo;
|
||||||
|
import com.greenorange.promotion.service.project.ProjectCommissionService;
|
||||||
import com.greenorange.promotion.service.project.SubUserProjectCommissionService;
|
import com.greenorange.promotion.service.project.SubUserProjectCommissionService;
|
||||||
import com.greenorange.promotion.mapper.SubUserProjectCommissionMapper;
|
import com.greenorange.promotion.mapper.SubUserProjectCommissionMapper;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author 35880
|
* @author 35880
|
||||||
@ -15,6 +30,7 @@ import org.springframework.stereotype.Service;
|
|||||||
public class SubUserProjectCommissionServiceImpl extends ServiceImpl<SubUserProjectCommissionMapper, SubUserProjectCommission>
|
public class SubUserProjectCommissionServiceImpl extends ServiceImpl<SubUserProjectCommissionMapper, SubUserProjectCommission>
|
||||||
implements SubUserProjectCommissionService{
|
implements SubUserProjectCommissionService{
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,4 +21,10 @@
|
|||||||
currentCommissionRate,projectId,userId,
|
currentCommissionRate,projectId,userId,
|
||||||
isDelete,createTime,updateTime
|
isDelete,createTime,updateTime
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- <update id="executeUpdate" parameterType="String">-->
|
||||||
|
<!-- ${sql}-->
|
||||||
|
<!-- </update>-->
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
@ -23,4 +23,10 @@
|
|||||||
userId,isDelete,createTime,
|
userId,isDelete,createTime,
|
||||||
updateTime
|
updateTime
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- <update id="executeUpdate" parameterType="String">-->
|
||||||
|
<!-- ${sql}-->
|
||||||
|
<!-- </update>-->
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
Reference in New Issue
Block a user