3500], ]; } /** * {@inheritdoc} */ public function attributeLabels() { return [ 'id' => 'ID', 'order_refund_id' => '售后表id', 'role' => '角色【1买家 2商家】', 'content' => '内容', 'step_num' => '进度条当前步骤', 'step_status' => '步骤状态', 'status' => '状态【1启用 0禁用 -1删除】', 'created_at' => '创建时间', 'updated_at' => '修改时间', ]; } /** * @Author: hua * @DateTime: 2021/10/8 18:01 * @Copyright: copyright (c) 2021 广东七件事集团 * @param array $params * @return bool|OrderRefundStep */ public static function setData(array $params) { try { if (!empty($params['id'])) { $model = self::findOne(['mall_id' => $params['mall_id'], 'id' => $params['id'], 'status' => [StatusEnum::ENABLED]]); if (empty($model)) throw new Exception('订单详情不存在或已删除'); } else { $model = new self(); $model->loadDefaultValues(); } if (isset($params['content'])) $params['content'] = Json::encode($params['content']); if (!$model->load($params, '') || !$model->save()) { throw new Exception($model->getErrorMessage()); } return $model; } catch (Exception $e) { self::$static_error = $e->getMessage(); return false; } } /** * 申请售后-商家同意后-买家发货 * @Author: hua * @DateTime: 2021/10/9 15:53 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $params * @return bool */ public static function refundSend($params) { try { $order_refund_model = OrderRefund::getOne([['id'=>$params['id']],['user_id'=>$params['user_id']]]); if(empty($order_refund_model)) throw new Exception('售后订单不存在'); if(!in_array($order_refund_model->type,[RefundTypeEnum::EXCHANGE_GOODS,RefundTypeEnum::MONEY_AND_PRODUCT])){ throw new Exception('此售后订单不是换货或退款退货订单'); } if(!in_array($order_refund_model->step_status,[RefundStatusEnum::STEP_2,RefundStatusEnum::STEP_8,RefundStatusEnum::STEP_NEGATIVE_2])){ throw new Exception('等待商家同意申请售后'); } // 售后步骤 $content = []; $content[] = '物流名称:' . $params['express']; $content[] = '物流编号:' . $params['express_no']; $params['order_refund_id'] = $params['id']; unset($params['id']); $params['role'] = RefundStatusEnum::BUYERS; $params['content'] = $content; $params['step_status'] = $order_refund_model->type==RefundTypeEnum::EXCHANGE_GOODS ? RefundStatusEnum::STEP_9:RefundStatusEnum::STEP_3; $params['step_num'] = RefundStatusEnum::getStepNumByStatus($params['step_status']); $res = self::setData($params); // 售后信息保存 $order_refund_model->refund_status = RefundStatusEnum::RETURN_GOODS; $order_refund_model->express = $params['express']; $order_refund_model->express_no = $params['express_no']; $order_refund_model->express_at = time(); $order_refund_model->step_status = $params['step_status']; $order_refund_model->save(); if (!$res) throw new Exception(self::getStaticError()); // 触发售后发货 $event = new OrderRefundBuyerDeliveryEvent($params['mall_id']); $data['id'] = $order_refund_model->id; $data['mall_id'] = $order_refund_model->mall_id; Yii::$app->services->events->dispatch($event, $data, $event->listeners); $orderRefundChangeEvent = new OrderRefundChangeEvent($params['mall_id']); $refundChangeData['id'] = $order_refund_model->id; $refundChangeData['step_status'] = $params['step_status']; $refundChangeData['mall_id'] = $order_refund_model->mall_id; Yii::$app->services->events->dispatch($orderRefundChangeEvent, $refundChangeData, $orderRefundChangeEvent->listeners); return true; } catch (Exception $e) { self::$static_error = $e->getMessage(); return false; } } /** * 申请售后-换货-确认收货,售后完成 * @Author: hua * @DateTime: 2021/10/9 15:53 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $params * @return bool */ public static function refundTakeDelivery($params) { $t = \Yii::$app->db->beginTransaction(); try { $content = []; $where = [['id'=>$params['id']]]; $data = RefundStatusEnum::getStepStatusText(RefundStatusEnum::STEP_12); $params['role'] = RefundStatusEnum::SELLER; if(!empty($params['user_id'])){ $data = RefundStatusEnum::getStepStatusText(RefundStatusEnum::STEP_11); $where[]=['user_id'=>$params['user_id']]; $params['role'] = RefundStatusEnum::BUYERS; } $content[] = $data['desc'] ?? ''; $order_refund_model = OrderRefund::getOne($where); if(empty($order_refund_model)) throw new Exception('售后订单不存在'); if($order_refund_model->type!=RefundTypeEnum::EXCHANGE_GOODS) throw new Exception('此售后订单不是换货订单'); if($order_refund_model->step_status!=RefundStatusEnum::STEP_10){ throw new Exception('等待商家重新发货'); } $order_refund_model->refund_status = RefundStatusEnum::FINISH; $order_refund_model->save(); $params['order_refund_id'] = $params['id']; unset($params['id']); $params['content'] = $content; $params['step_status'] = RefundStatusEnum::STEP_11; $params['step_num'] = RefundStatusEnum::getStepNumByStatus($params['step_status']); $res = self::setData($params); if (!$res) throw new Exception(self::getStaticError()); $order_detail_model = OrderDetail::findOne($order_refund_model->order_detail_id); $order_detail_model->is_feedback = OrderStatusEnum::getIsFeedbackStatus($params['step_status']); $res = $order_detail_model->save(); if (!$res) throw new Exception(OrderDetail::getStaticError()); $order = Order::findOne($order_refund_model->order_id); Order::autoUpdateStatus($order); //o2o门店 if(!empty($order['store_id'])){ $is_install = MallAddons::isInstall($order['mall_id'], AddonsEnum::ADDONS_NAME_STORE); if($is_install){ $store_order_detail_model = StoreOrderDetail::findOne(['main_order_detail_id'=>$order_refund_model->order_detail_id]); $store_order_detail_model->is_feedback = $order_detail_model->is_feedback; $res = $store_order_detail_model->save(); if (!$res) throw new Exception($store_order_detail_model->getErrorMessage()); $store_order =StoreOrder::findOne(['order_no'=>$order['order_no']]); StoreOrder::autoUpdateStatus($store_order); } } $t->commit(); // 触发退款事件 $event = new OrderRefundFinishEvent($order_refund_model['mall_id']); $data = []; $data['id'] = $order_refund_model->id; $data['source_table'] = 'order_detail'; $data['source_table_id'] = $order_refund_model['order_detail_id']; Yii::$app->services->events->dispatch($event, $data, $event->listeners); $orderRefundChangeEvent = new OrderRefundChangeEvent($order_refund_model['mall_id']); $refundChangeData['id'] = $order_refund_model->id; $refundChangeData['step_status'] = $params['step_status']; $refundChangeData['mall_id'] = $order_refund_model->mall_id; Yii::$app->services->events->dispatch($orderRefundChangeEvent, $refundChangeData, $orderRefundChangeEvent->listeners); return true; } catch (Exception $e) { $t->rollBack(); self::$static_error = $e->getMessage(); return false; } } }