From eab0a0f2a3fdbd6060eb14e914f1fcb1063a19dc Mon Sep 17 00:00:00 2001 From: chen-xin-zhi <3588068430@qq.com> Date: Mon, 12 May 2025 14:47:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=AE=8C=E6=88=90=E5=B0=8F?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project/ProjectCommissionController.java | 8 +- .../controller/project/ProjectController.java | 7 +- .../userInfo/UserMainInfoController.java | 2 +- .../service/common/CommonService.java | 118 +++++++-- .../common/impl/CommonServiceImpl.java | 230 +++++++++++++----- 5 files changed, 271 insertions(+), 94 deletions(-) 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 666dfc8..b33c14f 100644 --- a/src/main/java/com/greenorange/promotion/controller/project/ProjectCommissionController.java +++ b/src/main/java/com/greenorange/promotion/controller/project/ProjectCommissionController.java @@ -83,7 +83,7 @@ public class ProjectCommissionController { lambdaQueryWrapper.eq(ProjectCommission::getUserId, userId); List projectCommissionList = projectCommissionService.list(lambdaQueryWrapper); - List projectDetailList = commonService.findByFieldInTargetField(projectCommissionList, projectDetailService, ProjectCommission::getProjectDetailId, "id"); + List projectDetailList = commonService.findByFieldInTargetField(projectCommissionList, projectDetailService, ProjectCommission::getProjectDetailId, ProjectDetail::getId); // 封装Map集合(键:项目明细id,值:项目明细名称) Map projectDetailMap = new HashMap<>(); // 封装Map集合(键:项目明细id,值:项目明细最大抽佣比例) @@ -119,7 +119,7 @@ public class ProjectCommissionController { pdcMap.put(projectId, pdcList); } // 封装项目抽佣列表 - List projectList = commonService.findByFieldInTargetField(projectCommissionList, projectService, ProjectCommission::getProjectId, "id"); + List projectList = commonService.findByFieldInTargetField(projectCommissionList, projectService, ProjectCommission::getProjectId, Project::getId); List projectCommissionVOList = new ArrayList<>(); for (Project project : projectList) { ProjectCommissionVO projectCommissionVO = commonService.copyProperties(project, ProjectCommissionVO.class); @@ -185,7 +185,7 @@ public class ProjectCommissionController { lambdaQueryWrapper.eq(SubUserProjectCommission::getUserId, userId); List subUserProjectCommissionList = subUserProjectCommissionService.list(lambdaQueryWrapper); - List projectDetailList = commonService.findByFieldInTargetField(subUserProjectCommissionList, projectDetailService, SubUserProjectCommission::getProjectDetailId, "id"); + List projectDetailList = commonService.findByFieldInTargetField(subUserProjectCommissionList, projectDetailService, SubUserProjectCommission::getProjectDetailId, ProjectDetail::getId); // 封装Map集合(键:项目明细id,值:项目明细名称) Map projectDetailMap = new HashMap<>(); // 封装Map集合(键:项目明细id,值:项目明细最大抽佣比例) @@ -280,7 +280,7 @@ public class ProjectCommissionController { projectCommissionLambdaQueryWrapper.eq(ProjectCommission::getUserId, userId); List projectCommissionList = projectCommissionService.list(projectCommissionLambdaQueryWrapper); - List projectDetailList = commonService.findByFieldInTargetField(projectCommissionList, projectDetailService, ProjectCommission::getProjectDetailId, "id"); + List projectDetailList = commonService.findByFieldInTargetField(projectCommissionList, projectDetailService, ProjectCommission::getProjectDetailId, ProjectDetail::getId); // 封装map集合(键:项目明细id, 值:项目明细最大抽佣比例) Map map = new HashMap<>(); for (ProjectDetail projectDetail : projectDetailList) { diff --git a/src/main/java/com/greenorange/promotion/controller/project/ProjectController.java b/src/main/java/com/greenorange/promotion/controller/project/ProjectController.java index a635925..e316905 100644 --- a/src/main/java/com/greenorange/promotion/controller/project/ProjectController.java +++ b/src/main/java/com/greenorange/promotion/controller/project/ProjectController.java @@ -111,6 +111,9 @@ public class ProjectController { projectDetailLambdaQueryWrapper.eq(ProjectDetail::getProjectId, id); List projectDetailList = projectDetailService.list(projectDetailLambdaQueryWrapper); List projectDetailVOS = commonService.convertList(projectDetailList, ProjectDetailVO.class); + + // 更新项目明细价格 + projectDetailVO.setProjectNotificationVOList(projectNotificationVOS); projectDetailVO.setProjectDetailVOList(projectDetailVOS); return ResultUtils.success(projectDetailVO); @@ -122,9 +125,9 @@ public class ProjectController { * @return 推广的项目列表 */ @PostMapping("get/running") - @Operation(summary = "小程序用户查看项目列表", description = "参数:无,权限:管理员,方法名:queryUserProjectList") + @Operation(summary = "小程序用户查看正在推广的项目", description = "参数:无,权限:管理员,方法名:queryUserProjectList") @RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE) - @SysLog(title = "项目管理", content = "小程序用户查看项目列表") + @SysLog(title = "项目管理", content = "小程序用户查看正在推广的项目") public BaseResponse> queryUserProjectList(HttpServletRequest request) { Long userId = (Long) request.getAttribute("userId"); LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); diff --git a/src/main/java/com/greenorange/promotion/controller/userInfo/UserMainInfoController.java b/src/main/java/com/greenorange/promotion/controller/userInfo/UserMainInfoController.java index 2cd8531..2f3c5cd 100644 --- a/src/main/java/com/greenorange/promotion/controller/userInfo/UserMainInfoController.java +++ b/src/main/java/com/greenorange/promotion/controller/userInfo/UserMainInfoController.java @@ -69,7 +69,7 @@ public class UserMainInfoController { LambdaQueryWrapper userInfoLambdaQueryWrapper = new LambdaQueryWrapper<>(); userInfoLambdaQueryWrapper.eq(UserInfo::getParentUserId, userId); List userInfoList = userInfoService.list(userInfoLambdaQueryWrapper); - List userMainInfoList = commonService.findByFieldInTargetField(userInfoList, userMainInfoService, UserInfo::getId, "userId"); + List userMainInfoList = commonService.findByFieldInTargetField(userInfoList, userMainInfoService, UserInfo::getId, UserMainInfo::getUserId); // 封装Map集合(键:用户id,值:用户信息) Map userInfoMap = new HashMap<>(); for (UserInfo userInfo : userInfoList) { diff --git a/src/main/java/com/greenorange/promotion/service/common/CommonService.java b/src/main/java/com/greenorange/promotion/service/common/CommonService.java index aaf4f06..3295c4a 100644 --- a/src/main/java/com/greenorange/promotion/service/common/CommonService.java +++ b/src/main/java/com/greenorange/promotion/service/common/CommonService.java @@ -1,6 +1,8 @@ package com.greenorange.promotion.service.common; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; @@ -11,58 +13,120 @@ public interface CommonService { +// /** +// * 从源集合中提取指定属性并作为查询条件查询目标集合 +// * @param sourceList 源集合(List),包含需要提取属性的元素 +// * @param service 执行查询的 Service +// * @param getField 提取源集合中每个元素的属性值的函数 +// * @param targetField 目标集合中查询字段的字段名 +// * @param 源集合元素类型 +// * @param 目标集合中元素类型 +// * @return 查询结果集合 +// */ +// List findByFieldInTargetField(List sourceList, IService service, Function getField, String targetField); + /** * 从源集合中提取指定属性并作为查询条件查询目标集合 - * @param sourceList 源集合(List),包含需要提取属性的元素 - * @param service 执行查询的 Service - * @param getField 提取源集合中每个元素的属性值的函数 - * @param targetField 目标集合中查询字段的字段名 - * @param 源集合元素类型 - * @param 目标集合中元素类型 + * + * @param sourceList 源集合(List),包含需要提取属性的元素 + * @param service 执行查询的 MyBatis-Plus IService + * @param sourceField 提取源集合中每个元素的属性值的函数(如 T::getId) + * @param targetField 目标集合中查询字段的函数引用(如 R::getForeignId) + * @param 源集合元素类型 + * @param 目标集合中元素类型 * @return 查询结果集合 */ - List findByFieldInTargetField(List sourceList, IService service, Function getField, String targetField); + List findByFieldInTargetField( + List sourceList, + IService service, + Function sourceField, + SFunction targetField + ); + +// /** +// * 根据指定字段名和值,使用给定的服务对象构建查询条件。 +// * @param 实体类类型 +// * @param fieldName 查询字段的名称 +// * @param fieldValue 查询字段的值 +// * @param service 用于执行查询的服务层对象 +// * +// * @return 返回构建的 QueryWrapper 对象,用于进一步查询或修改 +// */ +// QueryWrapper buildQueryWrapperByField(String fieldName, Object fieldValue, IService service); + /** - * 根据指定字段名和值,使用给定的服务对象构建查询条件。 - * @param 实体类类型 - * @param fieldName 查询字段的名称 - * @param fieldValue 查询字段的值 - * @param service 用于执行查询的服务层对象 + * 根据指定字段和值,使用给定的服务对象构建查询条件。 * - * @return 返回构建的 QueryWrapper 对象,用于进一步查询或修改 + * @param 实体类类型 + * @param field 目标查询字段的函数引用(如 User::getUsername) + * @param fieldValue 查询字段的值 + * @param service 用于执行查询的服务层对象(可选,用于后续执行 list/query 等) + * @return 返回构建的 LambdaQueryWrapper 对象,用于进一步查询或修改 */ - QueryWrapper buildQueryWrapperByField(String fieldName, Object fieldValue, IService service); - + LambdaQueryWrapper buildQueryWrapperByField( + SFunction field, + Object fieldValue, + IService service + ); +// /** +// * 根据指定字段名和值,使用给定的服务对象查询对应的实体类列表。 +// * @param 实体类类型 +// * @param fieldName 查询字段的名称 +// * @param fieldValue 查询字段的值 +// * @param service 用于执行查询的服务层对象 +// * @return 返回符合条件的实体类列表(`List`)。如果没有符合条件的记录,返回空列表。 +// */ +// List findByFieldEqTargetField(String fieldName, Object fieldValue, IService service); /** - * 根据指定字段名和值,使用给定的服务对象查询对应的实体类列表。 - * @param 实体类类型 - * @param fieldName 查询字段的名称 - * @param fieldValue 查询字段的值 - * @param service 用于执行查询的服务层对象 - * @return 返回符合条件的实体类列表(`List`)。如果没有符合条件的记录,返回空列表。 + * 根据指定字段和值,使用给定的服务对象查询对应的实体类列表。 + * + * @param 实体类类型 + * @param field 目标查询字段的函数引用(如 User::getUsername) + * @param fieldValue 查询字段的值 + * @param service 用于执行查询的服务层对象 + * @return 返回符合条件的实体类列表(List)。如果没有符合条件的记录,返回空列表。 */ - List findByFieldEqTargetField(String fieldName, Object fieldValue, IService service); + List findByFieldEqTargetField( + SFunction field, + Object fieldValue, + IService service + ); +// /** +// * 根据多个字段和对应的值进行查询。 +// * 该方法可以动态构建查询条件并执行查询。 +// * +// * @param fieldConditions 查询条件的字段和值,使用Map存储 +// * @param service 执行查询操作的服务对象(通常是MyBatis-Plus的 IService) +// * @return 返回查询结果的列表 +// */ +// List findByFieldEqTargetFields(Map fieldConditions, IService service); + + /** * 根据多个字段和对应的值进行查询。 * 该方法可以动态构建查询条件并执行查询。 * - * @param fieldConditions 查询条件的字段和值,使用Map存储 - * @param service 执行查询操作的服务对象(通常是MyBatis-Plus的 IService) - * @return 返回查询结果的列表 + * @param 实体类类型 + * @param fieldConditions 查询条件的字段引用和值,使用 Map 存储 + * (key:R::getXxx,value:对应的查询值) + * @param service 执行查询操作的服务对象(MyBatis-Plus 的 IService) + * @return 返回查询结果的列表 */ - List findByFieldEqTargetFields(Map fieldConditions, IService service); - + List findByFieldEqTargetFields( + Map, Object> fieldConditions, + IService service + ); diff --git a/src/main/java/com/greenorange/promotion/service/common/impl/CommonServiceImpl.java b/src/main/java/com/greenorange/promotion/service/common/impl/CommonServiceImpl.java index 1554694..7bbfb9c 100644 --- a/src/main/java/com/greenorange/promotion/service/common/impl/CommonServiceImpl.java +++ b/src/main/java/com/greenorange/promotion/service/common/impl/CommonServiceImpl.java @@ -1,6 +1,8 @@ package com.greenorange.promotion.service.common.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.baomidou.mybatisplus.extension.service.IService; import com.greenorange.promotion.service.common.CommonService; import org.springframework.beans.BeanUtils; @@ -16,103 +18,211 @@ public class CommonServiceImpl implements CommonService { +// +// /** +// * 从源集合中提取指定属性并作为查询条件查询目标集合 +// * @param sourceList 源集合(List),包含需要提取属性的元素 +// * @param service 执行查询的 Service +// * @param getField 提取源集合中每个元素的属性值的函数 +// * @param targetField 目标集合中查询字段的字段名 +// * @param 源集合元素类型 +// * @param 目标集合中元素类型 +// * @return 查询结果集合 +// */ +// public List findByFieldInTargetField(List sourceList, IService service, Function getField, String targetField) { +// // 提取源集合中每个元素的字段值 +// List fieldValues = sourceList.stream() +// .map(getField) // 提取每个元素的字段值 +// .collect(Collectors.toList()); +// +// // 如果 fieldValues 为空,直接返回空集合 +// if (fieldValues.isEmpty()) { +// return List.of(); // 返回空集合 +// } +// +// // 创建查询条件 +// QueryWrapper queryWrapper = new QueryWrapper<>(); +// queryWrapper.in(targetField, fieldValues); // 根据字段值进行查询 +// +// // 执行查询并返回结果 +// return service.list(queryWrapper); +// } + /** * 从源集合中提取指定属性并作为查询条件查询目标集合 - * @param sourceList 源集合(List),包含需要提取属性的元素 - * @param service 执行查询的 Service - * @param getField 提取源集合中每个元素的属性值的函数 - * @param targetField 目标集合中查询字段的字段名 - * @param 源集合元素类型 - * @param 目标集合中元素类型 + * + * @param sourceList 源集合(List),包含需要提取属性的元素 + * @param service 执行查询的 MyBatis-Plus IService + * @param sourceField 提取源集合中每个元素的属性值的函数(如 T::getId) + * @param targetField 目标集合中查询字段的函数引用(如 R::getForeignId) + * @param 源集合元素类型 + * @param 目标集合中元素类型 * @return 查询结果集合 */ - public List findByFieldInTargetField(List sourceList, IService service, Function getField, String targetField) { + @Override + public List findByFieldInTargetField( + List sourceList, + IService service, + Function sourceField, + SFunction targetField + ) { // 提取源集合中每个元素的字段值 List fieldValues = sourceList.stream() - .map(getField) // 提取每个元素的字段值 + .map(sourceField) .collect(Collectors.toList()); // 如果 fieldValues 为空,直接返回空集合 if (fieldValues.isEmpty()) { - return List.of(); // 返回空集合 + return List.of(); } - // 创建查询条件 - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(targetField, fieldValues); // 根据字段值进行查询 + // 使用 LambdaQueryWrapper 构造 in 查询 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(targetField, fieldValues); // 执行查询并返回结果 - return service.list(queryWrapper); + return service.list(query); } +// /** +// * 根据指定字段名和值,使用给定的服务对象构建查询条件。 +// * @param 实体类类型 +// * @param fieldName 查询字段的名称 +// * @param fieldValue 查询字段的值 +// * @param service 用于执行查询的服务层对象 +// * +// * @return 返回构建的 QueryWrapper 对象,用于进一步查询或修改 +// */ +// @Override +// public QueryWrapper buildQueryWrapperByField(String fieldName, Object fieldValue, IService service) { +// // 创建 QueryWrapper,动态构建查询条件 +// QueryWrapper queryWrapper = new QueryWrapper<>(); +// queryWrapper.eq(fieldName, fieldValue); // 设置等值查询条件 +// +// // 返回 QueryWrapper,供外部使用 +// return queryWrapper; +// } + + /** + * 根据指定字段和值,使用给定的服务对象构建查询条件。 + * + * @param 实体类类型 + * @param field 目标查询字段的函数引用(如 User::getUsername) + * @param fieldValue 查询字段的值 + * @param service 用于执行查询的服务层对象(可选,用于后续执行 list/query 等) + * @return 返回构建的 LambdaQueryWrapper 对象,用于进一步查询或修改 + */ + @Override + public LambdaQueryWrapper buildQueryWrapperByField( + SFunction field, + Object fieldValue, + IService service + ) { + // 使用 LambdaQueryWrapper 动态构建查询条件 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(field, fieldValue); + return query; + } + + + + + + +// /** +// * 根据指定字段名和值,使用给定的服务对象查询对应的实体类列表。 +// * @param 实体类类型 +// * @param fieldName 查询字段的名称 +// * @param fieldValue 查询字段的值 +// * @param service 用于执行查询的服务层对象 +// * +// * @return 返回符合条件的实体类列表(`List`)。如果没有符合条件的记录,返回空列表。 +// */ +// @Override +// public List findByFieldEqTargetField(String fieldName, Object fieldValue, IService service) { +// // 创建 QueryWrapper,动态构建查询条件 +// QueryWrapper queryWrapper = new QueryWrapper<>(); +// queryWrapper.eq(fieldName, fieldValue); // 设置等值查询条件 +// +// // 执行查询 +// return service.list(queryWrapper); +// } + + /** - * 根据指定字段名和值,使用给定的服务对象构建查询条件。 - * @param 实体类类型 - * @param fieldName 查询字段的名称 - * @param fieldValue 查询字段的值 - * @param service 用于执行查询的服务层对象 + * 根据指定字段和值,使用给定的服务对象查询对应的实体类列表。 * - * @return 返回构建的 QueryWrapper 对象,用于进一步查询或修改 + * @param 实体类类型 + * @param field 目标查询字段的函数引用(如 User::getUsername) + * @param fieldValue 查询字段的值 + * @param service 用于执行查询的服务层对象 + * @return 返回符合条件的实体类列表(List)。如果没有符合条件的记录,返回空列表。 */ @Override - public QueryWrapper buildQueryWrapperByField(String fieldName, Object fieldValue, IService service) { - // 创建 QueryWrapper,动态构建查询条件 - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq(fieldName, fieldValue); // 设置等值查询条件 - - // 返回 QueryWrapper,供外部使用 - return queryWrapper; + public List findByFieldEqTargetField( + SFunction field, + Object fieldValue, + IService service + ) { + // 构建 LambdaQueryWrapper,并设置等值查询条件 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(field, fieldValue); + // 执行查询并返回结果 + return service.list(query); } - - /** - * 根据指定字段名和值,使用给定的服务对象查询对应的实体类列表。 - * @param 实体类类型 - * @param fieldName 查询字段的名称 - * @param fieldValue 查询字段的值 - * @param service 用于执行查询的服务层对象 - * - * @return 返回符合条件的实体类列表(`List`)。如果没有符合条件的记录,返回空列表。 - */ - @Override - public List findByFieldEqTargetField(String fieldName, Object fieldValue, IService service) { - // 创建 QueryWrapper,动态构建查询条件 - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq(fieldName, fieldValue); // 设置等值查询条件 - - // 执行查询 - return service.list(queryWrapper); - } - +// /** +// * 根据多个字段和对应的值进行查询。 +// * 该方法根据输入的查询条件,动态构建查询,并执行数据库查询。 +// * @param fieldConditions 查询条件的字段和值,使用Map存储 +// * @param service 执行查询操作的服务对象(通常是MyBatis-Plus的 IService) +// * @return 返回查询结果的列表 +// */ +// @Override +// public List findByFieldEqTargetFields(Map fieldConditions, IService service) { +// // 创建 QueryWrapper,动态构建查询条件 +// QueryWrapper queryWrapper = new QueryWrapper<>(); +// +// // 遍历传入的条件Map,逐个设置查询条件 +// for (Map.Entry entry : fieldConditions.entrySet()) { +// // 设置等值查询条件 +// queryWrapper.eq(entry.getKey(), entry.getValue()); +// } +// +// // 执行查询,并返回结果 +// return service.list(queryWrapper); +// } /** * 根据多个字段和对应的值进行查询。 - * 该方法根据输入的查询条件,动态构建查询,并执行数据库查询。 - * @param fieldConditions 查询条件的字段和值,使用Map存储 - * @param service 执行查询操作的服务对象(通常是MyBatis-Plus的 IService) - * @return 返回查询结果的列表 + * 该方法可以动态构建查询条件并执行查询。 + * + * @param 实体类类型 + * @param fieldConditions 查询条件的字段引用和值,使用 Map 存储 + * (key:R::getXxx,value:对应的查询值) + * @param service 执行查询操作的服务对象(MyBatis-Plus 的 IService) + * @return 返回查询结果的列表 */ @Override - public List findByFieldEqTargetFields(Map fieldConditions, IService service) { - // 创建 QueryWrapper,动态构建查询条件 - QueryWrapper queryWrapper = new QueryWrapper<>(); + public List findByFieldEqTargetFields( + Map, Object> fieldConditions, + IService service + ) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - // 遍历传入的条件Map,逐个设置查询条件 - for (Map.Entry entry : fieldConditions.entrySet()) { - // 设置等值查询条件 - queryWrapper.eq(entry.getKey(), entry.getValue()); - } + // 动态添加 EQ 条件 + fieldConditions.forEach(query::eq); - // 执行查询,并返回结果 - return service.list(queryWrapper); + // 执行查询并返回 + return service.list(query); }