userName 1 week ago
commit
86d86d377b
43 changed files with 1338 additions and 0 deletions
  1. 33 0
      .gitignore
  2. 89 0
      pom.xml
  3. 15 0
      src/main/java/com/zhentao/HechenghangsaleApplication.java
  4. 26 0
      src/main/java/com/zhentao/controller/UserController.java
  5. 36 0
      src/main/java/com/zhentao/domain/Coupon.java
  6. 56 0
      src/main/java/com/zhentao/domain/OrderInfo.java
  7. 56 0
      src/main/java/com/zhentao/domain/OrderItem.java
  8. 41 0
      src/main/java/com/zhentao/domain/ProductSku.java
  9. 35 0
      src/main/java/com/zhentao/domain/UserCoupon.java
  10. 66 0
      src/main/java/com/zhentao/domain/UserLogin.java
  11. 14 0
      src/main/java/com/zhentao/dto/LoginDto.java
  12. 7 0
      src/main/java/com/zhentao/enums/BaseExceptionEnum.java
  13. 21 0
      src/main/java/com/zhentao/exception/ApiException.java
  14. 43 0
      src/main/java/com/zhentao/exception/GlobalExceptionHandler.java
  15. 18 0
      src/main/java/com/zhentao/mapper/CouponMapper.java
  16. 18 0
      src/main/java/com/zhentao/mapper/OrderInfoMapper.java
  17. 18 0
      src/main/java/com/zhentao/mapper/OrderItemMapper.java
  18. 18 0
      src/main/java/com/zhentao/mapper/ProductSkuMapper.java
  19. 18 0
      src/main/java/com/zhentao/mapper/UserCouponMapper.java
  20. 18 0
      src/main/java/com/zhentao/mapper/UserLoginMapper.java
  21. 13 0
      src/main/java/com/zhentao/service/CouponService.java
  22. 13 0
      src/main/java/com/zhentao/service/OrderInfoService.java
  23. 13 0
      src/main/java/com/zhentao/service/OrderItemService.java
  24. 13 0
      src/main/java/com/zhentao/service/ProductSkuService.java
  25. 13 0
      src/main/java/com/zhentao/service/UserCouponService.java
  26. 18 0
      src/main/java/com/zhentao/service/UserLoginService.java
  27. 22 0
      src/main/java/com/zhentao/service/impl/CouponServiceImpl.java
  28. 22 0
      src/main/java/com/zhentao/service/impl/OrderInfoServiceImpl.java
  29. 22 0
      src/main/java/com/zhentao/service/impl/OrderItemServiceImpl.java
  30. 22 0
      src/main/java/com/zhentao/service/impl/ProductSkuServiceImpl.java
  31. 22 0
      src/main/java/com/zhentao/service/impl/UserCouponServiceImpl.java
  32. 72 0
      src/main/java/com/zhentao/service/impl/UserLoginServiceImpl.java
  33. 119 0
      src/main/java/com/zhentao/utils/AppJwtUtil.java
  34. 136 0
      src/main/java/com/zhentao/utils/SnowflakeIdGenerator.java
  35. 30 0
      src/main/java/com/zhentao/vo/ResultVo.java
  36. 11 0
      src/main/resources/application.yml
  37. 16 0
      src/main/resources/mapper/CouponMapper.xml
  38. 22 0
      src/main/resources/mapper/OrderInfoMapper.xml
  39. 22 0
      src/main/resources/mapper/OrderItemMapper.xml
  40. 18 0
      src/main/resources/mapper/ProductSkuMapper.xml
  41. 16 0
      src/main/resources/mapper/UserCouponMapper.xml
  42. 24 0
      src/main/resources/mapper/UserLoginMapper.xml
  43. 13 0
      src/test/java/com/zhentao/HechenghangsaleApplicationTests.java

+ 33 - 0
.gitignore

@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/

+ 89 - 0
pom.xml

@@ -0,0 +1,89 @@
+<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.zhentao</groupId>
+    <artifactId>hechenghangsale</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>hechenghangsale</name>
+    <description>hechenghangsale</description>
+    <properties>
+        <java.version>1.8</java.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <spring-boot.version>2.6.13</spring-boot.version>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.5.3.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.mysql</groupId>
+            <artifactId>mysql-connector-j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt</artifactId>
+            <version>0.9.1</version>
+        </dependency>
+        <dependency>
+            <groupId>redis.clients</groupId>
+            <artifactId>jedis</artifactId>
+        </dependency>
+
+    </dependencies>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>${spring-boot.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>UTF-8</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>${spring-boot.version}</version>
+                <configuration>
+                    <mainClass>com.zhentao.HechenghangsaleApplication</mainClass>
+                    <skip>true</skip>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>repackage</id>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 15 - 0
src/main/java/com/zhentao/HechenghangsaleApplication.java

@@ -0,0 +1,15 @@
+package com.zhentao;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+@MapperScan("com.zhentao.mapper")
+public class HechenghangsaleApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(HechenghangsaleApplication.class, args);
+    }
+
+}

+ 26 - 0
src/main/java/com/zhentao/controller/UserController.java

@@ -0,0 +1,26 @@
+package com.zhentao.controller;
+
+import com.zhentao.domain.UserLogin;
+import com.zhentao.dto.LoginDto;
+import com.zhentao.service.UserLoginService;
+import com.zhentao.vo.ResultVo;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("/user")
+public class UserController {
+    @Resource
+    private UserLoginService userLoginService;
+    @RequestMapping("/register")
+    public ResultVo register(@RequestBody LoginDto loginDto){
+        return userLoginService.register(loginDto);
+    }
+    @RequestMapping("/login")
+    public ResultVo login(@RequestBody LoginDto loginDto){
+        return userLoginService.login(loginDto);
+    }
+}

+ 36 - 0
src/main/java/com/zhentao/domain/Coupon.java

@@ -0,0 +1,36 @@
+package com.zhentao.domain;
+
+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 lombok.Data;
+
+/**
+ * 
+ * @TableName coupon
+ */
+@TableName(value ="coupon")
+@Data
+public class Coupon implements Serializable {
+    /**
+     * 优惠券id
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 类型(0默认满减,1按照倍率)
+     */
+    private Integer type;
+
+    /**
+     * 优惠金额
+     */
+    private BigDecimal discount;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 56 - 0
src/main/java/com/zhentao/domain/OrderInfo.java

@@ -0,0 +1,56 @@
+package com.zhentao.domain;
+
+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 lombok.Data;
+
+/**
+ * 
+ * @TableName order_info
+ */
+@TableName(value ="order_info")
+@Data
+public class OrderInfo implements Serializable {
+    /**
+     * 订单id
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 总价
+     */
+    private BigDecimal amount;
+
+    /**
+     * 实付金额
+     */
+    private BigDecimal payAmount;
+
+    /**
+     * 优惠券id
+     */
+    private Long couponId;
+
+    /**
+     * 优惠价
+     */
+    private BigDecimal discount;
+
+    /**
+     * 状态(默认1正常 0取消 2退货)
+     */
+    private Integer status;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 56 - 0
src/main/java/com/zhentao/domain/OrderItem.java

@@ -0,0 +1,56 @@
+package com.zhentao.domain;
+
+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 lombok.Data;
+
+/**
+ * 
+ * @TableName order_item
+ */
+@TableName(value ="order_item")
+@Data
+public class OrderItem implements Serializable {
+    /**
+     * 明细id
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 订单id
+     */
+    private Long orderId;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 数量
+     */
+    private Integer num;
+
+    /**
+     * 单价
+     */
+    private BigDecimal productPrice;
+
+    /**
+     * 小计
+     */
+    private BigDecimal totalPrice;
+
+    /**
+     * 状态(默认1正常 0取消 2退货)
+     */
+    private Integer status;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 41 - 0
src/main/java/com/zhentao/domain/ProductSku.java

@@ -0,0 +1,41 @@
+package com.zhentao.domain;
+
+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 lombok.Data;
+
+/**
+ * 
+ * @TableName product_sku
+ */
+@TableName(value ="product_sku")
+@Data
+public class ProductSku implements Serializable {
+    /**
+     * 商品sku
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 单价
+     */
+    private BigDecimal price;
+
+    /**
+     * 描述
+     */
+    private String desc;
+
+    /**
+     * 图片
+     */
+    private String image;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 35 - 0
src/main/java/com/zhentao/domain/UserCoupon.java

@@ -0,0 +1,35 @@
+package com.zhentao.domain;
+
+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 lombok.Data;
+
+/**
+ * 
+ * @TableName user_coupon
+ */
+@TableName(value ="user_coupon")
+@Data
+public class UserCoupon implements Serializable {
+    /**
+     * id
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 优惠券id
+     */
+    private Long couponId;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 66 - 0
src/main/java/com/zhentao/domain/UserLogin.java

@@ -0,0 +1,66 @@
+package com.zhentao.domain;
+
+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 lombok.Data;
+
+/**
+ * 
+ * @TableName user_login
+ */
+@TableName(value ="user_login")
+@Data
+public class UserLogin implements Serializable {
+    /**
+     * 用户id
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 唯一id
+     */
+    private String openId;
+
+    /**
+     * 设备id
+     */
+    private String unionId;
+
+    /**
+     * 加密
+     */
+    private String sessionKey;
+
+    /**
+     * 用户名
+     */
+    private String username;
+
+    /**
+     * 密码
+     */
+    private String password;
+
+    /**
+     * 邮箱
+     */
+    private String email;
+
+    /**
+     * 假删
+     */
+    private Integer isDel;
+
+    /**
+     * 余额
+     */
+    private BigDecimal money;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 14 - 0
src/main/java/com/zhentao/dto/LoginDto.java

@@ -0,0 +1,14 @@
+package com.zhentao.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class LoginDto {
+    private String username;
+    private String password;
+
+}

+ 7 - 0
src/main/java/com/zhentao/enums/BaseExceptionEnum.java

@@ -0,0 +1,7 @@
+package com.zhentao.enums;
+
+public interface BaseExceptionEnum {
+    Integer getCode();
+
+    String getMessage();
+}

+ 21 - 0
src/main/java/com/zhentao/exception/ApiException.java

@@ -0,0 +1,21 @@
+package com.zhentao.exception;
+
+
+import com.zhentao.enums.BaseExceptionEnum;
+import lombok.Data;
+
+@Data
+public class ApiException extends RuntimeException{
+    public Integer code;
+    public String msg;
+    public ApiException(BaseExceptionEnum baseExceptionEnum){
+        super(baseExceptionEnum.getMessage());
+        this.code=baseExceptionEnum.getCode();
+        this.msg=baseExceptionEnum.getMessage();
+    }
+    public ApiException(Integer code, String message){
+        super(message);
+        this.code=code;
+        this.msg=message;
+    }
+}

+ 43 - 0
src/main/java/com/zhentao/exception/GlobalExceptionHandler.java

@@ -0,0 +1,43 @@
+package com.zhentao.exception;
+
+import com.zhentao.vo.ResultVo;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.multipart.MultipartException;
+import org.springframework.web.servlet.NoHandlerFoundException;
+
+import javax.servlet.http.HttpServletRequest;
+
+@ControllerAdvice
+@RestControllerAdvice
+@Slf4j
+public class GlobalExceptionHandler {
+
+    @ExceptionHandler(value = Exception.class)
+    @ResponseBody
+    public ResultVo defaultErrorHandler(HttpServletRequest req, Exception e){
+        log.error(e.getMessage());
+        if(e instanceof NoHandlerFoundException){
+            return  new ResultVo(404,"不存在页面请求",null);
+        }
+        if(e instanceof ApiException){
+            ApiException costomException= (ApiException) e;
+            return new ResultVo(costomException.getCode(),costomException.getMessage(),null);
+        }
+        else if (e instanceof MultipartException){
+            log.error("系统异常{}",e);
+            return new ResultVo(1000,"上传文件异常",null);
+        } else if (e instanceof MethodArgumentNotValidException) {
+            MethodArgumentNotValidException methodArgumentNotValidException= (MethodArgumentNotValidException) e;
+            return new ResultVo(1002,methodArgumentNotValidException.getBindingResult().getFieldError().getDefaultMessage(),null);
+        }
+        else {
+            log.error("系统异常{}",e);
+            return new ResultVo(1001,"系统参数异常",null);
+        }
+    }
+}

+ 18 - 0
src/main/java/com/zhentao/mapper/CouponMapper.java

@@ -0,0 +1,18 @@
+package com.zhentao.mapper;
+
+import com.zhentao.domain.Coupon;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author 31810
+* @description 针对表【coupon】的数据库操作Mapper
+* @createDate 2025-05-10 09:55:27
+* @Entity com.zhentao.domain.Coupon
+*/
+public interface CouponMapper extends BaseMapper<Coupon> {
+
+}
+
+
+
+

+ 18 - 0
src/main/java/com/zhentao/mapper/OrderInfoMapper.java

@@ -0,0 +1,18 @@
+package com.zhentao.mapper;
+
+import com.zhentao.domain.OrderInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author 31810
+* @description 针对表【order_info】的数据库操作Mapper
+* @createDate 2025-05-10 09:55:27
+* @Entity com.zhentao.domain.OrderInfo
+*/
+public interface OrderInfoMapper extends BaseMapper<OrderInfo> {
+
+}
+
+
+
+

+ 18 - 0
src/main/java/com/zhentao/mapper/OrderItemMapper.java

@@ -0,0 +1,18 @@
+package com.zhentao.mapper;
+
+import com.zhentao.domain.OrderItem;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author 31810
+* @description 针对表【order_item】的数据库操作Mapper
+* @createDate 2025-05-10 09:55:27
+* @Entity com.zhentao.domain.OrderItem
+*/
+public interface OrderItemMapper extends BaseMapper<OrderItem> {
+
+}
+
+
+
+

+ 18 - 0
src/main/java/com/zhentao/mapper/ProductSkuMapper.java

@@ -0,0 +1,18 @@
+package com.zhentao.mapper;
+
+import com.zhentao.domain.ProductSku;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author 31810
+* @description 针对表【product_sku】的数据库操作Mapper
+* @createDate 2025-05-10 09:55:27
+* @Entity com.zhentao.domain.ProductSku
+*/
+public interface ProductSkuMapper extends BaseMapper<ProductSku> {
+
+}
+
+
+
+

+ 18 - 0
src/main/java/com/zhentao/mapper/UserCouponMapper.java

@@ -0,0 +1,18 @@
+package com.zhentao.mapper;
+
+import com.zhentao.domain.UserCoupon;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author 31810
+* @description 针对表【user_coupon】的数据库操作Mapper
+* @createDate 2025-05-10 09:55:27
+* @Entity com.zhentao.domain.UserCoupon
+*/
+public interface UserCouponMapper extends BaseMapper<UserCoupon> {
+
+}
+
+
+
+

+ 18 - 0
src/main/java/com/zhentao/mapper/UserLoginMapper.java

@@ -0,0 +1,18 @@
+package com.zhentao.mapper;
+
+import com.zhentao.domain.UserLogin;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author 31810
+* @description 针对表【user_login】的数据库操作Mapper
+* @createDate 2025-05-10 09:55:27
+* @Entity com.zhentao.domain.UserLogin
+*/
+public interface UserLoginMapper extends BaseMapper<UserLogin> {
+
+}
+
+
+
+

+ 13 - 0
src/main/java/com/zhentao/service/CouponService.java

@@ -0,0 +1,13 @@
+package com.zhentao.service;
+
+import com.zhentao.domain.Coupon;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author 31810
+* @description 针对表【coupon】的数据库操作Service
+* @createDate 2025-05-10 09:55:27
+*/
+public interface CouponService extends IService<Coupon> {
+
+}

+ 13 - 0
src/main/java/com/zhentao/service/OrderInfoService.java

@@ -0,0 +1,13 @@
+package com.zhentao.service;
+
+import com.zhentao.domain.OrderInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author 31810
+* @description 针对表【order_info】的数据库操作Service
+* @createDate 2025-05-10 09:55:27
+*/
+public interface OrderInfoService extends IService<OrderInfo> {
+
+}

+ 13 - 0
src/main/java/com/zhentao/service/OrderItemService.java

@@ -0,0 +1,13 @@
+package com.zhentao.service;
+
+import com.zhentao.domain.OrderItem;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author 31810
+* @description 针对表【order_item】的数据库操作Service
+* @createDate 2025-05-10 09:55:27
+*/
+public interface OrderItemService extends IService<OrderItem> {
+
+}

+ 13 - 0
src/main/java/com/zhentao/service/ProductSkuService.java

@@ -0,0 +1,13 @@
+package com.zhentao.service;
+
+import com.zhentao.domain.ProductSku;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author 31810
+* @description 针对表【product_sku】的数据库操作Service
+* @createDate 2025-05-10 09:55:27
+*/
+public interface ProductSkuService extends IService<ProductSku> {
+
+}

+ 13 - 0
src/main/java/com/zhentao/service/UserCouponService.java

@@ -0,0 +1,13 @@
+package com.zhentao.service;
+
+import com.zhentao.domain.UserCoupon;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author 31810
+* @description 针对表【user_coupon】的数据库操作Service
+* @createDate 2025-05-10 09:55:27
+*/
+public interface UserCouponService extends IService<UserCoupon> {
+
+}

+ 18 - 0
src/main/java/com/zhentao/service/UserLoginService.java

@@ -0,0 +1,18 @@
+package com.zhentao.service;
+
+import com.zhentao.domain.UserLogin;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhentao.dto.LoginDto;
+import com.zhentao.vo.ResultVo;
+
+/**
+* @author 31810
+* @description 针对表【user_login】的数据库操作Service
+* @createDate 2025-05-10 09:55:27
+*/
+public interface UserLoginService extends IService<UserLogin> {
+
+    ResultVo register(LoginDto loginDto);
+
+    ResultVo login(LoginDto loginDto);
+}

+ 22 - 0
src/main/java/com/zhentao/service/impl/CouponServiceImpl.java

@@ -0,0 +1,22 @@
+package com.zhentao.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhentao.domain.Coupon;
+import com.zhentao.service.CouponService;
+import com.zhentao.mapper.CouponMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author 31810
+* @description 针对表【coupon】的数据库操作Service实现
+* @createDate 2025-05-10 09:55:27
+*/
+@Service
+public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon>
+    implements CouponService{
+
+}
+
+
+
+

+ 22 - 0
src/main/java/com/zhentao/service/impl/OrderInfoServiceImpl.java

@@ -0,0 +1,22 @@
+package com.zhentao.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhentao.domain.OrderInfo;
+import com.zhentao.service.OrderInfoService;
+import com.zhentao.mapper.OrderInfoMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author 31810
+* @description 针对表【order_info】的数据库操作Service实现
+* @createDate 2025-05-10 09:55:27
+*/
+@Service
+public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo>
+    implements OrderInfoService{
+
+}
+
+
+
+

+ 22 - 0
src/main/java/com/zhentao/service/impl/OrderItemServiceImpl.java

@@ -0,0 +1,22 @@
+package com.zhentao.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhentao.domain.OrderItem;
+import com.zhentao.service.OrderItemService;
+import com.zhentao.mapper.OrderItemMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author 31810
+* @description 针对表【order_item】的数据库操作Service实现
+* @createDate 2025-05-10 09:55:27
+*/
+@Service
+public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem>
+    implements OrderItemService{
+
+}
+
+
+
+

+ 22 - 0
src/main/java/com/zhentao/service/impl/ProductSkuServiceImpl.java

@@ -0,0 +1,22 @@
+package com.zhentao.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhentao.domain.ProductSku;
+import com.zhentao.service.ProductSkuService;
+import com.zhentao.mapper.ProductSkuMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author 31810
+* @description 针对表【product_sku】的数据库操作Service实现
+* @createDate 2025-05-10 09:55:27
+*/
+@Service
+public class ProductSkuServiceImpl extends ServiceImpl<ProductSkuMapper, ProductSku>
+    implements ProductSkuService{
+
+}
+
+
+
+

+ 22 - 0
src/main/java/com/zhentao/service/impl/UserCouponServiceImpl.java

@@ -0,0 +1,22 @@
+package com.zhentao.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhentao.domain.UserCoupon;
+import com.zhentao.service.UserCouponService;
+import com.zhentao.mapper.UserCouponMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author 31810
+* @description 针对表【user_coupon】的数据库操作Service实现
+* @createDate 2025-05-10 09:55:27
+*/
+@Service
+public class UserCouponServiceImpl extends ServiceImpl<UserCouponMapper, UserCoupon>
+    implements UserCouponService{
+
+}
+
+
+
+

+ 72 - 0
src/main/java/com/zhentao/service/impl/UserLoginServiceImpl.java

@@ -0,0 +1,72 @@
+package com.zhentao.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhentao.domain.UserLogin;
+import com.zhentao.dto.LoginDto;
+import com.zhentao.service.UserLoginService;
+import com.zhentao.mapper.UserLoginMapper;
+import com.zhentao.utils.AppJwtUtil;
+import com.zhentao.utils.SnowflakeIdGenerator;
+import com.zhentao.vo.ResultVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import redis.clients.jedis.Jedis;
+
+import java.util.UUID;
+
+/**
+* @author 31810
+* @description 针对表【user_login】的数据库操作Service实现
+* @createDate 2025-05-10 09:55:27
+*/
+@Service
+public class UserLoginServiceImpl extends ServiceImpl<UserLoginMapper, UserLogin>
+    implements UserLoginService{
+    @Autowired
+    private UserLoginMapper userLoginMapper;
+    @Override
+    public ResultVo register(LoginDto loginDto) {
+        UserLogin user=new UserLogin();
+        user.setId(SnowflakeIdGenerator.getSnowId());
+        if(StringUtils.isEmpty(loginDto.getUsername())){
+            return ResultVo.ERROR();
+        }
+        if(StringUtils.isEmpty(loginDto.getPassword())){
+            return ResultVo.ERROR();
+        }
+        user.setUsername(loginDto.getUsername());
+        user.setPassword(loginDto.getPassword());
+        int i = userLoginMapper.insert(user);
+        return i>0?ResultVo.OK():ResultVo.ERROR();
+    }
+
+    @Override
+    public ResultVo login(LoginDto loginDto) {
+        if(StringUtils.isEmpty(loginDto.getUsername())){
+            return ResultVo.ERROR();
+        }
+        if(StringUtils.isEmpty(loginDto.getPassword())){
+            return ResultVo.ERROR();
+        }
+        QueryWrapper<UserLogin>queryWrapper=new QueryWrapper<>();
+        queryWrapper.eq("username",loginDto.getUsername());
+        UserLogin user = userLoginMapper.selectOne(queryWrapper);
+        if(user==null){
+            return ResultVo.ERROR();
+        }
+        if(user.getPassword().equals(loginDto.getPassword())){
+            String token= AppJwtUtil.getToken(user.getId());
+            Jedis jedis=new Jedis("localhost");
+            jedis.set("token",token);
+            jedis.close();
+            return ResultVo.OK(token);
+        }
+        return ResultVo.ERROR();
+    }
+}
+
+
+
+

+ 119 - 0
src/main/java/com/zhentao/utils/AppJwtUtil.java

@@ -0,0 +1,119 @@
+package com.zhentao.utils;
+
+import io.jsonwebtoken.*;
+
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+import java.util.*;
+
+public class AppJwtUtil {
+
+    // TOKEN的有效期一天(S)
+    private static final int TOKEN_TIME_OUT = 3_600;
+    // 加密KEY
+    private static final String TOKEN_ENCRY_KEY = "MDk4ZjZiY2Q0NjIxZDM3M2NhZGU0ZTgzMjYyN2I0ZjY";
+    // 最小刷新间隔(S)
+    private static final int REFRESH_TIME = 300;
+
+    // 生产ID
+    public static String getToken(Long id){
+        Map<String, Object> claimMaps = new HashMap<>();
+        claimMaps.put("id",id);
+        long currentTime = System.currentTimeMillis();
+        return Jwts.builder()
+                .setId(UUID.randomUUID().toString())
+                .setIssuedAt(new Date(currentTime))  //签发时间
+                .setSubject("system")  //说明
+                .setIssuer("") //签发者信息
+                .setAudience("app")  //接收用户
+                .compressWith(CompressionCodecs.GZIP)  //数据压缩方式
+                .signWith(SignatureAlgorithm.HS512, generalKey()) //加密方式
+                .setExpiration(new Date(currentTime + TOKEN_TIME_OUT * 1000))  //过期时间戳
+                .addClaims(claimMaps) //cla信息
+                .compact();
+    }
+
+    /**
+     * 获取token中的claims信息
+     *
+     * @param token
+     * @return
+     */
+    private static Jws<Claims> getJws(String token) {
+            return Jwts.parser()
+                    .setSigningKey(generalKey())
+                    .parseClaimsJws(token);
+    }
+
+    /**
+     * 获取payload body信息
+     *
+     * @param token
+     * @return
+     */
+    public static Claims getClaimsBody(String token) {
+        try {
+            return getJws(token).getBody();
+        }catch (ExpiredJwtException e){
+            return null;
+        }
+    }
+
+    /**
+     * 获取hearder body信息
+     *
+     * @param token
+     * @return
+     */
+    public static JwsHeader getHeaderBody(String token) {
+        return getJws(token).getHeader();
+    }
+
+    /**
+     * 是否过期
+     *
+     * @param claims
+     * @return -1:有效,0:有效,1:过期,2:过期
+     */
+    public static int verifyToken(Claims claims) {
+        if(claims==null){
+            return 1;
+        }
+        try {
+            claims.getExpiration()
+                    .before(new Date());
+            // 需要自动刷新TOKEN
+            if((claims.getExpiration().getTime()-System.currentTimeMillis())>REFRESH_TIME*1000){
+                return -1;
+            }else {
+                return 0;
+            }
+        } catch (ExpiredJwtException ex) {
+            return 1;
+        }catch (Exception e){
+            return 2;
+        }
+    }
+
+    /**
+     * 由字符串生成加密key
+     *
+     * @return
+     */
+    public static SecretKey generalKey() {
+        byte[] encodedKey = Base64.getEncoder().encode(TOKEN_ENCRY_KEY.getBytes());
+        SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
+        return key;
+    }
+
+    public static void main(String[] args) {
+       /* Map map = new HashMap();
+        map.put("id","11");*/
+        System.out.println(AppJwtUtil.getToken(1102L));
+        Jws<Claims> jws = AppJwtUtil.getJws("eyJhbGciOiJIUzUxMiIsInppcCI6IkdaSVAifQ.H4sIAAAAAAAAADWLQQqEMAwA_5KzhURNt_qb1KZYQSi0wi6Lf9942NsMw3zh6AVW2DYmDGl2WabkZgreCaM6VXzhFBfJMcMARTqsxIG9Z888QLui3e3Tup5Pb81013KKmVzJTGo11nf9n8v4nMUaEY73DzTabjmDAAAA.4SuqQ42IGqCgBai6qd4RaVpVxTlZIWC826QA9kLvt9d-yVUw82gU47HDaSfOzgAcloZedYNNpUcd18Ne8vvjQA");
+        Claims claims = jws.getBody();
+        System.out.println(claims.get("id"));
+
+    }
+
+}

+ 136 - 0
src/main/java/com/zhentao/utils/SnowflakeIdGenerator.java

@@ -0,0 +1,136 @@
+package com.zhentao.utils;
+
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+
+public class SnowflakeIdGenerator {
+    // 基础配置(Java 8+)
+    private static final long EPOCH = 1288834974657L; // 2010-11-04 00:00:00 UTC
+    private static final int DATACENTER_ID_BITS = 5;
+    private static final int WORKER_ID_BITS = 5;
+    private static final int SEQUENCE_BITS = 12;
+    // 位运算掩码
+    private static final long DATACENTER_ID_MASK = (1L << DATACENTER_ID_BITS) - 1;
+    private static final long WORKER_ID_MASK = (1L << WORKER_ID_BITS) - 1;
+    private static final long SEQUENCE_MASK = (1L << SEQUENCE_BITS) - 1;
+
+    // 位移偏移量
+    private static final int WORKER_ID_SHIFT = SEQUENCE_BITS;
+    private static final int DATACENTER_ID_SHIFT = SEQUENCE_BITS + WORKER_ID_BITS;
+    private static final int TIMESTAMP_SHIFT = SEQUENCE_BITS + WORKER_ID_BITS + DATACENTER_ID_BITS;
+
+    private final long datacenterId;
+    private final long workerId;
+    private long sequence = 0L;
+    private long lastTimestamp = -1L;
+
+    private final Object lock = new Object();
+
+    public SnowflakeIdGenerator(long datacenterId, long workerId) {
+        if ((datacenterId & DATACENTER_ID_MASK) != datacenterId) {
+            throw new IllegalArgumentException("DataCenter ID 必须在 0-31 之间");
+        }
+        if ((workerId & WORKER_ID_MASK) != workerId) {
+            throw new IllegalArgumentException("Worker ID 必须在 0-31 之间");
+        }
+        this.datacenterId = datacenterId;
+        this.workerId = workerId;
+    }
+
+    public synchronized long nextId() {
+        long currentTimestamp = timeGen();
+
+        if (currentTimestamp < lastTimestamp) {
+            throw new IllegalStateException(
+                    String.format("时钟回退 %d 毫秒,禁止生成ID(上次: %d,当前: %d)",
+                            lastTimestamp - currentTimestamp, lastTimestamp, currentTimestamp));
+        }
+
+        if (currentTimestamp == lastTimestamp) {
+            sequence = (sequence + 1) & SEQUENCE_MASK;
+            if (sequence == 0) {
+                currentTimestamp = waitNextMillis(lastTimestamp);
+            }
+        } else {
+            sequence = 0;
+        }
+
+        lastTimestamp = currentTimestamp;
+
+        return ((currentTimestamp - EPOCH) << TIMESTAMP_SHIFT) |
+                (datacenterId << DATACENTER_ID_SHIFT) |
+                (workerId << WORKER_ID_SHIFT) |
+                sequence;
+    }
+
+    private long waitNextMillis(long lastTimestamp) {
+        long timestamp = timeGen();
+        while (timestamp <= lastTimestamp) {
+            timestamp = System.currentTimeMillis(); // 改用更可靠的时间源
+        }
+        return timestamp;
+    }
+
+    private long timeGen() {
+        return System.currentTimeMillis();
+    }
+
+    // 添加 parseId 方法
+    public static SnowflakeMeta parseId(long snowflakeId) {
+        long sequence = snowflakeId & SEQUENCE_MASK;
+        long workerId = (snowflakeId >> WORKER_ID_SHIFT) & WORKER_ID_MASK;
+        long datacenterId = (snowflakeId >> DATACENTER_ID_SHIFT) & DATACENTER_ID_MASK;
+        long timestamp = (snowflakeId >> TIMESTAMP_SHIFT) + EPOCH;
+
+        return new SnowflakeMeta(
+                timestamp,
+                datacenterId,
+                workerId,
+                sequence,
+                LocalDateTime.ofEpochSecond(timestamp / 1000, 0, ZoneOffset.ofHours(8))
+        );
+    }
+    public static Long getSnowId(){
+        SnowflakeIdGenerator generator=new SnowflakeIdGenerator(1,1);
+        Long id=generator.nextId();
+        SnowflakeMeta meta=SnowflakeIdGenerator.parseId(id);
+        return id;
+    }
+    // ---------------- 修复:添加完整的getter方法 ----------------
+    public static class SnowflakeMeta {
+        private final long timestamp;
+        private final long datacenterId;
+        private final long workerId;
+        private final long sequence;
+        private final LocalDateTime dateTime;
+
+        public SnowflakeMeta(long timestamp, long datacenterId, long workerId, long sequence, LocalDateTime dateTime) {
+            this.timestamp = timestamp;
+            this.datacenterId = datacenterId;
+            this.workerId = workerId;
+            this.sequence = sequence;
+            this.dateTime = dateTime;
+        }
+
+        // 显式定义getter(修复爆红)
+        public long getTimestamp() {
+            return timestamp;
+        }
+
+        public long getDatacenterId() {
+            return datacenterId;
+        }
+
+        public long getWorkerId() {
+            return workerId;
+        }
+
+        public long getSequence() {
+            return sequence;
+        }
+
+        public LocalDateTime getDateTime() {
+            return dateTime;
+        }
+    }
+}

+ 30 - 0
src/main/java/com/zhentao/vo/ResultVo.java

@@ -0,0 +1,30 @@
+package com.zhentao.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ResultVo {
+    private Integer code;
+    private String message;
+    private Object data;
+    public static ResultVo OK(){
+
+        return new ResultVo();
+    }
+    public static ResultVo OK(Object data){
+
+        return new ResultVo();
+    }
+    public static ResultVo ERROR(){
+
+        return new ResultVo();
+    }
+    public static ResultVo ERROR(Object data){
+
+        return new ResultVo();
+    }
+}

+ 11 - 0
src/main/resources/application.yml

@@ -0,0 +1,11 @@
+server:
+  port: 9527
+spring:
+  datasource:
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    url: jdbc:mysql:///kaoshi?serverTimezone=UTC
+    username: root
+    password: hch030923
+mybatis-plus:
+  configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

+ 16 - 0
src/main/resources/mapper/CouponMapper.xml

@@ -0,0 +1,16 @@
+<?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.zhentao.mapper.CouponMapper">
+
+    <resultMap id="BaseResultMap" type="com.zhentao.domain.Coupon">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="type" column="type" jdbcType="TINYINT"/>
+            <result property="discount" column="discount" jdbcType="DECIMAL"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,type,discount
+    </sql>
+</mapper>

+ 22 - 0
src/main/resources/mapper/OrderInfoMapper.xml

@@ -0,0 +1,22 @@
+<?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.zhentao.mapper.OrderInfoMapper">
+
+    <resultMap id="BaseResultMap" type="com.zhentao.domain.OrderInfo">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="userId" column="user_id" jdbcType="BIGINT"/>
+            <result property="amount" column="amount" jdbcType="DECIMAL"/>
+            <result property="payAmount" column="pay_amount" jdbcType="DECIMAL"/>
+            <result property="couponId" column="coupon_id" jdbcType="BIGINT"/>
+            <result property="discount" column="discount" jdbcType="DECIMAL"/>
+            <result property="status" column="status" jdbcType="TINYINT"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,user_id,amount,
+        pay_amount,coupon_id,discount,
+        status
+    </sql>
+</mapper>

+ 22 - 0
src/main/resources/mapper/OrderItemMapper.xml

@@ -0,0 +1,22 @@
+<?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.zhentao.mapper.OrderItemMapper">
+
+    <resultMap id="BaseResultMap" type="com.zhentao.domain.OrderItem">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="orderId" column="order_id" jdbcType="BIGINT"/>
+            <result property="userId" column="user_id" jdbcType="BIGINT"/>
+            <result property="num" column="num" jdbcType="INTEGER"/>
+            <result property="productPrice" column="product_price" jdbcType="DECIMAL"/>
+            <result property="totalPrice" column="total_price" jdbcType="DECIMAL"/>
+            <result property="status" column="status" jdbcType="TINYINT"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,order_id,user_id,
+        num,product_price,total_price,
+        status
+    </sql>
+</mapper>

+ 18 - 0
src/main/resources/mapper/ProductSkuMapper.xml

@@ -0,0 +1,18 @@
+<?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.zhentao.mapper.ProductSkuMapper">
+
+    <resultMap id="BaseResultMap" type="com.zhentao.domain.ProductSku">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="price" column="price" jdbcType="DECIMAL"/>
+            <result property="desc" column="desc" jdbcType="VARCHAR"/>
+            <result property="image" column="image" jdbcType="VARCHAR"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,price,desc,
+        image
+    </sql>
+</mapper>

+ 16 - 0
src/main/resources/mapper/UserCouponMapper.xml

@@ -0,0 +1,16 @@
+<?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.zhentao.mapper.UserCouponMapper">
+
+    <resultMap id="BaseResultMap" type="com.zhentao.domain.UserCoupon">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="userId" column="user_id" jdbcType="BIGINT"/>
+            <result property="couponId" column="coupon_id" jdbcType="BIGINT"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,user_id,coupon_id
+    </sql>
+</mapper>

+ 24 - 0
src/main/resources/mapper/UserLoginMapper.xml

@@ -0,0 +1,24 @@
+<?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.zhentao.mapper.UserLoginMapper">
+
+    <resultMap id="BaseResultMap" type="com.zhentao.domain.UserLogin">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="openId" column="open_id" jdbcType="VARCHAR"/>
+            <result property="unionId" column="union_id" jdbcType="VARCHAR"/>
+            <result property="sessionKey" column="session_key" jdbcType="VARCHAR"/>
+            <result property="username" column="username" jdbcType="VARCHAR"/>
+            <result property="password" column="password" jdbcType="VARCHAR"/>
+            <result property="email" column="email" jdbcType="VARCHAR"/>
+            <result property="isDel" column="is_del" jdbcType="TINYINT"/>
+            <result property="money" column="money" jdbcType="DECIMAL"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,open_id,union_id,
+        session_key,username,password,
+        email,is_del,money
+    </sql>
+</mapper>

+ 13 - 0
src/test/java/com/zhentao/HechenghangsaleApplicationTests.java

@@ -0,0 +1,13 @@
+package com.zhentao;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class HechenghangsaleApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}