123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- <?php
- namespace app\admin\model\shopro\order;
- use traits\model\SoftDelete;
- use app\admin\model\shopro\Common;
- use app\admin\model\shopro\user\User;
- //售后
- class Aftersale extends Common
- {
- use SoftDelete;
- protected $name = 'shopro_order_aftersale';
- protected $deleteTime = 'deletetime';
- // 追加属性
- protected $append = [
- 'type_text',
- 'btns',
- 'dispatch_status_text',
- 'aftersale_status_text',
- 'aftersale_status_desc',
- 'refund_status_text',
- 'status_text',
- //物流状态
- 'express_status_text',
- 'refund_type_text',
- ];
- public function expressStatusList()
- {
- return [
- 'noinfo' => '暂无信息',
- 'collect' => '已揽件',
- 'transport' => '运输中',
- 'delivery' => '派送中',
- 'signfor' => '已签收',
- 'refuse' => '用户拒收',
- 'difficulty' => '问题件',
- 'invalid' => '无效件',
- 'timeout' => '超时单',
- 'fail' => '签收失败',
- 'back' => '退回',
- ];
- }
- public function refundTypeList()
- {
- return [
- 'back' => '原路返回',
- 'money' => '余额',
- ];
- }
- // 发货状态
- const DISPATCH_STATUS_REFUSE = -1; // 拒收
- const DISPATCH_STATUS_NOSEND = 0; // 未发货
- const DISPATCH_STATUS_SENDED = 1; // 已发货
- const DISPATCH_STATUS_GETED = 2; // 已收货
- // 售后状态
- const AFTERSALE_STATUS_CANCEL = -2; // 已取消
- const AFTERSALE_STATUS_REFUSE = -1; // 拒绝
- const AFTERSALE_STATUS_NOOPER = 0; // 未处理
- const AFTERSALE_STATUS_ING = 1; // 同意并售后中
- const AFTERSALE_STATUS_COMPLETED = 2; // 售后完成
- // 退款状态
- const REFUND_STATUS_NOREFUND = 0; // 未退款
- const REFUND_STATUS_AGREE = 1; // 已退款
- public function typeList()
- {
- return [
- 'refund' => '仅退款',
- 'return' => '退货退款',
- 'other' => '其他'
- ];
- }
- public function dispatchStatusList()
- {
- return [
- self::DISPATCH_STATUS_REFUSE => '已拒收',
- self::DISPATCH_STATUS_NOSEND => '未发货',
- self::DISPATCH_STATUS_SENDED => '已发货',
- self::DISPATCH_STATUS_GETED => '已收货'
- ];
- }
- public function aftersaleStatusList()
- {
- return [
- self::AFTERSALE_STATUS_CANCEL => '已取消',
- self::AFTERSALE_STATUS_REFUSE => '拒绝',
- self::AFTERSALE_STATUS_NOOPER => '已申请',
- self::AFTERSALE_STATUS_ING => '售后处理中', //售后处理中
- self::AFTERSALE_STATUS_COMPLETED => '售后完成'
- ];
- }
- public function aftersaleStatusDescList()
- {
- return [
- self::AFTERSALE_STATUS_CANCEL => '买家取消了售后申请',
- self::AFTERSALE_STATUS_REFUSE => '卖家拒绝了售后申请',
- self::AFTERSALE_STATUS_NOOPER => '买家申请了售后,等待同意',
- self::AFTERSALE_STATUS_ING => '售后正在处理中',
- self::AFTERSALE_STATUS_COMPLETED => '售后已完成'
- ];
- }
- public function refundStatusList()
- {
- return [
- self::REFUND_STATUS_NOREFUND => '未退款',
- self::REFUND_STATUS_AGREE => '同意退款',
- ];
- }
- // 已取消
- public function scopeCancel($query)
- {
- return $query->where('aftersale_status', self::AFTERSALE_STATUS_CANCEL);
- }
- // 已拒绝
- public function scopeRefuse($query)
- {
- return $query->where('aftersale_status', self::AFTERSALE_STATUS_REFUSE);
- }
- public function scopeNoOper($query)
- {
- return $query->where('aftersale_status', self::AFTERSALE_STATUS_NOOPER);
- }
- // 处理中
- public function scopeIng($query)
- {
- return $query->where('aftersale_status', self::AFTERSALE_STATUS_ING);
- }
- // 处理完成
- public function scopeCompleted($query)
- {
- return $query->where('aftersale_status', self::AFTERSALE_STATUS_COMPLETED);
- }
- // 需要处理的,包含未处理,和处理中的,个人中心显示售后数量
- public function scopeNeedOper($query)
- {
- return $query->whereIn('aftersale_status', [self::AFTERSALE_STATUS_NOOPER, self::AFTERSALE_STATUS_ING]);
- }
- /**
- * 后台售后列表,主表是 order 表时不用用 scope 了
- *
- * @param [type] $scope
- * @return void
- */
- public static function getScopeWhere($scope)
- {
- $where = [];
- switch ($scope) {
- case 'cancel':
- $where['aftersale_status'] = self::AFTERSALE_STATUS_CANCEL;
- break;
- case 'refuse':
- $where['aftersale_status'] = self::AFTERSALE_STATUS_REFUSE;
- break;
- case 'nooper':
- $where['aftersale_status'] = self::AFTERSALE_STATUS_NOOPER;
- break;
- case 'ing':
- $where['aftersale_status'] = self::AFTERSALE_STATUS_ING;
- break;
- case 'completed':
- $where['aftersale_status'] = self::AFTERSALE_STATUS_COMPLETED;
- break;
- }
- return $where;
- }
- // 可以取消
- public function scopeCanCancel($query)
- {
- // 未处理,处理中,可以取消
- return $query->where('aftersale_status', 'in', [
- self::AFTERSALE_STATUS_NOOPER,
- self::AFTERSALE_STATUS_ING
- ]);
- }
- // 可以操作
- public function scopeCanOper($query)
- {
- // 未处理,处理中,可以 操作退款,拒绝,完成
- return $query->where('aftersale_status', 'in', [
- self::AFTERSALE_STATUS_NOOPER,
- self::AFTERSALE_STATUS_ING
- ]);
- }
- // 可以删除
- public function scopeCanDelete($query)
- {
- // 取消,拒绝,完成可以删除
- return $query->where('aftersale_status', 'in', [
- self::AFTERSALE_STATUS_CANCEL,
- self::AFTERSALE_STATUS_REFUSE,
- self::AFTERSALE_STATUS_COMPLETED
- ]);
- }
- public function getDispatchStatusTextAttr($value, $data)
- {
- $value = $value ?: ($data['dispatch_status'] ?? null);
- $list = $this->dispatchStatusList();
- return isset($list[$value]) ? $list[$value] : '';
- }
- public function getBtnsAttr($value, $data)
- {
- $btns = [];
- switch ($data['aftersale_status']) {
- case self::AFTERSALE_STATUS_NOOPER:
- case self::AFTERSALE_STATUS_ING:
- $btns[] = 'cancel';
- break;
- case self::AFTERSALE_STATUS_CANCEL:
- case self::AFTERSALE_STATUS_REFUSE:
- case self::AFTERSALE_STATUS_COMPLETED:
- $btns[] = 'delete';
- break;
- }
- return $btns;
- }
-
- public function getAftersaleStatusTextAttr($value, $data)
- {
- $value = $value ?: ($data['aftersale_status'] ?? null);
- $list = $this->aftersaleStatusList();
- return isset($list[$value]) ? $list[$value] : '';
- }
-
- public function getAftersaleStatusDescAttr($value, $data)
- {
- $value = $value ?: ($data['aftersale_status'] ?? null);
- $list = $this->aftersaleStatusDescList();
- return isset($list[$value]) ? $list[$value] : '';
- }
- public function getExpressStatusTextAttr($value, $data){
- $value = $value ?: ($data['express_status'] ?? null);
- $list = $this->expressStatusList();
- return isset($list[$value]) ? $list[$value] : '';
- }
- public function getRefundStatusTextAttr($value, $data)
- {
- $value = $value ?: ($data['refund_status'] ?? null);
- $list = $this->refundStatusList();
- return isset($list[$value]) ? $list[$value] : '';
- }
- public function getRefundTypeTextAttr($value, $data)
- {
- $value = $value ?: ($data['refund_type'] ?? null);
- $list = $this->refundTypeList();
- return isset($list[$value]) ? $list[$value] : '';
- }
- /**
- * 获取建议退款金额,不考虑剩余可退款金额是否够退
- *
- * @param string $value
- * @param array $data
- * @return string
- */
- public function getSuggestRefundFeeAttr($value, $data)
- {
- $current_goods_amount = bcmul($data['goods_price'], (string)$data['goods_num'], 2);
- $total_amount = bcadd($current_goods_amount, $data['dispatch_fee'], 2);
- $suggest_refund_fee = bcsub($total_amount, $data['discount_fee'], 2); // (商品金额 + 运费金额) - 总优惠(活动,优惠券,包邮优惠)
- return $suggest_refund_fee;
- }
- public function logs()
- {
- return $this->hasMany(AftersaleLog::class, 'order_aftersale_id', 'id')->order('id', 'desc');
- }
- public function user()
- {
- return $this->belongsTo(User::class, 'user_id');
- }
- public function order()
- {
- return $this->belongsTo(Order::class, 'order_id');
- }
- public function expresslogs()
- {
- return $this->hasMany(AftersaleExpressLog::class, 'order_aftersale_id', 'id')->order('id', 'desc');
- }
- }
|