package com.webshop.webshop.service.imp;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.webshop.webshop.dao.CartMapper;
import com.webshop.webshop.dao.OrderMapper;
import com.webshop.webshop.dao.ProductMapper;
import com.webshop.webshop.pojo.Cart;
import com.webshop.webshop.pojo.Order;
import com.webshop.webshop.pojo.Product;
import com.webshop.webshop.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;
/**
* Copyright (C), 2018-2020
* FileName: OrderServiceImp
* Author:
* Date: 2020/2/21 14:50
* Description: 生成订单
*/
@Service
public class OrderServiceImp implements OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private CartMapper cartMapper;
@Autowired
private ProductMapper productMapper;
@Override
public int InsOrder(Order order) {
return orderMapper.InsOrder(order);
}
@Override
public PageInfo<Order> SelectOrderAndCart(Integer pageNum, Integer pageSize, Order order) {
PageHelper.startPage(pageNum, pageSize);
List<Order> orders = orderMapper.SelectOrderAndCart(order);
PageInfo<Order> orderPageInfo = new PageInfo<>(orders);
return orderPageInfo;
}
//生成订单
// 添加事物管理 保证事物正常 避突发情况
@Transactional
@Override
public int DoOrder(Order order, Cart cart, String cart_state, Integer cart_id, Integer u_id) {
Cart cartEach = new Cart();
// 1.//更新清单状态 支付中--变为-> 待收货
int i1 = 0;
if (cart_state.equals("购物车支付中")) {
// 更新销量
int a = DosaveP_sum("购物车支付中", cart);
// 开始调用生成订单方法
cartEach.setU_id(u_id);
cart.setCart_state("购物车支付中");
List<Cart> carts = cartMapper.Sel_CartCar_All_state_uid(cartEach);
eachCart(carts, cart, order,"购物车");
} else if (cart_state.equals("多个支付中")) {
// 多个订单一起支付
// 更新销量
int a = DosaveP_sum("多个支付中", cart);
// 开始调用生成订单方法
cartEach.setU_id(u_id);
cartEach.setCart_state("支付中");
List<Cart> carts = cartMapper.Sel_CartCar_All_state_uid(cartEach);
eachCart(carts, cart, order,"支付");
}else if (cart_state.equals("单个支付中")) {
// 单个订单支付 通过id 直接更新
cart.setCart_id(cart_id);
i1 = cartMapper.UpdCartByStateAndU_idAndC_id(cart);
// 更新销量
int a = DosaveP_sum("支付中", cart);
// 2.生成总订单 负责控制物流,计算多个购物清单总价
int i = orderMapper.InsOrder(order);
}
// 3.更新商品库存及销量情况
return i1 + 1;
}
@Override
public int UdpOrder(Order order) {
return orderMapper.UdpOrder(order);
}
// 更新销量
private int DosaveP_sum(String s, Cart cart) {
// 普通订单
List<Cart> carts = null;
cart.setCart_state(s);
// 购物车订单
if (s.equals("购物车支付中")) {
carts = cartMapper.Sel_CartCar_All_state_uid(cart);
} else {
carts = cartMapper.SelCartByU_idAndState(cart);
}
try {
for (Cart c : carts
) {
// 获取商品id
Integer cart_p_id = c.getCart_p_id();
// 获取清单购买数量
Integer cart_sum = c.getCart_sum();
// 获取原商品
Product product1 = productMapper.SelProductByPid(cart_p_id);
// 更新商品销量
Product product = new Product();
product.setP_id(cart_p_id);
product.setP_sum(product1.getP_sum() + cart_sum);
int i = productMapper.UpdProById(product);
}
} catch (Exception e) {
return 0;
}
return 1;
}
//遍历清单 针对一次购买多个商品,生成订单 根据不同卖家,生成对应卖家的订单。方便卖家发货
private void eachCart(List<Cart> carts, Cart cartA, Order order,String msg) {
// 设置Order_id
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
cartA.setCart_state("待发货");
// 建立map表 键为 卖家id 值为 清单ID
HashMap<Integer, String> hashMap = new HashMap<>();
int sum = 0;
for (Cart c :
carts) {
Integer seller_id = c.getSeller_id();
Integer cart_id = c.getCart_id();
if (sum == 0) {
// 累计 避免重复 此if块 只运行一次
sum++;
// 1.先生成总订单 负责控制物流,计算多个购物清单总价
order.setOrder_uuid(uuid);
order.setOrder_cardid(seller_id);
int i = orderMapper.InsOrder(order);
// 2. 购物车订单 通过 id更新
cartA.setCart_id(cart_id);
cartA.setCart_order_id(uuid);
if (msg.equals("购物车")){
cartMapper.UpdCart_Car(cartA);
}else {
cartMapper.UpdCartByStateAndU_idAndC_id(cartA);
}
// 把卖家id 和订单id 存入map
hashMap.put(seller_id, uuid);
// sum累计 避免重复
}
for (Integer key : hashMap.keySet()
) {
// 判断是否为不同卖家
if (key == seller_id) {
// 绑定清单
// 更新 清单
String s = hashMap.get(seller_id);
cartA.setCart_order_id(s);
cartA.setCart_id(cart_id);
if (msg.equals("购物车")){
cartMapper.UpdCart_Car(cartA);
}else {
cartMapper.UpdCartByStateAndU_idAndC_id(cartA);
}
} else {
// 生成新 order
// 1.先生成总订单 负责控制物流,计算多个购物清单总价
order.setOrder_uuid(uuid + cart_id);
order.setOrder_cardid(seller_id);
int i = orderMapper.InsOrder(order);
hashMap.put(seller_id, uuid + cart_id);
// 绑定清单
// 更新 清单
String s = hashMap.get(seller_id);
cartA.setCart_order_id(s);
cartA.setCart_id(cart_id);
if (msg.equals("购物车")){
cartMapper.UpdCart_Car(cartA);
}else {
cartMapper.UpdCartByStateAndU_idAndC_id(cartA);
}
}
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于springboot+vue的web电子购物网站项目源码+数据库(95分以上高分毕业设计)该项目是个人毕业设计项目源码,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!!!评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于springboot+vue的web电子购物网站项目源码+数据库(95分以上高分毕业设计)该项目是个人毕业设计项目源码,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!!!评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于springboot+vue的web电子购物网站项目源码+数据库(95分以上高分毕业设计)该项目是个人毕业设计项目源码,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!!!评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。
资源推荐
资源详情
资源评论
收起资源包目录
基于springboot+vue的web电子购物网站项目源码+数据库(95分以上高分毕业设计) (334个子文件)
mvnw.cmd 6KB
bootstrap.css 143KB
bootstrap.min.css 118KB
bootstrap.min.css 118KB
style.css 39KB
font-awesome.min.css 32KB
font-awesome.min.css 32KB
bootstrap-theme.css 26KB
bootstrap-theme.min.css 23KB
style.css 7KB
nouislider.min.css 3KB
slick-theme.css 3KB
slick.css 2KB
fontawesome-webfont.eot 162KB
fontawesome-webfont.eot 162KB
glyphicons-halflings-regular.eot 20KB
slick.eot 2KB
.gitignore 333B
product.html 33KB
index.html 32KB
CartOut.html 24KB
CheckOut.html 24KB
CheckOut_pay.html 22KB
orderLog.html 19KB
Order.html 18KB
manage.html 16KB
my.html 13KB
address.html 13KB
love.html 12KB
success.html 11KB
index.html 4KB
maven-wrapper.jar 50KB
OrderServiceImp.java 7KB
InsertProduct.java 6KB
CheckOutController.java 6KB
UpdateProduct.java 5KB
CartController.java 5KB
OrderController.java 5KB
MavenWrapperDownloader.java 5KB
ShiroConfig.java 4KB
LoveController.java 3KB
MainIndex.java 3KB
DelProduct.java 3KB
WebshopApplicationTests.java 3KB
UserRealm.java 2KB
AddressController.java 2KB
RegisterController.java 2KB
ManageController.java 2KB
LoginController.java 2KB
BuyController.java 2KB
MyController.java 2KB
ProductController.java 2KB
OrderLogController.java 2KB
CartOutController.java 2KB
CartServiceImp.java 1KB
ProductServerImp.java 1KB
AddressServiceImp.java 1KB
LoveServiceImp.java 1KB
Static.java 1KB
Cart.java 908B
UserServiceImp.java 871B
Order.java 797B
Index.java 793B
Card.java 639B
Product.java 633B
LoveMapper.java 622B
CartMapper.java 588B
SuccessController.java 575B
AddressMapper.java 554B
ProductMapper.java 528B
Images.java 507B
OrderManageController.java 493B
CartService.java 478B
User.java 477B
AddressService.java 474B
UserMapper.java 463B
WebshopApplication.java 456B
ProductServer.java 433B
OrderService.java 425B
LoveService.java 414B
ImgMapper.java 399B
OrderMapper.java 398B
Address.java 364B
Love.java 314B
Dict.java 297B
UserService.java 227B
35bdcb5eab954445a48c2c278ecdcdb31.jpg 142KB
94734f752ccc4c5e8f00ffd7a5ff6fde1.jpg 142KB
d4eb8ae897944f0f80795aa949832c143.jpg 118KB
d5048320ee88475cab722ff30b5393da3.jpg 118KB
5031447b9b0141d4bb9dfa0f533141853.jpg 118KB
b462899c72284336bef776bb23b7791b4.jpg 111KB
0d6d06cfdd2f4bd28d3d3facc2df67a43.jpg 107KB
0322c0b4e5d04f5d9689360669ae0dc02.jpg 107KB
28d2d300ceba4e87b5423eb8bc25f7d54.jpg 106KB
9b09e688c42e41b7b4f0c81ddf7b68f24.jpg 106KB
35bdcb5eab954445a48c2c278ecdcdb32.jpg 104KB
94734f752ccc4c5e8f00ffd7a5ff6fde2.jpg 104KB
ebd99ddb844e401c8550287bcd2ddc881.jpg 103KB
e012cca610f94efcab2d9723de72e7011.jpg 103KB
共 334 条
- 1
- 2
- 3
- 4
资源评论
盈梓的博客
- 粉丝: 9363
- 资源: 2288
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 电线线路残旧残坏检测22-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar
- 基于抽象链条推理的大型语言模型高效工具使用方法研究
- Discord Clone 使用 React、ReactQuery、Tailwindcss、Redux、Socket IO、NodeJS、Express、MongoDB 和 Redis .zip
- 任务向量与算术操作:一种高效模型编辑方法
- 基于亚控KingFusion平台的燃气云平台应用
- decrypt-redis-2.8 源代码注释.zip
- 4511895645616541
- 基于工业数据库的油气田生产数据采集与管理应用
- CVE-2014-4210+Redis 未授权访问.zip
- 01111111111
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功