| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- <?php
- namespace app\common\model\plus\assemble;
- use app\common\enum\settings\DeliveryTypeEnum;
- use app\common\library\helper;
- use app\common\model\BaseModel;
- use app\common\model\order\Order as OrderModel;
- use app\common\model\plus\assemble\BillUser as BillUserModel;
- use app\common\service\order\OrderPrinterService;
- /**
- * 参与记录模型
- */
- class Bill extends BaseModel
- {
- protected $name = 'assemble_bill';
- protected $pk = 'assemble_bill_id';
- /**
- * 详情
- */
- public static function detail($assemble_bill_id, $with = [])
- {
- return (new static())->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
- ]);
- }
- }
- }
|