zhentao 1 month ago
commit
6da991b97e
35 changed files with 1029 additions and 0 deletions
  1. 33 0
      .gitignore
  2. 104 0
      pom.xml
  3. 15 0
      src/main/java/com/zhentao/LianxiDiyiApplication.java
  4. 18 0
      src/main/java/com/zhentao/controller/OrderMasterController.java
  5. 45 0
      src/main/java/com/zhentao/controller/UserController.java
  6. 35 0
      src/main/java/com/zhentao/domain/Coupon.java
  7. 61 0
      src/main/java/com/zhentao/domain/OrderDetail.java
  8. 50 0
      src/main/java/com/zhentao/domain/OrderMaster.java
  9. 45 0
      src/main/java/com/zhentao/domain/ProductSku.java
  10. 34 0
      src/main/java/com/zhentao/domain/User.java
  11. 12 0
      src/main/java/com/zhentao/dto/Orderdto.java
  12. 9 0
      src/main/java/com/zhentao/dto/Userdto.java
  13. 18 0
      src/main/java/com/zhentao/mapper/CouponMapper.java
  14. 18 0
      src/main/java/com/zhentao/mapper/OrderDetailMapper.java
  15. 18 0
      src/main/java/com/zhentao/mapper/OrderMasterMapper.java
  16. 18 0
      src/main/java/com/zhentao/mapper/ProductSkuMapper.java
  17. 18 0
      src/main/java/com/zhentao/mapper/UserMapper.java
  18. 13 0
      src/main/java/com/zhentao/service/CouponService.java
  19. 13 0
      src/main/java/com/zhentao/service/OrderDetailService.java
  20. 14 0
      src/main/java/com/zhentao/service/OrderMasterService.java
  21. 13 0
      src/main/java/com/zhentao/service/ProductSkuService.java
  22. 13 0
      src/main/java/com/zhentao/service/UserService.java
  23. 22 0
      src/main/java/com/zhentao/service/impl/CouponServiceImpl.java
  24. 22 0
      src/main/java/com/zhentao/service/impl/OrderDetailServiceImpl.java
  25. 112 0
      src/main/java/com/zhentao/service/impl/OrderMasterServiceImpl.java
  26. 22 0
      src/main/java/com/zhentao/service/impl/ProductSkuServiceImpl.java
  27. 22 0
      src/main/java/com/zhentao/service/impl/UserServiceImpl.java
  28. 93 0
      src/main/java/com/zhentao/tool/TokenUtils.java
  29. 12 0
      src/main/resources/application.yml
  30. 16 0
      src/main/resources/mapper/CouponMapper.xml
  31. 23 0
      src/main/resources/mapper/OrderDetailMapper.xml
  32. 20 0
      src/main/resources/mapper/OrderMasterMapper.xml
  33. 19 0
      src/main/resources/mapper/ProductSkuMapper.xml
  34. 16 0
      src/main/resources/mapper/UserMapper.xml
  35. 13 0
      src/test/java/com/zhentao/LianxiDiyiApplicationTests.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/

+ 104 - 0
pom.xml

@@ -0,0 +1,104 @@
+<?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>lianxi_diyi</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>lianxi_diyi</name>
+    <description>lianxi_diyi</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.LianxiDiyiApplication</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/LianxiDiyiApplication.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 LianxiDiyiApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(LianxiDiyiApplication.class, args);
+    }
+
+}

+ 18 - 0
src/main/java/com/zhentao/controller/OrderMasterController.java

@@ -0,0 +1,18 @@
+package com.zhentao.controller;
+
+import com.zhentao.dto.Orderdto;
+import com.zhentao.service.OrderMasterService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class OrderMasterController {
+    @Autowired
+    private OrderMasterService service;
+    @PostMapping("/add")
+    public void add(@RequestBody Orderdto orderdto){
+        service.createOrder(orderdto);
+    }
+}

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

@@ -0,0 +1,45 @@
+package com.zhentao.controller;
+
+import cn.hutool.core.util.IdUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.zhentao.domain.*;
+import com.zhentao.dto.Userdto;
+import com.zhentao.service.UserService;
+import com.zhentao.tool.TokenUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.DigestUtils;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+
+
+@RestController
+public class UserController {
+    @Autowired
+    private UserService service;
+    @PostMapping("login")
+    public String login(@RequestBody Userdto userdto){
+        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("username",userdto.getUsername());
+        User one = service.getOne(queryWrapper);
+        String token = TokenUtils.generateToken(one.getUserId() + "");
+        long l = IdUtil.getSnowflake(1, 1).nextId();
+        System.err.println(l);
+        return token;
+    }
+    @PostMapping("adduser")
+    public void add(@RequestBody Userdto userdto){
+        long l = IdUtil.getSnowflake(1, 1).nextId();
+        User user = new User();
+        user.setUserId(String.valueOf(l));
+        user.setUsername(userdto.getUsername());
+        String s = DigestUtils.md5DigestAsHex((userdto.getPassword()).getBytes());
+        user.setPassword(s);
+        service.save(user);
+    }
+
+
+
+
+}

+ 35 - 0
src/main/java/com/zhentao/domain/Coupon.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 java.math.BigDecimal;
+import lombok.Data;
+
+/**
+ * 优惠券表
+ * @TableName coupon
+ */
+@TableName(value ="coupon")
+@Data
+public class Coupon implements Serializable {
+    /**
+     * 优惠券ID
+     */
+    private String couponId;
+
+    /**
+     * 用户ID(为空表示通用券)
+     */
+    private String userId;
+
+    /**
+     * 优惠金额
+     */
+    private BigDecimal discountAmount;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 61 - 0
src/main/java/com/zhentao/domain/OrderDetail.java

@@ -0,0 +1,61 @@
+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 java.util.Date;
+import lombok.Data;
+
+/**
+ * 订单明细表
+ * @TableName order_detail
+ */
+@TableName(value ="order_detail")
+@Data
+public class OrderDetail implements Serializable {
+    /**
+     * 明细ID
+     */
+    private Long detailId;
+
+    /**
+     * 订单ID
+     */
+    private Long orderId;
+
+    /**
+     * 商品SKU ID
+     */
+    private String skuId;
+
+    /**
+     * 商品名称
+     */
+    private String productName;
+
+    /**
+     * 单价
+     */
+    private BigDecimal unitPrice;
+
+    /**
+     * 数量
+     */
+    private Integer quantity;
+
+    /**
+     * 小计金额
+     */
+    private BigDecimal amount;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 50 - 0
src/main/java/com/zhentao/domain/OrderMaster.java

@@ -0,0 +1,50 @@
+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_master
+ */
+@TableName(value ="order_master")
+@Data
+public class OrderMaster implements Serializable {
+    /**
+     * 订单ID
+     */
+    private Long orderId;
+
+    /**
+     * 用户ID
+     */
+    private String userId;
+
+    /**
+     * 订单总金额
+     */
+    private BigDecimal totalAmount;
+
+    /**
+     * 优惠金额
+     */
+    private BigDecimal discountAmount;
+
+    /**
+     * 实付金额
+     */
+    private BigDecimal actualAmount;
+
+    /**
+     * 优惠券ID
+     */
+    private Long couponId;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

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

@@ -0,0 +1,45 @@
+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;
+
+/**
+ * 商品SKU表
+ * @TableName product_sku
+ */
+@TableName(value ="product_sku")
+@Data
+public class ProductSku implements Serializable {
+    /**
+     * SKU ID
+     */
+    private String skuId;
+
+    /**
+     * 商品ID
+     */
+    private Long productId;
+
+    /**
+     * 商品名称
+     */
+    private String productName;
+
+    /**
+     * 单价
+     */
+    private BigDecimal unitPrice;
+
+    /**
+     * 库存数量
+     */
+    private Integer stock;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 34 - 0
src/main/java/com/zhentao/domain/User.java

@@ -0,0 +1,34 @@
+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
+ */
+@TableName(value ="user")
+@Data
+public class User implements Serializable {
+    /**
+     * 用户ID
+     */
+    private String userId;
+
+    /**
+     * 用户名
+     */
+    private String username;
+
+    /**
+     * 密码(加密后)
+     */
+    private String password;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 12 - 0
src/main/java/com/zhentao/dto/Orderdto.java

@@ -0,0 +1,12 @@
+package com.zhentao.dto;
+
+import com.zhentao.domain.OrderDetail;
+import lombok.Data;
+
+import java.util.List;
+@Data
+public class Orderdto {
+    private List<OrderDetail> orderDetails;
+    private String token;
+    private Long 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.domain.Coupon;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author 86183
+* @description 针对表【coupon(优惠券表)】的数据库操作Mapper
+* @createDate 2025-05-09 19:36:08
+* @Entity com.zhentao.domain.Coupon
+*/
+public interface CouponMapper extends BaseMapper<Coupon> {
+
+}
+
+
+
+

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

@@ -0,0 +1,18 @@
+package com.zhentao.mapper;
+
+import com.zhentao.domain.OrderDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author 86183
+* @description 针对表【order_detail(订单明细表)】的数据库操作Mapper
+* @createDate 2025-05-09 19:36:08
+* @Entity com.zhentao.domain.OrderDetail
+*/
+public interface OrderDetailMapper extends BaseMapper<OrderDetail> {
+
+}
+
+
+
+

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

@@ -0,0 +1,18 @@
+package com.zhentao.mapper;
+
+import com.zhentao.domain.OrderMaster;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author 86183
+* @description 针对表【order_master(订单主表)】的数据库操作Mapper
+* @createDate 2025-05-09 19:36:08
+* @Entity com.zhentao.domain.OrderMaster
+*/
+public interface OrderMasterMapper extends BaseMapper<OrderMaster> {
+
+}
+
+
+
+

+ 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 86183
+* @description 针对表【product_sku(商品SKU表)】的数据库操作Mapper
+* @createDate 2025-05-09 19:36:08
+* @Entity com.zhentao.domain.ProductSku
+*/
+public interface ProductSkuMapper extends BaseMapper<ProductSku> {
+
+}
+
+
+
+

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

@@ -0,0 +1,18 @@
+package com.zhentao.mapper;
+
+import com.zhentao.domain.User;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author 86183
+* @description 针对表【user(用户表)】的数据库操作Mapper
+* @createDate 2025-05-09 19:36:09
+* @Entity com.zhentao.domain.User
+*/
+public interface UserMapper extends BaseMapper<User> {
+
+}
+
+
+
+

+ 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 86183
+* @description 针对表【coupon(优惠券表)】的数据库操作Service
+* @createDate 2025-05-09 19:36:08
+*/
+public interface CouponService extends IService<Coupon> {
+
+}

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

@@ -0,0 +1,13 @@
+package com.zhentao.service;
+
+import com.zhentao.domain.OrderDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author 86183
+* @description 针对表【order_detail(订单明细表)】的数据库操作Service
+* @createDate 2025-05-09 19:36:08
+*/
+public interface OrderDetailService extends IService<OrderDetail> {
+
+}

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

@@ -0,0 +1,14 @@
+package com.zhentao.service;
+
+import com.zhentao.domain.OrderMaster;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhentao.dto.Orderdto;
+
+/**
+* @author 86183
+* @description 针对表【order_master(订单主表)】的数据库操作Service
+* @createDate 2025-05-09 19:36:08
+*/
+public interface OrderMasterService extends IService<OrderMaster> {
+    void createOrder(Orderdto orderdto);
+}

+ 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 86183
+* @description 针对表【product_sku(商品SKU表)】的数据库操作Service
+* @createDate 2025-05-09 19:36:08
+*/
+public interface ProductSkuService extends IService<ProductSku> {
+
+}

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

@@ -0,0 +1,13 @@
+package com.zhentao.service;
+
+import com.zhentao.domain.User;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author 86183
+* @description 针对表【user(用户表)】的数据库操作Service
+* @createDate 2025-05-09 19:36:09
+*/
+public interface UserService extends IService<User> {
+
+}

+ 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 86183
+* @description 针对表【coupon(优惠券表)】的数据库操作Service实现
+* @createDate 2025-05-09 19:36:08
+*/
+@Service
+public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon>
+    implements CouponService{
+
+}
+
+
+
+

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

@@ -0,0 +1,22 @@
+package com.zhentao.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhentao.domain.OrderDetail;
+import com.zhentao.service.OrderDetailService;
+import com.zhentao.mapper.OrderDetailMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author 86183
+* @description 针对表【order_detail(订单明细表)】的数据库操作Service实现
+* @createDate 2025-05-09 19:36:08
+*/
+@Service
+public class OrderDetailServiceImpl extends ServiceImpl<OrderDetailMapper, OrderDetail>
+    implements OrderDetailService{
+
+}
+
+
+
+

+ 112 - 0
src/main/java/com/zhentao/service/impl/OrderMasterServiceImpl.java

@@ -0,0 +1,112 @@
+package com.zhentao.service.impl;
+
+import cn.hutool.core.util.IdUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhentao.domain.Coupon;
+import com.zhentao.domain.OrderDetail;
+import com.zhentao.domain.OrderMaster;
+import com.zhentao.domain.ProductSku;
+import com.zhentao.dto.Orderdto;
+import com.zhentao.service.CouponService;
+import com.zhentao.service.OrderDetailService;
+import com.zhentao.service.OrderMasterService;
+import com.zhentao.mapper.OrderMasterMapper;
+import com.zhentao.service.ProductSkuService;
+import com.zhentao.tool.TokenUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+* @author 86183
+* @description 针对表【order_master(订单主表)】的数据库操作Service实现
+* @createDate 2025-05-09 19:36:08
+*/
+@Service
+public class OrderMasterServiceImpl extends ServiceImpl<OrderMasterMapper, OrderMaster>
+    implements OrderMasterService{
+    @Autowired
+    private StringRedisTemplate stringRedisTemplate;
+    @Autowired
+    private ProductSkuService productSkuService;
+    @Autowired
+    private CouponService service;
+    @Autowired
+    private OrderDetailService orderDetailService;
+    @Override
+    public void createOrder(Orderdto orderdto) {
+//        创建一个对象
+        OrderMaster orderMaster = new OrderMaster();
+//        创建出一个雪花算法id
+        long l = IdUtil.getSnowflake(1, 1).nextId();
+        orderMaster.setOrderId(l);
+//        判断token是否为空  设置用户id
+        String userIdFromToken = TokenUtils.getUserIdFromToken(orderdto.getToken());
+        System.err.println("用户id"+userIdFromToken);
+        if (userIdFromToken==null){
+            String userId = stringRedisTemplate.opsForValue().get("userId");
+            String userIdFromToken1 = TokenUtils.getUserIdFromToken(userId);
+            orderMaster.setUserId(userIdFromToken1);
+        }else {
+            orderMaster.setUserId(userIdFromToken);
+        }
+//      查询商品信息转换Map
+        List<String> collect1 = orderdto.getOrderDetails().stream().map(OrderDetail::getSkuId).collect(Collectors.toList());
+        System.err.println("所有的skuId:"+collect1);
+        List<ProductSku> productSkus = new ArrayList<>();
+        for (String a:collect1) {
+            QueryWrapper<ProductSku> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("sku_id",a);
+            ProductSku one = productSkuService.getOne(queryWrapper);
+            productSkus.add(one);
+        }
+        System.err.println(productSkus);
+        Map<String, ProductSku> collect = productSkus.stream().collect(Collectors.toMap(ProductSku::getSkuId, p -> p));
+        System.err.println("Map集合"+collect);
+//        计算总价格
+        BigDecimal total = new BigDecimal("0");
+        for (OrderDetail o:orderdto.getOrderDetails()){
+//            获取sku的基本信息
+            ProductSku productSku = collect.get(o.getSkuId());
+//            小计
+            BigDecimal multiply = productSku.getUnitPrice().multiply(new BigDecimal(o.getQuantity()));
+            o.setAmount(multiply);
+            total = total.add(multiply);
+        }
+        orderMaster.setTotalAmount(total);
+        System.err.println("总价格"+total);
+//        扣减的优惠券
+        QueryWrapper<Coupon> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("coupon_id",orderdto.getCouponId());
+        Coupon one = service.getOne(queryWrapper);
+//        设置优惠券id
+        orderMaster.setCouponId(orderdto.getCouponId());
+//        设置优惠的金额
+        orderMaster.setDiscountAmount(one.getDiscountAmount());
+//        设置实付金额
+        orderMaster.setActualAmount(total.subtract(one.getDiscountAmount()));
+        System.err.println("订单的所有信息:"+orderMaster);
+        boolean save = this.save(orderMaster);
+        for (OrderDetail o:orderdto.getOrderDetails()) {
+            long a = IdUtil.getSnowflake(1, 1).nextId();
+            o.setDetailId(a);
+            o.setOrderId(l);
+            orderDetailService.save(o);
+        }
+        for(ProductSku p:productSkus){
+            for (OrderDetail o:orderdto.getOrderDetails()) {
+                if (p.getSkuId().equals(o.getSkuId())){
+                    p.setStock(p.getStock()-o.getQuantity());
+                    productSkuService.updateById(p);
+                }
+            }
+        }
+    }
+}

+ 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 86183
+* @description 针对表【product_sku(商品SKU表)】的数据库操作Service实现
+* @createDate 2025-05-09 19:36:08
+*/
+@Service
+public class ProductSkuServiceImpl extends ServiceImpl<ProductSkuMapper, ProductSku>
+    implements ProductSkuService{
+
+}
+
+
+
+

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

@@ -0,0 +1,22 @@
+package com.zhentao.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhentao.domain.User;
+import com.zhentao.service.UserService;
+import com.zhentao.mapper.UserMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author 86183
+* @description 针对表【user(用户表)】的数据库操作Service实现
+* @createDate 2025-05-09 19:36:08
+*/
+@Service
+public class UserServiceImpl extends ServiceImpl<UserMapper, User>
+    implements UserService{
+
+}
+
+
+
+

+ 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/diyiwyc?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.domain.Coupon">
+            <result property="couponId" column="coupon_id" jdbcType="VARCHAR"/>
+            <result property="userId" column="user_id" jdbcType="VARCHAR"/>
+            <result property="discountAmount" column="discount_amount" jdbcType="DECIMAL"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        coupon_id,user_id,discount_amount
+    </sql>
+</mapper>

+ 23 - 0
src/main/resources/mapper/OrderDetailMapper.xml

@@ -0,0 +1,23 @@
+<?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.OrderDetailMapper">
+
+    <resultMap id="BaseResultMap" type="com.zhentao.domain.OrderDetail">
+            <result property="detailId" column="detail_id" jdbcType="BIGINT"/>
+            <result property="orderId" column="order_id" jdbcType="BIGINT"/>
+            <result property="skuId" column="sku_id" jdbcType="BIGINT"/>
+            <result property="productName" column="product_name" jdbcType="VARCHAR"/>
+            <result property="unitPrice" column="unit_price" jdbcType="DECIMAL"/>
+            <result property="quantity" column="quantity" jdbcType="INTEGER"/>
+            <result property="amount" column="amount" jdbcType="DECIMAL"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        detail_id,order_id,sku_id,
+        product_name,unit_price,quantity,
+        amount,create_time
+    </sql>
+</mapper>

+ 20 - 0
src/main/resources/mapper/OrderMasterMapper.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.OrderMasterMapper">
+
+    <resultMap id="BaseResultMap" type="com.zhentao.domain.OrderMaster">
+            <result property="orderId" column="order_id" jdbcType="VARCHAR"/>
+            <result property="userId" column="user_id" jdbcType="VARCHAR"/>
+            <result property="totalAmount" column="total_amount" jdbcType="DECIMAL"/>
+            <result property="discountAmount" column="discount_amount" jdbcType="DECIMAL"/>
+            <result property="actualAmount" column="actual_amount" jdbcType="DECIMAL"/>
+            <result property="couponId" column="coupon_id" jdbcType="BIGINT"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        order_id,user_id,total_amount,
+        discount_amount,actual_amount,coupon_id
+    </sql>
+</mapper>

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

@@ -0,0 +1,19 @@
+<?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">
+            <result property="skuId" column="sku_id" jdbcType="BIGINT"/>
+            <result property="productId" column="product_id" jdbcType="BIGINT"/>
+            <result property="productName" column="product_name" jdbcType="VARCHAR"/>
+            <result property="unitPrice" column="unit_price" jdbcType="DECIMAL"/>
+            <result property="stock" column="stock" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        sku_id,product_id,product_name,
+        unit_price,stock
+    </sql>
+</mapper>

+ 16 - 0
src/main/resources/mapper/UserMapper.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.UserMapper">
+
+    <resultMap id="BaseResultMap" type="com.zhentao.domain.User">
+            <result property="userId" column="user_id" jdbcType="VARCHAR"/>
+            <result property="username" column="username" jdbcType="VARCHAR"/>
+            <result property="password" column="password" jdbcType="VARCHAR"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        user_id,username,password
+    </sql>
+</mapper>

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

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