Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)二十二(下单和微信支付)

本文介绍了如何在一个基于Java的网络商城项目中使用SpringBoot和SpringCloud实现下单和微信支付功能。详细讲述了从生成订单编号(采用雪花算法)到准备假物流数据,再到在不同微服务之间交互实现订单创建和微信支付的过程。包括创建订单的逻辑、减库存策略、微信支付回调处理以及订单状态的更新。
摘要由CSDN通过智能技术生成

*/

@PostMapping

public ResponseEntity createOrder(@RequestBody OrderDTO orderDTO){

return null;

}

}

1.6.相关Service


在这里插入图片描述

在这里插入图片描述

package com.leyou.order.service;

import org.springframework.stereotype.Service;

@Service

public class OrderService {

}

1.7.相关Mapper


在这里插入图片描述

在这里插入图片描述

package com.leyou.order.mapper;

import com.leyou.common.mapper.BaseMapper;

import com.leyou.order.pojo.Order;

public interface OrderMapper extends BaseMapper {

}

在这里插入图片描述

在这里插入图片描述

package com.leyou.order.mapper;

import com.leyou.common.mapper.BaseMapper;

import com.leyou.order.pojo.OrderDetail;

public interface OrderDetailMapper extends BaseMapper {

}

在这里插入图片描述

在这里插入图片描述

package com.leyou.order.mapper;

import com.leyou.common.mapper.BaseMapper;

import com.leyou.order.pojo.OrderStatus;

public interface OrderStatusMapper extends BaseMapper {

}

1.8.完善OrderService


在这里插入图片描述

package com.leyou.order.service;

import com.leyou.order.mapper.OrderDetailMapper;

import com.leyou.order.mapper.OrderMapper;

import com.leyou.order.mapper.OrderStatusMapper;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

@Service

public class OrderService {

@Autowired

private OrderMapper orderMapper;

@Autowired

private OrderDetailMapper detailMapper;

@Autowired

private OrderStatusMapper statusMapper;

}

1.9.完善OrderController


在这里插入图片描述

2.0.实现orderService的createOrder方法


在这里插入图片描述

创建订单逻辑比较复杂,需要组装订单数据,基本步骤如下:

  • 获取登录用户信息

  • 生成订单编号,初始化订单基本信息

  • 查询收货人信息

  • 查询商品信息

  • 封装OrderDetail信息

  • 计算总金额、实付金额

  • 保存订单状态信息

  • 删除购物车中已购买商品减库存

2.0.1生成订单编号(雪花算法)

雪花算法是由Twitter公司开源的snowflake(雪花)算法。

  • 雪花算法的原理

雪花算法会生成一个64位的二进制数据,为一个Long型。

(转换成字符串后长度最多19),其基本结构:

在这里插入图片描述

第一位:为未使用

第二部分:41位为毫秒级时间(41位的长度可以使用69年)

第三部分:5位datacenterld和5位workerld(10位的长度最多支持部署1024个节点)

第四部分:最后12位是毫秒内的计数(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号)

snowflake生成的ID整体上按照时间自增排序,

并且整个分布式系统内不会产生ID碰撞(由datacenterworkerld作区分),

并且效率较高。

经测试snowflake每秒能够产生26万个ID。

  • 配置

在这里插入图片描述

ly:

worker:

workerId : 1

dataCenterId : 1

  • 加载属性

在这里插入图片描述

在这里插入图片描述

package com.leyou.order.config;

import lombok.Data;

import org.springframework.boot.context.properties.ConfigurationProperties;

@Data

@ConfigurationProperties(prefix = “ly.worker”)

public class IdWorkerProperties {

private long workerId;

private long dataCenterId;

}

  • 编写配置类

在这里插入图片描述

在这里插入图片描述

package com.leyou.order.config;

import com.leyou.common.utils.IdWorker;

import org.springframework.boot.context.properties.EnableConfigurationProperties;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

@EnableConfigurationProperties(IdWorkerProperties.class)

public class IdWorkerConfig {

@Bean

public IdWorker idWorker(IdWorkerProperties prop){

return new IdWorker(prop.getWorkerId(),prop.getDataCenterId());

}

}

2.0.2 准备假物流数据

我们前端页面传来的是addressld,我们需要根据id查询物流信息,

但是因为还没做物流地址管理。

所以我们准备一些假数据。

首先是实体类:

在这里插入图片描述

在这里插入图片描述

package com.leyou.order.dto;

import lombok.Data;

@Data

public class AddressDTO {

private Long id;

private String name;//收件人姓名

private String phone;//电话

private String state;//省份

private String city;//城市

private String district;//区

private String address;//街道地址

private String zipCode;//邮编

private Boolean isDefault;

}

在这里插入图片描述

在这里插入图片描述

package com.leyou.order.client;

import com.leyou.order.dto.AddressDTO;

import java.util.ArrayList;

import java.util.List;

public abstract class AddressClient {

public static final List addressList = new ArrayList() {

{

AddressDTO address = new AddressDTO();

address.setId(1L);

address.setAddress(“太阳系”);

address.setCity(“银河系”);

address.setDistrict(“火星”);

address.setName(“大哥”);

address.setPhone(“15800000000”);

address.setState(“阿拉比亚大陆(Arabia Terra)”);

address.setZipCode(“210000” ) ;

address.setIsDefault(true) ;

add(address);

AddressDTO address2 = new AddressDTO();address2.setId(2L);

address.setAddress(“太阳系”);

address.setCity(“银河系”);

address2.setDistrict(“天王星”);

address2.setName(“张三”);

address2.setPhone(“13600000000” );

address2.setState(“北京”);

address2.setZipCode(“100000”);

address2.setIsDefault(false);

add(address2);

}

};

public static AddressDTO findById(Long id) {

for (AddressDTO addressDTO : addressList) {

if (addressDTO.getId() == id)

return addressDTO;

}

return null;

}

}

2.0.3 在ly-item的ly-item-interface当中新增通过sku的id集合查询其所有sku的接口

在这里插入图片描述

/*

通过sku的id集合查询其所有sku

*/

@GetMapping(“sku/list/ids”)

List querySkuBySpuId(@RequestParam(“ids”) List ids);

2.0.4 在Order当中定义对应client使用上述的接口

在这里插入图片描述

在这里插入图片描述

package com.leyou.order.client;

import com.leyou.item.api.GoodsApi;

import org.springframework.cloud.openfeign.FeignClient;

@FeignClient(“item-service”)

public interface GoodsClient extends GoodsApi {

}

2.0.5 完善OrderService相关的工具类

2.0.5.1 定义异常枚举

在这里插入图片描述

CREATE_ORDER_ERROR(500,“创建订单失败”),

2.0.5.2 定义订单状态枚举

在这里插入图片描述

在这里插入图片描述

package com.leyou.order.enums;

public enum OrderStatusEnum {

UN_PAY(1,“未付款”),

PAYED(2,“已付款,未发货”),

DELIVERED(3,“已发货,未确认”),

SUCCESS(4,“已确认,未评价”),

CLOSED(5,“已关闭,交易失败”),

RATED(6,“已评价”),

;

private int code;

private String desc;

OrderStatusEnum(int code, String desc) {

this.code = code;

this.desc = desc;

}

  • 27
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本文介绍了一个基于Spring BootSpring CloudVue前后端分离项目实战。这个项目是一个简单的在线商城,包含了用户注册、登录、商品展示、购物车、订单管理等功能。通过这个项目,读者可以深入理解前后端分离的架构模式和互联网应用的开发方式。 首先,文章介绍了前后端分离的基本概念和优势。前后端分离是将应用的前端和后端代码分开来开发,使得前端和后端具有独立的开发周期和技术栈,进而提高了开发效率和代码质量。同时,前后端分离还可以提供更好的用户体验和灵活性,对于互联网应用来说尤为重要。 接下来,文章介绍了项目的架构和技术栈。项目采用了Spring BootSpring Cloud框架来实现后端代码,采用MyBatis作为ORM框架和Redis作为缓存中间件。同时,项目还采用了Vue.js作为前端框架和Element UI组件库来实现前端页面。通过这些开源框架和组件,可以快速搭建一个前后端分离的互联网应用。 然后,文章介绍了项目的核心功能和代码实现。在用户注册和登录方面,项目采用了Spring Security框架和JWT令牌来实现用户认证和授权,保证了用户信息的安全性。在商品展示和购物车方面,项目采用了Vue.js来实现前端页面和事件处理。在订单管理方面,项目采用了MyBatis Plus来实现订单数据的持久化和分页查询。 最后,文章介绍了项目的测试和优化。通过对项目的压力测试和性能测试,文章发现项目还存在一些性能瓶颈和安全隐患,可以通过优化数据库查询、缓存配置和代码实现来提高应用的性能和安全性。 总之,这篇文章介绍了一个基于Spring BootSpring CloudVue前后端分离项目实战,通过实现一个在线商城的功能,展示了前后端分离的开发模式和互联网应用的开发技术栈。本文可以作为前后端分离开发的入门教程,也可以作为互联网应用开发的参考文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值