-1], [['order_id'], 'safe'], [['refund_price'], 'number'] ]; } public function staffCenter() { $store_id = $this->store_id; $store_clerk_id = $this->store_clerk_id; $saas_user = get_saas_user(); $store = Store::findOne($store_id); $md = (object)[ 'name' => $store->name, 'cover_url' => $store->logo, 'shop_time_type' => 0, 'start_time' => '00:00', 'end_time' => '23:59' ]; // 已核销订单数量 $md_staff['clerk_count'] = MdProfit::find()->alias('mp')->leftJoin(['o' => Order::tableName()], 'mp.order_id = o.id') ->where(['mp.store_id' => $store_id, 'mp.is_clerk' => 1, 'mp.clerk_id' => $store_clerk_id, 'mp.is_send' => 1])->count(); // 待核销订单数量 $md_staff['no_clerk_count'] = MdProfit::find()->alias('mp')->leftJoin(['o' => Order::tableName()], 'mp.order_id = o.id') ->where(['mp.store_id' => $store_id, 'mp.is_clerk' => 1, 'mp.is_send' => 0, 'o.trade_status' => 2]) ->andWhere(['!=', 'o.pay_type', 2])->count(); $md_staff['avatar'] = $saas_user->avatar; $md_staff['name'] = $saas_user->name; $md_staff['md_name'] = $md->name; $md_staff['md_logo'] = $md->cover_url; $md_staff['md_shop_time_type'] = $md->shop_time_type; $md_staff['md_start_time'] = $md->start_time; $md_staff['md_end_time'] = $md->end_time; return [ 'code' => 0, 'data' => $md_staff ]; } public function offlineOrder() { $keyword = $this->keyword; // status -1 全部 0待发货 2待自提 3已完成 4待售后 $status = $this->status; $store_id = $this->store_id; $store_clerk_id = $this->store_clerk_id; $md_staff = MdStaff::findOne($store_clerk_id); if (!$md_staff) { return [ 'code' => 1, 'msg' => '未拥有该门店的查看核销订单权限' ]; } $query = MdProfit::find()->alias('mp')->leftJoin(['o' => Order::tableName()], 'o.id=mp.order_id') ->where(['mp.store_id' => $store_id, 'mp.is_clerk' => 1, 'o.is_pay' => 1,'o.is_recycle' => 0]) ->andWhere(['!=', 'o.pay_type', 2]); // $query->andWhere(['mp.clerk_id' => $md_staff->id]); $query_1 = clone $query; $count_1 = $query_1->andWhere(['mp.is_send' => 0, 'o.trade_status' => 2])->count(); // 之前判断是佣金是否发放 if ($status > -1) { if (intval($status) === 4) { $query->leftJoin(['or' => OrderRefund::tableName()], 'or.order_id = o.id') ->andWhere(['OR', ['or.status' => 0], ['or.is_agree' => 0]]); } else { // $query->andWhere(['mp.is_send' => $status]); $query->andWhere(['o.trade_status' => $status]); } if (intval($status) > 2) { $query->andWhere(['mp.clerk_id' => $md_staff->id]); } } if (!empty($keyword)) { $query->andWhere([ 'or', ['like', 'o.order_no', $keyword], ['like', 'o.name', $keyword], ]); } $query->select('o.order_no, o.id, o.name, o.mobile, o.pay_price, o.order_type, mp.is_send,o.created_at,o.remark,o.words,o.trade_status, o.food_code, o.user_id') ->orderBy('mp.created_at desc'); $pagination = pagination_make($query); foreach ($pagination['list'] as &$value) { $value['goods_list'] = OrderDetail::find()->where(['order_id' => $value['id']])->select('goods_name, num, attr, pic, total_price')->asArray()->all(); $value['created_at'] = date('Y-m-d H:i:s', $value['created_at']); $value['trade_status_text'] = Order::getStatusText($value['trade_status']); $value['checked'] = 0; $value['disabled'] = $value['trade_status'] == 2 || $value['trade_status'] == 0 ? 0 : 1; $orderRefund = OrderRefund::findOne(['order_id' => $value['id'], 'user_delete' => 0, 'is_delete' => 0]); $value['refund'] = null; if ($orderRefund) { $value['refund'] = [ 'is_agree' => intval($orderRefund->is_agree),//0=待处理,1=已同意,2=已拒绝 'status' => intval($orderRefund->status),//0=待商家处理,1=同意并已退款,2=已同意换货,3=已拒绝退换货 'is_user_send' => intval($orderRefund->is_user_send),//用户是否发货 'refund_type' => intval($orderRefund->type),//1退款退货 2换货 'is_user_cancel' => intval($orderRefund->is_user_cancel), //用户是否取消售后申请 0/1 'id' => $orderRefund->id ]; } $user = User::findOne($value['user_id']); $mobile = $value['mobile']; if ($user) { $mobile = $mobile ?: $user->binding; } $value['name'] = $value['name'] ?: $value['food_code']; $value['mobile'] = $mobile; } return [ 'code' => 0, 'msg' => 'success', 'data' => [ 'no_clerk_count' => $count_1, 'list' => $pagination['list'], 'page_count' => $pagination['pageNo'], 'row_count' => $pagination['totalCount'], ] ]; } public function orderDetail() { $order_id = $this->order_id; $order = Order::findOne($order_id); if (!$order) { return [ 'code' => 1, 'msg' => '订单不存在', ]; } $goods_list = OrderDetail::find()->alias('od') ->where(['od.order_id' => $order->id, 'od.is_delete' => 0])->all(); $num = 0; foreach ($goods_list as $i => $item) { $goods = Json::decode($item['goods_info']); $newItem = []; $newItem['goods_id'] = $item['goods_id']; $newItem['order_detail_id'] = $item['id']; $newItem['name'] = $item['goods_name'] ?: $goods['name']; $newItem['total_price'] = $item['total_price']; $newItem['num'] = $item['num']; $newItem['attr'] = json_decode($item['attr']); $num += intval($item['num']); $newItem['goods_pic'] = $item['pic'] ?: $goods['cover_pic']; $newList[] = $newItem; } $md_id = $order->md_id; if ($md_id > 0) { $md = Md::findOne($md_id); $order->name = $md->name; $order->mobile = $md->mobile; $order->address = $md->address; } $mobile = $order->mobile; $user = User::findOne($order->user_id); if ($user) { $mobile = $mobile ?: $user->binding; } $diy_shop_name = Option::get(OptionSetting::DIY_SHOP_NAME, $order->store_id, 'store', '自提配送')['value'] ?: '自提配送'; $diy_shop_name = Option::get(OptionSetting::DIY_SHOP_NAME, $order->store_id, 'pay', $diy_shop_name)['value']; $diy_express_name = Option::get(OptionSetting::DIY_EXPRESS_NAME, $order->store_id, 'store', '快递配送')['value'] ?: '快递配送'; $diy_express_name = Option::get(OptionSetting::DIY_EXPRESS_NAME, $order->store_id, 'pay', $diy_express_name)['value']; $store = Store::findOne($order->store_id); return [ 'code' => 0, 'msg' => 'success', 'data' => [ 'order_id' => $order->id, 'is_pay' => $order->is_pay, 'name' => $order->name ?: $order->food_code, 'mobile' => $mobile, 'address' => $order->address, 'order_no' => $order->order_no, 'addtime' => date('Y-m-d H:i', $order->created_at), 'total_price' => doubleval(sprintf('%.2f', $order->total_price)), 'goods_total_price' => doubleval(sprintf('%.2f', doubleval($order->total_price) - doubleval($order->express_price))), 'pay_price' => $order->pay_price, 'num' => $num, 'goods_list' => $newList, 'is_offline' => $order->is_offline, 'diy_express_name' => intval($order->is_offline) === 1 ? $diy_shop_name : $diy_express_name, 'pay_type' => $order->pay_type, 'apply_delete' => $order->apply_delete, 'trade_status' => $order->trade_status, 'is_send' => MdProfit::findOne(['order_id' => $order->id])->is_send, 'order_type' => (int)$order->order_type, 'mch_name' => $store->name ?: '平台自营' ], ]; } public function sendOrder() { $order_id = $this->order_id; $order_id = Json::decode($order_id); $express = $this->express; $expressNo = $this->express_no; if (empty($order_id) || !is_array($order_id)) { return [ 'code' => 1, 'msg' => '参数错误' ]; } $t = \Yii::$app->db->beginTransaction(); foreach ($order_id as $value) { $order = Order::findOne($value); if ($order->is_pay == 0) { $t->rollBack(); return [ 'code' => 1, 'msg' => '存在异常订单' ]; } if ((int)$order->trade_status !== 0) { return [ 'code' => 1, 'msg' => '订单状态异常' ]; } $order->send_time = time(); $order->trade_status = 2; $order->express = $express; $order->express_no = $expressNo; if (!$order->save()) { $t->rollBack(); return [ 'code' => 1, 'msg' => $order->errors ]; } } $t->commit(); return [ 'code' => 0, 'msg' => '处理完成' ]; } public function clerkOrder() { $order_id = $this->order_id; $order_id = Json::decode($order_id); if (empty($order_id) || !is_array($order_id)) { return [ 'code' => 1, 'msg' => '参数错误' ]; } $store_clerk_id = $this->store_clerk_id; $t = \Yii::$app->db->beginTransaction(); foreach ($order_id as $value) { $order = Order::findOne($value); if ($order->is_pay == 0) { $t->rollBack(); return $this->asJson([ 'code' => 1, 'msg' => '存在异常订单' ]); } $mp_profit = MdProfit::findOne(['order_id' => $value]); if ($mp_profit->is_clerk == 1 && $mp_profit->is_send == 0) { $mp_profit->is_send = 1; $mp_profit->clerk_id = $store_clerk_id; $mp_profit->updated_at = time(); if (!$mp_profit->save()) { $t->rollBack(); return [ 'code' => 1, 'msg' => $mp_profit->errors[0] ]; } $md = Md::findOne($mp_profit->md_id); $md->total_profit += $mp_profit->total_profit; $md->cash_profit += $mp_profit->total_profit; $md->clerk_profit += $mp_profit->clerk_profit; if (!$md->save()) { $t->rollBack(); return [ 'code' => 1, 'msg' => $md->errors[0] ]; } $order->clerk_id = get_user_id(); $order->trade_status = 3; if (!$order->save()) { $t->rollBack(); return [ 'code' => 1, 'msg' => $order->errors ]; } } } $t->commit(); return [ 'code' => 0, 'msg' => '处理成功' ]; } public function clerkInfo() { $store_id = $this->store_id; $order_no = $this->order_no; $order = Order::findOne([ 'order_no' => $order_no, 'is_delete' => 0, 'is_recycle'=> 0, 'store_id' => $store_id ]); if (!$order) { return [ 'code' => 1, 'msg' => '订单不存在' ]; } $status = ""; if ($order->is_pay == 0) { $status = '订单未付款'; } elseif ($order->is_pay == 1 && $order->trade_status == Order::ORDER_FLOW_NO_SEND) { $status = '订单待核销'; } elseif ($order->trade_status == Order::ORDER_FLOW_SEND) { $status = '订单待核销'; } elseif ($order->trade_status == Order::ORDER_FLOW_CONFIRM) { $status = '订单已核销'; } $goods_list = OrderDetail::find()->alias('od') ->where(['od.order_id' => $order->id, 'od.is_delete' => 0])->all(); $num = 0; foreach ($goods_list as $i => $item) { $newItem = []; $newItem['goods_id'] = $item['goods_id']; $newItem['order_detail_id'] = $item['id']; $newItem['name'] = $item->goods->name; $newItem['total_price'] = $item['total_price']; $newItem['num'] = $item['num']; $newItem['attr'] = json_decode($item['attr']); $num += intval($item['num']); $newItem['goods_pic'] = $item['pic'] ?: Goods::getGoodsPicStatic($item['id'])->pic_url; $order_refund = OrderRefund::findOne([ 'order_detail_id' => $item['id'], 'is_delete' => 0, ]); if ($order_refund) { $newItem['is_order_refund'] = 1; } else { $newItem['is_order_refund'] = 0; } if ($order->is_pay == 1 && $order->trade_status == Order::ORDER_FLOW_SEND) { $newItem['order_refund_enable'] = 1; } else { $newItem['order_refund_enable'] = 0; } if ($order->trade_status == Order::ORDER_FLOW_CONFIRM) { $after_sale_time = Option::get(OptionSetting::STORE_AFTER_SALE_TIME); if ((time() - $order->confirm_time) > $after_sale_time['value'] * 86400) {//超过可售后时间 $newItem['order_refund_enable'] = 0; } } if($item['is_level'] == 1 && ($order->discount && $order->discount < 10)){ $newItem['is_level'] = 1; } $newList[] = $newItem; } $shop = null; if ($order->md_id > 0) { $shop = Md::find()->select(['name', 'mobile', 'address', 'longitude', 'latitude'])->where(['store_id' => $store_id, 'id' => $order->md_id])->asArray()->one(); } else { $store = Store::findOne($store_id); $shop = [ 'name' => $store->name, 'mobile' => $store->contact_tel, 'longitude' => $store->longitude, 'latitude' => $store->latitude, 'address' => $store->address ]; } if ($order->before_update_price) { if ($order->before_update_price < $order->pay_price) { $before_update = "加价"; $money = $order->pay_price - $order->before_update_price; } else { $before_update = "优惠"; $money = $order->before_update_price - $order->pay_price; } } else { $before_update = ""; $money = ""; } if(!$order->integral){ $order->integral = 0; } $user = User::findOne($order->user_id); $mobile = $order->mobile; if ($user) { $mobile = $mobile ?: $user->binding; } $md = null; return [ 'code' => 0, 'msg' => 'success', 'data' => [ 'order_id' => $order->id, 'order_type' => $order->order_type, 'book_info' => $order->book_info, 'md' => $md, 'is_pay' => $order->is_pay, 'status' => $status, 'express' => $order->express, 'express_no' => $order->express_no, 'name' => $order->name ?: $order->food_code, 'mobile' => $mobile, 'address' => $order->address, 'order_no' => $order->order_no, 'addtime' => date('Y-m-d H:i', $order->created_at), 'total_price' => doubleval(sprintf('%.2f', $order->total_price)), 'express_price' => doubleval(sprintf('%.2f', $order->express_price)), 'goods_total_price' => doubleval(sprintf('%.2f', doubleval($order->total_price) - doubleval($order->express_price))), 'coupon_sub_price' => isset($order->coupon_sub_price) ? $order->coupon_sub_price : 0, 'pay_price' => $order->pay_price, 'num' => $num, 'goods_list' => $newList, 'is_offline' => $order->is_offline, 'content' => $order->content ? $order->content : "", 'before_update' => $before_update, 'money' => $money, 'shop' => $shop, 'discount' => $order->discount, 'user_coupon_id' => $order->user_coupon_id, 'words' => $order->words, 'pay_type' => $order->pay_type, 'integral'=> json_decode($order->integral), 'type' => $order->type, 'trade_status' => $order->trade_status ], ]; } /** * 到货通知 * @author: hankaige * @Time: 2024/4/8 13:49 */ public function notice(){ $orderIds = $this->order_id; if(count($orderIds) <= 0){ return ['code'=>1,'msg'=>'请选择要通知订单']; } foreach($orderIds as $orderId){ $order = Order::find()->with(['orderDetail'])->where(['id'=>$orderId])->asArray()->one(); if(empty($order)){ continue; } $goodsName = ''; foreach($order['orderDetail'] as $goods){ $goodsName .= $goods['name'] . ','; } $md = Md::findOne($order['md_id']); NoticeSend::ShopArrive($order['user_id'],$order['mobile'],$order['order_no'],$goodsName,$md->name); } return ['code'=>0,'msg' => '已通知客户']; } /** * 设置订单备注 * @return * @author: hankaige * @Time: 2024/4/10 16:33 */ public function setOrderWords(){ $orderId = $this->order_id; if(empty($orderId)){ return ['code'=>1,'msg'=>'订单ID不能为空']; } $order = Order::findOne($orderId); if(empty($order)){ return ['code'=>1,'msg'=>'订单不存在']; } $words = $this->words; if(empty($words)){ return ['code'=>1,'msg'=>'备注不能为空']; } $order->words = $words; $res = $order->save(); if($res){ return ['code'=>0,'msg'=>'保存成功']; } return ['code'=>1,'msg'=>'保存失败']; } public function orderCancel() { $order_id = $this->order_id; $store_id = $this->store_id; $order = Order::findOne(['id' => $order_id, 'store_id' => $store_id, 'is_delete' => Order::IS_DELETE_FALSE]); 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, 0, $order['mch_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 ); } } } return ['code'=>0 ,'msg'=>'取消成功']; } /** * 平台商品订单取消 */ public function applyOrderDelete() { $store_id = $this->store_id; $order_id = $this->order_id; $where = [ 'id' => $order_id, 'is_delete' => Order::IS_DELETE_FALSE, 'store_id' => $store_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) { //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, 0, $order['mch_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() { $order_refund_id = $this->order_refund_id; $store_id = $this->store_id; $order_refund = OrderRefund::findOne([ 'id' => $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]); $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, ]; } return $this->submit1($order_refund); } /** * 平台订单退货退款 * @param $order_refund */ private function submit1($order_refund) { $action = $this->action; $refund = $this->refund; $refund_price = $this->refund_price; $address_id = $this->address_id; $remark = $this->remark; $order = Order::findOne($order_refund->order_id); if ($action == 1) {//同意 if ($refund != 1) { //仅同意,还未退款 if (isset($refund_price)) { if ($refund_price > $order_refund->refund_price) { return [ 'code' => 1, 'msg' => '退款金额不能大于' . $order_refund->refund_price, ]; } $order_refund->refund_price = $refund_price; } if (!$address_id) { return [ 'code' => 1, 'msg' => '退货地址不能为空', ]; }; $refundAddress = RefundAddress::findOne($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 = $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_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 ($action == 2) {//拒绝 $order_refund->status = 3; $order_refund->refuse_desc = $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], ]; } } public function confirm() { $order_id = $this->order_id; $store_id = $this->store_id; $store_clerk_id = $this->store_clerk_id; $t = \Yii::$app->db->beginTransaction(); try { // 如果不是自提点管理员判断是否为核销元 $staff = MdStaff::findOne($store_clerk_id); $order = Order::findOne([ 'store_id' => $store_id, 'id' => $order_id, 'trade_status' => [Order::ORDER_FLOW_SEND, Order::ORDER_FLOW_NO_SEND], 'is_delete' => 0, ]); if (!$order) { throw new \Exception('订单不存在'); } $orderTransitInfo = OrderTransit::find()->where(['order_id' => $order->id, "is_delete" => 0, 'status' => [0, 2]])->one(); if ($orderTransitInfo) { throw new \Exception('云仓订单未发货或已收货'); } $order->clerk_id = get_user_id(); $order->trade_status = Order::ORDER_FLOW_CONFIRM; $order->confirm_time = time(); if ($order->pay_type == 2) { $order->is_pay = 1; $order->pay_time = time(); } if ($order->save()) { if ($staff) { $mdProfit = MdProfit::findOne(['order_id' => $order->id, 'is_send' => 0]); if ($mdProfit) { $mdProfit->clerk_id = $staff->id; $mdProfit->is_send = 1; if (!$mdProfit->save()) { throw new \Exception(json_encode($mdProfit->errors, JSON_UNESCAPED_UNICODE)); } if ($mdProfit->md_id > 0) { $md = \app\models\Md::findOne($mdProfit->md_id); $md->total_profit += $mdProfit->total_profit; $md->cash_profit += $mdProfit->total_profit; $md->clerk_profit += $mdProfit->clerk_profit; $md->save(); } } } //如果存在可转单 // $orderTransitInfo = OrderTransit::find()->where(['order_id' => $order->id, "is_delete" => 0, 'status' => 1])->all(); // if($orderTransitInfo){ // // $cloud_store_token = $this->getCloudStoreToken($this->store_id); // $cloud_store_token = get_merchant_token(0, $order->store_id); // //$cloudInfo = StoreCloud::find()->where(['store_id'=>$this->store_id,"is_delete"=>0])->one(); // if($cloud_store_token) { // foreach($orderTransitInfo as $val){ // $form = new MerchantForm(); // $data = $form->mchPurchaseOrderConfirm(0, $order->store_id, $val->attributes['cloud_order_id']); // if ((int)$data['code'] !== 0) { // return $data; // } // $val->status = 2; // $val->confirm_time = time(); // $val->save(); // if ($val->errors) { // return [ // 'code' => 1, // 'msg' => implode(';', array_values($val->firstErrors)) // ]; // } // } // } else { // return [ // 'code' => 1, // 'msg' => "token信息错误" // ]; // } // } $t->commit(); return [ 'code' => 0, 'msg' => '已确认收货' ]; } else { throw new \Exception('确认收货失败'); } } catch (\Exception $e) { $t->rollBack(); return [ 'code' => 1, 'msg' => $e->getMessage() . $e->getLine() ]; } } }