CreateRefundService.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace addons\WangDianTong\common\service;
  3. use addons\WangDianTong\common\enums\WangDianTongEnum;
  4. use addons\WangDianTong\common\expand\sdk\wangdian\model\Refund;
  5. use addons\WangDianTong\common\expand\sdk\wangdian\model\RefundItem;
  6. use addons\WangDianTong\common\helper\EmojiHelper;
  7. use common\enums\OrderStatusEnum;
  8. use common\enums\RefundStatusEnum;
  9. class CreateRefundService
  10. {
  11. /**
  12. * @param array $item
  13. * @param array $config
  14. * @return array
  15. */
  16. public function assembleData(array $item, array $config): array
  17. {
  18. $refund = new Refund();
  19. $refund->platform_id = 127;
  20. $refund->shop_no = $config['shop_no'];
  21. $refund->tid = $item['order']['order_no'];
  22. $refund->refund_no = $item['order_no'];
  23. // type=1:退款(未发货退款);type=2:退款不退货;type=3:退货
  24. // 售后类型:1=仅退款,2=退货退款,3=换货
  25. $type = $item['type'];
  26. switch ($item['type']) {
  27. case 1: // 仅退款 - 判断订单有没有发货
  28. if ($item['order']['order_status'] < OrderStatusEnum::SHIPMENTS) { // 没发货的情况下
  29. $type = 1; // 未发货的仅退款
  30. } else {
  31. $type = 2; // 已发货的仅退款
  32. }
  33. break;
  34. case 2:
  35. $type = 3;
  36. break;
  37. case 3:
  38. // ERP那边没有换货这个概念,只有退货退款这个概念
  39. $type = 3;
  40. break;
  41. }
  42. $refund->type = $type;
  43. // 可选值:wait_seller_agree(申请退款), seller_refuse(拒绝退款) , closed(退款关闭) ,goods_returning(待退货) goods_receiving(待收货),success(退款成功)
  44. // 有可能需要通过step_status进行确认
  45. if ($item['refund_status'] == RefundStatusEnum::FINISH) {
  46. switch ($item['step_status']) {
  47. case RefundStatusEnum::REFUSE:
  48. $item['refund_status'] = RefundStatusEnum::REFUSE; // 拒绝申请
  49. break;
  50. }
  51. }
  52. $refund->status = WangDianTongEnum::REFUND_STATUS_MAP[$item['refund_status']];
  53. // 退款金额
  54. $refund->refund_fee = $item['reality_refund_price'];
  55. // 买家昵称(不传该字段,默认取原始订单上客户网名)
  56. $refund->buyer_nick = EmojiHelper::convert(!empty($item['base_user']['nickname']) ? $item['base_user']['nickname'] : '');
  57. // 单据创建时间,时间格式:yyyy-MM-dd HH:mm:ss
  58. $refund->refund_time = date('Y-m-d H:i:s', $item['created_at']);
  59. // 退款原因
  60. $refund->reason = EmojiHelper::convert(!empty($item['reason']) ? $item['reason'] : '');
  61. // 备注
  62. $refund->desc = EmojiHelper::convert(!empty($item['remark']) ? $item['remark'] : '');
  63. // 物流单号
  64. $refund->logistics_no = $item['express_no']; // 仅在买家邮寄商品时才有
  65. // 物流公司名称
  66. $refund->logistics_name = $item['express']; // 仅在买家邮寄商品时才有
  67. $refundItem = new RefundItem();
  68. $refundItem->oid = "{$item['order']['order_no']}_{$item['order_detail_id']}";
  69. $refundItem->num = $item['orderDetail']['num'];
  70. $order_list = [];
  71. $order_list[] = $refundItem->toArray();
  72. // 售后子订单
  73. $refund->order_list = $order_list;
  74. return $refund->toArray();
  75. }
  76. }