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 9c126ae..1806ca8 100644 --- a/src/main/java/com/greenorange/promotion/controller/project/ProjectCommissionController.java +++ b/src/main/java/com/greenorange/promotion/controller/project/ProjectCommissionController.java @@ -1,34 +1,38 @@ package com.greenorange.promotion.controller.project; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.greenorange.promotion.annotation.RequiresPermission; import com.greenorange.promotion.annotation.SysLog; import com.greenorange.promotion.common.BaseResponse; -import com.greenorange.promotion.common.ErrorCode; import com.greenorange.promotion.common.ResultUtils; import com.greenorange.promotion.constant.UserConstant; -import com.greenorange.promotion.exception.ThrowUtils; -import com.greenorange.promotion.model.dto.CommonBatchRequest; +import com.greenorange.promotion.model.dto.CommonRequest; import com.greenorange.promotion.model.dto.projectCommission.ProjectCommissionAddRequest; -import com.greenorange.promotion.model.dto.projectCommission.ProjectCommissionQueryRequest; -import com.greenorange.promotion.model.dto.projectCommission.ProjectCommissionUpdateRequest; +import com.greenorange.promotion.model.entity.Project; import com.greenorange.promotion.model.entity.ProjectCommission; +import com.greenorange.promotion.model.entity.ProjectDetail; import com.greenorange.promotion.model.vo.projectCommission.ProjectCommissionVO; +import com.greenorange.promotion.model.vo.projectCommission.ProjectDetailCommissionVO; 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.ProjectService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.greenorange.promotion.model.dto.CommonRequest; -import jakarta.validation.Valid; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** @@ -46,82 +50,164 @@ public class ProjectCommissionController { @Resource private CommonService commonService; + @Resource + private ProjectService projectService; + + @Resource + private ProjectDetailService projectDetailService; + + /** - * web端管理员添加项目明细抽佣 + * 小程序用户查看查询项目的抽佣情况 + * @return 项目抽佣比例列表 + */ + @PostMapping("query/rate") + @Operation(summary = "小程序用户查看查询项目的抽佣情况", description = "参数:无,权限:管理员,方法名:queryProjectCommission") + @RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE) + @SysLog(title = "项目明细抽佣管理", content = "小程序用户查看查询项目的抽佣情况") + public BaseResponse> queryProjectCommission(HttpServletRequest request) { + Long userId = (Long) request.getAttribute("userId"); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(ProjectCommission::getUserId, userId); + List projectCommissionList = projectCommissionService.list(lambdaQueryWrapper); + + List projectDetailList = commonService.findByFieldInTargetField(projectCommissionList, projectDetailService, ProjectCommission::getProjectDetailId, "id"); + // 封装Map集合(键:项目明细id,值:项目明细名称) + Map projectDetailMap = new HashMap<>(); + for (ProjectDetail projectDetail : projectDetailList) { + projectDetailMap.put(projectDetail.getId(), projectDetail.getProjectDetailName()); + } + // 封装项目明细抽佣列表 + List projectDetailCommissionVOList = new ArrayList<>(); + for (ProjectCommission projectCommission : projectCommissionList) { + Long projectDetailId = projectCommission.getProjectDetailId(); + BigDecimal myUnitPrice = projectCommission.getMyUnitPrice(); + BigDecimal currentCommissionRate = projectCommission.getCurrentCommissionRate(); + String projectDetailName = projectDetailMap.get(projectDetailId); + ProjectDetailCommissionVO projectDetailCommissionVO = commonService.copyProperties(projectCommission, ProjectDetailCommissionVO.class); + projectDetailCommissionVO.setProjectDetailName(projectDetailName); + BigDecimal agentUnitPrice = myUnitPrice.multiply(BigDecimal.ONE.subtract(currentCommissionRate)); + projectDetailCommissionVO.setAgentUnitPrice(agentUnitPrice); + projectDetailCommissionVOList.add(projectDetailCommissionVO); + } + // 封装Map集合(键:项目id,值:项目明细抽佣列表) + Map> pdcMap = new HashMap<>(); + for (ProjectDetailCommissionVO projectDetailCommissionVO : projectDetailCommissionVOList) { + Long projectId = projectDetailCommissionVO.getProjectId(); + List pdcList = pdcMap.get(projectId); + if (pdcList == null) { + pdcList = new ArrayList<>(); + } + pdcMap.put(projectId, pdcList); + } + // 封装项目抽佣比例列表 + List projectList = commonService.findByFieldInTargetField(projectCommissionList, projectService, ProjectCommission::getProjectId, "id"); + List projectCommissionVOList = new ArrayList<>(); + for (Project project : projectList) { + ProjectCommissionVO projectCommissionVO = commonService.copyProperties(project, ProjectCommissionVO.class); + Long projectId = project.getId(); + List projectDetailCommissionVOS = pdcMap.get(projectId); + projectCommissionVO.setProjectDetailCommissionVOList(projectDetailCommissionVOS); + projectCommissionVOList.add(projectCommissionVO); + } + return ResultUtils.success(projectCommissionVOList); + } + + + /** + * 小程序用户修改项目的抽佣比例 * @param projectCommissionAddRequest 项目明细抽佣添加请求体 * @return 是否添加成功 */ - @PostMapping("add") - @Operation(summary = "web端管理员添加项目明细抽佣", description = "参数:项目明细抽佣添加请求体,权限:管理员,方法名:addProjectCommission") - @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) - @SysLog(title = "项目明细抽佣管理", content = "web端管理员添加项目明细抽佣") - public BaseResponse addProjectCommission(@Valid @RequestBody ProjectCommissionAddRequest projectCommissionAddRequest) { + @PostMapping("update/rate") + @Operation(summary = "小程序用户修改项目的抽佣比例", description = "参数:项目明细抽佣添加请求体,权限:管理员,方法名:updateProjectCommissionRate") + @RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE) + @SysLog(title = "项目明细抽佣管理", content = "小程序用户修改项目的抽佣比例") + public BaseResponse updateProjectCommissionRate(@Valid @RequestBody ProjectCommissionAddRequest projectCommissionAddRequest) { ProjectCommission projectCommission = commonService.copyProperties(projectCommissionAddRequest, ProjectCommission.class); projectCommissionService.save(projectCommission); return ResultUtils.success(true); } - /** - * web端管理员根据id修改项目明细抽佣信息 - * @param projectCommissionUpdateRequest 项目明细抽佣更新请求体 - * @return 是否更新成功 - */ - @PostMapping("update") - @Operation(summary = "web端管理员更新项目明细抽佣", description = "参数:项目明细抽佣更新请求体,权限:管理员,方法名:updateProjectCommission") - @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) - @SysLog(title = "项目明细抽佣管理", content = "web端管理员根据id修改项目明细抽佣信息") - public BaseResponse updateProjectCommission(@Valid @RequestBody ProjectCommissionUpdateRequest projectCommissionUpdateRequest) { - ProjectCommission projectCommission = commonService.copyProperties(projectCommissionUpdateRequest, ProjectCommission.class); - projectCommissionService.updateById(projectCommission); - return ResultUtils.success(true); - } - /** - * web端管理员根据id删除项目明细抽佣 - * @param commonRequest 项目明细抽佣删除请求体 - * @return 是否删除成功 - */ - @PostMapping("delete") - @Operation(summary = "web端管理员根据id删除项目明细抽佣", description = "参数:项目明细抽佣删除请求体,权限:管理员,方法名:delProjectCommission") - @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) - @SysLog(title = "项目明细抽佣管理", content = "web端管理员根据id删除项目明细抽佣") - public BaseResponse delProjectCommission(@Valid @RequestBody CommonRequest commonRequest) { - Long id = commonRequest.getId(); - projectCommissionService.removeById(id); - return ResultUtils.success(true); - } - /** - * web端管理员批量删除项目明细抽佣 - * @param commonBatchRequest 项目明细抽佣批量删除请求体 - * @return 是否删除成功 - */ - @PostMapping("delBatch") - @Operation(summary = "web端管理员批量删除项目明细抽佣", description = "参数:项目明细抽佣批量删除请求体,权限:管理员,方法名:delBatchProjectCommission") - @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) - @SysLog(title = "项目明细抽佣管理", content = "web端管理员批量删除项目明细抽佣") - public BaseResponse delBatchProjectCommission(@Valid @RequestBody CommonBatchRequest commonBatchRequest) { - List ids = commonBatchRequest.getIds(); - projectCommissionService.removeByIds(ids); - return ResultUtils.success(true); - } - - /** - * web端管理员根据id查询项目明细抽佣 - * @param commonRequest 项目明细抽佣查询请求体 - * @return 项目明细抽佣信息 - */ - @PostMapping("queryById") - @Operation(summary = "web端管理员根据id查询项目明细抽佣", description = "参数:项目明细抽佣查询请求体,权限:管理员,方法名:queryProjectCommissionById") - @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) - @SysLog(title = "项目明细抽佣管理", content = "web端管理员根据id查询项目明细抽佣") - public BaseResponse queryProjectCommissionById(@Valid @RequestBody CommonRequest commonRequest) { - Long id = commonRequest.getId(); - ProjectCommission projectCommission = projectCommissionService.getById(id); - ThrowUtils.throwIf(projectCommission == null, ErrorCode.OPERATION_ERROR, "当前项目明细抽佣不存在"); - ProjectCommissionVO projectCommissionVO = commonService.copyProperties(projectCommission, ProjectCommissionVO.class); - return ResultUtils.success(projectCommissionVO); - } +// +// /** +// * web端管理员添加项目明细抽佣 +// * @param projectCommissionAddRequest 项目明细抽佣添加请求体 +// * @return 是否添加成功 +// */ +// @PostMapping("add") +// @Operation(summary = "web端管理员添加项目明细抽佣", description = "参数:项目明细抽佣添加请求体,权限:管理员,方法名:addProjectCommission") +// @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) +// @SysLog(title = "项目明细抽佣管理", content = "web端管理员添加项目明细抽佣") +// public BaseResponse addProjectCommission(@Valid @RequestBody ProjectCommissionAddRequest projectCommissionAddRequest) { +// ProjectCommission projectCommission = commonService.copyProperties(projectCommissionAddRequest, ProjectCommission.class); +// projectCommissionService.save(projectCommission); +// return ResultUtils.success(true); +// } +// +// /** +// * web端管理员根据id修改项目明细抽佣信息 +// * @param projectCommissionUpdateRequest 项目明细抽佣更新请求体 +// * @return 是否更新成功 +// */ +// @PostMapping("update") +// @Operation(summary = "web端管理员更新项目明细抽佣", description = "参数:项目明细抽佣更新请求体,权限:管理员,方法名:updateProjectCommission") +// @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) +// @SysLog(title = "项目明细抽佣管理", content = "web端管理员根据id修改项目明细抽佣信息") +// public BaseResponse updateProjectCommission(@Valid @RequestBody ProjectCommissionUpdateRequest projectCommissionUpdateRequest) { +// ProjectCommission projectCommission = commonService.copyProperties(projectCommissionUpdateRequest, ProjectCommission.class); +// projectCommissionService.updateById(projectCommission); +// return ResultUtils.success(true); +// } +// +// /** +// * web端管理员根据id删除项目明细抽佣 +// * @param commonRequest 项目明细抽佣删除请求体 +// * @return 是否删除成功 +// */ +// @PostMapping("delete") +// @Operation(summary = "web端管理员根据id删除项目明细抽佣", description = "参数:项目明细抽佣删除请求体,权限:管理员,方法名:delProjectCommission") +// @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) +// @SysLog(title = "项目明细抽佣管理", content = "web端管理员根据id删除项目明细抽佣") +// public BaseResponse delProjectCommission(@Valid @RequestBody CommonRequest commonRequest) { +// Long id = commonRequest.getId(); +// projectCommissionService.removeById(id); +// return ResultUtils.success(true); +// } +// +// /** +// * web端管理员批量删除项目明细抽佣 +// * @param commonBatchRequest 项目明细抽佣批量删除请求体 +// * @return 是否删除成功 +// */ +// @PostMapping("delBatch") +// @Operation(summary = "web端管理员批量删除项目明细抽佣", description = "参数:项目明细抽佣批量删除请求体,权限:管理员,方法名:delBatchProjectCommission") +// @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) +// @SysLog(title = "项目明细抽佣管理", content = "web端管理员批量删除项目明细抽佣") +// public BaseResponse delBatchProjectCommission(@Valid @RequestBody CommonBatchRequest commonBatchRequest) { +// List ids = commonBatchRequest.getIds(); +// projectCommissionService.removeByIds(ids); +// return ResultUtils.success(true); +// } +// +// /** +// * web端管理员根据id查询项目明细抽佣 +// * @param commonRequest 项目明细抽佣查询请求体 +// * @return 项目明细抽佣信息 +// */ +// @PostMapping("queryById") +// @Operation(summary = "web端管理员根据id查询项目明细抽佣", description = "参数:项目明细抽佣查询请求体,权限:管理员,方法名:queryProjectCommissionById") +// @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) +// @SysLog(title = "项目明细抽佣管理", content = "web端管理员根据id查询项目明细抽佣") +// public BaseResponse queryProjectCommissionById(@Valid @RequestBody CommonRequest commonRequest) { +// Long id = commonRequest.getId(); +// ProjectCommission projectCommission = projectCommissionService.getById(id); +// ThrowUtils.throwIf(projectCommission == null, ErrorCode.OPERATION_ERROR, "当前项目明细抽佣不存在"); +// ProjectCommissionVO projectCommissionVO = commonService.copyProperties(projectCommission, ProjectCommissionVO.class); +// return ResultUtils.success(projectCommissionVO); +// } // // /** // * Web端管理员分页查询项目明细抽佣 diff --git a/src/main/java/com/greenorange/promotion/model/vo/project/ProjectCardVO.java b/src/main/java/com/greenorange/promotion/model/vo/project/ProjectCardVO.java index 295aa00..663cfd0 100644 --- a/src/main/java/com/greenorange/promotion/model/vo/project/ProjectCardVO.java +++ b/src/main/java/com/greenorange/promotion/model/vo/project/ProjectCardVO.java @@ -37,7 +37,7 @@ public class ProjectCardVO implements Serializable { /** * 项目图片URL */ - @Schema(description = "项目图片URL", example = "http://xxx.png") + @Schema(description = "项目图片URL", example = "8E9WE24M") private String projectImage; /** diff --git a/src/main/java/com/greenorange/promotion/model/vo/project/ProjectDetailVO.java b/src/main/java/com/greenorange/promotion/model/vo/project/ProjectDetailVO.java index 19d2d80..73c52fb 100644 --- a/src/main/java/com/greenorange/promotion/model/vo/project/ProjectDetailVO.java +++ b/src/main/java/com/greenorange/promotion/model/vo/project/ProjectDetailVO.java @@ -28,7 +28,7 @@ public class ProjectDetailVO implements Serializable { /** * 项目图片URL */ - @Schema(description = "项目图片URL", example = "http://xxx.png") + @Schema(description = "项目图片URL", example = "8E9WE24M") private String projectImage; /** diff --git a/src/main/java/com/greenorange/promotion/model/vo/project/ProjectPageVO.java b/src/main/java/com/greenorange/promotion/model/vo/project/ProjectPageVO.java index 2e9815b..8c82d63 100644 --- a/src/main/java/com/greenorange/promotion/model/vo/project/ProjectPageVO.java +++ b/src/main/java/com/greenorange/promotion/model/vo/project/ProjectPageVO.java @@ -37,7 +37,7 @@ public class ProjectPageVO implements Serializable { /** * 项目图片URL */ - @Schema(description = "项目图片URL", example = "http://xxx.png") + @Schema(description = "项目图片URL", example = "8E9WE24M") private String projectImage; /** diff --git a/src/main/java/com/greenorange/promotion/model/vo/project/ProjectVO.java b/src/main/java/com/greenorange/promotion/model/vo/project/ProjectVO.java index 5040a20..c8a34e2 100644 --- a/src/main/java/com/greenorange/promotion/model/vo/project/ProjectVO.java +++ b/src/main/java/com/greenorange/promotion/model/vo/project/ProjectVO.java @@ -30,7 +30,7 @@ public class ProjectVO implements Serializable { /** * 项目图片URL */ - @Schema(description = "项目图片URL", example = "http://xxx.png") + @Schema(description = "项目图片URL", example = "8E9WE24M") private String projectImage; /** diff --git a/src/main/java/com/greenorange/promotion/model/vo/projectCommission/ProjectCommissionVO.java b/src/main/java/com/greenorange/promotion/model/vo/projectCommission/ProjectCommissionVO.java index 8f21953..58c5fd3 100644 --- a/src/main/java/com/greenorange/promotion/model/vo/projectCommission/ProjectCommissionVO.java +++ b/src/main/java/com/greenorange/promotion/model/vo/projectCommission/ProjectCommissionVO.java @@ -6,6 +6,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.math.BigDecimal; +import java.util.List; /** * 项目明细抽佣 视图对象 @@ -14,41 +15,35 @@ import java.math.BigDecimal; @Schema(description = "项目明细抽佣 视图对象") public class ProjectCommissionVO implements Serializable { - /** - * 项目明细抽佣ID - */ - @Schema(description = "项目明细抽佣ID", example = "1") - private Long id; - - /** - * 项目明细ID - */ - @Schema(description = "项目明细ID", example = "${field.example}") - private Long projectDetailId; - - /** - * 我的单价 - */ - @Schema(description = "我的单价", example = "${field.example}") - private BigDecimal myUnitPrice; - - /** - * 当前抽佣比例 - */ - @Schema(description = "当前抽佣比例", example = "${field.example}") - private BigDecimal currentCommissionRate; - /** * 项目ID */ - @Schema(description = "项目ID", example = "${field.example}") + @Schema(description = "项目ID", example = "1") private Long projectId; /** - * 用户ID + * 项目名称 */ - @Schema(description = "用户ID", example = "${field.example}") - private Long userId; + @Schema(description = "项目名称", example = "美团省钱包") + private String projectName; + + /** + * 项目图片URL + */ + @Schema(description = "项目图片URL", example = "8E9WE24M") + private String projectImage; + + /** + * 项目结算周期 + */ + @Schema(description = "项目结算周期", example = "2") + private Integer projectSettlementCycle; + + /** + * 项目明细列表 + */ + @Schema(description = "项目明细列表") + private List projectDetailCommissionVOList; @Serial diff --git a/src/main/java/com/greenorange/promotion/model/vo/projectCommission/ProjectDetailCommissionVO.java b/src/main/java/com/greenorange/promotion/model/vo/projectCommission/ProjectDetailCommissionVO.java new file mode 100644 index 0000000..61d3c4b --- /dev/null +++ b/src/main/java/com/greenorange/promotion/model/vo/projectCommission/ProjectDetailCommissionVO.java @@ -0,0 +1,52 @@ +package com.greenorange.promotion.model.vo.projectCommission; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +public class ProjectDetailCommissionVO implements Serializable { + + /** + * 项目明细抽佣ID + */ + @Schema(description = "项目明细抽佣ID", example = "1") + private Long id; + + /** + * 项目明细名称 + */ + @Schema(description = "项目明细名称", example = "2.9元购买30元券包") + private String projectDetailName; + + /** + * 我的单价 + */ + @Schema(description = "我的单价", example = "10.44") + private BigDecimal myUnitPrice; + + /** + * 代理单价 + */ + @Schema(description = "代理单价", example = "9.44") + private BigDecimal agentUnitPrice; + + /** + * 当前抽佣比例 + */ + @Schema(description = "当前抽佣比例", example = "3") + private BigDecimal currentCommissionRate; + + /** + * 项目id + */ + @Schema(description = "项目id", example = "1") + private Long projectId; + + + @Serial + private static final long serialVersionUID = 1L; +}