首页 > 编程知识 正文

苹果待处理订单怎么取消,kafka延迟消息队列

时间:2023-05-03 10:07:39 阅读:12980 作者:3788

在日常业务逻辑中,订单通常是一对多的形式,即一个订单表对应多个商品和数据,在设计数据库时分为两个表:订单表和订单明细表。

但是,大多数业务逻辑也可能不参与订单的事务操作。 但是,并不排除使用(1)购票、每人每次活动只能购买一张票)2)只能购买特定商品、每天只能购买一次商品等小部分商业逻辑。 在这种情况下,在生成订单之前必须确定是否满足条件,如果满足条件则插入数据,如果不满足则进行回滚。在这次的业务场景中,优惠券的购买每人只能购买一次一种券。 用户在购买时可以以手机号码为基准为他人购买优惠券。 订单表(order ) :

idorder_sn (订单编号(num )数量(price )价格) status (状态) create _ time 120210807154023957152201628320621080715402108076

IDorder_ID (订单表id ) u_id (用户id ) g _ id (num )数量(price )价格) create _ time 11115162832068312111162832068

解决方案1 :

在预生成“订单详细信息表”数据时,可以先查询表的自增加ID是什么,然后再进行写入。 可以使用数据库附带的语句。 返回数组的Auto_increment字段是以下主键ID :

SHOW TABLE STATUS FROM库名称WHERE Name='表名称',但我认为这种方法不太可取。 如果是大合并,订单ID可能会发生错误。 是大合并,不是高合并。

解决方案2 :

执行事务处理操作时,使用函数array_walk组合数组,将插入订单表的ID合并为订单明细表的二维数组。 请注意它是二维数组。 下面的代码是这样使用的

插入的业务流程通常为:先插入订单表,拿到插入后的ID 然后在插入订单详情表,但是在需要预生成插入数据或者在插入一半发生了错误应该怎么办呢?

? phpnamespaceapphomecontroller; 用户应用程序公用模型订单; 用户应用程序公用模型订单信息; 用户应用程序公共模型用户; class Coupon extends Base{ /** *优惠券购买业务流程*注意; 代码中只写业务逻辑,省略了部分代码,直接复制&; 粘贴也不能使用! * /公共函数添加(() /接收请求的数据$data=input ) )数据/a ); //查询优惠券是否正常,避免非法提交$event_charge=【假装正在查询】if(empty($event_charge ) ) { return error _ jsorge } ); //根据提交的信息查询用户信息$ check=user :3360 check ([ ' mobile '=$ data (' mobile ' ) ]; //判断此人有无订单的$is_ticket_info=【假装正在调查】if (! empty($is_ticket_info ) ) { return error_json '购买者购买了这种类型的优惠券!' ); (/)写入订单表数据$insert_one=['order_sn'=date ) ' ymdhis ' ).rand ) 10000,99999 ),/订单编号' num'=',///写入订单明细表数据$insert_info=[ 'num'=1,/目前只能买到一个,所以' status'=1,//订单状态-1取消1等待付款2已付款3已核销' create '

'u_id'=>$check['id'], //用户ID 'g_id'=>$event_charge['id'],//优惠券ID ]; // 重要一步!先存到一个数组中,后期一起插入数据!!! $ticket_info_insert[] = array_merge($insert_info, $ticket_info); // 判断有没有为他人买优惠券 if(!empty($data['for_others'])){ $total_number = 1; //因为主订单最少有一个商品 $total_price = $event_charge['amount']; //主订单的价格 // 循环遍历为他人购票的数组 foreach ($data['for_others'] as $v){ // 查询优惠券是否正常,防止非法提交【同上】 // 根据提交的信息查询用户信息【同上】 // 判断这个人有没有订单【同上】 // 查询这个人的信息【同上】 // 写入到订单详情表 $ticket_info = [ 'u_id'=>$exist['id'], //用户ID 'g_id'=>$event_charge['id'],//优惠券ID ]; // 重要一步!继续存到数组中,后期一起插入数据!!! $ticket_info_insert[] = array_merge($insert_info, $ticket_info); } } // 启动事务 Db::startTrans(); try { // 写入订单表 $order = Order::create($insert_one); // 把订单表ID合并到订单详情表 $arr = ['order_id' => $order->id]; array_walk($ticket_info_insert, function(&$value,$key,$arr){ $value = array_merge($value, $arr); },$arr); // 写入订单详情表 (new OrderInfo)->saveAll($ticket_info_insert); // 修改订单表的商品数量和价格信息 if(!empty($data['for_others'])){ Order::update(['num'=>$total_number,'price'=>$total_price],['id'=>$order->id]); } // 提交事务 Db::commit(); } catch (Exception $e) { // 回滚事务 Db::rollback(); } // 成功返回订单id return success_json(['id'=>$order->id]); }}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。