| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- <?php
- namespace common\models\order;
- use addons\Store\common\models\StoreOrder;
- use addons\Store\common\models\StoreOrderDetail;
- use common\enums\AddonsEnum;
- use common\enums\OrderStatusEnum;
- use common\enums\RefundStatusEnum;
- use common\enums\RefundTypeEnum;
- use common\enums\StatusEnum;
- use common\events\order\OrderRefundChangeEvent;
- use common\events\order\OrderRefundEvent;
- use common\events\order\OrderRefundFinishEvent;
- use common\events\order\OrderRefundBuyerDeliveryEvent;
- use common\events\order\OrderTakeDeliveryEvent;
- use common\models\mall\MallAddons;
- use Yii;
- use yii\db\Exception;
- use yii\helpers\Json;
- /**
- * This is the model class for table "{{%order_refund_step}}".
- *
- *
- * @property int $id
- * @property int $order_refund_id 售后表id
- * @property int|null $role 角色【1买家 2商家】
- * @property string|null $content 内容
- * @property int $step_num 进度条当前步骤
- * @property int $step_status 步骤状态
- * @property int $status 状态【1启用 0禁用 -1删除】
- * @property int $created_at 创建时间
- * @property int $updated_at 修改时间
- */
- class OrderRefundStep extends \common\models\base\BaseActiveRecord
- {
- /**
- * {@inheritdoc}
- */
- public static function tableName()
- {
- return '{{%order_refund_step}}';
- }
- /**
- * {@inheritdoc}
- */
- public function rules()
- {
- return [
- [['order_refund_id', 'role', 'step_status', 'status', 'created_at', 'updated_at', 'step_num'], 'integer'],
- [['content'], 'string', 'max' => 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;
- }
- }
- }
|