苍穹外卖--开发记录day08

server/2024/10/22 23:53:56/

目录

  • 苍穹外卖day08
    • 一:导入地址簿代码
    • 二:用户下单
    • 三:微信支付

苍穹外卖day08

一:导入地址簿代码

很简单就是单表的增删改查,这里不做过多的赘述了;

二:用户下单

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里用户下单所涉及到的参数比较多啊,看起来比较复杂,但也就只是复杂点而已,理清楚了写起来不是很难:

controller:

@PostMapping("/submit")
public Result submit(@RequestBody OrdersSubmitDTO ordersSubmitDTO){OrderSubmitVO submitVO= orderService.submit(ordersSubmitDTO);return Result.success(submitVO);
}

这里接收了一个dto对象,然后返回一个vo对象;

service:

我们用户下单,首先是要将下单的数据插入到订单表,其次还要把菜品的数据插入到订单详细表,涉及到两个表,我们要使用事务:

@Override
@Transactional
public OrderSubmitVO submit(OrdersSubmitDTO ordersSubmitDTO) {//处理异常情况://1:地址簿为空:Long addressBookId = ordersSubmitDTO.getAddressBookId();AddressBook addressBook = addressBookMapper.getById(addressBookId);if (addressBook == null) {throw new OrderBusinessException(MessageConstant.ADDRESS_BOOK_IS_NULL);}//2:用户提交的订单数据为空:Long id = BaseContext.getCurrentId();List<ShoppingCart> shoppingCarts = shopCartMapper.selectById(id);if (shoppingCarts == null && shoppingCarts.size() == 0) {throw new ShoppingCartBusinessException(MessageConstant.SHOPPING_CART_IS_NULL);}//---------------------------------------------------------------------------Orders orders = new Orders();//拷贝信息BeanUtils.copyProperties(ordersSubmitDTO, orders);orders.setUserId(id);orders.setStatus(Orders.PENDING_PAYMENT);orders.setPayStatus(Orders.UN_PAID);orders.setOrderTime(LocalDateTime.now());//获取地址簿信息orders.setAddress(addressBook.getProvinceName() + addressBook.getCityName() +addressBook.getDistrictName() + addressBook.getDetail());orders.setPhone(addressBook.getPhone());orders.setConsignee(addressBook.getConsignee());// 获取订单号orders.setNumber(String.valueOf(System.currentTimeMillis()));// 获取用户名orderMapper.insert(orders);//获取订单细节信息//1:查询购物车:List<OrderDetail> orderDetails = new ArrayList<>();for (ShoppingCart shoppingCart : shoppingCarts) {OrderDetail orderDetail = new OrderDetail();orderDetail.setOrderId(orders.getId());BeanUtils.copyProperties(shoppingCart, orderDetail);orderDetails.add(orderDetail);}ordeiDetailMapper.insert(orderDetails);//清空购物车:shopCartMapper.clean(id);//封装OrderSubmitVO对象OrderSubmitVO submitVO = new OrderSubmitVO();submitVO.setId(orders.getId());submitVO.setOrderAmount(orders.getAmount());submitVO.setOrderTime(orders.getOrderTime());submitVO.setOrderNumber(orders.getNumber());return submitVO;
}

首先我们要进行业务异常的处理。一个是地址簿为空,一个是购物车为空,地址簿通过传入的addressid来关联地址簿表,然后购物车通过线程存储的用户id来查询,判断为空就抛出异常,然后就对订单数据进行赋值,首先从传入的对象直接进行拷贝,然后就是订单号是我们的当前时间的毫秒数,然后从之前查询出的地址簿中获取用户其他信息,然后对信息进行赋值,最后插入到订单表中:

这里还要注意一点,就是订单表的id值我们要进行回显,因为下面封装vo对象和插入订单细节时要适用:

@Options(useGeneratedKeys = true,keyProperty = "id")
@Insert("insert into sky_take_out.orders (number, status, user_id, address_book_id, order_time, " +"checkout_time, pay_method, pay_status, amount, remark, phone, address, user_name, consignee," +" cancel_reason, rejection_reason, cancel_time, estimated_delivery_time, " +"delivery_status, delivery_time, pack_amount, tableware_number, tableware_status) VALUES " +"(#{number}, #{status}, #{userId}, #{addressBookId}, #{orderTime}," +" #{checkoutTime}, #{payMethod}, #{payStatus}, #{amount}, #{remark}, #{phone}, " +"#{address}, #{userName}, #{consignee}, #{cancelReason}, #{rejectionReason}, " +"#{cancelTime}, #{estimatedDeliveryTime}, #{deliveryStatus}, #{deliveryTime}, " +"#{packAmount}, #{tablewareNumber}, #{tablewareStatus})")
void insert(Orders orders);

然后就是插入细节数据,细节数据中,其实和购物车中的属性一样,我们直接对购物车数据进行拷贝,外加上对订单id进行赋值,这是一个逻辑外键嘛,然后因为购物车是一个集合,一个购物车对应一个详细信息,所以我们使用集合来存储订单详细数据,最后将集合进行插入,使用动态sql-foreach:

  <insert id="insert">insert into sky_take_out.order_detail (name, image, order_id, dish_id, setmeal_id, dish_flavor, amount)VALUES<foreach collection="orderDetails" item="orderDetail" separator=",">(#{orderDetail.name}, #{orderDetail.image}, #{orderDetail.orderId}, #{orderDetail.dishId}, #{orderDetail.setmealId}, #{orderDetail.dishFlavor}, #{orderDetail.amount})</foreach>
</insert>

然后在对vo对象封装返回;

mapper:

见上;

三:微信支付

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里因为没有营业执照,我选择跳过支付选项,直接修改数据库数据:

具体参考:

三:微信支付

[外链图片转存中...(img-mPOnxzF1-1729592042858)]

[外链图片转存中...(img-mzOqhg8s-1729592042858)]

这里因为没有营业执照,我选择跳过支付选项,直接修改数据库数据:

具体参考:

苍穹外卖解决无法微信支付问题(超简单!)-CSDN博客


http://www.ppmy.cn/server/134028.html

相关文章

【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit(3)

1.问题描述&#xff1a; compatibleSdkVersion升级到5.0.0&#xff08;12&#xff09;之后&#xff0c;调用坐标系转换API&#xff1a;map.convertCoordinate(mapCommon.CoordinateType.WGS84, mapCommon.CoordinateType.GCJ02, { longitude: location.longitude, latitude:…

设计模式-模板方法

模板方法&#xff08;Template Method&#xff09;是行为型设计模式的一种&#xff0c;它在一个抽象类中定义了一个算法的骨架&#xff0c;而将算法的一些步骤延迟到子类中实现。通过这种方式&#xff0c;模板方法使得子类可以在不改变算法整体结构的情况下&#xff0c;重新定义…

最全面的Mac到手检查方向整理,新Mac如何自检

如果的Mac刚刚到手&#xff0c;那么一定要仔细检查&#xff0c;而不是直接就用&#xff0c;这样有问题也能及时返厂换新或者退款&#xff0c;不然时间长了发现问题后只能吃闷亏了 一、外观检查 1、整体外观 仔细查看 MacBook 的外壳是否有划痕、磕碰或凹陷。尤其注意机身的边…

PHP中的ReflectionClass常见用法

ReflectionClass是 PHP 中的一个类&#xff0c;它提供了有关类的信息的反射。 使用ReflectionClass可以在运行时获取关于类的各种信息&#xff0c;例如类的名称、方法、属性、注释等。 以下是一些常见的用法&#xff1a; 获取类的名称&#xff1a; $reflection new Reflec…

如何使用Java爬虫处理API接口返回的JSON数据?

处理API接口返回的JSON数据是Java爬虫开发中的一个常见任务。在Java中&#xff0c;有多个库可以帮助我们解析JSON数据&#xff0c;其中最流行的是Jackson和Gson。以下是使用这两个库处理JSON数据的基本步骤和示例代码。 使用Jackson处理JSON Jackson是一个功能强大的JSON处理…

【随记】吉布斯(Gibbs)不等式证明!

创建时间&#xff1a;2024-10-22 首发时间&#xff1a;2024-10-22 最后编辑时间&#xff1a;2024-10-22 作者&#xff1a;Geeker_LStar 顾名思义&#xff0c;【随记】这个专栏没有固定的主题。它可能会包含一些有趣的数学问题&#xff08;咳咳咳&#xff0c;论我的突发奇想&…

用PHP爬虫API,轻松获取taobao商品SKU信息

在电子商务的精细化运营中&#xff0c;SKU&#xff08;Stock Keeping Unit&#xff0c;库存单位&#xff09;信息是商品管理的核心。它不仅包含了商品的规格、价格、库存等关键数据&#xff0c;还直接影响到库存管理、价格策略和市场分析等多个方面。taobao作为中国最大的电子商…

Python数据分析——python基础回顾

纯个人python的一个小回忆笔记&#xff0c;当时假期花两天学的python&#xff0c;确实时隔几个月快忘光了&#xff0c;为了应付作业才回忆起来&#xff0c;不涉及太多基础&#xff0c;适用于有一定编程基础的参考回忆。 一、输入输出 【输入】 无提示语&#xff1a;【变量 in…