git 1 tydzień temu
commit
0be2852e50
43 zmienionych plików z 1263 dodań i 0 usunięć
  1. 33 0
      .gitignore
  2. 105 0
      pom.xml
  3. 16 0
      src/main/java/com/zhentao/ZhangzhenSaleApplication.java
  4. 20 0
      src/main/java/com/zhentao/controller/CouponController.java
  5. 38 0
      src/main/java/com/zhentao/controller/OrderInfoController.java
  6. 20 0
      src/main/java/com/zhentao/controller/SkuController.java
  7. 48 0
      src/main/java/com/zhentao/controller/UserController.java
  8. 13 0
      src/main/java/com/zhentao/dto/OrderInfoDto.java
  9. 9 0
      src/main/java/com/zhentao/dto/UserDto.java
  10. 18 0
      src/main/java/com/zhentao/mapper/CouponMapper.java
  11. 18 0
      src/main/java/com/zhentao/mapper/OrderInfoMapper.java
  12. 18 0
      src/main/java/com/zhentao/mapper/OrderItemMapper.java
  13. 18 0
      src/main/java/com/zhentao/mapper/SkuMapper.java
  14. 18 0
      src/main/java/com/zhentao/mapper/UserCouponMapper.java
  15. 18 0
      src/main/java/com/zhentao/mapper/UserLoginMapper.java
  16. 36 0
      src/main/java/com/zhentao/pojo/Coupon.java
  17. 56 0
      src/main/java/com/zhentao/pojo/OrderInfo.java
  18. 56 0
      src/main/java/com/zhentao/pojo/OrderItem.java
  19. 41 0
      src/main/java/com/zhentao/pojo/Sku.java
  20. 29 0
      src/main/java/com/zhentao/pojo/UserCoupon.java
  21. 50 0
      src/main/java/com/zhentao/pojo/UserLogin.java
  22. 14 0
      src/main/java/com/zhentao/service/CouponService.java
  23. 13 0
      src/main/java/com/zhentao/service/OrderInfoService.java
  24. 13 0
      src/main/java/com/zhentao/service/OrderItemService.java
  25. 14 0
      src/main/java/com/zhentao/service/SkuService.java
  26. 13 0
      src/main/java/com/zhentao/service/UserCouponService.java
  27. 13 0
      src/main/java/com/zhentao/service/UserLoginService.java
  28. 31 0
      src/main/java/com/zhentao/service/impl/CouponServiceImpl.java
  29. 22 0
      src/main/java/com/zhentao/service/impl/OrderInfoServiceImpl.java
  30. 22 0
      src/main/java/com/zhentao/service/impl/OrderItemServiceImpl.java
  31. 30 0
      src/main/java/com/zhentao/service/impl/SkuServiceImpl.java
  32. 22 0
      src/main/java/com/zhentao/service/impl/UserCouponServiceImpl.java
  33. 22 0
      src/main/java/com/zhentao/service/impl/UserLoginServiceImpl.java
  34. 125 0
      src/main/java/com/zhentao/tool/AppJwtUtil.java
  35. 93 0
      src/main/java/com/zhentao/tool/TokenUtils.java
  36. 12 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/SkuMapper.xml
  41. 15 0
      src/main/resources/mapper/UserCouponMapper.xml
  42. 20 0
      src/main/resources/mapper/UserLoginMapper.xml
  43. 13 0
      src/test/java/com/zhentao/ZhangzhenSaleApplicationTests.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/

+ 105 - 0
pom.xml

@@ -0,0 +1,105 @@
+<?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>zhangzhen-sale</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>zhangzhen-sale</name>
+    <description>zhangzhen-sale</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>io.jsonwebtoken</groupId>
+            <artifactId>jjwt</artifactId>
+            <version>0.9.1</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.8.11</version> <!-- 确保版本号是正确的 -->
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.5.4</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </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.ZhangzhenSaleApplication</mainClass>
+                    <skip>true</skip>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>repackage</id>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 16 - 0
src/main/java/com/zhentao/ZhangzhenSaleApplication.java

@@ -0,0 +1,16 @@
+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 ZhangzhenSaleApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(ZhangzhenSaleApplication.class, args);
+        System.err.println("sssssssssssss");
+    }
+
+}

+ 20 - 0
src/main/java/com/zhentao/controller/CouponController.java

@@ -0,0 +1,20 @@
+package com.zhentao.controller;
+
+import com.zhentao.pojo.Coupon;
+import com.zhentao.service.CouponService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("coupon")
+public class CouponController {
+    @Autowired
+    CouponService couponService;
+    @RequestMapping("addCoupon")
+    public String addCoupon(@RequestBody Coupon coupon){
+        couponService.addCoupon(coupon);
+        return "添加成功";
+    }
+}

+ 38 - 0
src/main/java/com/zhentao/controller/OrderInfoController.java

@@ -0,0 +1,38 @@
+package com.zhentao.controller;
+
+
+import com.zhentao.dto.OrderInfoDto;
+import com.zhentao.pojo.OrderInfo;
+
+import com.zhentao.pojo.OrderItem;
+import com.zhentao.pojo.Sku;
+import com.zhentao.service.OrderInfoService;
+import com.zhentao.service.OrderItemService;
+import com.zhentao.service.SkuService;
+import org.springframework.beans.factory.annotation.Autowired;
+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;
+
+
+@RestController
+@RequestMapping("oderInfo")
+public class OrderInfoController {
+    @Autowired
+    SkuService skuService;
+    @Autowired
+    OrderInfoService orderInfoService;
+    @RequestMapping("addOderInfo")
+    public void addOderInfo(@RequestBody OrderInfo orderInfo){
+        OrderInfo orderInfo1 = new OrderInfo();
+        orderInfo1.setUserId(orderInfo.getUserId());
+        orderInfo1.setAllPrice(orderInfo.getAllPrice());
+        orderInfo1.setCouponId(orderInfo.getCouponId());
+        orderInfo1.setCouponPrice(orderInfo.getCouponPrice());
+        orderInfo1.setYesMoney(orderInfo.getYesMoney());
+        orderInfoService.save(orderInfo1);
+    }
+}

+ 20 - 0
src/main/java/com/zhentao/controller/SkuController.java

@@ -0,0 +1,20 @@
+package com.zhentao.controller;
+
+import com.zhentao.pojo.Sku;
+import com.zhentao.service.SkuService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("sku")
+public class SkuController {
+    @Autowired
+    SkuService skuService;
+    @RequestMapping("addSku")
+    public String addSku(@RequestBody Sku sku){
+        skuService.addSku(sku);
+        return "添加成功";
+    }
+}

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

@@ -0,0 +1,48 @@
+package com.zhentao.controller;
+
+import cn.hutool.core.lang.Snowflake;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.zhentao.dto.UserDto;
+import com.zhentao.pojo.UserLogin;
+import com.zhentao.service.UserLoginService;
+import com.zhentao.tool.AppJwtUtil;
+import com.zhentao.tool.TokenUtils;
+import io.jsonwebtoken.Jwt;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.DigestUtils;
+import org.springframework.util.RouteMatcher;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Random;
+
+@RestController
+@RequestMapping("user")
+public class UserController {
+    @Autowired
+    UserLoginService userService;
+    @RequestMapping("login")
+    public Object login(@RequestBody UserDto userDto){
+        QueryWrapper<UserLogin> queryWrapper=new QueryWrapper<>();
+        queryWrapper.eq("username",userDto.getUsername());
+        UserLogin one = userService.getOne(queryWrapper);
+        String token = AppJwtUtil.getToken(one.getId().longValue());
+        Map<String,String> map=new HashMap<>();
+        map.put("token",token);
+        map.put("username", one.getUsername());
+        return map;
+    }
+    @RequestMapping("rig")
+    public void rig(@RequestBody UserDto userDto){
+        UserLogin userLogin = new UserLogin();
+        userLogin.setUsername(userDto.getUsername());
+        String s = DigestUtils.md5DigestAsHex((userDto.getPassword()).getBytes());
+        userLogin.setPassword(s);
+        userService.save(userLogin);
+    }
+}

+ 13 - 0
src/main/java/com/zhentao/dto/OrderInfoDto.java

@@ -0,0 +1,13 @@
+package com.zhentao.dto;
+
+import com.zhentao.pojo.OrderItem;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class OrderInfoDto {
+    private List<OrderItem> orderItemList;
+    private String token;
+    private Integer couponId;
+}

+ 9 - 0
src/main/java/com/zhentao/dto/UserDto.java

@@ -0,0 +1,9 @@
+package com.zhentao.dto;
+
+import lombok.Data;
+
+@Data
+public class UserDto {
+    private String username;
+    private String password;
+}

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

@@ -0,0 +1,18 @@
+package com.zhentao.mapper;
+
+import com.zhentao.pojo.Coupon;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author Administrator
+* @description 针对表【coupon】的数据库操作Mapper
+* @createDate 2025-05-10 09:47:31
+* @Entity com.zhentao.pojo.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.pojo.OrderInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author Administrator
+* @description 针对表【order_info】的数据库操作Mapper
+* @createDate 2025-05-10 09:47:31
+* @Entity com.zhentao.pojo.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.pojo.OrderItem;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author Administrator
+* @description 针对表【order_item】的数据库操作Mapper
+* @createDate 2025-05-10 09:47:31
+* @Entity com.zhentao.pojo.OrderItem
+*/
+public interface OrderItemMapper extends BaseMapper<OrderItem> {
+
+}
+
+
+
+

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

@@ -0,0 +1,18 @@
+package com.zhentao.mapper;
+
+import com.zhentao.pojo.Sku;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author Administrator
+* @description 针对表【sku】的数据库操作Mapper
+* @createDate 2025-05-10 09:47:31
+* @Entity com.zhentao.pojo.Sku
+*/
+public interface SkuMapper extends BaseMapper<Sku> {
+
+}
+
+
+
+

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

@@ -0,0 +1,18 @@
+package com.zhentao.mapper;
+
+import com.zhentao.pojo.UserCoupon;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author Administrator
+* @description 针对表【user_coupon】的数据库操作Mapper
+* @createDate 2025-05-10 09:47:31
+* @Entity com.zhentao.pojo.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.pojo.UserLogin;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author Administrator
+* @description 针对表【user_login】的数据库操作Mapper
+* @createDate 2025-05-10 09:47:31
+* @Entity com.zhentao.pojo.UserLogin
+*/
+public interface UserLoginMapper extends BaseMapper<UserLogin> {
+
+}
+
+
+
+

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

@@ -0,0 +1,36 @@
+package com.zhentao.pojo;
+
+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 {
+    /**
+     * 
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 
+     */
+    private String type;
+
+    /**
+     * 
+     */
+    private BigDecimal value;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

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

@@ -0,0 +1,56 @@
+package com.zhentao.pojo;
+
+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(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 用户ID
+     */
+    private Integer userId;
+
+    /**
+     * 总价
+     */
+    private BigDecimal allPrice;
+
+    /**
+     * 实付金额
+     */
+    private BigDecimal yesMoney;
+
+    /**
+     * 优惠券ID
+     */
+    private Integer couponId;
+
+    /**
+     * 优惠价
+     */
+    private BigDecimal couponPrice;
+
+    /**
+     * 状态
+     */
+    private String status;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

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

@@ -0,0 +1,56 @@
+package com.zhentao.pojo;
+
+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(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 用户ID
+     */
+    private Integer userId;
+
+    /**
+     * 商品ID
+     */
+    private Integer skuId;
+
+    /**
+     * 数量
+     */
+    private Integer num;
+
+    /**
+     * 单价
+     */
+    private BigDecimal price;
+
+    /**
+     * 小合计
+     */
+    private BigDecimal count;
+
+    /**
+     * 状态
+     */
+    private String status;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 41 - 0
src/main/java/com/zhentao/pojo/Sku.java

@@ -0,0 +1,41 @@
+package com.zhentao.pojo;
+
+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 sku
+ */
+@TableName(value ="sku")
+@Data
+public class Sku implements Serializable {
+    /**
+     * 商品ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 商品名称
+     */
+    private String productName;
+
+    /**
+     * 单价
+     */
+    private BigDecimal price;
+
+    /**
+     * 库存
+     */
+    private Integer stock;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 29 - 0
src/main/java/com/zhentao/pojo/UserCoupon.java

@@ -0,0 +1,29 @@
+package com.zhentao.pojo;
+
+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 {
+    /**
+     * 
+     */
+    private Integer userId;
+
+    /**
+     * 
+     */
+    private Integer couponId;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 50 - 0
src/main/java/com/zhentao/pojo/UserLogin.java

@@ -0,0 +1,50 @@
+package com.zhentao.pojo;
+
+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_login
+ */
+@TableName(value ="user_login")
+@Data
+public class UserLogin implements Serializable {
+    /**
+     * 用户ID
+     */
+    @TableId
+    private Integer id;
+
+    /**
+     * 用户名
+     */
+    private String username;
+
+    /**
+     * 密码
+     */
+    private String password;
+
+    /**
+     * 
+     */
+    private Integer openid;
+
+    /**
+     * 
+     */
+    private Integer unionid;
+
+    /**
+     * 
+     */
+    private String sesseionkey;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

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

@@ -0,0 +1,14 @@
+package com.zhentao.service;
+
+import com.zhentao.pojo.Coupon;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author Administrator
+* @description 针对表【coupon】的数据库操作Service
+* @createDate 2025-05-10 09:47:31
+*/
+public interface CouponService extends IService<Coupon> {
+
+    void addCoupon(Coupon coupon);
+}

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

@@ -0,0 +1,13 @@
+package com.zhentao.service;
+
+import com.zhentao.pojo.OrderInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author Administrator
+* @description 针对表【order_info】的数据库操作Service
+* @createDate 2025-05-10 09:47:31
+*/
+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.pojo.OrderItem;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author Administrator
+* @description 针对表【order_item】的数据库操作Service
+* @createDate 2025-05-10 09:47:31
+*/
+public interface OrderItemService extends IService<OrderItem> {
+
+}

+ 14 - 0
src/main/java/com/zhentao/service/SkuService.java

@@ -0,0 +1,14 @@
+package com.zhentao.service;
+
+import com.zhentao.pojo.Sku;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author Administrator
+* @description 针对表【sku】的数据库操作Service
+* @createDate 2025-05-10 09:47:31
+*/
+public interface SkuService extends IService<Sku> {
+
+    void addSku(Sku sku);
+}

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

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

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

@@ -0,0 +1,13 @@
+package com.zhentao.service;
+
+import com.zhentao.pojo.UserLogin;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author Administrator
+* @description 针对表【user_login】的数据库操作Service
+* @createDate 2025-05-10 09:47:31
+*/
+public interface UserLoginService extends IService<UserLogin> {
+
+}

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

@@ -0,0 +1,31 @@
+package com.zhentao.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhentao.pojo.Coupon;
+import com.zhentao.service.CouponService;
+import com.zhentao.mapper.CouponMapper;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+
+/**
+* @author Administrator
+* @description 针对表【coupon】的数据库操作Service实现
+* @createDate 2025-05-10 09:47:31
+*/
+@Service
+public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon>
+    implements CouponService{
+
+    @Override
+    public void addCoupon(Coupon coupon) {
+        Coupon coupon1 = new Coupon();
+        coupon1.setType(coupon.getType());
+        coupon1.setValue(coupon.getValue());
+        this.save(coupon1);
+    }
+}
+
+
+
+

+ 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.pojo.OrderInfo;
+import com.zhentao.service.OrderInfoService;
+import com.zhentao.mapper.OrderInfoMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author Administrator
+* @description 针对表【order_info】的数据库操作Service实现
+* @createDate 2025-05-10 09:47:31
+*/
+@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.pojo.OrderItem;
+import com.zhentao.service.OrderItemService;
+import com.zhentao.mapper.OrderItemMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author Administrator
+* @description 针对表【order_item】的数据库操作Service实现
+* @createDate 2025-05-10 09:47:31
+*/
+@Service
+public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem>
+    implements OrderItemService{
+
+}
+
+
+
+

+ 30 - 0
src/main/java/com/zhentao/service/impl/SkuServiceImpl.java

@@ -0,0 +1,30 @@
+package com.zhentao.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhentao.pojo.Sku;
+import com.zhentao.service.SkuService;
+import com.zhentao.mapper.SkuMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author Administrator
+* @description 针对表【sku】的数据库操作Service实现
+* @createDate 2025-05-10 09:47:31
+*/
+@Service
+public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku>
+    implements SkuService{
+    //添加商品
+    @Override
+    public void addSku(Sku sku) {
+        Sku sku1 = new Sku();
+        sku1.setProductName(sku.getProductName());
+        sku1.setPrice(sku.getPrice());
+        sku1.setStock(sku.getStock());
+        this.save(sku1);
+    }
+}
+
+
+
+

+ 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.pojo.UserCoupon;
+import com.zhentao.service.UserCouponService;
+import com.zhentao.mapper.UserCouponMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author Administrator
+* @description 针对表【user_coupon】的数据库操作Service实现
+* @createDate 2025-05-10 09:47:31
+*/
+@Service
+public class UserCouponServiceImpl extends ServiceImpl<UserCouponMapper, UserCoupon>
+    implements UserCouponService{
+
+}
+
+
+
+

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

@@ -0,0 +1,22 @@
+package com.zhentao.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhentao.pojo.UserLogin;
+import com.zhentao.service.UserLoginService;
+import com.zhentao.mapper.UserLoginMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author Administrator
+* @description 针对表【user_login】的数据库操作Service实现
+* @createDate 2025-05-10 09:47:31
+*/
+@Service
+public class UserLoginServiceImpl extends ServiceImpl<UserLoginMapper, UserLogin>
+    implements UserLoginService{
+
+}
+
+
+
+

+ 125 - 0
src/main/java/com/zhentao/tool/AppJwtUtil.java

@@ -0,0 +1,125 @@
+package com.zhentao.tool;
+
+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("heima") //签发者信息
+                .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.H4sIAAAAAAAAAC2L0QqDMAwA_yXPFkw6a-LfxDawDoRCK2yM_bsR9nbHcV94jQobRGHKO-UwG1F4mEkQ1hJy4ZjKWjRyggmqDtgwIQuvssgE_dz97p8-7Lh7765Pq4e66VnctDVne7f_KbjcZ_WGONPvAsM25luDAAAA._HLSpxHpSl4KZbYtSx1xnyeaRpsJTQ5xz6wMfFehqUr5etW6pOhCuP4EdrhSBefJZ5evmfYcUAj_dbHkLVdxSQ");
+        Claims claims = jws.getBody();
+        int i = AppJwtUtil.verifyToken(claims);
+        System.out.println(i);
+        System.out.println(claims.get("id"));
+        /*Date date = new Date(20000000000000L);
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        String format = sdf.format(date);
+        System.out.println(format);*/
+
+    }
+
+}

+ 93 - 0
src/main/java/com/zhentao/tool/TokenUtils.java

@@ -0,0 +1,93 @@
+package com.zhentao.tool;
+
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+public class TokenUtils {
+
+    // 密钥,生产环境应该从配置文件中读取
+    private static final String SECRET_KEY = "your-secret-key-here";
+
+    // Token有效期(毫秒),这里设置为24小时
+    private static final long EXPIRATION_TIME = 24 * 60 * 60 * 1000;
+
+    /**
+     * 生成JWT Token
+     * @param userId 用户ID
+     * @return JWT Token
+     */
+    public static String generateToken(String userId) {
+        Map<String, Object> claims = new HashMap<>();
+        claims.put("userId", userId);
+
+        return Jwts.builder()
+                .setClaims(claims)
+                .setSubject(userId)
+                .setIssuedAt(new Date(System.currentTimeMillis()))
+                .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME)) // 修正此处
+                .signWith(SignatureAlgorithm.HS512, SECRET_KEY)
+                .compact();
+    }
+    /**
+     * 从Token中获取用户ID
+     * @param token JWT Token
+     * @return 用户ID
+     */
+    public static String getUserIdFromToken(String token) {
+        try {
+            Claims claims = Jwts.parser()
+                    .setSigningKey(SECRET_KEY)
+                    .parseClaimsJws(token)
+                    .getBody();
+
+            return claims.get("userId", String.class);
+        } catch (Exception e) {
+            // 处理Token解析异常
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * 验证Token是否有效
+     * @param token JWT Token
+     * @return 是否有效
+     */
+    public static boolean validateToken(String token) {
+        try {
+            Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token);
+            return true;
+        } catch (Exception e) {
+            // 处理Token验证异常
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 从Token中获取所有Claims
+     * @param token JWT Token
+     * @return Claims
+     */
+    private static Claims getAllClaimsFromToken(String token) {
+        return Jwts.parser()
+                .setSigningKey(SECRET_KEY)
+                .parseClaimsJws(token)
+                .getBody();
+    }
+
+    /**
+     * 检查Token是否已过期
+     * @param token JWT Token
+     * @return 是否过期
+     */
+    private static boolean isTokenExpired(String token) {
+        Date expiration = getAllClaimsFromToken(token).getExpiration();
+        return expiration.before(new Date());
+    }
+
+}

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

@@ -0,0 +1,12 @@
+server:
+  port: 9600
+spring:
+  datasource:
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    username: root
+    password: root
+    url: jdbc:mysql://localhost:3306/week1ks?useSSL=false&serverTimezone=UTC
+  redis:
+    host: localhost
+    port: 6379
+    database: 0

+ 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.pojo.Coupon">
+            <id property="id" column="id" jdbcType="INTEGER"/>
+            <result property="type" column="type" jdbcType="VARCHAR"/>
+            <result property="value" column="value" jdbcType="DECIMAL"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,type,value
+    </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.pojo.OrderInfo">
+            <id property="id" column="id" jdbcType="INTEGER"/>
+            <result property="userId" column="user_id" jdbcType="INTEGER"/>
+            <result property="allPrice" column="all_price" jdbcType="DECIMAL"/>
+            <result property="yesMoney" column="yes_money" jdbcType="DECIMAL"/>
+            <result property="couponId" column="coupon_id" jdbcType="INTEGER"/>
+            <result property="couponPrice" column="coupon_price" jdbcType="DECIMAL"/>
+            <result property="status" column="status" jdbcType="VARCHAR"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,user_id,all_price,
+        yes_money,coupon_id,coupon_price,
+        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.pojo.OrderItem">
+            <id property="id" column="id" jdbcType="INTEGER"/>
+            <result property="userId" column="user_id" jdbcType="INTEGER"/>
+            <result property="skuId" column="sku_id" jdbcType="INTEGER"/>
+            <result property="num" column="num" jdbcType="INTEGER"/>
+            <result property="price" column="price" jdbcType="DECIMAL"/>
+            <result property="count" column="count" jdbcType="DECIMAL"/>
+            <result property="status" column="status" jdbcType="VARCHAR"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,user_id,sku_id,
+        num,price,count,
+        status
+    </sql>
+</mapper>

+ 18 - 0
src/main/resources/mapper/SkuMapper.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.SkuMapper">
+
+    <resultMap id="BaseResultMap" type="com.zhentao.pojo.Sku">
+            <id property="id" column="id" jdbcType="INTEGER"/>
+            <result property="productName" column="product_name" jdbcType="VARCHAR"/>
+            <result property="price" column="price" jdbcType="DECIMAL"/>
+            <result property="stock" column="stock" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,product_name,price,
+        stock
+    </sql>
+</mapper>

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

@@ -0,0 +1,15 @@
+<?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.pojo.UserCoupon">
+            <result property="userId" column="user_id" jdbcType="INTEGER"/>
+            <result property="couponId" column="coupon_id" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        user_id,coupon_id
+    </sql>
+</mapper>

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

@@ -0,0 +1,20 @@
+<?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.pojo.UserLogin">
+            <id property="id" column="id" jdbcType="INTEGER"/>
+            <result property="username" column="username" jdbcType="VARCHAR"/>
+            <result property="password" column="password" jdbcType="VARCHAR"/>
+            <result property="openid" column="openid" jdbcType="INTEGER"/>
+            <result property="unionid" column="unionid" jdbcType="INTEGER"/>
+            <result property="sesseionkey" column="sesseionkey" jdbcType="VARCHAR"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,username,password,
+        openid,unionid,sesseionkey
+    </sql>
+</mapper>

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

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