添加的新功能
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.RoundingMode;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
/**
|
||||
@ -140,6 +138,39 @@ public class ProjectCommissionController {
|
||||
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)
|
||||
// @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);
|
||||
projectCommissionService.updateProjectCommissionRate(projectCommissionUpdateRequest);
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 小程序用户查看下级用户的项目明细抽佣情况
|
||||
* @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 下级用户项目明细抽佣更新请求体
|
||||
@ -259,20 +295,63 @@ public class ProjectCommissionController {
|
||||
@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);
|
||||
projectCommissionService.updateSubUserProjectCommissionRate(subUserProjectCommissionUpdateRequest);
|
||||
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 统一抽佣比例
|
||||
@ -283,43 +362,7 @@ public class ProjectCommissionController {
|
||||
@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);
|
||||
projectCommissionService.uniteProjectCommissionRate(projectCommissionUniteUpdateRequest, request);
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,8 @@ package com.greenorange.promotion.mapper;
|
||||
|
||||
import com.greenorange.promotion.model.entity.ProjectCommission;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Update;
|
||||
|
||||
/**
|
||||
* @author 35880
|
||||
@ -11,6 +13,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
*/
|
||||
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.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Update;
|
||||
|
||||
/**
|
||||
* @author 35880
|
||||
@ -11,6 +13,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
*/
|
||||
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)
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
}
|
@ -1,7 +1,11 @@
|
||||
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.baomidou.mybatisplus.extension.service.IService;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
|
||||
/**
|
||||
* @author 35880
|
||||
@ -10,4 +14,21 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
||||
*/
|
||||
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;
|
||||
|
||||
import com.greenorange.promotion.model.dto.subUserProjectCommission.SubUserProjectCommissionUpdateRequest;
|
||||
import com.greenorange.promotion.model.entity.SubUserProjectCommission;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.apache.ibatis.annotations.Update;
|
||||
|
||||
/**
|
||||
* @author 35880
|
||||
@ -10,4 +12,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
||||
*/
|
||||
public interface SubUserProjectCommissionService extends IService<SubUserProjectCommission> {
|
||||
|
||||
|
||||
}
|
||||
|
@ -1,10 +1,34 @@
|
||||
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.greenorange.promotion.model.entity.ProjectCommission;
|
||||
import com.greenorange.promotion.service.project.ProjectCommissionService;
|
||||
import com.greenorange.promotion.common.ErrorCode;
|
||||
import com.greenorange.promotion.common.ResultUtils;
|
||||
import com.greenorange.promotion.exception.ThrowUtils;
|
||||
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.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author 35880
|
||||
@ -15,6 +39,418 @@ import org.springframework.stereotype.Service;
|
||||
public class ProjectCommissionServiceImpl extends ServiceImpl<ProjectCommissionMapper, ProjectCommission>
|
||||
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;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
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.UserInfo;
|
||||
import com.greenorange.promotion.service.project.ProjectCommissionService;
|
||||
import com.greenorange.promotion.service.project.SubUserProjectCommissionService;
|
||||
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.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author 35880
|
||||
@ -15,6 +30,7 @@ import org.springframework.stereotype.Service;
|
||||
public class SubUserProjectCommissionServiceImpl extends ServiceImpl<SubUserProjectCommissionMapper, SubUserProjectCommission>
|
||||
implements SubUserProjectCommissionService{
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -21,4 +21,10 @@
|
||||
currentCommissionRate,projectId,userId,
|
||||
isDelete,createTime,updateTime
|
||||
</sql>
|
||||
|
||||
|
||||
<!-- <update id="executeUpdate" parameterType="String">-->
|
||||
<!-- ${sql}-->
|
||||
<!-- </update>-->
|
||||
|
||||
</mapper>
|
||||
|
@ -23,4 +23,10 @@
|
||||
userId,isDelete,createTime,
|
||||
updateTime
|
||||
</sql>
|
||||
|
||||
|
||||
<!-- <update id="executeUpdate" parameterType="String">-->
|
||||
<!-- ${sql}-->
|
||||
<!-- </update>-->
|
||||
|
||||
</mapper>
|
||||
|
Reference in New Issue
Block a user