OrderItemStatus.php
3.0 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
<?php
namespace addons\groupon\library\traits\model\order;
use addons\groupon\library\Wechat;
use addons\groupon\model\Order;
use addons\groupon\model\OrderItem;
use think\Cache;
trait OrderItemStatus
{
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');
}
// 获取订单 item status_code 状态,不进行订单是否支付判断,在这里查询数据库特别慢,
// 需要处理情况,订单列表:要正确显示item 状态,直接获取 item 的状态
public function getStatusCodeAttr($value, $data)
{
$status_code = 'null';
// $order = Order::withTrashed()->where('id', $data['order_id'])->find();
// if (!$order) {
// return $status_code;
// }
// // 判断是否支付
// if (!in_array($order->status, [Order::STATUS_PAYED, Order::STATUS_FINISH])) {
// return $order->status_code;
// }
// 获取 item status_code
return $this->getBaseStatusCode($data);
}
/**
* $data 当前 item 数据
* $from 当前 model 调用,还是 order 调用
*/
public function getBaseStatusCode($data, $from = 'item')
{
$status_code = 'null';
if (in_array($data['refund_status'], [OrderItem::REFUND_STATUS_OK, OrderItem::REFUND_STATUS_FINISH])) {
// 退款完成
return 'refund_finish';
}
if ($data['refund_status'] == OrderItem::REFUND_STATUS_ING) {
$status_code = 'refund_ing';
} else {
// 未退款
$status_code = $this->getNormalStatusCode($data);
}
return $status_code;
}
public function getNormalStatusCode($data)
{
// 获取未申请售后和退款时候的 status_code
$status_code = 'null';
switch ($data['dispatch_status']) {
case OrderItem::DISPATCH_STATUS_NOSEND:
$status_code = 'nosend';
break;
case OrderItem::DISPATCH_STATUS_READY:
$status_code = 'noarrive';
break;
case OrderItem::DISPATCH_STATUS_ARRIVE:
$status_code = 'noget';
break;
case OrderItem::DISPATCH_STATUS_GETED:
if ($data['comment_status'] == OrderItem::COMMENT_STATUS_NO) {
$status_code = 'nocomment';
} else {
$status_code = 'commented';
}
break;
}
return $status_code; // status_code
}
public function setExt($item, $field, $origin = [])
{
$newExt = array_merge($origin, $field);
$itemExt = $item['ext_arr'];
return array_merge($itemExt, $newExt);
}
}