Compare commits
33 Commits
青橙1.0.0
...
7a226ebe50
Author | SHA1 | Date | |
---|---|---|---|
7a226ebe50 | |||
f094f58159 | |||
6c248d1da3 | |||
cbaa7f8a0c | |||
8d766edec3 | |||
a0557729c6 | |||
656bee3ad1 | |||
5f7c3b50ff | |||
869fd1a8b1 | |||
e880431e07 | |||
1513ea51dc | |||
bbd063c4cd | |||
42aff09dae | |||
77c73355e2 | |||
3d8fd5591e | |||
ad6eb74170 | |||
1f7e1211cf | |||
502f079194 | |||
a0e60bece6 | |||
f871d61650 | |||
95d30cc5f6 | |||
7ca23bc987 | |||
746ac2c6bd | |||
5ec4c4ff42 | |||
2c25017f0a | |||
c04ae851cd | |||
5b56f29e45 | |||
7140d5008f | |||
460dced912 | |||
d18d87f81d | |||
2827ef39c5 | |||
ddad249dea | |||
8ad84afcfe |
19
pom.xml
19
pom.xml
@ -207,6 +207,25 @@
|
||||
<version>2.6</version>
|
||||
</dependency>
|
||||
|
||||
<!--图片合成-->
|
||||
<dependency>
|
||||
<groupId>com.freewayso</groupId>
|
||||
<artifactId>image-combiner</artifactId>
|
||||
<version>2.6.9</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-crypto</artifactId>
|
||||
<version>5.8.7</version> <!-- 换成你项目里使用的 Spring Security 版本 -->
|
||||
</dependency>
|
||||
|
||||
|
||||
<!--rabbitmq依赖-->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-amqp</artifactId>
|
||||
</dependency>
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,10 @@
|
||||
package com.greenorange.promotion.annotation;
|
||||
|
||||
/**
|
||||
* 所有待校验的枚举都应实现此接口,
|
||||
* 并通过 getValue() 返回其对应的校验字符串。
|
||||
*/
|
||||
public interface BaseEnum {
|
||||
/** 返回该枚举常量对应的校验值 */
|
||||
String getValue();
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package com.greenorange.promotion.annotation;
|
||||
|
||||
import jakarta.validation.Constraint;
|
||||
import jakarta.validation.Payload;
|
||||
import java.lang.annotation.*;
|
||||
|
||||
@Documented
|
||||
@Constraint(validatedBy = EnumValueValidator.class)
|
||||
@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface EnumValue {
|
||||
String message() default "无效的枚举值";
|
||||
Class<?>[] groups() default {};
|
||||
Class<? extends Payload>[] payload() default {};
|
||||
|
||||
/** 要校验的枚举类,必须实现 BaseEnum */
|
||||
Class<? extends BaseEnum> enumClass();
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package com.greenorange.promotion.annotation;
|
||||
|
||||
import jakarta.validation.ConstraintValidator;
|
||||
import jakarta.validation.ConstraintValidatorContext;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* 初始化时从 enumClass 拿到所有常量的 getValue(),
|
||||
* 然后在 isValid 中判断传入值是否包含于其中。
|
||||
*/
|
||||
public class EnumValueValidator implements ConstraintValidator<EnumValue, String> {
|
||||
private Set<String> validValues;
|
||||
|
||||
@Override
|
||||
public void initialize(EnumValue annotation) {
|
||||
Class<? extends BaseEnum> enumClass = annotation.enumClass();
|
||||
validValues = Stream.of(enumClass.getEnumConstants())
|
||||
.map(BaseEnum::getValue)
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValid(String value, ConstraintValidatorContext context) {
|
||||
return StringUtils.isBlank(value) || validValues.contains(value);
|
||||
}
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
package com.greenorange.promotion.annotation;
|
||||
|
||||
import com.greenorange.promotion.model.enums.FileUploadBizEnum;
|
||||
import jakarta.validation.ConstraintValidator;
|
||||
import jakarta.validation.ConstraintValidatorContext;
|
||||
|
||||
// 枚举校验器
|
||||
public class FileEnumValidator implements ConstraintValidator<FileEnumValue, String> {
|
||||
|
||||
|
||||
@Override
|
||||
public void initialize(FileEnumValue constraintAnnotation) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValid(String value, ConstraintValidatorContext context) {
|
||||
return FileUploadBizEnum.getEnumByValue(value) != null;
|
||||
}
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
package com.greenorange.promotion.annotation;
|
||||
|
||||
import jakarta.validation.Constraint;
|
||||
import jakarta.validation.Payload;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
// 自定义校验注解
|
||||
@Constraint(validatedBy = FileEnumValidator.class)
|
||||
@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface FileEnumValue {
|
||||
String message() default "文件业务类型错误"; // 错误信息
|
||||
Class<?>[] groups() default {}; // 组别
|
||||
Class<? extends Payload>[] payload() default {}; // 负载
|
||||
Class<? extends Enum<?>> enumClass(); // 枚举类类型
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
package com.greenorange.promotion.annotation;
|
||||
|
||||
import com.greenorange.promotion.model.enums.ProjectStatusEnum;
|
||||
import jakarta.validation.ConstraintValidator;
|
||||
import jakarta.validation.ConstraintValidatorContext;
|
||||
|
||||
public class ProjectStatusEnumValidator implements ConstraintValidator<ProjectStatusEnumValue, String> {
|
||||
|
||||
@Override
|
||||
public void initialize(ProjectStatusEnumValue constraintAnnotation) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValid(String value, ConstraintValidatorContext context) {
|
||||
return ProjectStatusEnum.getEnumByValue(value) != null;
|
||||
}
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
package com.greenorange.promotion.annotation;
|
||||
|
||||
import jakarta.validation.Constraint;
|
||||
import jakarta.validation.Payload;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
// 自定义校验注解
|
||||
@Constraint(validatedBy = ProjectStatusEnumValidator.class)
|
||||
@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface ProjectStatusEnumValue {
|
||||
|
||||
String message() default "项目状态错误"; // 错误信息
|
||||
Class<?>[] groups() default {}; // 组别
|
||||
Class<? extends Payload>[] payload() default {}; // 负载
|
||||
Class<? extends Enum<?>> enumClass(); // 枚举类类型
|
||||
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
package com.greenorange.promotion.annotation;
|
||||
|
||||
|
||||
import com.greenorange.promotion.model.enums.UserRoleEnum;
|
||||
import jakarta.validation.ConstraintValidator;
|
||||
import jakarta.validation.ConstraintValidatorContext;
|
||||
|
||||
|
||||
// 枚举校验器
|
||||
public class UserEnumValidator implements ConstraintValidator<UserEnumValue, String> {
|
||||
|
||||
|
||||
@Override
|
||||
public void initialize(UserEnumValue constraintAnnotation) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValid(String value, ConstraintValidatorContext context) {
|
||||
return UserRoleEnum.getEnumByValue(value) != null;
|
||||
}
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
package com.greenorange.promotion.annotation;
|
||||
|
||||
import jakarta.validation.Constraint;
|
||||
import jakarta.validation.Payload;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
// 自定义校验注解
|
||||
@Constraint(validatedBy = UserEnumValidator.class)
|
||||
@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface UserEnumValue {
|
||||
String message() default "无效的用户角色"; // 错误信息
|
||||
Class<?>[] groups() default {}; // 组别
|
||||
Class<? extends Payload>[] payload() default {}; // 负载
|
||||
Class<? extends Enum<?>> enumClass(); // 枚举类类型
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
package com.greenorange.promotion.annotation;
|
||||
|
||||
import com.greenorange.promotion.model.enums.WithdrawStatusEnum;
|
||||
import jakarta.validation.ConstraintValidator;
|
||||
import jakarta.validation.ConstraintValidatorContext;
|
||||
|
||||
public class WithdrawStatusEnumValidator implements ConstraintValidator<WithdrawStatusEnumValue, String> {
|
||||
|
||||
@Override
|
||||
public void initialize(WithdrawStatusEnumValue constraintAnnotation) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValid(String value, ConstraintValidatorContext context) {
|
||||
return WithdrawStatusEnum.getEnumByValue(value) != null;
|
||||
}
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
package com.greenorange.promotion.annotation;
|
||||
|
||||
import jakarta.validation.Constraint;
|
||||
import jakarta.validation.Payload;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
|
||||
// 自定义校验注解
|
||||
@Constraint(validatedBy = WithdrawStatusEnumValidator.class)
|
||||
@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface WithdrawStatusEnumValue {
|
||||
String message() default "提现状态错误"; // 错误信息
|
||||
Class<?>[] groups() default {}; // 组别
|
||||
Class<? extends Payload>[] payload() default {}; // 负载
|
||||
Class<? extends Enum<?>> enumClass(); // 枚举类类型
|
||||
}
|
@ -72,11 +72,15 @@ public class PermissionCheck {
|
||||
String userRole = userInfo.getUserRole();
|
||||
UserRoleEnum userRoleEnum = UserRoleEnum.getEnumByValue(userRole);
|
||||
|
||||
// 接口权限只能是 USER,ADMIN,BOSS,用户权限是 ADMIN,BOSS,USER,BAN
|
||||
// 接口权限只能是 USER,ADMIN,BOSS,用户权限是 ADMIN,BOSS,USER,BAN,MANAGER,SUPERVISOR,STAFF
|
||||
// 校验角色
|
||||
ThrowUtils.throwIf(UserRoleEnum.USER.equals(userRoleEnum) && !UserRoleEnum.USER.equals(interfaceRoleEnum), ErrorCode.NO_AUTH_ERROR);
|
||||
ThrowUtils.throwIf(UserRoleEnum.BAN.equals(userRoleEnum), ErrorCode.NO_AUTH_ERROR, "用户已被封禁");
|
||||
ThrowUtils.throwIf(UserRoleEnum.ADMIN.equals(userRoleEnum) && UserRoleEnum.BOSS.equals(interfaceRoleEnum), ErrorCode.NO_AUTH_ERROR);
|
||||
ThrowUtils.throwIf(UserRoleEnum.BOSS.equals(userRoleEnum) && UserRoleEnum.USER.equals(interfaceRoleEnum), ErrorCode.NO_AUTH_ERROR);
|
||||
ThrowUtils.throwIf(UserRoleEnum.ADMIN.equals(userRoleEnum) && !UserRoleEnum.ADMIN.equals(interfaceRoleEnum), ErrorCode.NO_AUTH_ERROR);
|
||||
ThrowUtils.throwIf(UserRoleEnum.BAN.equals(userRoleEnum), ErrorCode.PARAMS_ERROR, "用户已被封禁");
|
||||
ThrowUtils.throwIf((UserRoleEnum.USER.equals(userRoleEnum)
|
||||
|| UserRoleEnum.STAFF.equals(userRoleEnum)
|
||||
|| UserRoleEnum.SUPERVISOR.equals(userRoleEnum)
|
||||
|| UserRoleEnum.MANAGER.equals(userRoleEnum)) && !UserRoleEnum.USER.equals(interfaceRoleEnum), ErrorCode.NO_AUTH_ERROR);
|
||||
|
||||
return joinPoint.proceed();
|
||||
}
|
||||
|
@ -0,0 +1,25 @@
|
||||
package com.greenorange.promotion.config;
|
||||
|
||||
import org.springframework.amqp.support.converter.DefaultClassMapper;
|
||||
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
|
||||
import org.springframework.amqp.support.converter.MessageConverter;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration
|
||||
public class RabbitMQConfig {
|
||||
|
||||
@Bean
|
||||
public MessageConverter jsonToMapMessageConverter() {
|
||||
DefaultClassMapper defaultClassMapper = new DefaultClassMapper();
|
||||
defaultClassMapper.setTrustedPackages("com.greenorange.promotion.utils.MultiDelayMessage"); // trusted packages
|
||||
Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter();
|
||||
jackson2JsonMessageConverter.setClassMapper(defaultClassMapper);
|
||||
return jackson2JsonMessageConverter;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public MessageConverter messageConverter(){
|
||||
return new Jackson2JsonMessageConverter();
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package com.greenorange.promotion.config;
|
||||
|
||||
import cn.binarywang.wx.miniapp.api.WxMaService;
|
||||
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
|
||||
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
|
||||
import lombok.Data;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Data
|
||||
@Slf4j
|
||||
@Configuration
|
||||
@ConfigurationProperties(prefix = "wx.mini")
|
||||
public class WxOpenConfig {
|
||||
|
||||
private String appId;
|
||||
|
||||
private String appSecret;
|
||||
|
||||
private WxMaService wxMaService;
|
||||
|
||||
/**
|
||||
* 单例模式
|
||||
*/
|
||||
public WxMaService getWxMaService() {
|
||||
if (wxMaService != null) {
|
||||
return wxMaService;
|
||||
}
|
||||
synchronized (this) {
|
||||
if (wxMaService != null) {
|
||||
return wxMaService;
|
||||
}
|
||||
WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
|
||||
config.setAppid(appId);
|
||||
config.setSecret(appSecret);
|
||||
WxMaService service = new WxMaServiceImpl();
|
||||
service.setWxMaConfig(config);
|
||||
wxMaService = service;
|
||||
return wxMaService;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,78 @@
|
||||
package com.greenorange.promotion.config;
|
||||
|
||||
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
|
||||
import com.wechat.pay.java.core.util.IOUtil;
|
||||
import com.wechat.pay.java.service.payments.jsapi.JsapiServiceExtension;
|
||||
import com.wechat.pay.java.service.refund.RefundService;
|
||||
import lombok.Data;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@Data
|
||||
@Slf4j
|
||||
@Configuration
|
||||
@Component("WxPayConfig")
|
||||
@ConfigurationProperties(prefix = "wx.pay")
|
||||
public class WxPayConfig {
|
||||
|
||||
private String appId;
|
||||
|
||||
private String apiV3Key;
|
||||
|
||||
private String notifyUrl;
|
||||
|
||||
private String merchantId;
|
||||
|
||||
private String privateKeyPath;
|
||||
|
||||
private String merchantSerialNumber;
|
||||
|
||||
// RSA配置
|
||||
private RSAAutoCertificateConfig RSAConfig;
|
||||
|
||||
// JSAPI支付
|
||||
private JsapiServiceExtension jsapiServiceExtension;
|
||||
|
||||
// 退款
|
||||
private RefundService refundService;
|
||||
|
||||
/**
|
||||
* 初始化配置
|
||||
*/
|
||||
@Bean
|
||||
public boolean initWxPayConfig() throws IOException {
|
||||
this.RSAConfig = buildRSAAutoCertificateConfig();
|
||||
this.jsapiServiceExtension = buildJsapiServiceExtension(RSAConfig);
|
||||
this.refundService = buildRefundService(RSAConfig);
|
||||
return true;
|
||||
}
|
||||
|
||||
// 构建并使用自动更新平台证书的RSA配置,一个商户号只能初始化一个配置,否则会因为重复的下载任务报错
|
||||
private RSAAutoCertificateConfig buildRSAAutoCertificateConfig() throws IOException {
|
||||
// 将 resource 目录下的文件转为 InputStream,然后利用 IOUtil.toString(inputStream) 转化为密钥
|
||||
String privateKey = IOUtil.toString(new ClassPathResource(privateKeyPath).getInputStream());
|
||||
return new RSAAutoCertificateConfig.Builder()
|
||||
.merchantId(merchantId)
|
||||
.privateKey(privateKey)
|
||||
.merchantSerialNumber(merchantSerialNumber)
|
||||
.apiV3Key(apiV3Key)
|
||||
.build();
|
||||
}
|
||||
|
||||
// 构建JSAPI支付
|
||||
private JsapiServiceExtension buildJsapiServiceExtension(RSAAutoCertificateConfig config) {
|
||||
return new JsapiServiceExtension.Builder().config(config).build();
|
||||
}
|
||||
|
||||
// 构建退款
|
||||
private RefundService buildRefundService(RSAAutoCertificateConfig config) {
|
||||
return new RefundService.Builder().config(config).build();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package com.greenorange.promotion.constant;
|
||||
|
||||
/**
|
||||
* 订单状态常量
|
||||
*/
|
||||
public interface OrderStatusConstant {
|
||||
|
||||
String CLOSED = "交易关闭";
|
||||
|
||||
String SUCCESS = "交易成功";
|
||||
|
||||
String PENDING = "待支付";
|
||||
|
||||
String REFUNDED = "已退款";
|
||||
|
||||
|
||||
}
|
@ -2,8 +2,6 @@ package com.greenorange.promotion.constant;
|
||||
|
||||
/**
|
||||
* 正则表达式常量
|
||||
*
|
||||
* @author <a href="https://xuande-hk.gitee.io">玄德</a>
|
||||
*/
|
||||
@SuppressWarnings("all")
|
||||
public interface RegexConstant {
|
||||
|
@ -7,4 +7,10 @@ public interface SystemConstant {
|
||||
*/
|
||||
String VERIFICATION_CODE = "verificationCode";
|
||||
|
||||
|
||||
/**
|
||||
* 文件公共前缀
|
||||
*/
|
||||
String FILE_COMMON_PREFIX = "http://27.30.77.229:9091/file/download/";
|
||||
|
||||
}
|
||||
|
@ -43,4 +43,19 @@ public interface UserConstant {
|
||||
*/
|
||||
String BAN_ROLE = "ban";
|
||||
|
||||
/**
|
||||
* 经理
|
||||
*/
|
||||
String MANAGER_ROLE = "manager";
|
||||
|
||||
/**
|
||||
* 主管
|
||||
*/
|
||||
String SUPERVISOR_ROLE = "supervisor";
|
||||
|
||||
/**
|
||||
* 员工
|
||||
*/
|
||||
String STAFF_ROLE = "staff";
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,256 @@
|
||||
package com.greenorange.promotion.controller.course;
|
||||
|
||||
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.plugins.pagination.Page;
|
||||
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.CommonStringRequest;
|
||||
import com.greenorange.promotion.model.dto.course.CourseAddRequest;
|
||||
import com.greenorange.promotion.model.dto.course.CourseQueryRequest;
|
||||
import com.greenorange.promotion.model.dto.course.CourseUpdateRequest;
|
||||
import com.greenorange.promotion.model.entity.Course;
|
||||
import com.greenorange.promotion.model.vo.course.CourseCardVO;
|
||||
import com.greenorange.promotion.model.vo.course.CourseDetailVO;
|
||||
import com.greenorange.promotion.model.vo.course.CourseVO;
|
||||
import com.greenorange.promotion.service.common.CommonService;
|
||||
import com.greenorange.promotion.service.course.CourseService;
|
||||
import com.greenorange.promotion.service.wechat.WechatGetQrcodeService;
|
||||
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 org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
/**
|
||||
* 课程 控制器
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("course")
|
||||
@Slf4j
|
||||
@Tag(name = "课程模块")
|
||||
public class CourseController {
|
||||
|
||||
@Resource
|
||||
private CourseService courseService;
|
||||
|
||||
@Resource
|
||||
private CommonService commonService;
|
||||
|
||||
|
||||
/**
|
||||
* 小程序端用户查看热门课程列表
|
||||
* @return 课程信息列表
|
||||
*/
|
||||
@PostMapping("query/hot")
|
||||
@Operation(summary = "小程序端用户查看热门课程列表", description = "参数:无,权限:管理员,方法名:miniQueryHotCourseList")
|
||||
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||
@SysLog(title = "课程管理", content = "小程序端用户查看热门课程列表")
|
||||
public BaseResponse<List<CourseCardVO>> miniQueryHotCourseList() {
|
||||
List<Course> courseList = commonService.findByFieldEqTargetField(Course::getIsShelves, true, courseService);
|
||||
// 降序排序并取前四个元素
|
||||
courseList = courseList.stream()
|
||||
.sorted((course1, course2) -> Integer.compare(course2.getOrderCount(), course1.getOrderCount())) // 降序排序
|
||||
.limit(4) // 取前四个元素
|
||||
.collect(Collectors.toList());
|
||||
List<CourseCardVO> courseCardVOS = commonService.convertList(courseList, CourseCardVO.class);
|
||||
return ResultUtils.success(courseCardVOS);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 小程序端用户根据类别查看课程列表
|
||||
* @param commonStringRequest 课程类别
|
||||
* @return 课程信息列表
|
||||
*/
|
||||
@PostMapping("query/type")
|
||||
@Operation(summary = "小程序端用户根据类别查看课程列表", description = "参数:课程添加请求体,权限:管理员,方法名:miniQueryCourseByType")
|
||||
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||
@SysLog(title = "课程管理", content = "小程序端用户根据类别查看课程列表")
|
||||
public BaseResponse<List<CourseCardVO>> miniQueryCourseByType(@Valid @RequestBody CommonStringRequest commonStringRequest) {
|
||||
String courseType = commonStringRequest.getTemplateString();
|
||||
Map<SFunction<Course, ?>, Object> fieldConditions = Map.of(Course::getType, courseType, Course::getIsShelves, true);
|
||||
List<Course> courseList = commonService.findByFieldEqTargetFields(fieldConditions, courseService);
|
||||
List<CourseCardVO> courseCardVOS = commonService.convertList(courseList, CourseCardVO.class);
|
||||
return ResultUtils.success(courseCardVOS);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 小程序端用户根据id查询课程详情
|
||||
* @param commonRequest 课程id
|
||||
* @return 课程信息列表
|
||||
*/
|
||||
@PostMapping("query/id")
|
||||
@Operation(summary = "小程序端用户根据id查询课程详情", description = "参数:课程id,权限:管理员,方法名:miniQueryCourseById")
|
||||
@SysLog(title = "课程管理", content = "小程序端用户根据id查询课程详情")
|
||||
public BaseResponse<CourseDetailVO> miniQueryCourseById(@Valid @RequestBody CommonRequest commonRequest) {
|
||||
Long id = commonRequest.getId();
|
||||
Course course = courseService.getById(id);
|
||||
CourseDetailVO courseDetailVO = commonService.copyProperties(course, CourseDetailVO.class);
|
||||
return ResultUtils.success(courseDetailVO);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 小程序端用户根据id查看课程基本信息
|
||||
* @param commonRequest 课程id
|
||||
* @return 课程基本信息
|
||||
*/
|
||||
@PostMapping("detail/id")
|
||||
@Operation(summary = "小程序端用户根据id查看课程基本信息", description = "参数:课程id,权限:管理员,方法名:miniQueryCourseBaseInfo")
|
||||
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||
@SysLog(title = "课程管理", content = "小程序端用户根据id查看课程基本信息")
|
||||
public BaseResponse<CourseCardVO> miniQueryCourseBaseInfo(@Valid @RequestBody CommonRequest commonRequest) {
|
||||
Long id = commonRequest.getId();
|
||||
Course course = courseService.getById(id);
|
||||
CourseCardVO courseCardVO = commonService.copyProperties(course, CourseCardVO.class);
|
||||
return ResultUtils.success(courseCardVO);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* web端管理员添加课程
|
||||
* @param courseAddRequest 课程添加请求体
|
||||
* @return 是否添加成功
|
||||
*/
|
||||
@PostMapping("add")
|
||||
@Operation(summary = "web端管理员添加课程", description = "参数:课程添加请求体,权限:管理员,方法名:addCourse")
|
||||
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
@SysLog(title = "课程管理", content = "web端管理员添加课程")
|
||||
public BaseResponse<Long> addCourse(@Valid @RequestBody CourseAddRequest courseAddRequest) {
|
||||
Course course = commonService.copyProperties(courseAddRequest, Course.class);
|
||||
courseService.save(course);
|
||||
return ResultUtils.success(course.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* web端管理员根据id修改课程信息
|
||||
* @param courseUpdateRequest 课程更新请求体
|
||||
* @return 是否更新成功
|
||||
*/
|
||||
@PostMapping("update")
|
||||
@Operation(summary = "web端管理员根据id修改课程信息", description = "参数:课程更新请求体,权限:管理员,方法名:updateCourse")
|
||||
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
@SysLog(title = "课程管理", content = "web端管理员根据id修改课程信息")
|
||||
public BaseResponse<Boolean> updateCourse(@Valid @RequestBody CourseUpdateRequest courseUpdateRequest) {
|
||||
Course course = commonService.copyProperties(courseUpdateRequest, Course.class);
|
||||
courseService.updateById(course);
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* web端管理员根据id删除课程
|
||||
* @param commonRequest 课程删除请求体
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
@PostMapping("delete")
|
||||
@Operation(summary = "web端管理员根据id删除课程", description = "参数:课程删除请求体,权限:管理员,方法名:delCourse")
|
||||
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
@SysLog(title = "课程管理", content = "web端管理员根据id删除课程")
|
||||
public BaseResponse<Boolean> delCourse(@Valid @RequestBody CommonRequest commonRequest) {
|
||||
Long id = commonRequest.getId();
|
||||
courseService.removeById(id);
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* web端管理员批量删除课程
|
||||
* @param commonBatchRequest 课程批量删除请求体
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
@PostMapping("delBatch")
|
||||
@Operation(summary = "web端管理员批量删除课程", description = "参数:课程批量删除请求体,权限:管理员,方法名:delBatchCourse")
|
||||
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
@SysLog(title = "课程管理", content = "web端管理员批量删除课程")
|
||||
public BaseResponse<Boolean> delBatchCourse(@Valid @RequestBody CommonBatchRequest commonBatchRequest) {
|
||||
List<Long> ids = commonBatchRequest.getIds();
|
||||
courseService.removeByIds(ids);
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* web端管理员根据id查询课程
|
||||
* @param commonRequest 课程查询请求体
|
||||
* @return 课程信息
|
||||
*/
|
||||
@PostMapping("queryById")
|
||||
@Operation(summary = "web端管理员根据id查询课程", description = "参数:课程查询请求体,权限:管理员,方法名:queryCourseById")
|
||||
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
@SysLog(title = "课程管理", content = "web端管理员根据id查询课程")
|
||||
public BaseResponse<CourseVO> queryCourseById(@Valid @RequestBody CommonRequest commonRequest) {
|
||||
Long id = commonRequest.getId();
|
||||
Course course = courseService.getById(id);
|
||||
CourseVO courseVO = commonService.copyProperties(course, CourseVO.class);
|
||||
return ResultUtils.success(courseVO);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* web端管理员上(下)架课程
|
||||
* @param commonRequest 课程id
|
||||
* @return 课程信息
|
||||
*/
|
||||
@PostMapping("isShelves")
|
||||
@Operation(summary = "web端管理员上(下)架课程", description = "参数:课程查询请求体,权限:管理员,方法名:updateCourseShelvesStatus")
|
||||
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
@SysLog(title = "课程管理", content = "web端管理员上(下)架课程")
|
||||
public BaseResponse<Boolean> updateCourseShelvesStatus(@Valid @RequestBody CommonRequest commonRequest) {
|
||||
Long id = commonRequest.getId();
|
||||
Course course = courseService.getById(id);
|
||||
course.setIsShelves(!course.getIsShelves());
|
||||
courseService.updateById(course);
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Web端管理员分页查询课程
|
||||
* @param courseQueryRequest 课程查询请求体
|
||||
* @return 课程列表
|
||||
*/
|
||||
@PostMapping("page")
|
||||
@Operation(summary = "Web端管理员分页查询课程", description = "参数:课程查询请求体,权限:管理员,方法名:listCourseByPage")
|
||||
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
@SysLog(title = "课程管理", content = "Web端管理员分页查询课程")
|
||||
public BaseResponse<Page<CourseVO>> listCourseByPage(@Valid @RequestBody CourseQueryRequest courseQueryRequest) {
|
||||
long current = courseQueryRequest.getCurrent();
|
||||
long pageSize = courseQueryRequest.getPageSize();
|
||||
QueryWrapper<Course> queryWrapper = courseService.getQueryWrapper(courseQueryRequest);
|
||||
Page<Course> page = courseService.page(new Page<>(current, pageSize), queryWrapper);
|
||||
List<Course> courseList = page.getRecords();
|
||||
List<CourseVO> courseVOList = commonService.convertList(courseList, CourseVO.class);
|
||||
Page<CourseVO> voPage = new Page<>(current, pageSize);
|
||||
voPage.setRecords(courseVOList);
|
||||
voPage.setPages(page.getPages());
|
||||
voPage.setTotal(page.getTotal());
|
||||
return ResultUtils.success(voPage);
|
||||
}
|
||||
}
|
@ -0,0 +1,218 @@
|
||||
package com.greenorange.promotion.controller.course;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
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.OrderStatusConstant;
|
||||
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.courseOrder.CourseOrderAddRequest;
|
||||
import com.greenorange.promotion.model.dto.courseOrder.CourseOrderQueryRequest;
|
||||
import com.greenorange.promotion.model.dto.courseOrder.CourseOrderUpdateRequest;
|
||||
import com.greenorange.promotion.model.entity.Course;
|
||||
import com.greenorange.promotion.model.entity.CourseOrder;
|
||||
import com.greenorange.promotion.model.vo.course.CourseCardVO;
|
||||
import com.greenorange.promotion.model.vo.courseOrder.CourseOrderCardVO;
|
||||
import com.greenorange.promotion.model.vo.courseOrder.CourseOrderVO;
|
||||
import com.greenorange.promotion.service.common.CommonService;
|
||||
import com.greenorange.promotion.service.course.CourseOrderService;
|
||||
import com.greenorange.promotion.service.course.CourseService;
|
||||
import com.greenorange.promotion.utils.OrderNumberUtils;
|
||||
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 org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 课程订单 控制器
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("courseOrder")
|
||||
@Slf4j
|
||||
@Tag(name = "课程订单模块")
|
||||
public class CourseOrderController {
|
||||
|
||||
@Resource
|
||||
private CourseService courseService;
|
||||
|
||||
@Resource
|
||||
private CourseOrderService courseOrderService;
|
||||
|
||||
@Resource
|
||||
private CommonService commonService;
|
||||
|
||||
/**
|
||||
* 小程序端用户生成课程订单
|
||||
* @param courseOrderAddRequest 课程id
|
||||
* @return 是否添加成功
|
||||
*/
|
||||
@PostMapping("add")
|
||||
@Operation(summary = "小程序端用户生成课程订单", description = "参数:课程id,权限:管理员,方法名:addCourseOrder")
|
||||
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||
@SysLog(title = "课程订单管理", content = "小程序端用户生成课程订单")
|
||||
public BaseResponse<Long> addCourseOrder(@Valid @RequestBody CourseOrderAddRequest courseOrderAddRequest, HttpServletRequest request) {
|
||||
Long userId = (Long) request.getAttribute("userId");
|
||||
Long courseId = courseOrderAddRequest.getCourseId();
|
||||
Course course = courseService.getById(courseId);
|
||||
ThrowUtils.throwIf(course == null, ErrorCode.OPERATION_ERROR, "该课程不存在");
|
||||
CourseOrder courseOrder = commonService.copyProperties(course, CourseOrder.class);
|
||||
courseOrder.setOrderNumber(OrderNumberUtils.generateOrderId());
|
||||
courseOrder.setTotalAmount(course.getDiscountPrice());
|
||||
courseOrder.setUserId(userId);
|
||||
courseOrderService.save(courseOrder);
|
||||
return ResultUtils.success(courseOrder.getId());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 小程序端用户取消课程订单
|
||||
* @param courseOrderAddRequest 课程id
|
||||
* @return 是否添加成功
|
||||
*/
|
||||
@PostMapping("cancel")
|
||||
@Operation(summary = "小程序端用户取消课程订单", description = "参数:订单id,权限:管理员,方法名:cancelCourseOrder")
|
||||
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||
@SysLog(title = "课程订单管理", content = "小程序端用户取消课程订单")
|
||||
public BaseResponse<Long> cancelCourseOrder(@Valid @RequestBody CourseOrderAddRequest courseOrderAddRequest) {
|
||||
Long courseId = courseOrderAddRequest.getCourseId();
|
||||
CourseOrder courseOrder = courseOrderService.getById(courseId);
|
||||
ThrowUtils.throwIf(courseOrder == null || !courseOrder.getOrderStatus().equals(OrderStatusConstant.PENDING),
|
||||
ErrorCode.OPERATION_ERROR, "该订单不存在或者订单状态错误");
|
||||
LambdaUpdateWrapper<CourseOrder> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.eq(CourseOrder::getId, courseId).set(CourseOrder::getOrderStatus, OrderStatusConstant.CLOSED);
|
||||
courseOrderService.update(updateWrapper);
|
||||
return ResultUtils.success(courseOrder.getId());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 小程序端用户查询课程订单列表
|
||||
* @return 课程订单列表
|
||||
*/
|
||||
@PostMapping("query/list")
|
||||
@Operation(summary = "小程序端用户查询课程订单列表", description = "参数:无,权限:管理员,方法名:queryCourseOrderList")
|
||||
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||
@SysLog(title = "课程订单管理", content = "小程序端用户查询课程订单列表")
|
||||
public BaseResponse<List<CourseOrderCardVO>> queryCourseOrderList(HttpServletRequest request) {
|
||||
Long userId = (Long) request.getAttribute("userId");
|
||||
List<CourseOrder> courseOrderList = commonService.findByFieldEqTargetField(CourseOrder::getUserId, userId, courseOrderService);
|
||||
List<CourseOrderCardVO> courseOrderCardVOS = commonService.convertList(courseOrderList, CourseOrderCardVO.class);
|
||||
Collections.reverse(courseOrderCardVOS);
|
||||
return ResultUtils.success(courseOrderCardVOS);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 小程序端用户根据id查询订单详情
|
||||
* @return 课程订单列表
|
||||
*/
|
||||
@PostMapping("query/detail")
|
||||
@Operation(summary = "小程序端用户根据id查询订单详情", description = "参数:订单id,权限:管理员,方法名:queryCourseOrderDetailById")
|
||||
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||
@SysLog(title = "课程订单管理", content = "小程序端用户根据id查询订单详情")
|
||||
public BaseResponse<CourseOrderVO> queryCourseOrderDetailById(@RequestBody CommonRequest commonRequest) {
|
||||
Long id = commonRequest.getId();
|
||||
CourseOrder courseOrder = courseOrderService.getById(id);
|
||||
CourseOrderVO courseOrderVO = commonService.copyProperties(courseOrder, CourseOrderVO.class);
|
||||
return ResultUtils.success(courseOrderVO);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* web端管理员根据id删除课程订单
|
||||
* @param commonRequest 课程订单删除请求体
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
@PostMapping("delete")
|
||||
@Operation(summary = "web端管理员根据id删除课程订单", description = "参数:课程订单删除请求体,权限:管理员,方法名:delCourseOrder")
|
||||
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
@SysLog(title = "课程订单管理", content = "web端管理员根据id删除课程订单")
|
||||
public BaseResponse<Boolean> delCourseOrder(@Valid @RequestBody CommonRequest commonRequest) {
|
||||
Long id = commonRequest.getId();
|
||||
CourseOrder courseOrder = courseOrderService.getById(id);
|
||||
ThrowUtils.throwIf(courseOrder == null || !courseOrder.getOrderStatus().equals(OrderStatusConstant.CLOSED),
|
||||
ErrorCode.OPERATION_ERROR, "该课程订单不存在或订单状态错误");
|
||||
courseOrderService.removeById(id);
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* web端管理员批量删除课程订单
|
||||
* @param commonBatchRequest 课程订单批量删除请求体
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
@PostMapping("delBatch")
|
||||
@Operation(summary = "web端管理员批量删除课程订单", description = "参数:课程订单批量删除请求体,权限:管理员,方法名:delBatchCourseOrder")
|
||||
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
@SysLog(title = "课程订单管理", content = "web端管理员批量删除课程订单")
|
||||
public BaseResponse<Boolean> delBatchCourseOrder(@Valid @RequestBody CommonBatchRequest commonBatchRequest) {
|
||||
List<Long> ids = commonBatchRequest.getIds();
|
||||
LambdaQueryWrapper<CourseOrder> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.ne(CourseOrder::getOrderStatus, OrderStatusConstant.CLOSED);
|
||||
long count = courseOrderService.count(queryWrapper);
|
||||
ThrowUtils.throwIf(count > 0, ErrorCode.OPERATION_ERROR, "存在未关闭的课程订单");
|
||||
courseOrderService.removeByIds(ids);
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* web端管理员根据id查询课程订单
|
||||
* @param commonRequest 课程订单查询请求体
|
||||
* @return 课程订单信息
|
||||
*/
|
||||
@PostMapping("queryById")
|
||||
@Operation(summary = "web端管理员根据id查询课程订单", description = "参数:课程订单查询请求体,权限:管理员,方法名:queryCourseOrderById")
|
||||
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
@SysLog(title = "课程订单管理", content = "web端管理员根据id查询课程订单")
|
||||
public BaseResponse<CourseOrderVO> queryCourseOrderById(@Valid @RequestBody CommonRequest commonRequest) {
|
||||
Long id = commonRequest.getId();
|
||||
CourseOrder courseOrder = courseOrderService.getById(id);
|
||||
CourseOrderVO courseOrderVO = commonService.copyProperties(courseOrder, CourseOrderVO.class);
|
||||
return ResultUtils.success(courseOrderVO);
|
||||
}
|
||||
|
||||
/**
|
||||
* Web端管理员分页查询课程订单
|
||||
* @param courseOrderQueryRequest 课程订单查询请求体
|
||||
* @return 课程订单列表
|
||||
*/
|
||||
@PostMapping("page")
|
||||
@Operation(summary = "Web端管理员分页查询课程订单", description = "参数:课程订单查询请求体,权限:管理员,方法名:listCourseOrderByPage")
|
||||
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
@SysLog(title = "课程订单管理", content = "Web端管理员分页查询课程订单")
|
||||
public BaseResponse<Page<CourseOrderVO>> listCourseOrderByPage(@Valid @RequestBody CourseOrderQueryRequest courseOrderQueryRequest) {
|
||||
long current = courseOrderQueryRequest.getCurrent();
|
||||
long pageSize = courseOrderQueryRequest.getPageSize();
|
||||
QueryWrapper<CourseOrder> queryWrapper = courseOrderService.getQueryWrapper(courseOrderQueryRequest);
|
||||
Page<CourseOrder> page = courseOrderService.page(new Page<>(current, pageSize), queryWrapper);
|
||||
List<CourseOrder> courseOrderList = page.getRecords();
|
||||
List<CourseOrderVO> courseOrderVOList = commonService.convertList(courseOrderList, CourseOrderVO.class);
|
||||
Page<CourseOrderVO> voPage = new Page<>(current, pageSize);
|
||||
voPage.setRecords(courseOrderVOList);
|
||||
voPage.setPages(page.getPages());
|
||||
voPage.setTotal(page.getTotal());
|
||||
return ResultUtils.success(voPage);
|
||||
}
|
||||
}
|
@ -33,14 +33,15 @@ import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.validation.Valid;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.lang.reflect.GenericDeclaration;
|
||||
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;
|
||||
|
||||
|
||||
/**
|
||||
@ -70,12 +71,6 @@ public class ProjectCommissionController {
|
||||
@Resource
|
||||
private UserInfoService userInfoService;
|
||||
|
||||
@Resource
|
||||
private UserMainInfoService userMainInfoService;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 小程序用户查看查询项目的抽佣情况
|
||||
@ -141,6 +136,49 @@ public class ProjectCommissionController {
|
||||
}
|
||||
|
||||
|
||||
// public static void main(String[] args) {
|
||||
// PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
|
||||
// String encode = passwordEncoder.encode("123456");
|
||||
// System.out.println(encode);
|
||||
// boolean matches = passwordEncoder.matches("123456", "$2a$10$/yBGQqsHK78vlEtuMGTVY.bU/TamHQbr4wQIzj1B1H1ud/ZKPGICC");
|
||||
// System.out.println(matches);
|
||||
// }
|
||||
|
||||
|
||||
//
|
||||
// /**
|
||||
// * 小程序用户修改项目的抽佣比例
|
||||
// * @param projectCommissionUpdateRequest 项目明细抽佣更新请求体
|
||||
// * @return 是否添加成功
|
||||
// */
|
||||
// @PostMapping("update/rate")
|
||||
// @Operation(summary = "小程序用户修改项目的抽佣比例", description = "参数:项目明细抽佣更新请求体,权限:管理员,方法名:updateProjectCommissionRate")
|
||||
// @RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||
//// @SysLog(title = "项目明细抽佣管理", content = "小程序用户修改项目的抽佣比例")
|
||||
// public BaseResponse<Boolean> updateProjectCommissionRate(@Valid @RequestBody ProjectCommissionUpdateRequest projectCommissionUpdateRequest, HttpServletRequest request) {
|
||||
// Long id = projectCommissionUpdateRequest.getId();
|
||||
// BigDecimal currentCommissionRate = projectCommissionUpdateRequest.getCurrentCommissionRate();
|
||||
// // 校验当前抽佣比例不能大于最大抽佣比例
|
||||
// ProjectCommission projectCommission = projectCommissionService.getById(id);
|
||||
// Long projectDetailId = projectCommission.getProjectDetailId();
|
||||
// ProjectDetail projectDetail = projectDetailService.getById(projectDetailId);
|
||||
// BigDecimal maxCommissionRate = projectDetail.getMaxCommissionRate();
|
||||
// ThrowUtils.throwIf(currentCommissionRate.compareTo(maxCommissionRate) > 0, ErrorCode.OPERATION_ERROR, "当前抽佣比例不能大于最大抽佣比例");
|
||||
// projectCommission.setCurrentCommissionRate(currentCommissionRate);
|
||||
// projectCommissionService.updateById(projectCommission);
|
||||
//
|
||||
// // 批量更新下级用户的项目明细抽佣比例
|
||||
// Long userId = (Long) request.getAttribute("userId");
|
||||
// Map<SFunction<SubUserProjectCommission, ?>, Object> fieldConditions = Map.of(SubUserProjectCommission::getProjectDetailId, projectDetailId, SubUserProjectCommission::getUserId, userId);
|
||||
// List<SubUserProjectCommission> subUserProjectCommissionList = commonService.findByFieldEqTargetFields(fieldConditions, subUserProjectCommissionService);
|
||||
// for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissionList) {
|
||||
// subUserProjectCommission.setCurrentCommissionRate(currentCommissionRate);
|
||||
// }
|
||||
// subUserProjectCommissionService.updateBatchById(subUserProjectCommissionList);
|
||||
// return ResultUtils.success(true);
|
||||
// }
|
||||
|
||||
|
||||
/**
|
||||
* 小程序用户修改项目的抽佣比例
|
||||
* @param projectCommissionUpdateRequest 项目明细抽佣更新请求体
|
||||
@ -151,30 +189,11 @@ public class ProjectCommissionController {
|
||||
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||
// @SysLog(title = "项目明细抽佣管理", content = "小程序用户修改项目的抽佣比例")
|
||||
public BaseResponse<Boolean> updateProjectCommissionRate(@Valid @RequestBody ProjectCommissionUpdateRequest projectCommissionUpdateRequest, HttpServletRequest request) {
|
||||
Long id = projectCommissionUpdateRequest.getId();
|
||||
BigDecimal currentCommissionRate = projectCommissionUpdateRequest.getCurrentCommissionRate();
|
||||
// 校验当前抽佣比例不能大于最大抽佣比例
|
||||
ProjectCommission projectCommission = projectCommissionService.getById(id);
|
||||
Long projectDetailId = projectCommission.getProjectDetailId();
|
||||
ProjectDetail projectDetail = projectDetailService.getById(projectDetailId);
|
||||
BigDecimal maxCommissionRate = projectDetail.getMaxCommissionRate();
|
||||
ThrowUtils.throwIf(currentCommissionRate.compareTo(maxCommissionRate) > 0, ErrorCode.OPERATION_ERROR, "当前抽佣比例不能大于最大抽佣比例");
|
||||
projectCommission.setCurrentCommissionRate(currentCommissionRate);
|
||||
projectCommissionService.updateById(projectCommission);
|
||||
|
||||
// 批量更新下级用户的项目明细抽佣比例
|
||||
Long userId = (Long) request.getAttribute("userId");
|
||||
Map<SFunction<SubUserProjectCommission, ?>, Object> fieldConditions = Map.of(SubUserProjectCommission::getProjectDetailId, projectDetailId, SubUserProjectCommission::getUserId, userId);
|
||||
List<SubUserProjectCommission> subUserProjectCommissionList = commonService.findByFieldEqTargetFields(fieldConditions, subUserProjectCommissionService);
|
||||
for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissionList) {
|
||||
subUserProjectCommission.setCurrentCommissionRate(currentCommissionRate);
|
||||
}
|
||||
subUserProjectCommissionService.updateBatchById(subUserProjectCommissionList);
|
||||
projectCommissionService.updateProjectCommissionRate(projectCommissionUpdateRequest);
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 小程序用户查看下级用户的项目明细抽佣情况
|
||||
* @param commonRequest 项目id
|
||||
@ -249,6 +268,30 @@ public class ProjectCommissionController {
|
||||
}
|
||||
|
||||
|
||||
// /**
|
||||
// * 小程序用户修改下级用户的项目明细抽佣比例
|
||||
// * @param subUserProjectCommissionUpdateRequest 下级用户项目明细抽佣更新请求体
|
||||
// * @return 是否添加成功
|
||||
// */
|
||||
// @PostMapping("update/sub/rate")
|
||||
// @Operation(summary = "小程序用户修改下级用户的项目明细抽佣比例", description = "参数:下级用户项目明细抽佣更新请求体,权限:管理员,方法名:updateSubUserProjectCommissionRate")
|
||||
// @RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||
//// @SysLog(title = "项目明细抽佣管理", content = "小程序用户修改下级用户的项目明细抽佣比例")
|
||||
// public BaseResponse<Boolean> updateSubUserProjectCommissionRate(@Valid @RequestBody SubUserProjectCommissionUpdateRequest subUserProjectCommissionUpdateRequest) {
|
||||
// Long id = subUserProjectCommissionUpdateRequest.getId();
|
||||
// BigDecimal currentCommissionRate = subUserProjectCommissionUpdateRequest.getCurrentCommissionRate();
|
||||
// // 校验当前抽佣比例不能大于最大抽佣比例
|
||||
// SubUserProjectCommission subUserProjectCommission = subUserProjectCommissionService.getById(id);
|
||||
// Long projectDetailId = subUserProjectCommission.getProjectDetailId();
|
||||
// ProjectDetail projectDetail = projectDetailService.getById(projectDetailId);
|
||||
// BigDecimal maxCommissionRate = projectDetail.getMaxCommissionRate();
|
||||
// ThrowUtils.throwIf(currentCommissionRate.compareTo(maxCommissionRate) > 0, ErrorCode.OPERATION_ERROR, "当前抽佣比例不能大于最大抽佣比例");
|
||||
// subUserProjectCommission.setCurrentCommissionRate(currentCommissionRate);
|
||||
// subUserProjectCommissionService.updateById(subUserProjectCommission);
|
||||
// return ResultUtils.success(true);
|
||||
// }
|
||||
|
||||
|
||||
/**
|
||||
* 小程序用户修改下级用户的项目明细抽佣比例
|
||||
* @param subUserProjectCommissionUpdateRequest 下级用户项目明细抽佣更新请求体
|
||||
@ -259,20 +302,63 @@ public class ProjectCommissionController {
|
||||
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||
// @SysLog(title = "项目明细抽佣管理", content = "小程序用户修改下级用户的项目明细抽佣比例")
|
||||
public BaseResponse<Boolean> updateSubUserProjectCommissionRate(@Valid @RequestBody SubUserProjectCommissionUpdateRequest subUserProjectCommissionUpdateRequest) {
|
||||
Long id = subUserProjectCommissionUpdateRequest.getId();
|
||||
BigDecimal currentCommissionRate = subUserProjectCommissionUpdateRequest.getCurrentCommissionRate();
|
||||
// 校验当前抽佣比例不能大于最大抽佣比例
|
||||
SubUserProjectCommission subUserProjectCommission = subUserProjectCommissionService.getById(id);
|
||||
Long projectDetailId = subUserProjectCommission.getProjectDetailId();
|
||||
ProjectDetail projectDetail = projectDetailService.getById(projectDetailId);
|
||||
BigDecimal maxCommissionRate = projectDetail.getMaxCommissionRate();
|
||||
ThrowUtils.throwIf(currentCommissionRate.compareTo(maxCommissionRate) > 0, ErrorCode.OPERATION_ERROR, "当前抽佣比例不能大于最大抽佣比例");
|
||||
subUserProjectCommission.setCurrentCommissionRate(currentCommissionRate);
|
||||
subUserProjectCommissionService.updateById(subUserProjectCommission);
|
||||
projectCommissionService.updateSubUserProjectCommissionRate(subUserProjectCommissionUpdateRequest);
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
|
||||
// /**
|
||||
// * 小程序用户一键设置项目的的抽佣比例
|
||||
// * @param projectCommissionUniteUpdateRequest 统一抽佣比例
|
||||
// * @return 是否添加成功
|
||||
// */
|
||||
// @PostMapping("update/unite/rate")
|
||||
// @Operation(summary = "小程序用户一键设置项目的的抽佣比例", description = "参数:统一抽佣比例,权限:管理员,方法名:uniteProjectCommissionRate")
|
||||
// @RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||
//// @SysLog(title = "项目明细抽佣管理", content = "小程序用户一键设置项目的的抽佣比例")
|
||||
// public BaseResponse<Boolean> uniteProjectCommissionRate(@Valid @RequestBody ProjectCommissionUniteUpdateRequest projectCommissionUniteUpdateRequest, HttpServletRequest request) {
|
||||
// Long userId = (Long) request.getAttribute("userId");
|
||||
// BigDecimal uniteCommissionRate = projectCommissionUniteUpdateRequest.getUniteCommissionRate();
|
||||
//
|
||||
// // 修改项目的统一抽佣比例
|
||||
// LambdaUpdateWrapper<UserMainInfo> userMainInfoLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
|
||||
// userMainInfoLambdaUpdateWrapper.eq(UserMainInfo::getUserId, userId).set(UserMainInfo::getUniteRate, uniteCommissionRate);
|
||||
// userMainInfoService.update(userMainInfoLambdaUpdateWrapper);
|
||||
//
|
||||
// LambdaQueryWrapper<ProjectCommission> projectCommissionLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
// projectCommissionLambdaQueryWrapper.eq(ProjectCommission::getUserId, userId);
|
||||
// List<ProjectCommission> projectCommissionList = projectCommissionService.list(projectCommissionLambdaQueryWrapper);
|
||||
//
|
||||
// List<ProjectDetail> projectDetailList = commonService.findByFieldInTargetField(projectCommissionList, projectDetailService, ProjectCommission::getProjectDetailId, ProjectDetail::getId);
|
||||
// // 封装map集合(键:项目明细id, 值:项目明细最大抽佣比例)
|
||||
// Map<Long, BigDecimal> map = new HashMap<>();
|
||||
// for (ProjectDetail projectDetail : projectDetailList) {
|
||||
// map.put(projectDetail.getId(), projectDetail.getMaxCommissionRate());
|
||||
// }
|
||||
// for (ProjectCommission projectCommission : projectCommissionList) {
|
||||
// Long projectDetailId = projectCommission.getProjectDetailId();
|
||||
// BigDecimal maxCommissionRate = map.get(projectDetailId);
|
||||
// BigDecimal setCommissionRate = uniteCommissionRate.compareTo(maxCommissionRate) > 0 ? maxCommissionRate : uniteCommissionRate;
|
||||
// projectCommission.setCurrentCommissionRate(setCommissionRate);
|
||||
// }
|
||||
// projectCommissionService.updateBatchById(projectCommissionList);
|
||||
//
|
||||
// // 修改下级用户的项目明细抽佣比例
|
||||
// LambdaQueryWrapper<SubUserProjectCommission> subUserProjectCommissionLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
// subUserProjectCommissionLambdaQueryWrapper.eq(SubUserProjectCommission::getUserId, userId);
|
||||
// List<SubUserProjectCommission> subUserProjectCommissionList = subUserProjectCommissionService.list(subUserProjectCommissionLambdaQueryWrapper);
|
||||
// for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissionList) {
|
||||
// Long projectDetailId = subUserProjectCommission.getProjectDetailId();
|
||||
// BigDecimal maxCommissionRate = map.get(projectDetailId);
|
||||
// BigDecimal setCommissionRate = uniteCommissionRate.compareTo(maxCommissionRate) > 0 ? maxCommissionRate : uniteCommissionRate;
|
||||
// subUserProjectCommission.setCurrentCommissionRate(setCommissionRate);
|
||||
// }
|
||||
// subUserProjectCommissionService.updateBatchById(subUserProjectCommissionList);
|
||||
// return ResultUtils.success(true);
|
||||
// }
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 小程序用户一键设置项目的的抽佣比例
|
||||
* @param projectCommissionUniteUpdateRequest 统一抽佣比例
|
||||
@ -283,43 +369,7 @@ public class ProjectCommissionController {
|
||||
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||
// @SysLog(title = "项目明细抽佣管理", content = "小程序用户一键设置项目的的抽佣比例")
|
||||
public BaseResponse<Boolean> uniteProjectCommissionRate(@Valid @RequestBody ProjectCommissionUniteUpdateRequest projectCommissionUniteUpdateRequest, HttpServletRequest request) {
|
||||
Long userId = (Long) request.getAttribute("userId");
|
||||
BigDecimal uniteCommissionRate = projectCommissionUniteUpdateRequest.getUniteCommissionRate();
|
||||
|
||||
// 修改项目的统一抽佣比例
|
||||
LambdaUpdateWrapper<UserMainInfo> userMainInfoLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
|
||||
userMainInfoLambdaUpdateWrapper.eq(UserMainInfo::getUserId, userId).set(UserMainInfo::getUniteRate, uniteCommissionRate);
|
||||
userMainInfoService.update(userMainInfoLambdaUpdateWrapper);
|
||||
|
||||
LambdaQueryWrapper<ProjectCommission> projectCommissionLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
projectCommissionLambdaQueryWrapper.eq(ProjectCommission::getUserId, userId);
|
||||
List<ProjectCommission> projectCommissionList = projectCommissionService.list(projectCommissionLambdaQueryWrapper);
|
||||
|
||||
List<ProjectDetail> projectDetailList = commonService.findByFieldInTargetField(projectCommissionList, projectDetailService, ProjectCommission::getProjectDetailId, ProjectDetail::getId);
|
||||
// 封装map集合(键:项目明细id, 值:项目明细最大抽佣比例)
|
||||
Map<Long, BigDecimal> map = new HashMap<>();
|
||||
for (ProjectDetail projectDetail : projectDetailList) {
|
||||
map.put(projectDetail.getId(), projectDetail.getMaxCommissionRate());
|
||||
}
|
||||
for (ProjectCommission projectCommission : projectCommissionList) {
|
||||
Long projectDetailId = projectCommission.getProjectDetailId();
|
||||
BigDecimal maxCommissionRate = map.get(projectDetailId);
|
||||
BigDecimal setCommissionRate = uniteCommissionRate.compareTo(maxCommissionRate) > 0 ? maxCommissionRate : uniteCommissionRate;
|
||||
projectCommission.setCurrentCommissionRate(setCommissionRate);
|
||||
}
|
||||
projectCommissionService.updateBatchById(projectCommissionList);
|
||||
|
||||
// 修改下级用户的项目明细抽佣比例
|
||||
LambdaQueryWrapper<SubUserProjectCommission> subUserProjectCommissionLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
subUserProjectCommissionLambdaQueryWrapper.eq(SubUserProjectCommission::getUserId, userId);
|
||||
List<SubUserProjectCommission> subUserProjectCommissionList = subUserProjectCommissionService.list(subUserProjectCommissionLambdaQueryWrapper);
|
||||
for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissionList) {
|
||||
Long projectDetailId = subUserProjectCommission.getProjectDetailId();
|
||||
BigDecimal maxCommissionRate = map.get(projectDetailId);
|
||||
BigDecimal setCommissionRate = uniteCommissionRate.compareTo(maxCommissionRate) > 0 ? maxCommissionRate : uniteCommissionRate;
|
||||
subUserProjectCommission.setCurrentCommissionRate(setCommissionRate);
|
||||
}
|
||||
subUserProjectCommissionService.updateBatchById(subUserProjectCommissionList);
|
||||
projectCommissionService.uniteProjectCommissionRate(projectCommissionUniteUpdateRequest, request);
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
|
@ -91,27 +91,7 @@ public class ProjectController {
|
||||
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||
// @SysLog(title = "项目管理", content = "小程序用户查看项目列表")
|
||||
public BaseResponse<List<ProjectCardVO>> queryProjectCardList(HttpServletRequest request) {
|
||||
Long userId = (Long) request.getAttribute("userId");
|
||||
// 获取项目明细抽佣列表
|
||||
List<ProjectCommission> projectCommissionList = commonService.findByFieldEqTargetField(ProjectCommission::getUserId, userId, projectCommissionService);
|
||||
// 封装Map集合(键:项目id, 值:项目总价)
|
||||
Map<Long, BigDecimal> projectPriceMap = new HashMap<>();
|
||||
for (ProjectCommission projectCommission : projectCommissionList) {
|
||||
Long projectId = projectCommission.getProjectId();
|
||||
BigDecimal projectPrice = projectPriceMap.get(projectId);
|
||||
if (projectPrice == null) {
|
||||
projectPrice = projectCommission.getMyUnitPrice();
|
||||
} else {
|
||||
projectPrice = projectPrice.add(projectCommission.getMyUnitPrice());
|
||||
}
|
||||
projectPriceMap.put(projectId, projectPrice);
|
||||
}
|
||||
List<Project> projectList = commonService.findByFieldEqTargetField(Project::getIsShelves, 1, projectService);
|
||||
for (Project project : projectList) {
|
||||
BigDecimal projectPrice = projectPriceMap.get(project.getId());
|
||||
project.setProjectPrice(projectPrice == null ? BigDecimal.ZERO : projectPrice);
|
||||
}
|
||||
List<ProjectCardVO> projectCardVOS = commonService.convertList(projectList, ProjectCardVO.class);
|
||||
List<ProjectCardVO> projectCardVOS = projectService.queryProjectCardList(request);
|
||||
return ResultUtils.success(projectCardVOS);
|
||||
}
|
||||
|
||||
@ -281,10 +261,7 @@ public class ProjectController {
|
||||
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
@SysLog(title = "项目管理", content = "web端管理员根据id查询项目")
|
||||
public BaseResponse<ProjectVO> queryProjectById(@Valid @RequestBody CommonRequest commonRequest) {
|
||||
Long id = commonRequest.getId();
|
||||
Project project = projectService.getById(id);
|
||||
ThrowUtils.throwIf(project == null, ErrorCode.OPERATION_ERROR, "当前项目不存在");
|
||||
ProjectVO projectVO = commonService.copyProperties(project, ProjectVO.class);
|
||||
ProjectVO projectVO = projectService.queryProjectById(commonRequest);
|
||||
return ResultUtils.success(projectVO);
|
||||
}
|
||||
|
||||
|
@ -15,6 +15,7 @@ import com.greenorange.promotion.model.dto.projectDetail.ProjectDetailAddRequest
|
||||
import com.greenorange.promotion.model.dto.projectDetail.ProjectDetailUpdateRequest;
|
||||
import com.greenorange.promotion.model.dto.subUserProjectCommission.SubUserProjectCommissionAddRequest;
|
||||
import com.greenorange.promotion.model.entity.*;
|
||||
import com.greenorange.promotion.model.enums.UserRoleEnum;
|
||||
import com.greenorange.promotion.model.vo.projectDetail.ProjectDetailVO;
|
||||
import com.greenorange.promotion.service.common.CommonService;
|
||||
import com.greenorange.promotion.service.project.ProjectCommissionService;
|
||||
@ -22,6 +23,7 @@ import com.greenorange.promotion.service.project.ProjectDetailService;
|
||||
import com.greenorange.promotion.service.project.ProjectService;
|
||||
import com.greenorange.promotion.service.project.SubUserProjectCommissionService;
|
||||
import com.greenorange.promotion.service.userInfo.UserInfoService;
|
||||
import com.greenorange.promotion.service.userInfo.UserMainInfoService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
@ -65,6 +67,9 @@ public class ProjectDetailController {
|
||||
@Resource
|
||||
private ProjectService projectService;
|
||||
|
||||
@Resource
|
||||
private UserMainInfoService userMainInfoService;
|
||||
|
||||
/**
|
||||
* web端管理员添加项目明细
|
||||
* @param projectDetailAddRequest 项目明细添加请求体
|
||||
@ -88,7 +93,16 @@ public class ProjectDetailController {
|
||||
projectService.updateById(project);
|
||||
|
||||
// 获取所有的小程序用户
|
||||
List<UserInfo> userInfoList = commonService.findByFieldEqTargetField(UserInfo::getUserRole, UserConstant.DEFAULT_ROLE, userInfoService);
|
||||
LambdaQueryWrapper<UserInfo> miniUserInfoQueryWrapper = userInfoService.getMiniUserInfoQueryWrapper();
|
||||
List<UserInfo> userInfoList = userInfoService.list(miniUserInfoQueryWrapper);
|
||||
|
||||
List<UserMainInfo> userMainInfoList = commonService.findByFieldInTargetField(userInfoList, userMainInfoService, UserInfo::getId, UserMainInfo::getUserId);
|
||||
// 封装Map(键:用户id, 值:抽佣比例)
|
||||
Map<Long, BigDecimal> userCommissionRateMap = new HashMap<>();
|
||||
for (UserMainInfo userMainInfo : userMainInfoList) {
|
||||
userCommissionRateMap.put(userMainInfo.getUserId(), userMainInfo.getUniteRate());
|
||||
}
|
||||
|
||||
// 获取参数信息
|
||||
List<ProjectCommissionAddRequest> projectCommissionAddRequestList = new ArrayList<>();
|
||||
Long projectDetailId = projectDetail.getId();
|
||||
@ -106,7 +120,11 @@ public class ProjectDetailController {
|
||||
projectCommissionAddRequestList.add(projectCommissionAddRequest);
|
||||
}
|
||||
List<ProjectCommission> projectCommissions = commonService.convertList(projectCommissionAddRequestList, ProjectCommission.class);
|
||||
projectCommissionService.saveBatch(projectCommissions);
|
||||
List<SubUserProjectCommission> userProjectCommissions = commonService.convertList(projectCommissions, SubUserProjectCommission.class);
|
||||
for (SubUserProjectCommission userProjectCommission : userProjectCommissions) {
|
||||
userProjectCommission.setSubUserId(-1L);
|
||||
}
|
||||
// projectCommissionService.saveBatch(projectCommissions);
|
||||
|
||||
// 给所有用户添加一条下级项目明细抽佣表
|
||||
List<SubUserProjectCommissionAddRequest> subUserProjectCommissionAddRequestList = new ArrayList<>();
|
||||
@ -122,80 +140,119 @@ public class ProjectDetailController {
|
||||
subUserProjectCommissionAddRequestList.add(subUserProjectCommissionAddRequest);
|
||||
}
|
||||
List<SubUserProjectCommission> subUserProjectCommissions = commonService.convertList(subUserProjectCommissionAddRequestList, SubUserProjectCommission.class);
|
||||
subUserProjectCommissionService.saveBatch(subUserProjectCommissions);
|
||||
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* web端管理员根据id修改项目明细信息
|
||||
* @param projectDetailUpdateRequest 项目明细更新请求体
|
||||
* @return 是否更新成功
|
||||
*/
|
||||
@PostMapping("update")
|
||||
@Operation(summary = "web端管理员更新项目明细", description = "参数:项目明细更新请求体,权限:管理员,方法名:updateProjectDetail")
|
||||
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
@SysLog(title = "项目明细管理", content = "web端管理员根据id修改项目明细信息")
|
||||
public BaseResponse<Boolean> updateProjectDetail(@Valid @RequestBody ProjectDetailUpdateRequest projectDetailUpdateRequest) {
|
||||
|
||||
// 更新项目明细的结算价格
|
||||
Long projectDetailId = projectDetailUpdateRequest.getId();
|
||||
ProjectDetail sourceProjectDetail = projectDetailService.getById(projectDetailId);
|
||||
ProjectDetail projectDetail = commonService.copyProperties(projectDetailUpdateRequest, ProjectDetail.class);
|
||||
// 1.更新项目明细的结算价格
|
||||
projectDetailService.updateById(projectDetail);
|
||||
// 更新项目的价格
|
||||
Long projectId = projectDetail.getProjectId();
|
||||
Project project = projectService.getById(projectId);
|
||||
project.setProjectPrice(project.getProjectPrice().subtract(sourceProjectDetail.getProjectSettlementPrice()).add(projectDetail.getProjectSettlementPrice()));
|
||||
projectService.updateById(project);
|
||||
// 2.更新抽佣比例(如果抽佣比例比原来小)
|
||||
List<SubUserProjectCommission> subUserProjectCommissionList = commonService.findByFieldEqTargetField(SubUserProjectCommission::getProjectDetailId, projectDetail.getId(), subUserProjectCommissionService);
|
||||
for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissionList) {
|
||||
BigDecimal currentCommissionRate = subUserProjectCommission.getCurrentCommissionRate();
|
||||
BigDecimal maxCommissionRate = projectDetail.getMaxCommissionRate();
|
||||
if (currentCommissionRate.compareTo(maxCommissionRate) > 0) subUserProjectCommission.setCurrentCommissionRate(maxCommissionRate);
|
||||
}
|
||||
// 将下级用户项目明细抽佣列表根据父级用户id进行排序(升序)
|
||||
subUserProjectCommissionList.sort(Comparator.comparing(SubUserProjectCommission::getUserId));
|
||||
// 更新下级用户项目明细抽佣表记录
|
||||
BigDecimal projectSettlementPrice = projectDetail.getProjectSettlementPrice();
|
||||
BigDecimal projectMinSettlementPrice = projectDetail.getProjectMinSettlementPrice();
|
||||
// subUserProjectCommissionService.saveBatch(subUserProjectCommissions);
|
||||
subUserProjectCommissions.addAll(userProjectCommissions);
|
||||
// 对抽佣记录进行排序
|
||||
projectCommissionService.sortSubProjectCommissions(subUserProjectCommissions);
|
||||
// 设置抽佣比例和单价
|
||||
// 封装Map集合(键:下级用户id,值:下级用户单价)
|
||||
Map<Long, BigDecimal> subUserUnitPriceMap = new HashMap<>();
|
||||
// 获取小程序用户的根用户
|
||||
List<UserInfo> userInfoList = commonService.findByFieldEqTargetField(UserInfo::getUserRole, UserConstant.DEFAULT_ROLE, userInfoService);
|
||||
UserInfo rootUserInfo = userInfoList.get(0);
|
||||
// 存储根用户的单价
|
||||
subUserUnitPriceMap.put(rootUserInfo.getId(), projectSettlementPrice);
|
||||
for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissionList) {
|
||||
// 记录上级用户的对下级用户的抽佣比例
|
||||
BigDecimal currentCommissionRate = subUserProjectCommission.getCurrentCommissionRate();
|
||||
Map<Long, BigDecimal> subUserProjectCommissionMap = new HashMap<>();
|
||||
for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissions) {
|
||||
Long userId = subUserProjectCommission.getUserId();
|
||||
Long subUserId = subUserProjectCommission.getSubUserId();
|
||||
// 获取当前用户的单价,并将当前记录修改为当前用户的单价
|
||||
BigDecimal userUnitPrice = subUserUnitPriceMap.get(userId);
|
||||
subUserProjectCommission.setMyUnitPrice(userUnitPrice);
|
||||
// 计算下级用户的单价
|
||||
BigDecimal subUserUnitPrice = userUnitPrice.multiply(BigDecimal.ONE.subtract(currentCommissionRate));
|
||||
// 如果下级用户的单价小于项目明细最小结算价格,则设置下级用户的单价为项目明细最小结算价格
|
||||
if (subUserUnitPrice.compareTo(projectMinSettlementPrice) < 0) subUserUnitPrice = projectMinSettlementPrice;
|
||||
// 存储下级用户的单价
|
||||
subUserUnitPriceMap.put(subUserId, subUserUnitPrice);
|
||||
// 设置抽佣比例
|
||||
BigDecimal uniteRate = userCommissionRateMap.get(userId);
|
||||
subUserProjectCommission.setCurrentCommissionRate(uniteRate);
|
||||
// 设置单价
|
||||
BigDecimal myUnitPrice = subUserProjectCommissionMap.get(userId);
|
||||
if (myUnitPrice == null) myUnitPrice = subUserProjectCommission.getMyUnitPrice();
|
||||
subUserProjectCommission.setMyUnitPrice(myUnitPrice);
|
||||
BigDecimal subUserUnitPrice = projectCommissionService.calculateFinalPrice(myUnitPrice, uniteRate);
|
||||
if (subUserId != -1L) subUserProjectCommissionMap.put(subUserId, subUserUnitPrice);
|
||||
}
|
||||
// 更新下级用户项目明细抽佣表记录
|
||||
subUserProjectCommissionService.updateBatchById(subUserProjectCommissionList);
|
||||
// 更新用户项目明细抽佣表记录
|
||||
List<ProjectCommission> projectCommissionList = commonService.findByFieldEqTargetField(ProjectCommission::getProjectDetailId, projectDetail.getId(), projectCommissionService);
|
||||
for (ProjectCommission projectCommission : projectCommissionList) {
|
||||
Long userId = projectCommission.getUserId();
|
||||
BigDecimal userUnitPrice = subUserUnitPriceMap.get(userId);
|
||||
projectCommission.setMyUnitPrice(userUnitPrice);
|
||||
}
|
||||
projectCommissionService.updateBatchById(projectCommissionList);
|
||||
|
||||
long startTime = System.currentTimeMillis();
|
||||
|
||||
// 批量更新下级用户项目明细抽佣记录
|
||||
List<SubUserProjectCommission> subProjectCommissions = subUserProjectCommissions.stream()
|
||||
.filter(subUserProjectCommission -> subUserProjectCommission.getSubUserId() != -1L).toList();
|
||||
subUserProjectCommissionService.saveBatch(subProjectCommissions);
|
||||
// 批量更新用户项目明细抽佣记录
|
||||
|
||||
List<SubUserProjectCommission> projectCommissionList = subUserProjectCommissions.stream()
|
||||
.filter(subUserProjectCommission -> subUserProjectCommission.getSubUserId() == -1L).toList();
|
||||
List<ProjectCommission> commissionList = commonService.convertList(projectCommissionList, ProjectCommission.class);
|
||||
projectCommissionService.saveBatch(commissionList);
|
||||
|
||||
// 获取结束时间戳
|
||||
long endTime = System.currentTimeMillis();
|
||||
// 计算执行时间
|
||||
long executionTime = endTime - startTime;
|
||||
System.out.println("程序执行时间: " + executionTime + " 毫秒");
|
||||
|
||||
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
//
|
||||
// /**
|
||||
// * web端管理员根据id修改项目明细信息
|
||||
// * @param projectDetailUpdateRequest 项目明细更新请求体
|
||||
// * @return 是否更新成功
|
||||
// */
|
||||
// @PostMapping("update")
|
||||
// @Operation(summary = "web端管理员更新项目明细", description = "参数:项目明细更新请求体,权限:管理员,方法名:updateProjectDetail")
|
||||
// @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
// @SysLog(title = "项目明细管理", content = "web端管理员根据id修改项目明细信息")
|
||||
// public BaseResponse<Boolean> updateProjectDetail(@Valid @RequestBody ProjectDetailUpdateRequest projectDetailUpdateRequest) {
|
||||
//
|
||||
// // 更新项目明细的结算价格
|
||||
// Long projectDetailId = projectDetailUpdateRequest.getId();
|
||||
// ProjectDetail sourceProjectDetail = projectDetailService.getById(projectDetailId);
|
||||
// ProjectDetail projectDetail = commonService.copyProperties(projectDetailUpdateRequest, ProjectDetail.class);
|
||||
// // 1.更新项目明细的结算价格
|
||||
// projectDetailService.updateById(projectDetail);
|
||||
// // 更新项目的价格
|
||||
// Long projectId = projectDetail.getProjectId();
|
||||
// Project project = projectService.getById(projectId);
|
||||
// project.setProjectPrice(project.getProjectPrice().subtract(sourceProjectDetail.getProjectSettlementPrice()).add(projectDetail.getProjectSettlementPrice()));
|
||||
// projectService.updateById(project);
|
||||
// // 2.更新抽佣比例(如果抽佣比例比原来小)
|
||||
// List<SubUserProjectCommission> subUserProjectCommissionList = commonService.findByFieldEqTargetField(SubUserProjectCommission::getProjectDetailId, projectDetail.getId(), subUserProjectCommissionService);
|
||||
// for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissionList) {
|
||||
// BigDecimal currentCommissionRate = subUserProjectCommission.getCurrentCommissionRate();
|
||||
// BigDecimal maxCommissionRate = projectDetail.getMaxCommissionRate();
|
||||
// if (currentCommissionRate.compareTo(maxCommissionRate) > 0) subUserProjectCommission.setCurrentCommissionRate(maxCommissionRate);
|
||||
// }
|
||||
// // 将下级用户项目明细抽佣列表根据父级用户id进行排序(升序)
|
||||
// subUserProjectCommissionList.sort(Comparator.comparing(SubUserProjectCommission::getUserId));
|
||||
// // 更新下级用户项目明细抽佣表记录
|
||||
// BigDecimal projectSettlementPrice = projectDetail.getProjectSettlementPrice();
|
||||
// BigDecimal projectMinSettlementPrice = projectDetail.getProjectMinSettlementPrice();
|
||||
// // 封装Map集合(键:下级用户id,值:下级用户单价)
|
||||
// Map<Long, BigDecimal> subUserUnitPriceMap = new HashMap<>();
|
||||
// // 获取小程序用户的根用户
|
||||
// List<UserInfo> userInfoList = commonService.findByFieldEqTargetField(UserInfo::getUserRole, UserConstant.DEFAULT_ROLE, userInfoService);
|
||||
// UserInfo rootUserInfo = userInfoList.get(0);
|
||||
// // 存储根用户的单价
|
||||
// subUserUnitPriceMap.put(rootUserInfo.getId(), projectSettlementPrice);
|
||||
// for (SubUserProjectCommission subUserProjectCommission : subUserProjectCommissionList) {
|
||||
// // 记录上级用户的对下级用户的抽佣比例
|
||||
// BigDecimal currentCommissionRate = subUserProjectCommission.getCurrentCommissionRate();
|
||||
// Long userId = subUserProjectCommission.getUserId();
|
||||
// Long subUserId = subUserProjectCommission.getSubUserId();
|
||||
// // 获取当前用户的单价,并将当前记录修改为当前用户的单价
|
||||
// BigDecimal userUnitPrice = subUserUnitPriceMap.get(userId);
|
||||
// subUserProjectCommission.setMyUnitPrice(userUnitPrice);
|
||||
// // 计算下级用户的单价
|
||||
// BigDecimal subUserUnitPrice = userUnitPrice.multiply(BigDecimal.ONE.subtract(currentCommissionRate));
|
||||
// // 如果下级用户的单价小于项目明细最小结算价格,则设置下级用户的单价为项目明细最小结算价格
|
||||
// if (subUserUnitPrice.compareTo(projectMinSettlementPrice) < 0) subUserUnitPrice = projectMinSettlementPrice;
|
||||
// // 存储下级用户的单价
|
||||
// subUserUnitPriceMap.put(subUserId, subUserUnitPrice);
|
||||
// }
|
||||
// // 更新下级用户项目明细抽佣表记录
|
||||
// subUserProjectCommissionService.updateBatchById(subUserProjectCommissionList);
|
||||
// // 更新用户项目明细抽佣表记录
|
||||
// List<ProjectCommission> projectCommissionList = commonService.findByFieldEqTargetField(ProjectCommission::getProjectDetailId, projectDetail.getId(), projectCommissionService);
|
||||
// for (ProjectCommission projectCommission : projectCommissionList) {
|
||||
// Long userId = projectCommission.getUserId();
|
||||
// BigDecimal userUnitPrice = subUserUnitPriceMap.get(userId);
|
||||
// projectCommission.setMyUnitPrice(userUnitPrice);
|
||||
// }
|
||||
// projectCommissionService.updateBatchById(projectCommissionList);
|
||||
//
|
||||
// return ResultUtils.success(true);
|
||||
// }
|
||||
|
||||
/**
|
||||
* web端管理员根据id删除项目明细
|
||||
|
@ -114,12 +114,7 @@ public class PromoCodeController {
|
||||
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
@SysLog(title = "推广码管理", content = "web端管理员批量删除推广码")
|
||||
public BaseResponse<Boolean> delBatchPromoCode(@Valid @RequestBody CommonBatchRequest commonBatchRequest) {
|
||||
List<Long> ids = commonBatchRequest.getIds();
|
||||
LambdaQueryWrapper<PromoCode> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.in(PromoCode::getId, ids).eq(PromoCode::getPromoCodeStatus, true);
|
||||
List<PromoCode> promoCodeList = promoCodeService.list(lambdaQueryWrapper);
|
||||
ThrowUtils.throwIf(promoCodeList.size() > 0, ErrorCode.OPERATION_ERROR, "当前推广码正在使用中,无法删除");
|
||||
promoCodeService.removeByIds(ids);
|
||||
promoCodeService.delBatchPromoCode(commonBatchRequest);
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
|
@ -75,6 +75,7 @@ public class ProjectSettlementController {
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 小程序端用户根据推广码申请记录id查询结算记录
|
||||
* @param commonRequest 项目结算记录添加请求体
|
||||
|
@ -2,36 +2,42 @@ package com.greenorange.promotion.controller.projectSettlement;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
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.withdrawalApply.WithdrawalApplyAddRequest;
|
||||
import com.greenorange.promotion.model.dto.withdrawalApply.WithdrawalApplyQueryRequest;
|
||||
import com.greenorange.promotion.model.entity.FundsChange;
|
||||
import com.greenorange.promotion.model.entity.UserAccount;
|
||||
import com.greenorange.promotion.model.entity.UserMainInfo;
|
||||
import com.greenorange.promotion.model.entity.WithdrawalApply;
|
||||
import com.greenorange.promotion.model.vo.fundsChange.FundsChangeVO;
|
||||
import com.greenorange.promotion.model.vo.fundsChange.FundsItemVO;
|
||||
import com.greenorange.promotion.model.vo.userAccount.UserAccountConditionVO;
|
||||
import com.greenorange.promotion.model.vo.withdrawalApply.WithdrawalApplyVO;
|
||||
import com.greenorange.promotion.service.common.CommonService;
|
||||
import com.greenorange.promotion.service.settle.FundsChangeService;
|
||||
import com.greenorange.promotion.service.settle.UserAccountService;
|
||||
import com.greenorange.promotion.service.settle.WithdrawalApplyService;
|
||||
import com.greenorange.promotion.service.userInfo.UserMainInfoService;
|
||||
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 jakarta.validation.Valid;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@ -56,6 +62,31 @@ public class WithdrawalApplyController {
|
||||
@Resource
|
||||
private UserMainInfoService userMainInfoService;
|
||||
|
||||
@Resource
|
||||
private UserAccountService userAccountService;
|
||||
|
||||
|
||||
/**
|
||||
* 小程序端用户查询账户提现状况
|
||||
* @return 提现申请记录id
|
||||
*/
|
||||
@PostMapping("query/condition")
|
||||
@Operation(summary = "小程序端用户查询账户提现状况", description = "参数:无,权限:管理员,方法名:queryWithdrawalCondition")
|
||||
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||
public BaseResponse<UserAccountConditionVO> queryWithdrawalCondition(HttpServletRequest request) {
|
||||
Long userId = (Long) request.getAttribute("userId");
|
||||
LambdaQueryWrapper<UserMainInfo> userMainInfoLambdaQueryWrapper = commonService.buildQueryWrapperByField(UserMainInfo::getUserId, userId, userMainInfoService);
|
||||
UserMainInfo userMainInfo = userMainInfoService.getOne(userMainInfoLambdaQueryWrapper);
|
||||
LambdaQueryWrapper<UserAccount> userAccountLambdaQueryWrapper = commonService.buildQueryWrapperByField(UserAccount::getUserId, userId, userAccountService);
|
||||
UserAccount userAccount = userAccountService.getOne(userAccountLambdaQueryWrapper);
|
||||
String bankCardNumber = userAccount == null ? "" : userAccount.getBankCardNumber();
|
||||
UserAccountConditionVO userAccountConditionVO = UserAccountConditionVO.builder()
|
||||
.currentBalance(userMainInfo.getCurrentBalance())
|
||||
.bankCardNumber(bankCardNumber)
|
||||
.build();
|
||||
return ResultUtils.success(userAccountConditionVO);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 小程序端用户申请提现
|
||||
@ -68,12 +99,35 @@ public class WithdrawalApplyController {
|
||||
// @SysLog(title = "提现申请记录管理", content = "小程序端用户申请提现")
|
||||
public BaseResponse<Long> addWithdrawalApply(@Valid @RequestBody WithdrawalApplyAddRequest withdrawalApplyAddRequest, HttpServletRequest request) {
|
||||
Long userId = (Long) request.getAttribute("userId");
|
||||
LambdaQueryWrapper<UserAccount> userAccountLambdaQueryWrapper = commonService.buildQueryWrapperByField(UserAccount::getUserId, userId, userAccountService);
|
||||
UserAccount userAccount = userAccountService.getOne(userAccountLambdaQueryWrapper);
|
||||
ThrowUtils.throwIf(userAccount == null, ErrorCode.OPERATION_ERROR, "请先绑定银行卡");
|
||||
BigDecimal withdrawnAmount = withdrawalApplyAddRequest.getWithdrawnAmount();
|
||||
WithdrawalApply withdrawalApply = WithdrawalApply.builder()
|
||||
.withdrawnAmount(withdrawnAmount)
|
||||
.cardHolder(userAccount.getCardHolder())
|
||||
.idCardNumber(userAccount.getIdCardNumber())
|
||||
.phoneNumber(userAccount.getPhoneNumber())
|
||||
.bankCardNumber(userAccount.getBankCardNumber())
|
||||
.openBank(userAccount.getOpenBank())
|
||||
.userId(userId)
|
||||
.build();
|
||||
withdrawalApplyService.save(withdrawalApply);
|
||||
// 修改个人主要信息
|
||||
LambdaQueryWrapper<UserMainInfo> userMainInfoLambdaQueryWrapper = commonService.buildQueryWrapperByField(UserMainInfo::getUserId, userId, userMainInfoService);
|
||||
UserMainInfo userMainInfo = userMainInfoService.getOne(userMainInfoLambdaQueryWrapper);
|
||||
userMainInfo.setWithdrawalAmount(userMainInfo.getWithdrawalAmount().add(withdrawnAmount));
|
||||
userMainInfo.setCurrentBalance(userMainInfo.getCurrentBalance().subtract(withdrawnAmount));
|
||||
userMainInfoService.updateById(userMainInfo);
|
||||
// 添加资金明细记录
|
||||
FundsChange fundsChange = FundsChange.builder()
|
||||
.projectName("用户提现")
|
||||
.changeAmount(withdrawnAmount.negate())
|
||||
.currentAmount(userMainInfo.getCurrentBalance())
|
||||
.userId(userId)
|
||||
.projectSettlementId(0L)
|
||||
.build();
|
||||
fundsChangeService.save(fundsChange);
|
||||
return ResultUtils.success(withdrawalApply.getId());
|
||||
}
|
||||
|
||||
@ -90,6 +144,7 @@ public class WithdrawalApplyController {
|
||||
Long userId = (Long) request.getAttribute("userId");
|
||||
List<WithdrawalApply> withdrawalApplyList = commonService.findByFieldEqTargetField(WithdrawalApply::getUserId, userId, withdrawalApplyService);
|
||||
List<WithdrawalApplyVO> withdrawalApplyVOS = commonService.convertList(withdrawalApplyList, WithdrawalApplyVO.class);
|
||||
Collections.reverse(withdrawalApplyVOS);
|
||||
return ResultUtils.success(withdrawalApplyVOS);
|
||||
}
|
||||
|
||||
@ -104,12 +159,12 @@ public class WithdrawalApplyController {
|
||||
// @SysLog(title = "提现申请记录管理", content = "小程序端用户查询资金变动记录")
|
||||
public BaseResponse<FundsItemVO> queryFundsChangeByUserId(HttpServletRequest request) {
|
||||
Long userId = (Long) request.getAttribute("userId");
|
||||
LambdaQueryWrapper<UserMainInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(UserMainInfo::getUserId, userId);
|
||||
UserMainInfo userMainInfo = userMainInfoService.getOne(lambdaQueryWrapper);
|
||||
LambdaQueryWrapper<UserMainInfo> userMainInfoLambdaQueryWrapper = commonService.buildQueryWrapperByField(UserMainInfo::getUserId, userId, userMainInfoService);
|
||||
UserMainInfo userMainInfo = userMainInfoService.getOne(userMainInfoLambdaQueryWrapper);
|
||||
FundsItemVO fundsItemVO = commonService.copyProperties(userMainInfo, FundsItemVO.class);
|
||||
List<FundsChange> fundsChangeList = commonService.findByFieldEqTargetField(FundsChange::getUserId, userId, fundsChangeService);
|
||||
List<FundsChangeVO> fundsChangeVOS = commonService.convertList(fundsChangeList, FundsChangeVO.class);
|
||||
Collections.reverse(fundsChangeVOS);
|
||||
fundsItemVO.setFundsChangeVOList(fundsChangeVOS);
|
||||
return ResultUtils.success(fundsItemVO);
|
||||
}
|
||||
|
@ -0,0 +1,219 @@
|
||||
package com.greenorange.promotion.controller.userInfo;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.greenorange.promotion.annotation.RequiresPermission;
|
||||
import com.greenorange.promotion.annotation.SysLog;
|
||||
import com.greenorange.promotion.common.BaseResponse;
|
||||
import com.greenorange.promotion.common.ResultUtils;
|
||||
import com.greenorange.promotion.constant.UserConstant;
|
||||
import com.greenorange.promotion.model.dto.CommonRequest;
|
||||
import com.greenorange.promotion.model.dto.CommonStringRequest;
|
||||
import com.greenorange.promotion.model.dto.advancementApply.*;
|
||||
import com.greenorange.promotion.model.entity.AdvancementApply;
|
||||
import com.greenorange.promotion.model.entity.UserInfo;
|
||||
import com.greenorange.promotion.model.enums.ReviewStatusEnum;
|
||||
import com.greenorange.promotion.model.enums.UserRoleEnum;
|
||||
import com.greenorange.promotion.model.vo.advancementApply.AdvancementApplyApproveVO;
|
||||
import com.greenorange.promotion.model.vo.advancementApply.AdvancementApplyVOPlus;
|
||||
import com.greenorange.promotion.model.vo.advancementApply.AdvancementApplyVO;
|
||||
import com.greenorange.promotion.service.common.CommonService;
|
||||
import com.greenorange.promotion.service.userInfo.AdvancementApplyService;
|
||||
import com.greenorange.promotion.service.userInfo.UserInfoService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.validation.Valid;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
|
||||
/**
|
||||
* 晋升申请 控制器
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("advancementApply")
|
||||
@Slf4j
|
||||
@Tag(name = "晋升申请模块")
|
||||
public class AdvancementApplyController {
|
||||
|
||||
@Resource
|
||||
private AdvancementApplyService advancementApplyService;
|
||||
|
||||
@Resource
|
||||
private CommonService commonService;
|
||||
|
||||
@Resource
|
||||
private UserInfoService userInfoService;
|
||||
|
||||
/**
|
||||
* 小程序段用户添加晋升申请记录
|
||||
* @param advancementApplyAddRequest 晋升申请记录添加请求体
|
||||
* @return 申请记录查询凭据
|
||||
*/
|
||||
@PostMapping("add")
|
||||
@Operation(summary = "小程序段用户添加晋升申请记录", description = "参数:晋升申请添加请求体,权限:管理员,方法名:addAdvancementApply")
|
||||
@SysLog(title = "晋升申请管理", content = "小程序段用户添加晋升申请记录")
|
||||
public BaseResponse<String> addAdvancementApply(@Valid @RequestBody AdvancementApplyAddRequest advancementApplyAddRequest) {
|
||||
String phone = advancementApplyAddRequest.getPhone();
|
||||
String verificationCode = advancementApplyAddRequest.getVerificationCode();
|
||||
// 校验用户手机号和验证码
|
||||
userInfoService.checkPhoneAndVerificationCode(phone, verificationCode, UserRoleEnum.STAFF);
|
||||
AdvancementApply advancementApply = commonService.copyProperties(advancementApplyAddRequest, AdvancementApply.class);
|
||||
advancementApply.setCredential(UUID.randomUUID().toString());
|
||||
advancementApplyService.save(advancementApply);
|
||||
return ResultUtils.success(advancementApply.getCredential());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 小程序端用户撤销晋升申请记录
|
||||
* @param commonRequest 晋升申请记录id
|
||||
* @return 是否更新成功
|
||||
*/
|
||||
@PostMapping("modify/status")
|
||||
@Operation(summary = "小程序端用户撤销晋升申请记录", description = "参数:晋升申请记录id,权限:管理员,方法名:revokeAdvancementApply")
|
||||
@SysLog(title = "晋升申请管理", content = "小程序端用户撤销晋升申请记录")
|
||||
public BaseResponse<Boolean> revokeAdvancementApply(@Valid @RequestBody CommonRequest commonRequest) {
|
||||
Long id = commonRequest.getId();
|
||||
LambdaUpdateWrapper<AdvancementApply> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.eq(AdvancementApply::getId, id).set(AdvancementApply::getReviewStatus, ReviewStatusEnum.WITHDRAWN.getValue());
|
||||
advancementApplyService.update(updateWrapper);
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 小程序端用户根据id修改晋升申请记录信息
|
||||
* @param advancementApplyUpdateRequest 晋升申请更新请求体
|
||||
* @return 是否更新成功
|
||||
*/
|
||||
@PostMapping("update")
|
||||
@Operation(summary = "小程序端用户根据id修改晋升申请记录信息", description = "参数:晋升申请更新请求体,权限:管理员,方法名:updateAdvancementApply")
|
||||
@SysLog(title = "晋升申请管理", content = "小程序端用户根据id修改晋升申请记录信息")
|
||||
public BaseResponse<Boolean> updateAdvancementApply(@Valid @RequestBody AdvancementApplyUpdateRequest advancementApplyUpdateRequest) {
|
||||
String phone = advancementApplyUpdateRequest.getPhone();
|
||||
String verificationCode = advancementApplyUpdateRequest.getVerificationCode();
|
||||
// 校验用户手机号和验证码
|
||||
userInfoService.checkPhoneAndVerificationCode(phone, verificationCode, UserRoleEnum.STAFF);
|
||||
AdvancementApply advancementApply = commonService.copyProperties(advancementApplyUpdateRequest, AdvancementApply.class);
|
||||
advancementApplyService.updateById(advancementApply);
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 小程序端用户根据凭证(credential)查询晋升申请记录
|
||||
* @param commonStringRequest 查询凭证
|
||||
* @return 晋升申请记录信息
|
||||
*/
|
||||
@PostMapping("query/credential")
|
||||
@Operation(summary = "小程序端用户根据凭证(credential)查询晋升申请记录", description = "参数:晋升申请更新请求体,权限:管理员,方法名:queryAdvancementApplyByCredential")
|
||||
@SysLog(title = "晋升申请管理", content = "小程序端用户根据凭证(credential)查询晋升申请记录")
|
||||
public BaseResponse<AdvancementApplyApproveVO> queryAdvancementApplyByCredential(@Valid @RequestBody CommonStringRequest commonStringRequest) {
|
||||
String credential = commonStringRequest.getTemplateString();
|
||||
LambdaQueryWrapper<AdvancementApply> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(AdvancementApply::getCredential, credential);
|
||||
AdvancementApply advancementApply = advancementApplyService.getOne(lambdaQueryWrapper);
|
||||
AdvancementApplyApproveVO advancementApplyApproveVO = commonService.copyProperties(advancementApply, AdvancementApplyApproveVO.class);
|
||||
String reviewStatus = advancementApply.getReviewStatus();
|
||||
ReviewStatusEnum reviewStatusEnum = ReviewStatusEnum.getEnumByValue(reviewStatus);
|
||||
// 如果审核通过,填充账号密码
|
||||
if (ReviewStatusEnum.APPROVED.equals(reviewStatusEnum)) {
|
||||
Long userId = advancementApply.getUserId();
|
||||
UserInfo userInfo = userInfoService.getById(userId);
|
||||
advancementApplyApproveVO.setUserAccount(userInfo.getUserAccount());
|
||||
advancementApplyApproveVO.setUserPassword(userInfo.getUserPassword());
|
||||
}
|
||||
// 如果审核拒绝,填充拒绝理由
|
||||
if (ReviewStatusEnum.REJECTED.equals(reviewStatusEnum)) {
|
||||
advancementApplyApproveVO.setRejectReason(advancementApply.getRejectReason());
|
||||
}
|
||||
return ResultUtils.success(advancementApplyApproveVO);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* web端管理员批准用户的晋升申请
|
||||
* @param advancementApplyApproveRequest 晋升申请等信息
|
||||
* @return 晋升用户的账号密码
|
||||
*/
|
||||
@PostMapping("approve")
|
||||
@Operation(summary = "web端管理员批准用户的晋升申请", description = "参数:晋升申请id,权限:管理员,方法名:approveAdvancementApply")
|
||||
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
@SysLog(title = "晋升申请管理", content = "web端管理员批准用户的晋升申请")
|
||||
public BaseResponse<Boolean> approveAdvancementApply(@Valid @RequestBody AdvancementApplyApproveRequest advancementApplyApproveRequest) {
|
||||
userInfoService.staffUserInfoMiniRegister(advancementApplyApproveRequest);
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* web端管理员拒绝晋升申请
|
||||
* @param advancementApplyRejectRequest 晋升申请拒绝请求体
|
||||
* @return 晋升申请信息
|
||||
*/
|
||||
@PostMapping("reject")
|
||||
@Operation(summary = "web端管理员拒绝晋升申请", description = "参数:晋升申请拒绝请求体,权限:管理员,方法名:rejectAdvancementApply")
|
||||
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
@SysLog(title = "晋升申请管理", content = "web端管理员拒绝晋升申请")
|
||||
public BaseResponse<Boolean> rejectAdvancementApply(@Valid @RequestBody AdvancementApplyRejectRequest advancementApplyRejectRequest) {
|
||||
Long applyId = advancementApplyRejectRequest.getApplyId();
|
||||
String rejectReason = advancementApplyRejectRequest.getRejectReason();
|
||||
LambdaUpdateWrapper<AdvancementApply> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.eq(AdvancementApply::getId, applyId)
|
||||
.set(AdvancementApply::getReviewStatus, ReviewStatusEnum.REJECTED.getValue())
|
||||
.set(AdvancementApply::getRejectReason, rejectReason);
|
||||
advancementApplyService.update(updateWrapper);
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* web端管理员根据id查询晋升申请
|
||||
* @param commonRequest 晋升申请id
|
||||
* @return 晋升申请信息
|
||||
*/
|
||||
@PostMapping("queryById")
|
||||
@Operation(summary = "web端管理员根据id查询晋升申请", description = "参数:晋升申请id,权限:管理员,方法名:queryAdvancementApplyById")
|
||||
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
@SysLog(title = "晋升申请管理", content = "web端管理员根据id查询晋升申请")
|
||||
public BaseResponse<AdvancementApplyVOPlus> queryAdvancementApplyById(@Valid @RequestBody CommonRequest commonRequest) {
|
||||
Long id = commonRequest.getId();
|
||||
AdvancementApply advancementApply = advancementApplyService.getById(id);
|
||||
AdvancementApplyVOPlus advancementApplyVOPlus = commonService.copyProperties(advancementApply, AdvancementApplyVOPlus.class);
|
||||
return ResultUtils.success(advancementApplyVOPlus);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Web端管理员分页查询晋升申请
|
||||
* @param advancementApplyQueryRequest 晋升申请查询请求体
|
||||
* @return 晋升申请列表
|
||||
*/
|
||||
@PostMapping("page")
|
||||
@Operation(summary = "Web端管理员分页查询晋升申请", description = "参数:晋升申请查询请求体,权限:管理员,方法名:listAdvancementApplyByPage")
|
||||
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
@SysLog(title = "晋升申请管理", content = "Web端管理员分页查询晋升申请")
|
||||
public BaseResponse<Page<AdvancementApplyVO>> listAdvancementApplyByPage(@Valid @RequestBody AdvancementApplyQueryRequest advancementApplyQueryRequest) {
|
||||
long current = advancementApplyQueryRequest.getCurrent();
|
||||
long pageSize = advancementApplyQueryRequest.getPageSize();
|
||||
QueryWrapper<AdvancementApply> queryWrapper = advancementApplyService.getQueryWrapper(advancementApplyQueryRequest);
|
||||
Page<AdvancementApply> page = advancementApplyService.page(new Page<>(current, pageSize), queryWrapper);
|
||||
List<AdvancementApply> advancementApplyList = page.getRecords();
|
||||
List<AdvancementApplyVO> advancementApplyVOList = commonService.convertList(advancementApplyList, AdvancementApplyVO.class);
|
||||
Page<AdvancementApplyVO> voPage = new Page<>(current, pageSize);
|
||||
voPage.setRecords(advancementApplyVOList);
|
||||
voPage.setPages(page.getPages());
|
||||
voPage.setTotal(page.getTotal());
|
||||
return ResultUtils.success(voPage);
|
||||
}
|
||||
}
|
@ -1,17 +1,11 @@
|
||||
package com.greenorange.promotion.controller.userInfo;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
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.userAccount.UserAccountAddRequest;
|
||||
import com.greenorange.promotion.model.dto.userAccount.UserAccountQueryRequest;
|
||||
import com.greenorange.promotion.model.dto.userAccount.UserAccountUpdateRequest;
|
||||
import com.greenorange.promotion.model.entity.UserAccount;
|
||||
import com.greenorange.promotion.model.vo.userAccount.UserAccountVO;
|
||||
@ -21,17 +15,13 @@ 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.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 用户账户 控制器
|
||||
@ -58,10 +48,7 @@ public class UserAccountController {
|
||||
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||
// @SysLog(title = "用户账户管理", content = "小程序端用户添加用户账户")
|
||||
public BaseResponse<Boolean> addUserAccount(@Valid @RequestBody UserAccountAddRequest userAccountAddRequest, HttpServletRequest request) {
|
||||
Long userId = (Long) request.getAttribute("userId");
|
||||
UserAccount userAccount = commonService.copyProperties(userAccountAddRequest, UserAccount.class);
|
||||
userAccount.setUserId(userId);
|
||||
userAccountService.save(userAccount);
|
||||
userAccountService.addUserAccount(userAccountAddRequest, request);
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
@ -75,10 +62,7 @@ public class UserAccountController {
|
||||
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||
// @SysLog(title = "用户账户管理", content = "小程序端用户根据id修改用户账户信息")
|
||||
public BaseResponse<Boolean> updateUserAccount(@Valid @RequestBody UserAccountUpdateRequest userAccountUpdateRequest, HttpServletRequest request) {
|
||||
Long userId = (Long) request.getAttribute("userId");
|
||||
UserAccount userAccount = commonService.copyProperties(userAccountUpdateRequest, UserAccount.class);
|
||||
userAccount.setUserId(userId);
|
||||
userAccountService.updateById(userAccount);
|
||||
userAccountService.updateUserAccount(userAccountUpdateRequest, request);
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
|
@ -17,6 +17,7 @@ import com.greenorange.promotion.model.dto.CommonStringRequest;
|
||||
import com.greenorange.promotion.model.dto.userInfo.*;
|
||||
import com.greenorange.promotion.model.entity.UserInfo;
|
||||
import com.greenorange.promotion.model.entity.UserMainInfo;
|
||||
import com.greenorange.promotion.model.vo.userInfo.SuperUserInfoVO;
|
||||
import com.greenorange.promotion.model.vo.userInfo.UserInfoVO;
|
||||
import com.greenorange.promotion.model.vo.userMainInfo.UserMainInfoVO;
|
||||
import com.greenorange.promotion.service.common.CommonService;
|
||||
@ -406,6 +407,8 @@ public class UserInfoController {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// /**
|
||||
// * (小程序端)查询当前用户到根节点的userId路径
|
||||
// * @param commonRequest 用户id
|
||||
@ -423,6 +426,23 @@ public class UserInfoController {
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 小程序端用户获取上级用户信息
|
||||
* @return 上级用户信息
|
||||
*/
|
||||
@PostMapping("getSuper")
|
||||
@Operation(summary = "小程序端用户获取上级用户信息", description = "参数:用户表查询请求体,权限:管理员(boss, admin),方法名:queryUserInfoById")
|
||||
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||
public BaseResponse<SuperUserInfoVO> getSuperUserInfo(HttpServletRequest request) {
|
||||
Long userId = (Long) request.getAttribute("userId");
|
||||
UserInfo userInfo = userInfoService.getById(userId);
|
||||
Long parentUserId = userInfo.getParentUserId();
|
||||
if (parentUserId != 0) {
|
||||
userInfo = userInfoService.getById(parentUserId);
|
||||
}
|
||||
SuperUserInfoVO superUserInfoVO = commonService.copyProperties(userInfo, SuperUserInfoVO.class);
|
||||
return ResultUtils.success(superUserInfoVO);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -113,104 +113,4 @@ public class UserMainInfoController {
|
||||
return ResultUtils.success(userTeamInfoVO);
|
||||
}
|
||||
|
||||
|
||||
// /**
|
||||
// * web端管理员添加用户主要信息
|
||||
// * @param userMainInfoAddRequest 用户主要信息添加请求体
|
||||
// * @return 是否添加成功
|
||||
// */
|
||||
// @PostMapping("add")
|
||||
// @Operation(summary = "web端管理员添加用户主要信息", description = "参数:用户主要信息添加请求体,权限:管理员,方法名:addUserMainInfo")
|
||||
// @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
// @SysLog(title = "用户主要信息管理", content = "web端管理员添加用户主要信息")
|
||||
// public BaseResponse<Boolean> addUserMainInfo(@Valid @RequestBody UserMainInfoAddRequest userMainInfoAddRequest) {
|
||||
// UserMainInfo userMainInfo = commonService.copyProperties(userMainInfoAddRequest, UserMainInfo.class);
|
||||
// userMainInfoService.save(userMainInfo);
|
||||
// return ResultUtils.success(true);
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * web端管理员根据id修改用户主要信息信息
|
||||
// * @param userMainInfoUpdateRequest 用户主要信息更新请求体
|
||||
// * @return 是否更新成功
|
||||
// */
|
||||
// @PostMapping("update")
|
||||
// @Operation(summary = "web端管理员更新用户主要信息", description = "参数:用户主要信息更新请求体,权限:管理员,方法名:updateUserMainInfo")
|
||||
// @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
// @SysLog(title = "用户主要信息管理", content = "web端管理员根据id修改用户主要信息信息")
|
||||
// public BaseResponse<Boolean> updateUserMainInfo(@Valid @RequestBody UserMainInfoUpdateRequest userMainInfoUpdateRequest) {
|
||||
// UserMainInfo userMainInfo = commonService.copyProperties(userMainInfoUpdateRequest, UserMainInfo.class);
|
||||
// userMainInfoService.updateById(userMainInfo);
|
||||
// return ResultUtils.success(true);
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * web端管理员根据id删除用户主要信息
|
||||
// * @param commonRequest 用户主要信息删除请求体
|
||||
// * @return 是否删除成功
|
||||
// */
|
||||
// @PostMapping("delete")
|
||||
// @Operation(summary = "web端管理员根据id删除用户主要信息", description = "参数:用户主要信息删除请求体,权限:管理员,方法名:delUserMainInfo")
|
||||
// @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
// @SysLog(title = "用户主要信息管理", content = "web端管理员根据id删除用户主要信息")
|
||||
// public BaseResponse<Boolean> delUserMainInfo(@Valid @RequestBody CommonRequest commonRequest) {
|
||||
// Long id = commonRequest.getId();
|
||||
// userMainInfoService.removeById(id);
|
||||
// return ResultUtils.success(true);
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * web端管理员批量删除用户主要信息
|
||||
// * @param commonBatchRequest 用户主要信息批量删除请求体
|
||||
// * @return 是否删除成功
|
||||
// */
|
||||
// @PostMapping("delBatch")
|
||||
// @Operation(summary = "web端管理员批量删除用户主要信息", description = "参数:用户主要信息批量删除请求体,权限:管理员,方法名:delBatchUserMainInfo")
|
||||
// @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
// @SysLog(title = "用户主要信息管理", content = "web端管理员批量删除用户主要信息")
|
||||
// public BaseResponse<Boolean> delBatchUserMainInfo(@Valid @RequestBody CommonBatchRequest commonBatchRequest) {
|
||||
// List<Long> ids = commonBatchRequest.getIds();
|
||||
// userMainInfoService.removeByIds(ids);
|
||||
// return ResultUtils.success(true);
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * web端管理员根据id查询用户主要信息
|
||||
// * @param commonRequest 用户主要信息查询请求体
|
||||
// * @return 用户主要信息信息
|
||||
// */
|
||||
// @PostMapping("queryById")
|
||||
// @Operation(summary = "web端管理员根据id查询用户主要信息", description = "参数:用户主要信息查询请求体,权限:管理员,方法名:queryUserMainInfoById")
|
||||
// @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
// @SysLog(title = "用户主要信息管理", content = "web端管理员根据id查询用户主要信息")
|
||||
// public BaseResponse<UserMainInfoVO> queryUserMainInfoById(@Valid @RequestBody CommonRequest commonRequest) {
|
||||
// Long id = commonRequest.getId();
|
||||
// UserMainInfo userMainInfo = userMainInfoService.getById(id);
|
||||
// ThrowUtils.throwIf(userMainInfo == null, ErrorCode.OPERATION_ERROR, "当前用户主要信息不存在");
|
||||
// UserMainInfoVO userMainInfoVO = commonService.copyProperties(userMainInfo, UserMainInfoVO.class);
|
||||
// return ResultUtils.success(userMainInfoVO);
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * Web端管理员分页查询用户主要信息
|
||||
// * @param userMainInfoQueryRequest 用户主要信息查询请求体
|
||||
// * @return 用户主要信息列表
|
||||
// */
|
||||
// @PostMapping("page")
|
||||
// @Operation(summary = "Web端管理员分页查询用户主要信息", description = "参数:用户主要信息查询请求体,权限:管理员,方法名:listUserMainInfoByPage")
|
||||
// @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
// @SysLog(title = "用户主要信息管理", content = "Web端管理员分页查询用户主要信息")
|
||||
// public BaseResponse<Page<UserMainInfoVO>> listUserMainInfoByPage(@Valid @RequestBody UserMainInfoQueryRequest userMainInfoQueryRequest) {
|
||||
// long current = userMainInfoQueryRequest.getCurrent();
|
||||
// long pageSize = userMainInfoQueryRequest.getPageSize();
|
||||
// QueryWrapper<UserMainInfo> queryWrapper = userMainInfoService.getQueryWrapper(userMainInfoQueryRequest);
|
||||
// Page<UserMainInfo> page = userMainInfoService.page(new Page<>(current, pageSize), queryWrapper);
|
||||
// List<UserMainInfo> userMainInfoList = page.getRecords();
|
||||
// List<UserMainInfoVO> userMainInfoVOList = commonService.convertList(userMainInfoList, UserMainInfoVO.class);
|
||||
// Page<UserMainInfoVO> voPage = new Page<>(current, pageSize);
|
||||
// voPage.setRecords(userMainInfoVOList);
|
||||
// voPage.setPages(page.getPages());
|
||||
// voPage.setTotal(page.getTotal());
|
||||
// return ResultUtils.success(voPage);
|
||||
// }
|
||||
}
|
@ -1,17 +1,12 @@
|
||||
package com.greenorange.promotion.controller.wechat;
|
||||
|
||||
|
||||
import cn.hutool.http.HttpUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.greenorange.promotion.annotation.RequiresPermission;
|
||||
import com.greenorange.promotion.common.BaseResponse;
|
||||
import com.greenorange.promotion.common.ErrorCode;
|
||||
import com.greenorange.promotion.common.ResultUtils;
|
||||
import com.greenorange.promotion.config.WxAccessToken;
|
||||
import com.greenorange.promotion.constant.UserConstant;
|
||||
import com.greenorange.promotion.model.dto.CommonRequest;
|
||||
import com.greenorange.promotion.model.dto.CommonStringRequest;
|
||||
import com.greenorange.promotion.service.wechat.WechatGetQrcodeService;
|
||||
import com.greenorange.promotion.utils.QRCodeUtil;
|
||||
import io.swagger.v3.oas.annotations.Hidden;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
@ -22,15 +17,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Base64;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.io.*;
|
||||
|
||||
|
||||
@Slf4j
|
||||
@ -78,6 +65,24 @@ public class WechatGetQrcodeController {
|
||||
}
|
||||
|
||||
|
||||
// /**
|
||||
// * 微信小程序获取课程码
|
||||
// * @return
|
||||
// * @throws IOException
|
||||
// */
|
||||
// @Hidden
|
||||
// @PostMapping("/get/course/qrcode")
|
||||
// @Operation(summary = "微信小程序获取课程码", description = "参数:无, 权限:所有人, 方法名:getCourseQrcode")
|
||||
//// @RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||
// public BaseResponse<String> getCourseQrcode(@Valid @RequestBody CommonRequest commonRequest, HttpServletRequest request) throws Exception {
|
||||
// String view = wechatGetQrcodeService.getWxCourseQrCode(commonRequest, request);
|
||||
// return ResultUtils.success(view);
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,150 @@
|
||||
package com.greenorange.promotion.controller.wechat;
|
||||
|
||||
import cn.binarywang.wx.miniapp.api.WxMaService;
|
||||
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
|
||||
import com.greenorange.promotion.annotation.RequiresPermission;
|
||||
import com.greenorange.promotion.common.BaseResponse;
|
||||
import com.greenorange.promotion.common.ErrorCode;
|
||||
import com.greenorange.promotion.common.ResultUtils;
|
||||
import com.greenorange.promotion.config.WxOpenConfig;
|
||||
import com.greenorange.promotion.constant.OrderStatusConstant;
|
||||
import com.greenorange.promotion.constant.UserConstant;
|
||||
import com.greenorange.promotion.exception.BusinessException;
|
||||
import com.greenorange.promotion.exception.ThrowUtils;
|
||||
import com.greenorange.promotion.model.dto.CommonRequest;
|
||||
import com.greenorange.promotion.model.dto.wxPay.WechatPayRequest;
|
||||
import com.greenorange.promotion.model.entity.CourseOrder;
|
||||
import com.greenorange.promotion.model.entity.UserInfo;
|
||||
import com.greenorange.promotion.service.course.CourseOrderService;
|
||||
import com.greenorange.promotion.service.userInfo.UserInfoService;
|
||||
import com.greenorange.promotion.service.wechat.WechatPayService;
|
||||
import com.wechat.pay.java.service.payments.jsapi.model.PrepayWithRequestPaymentResponse;
|
||||
import com.wechat.pay.java.service.payments.model.Transaction;
|
||||
import com.wechat.pay.java.service.refund.model.Refund;
|
||||
import com.wechat.pay.java.service.refund.model.RefundNotification;
|
||||
import io.swagger.v3.oas.annotations.Hidden;
|
||||
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 me.chanjar.weixin.common.error.WxErrorException;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
@Tag(name = "微信支付")
|
||||
@RequestMapping("/wxPay")
|
||||
public class WechatPayController {
|
||||
|
||||
|
||||
@Resource
|
||||
private WechatPayService weChatService;
|
||||
|
||||
@Resource
|
||||
private UserInfoService userInfoService;
|
||||
|
||||
@Resource
|
||||
private CourseOrderService courseOrderService;
|
||||
|
||||
@Resource
|
||||
private WxOpenConfig wxOpenConfig;
|
||||
|
||||
|
||||
/**
|
||||
* JSAPI 下单(商品类)
|
||||
*/
|
||||
@PostMapping("/payment/create")
|
||||
@Operation(summary = "JSAPI 下单(商品类)", description = "参数:订单id, 权限:所有人, 方法名:createPayment")
|
||||
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
|
||||
public BaseResponse<PrepayWithRequestPaymentResponse> createPayment(@Valid @RequestBody WechatPayRequest wechatPayRequest, HttpServletRequest request) {
|
||||
|
||||
String code = wechatPayRequest.getCode();
|
||||
WxMaJscode2SessionResult sessionInfo;
|
||||
String miniOpenId;
|
||||
try {
|
||||
WxMaService wxMaService = wxOpenConfig.getWxMaService();
|
||||
sessionInfo = wxMaService.jsCode2SessionInfo(code);
|
||||
miniOpenId = sessionInfo.getOpenid();
|
||||
if (StringUtils.isAnyBlank(miniOpenId)) {
|
||||
throw new BusinessException(ErrorCode.SYSTEM_ERROR);
|
||||
}
|
||||
} catch (WxErrorException e) {
|
||||
log.error("userLoginByWxOpen error", e);
|
||||
throw new BusinessException(ErrorCode.SYSTEM_ERROR, "登录失败,系统错误");
|
||||
}
|
||||
Long userId = (Long) request.getAttribute("userId");
|
||||
UserInfo userInfo = userInfoService.getById(userId);
|
||||
|
||||
Long orderId = wechatPayRequest.getOrderId();
|
||||
CourseOrder courseOrder = courseOrderService.getById(orderId);
|
||||
ThrowUtils.throwIf(courseOrder == null, ErrorCode.NOT_FOUND_ERROR, "订单不存在");
|
||||
ThrowUtils.throwIf(!courseOrder.getOrderStatus().equals(OrderStatusConstant.PENDING), ErrorCode.OPERATION_ERROR, "订单状态错误");
|
||||
if (!userInfo.getId().equals(courseOrder.getUserId())) {
|
||||
throw new BusinessException(ErrorCode.NO_AUTH_ERROR, "你不是该订单用户!");
|
||||
}
|
||||
PrepayWithRequestPaymentResponse response = weChatService.createPayment(String.valueOf(orderId), miniOpenId, courseOrder.getTotalAmount());
|
||||
return ResultUtils.success(response);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* JSAPI 下单回调(商品类)
|
||||
*/
|
||||
@Hidden
|
||||
@PostMapping("/payment/callback")
|
||||
@Operation(summary = "JSAPI 下单回调(商品类)", description = "参数:订单id, 权限:所有人, 方法名:callbackPayment")
|
||||
public synchronized BaseResponse<Boolean> callbackPayment(HttpServletRequest request) throws IOException {
|
||||
// 获取下单信息
|
||||
Transaction transaction = weChatService.getTransactionInfo(request);
|
||||
System.out.println("下单信息:" + transaction);
|
||||
// 支付回调
|
||||
boolean result = weChatService.paymentCallback(transaction);
|
||||
ThrowUtils.throwIf(!result, ErrorCode.SYSTEM_ERROR, "微信支付回调失败");
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Web管理员部分退款
|
||||
* @param commonRequest 订单id
|
||||
*/
|
||||
@PostMapping("/refund/part/create")
|
||||
@Operation(summary = "Web管理员部分退款", description = "参数:订单id, 权限:web端管理员, 方法名:createPartRefund")
|
||||
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||
public BaseResponse<Refund> createPartRefund(@Valid @RequestBody CommonRequest commonRequest) {
|
||||
Long courseOrderId = commonRequest.getId();
|
||||
CourseOrder courseOrder = courseOrderService.getById(courseOrderId);
|
||||
ThrowUtils.throwIf(courseOrder == null, ErrorCode.OPERATION_ERROR, "订单不存在");
|
||||
|
||||
Refund refund = weChatService.refundPartPayment(String.valueOf(courseOrderId), courseOrder.getTotalAmount());
|
||||
return ResultUtils.success(refund);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 部分退款回调
|
||||
*/
|
||||
@Hidden
|
||||
@PostMapping("/refund/part/callback")
|
||||
@Operation(summary = "部分退款回调", description = "参数:订单id, 权限:web端管理员, 方法名:callbackRefundPart")
|
||||
public BaseResponse<Boolean> callbackRefundPart(HttpServletRequest request) {
|
||||
// 获取退款信息
|
||||
RefundNotification refundNotification = weChatService.getRefundInfo(request);
|
||||
// 退款回调
|
||||
boolean result = weChatService.refundPartCallback(refundNotification);
|
||||
ThrowUtils.throwIf(!result, ErrorCode.SYSTEM_ERROR, "退款回调失败");
|
||||
return ResultUtils.success(true);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -26,7 +26,6 @@ import java.util.Map;
|
||||
public class WechatPayoutsController {
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 微信小程序积分提现到银行卡
|
||||
*/
|
||||
|
@ -50,16 +50,25 @@ public class GlobalExceptionHandler {
|
||||
// 处理参数绑定失败的异常
|
||||
@ExceptionHandler(MethodArgumentNotValidException.class)
|
||||
public BaseResponse<?> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
|
||||
StringBuilder errors = new StringBuilder();
|
||||
// 按字段名排序,确保每次返回的顺序一致
|
||||
e.getBindingResult().getFieldErrors().stream()
|
||||
.sorted(Comparator.comparing(FieldError::getField)) // 按字段名排序
|
||||
.forEach(fieldError -> errors.append("参数: ")
|
||||
.append(fieldError.getField())
|
||||
.append(" | 错误: ")
|
||||
.append(fieldError.getDefaultMessage())
|
||||
.append("; "));
|
||||
return ResultUtils.error(ErrorCode.PARAMS_ERROR, errors.toString());
|
||||
// StringBuilder errors = new StringBuilder();
|
||||
// // 按字段名排序,确保每次返回的顺序一致
|
||||
// e.getBindingResult().getFieldErrors().stream()
|
||||
// .sorted(Comparator.comparing(FieldError::getField)) // 按字段名排序
|
||||
// .forEach(fieldError -> errors.append("参数: ")
|
||||
// .append(fieldError.getField())
|
||||
// .append(" | 错误: ")
|
||||
// .append(fieldError.getDefaultMessage())
|
||||
// .append("; "));
|
||||
// return ResultUtils.error(ErrorCode.PARAMS_ERROR, errors.toString());
|
||||
|
||||
// 按字段名排序,取第一个错误的 defaultMessage
|
||||
String msg = e.getBindingResult()
|
||||
.getFieldErrors().stream()
|
||||
.sorted(Comparator.comparing(FieldError::getField))
|
||||
.map(FieldError::getDefaultMessage)
|
||||
.findFirst()
|
||||
.orElse("参数校验失败");
|
||||
return ResultUtils.error(ErrorCode.PARAMS_ERROR, msg);
|
||||
}
|
||||
|
||||
|
||||
|
@ -15,9 +15,9 @@ import java.util.*;
|
||||
public class Generator {
|
||||
|
||||
// 数据源配置
|
||||
private static final String DATASOURCE_URL = "jdbc:mysql://1.94.237.210:3306/qingcheng?serverTimezone=Asia/Shanghai";
|
||||
private static final String DATASOURCE_URL = "jdbc:mysql://27.30.77.229:3306/qingcheng_dev?serverTimezone=Asia/Shanghai";
|
||||
private static final String USERNAME = "qingcheng";
|
||||
private static final String PASSWORD = "Qc@123456";
|
||||
private static final String PASSWORD = "Qc@8ls2jf";
|
||||
|
||||
// 输出路径
|
||||
private static final String OUTPUT_PATH = System.getProperty("user.dir");
|
||||
@ -27,13 +27,13 @@ public class Generator {
|
||||
// 作者
|
||||
private static final String AUTHOR = "chenxinzhi";
|
||||
// 表注释
|
||||
private static final String TABLE_COMMENT = "用户账户";
|
||||
private static final String TABLE_COMMENT = "晋升申请";
|
||||
// 实体类名
|
||||
private static final String ENTITY_NAME = "UserAccount";
|
||||
private static final String ENTITY_NAME = "AdvancementApply";
|
||||
// 表名
|
||||
private static final String TABLE_NAME = "user_account";
|
||||
private static final String TABLE_NAME = "advancement_apply";
|
||||
// 实体类属性名
|
||||
private static final String ENTITY_NAME_LOWER = "userAccount";
|
||||
private static final String ENTITY_NAME_LOWER = "advancementApply";
|
||||
|
||||
// 父包名
|
||||
private static final String PARENT_PATH = "com.greenorange.promotion";
|
||||
|
@ -0,0 +1,18 @@
|
||||
package com.greenorange.promotion.mapper;
|
||||
|
||||
import com.greenorange.promotion.model.entity.AdvancementApply;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* @author 35880
|
||||
* @description 针对表【advancement_apply(晋升申请表)】的数据库操作Mapper
|
||||
* @createDate 2025-06-29 12:39:54
|
||||
* @Entity com.greenorange.promotion.model.entity.AdvancementApply
|
||||
*/
|
||||
public interface AdvancementApplyMapper extends BaseMapper<AdvancementApply> {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,18 @@
|
||||
package com.greenorange.promotion.mapper;
|
||||
|
||||
import com.greenorange.promotion.model.entity.Course;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* @author 35880
|
||||
* @description 针对表【course(课程表)】的数据库操作Mapper
|
||||
* @createDate 2025-06-23 18:29:49
|
||||
* @Entity com.greenorange.promotion.model.entity.Course
|
||||
*/
|
||||
public interface CourseMapper extends BaseMapper<Course> {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,18 @@
|
||||
package com.greenorange.promotion.mapper;
|
||||
|
||||
import com.greenorange.promotion.model.entity.CourseOrder;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* @author 35880
|
||||
* @description 针对表【course_order(课程订单表)】的数据库操作Mapper
|
||||
* @createDate 2025-06-23 18:31:13
|
||||
* @Entity com.greenorange.promotion.model.entity.CourseOrder
|
||||
*/
|
||||
public interface CourseOrderMapper extends BaseMapper<CourseOrder> {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -2,6 +2,8 @@ package com.greenorange.promotion.mapper;
|
||||
|
||||
import com.greenorange.promotion.model.entity.ProjectCommission;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Update;
|
||||
|
||||
/**
|
||||
* @author 35880
|
||||
@ -11,6 +13,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
*/
|
||||
public interface ProjectCommissionMapper extends BaseMapper<ProjectCommission> {
|
||||
|
||||
|
||||
@Update("${sql}")
|
||||
void executeUpdate(@Param("sql") String sql);
|
||||
}
|
||||
|
||||
|
||||
|
@ -0,0 +1,18 @@
|
||||
package com.greenorange.promotion.mapper;
|
||||
|
||||
import com.greenorange.promotion.model.entity.RakeReward;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* @author 35880
|
||||
* @description 针对表【rake_reward(课程抽成记录表)】的数据库操作Mapper
|
||||
* @createDate 2025-06-23 18:32:46
|
||||
* @Entity com.greenorange.promotion.model.entity.RakeReward
|
||||
*/
|
||||
public interface RakeRewardMapper extends BaseMapper<RakeReward> {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -2,6 +2,8 @@ package com.greenorange.promotion.mapper;
|
||||
|
||||
import com.greenorange.promotion.model.entity.SubUserProjectCommission;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Update;
|
||||
|
||||
/**
|
||||
* @author 35880
|
||||
@ -11,6 +13,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
*/
|
||||
public interface SubUserProjectCommissionMapper extends BaseMapper<SubUserProjectCommission> {
|
||||
|
||||
@Update("${sql}")
|
||||
void executeUpdate(@Param("sql") String sql);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -0,0 +1,54 @@
|
||||
package com.greenorange.promotion.model.dto.advancementApply;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import lombok.Data;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 晋升申请添加请求体
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "晋升申请添加请求体", requiredProperties = {
|
||||
"name",
|
||||
"verificationCode"
|
||||
})
|
||||
public class AdvancementApplyAddRequest implements Serializable {
|
||||
|
||||
/**
|
||||
* 申请人姓名
|
||||
*/
|
||||
@NotBlank(message = "申请人姓名不能为空")
|
||||
@Schema(description = "申请人姓名", example = "张三")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 申请人手机号
|
||||
*/
|
||||
@NotBlank(message = "申请人手机号不能为空")
|
||||
@Schema(description = "申请人手机号", example = "15888610253")
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 验证码
|
||||
*/
|
||||
@NotBlank(message = "验证码不能为空")
|
||||
@Schema(description = "验证码", example = "666999")
|
||||
private String verificationCode;
|
||||
|
||||
/**
|
||||
* 简历(view值)
|
||||
*/
|
||||
@NotBlank(message = "简历(view值)不能为空")
|
||||
@Schema(description = "简历(view值)", example = "D89SKF3N")
|
||||
private String resume;
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
||||
|
@ -0,0 +1,49 @@
|
||||
package com.greenorange.promotion.model.dto.advancementApply;
|
||||
|
||||
import com.greenorange.promotion.annotation.EnumValue;
|
||||
import com.greenorange.promotion.model.enums.UserRoleEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 晋升申请批准请求体
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "晋升申请批准请求体", requiredProperties = {
|
||||
"applyId",
|
||||
"invitationCode",
|
||||
"userRole"
|
||||
})
|
||||
public class AdvancementApplyApproveRequest implements Serializable {
|
||||
|
||||
/**
|
||||
* 晋升申请id
|
||||
*/
|
||||
@Min(value = 1, message = "晋升申请id不能小于1")
|
||||
@Schema(description = "晋升申请id", example = "1")
|
||||
private Long applyId;
|
||||
|
||||
/**
|
||||
* 邀请码
|
||||
*/
|
||||
@NotBlank(message = "邀请码不能为空")
|
||||
@Schema(description = "邀请码", example = "666999")
|
||||
private String invitationCode;
|
||||
|
||||
/**
|
||||
* 用户角色
|
||||
*/
|
||||
@NotBlank(message = "用户角色不能为空")
|
||||
@EnumValue(enumClass = UserRoleEnum.class)
|
||||
@Schema(description = "用户角色", example = "user")
|
||||
private String userRole;
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
package com.greenorange.promotion.model.dto.advancementApply;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import lombok.Data;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import com.greenorange.promotion.common.PageRequest;
|
||||
|
||||
/**
|
||||
* 晋升申请查询请求体,继承自分页请求 PageRequest
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "晋升申请查询请求体", requiredProperties = {"current", "pageSize"})
|
||||
public class AdvancementApplyQueryRequest extends PageRequest implements Serializable {
|
||||
|
||||
/**
|
||||
* 申请人姓名
|
||||
*/
|
||||
@Schema(description = "申请人姓名", example = "张三")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 申请人手机号
|
||||
*/
|
||||
@Schema(description = "申请人手机号", example = "15888610253")
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 审核状态
|
||||
*/
|
||||
@Schema(description = "审核状态", example = "待审核")
|
||||
private String reviewStatus;
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
||||
|
@ -0,0 +1,40 @@
|
||||
package com.greenorange.promotion.model.dto.advancementApply;
|
||||
|
||||
import com.greenorange.promotion.annotation.EnumValue;
|
||||
import com.greenorange.promotion.model.enums.UserRoleEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 晋升申请拒绝请求体
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "晋升申请拒绝请求体", requiredProperties = {
|
||||
"applyId",
|
||||
"rejectReason"
|
||||
})
|
||||
public class AdvancementApplyRejectRequest implements Serializable {
|
||||
|
||||
/**
|
||||
* 晋升申请id
|
||||
*/
|
||||
@Min(value = 1, message = "晋升申请id不能小于1")
|
||||
@Schema(description = "晋升申请id", example = "1")
|
||||
private Long applyId;
|
||||
|
||||
/**
|
||||
* 拒绝理由
|
||||
*/
|
||||
@NotBlank(message = "拒绝理由不能为空")
|
||||
@Schema(description = "拒绝理由", example = "拒绝理由")
|
||||
private String rejectReason;
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
@ -0,0 +1,71 @@
|
||||
package com.greenorange.promotion.model.dto.advancementApply;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import lombok.Data;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 晋升申请更新请求体
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "晋升申请更新请求体", requiredProperties = {
|
||||
"id",
|
||||
"name",
|
||||
"phone",
|
||||
"verificationCode",
|
||||
"resume",
|
||||
"reviewStatus",
|
||||
})
|
||||
public class AdvancementApplyUpdateRequest implements Serializable {
|
||||
|
||||
/**
|
||||
* 晋升申请id
|
||||
*/
|
||||
@Min(value = 1L, message = "晋升申请id ID不能小于1")
|
||||
@Schema(description = "晋升申请id", example = "张三")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 申请人姓名
|
||||
*/
|
||||
@NotBlank(message = "申请人姓名不能为空")
|
||||
@Schema(description = "申请人姓名", example = "")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 申请人手机号
|
||||
*/
|
||||
@NotBlank(message = "申请人手机号不能为空")
|
||||
@Schema(description = "申请人手机号", example = "15888610253")
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 验证码
|
||||
*/
|
||||
@NotBlank(message = "验证码不能为空")
|
||||
@Schema(description = "验证码", example = "666999")
|
||||
private String verificationCode;
|
||||
|
||||
/**
|
||||
* 简历(view值)
|
||||
*/
|
||||
@NotBlank(message = "简历(view值)不能为空")
|
||||
@Schema(description = "简历(view值)", example = "3DFK2K3J")
|
||||
private String resume;
|
||||
|
||||
/**
|
||||
* 审核状态
|
||||
*/
|
||||
@NotBlank(message = "审核状态不能为空")
|
||||
@Schema(description = "审核状态", example = "待审核")
|
||||
private String reviewStatus;
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
@ -0,0 +1,75 @@
|
||||
package com.greenorange.promotion.model.dto.course;
|
||||
|
||||
import com.greenorange.promotion.annotation.EnumValue;
|
||||
import com.greenorange.promotion.model.enums.CourseTypeEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.DecimalMin;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.Data;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 课程添加请求体
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "课程添加请求体", requiredProperties = {
|
||||
"name",
|
||||
"type",
|
||||
"detail",
|
||||
"image",
|
||||
"originPrice",
|
||||
"discountPrice"
|
||||
})
|
||||
public class CourseAddRequest implements Serializable {
|
||||
|
||||
/**
|
||||
* 课程名称
|
||||
*/
|
||||
@NotBlank(message = "课程名称不能为空")
|
||||
@Schema(description = "课程名称", example = "数据分析工程师训练营")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 课程类别[考公,财经]
|
||||
*/
|
||||
@NotBlank(message = "课程类别不能为空")
|
||||
@EnumValue(enumClass = CourseTypeEnum.class)
|
||||
@Schema(description = "课程类别[考公,财经]", example = "自媒体")
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* 课程概述(富文本)
|
||||
*/
|
||||
@NotBlank(message = "课程概述(富文本)不能为空")
|
||||
@Schema(description = "课程概述(富文本)", example = "富文本")
|
||||
private String detail;
|
||||
|
||||
/**
|
||||
* 课程图片URL
|
||||
*/
|
||||
@NotBlank(message = "课程图片URL不能为空")
|
||||
@Schema(description = "课程图片URL", example = "324IEHJDE")
|
||||
private String image;
|
||||
|
||||
/**
|
||||
* 课程原价
|
||||
*/
|
||||
@DecimalMin(value = "0", message = "课程原价不能小于0")
|
||||
@Schema(description = "课程原价", example = "3499")
|
||||
private BigDecimal originPrice;
|
||||
|
||||
/**
|
||||
* 折扣价格
|
||||
*/
|
||||
@DecimalMin(value = "0", message = "折扣价格不能小于0")
|
||||
@Schema(description = "折扣价格", example = "2499")
|
||||
private BigDecimal discountPrice;
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
||||
|
@ -0,0 +1,48 @@
|
||||
package com.greenorange.promotion.model.dto.course;
|
||||
|
||||
import com.greenorange.promotion.annotation.EnumValue;
|
||||
import com.greenorange.promotion.model.enums.CourseTypeEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jdk.jfr.BooleanFlag;
|
||||
import lombok.Data;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import com.greenorange.promotion.common.PageRequest;
|
||||
|
||||
/**
|
||||
* 课程查询请求体,继承自分页请求 PageRequest
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "课程查询请求体", requiredProperties = {"current", "pageSize"})
|
||||
public class CourseQueryRequest extends PageRequest implements Serializable {
|
||||
|
||||
/**
|
||||
* 课程名称
|
||||
*/
|
||||
@Schema(description = "课程名称", example = "数据分析工程师训练营")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 课程类别[考公,财经]
|
||||
*/
|
||||
@EnumValue(enumClass = CourseTypeEnum.class)
|
||||
@Schema(description = "课程类别[考公,财经]", example = "自媒体")
|
||||
private String type;
|
||||
|
||||
|
||||
/**
|
||||
* 是否上架(true:上架,false:下架)
|
||||
*/
|
||||
@Schema(description = "是否上架(true:上架,false:下架)", example = "true")
|
||||
private Boolean isShelves;
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
||||
|
@ -0,0 +1,91 @@
|
||||
package com.greenorange.promotion.model.dto.course;
|
||||
|
||||
import com.greenorange.promotion.annotation.EnumValue;
|
||||
import com.greenorange.promotion.model.enums.CourseTypeEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.DecimalMin;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 课程更新请求体
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "课程更新请求体", requiredProperties = {
|
||||
"id",
|
||||
"name",
|
||||
"type",
|
||||
"detail",
|
||||
"image",
|
||||
"originPrice",
|
||||
"discountPrice",
|
||||
"orderCount"
|
||||
})
|
||||
public class CourseUpdateRequest implements Serializable {
|
||||
|
||||
/**
|
||||
* 课程ID
|
||||
*/
|
||||
@Min(value = 1L, message = "课程ID ID不能小于1")
|
||||
@Schema(description = "课程ID", example = "1")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 课程名称
|
||||
*/
|
||||
@NotBlank(message = "课程名称不能为空")
|
||||
@Schema(description = "课程名称", example = "数据分析工程师训练营")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 课程类别[考公,财经]
|
||||
*/
|
||||
@NotBlank(message = "课程类别不能为空")
|
||||
@EnumValue(enumClass = CourseTypeEnum.class)
|
||||
@Schema(description = "课程类别[考公,财经]", example = "自媒体")
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* 课程概述(富文本)
|
||||
*/
|
||||
@NotBlank(message = "课程概述(富文本)不能为空")
|
||||
@Schema(description = "课程概述(富文本)", example = "富文本")
|
||||
private String detail;
|
||||
|
||||
/**
|
||||
* 课程图片URL
|
||||
*/
|
||||
@NotBlank(message = "课程图片URL不能为空")
|
||||
@Schema(description = "课程图片URL", example = "324IEHJDE")
|
||||
private String image;
|
||||
|
||||
/**
|
||||
* 课程原价
|
||||
*/
|
||||
@DecimalMin(value = "0.0", message = "课程原价不能小于0")
|
||||
@Schema(description = "课程原价", example = "3499")
|
||||
private BigDecimal originPrice;
|
||||
|
||||
/**
|
||||
* 折扣价格
|
||||
*/
|
||||
@DecimalMin(value = "0.0", message = "折扣价格不能小于0")
|
||||
@Schema(description = "折扣价格", example = "2499")
|
||||
private BigDecimal discountPrice;
|
||||
|
||||
/**
|
||||
* 已下单人数
|
||||
*/
|
||||
@Schema(description = "已下单人数", example = "100")
|
||||
private Integer orderCount;
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
@ -0,0 +1,92 @@
|
||||
package com.greenorange.promotion.model.dto.courseOrder;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 课程订单添加请求体
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "课程订单添加请求体", requiredProperties = {
|
||||
"courseId"
|
||||
})
|
||||
public class CourseOrderAddRequest implements Serializable {
|
||||
|
||||
// /**
|
||||
// * 订单号
|
||||
// */
|
||||
// @NotBlank(message = "订单号不能为空")
|
||||
// @Schema(description = "订单号", example = "202506241339232334d234234243")
|
||||
// private String orderNumber;
|
||||
|
||||
/**
|
||||
* 课程ID
|
||||
*/
|
||||
@Min(value = 1L, message = "课程ID ID不能小于1")
|
||||
@Schema(description = "课程ID", example = "1")
|
||||
private Long courseId;
|
||||
|
||||
// /**
|
||||
// * 课程名称
|
||||
// */
|
||||
// @NotBlank(message = "课程名称不能为空")
|
||||
// @Schema(description = "课程名称", example = "数据分析工程师训练营")
|
||||
// private String name;
|
||||
//
|
||||
// /**
|
||||
// * 课程类别
|
||||
// */
|
||||
// @NotBlank(message = "课程类别不能为空")
|
||||
// @Schema(description = "课程类别", example = "自媒体")
|
||||
// private String type;
|
||||
//
|
||||
// /**
|
||||
// * 课程封面图片URL
|
||||
// */
|
||||
// @NotBlank(message = "课程封面图片URL不能为空")
|
||||
// @Schema(description = "课程封面图片URL", example = "38EFJID33")
|
||||
// private String image;
|
||||
//
|
||||
// /**
|
||||
// * 课程原价
|
||||
// */
|
||||
// @Schema(description = "课程原价", example = "20.00")
|
||||
// private BigDecimal originPrice;
|
||||
//
|
||||
// /**
|
||||
// * 折扣价格
|
||||
// */
|
||||
// @Schema(description = "折扣价格", example = "80.00")
|
||||
// private BigDecimal discountPrice;
|
||||
//
|
||||
// /**
|
||||
// * 订单总金额
|
||||
// */
|
||||
// @Schema(description = "订单总金额", example = "80.00")
|
||||
// private BigDecimal totalAmount;
|
||||
//
|
||||
// /**
|
||||
// * 支付交易号
|
||||
// */
|
||||
// @NotBlank(message = "支付交易号不能为空")
|
||||
// @Schema(description = "支付交易号", example = "432332333324444444444444423")
|
||||
// private String transactionNumber;
|
||||
//
|
||||
// /**
|
||||
// * 订单状态
|
||||
// */
|
||||
// @NotBlank(message = "订单状态不能为空")
|
||||
//// @EnumValue(enumClass = CourseOrderStatusEnum.class)
|
||||
// @Schema(description = "订单状态", example = "order")
|
||||
// private String orderStatus;
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
||||
|
@ -0,0 +1,41 @@
|
||||
package com.greenorange.promotion.model.dto.courseOrder;
|
||||
|
||||
import com.greenorange.promotion.annotation.EnumValue;
|
||||
import com.greenorange.promotion.model.enums.OrderStatusEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import lombok.Data;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import com.greenorange.promotion.common.PageRequest;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 课程订单查询请求体,继承自分页请求 PageRequest
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "课程订单查询请求体", requiredProperties = {"current", "pageSize"})
|
||||
public class CourseOrderQueryRequest extends PageRequest implements Serializable {
|
||||
|
||||
/**
|
||||
* 订单号
|
||||
*/
|
||||
@Schema(description = "订单号", example = "202506241339232334d234234243")
|
||||
private String orderNumber;
|
||||
|
||||
|
||||
/**
|
||||
* 订单状态[交易关闭,交易成功,待支付,已退款]
|
||||
*/
|
||||
@EnumValue(enumClass = OrderStatusEnum.class)
|
||||
@Schema(description = "订单状态[交易关闭,交易成功,待支付,已退款]", example = "交易成功")
|
||||
private String orderStatus;
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
||||
|
@ -0,0 +1,43 @@
|
||||
package com.greenorange.promotion.model.dto.courseOrder;
|
||||
|
||||
import com.greenorange.promotion.annotation.EnumValue;
|
||||
import com.greenorange.promotion.model.enums.OrderStatusEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import lombok.Data;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 课程订单更新请求体
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "课程订单更新请求体", requiredProperties = {
|
||||
"id",
|
||||
"orderStatus"
|
||||
})
|
||||
public class CourseOrderUpdateRequest implements Serializable {
|
||||
|
||||
/**
|
||||
* 订单ID
|
||||
*/
|
||||
@Min(value = 1L, message = "订单ID ID不能小于1")
|
||||
@Schema(description = "订单ID", example = "1")
|
||||
private Long id;
|
||||
|
||||
|
||||
/**
|
||||
* 订单状态[交易关闭,交易成功,待支付,已退款]
|
||||
*/
|
||||
@NotBlank(message = "订单状态不能为空")
|
||||
@EnumValue(enumClass = OrderStatusEnum.class)
|
||||
@Schema(description = "订单状态[交易关闭,交易成功,待支付,已退款]", example = "交易成功")
|
||||
private String orderStatus;
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
@ -1,13 +1,10 @@
|
||||
package com.greenorange.promotion.model.dto.fileInfo;
|
||||
|
||||
import com.greenorange.promotion.annotation.FileEnumValue;
|
||||
import com.greenorange.promotion.annotation.EnumValue;
|
||||
import com.greenorange.promotion.model.enums.FileUploadBizEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
@ -55,7 +52,7 @@ public class FileInfoAddRequest implements Serializable {
|
||||
/**
|
||||
* 文件业务类型[头像(avatar)|项目(project)|富文本(richText)|默认(default))]
|
||||
*/
|
||||
@FileEnumValue(enumClass = FileUploadBizEnum.class)
|
||||
@EnumValue(enumClass = FileUploadBizEnum.class)
|
||||
@Schema(description = "文件业务类型[头像(avatar)|项目(project)|富文本(richText)|默认(default))]", example = "avatar")
|
||||
private String biz;
|
||||
|
||||
|
@ -1,36 +0,0 @@
|
||||
package com.greenorange.promotion.model.dto.fileInfo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import com.greenorange.promotion.common.PageRequest;
|
||||
|
||||
/**
|
||||
* 文件查询请求体,继承自分页请求 PageRequest
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "文件查询请求体", requiredProperties = {"current", "pageSize"})
|
||||
public class FileInfoQueryRequest extends PageRequest implements Serializable {
|
||||
|
||||
/**
|
||||
* 文件ID
|
||||
*/
|
||||
@Min(value = 1L, message = "文件ID ID不能小于1")
|
||||
@Schema(description = "文件ID", example = "1")
|
||||
private Long id;
|
||||
|
||||
|
||||
/**
|
||||
* 文件view值
|
||||
*/
|
||||
@Schema(description = "文件view值", example = "3E8U2AM8")
|
||||
private String fileView;
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
||||
|
@ -1,79 +0,0 @@
|
||||
package com.greenorange.promotion.model.dto.fileInfo;
|
||||
|
||||
import com.greenorange.promotion.annotation.FileEnumValue;
|
||||
import com.greenorange.promotion.model.enums.FileUploadBizEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 文件更新请求体
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "文件更新请求体", requiredProperties = {
|
||||
"id",
|
||||
"name",
|
||||
"type",
|
||||
"size",
|
||||
"fileView",
|
||||
"biz",
|
||||
})
|
||||
public class FileInfoUpdateRequest implements Serializable {
|
||||
|
||||
/**
|
||||
* 文件ID
|
||||
*/
|
||||
@Min(value = 1L, message = "文件ID ID不能小于1")
|
||||
@Schema(description = "文件ID", example = "1")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 文件名
|
||||
*/
|
||||
@NotBlank(message = "文件名不能为空")
|
||||
@Schema(description = "文件名", example = "file.png")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 文件类型
|
||||
*/
|
||||
@NotBlank(message = "文件类型不能为空")
|
||||
@Schema(description = "文件类型", example = "png")
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* 文件大小(KB)
|
||||
*/
|
||||
@Min(value = 1L, message = "文件大小 ID不能小于1")
|
||||
@Schema(description = "文件大小", example = "3000")
|
||||
private Double size;
|
||||
|
||||
/**
|
||||
* 文件view值
|
||||
*/
|
||||
@NotBlank(message = "文件view值不能为空")
|
||||
@Schema(description = "文件view值", example = "3E8U2AM8")
|
||||
private String fileView;
|
||||
|
||||
/**
|
||||
* 文件业务类型[头像(avatar)|项目(project)|富文本(richText)|默认(default))]
|
||||
*/
|
||||
@FileEnumValue(enumClass = FileUploadBizEnum.class)
|
||||
@Schema(description = "文件业务类型[头像(avatar)|项目(project)|富文本(richText)|默认(default))]", example = "default")
|
||||
private String biz;
|
||||
|
||||
/**
|
||||
* 文件hash值
|
||||
*/
|
||||
@NotBlank(message = "文件hash值不能为空")
|
||||
@Schema(description = "文件hash值", example = "3E8U2AM8")
|
||||
private String hashValue;
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
package com.greenorange.promotion.model.dto.fileInfo;
|
||||
|
||||
import com.greenorange.promotion.annotation.FileEnumValue;
|
||||
import com.greenorange.promotion.annotation.EnumValue;
|
||||
import com.greenorange.promotion.model.enums.FileUploadBizEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
@ -15,7 +15,7 @@ public class UploadFileRequest implements Serializable {
|
||||
/**
|
||||
* 文件业务类型[头像(avatar)|项目(project)|富文本(richText)|默认(default))]
|
||||
*/
|
||||
@FileEnumValue(enumClass = FileUploadBizEnum.class)
|
||||
@EnumValue(enumClass = FileUploadBizEnum.class)
|
||||
@Schema(description = "文件业务类型[头像(avatar)|项目(project)|富文本(richText)|默认(default))]", example = "default")
|
||||
private String biz;
|
||||
|
||||
|
@ -29,6 +29,12 @@ public class FundsChangeAddRequest implements Serializable {
|
||||
@Schema(description = "项目名称", example = "饿了么-超吃卡")
|
||||
private String projectName;
|
||||
|
||||
/**
|
||||
* 项目明细名称
|
||||
*/
|
||||
@Schema(description = "项目明细名称", example = "2.9元购买30元券包")
|
||||
private String projectDetailName;
|
||||
|
||||
/**
|
||||
* 变动金额
|
||||
*/
|
||||
|
@ -1,21 +1,14 @@
|
||||
package com.greenorange.promotion.model.dto.project;
|
||||
|
||||
import com.greenorange.promotion.annotation.ProjectStatusEnumValue;
|
||||
import com.greenorange.promotion.model.dto.projectDetail.ProjectDetailAddRequest;
|
||||
import com.greenorange.promotion.model.dto.projectDetail.ProjectDetailUpdateRequest;
|
||||
import com.greenorange.promotion.model.dto.projectNotification.ProjectNotificationAddRequest;
|
||||
import com.greenorange.promotion.model.entity.ProjectNotification;
|
||||
import com.greenorange.promotion.annotation.EnumValue;
|
||||
import com.greenorange.promotion.model.enums.ProjectStatusEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 项目添加请求体
|
||||
@ -66,7 +59,8 @@ public class ProjectAddRequest implements Serializable {
|
||||
/**
|
||||
* 项目状态[项目运行(running)|人数已满(full)|项目暂停(paused)]
|
||||
*/
|
||||
@ProjectStatusEnumValue(enumClass = ProjectStatusEnum.class)
|
||||
@NotBlank(message = "项目状态不能为空")
|
||||
@EnumValue(enumClass = ProjectStatusEnum.class)
|
||||
@Schema(description = "项目状态[项目运行(running)|人数已满(full)|项目暂停(paused)]", example = "running")
|
||||
private String projectStatus;
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.greenorange.promotion.model.dto.project;
|
||||
|
||||
import com.greenorange.promotion.annotation.ProjectStatusEnumValue;
|
||||
import com.greenorange.promotion.annotation.EnumValue;
|
||||
import com.greenorange.promotion.model.enums.ProjectStatusEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.Min;
|
||||
@ -27,7 +27,7 @@ public class ProjectStatusUpdateRequest implements Serializable {
|
||||
/**
|
||||
* 项目状态[项目运行(running)|人数已满(full)|项目暂停(paused)]
|
||||
*/
|
||||
@ProjectStatusEnumValue(enumClass = ProjectStatusEnum.class)
|
||||
@EnumValue(enumClass = ProjectStatusEnum.class)
|
||||
@Schema(description = "项目状态[项目运行(running)|人数已满(full)|项目暂停(paused)]", example = "running")
|
||||
private String projectStatus;
|
||||
|
||||
|
@ -2,6 +2,8 @@ package com.greenorange.promotion.model.dto.project;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.greenorange.promotion.annotation.EnumValue;
|
||||
import com.greenorange.promotion.model.enums.ProjectStatusEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.DecimalMin;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
@ -103,6 +105,7 @@ public class ProjectUpdateRequest implements Serializable {
|
||||
/**
|
||||
* 项目状态[项目运行(running)|人数已满(full)|项目暂停(paused)]
|
||||
*/
|
||||
@EnumValue(enumClass = ProjectStatusEnum.class)
|
||||
@Schema(description = "项目状态[项目运行(running)|人数已满(full)|项目暂停(paused)]", example = "running")
|
||||
private String projectStatus;
|
||||
|
||||
|
@ -1,10 +1,7 @@
|
||||
package com.greenorange.promotion.model.dto.userInfo;
|
||||
|
||||
import com.greenorange.promotion.annotation.UserEnumValue;
|
||||
import com.greenorange.promotion.model.enums.UserRoleEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
@ -16,7 +13,7 @@ import java.io.Serializable;
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "用户添加请求体", requiredProperties = {"nickName", "userAvatar", "phoneNumber",
|
||||
"userAccount", "userPassword", "userRole"})
|
||||
"userAccount", "userPassword"})
|
||||
public class UserInfoAddRequest implements Serializable {
|
||||
|
||||
/**
|
||||
|
@ -2,8 +2,12 @@ package com.greenorange.promotion.model.dto.userInfo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
@ -41,6 +45,7 @@ public class UserInfoRegisterRequest implements Serializable {
|
||||
* 邀请码
|
||||
*/
|
||||
@Schema(description = "邀请码", example = "666999")
|
||||
@NotBlank(message = "邀请码不能为空")
|
||||
private String invitationCode;
|
||||
|
||||
/**
|
||||
|
@ -3,7 +3,10 @@ package com.greenorange.promotion.model.dto.userInfo;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
@ -1,7 +1,5 @@
|
||||
package com.greenorange.promotion.model.dto.userInfo;
|
||||
|
||||
import com.greenorange.promotion.annotation.UserEnumValue;
|
||||
import com.greenorange.promotion.model.enums.UserRoleEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
@ -16,8 +14,8 @@ import java.io.Serializable;
|
||||
* 用户更新请求体
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "用户更新请求体", requiredProperties = {"id", "nickName", "userAvatar", "phoneNumber",
|
||||
"userAccount", "userPassword", "userRole"})
|
||||
@Schema(description = "用户更新请求体", requiredProperties = {"id", "nickName", "userAvatar",
|
||||
"userAccount", "userPassword"})
|
||||
public class UserInfoUpdateRequest implements Serializable {
|
||||
|
||||
/**
|
||||
@ -42,13 +40,6 @@ public class UserInfoUpdateRequest implements Serializable {
|
||||
@Schema(description = "用户头像URL", example = "3E8U2AM8")
|
||||
private String userAvatar;
|
||||
|
||||
/**
|
||||
* 手机号
|
||||
*/
|
||||
@NotBlank(message = "手机号不能为空")
|
||||
@Schema(description = "手机号", example = "15888610253")
|
||||
private String phoneNumber;
|
||||
|
||||
/**
|
||||
* 账号
|
||||
*/
|
||||
@ -65,25 +56,6 @@ public class UserInfoUpdateRequest implements Serializable {
|
||||
@Schema(description = "密码(建议加密存储)", example = "qingcheng")
|
||||
private String userPassword;
|
||||
|
||||
/**
|
||||
* 邀请码
|
||||
*/
|
||||
@Schema(description = "邀请码", example = "666999")
|
||||
private String invitationCode;
|
||||
|
||||
/**
|
||||
* 用户角色
|
||||
*/
|
||||
@UserEnumValue(enumClass = UserRoleEnum.class)
|
||||
@Schema(description = "用户角色", example = "user")
|
||||
private String userRole;
|
||||
|
||||
/**
|
||||
* 上级用户id
|
||||
*/
|
||||
@Schema(description = "上级用户id", example = "1")
|
||||
private Long parentUserId;
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
@ -1,10 +1,6 @@
|
||||
package com.greenorange.promotion.model.dto.withdrawalApply;
|
||||
|
||||
import com.greenorange.promotion.annotation.WithdrawStatusEnumValue;
|
||||
import com.greenorange.promotion.model.enums.WithdrawStatusEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import lombok.Data;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@ -16,9 +12,7 @@ import java.io.Serializable;
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "提现申请记录添加请求体", requiredProperties = {
|
||||
"withdrawnAmount",
|
||||
"withdrawalStatus",
|
||||
"userId",
|
||||
"withdrawnAmount"
|
||||
})
|
||||
public class WithdrawalApplyAddRequest implements Serializable {
|
||||
|
||||
|
@ -1,12 +1,9 @@
|
||||
package com.greenorange.promotion.model.dto.withdrawalApply;
|
||||
|
||||
import com.greenorange.promotion.annotation.WithdrawStatusEnumValue;
|
||||
import com.greenorange.promotion.annotation.EnumValue;
|
||||
import com.greenorange.promotion.model.enums.WithdrawStatusEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import lombok.Data;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
@ -22,6 +19,7 @@ public class WithdrawalApplyQueryRequest extends PageRequest implements Serializ
|
||||
/**
|
||||
* 提现状态[提现中(processing)|提现成功(success)|提现失败(failed)]
|
||||
*/
|
||||
@EnumValue(enumClass = WithdrawStatusEnum.class)
|
||||
@Schema(description = "提现状态[提现中(processing)|提现成功(success)|提现失败(failed)]", example = "processing")
|
||||
private String withdrawalStatus;
|
||||
|
||||
|
@ -1,9 +1,8 @@
|
||||
package com.greenorange.promotion.model.dto.withdrawalApply;
|
||||
|
||||
import com.greenorange.promotion.annotation.WithdrawStatusEnumValue;
|
||||
import com.greenorange.promotion.annotation.EnumValue;
|
||||
import com.greenorange.promotion.model.enums.WithdrawStatusEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import lombok.Data;
|
||||
import java.math.BigDecimal;
|
||||
@ -17,9 +16,7 @@ import java.io.Serializable;
|
||||
@Data
|
||||
@Schema(description = "提现申请记录更新请求体", requiredProperties = {
|
||||
"id",
|
||||
"withdrawnAmount",
|
||||
"withdrawalStatus",
|
||||
"userId",
|
||||
"withdrawalStatus"
|
||||
})
|
||||
public class WithdrawalApplyUpdateRequest implements Serializable {
|
||||
|
||||
@ -30,26 +27,13 @@ public class WithdrawalApplyUpdateRequest implements Serializable {
|
||||
@Schema(description = "提现申请ID", example = "1")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 提现金额
|
||||
*/
|
||||
@Schema(description = "提现金额", example = "1.00")
|
||||
private BigDecimal withdrawnAmount;
|
||||
|
||||
/**
|
||||
* 提现状态[提现中(processing)|提现成功(success)|提现失败(failed)]
|
||||
*/
|
||||
@WithdrawStatusEnumValue(enumClass = WithdrawStatusEnum.class)
|
||||
@EnumValue(enumClass = WithdrawStatusEnum.class)
|
||||
@Schema(description = "提现状态[提现中(processing)|提现成功(success)|提现失败(failed)]", example = "processing")
|
||||
private String withdrawalStatus;
|
||||
|
||||
/**
|
||||
* 用户ID
|
||||
*/
|
||||
@Min(value = 1L, message = "用户ID ID不能小于1")
|
||||
@Schema(description = "用户ID", example = "1")
|
||||
private Long userId;
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
@ -0,0 +1,33 @@
|
||||
package com.greenorange.promotion.model.dto.wxPay;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@Schema(description = "微信支付请求体", requiredProperties = {"orderId", "code"})
|
||||
public class WechatPayRequest implements Serializable {
|
||||
|
||||
/**
|
||||
* 订单id
|
||||
*/
|
||||
@NotNull(message = "id不能为null")
|
||||
@Min(value = 1L, message = "id不能小于1")
|
||||
@Schema(description = "订单id", example = "1")
|
||||
private Long orderId;
|
||||
|
||||
/**
|
||||
* 用户登录凭证
|
||||
*/
|
||||
@NotBlank(message = "用户登录凭证不能为空")
|
||||
@Schema(description = "用户登录凭证", example = "23nm5jfds22a2324rr32rr")
|
||||
private String code;
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
@ -0,0 +1,76 @@
|
||||
package com.greenorange.promotion.model.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 晋升申请表
|
||||
* @TableName advancement_apply
|
||||
*/
|
||||
@TableName(value ="advancement_apply")
|
||||
@Data
|
||||
public class AdvancementApply implements Serializable {
|
||||
/**
|
||||
* 晋升申请id
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 申请人姓名
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 申请人手机号
|
||||
*/
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 简历
|
||||
*/
|
||||
private String resume;
|
||||
|
||||
/**
|
||||
* 查询凭证
|
||||
*/
|
||||
private String credential;
|
||||
|
||||
/**
|
||||
* 审核状态
|
||||
*/
|
||||
private String reviewStatus;
|
||||
|
||||
/**
|
||||
* 拒绝理由
|
||||
*/
|
||||
private String rejectReason;
|
||||
|
||||
/**
|
||||
* 用户id(申请成功后获得)
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 是否删除
|
||||
*/
|
||||
private Integer isDelete;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
@TableField(exist = false)
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
@ -0,0 +1,82 @@
|
||||
package com.greenorange.promotion.model.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 课程表
|
||||
* @TableName course
|
||||
*/
|
||||
@TableName(value ="course")
|
||||
@Data
|
||||
public class Course implements Serializable {
|
||||
/**
|
||||
* 课程ID
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 课程名称
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 课程类别[考公,财经]
|
||||
*/
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* 课程概述(富文本)
|
||||
*/
|
||||
private String detail;
|
||||
|
||||
/**
|
||||
* 课程图片URL
|
||||
*/
|
||||
private String image;
|
||||
|
||||
/**
|
||||
* 课程原价
|
||||
*/
|
||||
private BigDecimal originPrice;
|
||||
|
||||
/**
|
||||
* 折扣价格
|
||||
*/
|
||||
private BigDecimal discountPrice;
|
||||
|
||||
/**
|
||||
* 已下单人数
|
||||
*/
|
||||
private Integer orderCount;
|
||||
|
||||
/**
|
||||
* 是否上架(true:上架,false:下架)
|
||||
*/
|
||||
private Boolean isShelves;
|
||||
|
||||
/**
|
||||
* 是否删除
|
||||
*/
|
||||
private Integer isDelete;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
@TableField(exist = false)
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
@ -0,0 +1,100 @@
|
||||
package com.greenorange.promotion.model.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 课程订单表
|
||||
* @TableName course_order
|
||||
*/
|
||||
@TableName(value ="course_order")
|
||||
@Data
|
||||
public class CourseOrder implements Serializable {
|
||||
/**
|
||||
* 订单ID
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 订单号
|
||||
*/
|
||||
private String orderNumber;
|
||||
|
||||
/**
|
||||
* 课程ID
|
||||
*/
|
||||
private Long courseId;
|
||||
|
||||
/**
|
||||
* 课程名称
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 课程类别
|
||||
*/
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* 课程封面图片URL
|
||||
*/
|
||||
private String image;
|
||||
|
||||
/**
|
||||
* 课程原价
|
||||
*/
|
||||
private BigDecimal originPrice;
|
||||
|
||||
/**
|
||||
* 折扣价格
|
||||
*/
|
||||
private BigDecimal discountPrice;
|
||||
|
||||
/**
|
||||
* 订单总金额
|
||||
*/
|
||||
private BigDecimal totalAmount;
|
||||
|
||||
/**
|
||||
* 支付交易号
|
||||
*/
|
||||
private String transactionNumber;
|
||||
|
||||
/**
|
||||
* 订单状态[交易关闭,交易成功,待支付,已退款]
|
||||
*/
|
||||
private String orderStatus;
|
||||
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 是否删除
|
||||
*/
|
||||
private Integer isDelete;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
@Serial
|
||||
@TableField(exist = false)
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
@ -8,6 +8,7 @@ import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
@ -35,6 +36,11 @@ public class FundsChange implements Serializable {
|
||||
*/
|
||||
private String projectName;
|
||||
|
||||
/**
|
||||
* 项目明细名称
|
||||
*/
|
||||
private String projectDetailName;
|
||||
|
||||
/**
|
||||
* 变动金额
|
||||
*/
|
||||
|
@ -0,0 +1,112 @@
|
||||
package com.greenorange.promotion.model.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 课程抽成记录表
|
||||
* @TableName rake_reward
|
||||
*/
|
||||
@TableName(value ="rake_reward")
|
||||
@Data
|
||||
public class RakeReward implements Serializable {
|
||||
/**
|
||||
* 抽成记录ID
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 课程ID
|
||||
*/
|
||||
private Long courseId;
|
||||
|
||||
/**
|
||||
* 课程名称
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 课程类别
|
||||
*/
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* 课程图片URL
|
||||
*/
|
||||
private String image;
|
||||
|
||||
/**
|
||||
* 一级佣金比例(%)
|
||||
*/
|
||||
private BigDecimal firstLevelRate;
|
||||
|
||||
/**
|
||||
* 二级佣金比例(%)
|
||||
*/
|
||||
private BigDecimal secondLevelRate;
|
||||
|
||||
/**
|
||||
* 订单ID
|
||||
*/
|
||||
private Long orderId;
|
||||
|
||||
/**
|
||||
* 下单用户ID
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 下单用户昵称
|
||||
*/
|
||||
private String nickName;
|
||||
|
||||
/**
|
||||
* 订单金额
|
||||
*/
|
||||
private BigDecimal totalAmount;
|
||||
|
||||
/**
|
||||
* 订单创建日期
|
||||
*/
|
||||
private Date orderCreateTime;
|
||||
|
||||
/**
|
||||
* 对应推广记录ID
|
||||
*/
|
||||
private Long promoId;
|
||||
|
||||
/**
|
||||
* 推广类型
|
||||
*/
|
||||
private Object promoType;
|
||||
|
||||
/**
|
||||
* 抽成补贴金额
|
||||
*/
|
||||
private BigDecimal reward;
|
||||
|
||||
/**
|
||||
* 是否删除
|
||||
*/
|
||||
private Integer isDelete;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
@TableField(exist = false)
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
@ -69,4 +69,5 @@ public class SubUserProjectCommission implements Serializable {
|
||||
|
||||
@TableField(exist = false)
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
}
|
@ -18,6 +18,9 @@ import lombok.NoArgsConstructor;
|
||||
*/
|
||||
@TableName(value ="user_info")
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public class UserInfo implements Serializable {
|
||||
/**
|
||||
* 用户ID
|
||||
|
@ -44,6 +44,31 @@ public class WithdrawalApply implements Serializable {
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 持卡人
|
||||
*/
|
||||
private String cardHolder;
|
||||
|
||||
/**
|
||||
* 身份证号
|
||||
*/
|
||||
private String idCardNumber;
|
||||
|
||||
/**
|
||||
* 手机号
|
||||
*/
|
||||
private String phoneNumber;
|
||||
|
||||
/**
|
||||
* 银行卡号
|
||||
*/
|
||||
private String bankCardNumber;
|
||||
|
||||
/**
|
||||
* 开户银行
|
||||
*/
|
||||
private String openBank;
|
||||
|
||||
/**
|
||||
* 是否删除
|
||||
*/
|
||||
|
@ -0,0 +1,57 @@
|
||||
package com.greenorange.promotion.model.enums;
|
||||
|
||||
import com.greenorange.promotion.annotation.BaseEnum;
|
||||
import lombok.Getter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 课程类型枚举
|
||||
*/
|
||||
@Getter
|
||||
public enum CourseTypeEnum implements BaseEnum {
|
||||
|
||||
KAOGONG("考公"),
|
||||
CAIJING("财经");
|
||||
|
||||
private final String value;
|
||||
|
||||
CourseTypeEnum(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* BaseEnum 要求的方法:返回枚举对应的校验值
|
||||
*/
|
||||
@Override
|
||||
public String getValue() {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有枚举值列表
|
||||
*/
|
||||
public static List<String> getValues() {
|
||||
return Arrays.stream(values())
|
||||
.map(CourseTypeEnum::getValue)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据值获取对应的枚举对象
|
||||
*/
|
||||
public static CourseTypeEnum getEnumByValue(String value) {
|
||||
if (StringUtils.isBlank(value)) {
|
||||
return null;
|
||||
}
|
||||
for (CourseTypeEnum type : CourseTypeEnum.values()) {
|
||||
if (type.value.equals(value)) {
|
||||
return type;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
package com.greenorange.promotion.model.enums;
|
||||
|
||||
import com.greenorange.promotion.annotation.BaseEnum;
|
||||
import lombok.Getter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
@ -11,7 +12,7 @@ import java.util.stream.Collectors;
|
||||
* 文件上传业务类型枚举
|
||||
*/
|
||||
@Getter
|
||||
public enum FileUploadBizEnum {
|
||||
public enum FileUploadBizEnum implements BaseEnum {
|
||||
|
||||
AVATAR("用户头像", "avatar"),
|
||||
PROJECT("项目", "project"),
|
||||
@ -26,6 +27,14 @@ public enum FileUploadBizEnum {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* BaseEnum 要求的方法:返回这个枚举的“校验值”
|
||||
*/
|
||||
@Override
|
||||
public String getValue() {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取值列表
|
||||
*/
|
||||
|
@ -0,0 +1,59 @@
|
||||
package com.greenorange.promotion.model.enums;
|
||||
|
||||
import com.greenorange.promotion.annotation.BaseEnum;
|
||||
import lombok.Getter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 订单状态枚举
|
||||
*/
|
||||
@Getter
|
||||
public enum OrderStatusEnum implements BaseEnum {
|
||||
|
||||
CLOSED("交易关闭"),
|
||||
SUCCESS("交易成功"),
|
||||
PENDING("待支付"),
|
||||
REFUNDED("已退款");
|
||||
|
||||
private final String value;
|
||||
|
||||
OrderStatusEnum(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* BaseEnum 要求的方法:返回枚举对应的校验值
|
||||
*/
|
||||
@Override
|
||||
public String getValue() {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有枚举值列表
|
||||
*/
|
||||
public static List<String> getValues() {
|
||||
return Arrays.stream(values())
|
||||
.map(OrderStatusEnum::getValue)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据值获取对应的枚举对象
|
||||
*/
|
||||
public static OrderStatusEnum getEnumByValue(String value) {
|
||||
if (StringUtils.isBlank(value)) {
|
||||
return null;
|
||||
}
|
||||
for (OrderStatusEnum status : OrderStatusEnum.values()) {
|
||||
if (status.value.equals(value)) {
|
||||
return status;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
package com.greenorange.promotion.model.enums;
|
||||
|
||||
import com.greenorange.promotion.annotation.BaseEnum;
|
||||
import lombok.Getter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 试看权限枚举
|
||||
*/
|
||||
@Getter
|
||||
public enum PreviewPermissionEnum implements BaseEnum {
|
||||
|
||||
FULL_VIEW("全集试看"),
|
||||
PART_VIEW("部分试看"),
|
||||
CLOSED("关闭"),
|
||||
OPEN("开启");
|
||||
|
||||
private final String value;
|
||||
|
||||
PreviewPermissionEnum(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* BaseEnum 要求的方法:返回枚举对应的校验值
|
||||
*/
|
||||
@Override
|
||||
public String getValue() {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有枚举值列表
|
||||
*/
|
||||
public static List<String> getValues() {
|
||||
return Arrays.stream(values())
|
||||
.map(PreviewPermissionEnum::getValue)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据值获取对应的枚举对象
|
||||
*/
|
||||
public static PreviewPermissionEnum getEnumByValue(String value) {
|
||||
if (StringUtils.isBlank(value)) {
|
||||
return null;
|
||||
}
|
||||
for (PreviewPermissionEnum permission : PreviewPermissionEnum.values()) {
|
||||
if (permission.value.equals(value)) {
|
||||
return permission;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
package com.greenorange.promotion.model.enums;
|
||||
|
||||
import com.greenorange.promotion.annotation.BaseEnum;
|
||||
import lombok.Getter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
@ -11,7 +12,7 @@ import java.util.stream.Collectors;
|
||||
* 项目状态枚举
|
||||
*/
|
||||
@Getter
|
||||
public enum ProjectStatusEnum {
|
||||
public enum ProjectStatusEnum implements BaseEnum {
|
||||
|
||||
RUNNING("项目运行", "running"),
|
||||
FULL("人数已满", "full"),
|
||||
@ -25,6 +26,14 @@ public enum ProjectStatusEnum {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* BaseEnum 要求的方法:返回这个枚举的“校验值”
|
||||
*/
|
||||
@Override
|
||||
public String getValue() {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取值列表
|
||||
*/
|
||||
|
@ -0,0 +1,59 @@
|
||||
package com.greenorange.promotion.model.enums;
|
||||
|
||||
import com.greenorange.promotion.annotation.BaseEnum;
|
||||
import lombok.Getter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 审核状态枚举
|
||||
*/
|
||||
@Getter
|
||||
public enum ReviewStatusEnum implements BaseEnum {
|
||||
|
||||
PENDING("待审核"),
|
||||
APPROVED("已通过"),
|
||||
REJECTED("已拒绝"),
|
||||
WITHDRAWN("已撤回");
|
||||
|
||||
private final String value;
|
||||
|
||||
ReviewStatusEnum(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* BaseEnum 要求的方法:返回枚举对应的校验值
|
||||
*/
|
||||
@Override
|
||||
public String getValue() {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有枚举值列表
|
||||
*/
|
||||
public static List<String> getValues() {
|
||||
return Arrays.stream(values())
|
||||
.map(ReviewStatusEnum::getValue)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据值获取对应的枚举对象
|
||||
*/
|
||||
public static ReviewStatusEnum getEnumByValue(String value) {
|
||||
if (StringUtils.isBlank(value)) {
|
||||
return null;
|
||||
}
|
||||
for (ReviewStatusEnum status : ReviewStatusEnum.values()) {
|
||||
if (status.value.equals(value)) {
|
||||
return status;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
package com.greenorange.promotion.model.enums;
|
||||
|
||||
import com.greenorange.promotion.annotation.BaseEnum;
|
||||
import lombok.Getter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
@ -12,12 +13,15 @@ import java.util.stream.Collectors;
|
||||
* 用户角色枚举
|
||||
*/
|
||||
@Getter
|
||||
public enum UserRoleEnum {
|
||||
public enum UserRoleEnum implements BaseEnum {
|
||||
|
||||
USER("用户", "user"),
|
||||
ADMIN("管理员", "admin"),
|
||||
BOSS("Boss", "boss"),
|
||||
BAN("被封号", "ban");
|
||||
BAN("被封号", "ban"),
|
||||
MANAGER("经理", "manager"),
|
||||
SUPERVISOR("主管", "supervisor"),
|
||||
STAFF("员工", "staff");
|
||||
|
||||
|
||||
private final String text;
|
||||
@ -29,6 +33,14 @@ public enum UserRoleEnum {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* BaseEnum 要求的方法:返回这个枚举的“校验值”
|
||||
*/
|
||||
@Override
|
||||
public String getValue() {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取值列表
|
||||
*/
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.greenorange.promotion.model.enums;
|
||||
|
||||
import com.greenorange.promotion.annotation.BaseEnum;
|
||||
import lombok.Getter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
@ -11,7 +12,7 @@ import java.util.stream.Collectors;
|
||||
* 提现状态枚举
|
||||
*/
|
||||
@Getter
|
||||
public enum WithdrawStatusEnum {
|
||||
public enum WithdrawStatusEnum implements BaseEnum {
|
||||
|
||||
PROCESSING("提现中", "processing"),
|
||||
SUCCESS("提现成功", "success"),
|
||||
@ -26,6 +27,14 @@ public enum WithdrawStatusEnum {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* BaseEnum 要求的方法:返回这个枚举的“校验值”
|
||||
*/
|
||||
@Override
|
||||
public String getValue() {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有状态的值列表
|
||||
*/
|
||||
|
@ -0,0 +1,57 @@
|
||||
package com.greenorange.promotion.model.vo.advancementApply;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 晋升申请审核结果 视图对象
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "晋升申请审核结果 视图对象")
|
||||
public class AdvancementApplyApproveVO implements Serializable {
|
||||
|
||||
/**
|
||||
* 申请人姓名
|
||||
*/
|
||||
@Schema(description = "申请人姓名", example = "张三")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 申请人手机号
|
||||
*/
|
||||
@Schema(description = "申请人手机号", example = "15888610253")
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 审核状态
|
||||
*/
|
||||
@Schema(description = "审核状态", example = "待审核")
|
||||
private String reviewStatus;
|
||||
|
||||
/**
|
||||
* 拒绝理由
|
||||
*/
|
||||
@Schema(description = "拒绝理由", example = "无")
|
||||
private String rejectReason;
|
||||
|
||||
/**
|
||||
* 账号
|
||||
*/
|
||||
@Schema(description = "账号", example = "qingcheng")
|
||||
private String userAccount;
|
||||
|
||||
|
||||
/**
|
||||
* 密码(建议加密存储)
|
||||
*/
|
||||
@Schema(description = "密码(建议加密存储)", example = "qingcheng")
|
||||
private String userPassword;
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
package com.greenorange.promotion.model.vo.advancementApply;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* 晋升申请 视图对象
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "晋升申请 视图对象")
|
||||
public class AdvancementApplyVO implements Serializable {
|
||||
|
||||
/**
|
||||
* 晋升申请ID
|
||||
*/
|
||||
@Schema(description = "晋升申请ID", example = "1")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 申请人姓名
|
||||
*/
|
||||
@Schema(description = "申请人姓名", example = "张三")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 申请人手机号
|
||||
*/
|
||||
@Schema(description = "申请人手机号", example = "15888610253")
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 简历(view值)
|
||||
*/
|
||||
@Schema(description = "简历(view值)", example = "32DK8DKL8")
|
||||
private String resume;
|
||||
|
||||
/**
|
||||
* 查询凭证
|
||||
*/
|
||||
@Schema(description = "查询凭证", example = "cef281c7-578f-4cc9-aca9-f1b5f6bcacb1")
|
||||
private String credential;
|
||||
|
||||
/**
|
||||
* 审核状态
|
||||
*/
|
||||
@Schema(description = "审核状态", example = "待审核")
|
||||
private String reviewStatus;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@Schema(description = "创建时间", example = "2023-03-01 00:00:00")
|
||||
private Date createTime;
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
package com.greenorange.promotion.model.vo.advancementApply;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 晋升申请记录(id查询) 视图对象
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "晋升申请记录(id查询) 视图对象")
|
||||
public class AdvancementApplyVOPlus implements Serializable {
|
||||
|
||||
/**
|
||||
* 晋升申请ID
|
||||
*/
|
||||
@Schema(description = "晋升申请ID", example = "1")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 申请人姓名
|
||||
*/
|
||||
@Schema(description = "申请人姓名", example = "张三")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 申请人手机号
|
||||
*/
|
||||
@Schema(description = "申请人手机号", example = "15888610253")
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 简历(view值)
|
||||
*/
|
||||
@Schema(description = "简历(view值)", example = "32DK8DKL8")
|
||||
private String resume;
|
||||
|
||||
/**
|
||||
* 查询凭证
|
||||
*/
|
||||
@Schema(description = "查询凭证", example = "cef281c7-578f-4cc9-aca9-f1b5f6bcacb1")
|
||||
private String credential;
|
||||
|
||||
/**
|
||||
* 审核状态
|
||||
*/
|
||||
@Schema(description = "审核状态", example = "待审核")
|
||||
private String reviewStatus;
|
||||
|
||||
/**
|
||||
* 拒绝理由
|
||||
*/
|
||||
@Schema(description = "拒绝理由", example = "无")
|
||||
private String rejectReason;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@Schema(description = "创建时间", example = "2023-03-01 00:00:00")
|
||||
private Date createTime;
|
||||
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
package com.greenorange.promotion.model.vo.course;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
@Schema(description = "课程卡片 视图对象")
|
||||
public class CourseCardVO implements Serializable {
|
||||
|
||||
/**
|
||||
* 课程ID
|
||||
*/
|
||||
@Schema(description = "课程ID", example = "1")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 课程名称
|
||||
*/
|
||||
@Schema(description = "课程名称", example = "数据分析工程师训练营")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 课程类别[考公,财经]
|
||||
*/
|
||||
@Schema(description = "课程类别[考公,财经]", example = "自媒体")
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* 课程图片URL
|
||||
*/
|
||||
@Schema(description = "课程图片URL", example = "324IEHJDE")
|
||||
private String image;
|
||||
|
||||
/**
|
||||
* 课程原价
|
||||
*/
|
||||
@Schema(description = "课程原价", example = "3499")
|
||||
private BigDecimal originPrice;
|
||||
|
||||
/**
|
||||
* 折扣价格
|
||||
*/
|
||||
@Schema(description = "折扣价格", example = "2499")
|
||||
private BigDecimal discountPrice;
|
||||
|
||||
/**
|
||||
* 已下单人数
|
||||
*/
|
||||
@Schema(description = "已下单人数", example = "100")
|
||||
private Integer orderCount;
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
}
|
@ -0,0 +1,61 @@
|
||||
package com.greenorange.promotion.model.vo.course;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
|
||||
@Data
|
||||
@Schema(description = "课程详情 视图对象")
|
||||
public class CourseDetailVO implements Serializable {
|
||||
|
||||
/**
|
||||
* 课程ID
|
||||
*/
|
||||
@Schema(description = "课程ID", example = "1")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 课程名称
|
||||
*/
|
||||
@Schema(description = "课程名称", example = "数据分析工程师训练营")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 课程类别[考公,财经]
|
||||
*/
|
||||
@Schema(description = "课程类别[考公,财经]", example = "自媒体")
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* 课程概述(富文本)
|
||||
*/
|
||||
@Schema(description = "课程概述(富文本)", example = "富文本")
|
||||
private String detail;
|
||||
|
||||
/**
|
||||
* 课程图片URL
|
||||
*/
|
||||
@Schema(description = "课程图片URL", example = "324IEHJDE")
|
||||
private String image;
|
||||
|
||||
/**
|
||||
* 课程原价
|
||||
*/
|
||||
@Schema(description = "课程原价", example = "3499")
|
||||
private BigDecimal originPrice;
|
||||
|
||||
/**
|
||||
* 折扣价格
|
||||
*/
|
||||
@Schema(description = "折扣价格", example = "2499")
|
||||
private BigDecimal discountPrice;
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
}
|
@ -0,0 +1,74 @@
|
||||
package com.greenorange.promotion.model.vo.course;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 课程 视图对象
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "课程 视图对象")
|
||||
public class CourseVO implements Serializable {
|
||||
|
||||
/**
|
||||
* 课程ID
|
||||
*/
|
||||
@Schema(description = "课程ID", example = "1")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 课程名称
|
||||
*/
|
||||
@Schema(description = "课程名称", example = "数据分析工程师训练营")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 课程类别[考公,财经]
|
||||
*/
|
||||
@Schema(description = "课程类别[考公,财经]", example = "自媒体")
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* 课程概述(富文本)
|
||||
*/
|
||||
@Schema(description = "课程概述(富文本)", example = "富文本")
|
||||
private String detail;
|
||||
|
||||
/**
|
||||
* 课程图片URL
|
||||
*/
|
||||
@Schema(description = "课程图片URL", example = "324IEHJDE")
|
||||
private String image;
|
||||
|
||||
/**
|
||||
* 课程原价
|
||||
*/
|
||||
@Schema(description = "课程原价", example = "3499")
|
||||
private BigDecimal originPrice;
|
||||
|
||||
/**
|
||||
* 折扣价格
|
||||
*/
|
||||
@Schema(description = "折扣价格", example = "2499")
|
||||
private BigDecimal discountPrice;
|
||||
|
||||
/**
|
||||
* 已下单人数
|
||||
*/
|
||||
@Schema(description = "已下单人数", example = "100")
|
||||
private Integer orderCount;
|
||||
|
||||
/**
|
||||
* 是否上架(true:上架,false:下架)
|
||||
*/
|
||||
@Schema(description = "是否上架(true:上架,false:下架)", example = "true")
|
||||
private Boolean isShelves;
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
package com.greenorange.promotion.model.vo.courseOrder;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 课程订单卡片 视图对象
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "课程订单卡片 视图对象")
|
||||
public class CourseOrderCardVO implements Serializable {
|
||||
|
||||
|
||||
/**
|
||||
* 课程订单ID
|
||||
*/
|
||||
@Schema(description = "课程订单ID", example = "1")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 订单号
|
||||
*/
|
||||
@Schema(description = "订单号", example = "202506241339232334d234234243")
|
||||
private String orderNumber;
|
||||
|
||||
/**
|
||||
* 课程名称
|
||||
*/
|
||||
@Schema(description = "课程名称", example = "数据分析工程师训练营")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 课程类别
|
||||
*/
|
||||
@Schema(description = "课程类别", example = "自媒体")
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* 订单总金额
|
||||
*/
|
||||
@Schema(description = "订单总金额", example = "100.00")
|
||||
private BigDecimal totalAmount;
|
||||
|
||||
/**
|
||||
* 订单状态[交易关闭,交易成功,待支付,已退款]
|
||||
*/
|
||||
@Schema(description = "订单状态[交易关闭,交易成功,待支付,已退款]", example = "交易成功")
|
||||
private String orderStatus;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@Schema(description = "创建时间", example = "2025-06-24 13:39:23")
|
||||
private Date createTime;
|
||||
|
||||
}
|
@ -0,0 +1,105 @@
|
||||
package com.greenorange.promotion.model.vo.courseOrder;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 课程订单 视图对象
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "课程订单 视图对象")
|
||||
public class CourseOrderVO implements Serializable {
|
||||
|
||||
/**
|
||||
* 课程订单ID
|
||||
*/
|
||||
@Schema(description = "课程订单ID", example = "1")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 订单号
|
||||
*/
|
||||
@Schema(description = "订单号", example = "202506241339232334d234234243")
|
||||
private String orderNumber;
|
||||
|
||||
/**
|
||||
* 课程ID
|
||||
*/
|
||||
@Schema(description = "课程ID", example = "1")
|
||||
private Long courseId;
|
||||
|
||||
/**
|
||||
* 课程名称
|
||||
*/
|
||||
@Schema(description = "课程名称", example = "数据分析工程师训练营")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 课程类别
|
||||
*/
|
||||
@Schema(description = "课程类别", example = "自媒体")
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* 课程封面图片URL
|
||||
*/
|
||||
@Schema(description = "课程封面图片URL", example = "32DHDF3KI")
|
||||
private String image;
|
||||
|
||||
/**
|
||||
* 课程原价
|
||||
*/
|
||||
@Schema(description = "课程原价", example = "100.00")
|
||||
private BigDecimal originPrice;
|
||||
|
||||
/**
|
||||
* 折扣价格
|
||||
*/
|
||||
@Schema(description = "折扣价格", example = "50.00")
|
||||
private BigDecimal discountPrice;
|
||||
|
||||
/**
|
||||
* 订单总金额
|
||||
*/
|
||||
@Schema(description = "订单总金额", example = "100.00")
|
||||
private BigDecimal totalAmount;
|
||||
|
||||
/**
|
||||
* 支付交易号
|
||||
*/
|
||||
@Schema(description = "支付交易号", example = "4342348232388888833333333333")
|
||||
private String transactionNumber;
|
||||
|
||||
/**
|
||||
* 订单状态[交易关闭,交易成功,待支付,已退款]
|
||||
*/
|
||||
@Schema(description = "订单状态[交易关闭,交易成功,待支付,已退款]", example = "交易成功")
|
||||
private String orderStatus;
|
||||
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
@Schema(description = "用户id", example = "1")
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@Schema(description = "创建时间", example = "2025-06-24 13:39:23")
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@Schema(description = "更新时间", example = "2025-06-24 13:39:23")
|
||||
private Date updateTime;
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
package com.greenorange.promotion.model.vo.fundsChange;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
@ -27,6 +28,12 @@ public class FundsChangeVO implements Serializable {
|
||||
@Schema(description = "项目名称", example = "饿了么-超吃卡")
|
||||
private String projectName;
|
||||
|
||||
/**
|
||||
* 项目明细名称
|
||||
*/
|
||||
@Schema(description = "项目明细名称", example = "2.9元购买30元券包")
|
||||
private String projectDetailName;
|
||||
|
||||
/**
|
||||
* 变动金额
|
||||
*/
|
||||
|
@ -1,13 +1,17 @@
|
||||
package com.greenorange.promotion.model.vo.project;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class ProjectCardVO implements Serializable {
|
||||
|
||||
/**
|
||||
|
@ -0,0 +1,36 @@
|
||||
package com.greenorange.promotion.model.vo.userAccount;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
@Schema(description = "用户账户情况 视图对象")
|
||||
public class UserAccountConditionVO implements Serializable {
|
||||
|
||||
/**
|
||||
* 当前余额
|
||||
*/
|
||||
@Schema(description = "当前余额", example = "10.00")
|
||||
private BigDecimal currentBalance;
|
||||
|
||||
/**
|
||||
* 银行卡号
|
||||
*/
|
||||
@Schema(description = "银行卡号", example = "5105105105105100")
|
||||
private String bankCardNumber;
|
||||
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package com.greenorange.promotion.model.vo.userInfo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 上级用户信息 视图对象
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "上级用户信息 视图对象")
|
||||
public class SuperUserInfoVO implements Serializable {
|
||||
|
||||
/**
|
||||
* 用户昵称
|
||||
*/
|
||||
@Schema(description = "用户昵称", example = "chenxinzhi")
|
||||
private String nickName;
|
||||
|
||||
/**
|
||||
* 手机号
|
||||
*/
|
||||
@Schema(description = "手机号", example = "15888610253")
|
||||
private String phoneNumber;
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
@ -37,7 +37,6 @@ public class UserInfoVO implements Serializable {
|
||||
@Schema(description = "手机号", example = "15888610253")
|
||||
private String phoneNumber;
|
||||
|
||||
|
||||
/**
|
||||
* 账号
|
||||
*/
|
||||
|
@ -20,6 +20,36 @@ public class WithdrawalApplyVO implements Serializable {
|
||||
@Schema(description = "提现申请记录ID", example = "1")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 持卡人
|
||||
*/
|
||||
@Schema(description = "持卡人", example = "chenxinzhi")
|
||||
private String cardHolder;
|
||||
|
||||
/**
|
||||
* 身份证号
|
||||
*/
|
||||
@Schema(description = "身份证号", example = "110101199001011234")
|
||||
private String idCardNumber;
|
||||
|
||||
/**
|
||||
* 手机号
|
||||
*/
|
||||
@Schema(description = "手机号", example = "15888610253")
|
||||
private String phoneNumber;
|
||||
|
||||
/**
|
||||
* 银行卡号
|
||||
*/
|
||||
@Schema(description = "银行卡号", example = "5105105105105100")
|
||||
private String bankCardNumber;
|
||||
|
||||
/**
|
||||
* 开户银行
|
||||
*/
|
||||
@Schema(description = "开户银行", example = "中国工商银行")
|
||||
private String openBank;
|
||||
|
||||
/**
|
||||
* 提现金额
|
||||
*/
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user