This repository has been archived on 2024-07-11. You can view files and clone it, but cannot push or open issues or pull requests.
yoshop/source/application/api/model/OrderRefund.php

171 lines
4.5 KiB
PHP
Raw Normal View History

2020-04-25 22:20:29 +08:00
<?php
namespace app\api\model;
use app\common\model\OrderRefund as OrderRefundModel;
/**
* 售后单模型
* Class OrderRefund
* @package app\api\model
*/
class OrderRefund extends OrderRefundModel
{
/**
* 隐藏字段
* @var array
*/
protected $hidden = [
'wxapp_id',
'update_time'
];
/**
* 追加字段
* @var array
*/
protected $append = [
'state_text', // 售后单状态文字描述
];
/**
* 售后单状态文字描述
* @param $value
* @param $data
* @return string
*/
public function getStateTextAttr($value, $data)
{
// 已完成
if ($data['status'] == 20) {
$text = [10 => '已同意退货并已退款', 20 => '已同意换货'];
return $text[$data['type']];
}
// 已取消
if ($data['status'] == 30) {
return '已取消';
}
// 已拒绝
if ($data['status'] == 10) {
// return '已拒绝';
return $data['type'] == 10 ? '已拒绝退货退款' : '已拒绝换货';
}
// 进行中
if ($data['status'] == 0) {
if ($data['is_agree'] == 0) {
return '等待审核中';
}
if ($data['type'] == 10) {
return $data['is_user_send'] ? '已发货,待平台确认' : '已同意退货,请及时发货';
}
}
return $value;
}
/**
* 获取用户售后单列表
* @param $user_id
* @param int $state
* @return \think\Paginator
* @throws \think\exception\DbException
*/
public function getList($user_id, $state = -1)
{
$state > -1 && $this->where('status', '=', $state);
return $this->with(['order_master', 'order_goods.image'])
->where('user_id', '=', $user_id)
->order(['create_time' => 'desc'])
->paginate(15, false, [
'query' => \request()->request()
]);
}
/**
* 用户发货
* @param $data
* @return false|int
*/
public function delivery($data)
{
if (
$this['type']['value'] != 10
|| $this['is_agree']['value'] != 10
|| $this['is_user_send'] != 0
) {
$this->error = '当前售后单不合法,不允许该操作';
return false;
}
if ($data['express_id'] <= 0) {
$this->error = '请选择物流公司';
return false;
}
if (empty($data['express_no'])) {
$this->error = '请填写物流单号';
return false;
}
return $this->save([
'is_user_send' => 1,
'send_time' => time(),
'express_id' => (int)$data['express_id'],
'express_no' => $data['express_no'],
]);
}
/**
* 新增售后单记录
* @param $user
* @param $goods
* @param $data
* @return bool
* @throws \Exception
*/
public function apply($user, $goods, $data)
{
$this->startTrans();
try {
// 新增售后单记录
$this->save([
'order_goods_id' => $data['order_goods_id'],
'order_id' => $goods['order_id'],
'user_id' => $user['user_id'],
'type' => $data['type'],
'apply_desc' => $data['content'],
'is_agree' => 0,
'status' => 0,
'wxapp_id' => self::$wxapp_id,
]);
// 记录凭证图片关系
if (isset($data['images']) && !empty($data['images'])) {
$this->saveImages($this['order_refund_id'], $data['images']);
}
$this->commit();
return true;
} catch (\Exception $e) {
$this->error = $e->getMessage();
$this->rollback();
return false;
}
}
/**
* 记录售后单图片
* @param $order_refund_id
* @param $images
* @return bool
* @throws \Exception
*/
private function saveImages($order_refund_id, $images)
{
// 生成评价图片数据
$data = [];
foreach (explode(',', $images) as $image_id) {
$data[] = [
'order_refund_id' => $order_refund_id,
'image_id' => $image_id,
'wxapp_id' => self::$wxapp_id
];
}
return !empty($data) && (new OrderRefundImage)->saveAll($data);
}
}