springboot项目

  • **中国加油,武汉加油!**
  • 篇幅较长,配合目录观看
  • 案例准备
  • 1. 订单添加
    • 1.1 修改shop-order的affirmOrder.html
    • 1.2 修改order表结构
    • 1.3 shop-entity编写Order类
    • 1.4 shop-common编写工具类
    • 1.5 shop-mapper定义Mapper接口
    • 1.6 shop-service-api定义Service接口
    • 1.5 shop-service-iml新建order-service(module-springboot)
      • 1.5.1 order-service定义ServiceImpl
      • 1.5.2 配置yml
    • 1.6 shop-service-api的ICartService编写方法
    • 1.7 cart-service重写方法
    • 1.8 shop-mapper定义IOrderMapper.xml
    • 1.9 修改order-service的程序入口
    • 1.10 Test
    • 1.11 shop-entity定义OrderDetail类
    • 1.12 修改t_order_detail
    • 1.13 shop-mapper定义Mapper接口
    • 1.14 shop-service-api定义Service接口
    • 1.15 order-service定义ServiceImpl实现类
    • 1.16 shop-mapper定义IOrderDetailMapper.xml
    • 1.17 Test
    • 1.18 shop-order的OrderController编写方法
    • 1.19 启动程序入口测试

中国加油,武汉加油!

篇幅较长,配合目录观看

案例准备

  1. 本案例基于springboot篇】二十一. 基于springboot电商项目 十一 地址服务

1. 订单添加

1.1 修改shop-order的affirmOrder.html

1.2 修改order表结构

1.3 shop-entity编写Order类

package com.wpj.entity;import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Order implements Serializable{private String id; // id自己生成private Integer ostatus;private Integer uid;private BigDecimal totalPrice;private Date createTime;private String person;private String phone;private String address;
}

1.4 shop-common编写工具类

package com.wpj.common.utils;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;import java.text.SimpleDateFormat;
import java.util.Date;@Component
public class OrderUtils {@Autowiredprivate StringRedisTemplate stringRedisTemplate;// 订单id的生成规则:时间(年月日)+用户id后四位+流水号public String createOrderId(Integer userId) {StringBuffer orderId = new StringBuffer();Date date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");// 给订单号添加时间orderId.append(sdf.format(date));// 给订单号添加用户id后四位orderId.append(getUserIdEnd(userId));// 添加流水号(这里不需要用stringRedisTemplate)Object order_num1 = stringRedisTemplate.opsForValue().get("order_num");if (order_num1 == null || "".equals(order_num1)) {stringRedisTemplate.opsForValue().set("order_num", "1");}Long order_num = stringRedisTemplate.opsForValue().increment("order_num");orderId.append(order_num.toString());return orderId.toString();}public String getUserIdEnd(Integer userId) {String tempUid = userId.toString();StringBuffer uId = new StringBuffer();if (tempUid.length() < 4) {uId.append(tempUid);for (int i = 0; i < 4 - (tempUid.length()); i++) {uId.insert(0, "0");}} else {uId.append(tempUid.substring(tempUid.length() - 4));}return uId.toString();}
}

1.5 shop-mapper定义Mapper接口

package com.wpj.mapper;import com.wpj.entity.Order;public interface IOrderMapper {public int addOrder(Order order);
}

1.6 shop-service-api定义Service接口

package com.wpj.service;import com.wpj.entity.Order;public interface IOrderService {public int addOrder(Order order);
}

1.5 shop-service-iml新建order-service(module-springboot)

1.5.1 order-service定义ServiceImpl

package com.wpj.service.impl;import com.alibaba.dubbo.config.annotation.Service;
import com.wpj.entity.Order;
import com.wpj.mapper.IOrderMapper;
import com.wpj.service.IOrderService;
import org.springframework.beans.factory.annotation.Autowired;@Service
public class OrderServiceImpl implements IOrderService {@Autowiredprivate IOrderMapper orderMapper;@Overridepublic int addOrder(Order order) {return orderMapper.addOrder(order);}
}

1.5.2 配置yml

spring:datasource:url: jdbc:mysql://localhost:3306/nz1904-springboot-shopusername: rootpassword: 123456driver-class-name: com.mysql.jdbc.Driverredis:host: 192.168.59.100password: admin
mybatis-plus:type-aliases-package: com.wpj.entitymapper-locations: classpath:/mapper/*.xml
dubbo:application:name: order-serviceregistry:address: zookeeper://192.168.59.100:2181protocol:port: -1

1.6 shop-service-api的ICartService编写方法

BigDecimal getTotalPrice(List<Cart> cartList);
void deleteCartByUid(Integer id);

1.7 cart-service重写方法

@Override
public BigDecimal getTotalPrice(List<Cart> cartList) {BigDecimal totalPrice = new BigDecimal(0);for(Cart cart:cartList){totalPrice= totalPrice.add(cart.getSubTotal());}return totalPrice;
}@Override
public void deleteCartByUid(Integer id) {EntityWrapper entityWrapper = new EntityWrapper();entityWrapper.eq("uid",id);cartMapper.delete(entityWrapper);
}

1.8 shop-mapper定义IOrderMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wpj.mapper.IOrderMapper"><insert id="addOrder">INSERT INTO t_order (id,total_price,ocreate_time,ostatus,u_id,person,phone,address)VALUES(#{id},#{totalPrice},#{createTime},#{ostatus},#{uid},#{person},#{phone},#{address})</insert>
</mapper>

1.9 修改order-service的程序入口

package com.wpj;import com.alibaba.dubbo.config.spring.context.annotation.DubboComponentScan;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication(scanBasePackages = "com.wpj")
@DubboComponentScan(basePackages = "com.wpj.service")
@MapperScan(basePackages = "com.wpj.mapper")
public class OrderServiceApplication {public static void main(String[] args) {SpringApplication.run(OrderServiceApplication.class, args);}}

1.10 Test

package com.wpj;import com.alibaba.dubbo.config.annotation.Reference;
import com.wpj.common.utils.OrderUtils;
import com.wpj.entity.Order;
import com.wpj.service.IOrderService;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;@SpringBootTest
@RunWith(SpringRunner.class)
class OrderServiceApplicationTests {@Referenceprivate IOrderService orderService;@Autowiredprivate OrderUtils orderUtils;@Testvoid contextLoads() {Order order = new Order();String orderId = orderUtils.createOrderId(14);order.setId(orderId);orderService.addOrder(order);}}

1.11 shop-entity定义OrderDetail类

package com.wpj.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;
import java.math.BigDecimal;@Data
@AllArgsConstructor
@NoArgsConstructor
public class OrderDetail implements Serializable{private Integer id;private String oid;private Integer gid;private String gname;private Integer  gnum;private String gpic;private BigDecimal gprice;private BigDecimal gcount;private String gdesc;
}

1.12 修改t_order_detail

1.13 shop-mapper定义Mapper接口

package com.wpj.mapper;import com.wpj.entity.OrderDetail;import java.util.List;public interface IOrderDetailMapper {public int addBarch(List<OrderDetail> list);
}

1.14 shop-service-api定义Service接口

package com.wpj.service;import com.wpj.entity.OrderDetail;import java.util.List;public interface IOrderDetailService {public int addBarch(List<OrderDetail> list);
}

1.15 order-service定义ServiceImpl实现类

package com.wpj.service.impl;import com.alibaba.dubbo.config.annotation.Service;
import com.wpj.entity.OrderDetail;
import com.wpj.mapper.IOrderDetailMapper;
import com.wpj.service.IOrderDetailService;
import org.springframework.beans.factory.annotation.Autowired;import java.util.List;@Service
public class OrderDetailServiceImpl implements IOrderDetailService {@Autowiredprivate IOrderDetailMapper orderDetailMapper;@Overridepublic int addBarch(List<OrderDetail> list) {return orderDetailMapper.addBarch(list);}
}

1.16 shop-mapper定义IOrderDetailMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wpj.mapper.IOrderDetailMapper"><insert id="addBarch">INSERT INTO t_order_detail (id,oid,gid,gname,gprice,gnum,gcount,gpic,gdesc)VALUES<foreach collection="list" item="od" separator=",">(#{od.id},#{od.oid},#{od.gid},#{od.gname},#{od.gprice},#{od.gnum},#{od.gcount},#{od.gpic},#{od.gdesc})</foreach></insert>
</mapper>

1.17 Test

@Reference
private IOrderDetailService orderDetailService;@Test
public void test2(){List<OrderDetail> orderDetailList = new ArrayList<>();orderDetailList.add(new OrderDetail());orderDetailService.addBarch(orderDetailList);
}

1.18 shop-order的OrderController编写方法

@Reference
private IOrderService orderService;
@Reference
private IOrderDetailService orderDetailService;@RequestMapping("/addOrder")
@IsLogin(mustUser = true)
@ResponseBody
public String addOrder(Integer addressId,User user){// 根据地址id查询地址的对象Address address = addressService.selectById(addressId);List<Cart> cartList = cartService.getUserCartList(user,"");// 插入订单Order order = new Order();String orderId = orderUtils.createOrderId(user.getId());order.setId(orderId);order.setUid(user.getId());order.setPerson(address.getPhone());order.setAddress(address.getAddress());order.setCreateTime(new Date());order.setOstatus(0); // 0 未支付 1 已支付 2 超时 3 取消order.setPerson(address.getPerson());order.setTotalPrice(cartService.getTotalPrice(cartList));orderService.addOrder(order);// 插入订单详情List<OrderDetail> orderDetailList = new ArrayList<>();for (Cart cart: cartList) {OrderDetail orderDetail = new OrderDetail();Goods goods = cart.getGoods();orderDetail.setGprice(goods.getGprice());orderDetail.setGpic(goods.getGpic());orderDetail.setGnum(cart.getNum());orderDetail.setGname(goods.getGname());orderDetail.setGid(goods.getId());orderDetail.setGcount(cart.getSubTotal());orderDetail.setGdesc(goods.getGdesc());orderDetailList.add(orderDetail);if (orderDetailList.size() == 300) {orderDetailService.addBarch(orderDetailList);orderDetailList.clear();}}if (orderDetailList.isEmpty()){orderDetailService.addBarch(orderDetailList);}// 清空购物车cartService.deleteCartByUid(user.getId());// 跳转到支付页面return "ok";
}

1.19 启动程序入口测试

有个乱码问题待解决


springboot篇】二十一. 基于springboot电商项目 十二 订单服务相关推荐

  1. Spring Boot电商项目59:订单模块八:【后台:订单列表】接口;

     说明: (1)本篇博客的主要内容是开发[后台:订单列表]接口: (2)本篇博客没什么难点:只需要注意:[前台:订单列表]接口是查询当前登录用户的订单数据:[后台:订单列表]接口是查询所有用户的订单数 ...

  2. 通过Dapr实现一个简单的基于.net的微服务电商系统(十二)——istio+dapr构建多运行时服务网格...

    多运行时是一个非常新的概念.在 2020 年,Bilgin Ibryam 提出了 Multi-Runtime(多运行时)的理念,对基于 Sidecar 模式的各种产品形态进行了实践总结和理论升华.那到 ...

  3. Spring Boot电商项目57:订单模块六:【前台:生成支付二维码】接口;(支付url的拼凑;利用zxing生成二维码;二维码图片的存储;真实地址与可访问地址的转换;)

    说明: (1)本篇博客主要内容是:开发[前台:生成支付二维码]接口: (2)本篇博客需要注意的点有: ● 支付url的拼凑: ● 利用zxing生成二维码: ● 二维码图片的存储:真实地址与可访问地址 ...

  4. 基于HTML电商项目的设计与实现——html静态网站基于数码类电商购物网站网页设计与实现共计30个页面

    常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 服装. 体育. 化妆品. 物流. 环保. 书籍. 婚纱. 游戏. 节日. ...

  5. 基于HTML电商项目的设计与实现——html静态网站基于数码类电商购物网站网页设计与实现共计30个页面...

    常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 服装. 体育. 化妆品. 物流. 环保. 书籍. 婚纱. 游戏. 节日. ...

  6. 基于HTML电商项目的设计与实现—— HTML+CSS+JavaScrip家具网页设计实例 企业网站制作...

    常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 服装. 体育. 化妆品. 物流. 环保. 书籍. 婚纱. 游戏. 节日. ...

  7. 简单的学生网页作业源码 基于HTML电商项目的设计与实现——html静态网站简单的学生网页作业源码 基于数码类电商购物网站网页设计与实现共计30个页面

    常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 服装. 体育. 化妆品. 物流. 环保. 书籍. 婚纱. 游戏. 节日. ...

  8. 基于HTML电商项目的设计与实现—— HTML+CSS+JavaScrip家具网页设计实例 企业网站制作

    常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 服装. 体育. 化妆品. 物流. 环保. 书籍. 婚纱. 游戏. 节日. ...

  9. 基于Vue+SpringCloudAlibaba微服务电商项目实战-构建会员服务-011:基于Vue快速整合会员服务接口

    011:基于Vue快速整合会员服务接口 1 构建前端Vue项目调用后端接口实现联合登录效果演示 2 什么是微服务前后端分离开发的模式 3 联合登录接口接口简单回顾 4 前后端分离解决跨域的问题 5 V ...

  10. java电商项目_Java电商项目总结(二)

    前言 在写基于Spring Boot的高并发秒杀Demo的时候,遇到了一点问题,因此记录下来. 遇到的问题 1.当我们在resources目录下,创建fonts文件夹,把Bootstrap所需要的gl ...

最新文章

  1. nexus 4 linux,Nexus 4刷机Ubuntu Touch教程
  2. mysql 实验_实验二 MySQL 实验.doc
  3. Redis学习笔记(11)——Redis缓存集群方案
  4. 实现查询菜品信息考试题
  5. Python学习第一天-第2节
  6. 招聘| 基因组所Yuwen Liu团队诚聘科研人员
  7. c#: using Microsoft.Office.Interop.Excel 异常
  8. Android-JNI开发系列《六》jni与java的交互
  9. 栈的输出_C|简单实现栈、及利用递归将十进制数用其他进制来输出
  10. python字典forward_《Python机器学习基础教程》
  11. spring nature
  12. Python常用模块大全(总结)
  13. 电脑计算机怎么显示到桌面,怎么显示我的电脑到桌面
  14. 利用Tushare获取A股所有股票代码
  15. ECCV2020-DETR笔记
  16. 10月22日科技联播:饿了么与屈臣氏达成合作;马蜂窝回应数据造假
  17. 为什么有些编程程序员需要两个显示器?
  18. Illegal mix of collations (utf8mb4_0900_ai_ci,IMPLICIT) and (utf8mb4_0900_as_ci,IMPLICIT) for operat
  19. 3t服务器装linux系统如何分区,Linux 分区、格式化3T大容量存储分区
  20. Windows UAC提权

热门文章

  1. Offset is outside the bounds of the DataView
  2. 基于C++的web服务器---总述篇
  3. python开发板 树莓派_树莓派3代B+型 Raspberry Pi 3b+电脑linux开发板python编程
  4. unity Animator 同时播放两个动画,并动态更换Animator中的AnimationClip
  5. 基于VB和单片机的智能家居监控系统设计
  6. 电驴服务器更新的作用,怎样更新eMule(电驴)服务器列表,有什么好处?
  7. 2019年MongoDB中文社区 长沙大会
  8. 手机怎样设置每年自动生日提醒
  9. 气候制度的转变和森林的丧失放大了亚马逊森林的火灾
  10. Unity2D游戏制作常用方法