$this->order_id,'store_id'=>$this->store_id,'is_delete' => Order::IS_DELETE_FALSE,'md_id'=>$this->md_id]); if(empty($order)){ return ['code'=>1,'msg'=>'订单不存在']; } $form = new OrderRevokeForm(); $form->order_id = $order->id; $form->delete_pass = true; $form->user_id = $order->user_id; $form->store_id = $order->store_id; $res = $form->save(); if ($res['code'] == 0) { VerifyCardSale::cancelCard($order); $order->save(); $goods = Goods::findOne(OrderDetail::findOne(['order_id' => $order->id])->goods_id); if ($order->order_type == Order::ORDER_TYPE_Adopt) { NoticeSend::OrderCancel($order->user_id, $order->mobile, $order->order_no, $order->pay_price, $goods->name, 1); }else{ NoticeSend::OrderCancel($order->user_id, $order->mobile, $order->order_no, $order->pay_price, $goods->name, 0); } // 订单打印 if ((int)$order->md_id === -1 || (int)$order->md_id === 0 || !isset($order->md_id)) { $order->md_id = 0; } $printer_order = new PrintOrder($order->store_id, $order->id, 'confirm', 0, $order->md_id); $printer_order->is_refund = true; $printer_order->print_order(); if($order->take_price > 0){ $user = User::findOne($order->user_id); $saas_user = SaasUser::findOne(['mobile' => $user->binding]); if($saas_user){ $take_price = $order->take_price; $before = $saas_user->league_price; $saas_user->updateCounters(['league_price' => floatval($take_price)]); \app\models\SaaSLeaguePriceLog::setLeaguePriceLog( $order->store_id, $saas_user->id, $take_price, $before, \app\models\SaaSLeaguePriceLog::TYPE_CANCEL, \app\models\SaaSLeaguePriceLog::SEND_TYPE, \app\models\SaaSLeaguePriceLog::ROLE_USER, $order->id ); } } } return ['code'=>0 ,'msg'=>'取消成功']; } //订单申请取消处理 public function applyOrderDelete() { $store_id = $this->store_id; $md_id = $this->md_id; $where = [ 'id' => $this->order_id, 'is_delete' => Order::IS_DELETE_FALSE, 'store_id' => $store_id, 'md_id' => $md_id, 'apply_delete' => Order::ORDER_APPLY_DELETE ]; $handle_type = \app\models\OrderAdminHandleLog::HANDLE_TYPE_AGREE_CANCEL; $order = Order::findOne($where); if (!$order) { return [ 'code' => 1, 'msg' => '订单不存在,请刷新页面后重试' ]; } // 发送备注消息 $order->remark = $this->remark; // 同意 if (intval($this->status) == 1) { // if (post_params('type') == Order::CANCEL_BACK_TYPE) { // // } ////修改未支付但是取消订单的逻辑 // if (intval($order->is_pay) === 1 || (intval($order->is_pay) === 0 && intval($order->pay_type) === Order::PAY_TYPE_COD)) { //TODO 取消订单需要退积分,这里剩余如果检测到是平台操作,就使用saas_user添加积分信息 $form = new OrderRevokeForm(); $form->order_id = $order->id; $form->delete_pass = true; $form->user_id = $order->user_id; $form->store_id = $order->store_id; $res = $form->save(); if ($res['code'] == 0) { VerifyCardSale::cancelCard($order); $order->save(); $goods = Goods::findOne(OrderDetail::findOne(['order_id' => $order->id])->goods_id); if ($order->order_type == Order::ORDER_TYPE_Adopt) { NoticeSend::OrderCancel($order->user_id, $order->mobile, $order->order_no, $order->pay_price, $goods->name, 1); }else{ NoticeSend::OrderCancel($order->user_id, $order->mobile, $order->order_no, $order->pay_price, $goods->name, 0); } // 订单打印 if ((int)$order->md_id === -1 || (int)$order->md_id === 0 || !isset($order->md_id)) { $order->md_id = 0; } $printer_order = new PrintOrder($order->store_id, $order->id, 'confirm', 0, $order->md_id); $printer_order->is_refund = true; $printer_order->print_order(); $check = SaaSLeaguePriceLog::findOne(['order_id' => $order->id, 'type' => 4]); if($order->take_price > 0 && $check){ $user = User::findOne($order->user_id); $saas_user = SaasUser::findOne(['mobile' => $user->binding]); if($saas_user){ $take_price = $order->take_price; $before = $saas_user->league_price; $saas_user->updateCounters(['league_price' => floatval($take_price)]); \app\models\SaaSLeaguePriceLog::setLeaguePriceLog( $order->store_id, $saas_user->id, $take_price, $before, \app\models\SaaSLeaguePriceLog::TYPE_CANCEL, \app\models\SaaSLeaguePriceLog::SEND_TYPE, \app\models\SaaSLeaguePriceLog::ROLE_USER, $order->id ); } } //如果已经转单 就调用取消接口 $orderTransit = OrderTransit::findOne(['order_id' => $order->id, 'is_delete' => 0]); if ($orderTransit) { $merchant = new MerchantForm(); $merchant->order_id = $orderTransit->cloud_order_id; $merchant->purchaseOrderCancel(); } } // } } else { //拒绝 $order->apply_delete = Order::ORDER_APPLY_DELETE_DEFAULT; $order->save(); $handle_type = \app\models\OrderAdminHandleLog::HANDLE_TYPE_REJECT_CANCEL; // TODO :推送订单取消拒绝消息 $res = [ 'code' => 0, 'msg' => '操作成功', ]; $merchant = new MerchantForm(); $merchant->order_id = $order->id; $merchant->syncMchOrderRefundStatus(0); } \app\models\OrderAdminHandleLog::addHandleLog($order->id, $handle_type); return $res; } //订单售后处理 public function handleRefund() { if (!$this->validate()) { return [ 'code' => 1, 'msg' => $this->getErrorSummary(false)[0], ]; } $order_refund = OrderRefund::findOne([ 'id' => $this->order_refund_id, 'store_id' => $this->store_id, 'is_delete' => Order::IS_DELETE_FALSE, ]); if (!$order_refund) { return [ 'code' => 1, 'msg' => '售后订单不存在,请刷新页面' ]; } $OrderDetail = OrderDetail::find()->where(['in','id',json_decode($order_refund->order_detail_id, true)])->asArray()->all(); $arr = []; foreach ($OrderDetail as $val) { $arr[] = $val['goods_id']; } // 订单时间 $order = Order::findOne(['id' => $order_refund->order_id, 'md_id' => $this->md_id]); $orderTransit = OrderTransit::findOne(['order_id' => $order_refund->order_id, 'is_delete' => 0]); if ($orderTransit) {//已转单 return [ 'code' => 1, 'msg' => '订单已转单,请前往后台操作' ]; } $created_at = $order->created_at; $confirm_time = $order->confirm_time; foreach ($arr as $v) { // 获取核销卡id $verifyIds = explode(',',Goods::findOne(['id' => $v])->verify_card_id); if (!empty($verifyIds)) { $verifySales = VerifyCardSale::find() ->where(['in', 'verify_card_id', $verifyIds]) ->andWhere(['in', 'goods_id', $arr]) ->andWhere(['>' , 'created_at', $created_at]) ->andWhere(['<=' , 'created_at', $confirm_time]) ->andWhere(['store_id' => $order_refund->store_id]) ->andWhere(['user_id' => $order_refund->user_id]) ->asArray()->all(); foreach ($verifySales as $val) { $verifySale = VerifyCardSale::findOne(['id' => $val['id']]); $verifySale->status = 2; $verifySale->save(); } } } if ($order_refund->status != 0) { return [ 'code' => 1, 'msg' => '售后订单已经处理过了,请刷新页面', 'id' => $order_refund->id, ]; } // if ($this->type == 1) { return $this->submit1($order_refund); // } // if ($this->type == 2) { // return $this->submit2($order_refund); // } } /** * 平台订单退货退款 * @param $order_refund * @return \app\cyy\ValidationErrorResponse|array */ private function submit1($order_refund) { $order = Order::findOne($order_refund->order_id); if ($this->action == 1) {//同意 if ($this->refund != 1) { //仅同意,还未退款 if (isset($this->refund_price)) { if ($this->refund_price > $order_refund->refund_price) { return [ 'code' => 1, 'msg' => '退款金额不能大于' . $order_refund->refund_price, ]; } $order_refund->refund_price = $this->refund_price; } if (!$this->address_id) { return [ 'code' => 1, 'msg' => '退货地址不能为空', ]; }; $refundAddress = RefundAddress::findOne($this->address_id); if ($refundAddress) { $order_refund->refund_address = json_encode([ 'name' => $refundAddress->name, 'address' => $refundAddress->address, 'mobile' => $refundAddress->mobile ], JSON_UNESCAPED_UNICODE); } $order_refund->address_id = $this->address_id; $order_refund->is_agree = 1; $order_refund->save(); if ($order_refund->save()) { return [ 'code' => 0, 'msg' => '已同意退货。', ]; } else { return [ 'code' => 1, 'msg' => $order_refund->errors[0], ]; } } else { //已同意,退款操作 $order_refund->status = 1; $order_refund->response_time = time(); if ($order_refund->refund_price > 0 && ($order->pay_type == 1 || in_array($order->pay_type, [Order::PAY_TYPE_WX_B2B, Order::PAY_TYPE_ADAPAY_WX, Order::PAY_TYPE_ADAPAY_ALIPAY, Order::PAY_TYPE_ADAPAY_QUICKPAY_FRONTPAY, Order::PAY_TYPE_HUIFU_V2_JSPAY_WX]))) { $res = Refund::refund($order, OrderNo::ORDER_MALL, $order_refund->order_refund_no, $order_refund->refund_price); if ($res !== true) { return $res; } } // 商城商品总库存恢复 $order_detail_list = OrderDetail::find()->where(['order_id' => $order->id, 'is_delete' => 0])->all(); foreach ($order_detail_list as $order_detail) { $goods = Goods::findOne($order_detail->goods_id); $attr_id_list = []; foreach (json_decode($order_detail->attr) as $item) { array_push($attr_id_list, $item->attr_id); } $goods->numAdd($attr_id_list, $order_detail->num); } $user = User::findOne(['id' => $order->user_id]); $balance = $order->balance ?? 0; if ($balance > 0) { $before = $user->money; $user->money += $balance; $log = new AccountLog(); $log->store_id = $this->store_id ?? get_store_id(); $log->user_id = $user->id; $log->type = AccountLog::TYPE_GOODS_BALANCE; $log->amount = $balance; $log->log_type = AccountLog::LOG_TYPE_INCOME; $log->desc = "商城售后订单退款,商品余额抵扣:退款订单号:{$order_refund->order_refund_no}"; $log->before = $before; $log->after = $user->money; $log->operator = ''; $log->operator_id = 0; $log->operator_type = AccountLog::TYPE_OPERATOR_NORMAL; $log->created_at = time(); $log->order_id = $order->id; $log->order_type = AccountLog::TYPE_PLATFORM_REFUND_ORDER; if (!$log->save()) { return [ 'code' => 1, 'msg' => implode(';', array_values($log->firstErrors)) ]; }; if (!$user->save()) { return [ 'code' => 1, 'msg' => $this->getErrorSummary(false)[0], ]; } } $integral = isset($order->integral) ? json_decode($order->integral)->forehead_integral : 0; if ($integral > 0) { $user->integral += $integral; } if ($order_refund->refund_price > 0 && $order->pay_type == 3) { $before = $user->money; $user->money += floatval($order_refund->refund_price); $log = new AccountLog(); $log->store_id = $this->store_id ?? get_store_id(); $log->user_id = $user->id; $log->type = AccountLog::TYPE_BALANCE; $log->amount = $order_refund->refund_price; $log->log_type = AccountLog::LOG_TYPE_INCOME; $log->desc = "商城售后订单退款:退款订单号:{$order_refund->order_refund_no}"; $log->before = $before; $log->after = $user->money; $log->operator = ''; $log->operator_id = 0; $log->operator_type = AccountLog::TYPE_OPERATOR_NORMAL; $log->created_at = time(); $log->order_id = $order->id; $log->order_type = AccountLog::TYPE_PLATFORM_REFUND_ORDER; if (!$log->save()) { return [ 'code' => 1, 'msg' => implode(';', array_values($log->firstErrors)) ]; }; if (!$user->save()) { return [ 'code' => 1, 'msg' => $this->getErrorSummary(false)[0], ]; } } if ($order_refund->save()) { // 删除赠送的核销卡 VerifyCardSale::cancelCard($order); $goods = Goods::findOne(OrderDetail::findOne(['order_id' => $order->id])->goods_id); NoticeSend::OrderRefund($order->user_id, $order->mobile, $order->order_no, $order_refund->refund_price, $goods->name); return [ 'code' => 0, 'msg' => '处理成功,已完成退款退货。', ]; } return [ 'code' => 1, 'msg' => $this->getErrorSummary(false)[0], ]; } } if ($this->action == 2) {//拒绝 $order_refund->status = 3; $order_refund->refuse_desc = $this->remark ? $this->remark : '卖家拒绝了您的退货请求'; $order_refund->response_time = time(); if ($order_refund->save()) { NoticeSend::OrderRefundCancel($order->mobile); $merchant = new MerchantForm(); $merchant->order_id = $order->id; $merchant->syncMchOrderRefundStatus(0); return [ 'code' => 0, 'msg' => '处理成功,已拒绝该退货退款订单。', ]; } return [ 'code' => 1, 'msg' => $this->getErrorSummary(false)[0], ]; } } /** * 统一处理换货 * @param $order_refund * @return \app\cyy\ValidationErrorResponse|array */ private function submit2($order_refund) { if ($this->action == 1) {//同意 $order_refund->status = 2; if (!$this->address_id) { return [ 'code' => 1, 'msg' => '退货地址不能为空', ]; }; $order_refund->address_id = $this->address_id; $order_refund->response_time = time(); if ($order_refund->save()) { // TODO: 消息 return [ 'code' => 0, 'msg' => '处理成功,已同意换货。', ]; } return [ 'code' => 1, 'msg' => $this->getErrorSummary(false)[0], ]; } if ($this->action == 2) {//拒绝 $order_refund->status = 3; $order_refund->refuse_desc = $this->remark ? $this->remark : '卖家已拒绝您的换货请求'; $order_refund->response_time = time(); if ($order_refund->save()) { $merchant = new MerchantForm(); $merchant->order_id = $order_refund->order_id; $merchant->syncMchOrderRefundStatus(0); return [ 'code' => 0, 'msg' => '处理成功,已拒绝换货请求。', ]; } return [ 'code' => 1, 'msg' => $this->getErrorSummary(false)[0], ]; } } }