feat:我的邀请

feature/comment
yang 2024-12-30 15:00:42 +08:00
parent cf6a7b2047
commit c846cbcf50
22 changed files with 540 additions and 6 deletions

View File

@ -55,6 +55,13 @@
<artifactId>mcwl-quartz</artifactId> <artifactId>mcwl-quartz</artifactId>
</dependency> </dependency>
<!-- 我的邀请模块-->
<dependency>
<groupId>com.mcwl</groupId>
<artifactId>mcwl-myInvitation</artifactId>
<version>3.8.8</version>
</dependency>
<!-- 代码生成--> <!-- 代码生成-->
<dependency> <dependency>
<groupId>com.mcwl</groupId> <groupId>com.mcwl</groupId>
@ -80,15 +87,15 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId> <artifactId>maven-war-plugin</artifactId>
<version>3.1.0</version> <version>3.1.0</version>
<configuration> <configuration>
<failOnMissingWebXml>false</failOnMissingWebXml> <failOnMissingWebXml>false</failOnMissingWebXml>
<warName>${project.artifactId}</warName> <warName>${project.artifactId}</warName>
</configuration> </configuration>
</plugin> </plugin>
</plugins> </plugins>
<finalName>${project.artifactId}</finalName> <finalName>${project.artifactId}</finalName>
</build> </build>

View File

@ -0,0 +1,12 @@
package com.mcwl.web.controller.myInvitation;
import org.springframework.web.bind.annotation.RestController;
@RestController("/consume")
public class ConsumeController {
}

View File

@ -0,0 +1,49 @@
package com.mcwl.web.controller.myInvitation;
import com.mcwl.common.annotation.Anonymous;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.utils.SecurityUtils;
import com.mcwl.myInvitation.domain.Invitation;
import com.mcwl.myInvitation.service.InvitationService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import static com.mcwl.common.core.domain.AjaxResult.success;
@RestController("/invitation")
@RequiredArgsConstructor
public class InvitationController {
private final InvitationService invitationService;
@GetMapping("/getInvitationCode")
@Anonymous
public AjaxResult getInvitationCode() {
// 获取当前用户
Long userId = SecurityUtils.getUserId();
String invitationCode = invitationService.getInvitationCode(userId);
return success("操作成功", invitationCode);
}
@GetMapping("/list")
public AjaxResult list() {
List<Invitation> list = invitationService.list();
return success(list);
}
@GetMapping("/getById")
public AjaxResult getById(Long id) {
Invitation invitation = invitationService.getById(id);
return success(invitation);
}
}

View File

@ -0,0 +1,39 @@
package com.mcwl.common.constant;
public class JwtConstants {
/**
* ID
*/
public static final String DETAILS_USER_ID = "user_id";
/**
*
*/
public static final String DETAILS_USERNAME = "user_name";
/**
*
*/
public static final String USER_KEY = "user_key";
/**
*
*/
public final static String SECRET = "abcdefghijklmnopqrstuvwxyz";
/**
*
*/
public static final String USER_PHONE = "user_phone";
/**
* token
*/
public static final String LOGIN_TOKEN = "login_token:";
/**
* token 1h = 60 * 60 * 1000L
*/
public static final Long EXPIRATION = 60 * 60 * 1000L;
}

View File

@ -0,0 +1,114 @@
package com.mcwl.common.utils;
import com.mcwl.common.constant.JwtConstants;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.util.Map;
/**
* @description: Jwt
* @author DongZl
*/
public class JwtUtils {
/**
*
*/
public static String secret = JwtConstants.SECRET;
/**
*
*
* @param claims
* @return
*/
public static String createToken(Map<String, Object> claims){
String token = Jwts.builder()
.addClaims(claims)
.signWith(SignatureAlgorithm.HS512, secret)
.setExpiration(new Date(System.currentTimeMillis() + JwtConstants.EXPIRATION))
.compact();
return token;
}
/**
*
*
* @param token
* @return
*/
public static Claims parseToken(String token){
return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();
}
/**
*
*
* @param token
* @return ID
*/
public static String getUserKey(String token){
Claims claims = parseToken(token);
return getValue(claims, JwtConstants.USER_KEY);
}
/**
*
*
* @param claims
* @return ID
*/
public static String getUserKey(Claims claims){
return getValue(claims, JwtConstants.USER_KEY);
}
/**
* ID
*
* @param token
* @return ID
*/
public static String getUserId(String token){
Claims claims = parseToken(token);
return getValue(claims, JwtConstants.DETAILS_USER_ID);
}
/**
* ID
*
* @param claims
* @return ID
*/
public static String getUserId(Claims claims){
return getValue(claims, JwtConstants.DETAILS_USER_ID);
}
/**
*
*
* @param token
* @return
*/
public static String getUserName(String token){
Claims claims = parseToken(token);
return getValue(claims, JwtConstants.DETAILS_USERNAME);
}
/**
*
*
* @param claims
* @return
*/
public static String getUserName(Claims claims){
return getValue(claims, JwtConstants.DETAILS_USERNAME);
}
/**
*
*
* @param claims
* @param key
* @return
*/
public static String getValue(Claims claims, String key){
Object obj = claims.get(key);
return obj == null ? "" : obj.toString();
}
}

View File

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.mcwl</groupId>
<artifactId>mcwl</artifactId>
<version>3.8.8</version>
</parent>
<artifactId>mcwl-myInvitation</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<mybatis-plus.version>3.5.2</mybatis-plus.version>
</properties>
<dependencies>
<!-- 通用工具-->
<dependency>
<groupId>com.mcwl</groupId>
<artifactId>mcwl-common</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,41 @@
package com.mcwl.myInvitation.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.mcwl.common.core.domain.BaseEntity;
import lombok.Data;
import java.util.Objects;
// 提成表
@Data
@TableName("commissions")
public class Commission extends BaseEntity {
@TableId
private Long id;
// 用户id
private Long userId;
// 消费id
private Long consumeId;
// 提成金额
private Double amount;
// 支付状态
private Integer payStatus;
@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
Commission that = (Commission) o;
return Objects.equals(id, that.id) && Objects.equals(userId, that.userId) && Objects.equals(consumeId, that.consumeId) && Objects.equals(amount, that.amount) && Objects.equals(payStatus, that.payStatus);
}
@Override
public int hashCode() {
return Objects.hash(id, userId, consumeId, amount, payStatus);
}
}

View File

@ -0,0 +1,39 @@
package com.mcwl.myInvitation.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.mcwl.common.core.domain.BaseEntity;
import lombok.Data;
import java.util.Date;
import java.util.Objects;
// 消费表
@Data
@TableName("consumes")
public class Consume extends BaseEntity {
@TableId
private Long id;
// 用户id
private Long userId;
// 消费金额
private Double amount;
// 消费时间
private Date consumeDate;
@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
Consume consume = (Consume) o;
return Objects.equals(id, consume.id) && Objects.equals(userId, consume.userId) && Objects.equals(amount, consume.amount) && Objects.equals(consumeDate, consume.consumeDate);
}
@Override
public int hashCode() {
return Objects.hash(id, userId, amount, consumeDate);
}
}

View File

@ -0,0 +1,39 @@
package com.mcwl.myInvitation.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.mcwl.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Objects;
// 邀请表
@Data
@TableName("invitations")
public class Invitation extends BaseEntity {
@TableId
private Long id;
// 邀请者
private Long userId;
// 被邀请者
private Long userInviteId ;
// 邀请码
private String invitationCode;
@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
Invitation that = (Invitation) o;
return Objects.equals(id, that.id) && Objects.equals(userId, that.userId) && Objects.equals(userInviteId, that.userInviteId) && Objects.equals(invitationCode, that.invitationCode);
}
@Override
public int hashCode() {
return Objects.hash(id, userId, userInviteId, invitationCode);
}
}

View File

@ -0,0 +1,13 @@
package com.mcwl.myInvitation.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mcwl.myInvitation.domain.Commission;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface CommissionMapper extends BaseMapper<Commission> {
}

View File

@ -0,0 +1,11 @@
package com.mcwl.myInvitation.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mcwl.myInvitation.domain.Commission;
import com.mcwl.myInvitation.domain.Consume;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ConsumeMapper extends BaseMapper<Consume> {
}

View File

@ -0,0 +1,11 @@
package com.mcwl.myInvitation.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mcwl.myInvitation.domain.Commission;
import com.mcwl.myInvitation.domain.Invitation;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface InvitationMapper extends BaseMapper<Invitation> {
}

View File

@ -0,0 +1,8 @@
package com.mcwl.myInvitation.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mcwl.myInvitation.domain.Commission;
public interface CommissionService extends IService<Commission> {
}

View File

@ -0,0 +1,8 @@
package com.mcwl.myInvitation.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mcwl.myInvitation.domain.Consume;
public interface ConsumeService extends IService<Consume> {
}

View File

@ -0,0 +1,14 @@
package com.mcwl.myInvitation.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mcwl.myInvitation.domain.Invitation;
public interface InvitationService extends IService<Invitation> {
/**
*
* @param userId id
* @return
*/
String getInvitationCode(Long userId);
}

View File

@ -0,0 +1,16 @@
package com.mcwl.myInvitation.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mcwl.myInvitation.domain.Commission;
import com.mcwl.myInvitation.mapper.CommissionMapper;
import com.mcwl.myInvitation.service.CommissionService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commission> implements CommissionService {
}

View File

@ -0,0 +1,15 @@
package com.mcwl.myInvitation.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mcwl.myInvitation.domain.Consume;
import com.mcwl.myInvitation.mapper.ConsumeMapper;
import com.mcwl.myInvitation.service.ConsumeService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class ConsumeServiceImpl extends ServiceImpl<ConsumeMapper, Consume> implements ConsumeService {
}

View File

@ -0,0 +1,28 @@
package com.mcwl.myInvitation.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mcwl.common.constant.JwtConstants;
import com.mcwl.common.utils.JwtUtils;
import com.mcwl.myInvitation.domain.Invitation;
import com.mcwl.myInvitation.mapper.InvitationMapper;
import com.mcwl.myInvitation.service.InvitationService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
@Service
@RequiredArgsConstructor
public class InvitationServiceImpl extends ServiceImpl<InvitationMapper, Invitation> implements InvitationService {
@Override
public String getInvitationCode(Long userId) {
// 生成邀请码
Map<String, Object> claims = new HashMap<>() ;
claims.put(JwtConstants.DETAILS_USER_ID, userId);
String invitationCode = JwtUtils.createToken(claims);
return invitationCode;
}
}

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mcwl.myInvitation.mapper.CommissionMapper">
</mapper>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mcwl.myInvitation.mapper.ConsumeMapper">
</mapper>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mcwl.myInvitation.mapper.InvitationMapper">
</mapper>

View File

@ -228,6 +228,7 @@
<module>mcwl-quartz</module> <module>mcwl-quartz</module>
<module>mcwl-generator</module> <module>mcwl-generator</module>
<module>mcwl-common</module> <module>mcwl-common</module>
<module>mcwl-myInvitation</module>
</modules> </modules>
<packaging>pom</packaging> <packaging>pom</packaging>