diff --git a/src/main/java/com/greenorange/promotion/controller/project/ProjectCommissionController.java b/src/main/java/com/greenorange/promotion/controller/project/ProjectCommissionController.java index da49640..6e35d7a 100644 --- a/src/main/java/com/greenorange/promotion/controller/project/ProjectCommissionController.java +++ b/src/main/java/com/greenorange/promotion/controller/project/ProjectCommissionController.java @@ -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 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, Object> fieldConditions = Map.of(SubUserProjectCommission::getProjectDetailId, projectDetailId, SubUserProjectCommission::getUserId, userId); +// List 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 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, Object> fieldConditions = Map.of(SubUserProjectCommission::getProjectDetailId, projectDetailId, SubUserProjectCommission::getUserId, userId); - List 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 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 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 uniteProjectCommissionRate(@Valid @RequestBody ProjectCommissionUniteUpdateRequest projectCommissionUniteUpdateRequest, HttpServletRequest request) { +// Long userId = (Long) request.getAttribute("userId"); +// BigDecimal uniteCommissionRate = projectCommissionUniteUpdateRequest.getUniteCommissionRate(); +// +// // 修改项目的统一抽佣比例 +// LambdaUpdateWrapper userMainInfoLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); +// userMainInfoLambdaUpdateWrapper.eq(UserMainInfo::getUserId, userId).set(UserMainInfo::getUniteRate, uniteCommissionRate); +// userMainInfoService.update(userMainInfoLambdaUpdateWrapper); +// +// LambdaQueryWrapper projectCommissionLambdaQueryWrapper = new LambdaQueryWrapper<>(); +// projectCommissionLambdaQueryWrapper.eq(ProjectCommission::getUserId, userId); +// List projectCommissionList = projectCommissionService.list(projectCommissionLambdaQueryWrapper); +// +// List projectDetailList = commonService.findByFieldInTargetField(projectCommissionList, projectDetailService, ProjectCommission::getProjectDetailId, ProjectDetail::getId); +// // 封装map集合(键:项目明细id, 值:项目明细最大抽佣比例) +// Map 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 subUserProjectCommissionLambdaQueryWrapper = new LambdaQueryWrapper<>(); +// subUserProjectCommissionLambdaQueryWrapper.eq(SubUserProjectCommission::getUserId, userId); +// List 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 uniteProjectCommissionRate(@Valid @RequestBody ProjectCommissionUniteUpdateRequest projectCommissionUniteUpdateRequest, HttpServletRequest request) { - Long userId = (Long) request.getAttribute("userId"); - BigDecimal uniteCommissionRate = projectCommissionUniteUpdateRequest.getUniteCommissionRate(); - - // 修改项目的统一抽佣比例 - LambdaUpdateWrapper userMainInfoLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); - userMainInfoLambdaUpdateWrapper.eq(UserMainInfo::getUserId, userId).set(UserMainInfo::getUniteRate, uniteCommissionRate); - userMainInfoService.update(userMainInfoLambdaUpdateWrapper); - - LambdaQueryWrapper projectCommissionLambdaQueryWrapper = new LambdaQueryWrapper<>(); - projectCommissionLambdaQueryWrapper.eq(ProjectCommission::getUserId, userId); - List projectCommissionList = projectCommissionService.list(projectCommissionLambdaQueryWrapper); - - List projectDetailList = commonService.findByFieldInTargetField(projectCommissionList, projectDetailService, ProjectCommission::getProjectDetailId, ProjectDetail::getId); - // 封装map集合(键:项目明细id, 值:项目明细最大抽佣比例) - Map 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 subUserProjectCommissionLambdaQueryWrapper = new LambdaQueryWrapper<>(); - subUserProjectCommissionLambdaQueryWrapper.eq(SubUserProjectCommission::getUserId, userId); - List 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); } diff --git a/src/main/java/com/greenorange/promotion/mapper/ProjectCommissionMapper.java b/src/main/java/com/greenorange/promotion/mapper/ProjectCommissionMapper.java index 1429c40..d7ddde1 100644 --- a/src/main/java/com/greenorange/promotion/mapper/ProjectCommissionMapper.java +++ b/src/main/java/com/greenorange/promotion/mapper/ProjectCommissionMapper.java @@ -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 { + + @Update("${sql}") + void executeUpdate(@Param("sql") String sql); } diff --git a/src/main/java/com/greenorange/promotion/mapper/SubUserProjectCommissionMapper.java b/src/main/java/com/greenorange/promotion/mapper/SubUserProjectCommissionMapper.java index 11d0548..635a47c 100644 --- a/src/main/java/com/greenorange/promotion/mapper/SubUserProjectCommissionMapper.java +++ b/src/main/java/com/greenorange/promotion/mapper/SubUserProjectCommissionMapper.java @@ -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 { + @Update("${sql}") + void executeUpdate(@Param("sql") String sql); + } diff --git a/src/main/java/com/greenorange/promotion/model/entity/SubUserProjectCommission.java b/src/main/java/com/greenorange/promotion/model/entity/SubUserProjectCommission.java index c5122bb..f49204d 100644 --- a/src/main/java/com/greenorange/promotion/model/entity/SubUserProjectCommission.java +++ b/src/main/java/com/greenorange/promotion/model/entity/SubUserProjectCommission.java @@ -69,4 +69,5 @@ public class SubUserProjectCommission implements Serializable { @TableField(exist = false) private static final long serialVersionUID = 1L; + } \ No newline at end of file diff --git a/src/main/java/com/greenorange/promotion/service/project/ProjectCommissionService.java b/src/main/java/com/greenorange/promotion/service/project/ProjectCommissionService.java index 6e75278..317c290 100644 --- a/src/main/java/com/greenorange/promotion/service/project/ProjectCommissionService.java +++ b/src/main/java/com/greenorange/promotion/service/project/ProjectCommissionService.java @@ -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 { + + /** + * 修改项目的抽佣比例 + */ + void updateProjectCommissionRate(ProjectCommissionUpdateRequest projectCommissionUpdateRequest); + + + /** + * 修改下级用户的项目明细抽佣比例 + */ + void updateSubUserProjectCommissionRate(SubUserProjectCommissionUpdateRequest subUserProjectCommissionUpdateRequest); + + + /** + * 小程序用户一键设置项目的的抽佣比例 + */ + void uniteProjectCommissionRate(ProjectCommissionUniteUpdateRequest projectCommissionUniteUpdateRequest, HttpServletRequest request); } diff --git a/src/main/java/com/greenorange/promotion/service/project/SubUserProjectCommissionService.java b/src/main/java/com/greenorange/promotion/service/project/SubUserProjectCommissionService.java index 54eb0f0..2417c6f 100644 --- a/src/main/java/com/greenorange/promotion/service/project/SubUserProjectCommissionService.java +++ b/src/main/java/com/greenorange/promotion/service/project/SubUserProjectCommissionService.java @@ -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 { + } diff --git a/src/main/java/com/greenorange/promotion/service/project/impl/ProjectCommissionServiceImpl.java b/src/main/java/com/greenorange/promotion/service/project/impl/ProjectCommissionServiceImpl.java index 2b8a338..7535a83 100644 --- a/src/main/java/com/greenorange/promotion/service/project/impl/ProjectCommissionServiceImpl.java +++ b/src/main/java/com/greenorange/promotion/service/project/impl/ProjectCommissionServiceImpl.java @@ -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 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 projectCommissionList = commonService.findByFieldEqTargetField(ProjectCommission::getProjectDetailId, projectDetailId, this); + List subUserProjectCommissions = commonService.convertList(projectCommissionList, SubUserProjectCommission.class); + for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissions) { + subUserProjectCommission.setSubUserId(-1L); + } + List subProjectCommissions = commonService.findByFieldEqTargetField(SubUserProjectCommission::getProjectDetailId, projectDetailId, subUserProjectCommissionService); + subProjectCommissions.addAll(subUserProjectCommissions); + sortSubProjectCommissions(subProjectCommissions); + Iterator iterator = subProjectCommissions.iterator(); + Long initSubUserId = projectCommission.getUserId(); + // 1.封装一个Map集合(键:下级用户id,值:当前用户的单价) + Map 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 subUserProCommissions = subProjectCommissions.stream() + .filter(subProjectCommission -> subProjectCommission.getSubUserId() != -1L && subProjectCommission.getUserId().equals(initSubUserId)).toList(); + subUserProjectCommissionService.updateBatchById(subUserProCommissions); + + List projectCommissions = subProjectCommissions.stream() + .filter(subProjectCommission -> subProjectCommission.getSubUserId() == -1L && subProjectCommission.getUserId().equals(initSubUserId)).toList(); + List 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 subUserProjectCommissionList = subProjectCommissions.stream().filter(subProjectCommission -> subProjectCommission.getSubUserId() != -1L).toList(); +// subUserProjectCommissionService.updateBatchById(subUserProjectCommissionList); + batchUpdateSubUserMyUnitPrice(subUserProjectCommissionList); + + // 更新用户项目明细抽佣记录 + List restProjectCommissions = subProjectCommissions.stream().filter(subProjectCommission -> subProjectCommission.getSubUserId() == -1L).toList(); + List 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 projectCommissionList = commonService.findByFieldEqTargetField(ProjectCommission::getProjectDetailId, projectDetailId, this); + List subUserProjectCommissions = commonService.convertList(projectCommissionList, SubUserProjectCommission.class); + for (SubUserProjectCommission subProjectCommission : subUserProjectCommissions) { + subProjectCommission.setSubUserId(-1L); + } + List subProjectCommissions = commonService.findByFieldEqTargetField(SubUserProjectCommission::getProjectDetailId, projectDetailId, subUserProjectCommissionService); + subProjectCommissions.addAll(subUserProjectCommissions); + sortSubProjectCommissions(subProjectCommissions); + Iterator iterator = subProjectCommissions.iterator(); + Long initSubUserId = subUserProjectCommission.getUserId(); + // 1.封装一个Map集合(键:下级用户id,值:当前用户的单价) + Map 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 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 subUserProjectCommissionList = subProjectCommissions.stream().filter(subProjectCommission -> subProjectCommission.getSubUserId() != -1L).toList(); +// subUserProjectCommissionService.updateBatchById(subUserProjectCommissionList); + batchUpdateSubUserMyUnitPrice(subUserProjectCommissionList); + + // 更新用户项目明细抽佣记录 + List projectCommissions = subProjectCommissions.stream().filter(subProjectCommission -> subProjectCommission.getSubUserId() == -1L).toList(); + List 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 userMainInfoLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + userMainInfoLambdaUpdateWrapper.eq(UserMainInfo::getUserId, userId).set(UserMainInfo::getUniteRate, uniteCommissionRate); + userMainInfoService.update(userMainInfoLambdaUpdateWrapper); + + LambdaQueryWrapper projectCommissionLambdaQueryWrapper = new LambdaQueryWrapper<>(); + projectCommissionLambdaQueryWrapper.eq(ProjectCommission::getUserId, userId); + List projectCommissionList = this.list(projectCommissionLambdaQueryWrapper); + + List projectDetailList = commonService.findByFieldInTargetField(projectCommissionList, projectDetailService, ProjectCommission::getProjectDetailId, ProjectDetail::getId); + // 封装map集合(键:项目明细id, 值:项目明细最大抽佣比例) + Map map = new HashMap<>(); + Map 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 subUserProjectCommissionLambdaQueryWrapper = new LambdaQueryWrapper<>(); + subUserProjectCommissionLambdaQueryWrapper.eq(SubUserProjectCommission::getUserId, userId); + List 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 projectCommissions = this.list(); + List subUserProjectCommissions = commonService.convertList(projectCommissions, SubUserProjectCommission.class); + for (SubUserProjectCommission subProjectCommission : subUserProjectCommissions) { + subProjectCommission.setSubUserId(-1L); + } + List subProjectCommissions = subUserProjectCommissionService.list(); + + // 获取结束时间戳 + endTime = System.currentTimeMillis(); + // 计算执行时间 + executionTime = endTime - startTime; + System.out.println("程序执行时间: " + executionTime + " 毫秒"); + + + subProjectCommissions.addAll(subUserProjectCommissions); + sortProjectDetailAndSubProjectCommissions(subProjectCommissions); + // 1.封装一个Map集合(键:项目明细-下级用户id,值:当前用户的单价) + Iterator iterator = subProjectCommissions.iterator(); + Map 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 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 proCommissions = subProjectCommissions.stream().filter(subProjectCommission -> subProjectCommission.getSubUserId() == -1L).toList(); + List 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 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 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 subProjectCommissions) { + // 先根据userId升序排序 + // 如果userId相同,再根据subUserId升序排序 + Collections.sort(subProjectCommissions, Comparator.comparingLong(SubUserProjectCommission::getUserId).thenComparingLong(SubUserProjectCommission::getSubUserId)); + } + + // 封装排序方法 + private void sortProjectDetailAndSubProjectCommissions(List 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); + } + + + } diff --git a/src/main/java/com/greenorange/promotion/service/project/impl/SubUserProjectCommissionServiceImpl.java b/src/main/java/com/greenorange/promotion/service/project/impl/SubUserProjectCommissionServiceImpl.java index 0bb1b20..9f8a892 100644 --- a/src/main/java/com/greenorange/promotion/service/project/impl/SubUserProjectCommissionServiceImpl.java +++ b/src/main/java/com/greenorange/promotion/service/project/impl/SubUserProjectCommissionServiceImpl.java @@ -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 implements SubUserProjectCommissionService{ + } diff --git a/src/main/resources/mapper/ProjectCommissionMapper.xml b/src/main/resources/mapper/ProjectCommissionMapper.xml index fe5e721..4db1a0b 100644 --- a/src/main/resources/mapper/ProjectCommissionMapper.xml +++ b/src/main/resources/mapper/ProjectCommissionMapper.xml @@ -21,4 +21,10 @@ currentCommissionRate,projectId,userId, isDelete,createTime,updateTime + + + + + + diff --git a/src/main/resources/mapper/SubUserProjectCommissionMapper.xml b/src/main/resources/mapper/SubUserProjectCommissionMapper.xml index 6ff49cd..3984c2f 100644 --- a/src/main/resources/mapper/SubUserProjectCommissionMapper.xml +++ b/src/main/resources/mapper/SubUserProjectCommissionMapper.xml @@ -23,4 +23,10 @@ userId,isDelete,createTime, updateTime + + + + + +