OrderRefund.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
  8. // +----------------------------------------------------------------------
  9. // | Author: 萤火科技 <admin@yiovo.com>
  10. // +----------------------------------------------------------------------
  11. declare (strict_types = 1);
  12. namespace app\common\model;
  13. use app\common\model\store\Setting;
  14. /**
  15. * 售后单模型
  16. * Class OrderRefund
  17. * @package app\common\model\wxapp
  18. */
  19. class OrderRefund extends BaseModel
  20. {
  21. // 定义表名
  22. protected $name = 'order_refund';
  23. // 定义主键
  24. protected $pk = 'order_refund_id';
  25. const TYPE =[10=>'退货退款',20=>'不退货退款',30=>'未发货退款'];
  26. const FINANCE_REFUND =[0=>'待退款',10=>'已退款'];
  27. /**
  28. * 追加字段
  29. * @var array
  30. */
  31. protected $append = [
  32. 'state_text', // 售后单状态
  33. 'type_text',
  34. 'finance_refund_text'
  35. ];
  36. public function getTypeTextAttr($value,$data){
  37. return self::TYPE[$data['type']]??'';
  38. }
  39. public function getFinanceRefundTextAttr($value,$data){
  40. return self::FINANCE_REFUND[$data['finance_refund']]??'';
  41. }
  42. /**
  43. * 关联门店表
  44. * @return \think\model\relation\BelongsTo
  45. */
  46. public function shops()
  47. {
  48. $module = self::getCalledModule();
  49. return $this->belongsTo("app\\{$module}\\model\\shop\\Shops", 'shop_id');
  50. }
  51. /**
  52. * 关联用户表
  53. * @return \think\model\relation\BelongsTo
  54. */
  55. public function user()
  56. {
  57. return $this->belongsTo('User');
  58. }
  59. /**
  60. * 关联订单主表
  61. * @return \think\model\relation\BelongsTo
  62. */
  63. public function orderData()
  64. {
  65. return $this->belongsTo('Order');
  66. }
  67. /**
  68. * 关联单个订单商品表
  69. * @return \think\model\relation\BelongsTo
  70. */
  71. public function orderGoods()
  72. {
  73. return $this->belongsTo('OrderGoods')->withoutField(['content']);
  74. }
  75. /**
  76. * 关联全部订单商品
  77. */
  78. public function orderGoodsAll()
  79. {
  80. return $this->hasMany('OrderGoods', 'order_id', 'order_id')->withoutField(['content']);
  81. }
  82. /**
  83. * 关联核销人用户
  84. * @return \think\model\relation\BelongsTo
  85. */
  86. public function hxUser()
  87. {
  88. $module = self::getCalledModule();
  89. return $this->belongsTo("app\\{$module}\\model\\User", 'hx_refund_user_id')->field('user_id,mobile,nick_name');
  90. }
  91. /**
  92. * 关联图片记录表
  93. * @return \think\model\relation\HasMany
  94. */
  95. // public function images()
  96. // {
  97. // return $this->hasMany('OrderRefundImage');
  98. // }
  99. /**
  100. * 获取凭证图片
  101. */
  102. public function getImagesAttr($value)
  103. {
  104. if($value){
  105. $arr = array_map(function($v){
  106. $setting = Setting:: getItem('storage',10001);
  107. $oss_domain = $setting['engine']['aliyun']['domain']??'';
  108. return (stripos($v,"http") === false) ? $oss_domain.'/'.$v : $v;
  109. },explode(',',$value));
  110. return $arr;
  111. }
  112. return [];
  113. }
  114. /**
  115. * 获取门店拒绝图片
  116. */
  117. public function getRefuseImagesAttr($value)
  118. {
  119. if($value){
  120. $arr = array_map(function($v){
  121. $setting = Setting:: getItem('storage',10001);
  122. $oss_domain = $setting['engine']['aliyun']['domain']??'';
  123. return (stripos($v,"http") === false) ? $oss_domain.'/'.$v : $v;
  124. },explode(',',$value));
  125. return $arr;
  126. }
  127. return [];
  128. }
  129. /**
  130. * 存凭证图片
  131. */
  132. public function setImagesAttr($value)
  133. {
  134. if($value&&is_array($value)){
  135. return implode(',',$value);
  136. }
  137. return $value;
  138. }
  139. /**
  140. * 关联物流公司表
  141. * @return \think\model\relation\BelongsTo
  142. */
  143. public function express()
  144. {
  145. return $this->belongsTo('Express');
  146. }
  147. /**
  148. * 关联用户表
  149. * @return \think\model\relation\HasOne
  150. */
  151. public function address()
  152. {
  153. return $this->hasOne('OrderRefundAddress');
  154. }
  155. /**
  156. * 售后单详情
  157. * @param array|int $where
  158. * @param array $with
  159. * @return null|static
  160. */
  161. public static function detail($where, array $with = [])
  162. {
  163. return static::get($where, $with);
  164. }
  165. /**
  166. * 发货时间send_time
  167. * @param $value
  168. * @return false|string
  169. */
  170. public function getSendTimeAttr($value)
  171. {
  172. return format_time($value);
  173. }
  174. /**
  175. * 退款成功时间
  176. * @param $value
  177. * @return false|string
  178. */
  179. public function getRefundSuccTimeAttr($value)
  180. {
  181. return format_time($value);
  182. }
  183. /**
  184. * 门店操作退款时间
  185. * @param $value
  186. * @return false|string
  187. */
  188. public function getHxRefundTimeAttr($value)
  189. {
  190. return format_time($value);
  191. }
  192. /**
  193. * 合计订单退款金额 (实付金额+米卡抵扣)*退款数量/购买总数量
  194. * @param $orderIds
  195. * @return mixed
  196. */
  197. public static function sumRefundPriceByOrder($orderIds){
  198. return self::whereIn('order_id',$orderIds)
  199. ->where('finance_refund',10)
  200. ->sum('refund_money');
  201. }
  202. }