OrderStatus.php
4.6 KB
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
<?php
namespace addons\groupon\library\traits\model\order;
use addons\groupon\model\ActivityGroupon;
use addons\groupon\library\Wechat;
use addons\groupon\model\Order;
use addons\groupon\model\OrderItem;
use think\Cache;
trait OrderStatus
{
public function getStatusNameAttr($value, $data)
{
return $this->getStatus($data, 'status_name');
}
public function getStatusDescAttr($value, $data)
{
return $this->getStatus($data, 'status_desc');
}
public function getBtnsAttr($value, $data)
{
return $this->getStatus($data, 'btns');
}
// 获取订单状态
public function getStatusCodeAttr($value, $data)
{
$status_code = '';
switch ($data['status']) {
case Order::STATUS_CANCEL:
$status_code = 'cancel'; // 订单已取消
break;
case Order::STATUS_INVALID:
$status_code = 'invalid'; // 订单交易关闭
break;
case Order::STATUS_NOPAY:
$status_code = 'nopay'; // 订单等待支付
break;
case Order::STATUS_PAYED:
// 根据 item 获取支付后的状态信息
$status_code = $this->getPayedStatusCode($data);
break;
case Order::STATUS_FINISH:
$status_code = 'finish';
break;
}
return $status_code;
}
/**
* 获取支付成功之后的子状态
*/
public function getPayedStatusCode($data)
{
$status_code = '';
// 循环判断 item 状态
$itemStatusCode = [];
foreach ($this->item as $key => $item) {
// 获取 item status
$itemStatusCode[] = (new OrderItem)->getBaseStatusCode($item->toArray(), 'order');
}
// 取出不重复不为空的 status_code
$statusCodes = array_unique(array_filter($itemStatusCode));
if (in_array('commented', $statusCodes)) {
// 存在已评价,就是已评价
$status_code = 'commented'; // 走这里,说明只评价了一部分
} else if (in_array('nocomment', $statusCodes)) {
// 存在待评价,就是待评价
$status_code = 'nocomment';
} else if (in_array('noget', $statusCodes) || in_array('nosend', $statusCodes) || in_array('noarrive', $statusCodes)) {
if (get_class($this) == 'addons\groupon\model\Order') {
// 前台接口,优先 待收货
if (in_array('noget', $statusCodes)) {
// 存在待收货,就是待收货
$status_code = 'noget';
} else if (in_array('noarrive', $statusCodes)) {
// 存在门店待接收,就是待接收
$status_code = 'noarrive';
} else {
$status_code = 'nosend';
}
} else {
// 后台,优先待发货
if (in_array('nosend', $statusCodes)) {
// 存在待发货就是待发货
$status_code = 'nosend';
} else if (in_array('noarrive', $statusCodes)) {
// 存在门店待接收,就是待接收
$status_code = 'noarrive';
} else {
$status_code = 'noget';
}
}
} else if (in_array('refund_finish', $statusCodes)) {
// 都在退款完成
$status_code = 'refund_finish';
} else if (in_array('refund_ing', $statusCodes)) {
// 都在退款中
$status_code = 'refund_ing';
} // 售后都不在总状态显示
$ext_arr = json_decode($data['ext'], true);
return $status_code;
}
/**
* 处理未支付 item status_code
* 查询列表 item status_code 不关联订单表,使用这个方法进行处理
*/
public static function setOrderItemStatusByOrder($order) {
$order = is_array($order) ? $order : $order->toArray();
foreach ($order['item'] as $key => &$item) {
if (!in_array($order['status'], [Order::STATUS_PAYED, Order::STATUS_FINISH])) {
// 未支付,status_code = 订单的 status_code
$item['status_code'] = $order['status_code'];
$item['status_name'] = '';
$item['status_text'] = '';
$item['status_desc'] = '';
$item['btns'] = [];
}
}
return $order;
}
}