/*** @Description: 支付方式 枚举*/
public enum PayMethod {WEIXIN(1, "微信"),ALIPAY(2, "支付宝");public final Integer type;public final String value;PayMethod(Integer type, String value){this.type = type;this.value = value;}}
/*** 用于创建订单相关信息* @param submitOrderBO*/
public OrderVO createOrder(SubmitOrderBO submitOrderBO);
@Transactional(propagation = Propagation.REQUIRED)
@Override
public OrderVO createOrder(SubmitOrderBO submitOrderBO) {String userId = submitOrderBO.getUserId();String addressId = submitOrderBO.getAddressId();String itemSpecIds = submitOrderBO.getItemSpecIds();Integer payMethod = submitOrderBO.getPayMethod();String leftMsg = submitOrderBO.getLeftMsg();// 包邮费用设置为0Integer postAmount = 0;String orderId = sid.nextShort();UserAddress address = addressService.queryUserAddres(userId, addressId);// 1. 新订单数据保存Orders newOrder = new Orders();newOrder.setId(orderId);newOrder.setUserId(userId);newOrder.setReceiverName(address.getReceiver());newOrder.setReceiverMobile(address.getMobile());newOrder.setReceiverAddress(address.getProvince() + " "+ address.getCity() + " "+ address.getDistrict() + " "+ address.getDetail());//        newOrder.setTotalAmount();
//        newOrder.setRealPayAmount();newOrder.setPostAmount(postAmount);newOrder.setPayMethod(payMethod);newOrder.setLeftMsg(leftMsg);newOrder.setIsComment(YesOrNo.NO.type);newOrder.setIsDelete(YesOrNo.NO.type);newOrder.setCreatedTime(new Date());newOrder.setUpdatedTime(new Date());// 2. 循环根据itemSpecIds保存订单商品信息表String itemSpecIdArr[] = itemSpecIds.split(",");Integer totalAmount = 0;    // 商品原价累计Integer realPayAmount = 0;  // 优惠后的实际支付价格累计for (String itemSpecId : itemSpecIdArr) {// TODO 整合redis后,商品购买的数量重新从redis的购物车中获取int buyCounts = 1;// 2.1 根据规格id,查询规格的具体信息,主要获取价格ItemsSpec itemSpec = itemService.queryItemSpecById(itemSpecId);totalAmount += itemSpec.getPriceNormal() * buyCounts;realPayAmount += itemSpec.getPriceDiscount() * buyCounts;// 2.2 根据商品id,获得商品信息以及商品图片String itemId = itemSpec.getItemId();Items item = itemService.queryItemById(itemId);String imgUrl = itemService.queryItemMainImgById(itemId);// 2.3 循环保存子订单数据到数据库String subOrderId = sid.nextShort();OrderItems subOrderItem = new OrderItems();subOrderItem.setId(subOrderId);subOrderItem.setOrderId(orderId);subOrderItem.setItemId(itemId);subOrderItem.setItemName(item.getItemName());subOrderItem.setItemImg(imgUrl);subOrderItem.setBuyCounts(buyCounts);subOrderItem.setItemSpecId(itemSpecId);subOrderItem.setItemSpecName(itemSpec.getName());subOrderItem.setPrice(itemSpec.getPriceDiscount());orderItemsMapper.insert(subOrderItem);// 2.4 在用户提交订单以后,规格表中需要扣除库存itemService.decreaseItemSpecStock(itemSpecId, buyCounts);}newOrder.setTotalAmount(totalAmount);newOrder.setRealPayAmount(realPayAmount);ordersMapper.insert(newOrder);// 3. 保存订单状态表OrderStatus waitPayOrderStatus = new OrderStatus();waitPayOrderStatus.setOrderId(orderId);waitPayOrderStatus.setOrderStatus(OrderStatusEnum.WAIT_PAY.type);waitPayOrderStatus.setCreatedTime(new Date());orderStatusMapper.insert(waitPayOrderStatus);// 4. 构建商户订单,用于传给支付中心MerchantOrdersVO merchantOrdersVO = new MerchantOrdersVO();merchantOrdersVO.setMerchantOrderId(orderId);merchantOrdersVO.setMerchantUserId(userId);merchantOrdersVO.setAmount(realPayAmount + postAmount);merchantOrdersVO.setPayMethod(payMethod);// 5. 构建自定义订单voOrderVO orderVO = new OrderVO();orderVO.setOrderId(orderId);orderVO.setMerchantOrdersVO(merchantOrdersVO);return orderVO;
}
/*** 根据用户id和地址id,查询具体的用户地址对象信息* @param userId* @param addressId* @return*/
public UserAddress queryUserAddres(String userId, String addressId);
@Transactional(propagation = Propagation.SUPPORTS)
@Override
public UserAddress queryUserAddres(String userId, String addressId) {UserAddress singleAddress = new UserAddress();singleAddress.setId(addressId);singleAddress.setUserId(userId);return userAddressMapper.selectOne(singleAddress);
}

创建订单 - 填充新订单数据相关推荐

  1. 如何在原先的jqgrid中填充新的数据_如何提升NX工程师的逆向能力与速度

    前言: 逆向工程造型对于NX软件来讲按旧的思路来造型设计已经远远不能达到市场上的需要,不管是从速度或者是从质量上来讲都很难满足,在这一章节里带大家一起来认识一下NX功能的另一面. 一.STL档案小平面 ...

  2. 如何在原先的jqgrid中填充新的数据_自然人电子税务局(扣缴端)数据如何恢复?申税小微教您轻松搞定...

    自然人电子税务局 数据如何恢复? 申税小微教您轻松搞定! 财务小王:申税小微,我们公司换了新电脑,重新安装的自然人电子税务局(扣缴端)上没有人员采集信息和历史申报数据该怎么办? 申税小微: 1.可以在 ...

  3. 畅捷通T+与畅捷通T+对接集成批量新增销售订单连通存货批量创建(批量新增销售订单)

    畅捷通T+与畅捷通T+对接集成批量新增销售订单连通存货批量创建(批量新增销售订单) 对接系统畅捷通T+ "T+"是一款灵动.智慧.时尚的互联网管理软件,主要针对中小型工贸和商贸企业 ...

  4. php新订单提醒代码,PHP怎么实现新订单提醒功能

    PHP实现新订单提醒功能的方法:首先实现ajax轮询:然后下载workerman:接着连接服务端,代码为"var socket = io('http://www.tp5_test.com:2 ...

  5. 视频号小店新订单如何实时同步企业微信

    随着直播带货的火热,视频号小店也为商家提供商品信息服务.商品交易,支持商家在视频号运营电商,许多企业也将产品的零售路径渗透至视频号小店中了.如果我们希望在视频号小店接收到订单后,能尽快及时发货,给用户 ...

  6. Code First开发系列之管理数据库创建,填充种子数据以及LINQ操作详解

    本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LINQ to Entities 使用LINQ to Entities操作实体 L ...

  7. 8天掌握EF的Code First开发系列之3 管理数据库创建,填充种子数据以及LINQ操作详解...

    本文出自8天掌握EF的Code First开发系列,经过自己的实践整理出来. 本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LI ...

  8. WooCommerce入门指南:添加新订单第1部分

    在上一篇文章中,我介绍了在线商店所有者如何跟踪和管理客户下的订单. 如果您想手动下订单怎么办? 这是今天文章的主题,我将在其中解释如何在WooCommerce中添加新订单. 添加新订单 要在WooCo ...

  9. SAP母子订单(汇总订单)详解测试_SAP刘梦_新浪博客

    汇总订单:一个在几个生产层次上链接计划订单或生产订单的多层结构.仅为结构中的最上面一个订单执行库存移动.每个订单有一个单独的订单号. 汇总订单(母子订单)优点 1.生产工艺的集成视图 汇总订单允许你在 ...

最新文章

  1. JBPM4.4_jBPM4.4应用(与Spring集成自行控制事务等)
  2. 再谈STM32的CAN过滤器-bxCAN的过滤器的4种工作模式以及使用方法总结
  3. 曾宝仪和机器人_你愿意和机器人成为终身伴侣吗?
  4. linux通常使用的 rc 和 .(点)文件
  5. mysql insert 不需要日志_MySQL数据库性能优化(1)「转」
  6. 阿里云峰会|阿里云数据中台重磅升级后拟扶持100万家企业数智化
  7. 清理linux 服务器的命令行,使用Linux上的Magic SysRq键修复冻结的X服务器,清理重新启动并运行其他低级命令 | MOS86...
  8. laravel运用redis存储数据和读取的方式
  9. Linux内核源代码分析——vmstat核心代码注释
  10. 安卓版App开发心得
  11. 怎么从视频文件中提取音频?
  12. 【元胞自动机】基于matlab元胞自动机收费站交通问题【含Matlab源码 357期】
  13. Quartz 定时任务 cron 表达式详解
  14. win7计算机摄像头怎么打开,win7的摄像头在哪里打开 怎么打开win7摄像头
  15. Smart Git Assume Unchanged
  16. 用人工智能做广告,它成为第一家走上IPO的人工智能企业
  17. php vip卡,vip.php
  18. Python matplotlib绘制函数曲线
  19. pyinstaller 打包内置文件,ico文件内置
  20. 罗升阳:那两年炼就的Android内功修养(转载老罗的)

热门文章

  1. 转再次写给我们这些浮躁的程序员
  2. WEBBASE篇: 第五篇, CSS知识3
  3. JavaScript:事件对象Event和冒泡
  4. OpenID 和 OAuth 的区别及第三方登录的安全隐患分析
  5. HDU-1269 Tarjan求强连通分量,模板题
  6. 字符串处理(POJ1782)
  7. 浣溪沙·过杜甫草堂有感
  8. Android联系人Contacts详解
  9. Collect proper diagnostic data is very important
  10. win7自带远程应用