quanwei
2025-11-21 1db9a4130699636cabe7e0c9f7f15d004aadada0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<?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;
/**
 * 参与记录模型
 */
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
                    ]);
            }
        }else{
            //更新主订单表拼团状态
            (new OrderModel)->where('order_id', '=', $product['order_id'])
                ->save([
                    'assemble_status' => 10
                ]);
        }
    }
}