初步完成小程序模块

This commit is contained in:
chen-xin-zhi 2025-05-12 14:47:07 +08:00
parent e06fc4a7f8
commit eab0a0f2a3
5 changed files with 271 additions and 94 deletions

View File

@ -83,7 +83,7 @@ public class ProjectCommissionController {
lambdaQueryWrapper.eq(ProjectCommission::getUserId, userId);
List<ProjectCommission> projectCommissionList = projectCommissionService.list(lambdaQueryWrapper);
List<ProjectDetail> projectDetailList = commonService.findByFieldInTargetField(projectCommissionList, projectDetailService, ProjectCommission::getProjectDetailId, "id");
List<ProjectDetail> projectDetailList = commonService.findByFieldInTargetField(projectCommissionList, projectDetailService, ProjectCommission::getProjectDetailId, ProjectDetail::getId);
// 封装Map集合项目明细id项目明细名称
Map<Long, String> projectDetailMap = new HashMap<>();
// 封装Map集合项目明细id项目明细最大抽佣比例
@ -119,7 +119,7 @@ public class ProjectCommissionController {
pdcMap.put(projectId, pdcList);
}
// 封装项目抽佣列表
List<Project> projectList = commonService.findByFieldInTargetField(projectCommissionList, projectService, ProjectCommission::getProjectId, "id");
List<Project> projectList = commonService.findByFieldInTargetField(projectCommissionList, projectService, ProjectCommission::getProjectId, Project::getId);
List<ProjectCommissionVO> 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<SubUserProjectCommission> subUserProjectCommissionList = subUserProjectCommissionService.list(lambdaQueryWrapper);
List<ProjectDetail> projectDetailList = commonService.findByFieldInTargetField(subUserProjectCommissionList, projectDetailService, SubUserProjectCommission::getProjectDetailId, "id");
List<ProjectDetail> projectDetailList = commonService.findByFieldInTargetField(subUserProjectCommissionList, projectDetailService, SubUserProjectCommission::getProjectDetailId, ProjectDetail::getId);
// 封装Map集合项目明细id项目明细名称
Map<Long, String> projectDetailMap = new HashMap<>();
// 封装Map集合项目明细id项目明细最大抽佣比例
@ -280,7 +280,7 @@ public class ProjectCommissionController {
projectCommissionLambdaQueryWrapper.eq(ProjectCommission::getUserId, userId);
List<ProjectCommission> projectCommissionList = projectCommissionService.list(projectCommissionLambdaQueryWrapper);
List<ProjectDetail> projectDetailList = commonService.findByFieldInTargetField(projectCommissionList, projectDetailService, ProjectCommission::getProjectDetailId, "id");
List<ProjectDetail> projectDetailList = commonService.findByFieldInTargetField(projectCommissionList, projectDetailService, ProjectCommission::getProjectDetailId, ProjectDetail::getId);
// 封装map集合项目明细id, 项目明细最大抽佣比例
Map<Long, BigDecimal> map = new HashMap<>();
for (ProjectDetail projectDetail : projectDetailList) {

View File

@ -111,6 +111,9 @@ public class ProjectController {
projectDetailLambdaQueryWrapper.eq(ProjectDetail::getProjectId, id);
List<ProjectDetail> projectDetailList = projectDetailService.list(projectDetailLambdaQueryWrapper);
List<ProjectDetailVO> 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<List<UserProjectVO>> queryUserProjectList(HttpServletRequest request) {
Long userId = (Long) request.getAttribute("userId");
LambdaQueryWrapper<UserProject> lambdaQueryWrapper = new LambdaQueryWrapper<>();

View File

@ -69,7 +69,7 @@ public class UserMainInfoController {
LambdaQueryWrapper<UserInfo> userInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
userInfoLambdaQueryWrapper.eq(UserInfo::getParentUserId, userId);
List<UserInfo> userInfoList = userInfoService.list(userInfoLambdaQueryWrapper);
List<UserMainInfo> userMainInfoList = commonService.findByFieldInTargetField(userInfoList, userMainInfoService, UserInfo::getId, "userId");
List<UserMainInfo> userMainInfoList = commonService.findByFieldInTargetField(userInfoList, userMainInfoService, UserInfo::getId, UserMainInfo::getUserId);
// 封装Map集合用户id用户信息
Map<Long, UserInfo> userInfoMap = new HashMap<>();
for (UserInfo userInfo : userInfoList) {

View File

@ -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<T>包含需要提取属性的元素
// * @param service 执行查询的 Service
// * @param getField 提取源集合中每个元素的属性值的函数
// * @param targetField 目标集合中查询字段的字段名
// * @param <T> 源集合元素类型
// * @param <R> 目标集合中元素类型
// * @return 查询结果集合
// */
// <T, R> List<R> findByFieldInTargetField(List<T> sourceList, IService<R> service, Function<T, Object> getField, String targetField);
/**
* 从源集合中提取指定属性并作为查询条件查询目标集合
* @param sourceList 源集合List<T>包含需要提取属性的元素
* @param service 执行查询的 Service
* @param getField 提取源集合中每个元素的属性值的函数
* @param targetField 目标集合中查询字段的字段名
* @param <T> 源集合元素类型
* @param <R> 目标集合中元素类型
*
* @param sourceList 源集合List<T>包含需要提取属性的元素
* @param service 执行查询的 MyBatis-Plus IService<R>
* @param sourceField 提取源集合中每个元素的属性值的函数 T::getId
* @param targetField 目标集合中查询字段的函数引用 R::getForeignId
* @param <T> 源集合元素类型
* @param <R> 目标集合中元素类型
* @return 查询结果集合
*/
<T, R> List<R> findByFieldInTargetField(List<T> sourceList, IService<R> service, Function<T, Object> getField, String targetField);
<T, R> List<R> findByFieldInTargetField(
List<T> sourceList,
IService<R> service,
Function<T, ?> sourceField,
SFunction<R, ?> targetField
);
// /**
// * 根据指定字段名和值使用给定的服务对象构建查询条件
// * @param <T> 实体类类型
// * @param fieldName 查询字段的名称
// * @param fieldValue 查询字段的值
// * @param service 用于执行查询的服务层对象
// *
// * @return 返回构建的 QueryWrapper 对象用于进一步查询或修改
// */
// <T> QueryWrapper<T> buildQueryWrapperByField(String fieldName, Object fieldValue, IService<T> service);
/**
* 根据指定字段名和值使用给定的服务对象构建查询条件
* @param <T> 实体类类型
* @param fieldName 查询字段的名称
* @param fieldValue 查询字段的值
* @param service 用于执行查询的服务层对象
* 根据指定字段和值使用给定的服务对象构建查询条件
*
* @return 返回构建的 QueryWrapper 对象用于进一步查询或修改
* @param <T> 实体类类型
* @param field 目标查询字段的函数引用 User::getUsername
* @param fieldValue 查询字段的值
* @param service 用于执行查询的服务层对象可选用于后续执行 list/query
* @return 返回构建的 LambdaQueryWrapper 对象用于进一步查询或修改
*/
<T> QueryWrapper<T> buildQueryWrapperByField(String fieldName, Object fieldValue, IService<T> service);
<T> LambdaQueryWrapper<T> buildQueryWrapperByField(
SFunction<T, ?> field,
Object fieldValue,
IService<T> service
);
// /**
// * 根据指定字段名和值使用给定的服务对象查询对应的实体类列表
// * @param <T> 实体类类型
// * @param fieldName 查询字段的名称
// * @param fieldValue 查询字段的值
// * @param service 用于执行查询的服务层对象
// * @return 返回符合条件的实体类列表`List<T>`如果没有符合条件的记录返回空列表
// */
// <T> List<T> findByFieldEqTargetField(String fieldName, Object fieldValue, IService<T> service);
/**
* 根据指定字段名和值使用给定的服务对象查询对应的实体类列表
* @param <T> 实体类类型
* @param fieldName 查询字段的名称
* @param fieldValue 查询字段的值
* @param service 用于执行查询的服务层对象
* @return 返回符合条件的实体类列表`List<T>`如果没有符合条件的记录返回空列表
* 根据指定字段和值使用给定的服务对象查询对应的实体类列表
*
* @param <T> 实体类类型
* @param field 目标查询字段的函数引用 User::getUsername
* @param fieldValue 查询字段的值
* @param service 用于执行查询的服务层对象
* @return 返回符合条件的实体类列表List<T>如果没有符合条件的记录返回空列表
*/
<T> List<T> findByFieldEqTargetField(String fieldName, Object fieldValue, IService<T> service);
<T> List<T> findByFieldEqTargetField(
SFunction<T, ?> field,
Object fieldValue,
IService<T> service
);
// /**
// * 根据多个字段和对应的值进行查询
// * 该方法可以动态构建查询条件并执行查询
// *
// * @param fieldConditions 查询条件的字段和值使用Map存储
// * @param service 执行查询操作的服务对象通常是MyBatis-Plus的 IService
// * @return 返回查询结果的列表
// */
// <T> List<T> findByFieldEqTargetFields(Map<String, Object> fieldConditions, IService<T> service);
/**
* 根据多个字段和对应的值进行查询
* 该方法可以动态构建查询条件并执行查询
*
* @param fieldConditions 查询条件的字段和值使用Map存储
* @param service 执行查询操作的服务对象通常是MyBatis-Plus的 IService
* @return 返回查询结果的列表
* @param <T> 实体类类型
* @param fieldConditions 查询条件的字段引用和值使用 Map 存储
* keyR::getXxxvalue对应的查询值
* @param service 执行查询操作的服务对象MyBatis-Plus IService
* @return 返回查询结果的列表
*/
<T> List<T> findByFieldEqTargetFields(Map<String, Object> fieldConditions, IService<T> service);
<T> List<T> findByFieldEqTargetFields(
Map<SFunction<T, ?>, Object> fieldConditions,
IService<T> service
);

View File

@ -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<T>包含需要提取属性的元素
// * @param service 执行查询的 Service
// * @param getField 提取源集合中每个元素的属性值的函数
// * @param targetField 目标集合中查询字段的字段名
// * @param <T> 源集合元素类型
// * @param <R> 目标集合中元素类型
// * @return 查询结果集合
// */
// public <T, R> List<R> findByFieldInTargetField(List<T> sourceList, IService<R> service, Function<T, Object> getField, String targetField) {
// // 提取源集合中每个元素的字段值
// List<Object> fieldValues = sourceList.stream()
// .map(getField) // 提取每个元素的字段值
// .collect(Collectors.toList());
//
// // 如果 fieldValues 为空直接返回空集合
// if (fieldValues.isEmpty()) {
// return List.of(); // 返回空集合
// }
//
// // 创建查询条件
// QueryWrapper<R> queryWrapper = new QueryWrapper<>();
// queryWrapper.in(targetField, fieldValues); // 根据字段值进行查询
//
// // 执行查询并返回结果
// return service.list(queryWrapper);
// }
/**
* 从源集合中提取指定属性并作为查询条件查询目标集合
* @param sourceList 源集合List<T>包含需要提取属性的元素
* @param service 执行查询的 Service
* @param getField 提取源集合中每个元素的属性值的函数
* @param targetField 目标集合中查询字段的字段名
* @param <T> 源集合元素类型
* @param <R> 目标集合中元素类型
*
* @param sourceList 源集合List<T>包含需要提取属性的元素
* @param service 执行查询的 MyBatis-Plus IService<R>
* @param sourceField 提取源集合中每个元素的属性值的函数 T::getId
* @param targetField 目标集合中查询字段的函数引用 R::getForeignId
* @param <T> 源集合元素类型
* @param <R> 目标集合中元素类型
* @return 查询结果集合
*/
public <T, R> List<R> findByFieldInTargetField(List<T> sourceList, IService<R> service, Function<T, Object> getField, String targetField) {
@Override
public <T, R> List<R> findByFieldInTargetField(
List<T> sourceList,
IService<R> service,
Function<T, ?> sourceField,
SFunction<R, ?> targetField
) {
// 提取源集合中每个元素的字段值
List<Object> fieldValues = sourceList.stream()
.map(getField) // 提取每个元素的字段值
.map(sourceField)
.collect(Collectors.toList());
// 如果 fieldValues 为空直接返回空集合
if (fieldValues.isEmpty()) {
return List.of(); // 返回空集合
return List.of();
}
// 创建查询条件
QueryWrapper<R> queryWrapper = new QueryWrapper<>();
queryWrapper.in(targetField, fieldValues); // 根据字段值进行查询
// 使用 LambdaQueryWrapper 构造 in 查询
LambdaQueryWrapper<R> query = new LambdaQueryWrapper<>();
query.in(targetField, fieldValues);
// 执行查询并返回结果
return service.list(queryWrapper);
return service.list(query);
}
// /**
// * 根据指定字段名和值使用给定的服务对象构建查询条件
// * @param <T> 实体类类型
// * @param fieldName 查询字段的名称
// * @param fieldValue 查询字段的值
// * @param service 用于执行查询的服务层对象
// *
// * @return 返回构建的 QueryWrapper 对象用于进一步查询或修改
// */
// @Override
// public <T> QueryWrapper<T> buildQueryWrapperByField(String fieldName, Object fieldValue, IService<T> service) {
// // 创建 QueryWrapper动态构建查询条件
// QueryWrapper<T> queryWrapper = new QueryWrapper<>();
// queryWrapper.eq(fieldName, fieldValue); // 设置等值查询条件
//
// // 返回 QueryWrapper供外部使用
// return queryWrapper;
// }
/**
* 根据指定字段和值使用给定的服务对象构建查询条件
*
* @param <T> 实体类类型
* @param field 目标查询字段的函数引用 User::getUsername
* @param fieldValue 查询字段的值
* @param service 用于执行查询的服务层对象可选用于后续执行 list/query
* @return 返回构建的 LambdaQueryWrapper 对象用于进一步查询或修改
*/
@Override
public <T> LambdaQueryWrapper<T> buildQueryWrapperByField(
SFunction<T, ?> field,
Object fieldValue,
IService<T> service
) {
// 使用 LambdaQueryWrapper 动态构建查询条件
LambdaQueryWrapper<T> query = new LambdaQueryWrapper<>();
query.eq(field, fieldValue);
return query;
}
// /**
// * 根据指定字段名和值使用给定的服务对象查询对应的实体类列表
// * @param <T> 实体类类型
// * @param fieldName 查询字段的名称
// * @param fieldValue 查询字段的值
// * @param service 用于执行查询的服务层对象
// *
// * @return 返回符合条件的实体类列表`List<T>`如果没有符合条件的记录返回空列表
// */
// @Override
// public <T> List<T> findByFieldEqTargetField(String fieldName, Object fieldValue, IService<T> service) {
// // 创建 QueryWrapper动态构建查询条件
// QueryWrapper<T> queryWrapper = new QueryWrapper<>();
// queryWrapper.eq(fieldName, fieldValue); // 设置等值查询条件
//
// // 执行查询
// return service.list(queryWrapper);
// }
/**
* 根据指定字段名和值使用给定的服务对象构建查询条件
* @param <T> 实体类类型
* @param fieldName 查询字段的名称
* @param fieldValue 查询字段的值
* @param service 用于执行查询的服务层对象
* 根据指定字段和值使用给定的服务对象查询对应的实体类列表
*
* @return 返回构建的 QueryWrapper 对象用于进一步查询或修改
* @param <T> 实体类类型
* @param field 目标查询字段的函数引用 User::getUsername
* @param fieldValue 查询字段的值
* @param service 用于执行查询的服务层对象
* @return 返回符合条件的实体类列表List<T>如果没有符合条件的记录返回空列表
*/
@Override
public <T> QueryWrapper<T> buildQueryWrapperByField(String fieldName, Object fieldValue, IService<T> service) {
// 创建 QueryWrapper动态构建查询条件
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(fieldName, fieldValue); // 设置等值查询条件
// 返回 QueryWrapper供外部使用
return queryWrapper;
public <T> List<T> findByFieldEqTargetField(
SFunction<T, ?> field,
Object fieldValue,
IService<T> service
) {
// 构建 LambdaQueryWrapper并设置等值查询条件
LambdaQueryWrapper<T> query = new LambdaQueryWrapper<>();
query.eq(field, fieldValue);
// 执行查询并返回结果
return service.list(query);
}
/**
* 根据指定字段名和值使用给定的服务对象查询对应的实体类列表
* @param <T> 实体类类型
* @param fieldName 查询字段的名称
* @param fieldValue 查询字段的值
* @param service 用于执行查询的服务层对象
*
* @return 返回符合条件的实体类列表`List<T>`如果没有符合条件的记录返回空列表
*/
@Override
public <T> List<T> findByFieldEqTargetField(String fieldName, Object fieldValue, IService<T> service) {
// 创建 QueryWrapper动态构建查询条件
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(fieldName, fieldValue); // 设置等值查询条件
// 执行查询
return service.list(queryWrapper);
}
// /**
// * 根据多个字段和对应的值进行查询
// * 该方法根据输入的查询条件动态构建查询并执行数据库查询
// * @param fieldConditions 查询条件的字段和值使用Map存储
// * @param service 执行查询操作的服务对象通常是MyBatis-Plus的 IService
// * @return 返回查询结果的列表
// */
// @Override
// public <T> List<T> findByFieldEqTargetFields(Map<String, Object> fieldConditions, IService<T> service) {
// // 创建 QueryWrapper动态构建查询条件
// QueryWrapper<T> queryWrapper = new QueryWrapper<>();
//
// // 遍历传入的条件Map逐个设置查询条件
// for (Map.Entry<String, Object> entry : fieldConditions.entrySet()) {
// // 设置等值查询条件
// queryWrapper.eq(entry.getKey(), entry.getValue());
// }
//
// // 执行查询并返回结果
// return service.list(queryWrapper);
// }
/**
* 根据多个字段和对应的值进行查询
* 该方法根据输入的查询条件动态构建查询并执行数据库查询
* @param fieldConditions 查询条件的字段和值使用Map存储
* @param service 执行查询操作的服务对象通常是MyBatis-Plus的 IService
* @return 返回查询结果的列表
* 该方法可以动态构建查询条件并执行查询
*
* @param <T> 实体类类型
* @param fieldConditions 查询条件的字段引用和值使用 Map 存储
* keyR::getXxxvalue对应的查询值
* @param service 执行查询操作的服务对象MyBatis-Plus IService
* @return 返回查询结果的列表
*/
@Override
public <T> List<T> findByFieldEqTargetFields(Map<String, Object> fieldConditions, IService<T> service) {
// 创建 QueryWrapper动态构建查询条件
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
public <T> List<T> findByFieldEqTargetFields(
Map<SFunction<T, ?>, Object> fieldConditions,
IService<T> service
) {
LambdaQueryWrapper<T> query = new LambdaQueryWrapper<>();
// 遍历传入的条件Map逐个设置查询条件
for (Map.Entry<String, Object> entry : fieldConditions.entrySet()) {
// 设置等值查询条件
queryWrapper.eq(entry.getKey(), entry.getValue());
}
// 动态添加 EQ 条件
fieldConditions.forEach(query::eq);
// 执行查询并返回结果
return service.list(queryWrapper);
// 执行查询并返回
return service.list(query);
}