| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- <?php
- namespace addons\WangDianTong\common\service;
- use addons\WangDianTong\common\enums\WangDianTongEnum;
- use addons\WangDianTong\common\expand\sdk\wangdian\model\Refund;
- use addons\WangDianTong\common\expand\sdk\wangdian\model\RefundItem;
- use addons\WangDianTong\common\helper\EmojiHelper;
- use common\enums\OrderStatusEnum;
- use common\enums\RefundStatusEnum;
- class CreateRefundService
- {
- /**
- * @param array $item
- * @param array $config
- * @return array
- */
- public function assembleData(array $item, array $config): array
- {
- $refund = new Refund();
- $refund->platform_id = 127;
- $refund->shop_no = $config['shop_no'];
- $refund->tid = $item['order']['order_no'];
- $refund->refund_no = $item['order_no'];
- // type=1:退款(未发货退款);type=2:退款不退货;type=3:退货
- // 售后类型:1=仅退款,2=退货退款,3=换货
- $type = $item['type'];
- switch ($item['type']) {
- case 1: // 仅退款 - 判断订单有没有发货
- if ($item['order']['order_status'] < OrderStatusEnum::SHIPMENTS) { // 没发货的情况下
- $type = 1; // 未发货的仅退款
- } else {
- $type = 2; // 已发货的仅退款
- }
- break;
- case 2:
- $type = 3;
- break;
- case 3:
- // ERP那边没有换货这个概念,只有退货退款这个概念
- $type = 3;
- break;
- }
- $refund->type = $type;
- // 可选值:wait_seller_agree(申请退款), seller_refuse(拒绝退款) , closed(退款关闭) ,goods_returning(待退货) goods_receiving(待收货),success(退款成功)
- // 有可能需要通过step_status进行确认
- if ($item['refund_status'] == RefundStatusEnum::FINISH) {
- switch ($item['step_status']) {
- case RefundStatusEnum::REFUSE:
- $item['refund_status'] = RefundStatusEnum::REFUSE; // 拒绝申请
- break;
- }
- }
- $refund->status = WangDianTongEnum::REFUND_STATUS_MAP[$item['refund_status']];
- // 退款金额
- $refund->refund_fee = $item['reality_refund_price'];
- // 买家昵称(不传该字段,默认取原始订单上客户网名)
- $refund->buyer_nick = EmojiHelper::convert(!empty($item['base_user']['nickname']) ? $item['base_user']['nickname'] : '');
- // 单据创建时间,时间格式:yyyy-MM-dd HH:mm:ss
- $refund->refund_time = date('Y-m-d H:i:s', $item['created_at']);
- // 退款原因
- $refund->reason = EmojiHelper::convert(!empty($item['reason']) ? $item['reason'] : '');
- // 备注
- $refund->desc = EmojiHelper::convert(!empty($item['remark']) ? $item['remark'] : '');
- // 物流单号
- $refund->logistics_no = $item['express_no']; // 仅在买家邮寄商品时才有
- // 物流公司名称
- $refund->logistics_name = $item['express']; // 仅在买家邮寄商品时才有
- $refundItem = new RefundItem();
- $refundItem->oid = "{$item['order']['order_no']}_{$item['order_detail_id']}";
- $refundItem->num = $item['orderDetail']['num'];
- $order_list = [];
- $order_list[] = $refundItem->toArray();
- // 售后子订单
- $refund->order_list = $order_list;
- return $refund->toArray();
- }
- }
|