with($with)->where('assemble_bill_id', '=', $assemble_bill_id)->find(); } /** * 关联活动表 */ public function activity() { return $this->belongsTo('Active', 'assemble_activity_id', 'assemble_activity_id'); } /** * 关联创建者 */ public function user() { return $this->belongsTo('app\\common\\model\\user\\User', 'creator_id', 'user_id') ->field(['user_id', 'nickName', 'avatarUrl']); } /** * 关联拼团成员表 */ public function billUser() { return $this->hasMany('app\\common\\model\\plus\\assemble\\BillUser', 'assemble_bill_id', 'assemble_bill_id') ->field(['user_id','assemble_bill_id']) ->order(['create_time' => 'asc']); } /** * 新拼团订单 */ public function newOrder($product, $sku) { $active = Active::detail($sku['assemble_activity_id']); //插入主表 $this->save([ 'assemble_product_id' => $sku['assemble_product_id'], 'actual_people' => 1, 'creator_id' => $product['user_id'], 'assemble_activity_id' => $sku['assemble_activity_id'], 'end_time' => time() + $active['together_time'] * 60 * 60, 'app_id' => $active['app_id'], ]); //插入拼团记录表 $bill_user_model = new BillUser(); $bill_user_model->save([ 'assemble_bill_id' => $this['assemble_bill_id'], 'order_id' => $product['order_id'], 'user_id' => $product['user_id'], 'is_creator' => 1, 'app_id' => $active['app_id'], ]); //拼团订单商品 $product->save([ 'bill_source_id' => $this['assemble_bill_id'] ]); //更新主订单表拼团状态 (new OrderModel)->where('order_id', '=', $product['order_id']) ->save([ 'assemble_status' => 10 ]); } /** * 参团订单 */ public function updateOrder($product, $sku) { //更新拼团人数 $this->where('assemble_bill_id', '=', $this['assemble_bill_id'])->inc('actual_people', 1)->update(); //插入拼团记录表 $bill_user_model = new BillUser(); $bill_user_model->save([ 'assemble_bill_id' => $this['assemble_bill_id'], 'order_id' => $product['order_id'], 'user_id' => $product['user_id'], 'is_creator' => 0, 'app_id' => $product['app_id'], ]); //开团信息 $asemble_product = Product::detail($sku['assemble_product_id']); //判断拼团是否成功 if($this['actual_people'] + 1 >= $asemble_product['assemble_num']){ $this->save([ 'status' => 20 ]); $order_list = (new BillUserModel) ->field(['order_id']) ->where('assemble_bill_id', '=', $this['assemble_bill_id']) ->select(); $orderIds = helper::getArrayColumn($order_list, 'order_id'); //更新主订单表拼团状态 (new OrderModel)->where('order_id', 'in', $orderIds) ->save([ 'assemble_status' => 20 ]); // 是否是虚拟商品 $order = OrderModel::detail($product['order_id']); if($order['delivery_type']['value'] == DeliveryTypeEnum::NO_EXPRESS){ (new OrderModel)->where('order_id', 'in', $orderIds) ->save([ 'assemble_status' => 20, 'delivery_status' => 20, 'delivery_time' => time(), 'receipt_status' => 20, 'receipt_time' => time(), 'order_status' => 30 ]); } // 拼团订单打印 foreach($orderIds as $orderId){ (new OrderPrinterService)->printTicket(OrderModel::detail($orderId)); } }else{ //更新主订单表拼团状态 (new OrderModel)->where('order_id', '=', $product['order_id']) ->save([ 'assemble_status' => 10 ]); } } }