// +---------------------------------------------------------------------- declare (strict_types = 1); namespace app\common\model; use app\common\model\store\Setting; /** * 售后单模型 * Class OrderRefund * @package app\common\model\wxapp */ class OrderRefund extends BaseModel { // 定义表名 protected $name = 'order_refund'; // 定义主键 protected $pk = 'order_refund_id'; const TYPE =[10=>'退货退款',20=>'不退货退款',30=>'未发货退款']; const FINANCE_REFUND =[0=>'待退款',10=>'已退款']; /** * 追加字段 * @var array */ protected $append = [ 'state_text', // 售后单状态 'type_text', 'finance_refund_text' ]; public function getTypeTextAttr($value,$data){ return self::TYPE[$data['type']]??''; } public function getFinanceRefundTextAttr($value,$data){ return self::FINANCE_REFUND[$data['finance_refund']]??''; } /** * 关联门店表 * @return \think\model\relation\BelongsTo */ public function shops() { $module = self::getCalledModule(); return $this->belongsTo("app\\{$module}\\model\\shop\\Shops", 'shop_id'); } /** * 关联用户表 * @return \think\model\relation\BelongsTo */ public function user() { return $this->belongsTo('User'); } /** * 关联订单主表 * @return \think\model\relation\BelongsTo */ public function orderData() { return $this->belongsTo('Order'); } /** * 关联单个订单商品表 * @return \think\model\relation\BelongsTo */ public function orderGoods() { return $this->belongsTo('OrderGoods')->withoutField(['content']); } /** * 关联全部订单商品 */ public function orderGoodsAll() { return $this->hasMany('OrderGoods', 'order_id', 'order_id')->withoutField(['content']); } /** * 关联核销人用户 * @return \think\model\relation\BelongsTo */ public function hxUser() { $module = self::getCalledModule(); return $this->belongsTo("app\\{$module}\\model\\User", 'hx_refund_user_id')->field('user_id,mobile,nick_name'); } /** * 关联图片记录表 * @return \think\model\relation\HasMany */ // public function images() // { // return $this->hasMany('OrderRefundImage'); // } /** * 获取凭证图片 */ public function getImagesAttr($value) { if($value){ $arr = array_map(function($v){ $setting = Setting:: getItem('storage',10001); $oss_domain = $setting['engine']['aliyun']['domain']??''; return (stripos($v,"http") === false) ? $oss_domain.'/'.$v : $v; },explode(',',$value)); return $arr; } return []; } /** * 获取门店拒绝图片 */ public function getRefuseImagesAttr($value) { if($value){ $arr = array_map(function($v){ $setting = Setting:: getItem('storage',10001); $oss_domain = $setting['engine']['aliyun']['domain']??''; return (stripos($v,"http") === false) ? $oss_domain.'/'.$v : $v; },explode(',',$value)); return $arr; } return []; } /** * 存凭证图片 */ public function setImagesAttr($value) { if($value&&is_array($value)){ return implode(',',$value); } return $value; } /** * 关联物流公司表 * @return \think\model\relation\BelongsTo */ public function express() { return $this->belongsTo('Express'); } /** * 关联用户表 * @return \think\model\relation\HasOne */ public function address() { return $this->hasOne('OrderRefundAddress'); } /** * 售后单详情 * @param array|int $where * @param array $with * @return null|static */ public static function detail($where, array $with = []) { return static::get($where, $with); } /** * 发货时间send_time * @param $value * @return false|string */ public function getSendTimeAttr($value) { return format_time($value); } /** * 退款成功时间 * @param $value * @return false|string */ public function getRefundSuccTimeAttr($value) { return format_time($value); } /** * 门店操作退款时间 * @param $value * @return false|string */ public function getHxRefundTimeAttr($value) { return format_time($value); } /** * 合计订单退款金额 (实付金额+米卡抵扣)*退款数量/购买总数量 * @param $orderIds * @return mixed */ public static function sumRefundPriceByOrder($orderIds){ return self::whereIn('order_id',$orderIds) ->where('finance_refund',10) ->sum('refund_money'); } }