FlagshipCreateRefundSendTrait.php 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. namespace addons\WangDianTong\common\traits;
  3. use addons\WangDianTong\common\enums\WangDianTongEnum;
  4. use addons\WangDianTong\common\expand\sdk\wangdian\qjb\model\AfterSalesRefundRawRefundUploadModel;
  5. use addons\WangDianTong\common\expand\sdk\wangdian\qjb\model\OrderItemModel;
  6. use addons\WangDianTong\common\expand\sdk\wangdian\qjb\request\AfterSalesRefundRawRefundUploadRequest;
  7. use addons\WangDianTong\common\helper\EmojiHelper;
  8. use common\enums\StatusEnum;
  9. use yii\helpers\Json;
  10. trait FlagshipCreateRefundSendTrait
  11. {
  12. /**
  13. * @param array $config
  14. * @param array $refund
  15. * @param int $refund_status
  16. * @return mixed|true|null
  17. * @throws \Exception
  18. */
  19. protected function flagship(array $config, array $refund, int $refund_status)
  20. {
  21. $flag = $this->retry(function () use ($config, $refund, $refund_status) {
  22. return $this->flagshipSend($config, $refund, $refund_status);
  23. }, 1);
  24. if (is_string($flag)) throw new \Exception($flag);
  25. return $flag;
  26. }
  27. protected function flagshipSend(array $config, array $refund, int $refund_status)
  28. {
  29. $req = new AfterSalesRefundRawRefundUploadRequest($config);
  30. $model = new AfterSalesRefundRawRefundUploadModel();
  31. $model->shop_no = $config['shop_no'];
  32. $orderItemModel = new OrderItemModel();
  33. $orderItemModel->oid = "{$refund['order']['order_no']}_{$refund['order_detail_id']}"; // 原始子单号
  34. $orderItemModel->tid = $refund['order']['order_no'];
  35. $orderItemModel->refund_no = $refund['order_no'];
  36. $orderItemModel->num = $refund['orderDetail']['num'];
  37. // 售后类型:1=仅退款,2=退货退款,3=换货
  38. $type = $refund['type'];
  39. // 判断有没有发货 - 如果是已发货的并且为仅退款申请那么映射过去的为4退款不退货
  40. if ($refund['orderDetail']['shipping_status'] == StatusEnum::ENABLED && $type == StatusEnum::ENABLED) {
  41. $type = 4;
  42. }
  43. $orderItemModel->type = $type; // 0取消订单1退款(未发货,退款申请)2退货3换货4退款不退货
  44. // 1取消退款,2已申请退款,3等待退货,4等待收货,5退款成功
  45. $status_key = $refund['refund_status'] < 0 ? 'refund_status' : 'step_status';
  46. $orderItemModel->status = WangDianTongEnum::REFUND_FLAGSHIP_MAP[$refund[$status_key]];
  47. $orderItemModel->refund_version = 1;
  48. $orderItemModel->refund_amount = $refund['refund_price'];
  49. $orderItemModel->actual_refund_amount = $refund['reality_refund_price'];
  50. $orderItemModel->title = "";
  51. $orderItemModel->buyer_nick = EmojiHelper::convert($refund['base_user']['nickname'] ?? '');
  52. $orderItemModel->is_aftersale = $type == 3; // 换货才为售后?
  53. $orderItemModel->logistics_name = $refund['express'];
  54. $orderItemModel->refund_time = date('Y-m-d H:i:s', $refund['created_at']);
  55. if (!empty($refund['refund_at'])) {
  56. $orderItemModel->current_phase_timeout = date('Y-m-d H:i:s', $refund['refund_at']);
  57. }
  58. $orderItemModel->reason = EmojiHelper::convert($refund['reason'] ?? '');
  59. $model->order_list = [$orderItemModel->toArray()];
  60. $resp = $req->send($model);
  61. if ($resp->getError()) return $resp->getError();
  62. try {
  63. $res = $resp->toArray();
  64. if (!isset($res['status']) || $res['status'] != StatusEnum::DISABLED) return $res['message'] ?? var_export($res, true);
  65. } catch (\Exception $e) {
  66. return $e->getMessage();
  67. }
  68. return true;
  69. }
  70. }