request->hostInfo . '/web/v1/statics/wav/store/W5611.wav'; $data = [ 'hasMsg' => 0, 'desc' => '', 'media' => $media, ]; $msg = $this->getMsg($admin, $store_id, $md_id, $mch_id); if($msg['hasMsg']){ $data['hasMsg'] = 1; $data['desc'] = $msg['desc']; } return $this->asJson([ 'code' => 0, 'msg' => 'ok', 'data' => $data, '$admin' => $admin['username'], '$admin_type' => $admin['type'], '$store_id' => $store_id, '$md_id' => $md_id, ]); } public function getMsg($admin, $store_id, $md_id, $mch_id = 0) { $desc = ''; $hasMsg = 0; if($admin['type'] == Admin::ADMIN_TYPE_SUPPLIER){ $supplier_id = $admin['type_id']; $form = new \app\modules\admin\models\SupplierForm(); $form->supplier_id = $supplier_id; $res = $form->getLastOrderInfo(); if($res['data']['order_info']){ $hasMsg = $res['data']['order_info']['id']; $desc .= sprintf('🟢提醒:订单号:%s 支付时间:%s', $res['data']['order_info']['order_no'], date('H:i:s', $res['data']['order_info']['pay_time'])); } if($res['data']['purchase_order_info']){ $hasMsg = $res['data']['purchase_order_info']['id']; $desc .= sprintf('🟢提醒:订单号:%s 支付时间:%s', $res['data']['purchase_order_info']['order_no'], date('H:i:s', $res['data']['purchase_order_info']['pay_time'])); } }else if(in_array($admin['type'], [Admin::ADMIN_TYPE_DEFAULT, Admin::ADMIN_TYPE_STORE, Admin::ADMIN_TYPE_MD])){ $cacheK = 'chidian_admin_frontend_orderMsg_maxId_' . $admin['username'] . $store_id . $md_id; $cacheV = (int)cache()->get($cacheK); $query = Order::find()->where([ 'store_id' => $store_id, 'is_pay' => 1, ])->andWhere([ 'and', ['>', 'id', $cacheV], ['>', 'pay_time', time() - 60 * 3], ])->orderBy('id DESC'); if($md_id){ $query->andWhere(['md_id' => $md_id]); } if($mch_id){ $query->andWhere(['mch_id' => $mch_id]); } $order = $query->limit(1)->one(); if($order){ $hasMsg = $order->id; $desc = sprintf('提醒:订单号:%s 支付时间:%s', $order->order_no, date('H:i:s', $order->pay_time)); cache()->set($cacheK, $order->id); } } return [ 'hasMsg' => $hasMsg, 'desc' => $desc, ]; } /** * 平台商品订单列表 * @return \yii\web\Response */ public function actionList() { $store_id = get_store_id(); $form = new OrderListForm(); $form->attributes = get_params(); $is_offline = get_params('is_offline'); if (isset($is_offline)) { $form->is_offline = explode(',', $is_offline); } else { $form->is_offline = Order::IS_OFFLINE_FALSE; } if($form->order_origin == 4){ unset($form->is_offline); } $form->store_id = $store_id; $form->supplier_id = get_params('supplier_id'); $form->order_id = get_params('order_id'); $form->type = get_params('type'); $form->province_id = get_params('province_id'); $form->city_id = get_params('city_id'); $form->district_id = get_params('district_id'); if(get_mch_id()){ $form->mch = 1; $form->mch_id = get_mch_id(); } return $this->asJson($form->search(0, all_params())); } /** * 获取快递单号 */ public function actionGetExpressData() { $form = new OrderListForm(); $form->store_id = get_store_id(); $form->order_id = post_params("order_id", 0); return $this->asJson($form->getExpressData()); } public function actionRefundMoney() { $store_id = get_store_id(); $where = [ 'id' => input_params('order_id', 0), 'is_delete' => Order::IS_DELETE_FALSE, // 'store_id' => $store_id, // 'mch_id' => 0, ]; $order = Order::findOne($where); if (!$order) { return $this->asJson([ 'code' => 1, 'msg' => '订单不存在,请刷新页面后重试' ]); } $form = new OrderRevokeForm(); $desc = input_params('desc', ''); $refund_price = input_params('refund_price', 0.01); return $this->asJson($form->refundMoney($order, $desc, $refund_price)); } /** * 平台商品订单取消 */ public function actionApplyOrderDelete() { $store_id = get_store_id(); if ($store_id <= 0) { $store_id = [0, -1]; } $where = [ 'id' => post_params('id'), 'is_delete' => Order::IS_DELETE_FALSE, // 'store_id' => $store_id, //先注释掉,代理发货不验证此参数 // 'mch_id' => 0, ]; $handle_type = \app\models\OrderAdminHandleLog::HANDLE_TYPE_CANCEL; // type=1 后台主要取消订单, type=0 用户发起订单取消申请 if (post_params('type') == Order::CANCEL_USER_TYPE) { $where['apply_delete'] = Order::ORDER_APPLY_DELETE; $handle_type = \app\models\OrderAdminHandleLog::HANDLE_TYPE_AGREE_CANCEL; } $order = Order::findOne($where); if (!$order) { return $this->asJson([ 'code' => 1, 'msg' => '订单不存在,请刷新页面后重试' ]); } // 发送备注消息 $order->remark = post_params('remark', ''); // 同意 if (post_params('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, 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 ){ $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)]); SaaSLeaguePriceLog::setLeaguePriceLog( $order->store_id, $saas_user->id, $take_price, $before, SaaSLeaguePriceLog::TYPE_CANCEL, SaaSLeaguePriceLog::SEND_TYPE, 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; $result = $merchant->purchaseOrderCancel(); debug_log('云仓订单取消'); debug_log($result); } } // } } 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 $this->asJson($res); } /** * 修改物流单号 */ public function actionSetExpressNo() { try { $order_id = input_params('order_id'); $express_no = input_params('express_no'); $express = input_params('express'); $is_express = input_params('is_express', 1); $order = Order::findOne($order_id); if (empty($order)) { throw new \Exception('订单不存在'); } $expressList = Express::getExpressList(); $ok = false; foreach ($expressList as $value) { if ($value['name'] == $express) { $ok = true; break; } } if (!$ok && (int)$is_express === 1) { return $this->asJson([ 'code' => 1, 'msg' => '快递公司不正确' ]); } if($is_express == 0){ $order->express_no = ''; $order->express = ''; }else{ $order->express_no = $express_no; $order->express = $express; } if (!$order->save()) { throw new \Exception('保存失败 ' . json_encode($order->errors)); } \app\models\OrderAdminHandleLog::addHandleLog($order_id, \app\models\OrderAdminHandleLog::HANDLE_TYPE_SET_EXPRESS_NO); return $this->asJson([ 'code' => 0, 'msg' => '修改成功' ]); } catch (\Exception $e) { return $this->asJson([ 'code' => 1, 'msg' => $e->getMessage() ]); } } /** * 添加备注 */ public function actionSellerComments() { $store_id = get_store_id(); $order_id = get_params('order_id'); $seller_comments = get_params('seller_comments'); $form = Order::findOne($order_id); //'store_id' => $store_id, //先注释掉,代理发货不验证此参数 $form->seller_comments = $seller_comments; if ($form->save()) { \app\models\OrderAdminHandleLog::addHandleLog($order_id, \app\models\OrderAdminHandleLog::HANDLE_TYPE_ADD_REMARK); return $this->asJson([ 'code' => 0, 'msg' => '操作成功', ]); } else { return $this->asJson([ 'code' => 1, 'msg' => '操作失败', ]); } } /** * 添加商家留言 */ public function actionSetWords() { $store_id = get_store_id(); $order_id = post_params('order_id'); $words = post_params('words'); $form = Order::findOne($order_id); //'store_id' => $store_id, //先注释掉,代理发货不验证此参数 $form->words = $words; if ($form->save()) { \app\models\OrderAdminHandleLog::addHandleLog($order_id, \app\models\OrderAdminHandleLog::HANDLE_TYPE_ADD_MESSAGE); return $this->asJson([ 'code' => 0, 'msg' => '操作成功', ]); } else { return $this->asJson([ 'code' => 1, 'msg' => '操作失败', ]); } } /** * 更新订单地址 * @return \yii\web\Response */ public function actionSetOrderAddress() { $commonUpdateAddress = new CommonUpdateAddress(); $commonUpdateAddress->data = post_params(); $updateAddress = $commonUpdateAddress->updateAddress(); return $this->asJson($updateAddress); } /** * 售后订单列表 */ public function actionRefund() { $form = new OrderRefundListForm(); $form->attributes = \Yii::$app->request->get(); $form->attributes = \Yii::$app->request->post(); $form->store_id = get_store_id(); if(get_mch_id()){ $form->mch = 1; $form->mch_id = get_mch_id(); } return $this->asJson($form->search(all_params())); } /** * 处理售后订单 */ public function actionRefundHandle() { $form = new OrderRefundForm(); $form->attributes = post_params(); $form->store_id = get_store_id(); return $this->asJson($form->save()); } /** * 商品评论列表 */ public function actionCommentList() { $form = new OrderCommentForm(); $form->store_id = get_store_id(); if(get_mch_id()){ $form->mch = 1; $form->mch_id = get_mch_id(); } return $this->asJson($form->getComment()); } /** * 评论回复 */ public function actionCommentReply() { $form = new OrderCommentForm(); $form->id = post_params('id'); $form->reply_content = post_params('reply_content'); $form->store_id = get_store_id(); return $this->asJson($form->reply()); } /** * 评论显示隐藏 */ public function actionCommentHide() { $form = new OrderCommentForm(); $form->id = post_params('id'); $form->status = post_params('status'); $form->store_id = get_store_id(); return $this->asJson($form->hideStatus()); } /** * 评论删除 */ public function actionCommentDelete() { $form = new OrderCommentForm(); $form->id = post_params('id'); $form->status = post_params('status'); $form->store_id = get_store_id(); return $this->asJson($form->deleteStatus()); } /** * @return array|string */ public function actionCommentEdit() { $store_id = get_store_id(); $form = new OrderCommentForm(); $pic_list = array(); if (!empty(post_params('pic_list'))) { if (count(post_params('pic_list')) > 6) { return $this->asJson( [ 'code' => 1, 'msg' => '图片最多为6张' ] ); } foreach (post_params('pic_list') as $item) { $pic_list[] = Html::encode($item); } } $form->pic_list = json_encode($pic_list); if (json_encode($pic_list) === '[""]') { $form->pic_list = '[]'; } $form->store_id = $store_id; $form->attributes = post_params(); $created_at = post_params('created_at'); $form->created_at = $created_at ? strtotime($created_at) : time(); return $this->asJson($form->save()); } /** * 订单发货 * @return mixed */ public function actionSend() { $form = new OrderSendForm(); $post = post_params(); if ($post['is_express'] == OrderSendForm::EXPRESS_TYPE_EXPRESS) { $form->scenario = 'EXPRESS'; }elseif ($post['is_express'] == OrderSendForm::EXPRESS_TYPE_DADA){ $form->scenario = 'DADA'; }elseif ($post['is_express'] == OrderSendForm::EXPRESS_TYPE_UU){ $form->scenario = 'UU'; }elseif ($post['is_express'] == OrderSendForm::EXPRESS_TYPE_PEISONG){ $form->scenario = 'PEISONG'; } $form->attributes = $post; $form->store_id = get_store_id(); return $this->asJson($form->save()); } /** * 货到付款 确认收货 * @return \yii\web\Response */ public function actionConfirm() { $store_id = get_store_id(); $order_id = post_params('order_id'); $order = Order::findOne([ 'id' => $order_id, // 'mch_id' => 0, // 'store_id' => $store_id //先注释掉,代理发货不验证此参数 ]); if (!$order) { return $this->asJson([ 'code' => 1, 'msg' => '订单不存在,请刷新重试', ]); } if ($order->pay_type != 2) { return $this->asJson([ 'code' => 1, 'msg' => '订单支付方式不是货到付款,无法确认收货', ]); } if ($order->trade_status != Order::ORDER_FLOW_SEND) { return $this->asJson([ 'code' => 1, 'msg' => '订单未发货', ]); } $order->trade_status = Order::ORDER_FLOW_CONFIRM; $order->confirm_time = time(); $order->is_pay = Order::IS_PAY_TRUE; $order->pay_time = time(); if ($order->save()) { //测试用 // $order_detail = new OrderDetail(); // $order_detail->order_id = 5; // $order_detail->goods_id = 1; // $order_detail->id = 5; // $order_detail->order->user_id = 2; // $order_detail->total_price = 100; // $order_detail->afterSave(false, []); \app\models\OrderAdminHandleLog::addHandleLog($order->id, \app\models\OrderAdminHandleLog::HANDLE_TYPE_CONFIRM); return $this->asJson([ 'code' => 0, 'msg' => '成功', ]); } else { return $this->asJson([ 'code' => 1, 'msg' => implode(';', array_values($order->firstErrors)) ]); } } /** * 小票打印 * @return mixed */ public function actionPrintOrder() { $data = post_params(); $type = $data['type'] ?? 0; $store_id = get_store_id(); $md_id = get_md_id(); $mch_id = get_mch_id(); if ((int)$md_id === -1 || (int)$md_id === 0) { $md_id = 0; } // 订单打印 $print = new PrintOrder($store_id, $data['order_id'], 'reprint', $data['order_type'], $md_id ?: 0, $type, $mch_id); return $this->asJson($print->print_order()); } /** * 订单打印 */ public function actionPrint() { $id = \Yii::$app->request->get('id'); $express = \Yii::$app->request->get('express'); $post_code = \Yii::$app->request->get('code'); $type = \Yii::$app->request->get('type'); $form = new PrintExpress(); $form->store_id = get_store_id(); $form->order_id = $id; $form->express = $express; $form->post_code = $post_code; $form->type = $type; return $this->asJson($form->send()); } /** * 核销订单 * @return mixed */ public function actionClerk() { $form = new OrderClerkForm(); $form->attributes = post_params(); $form->order_model = 'app\models\Order'; $form->store_id = get_store_id(); return $this->asJson($form->clerk()); } /** * 修改价格 * @return mixed */ public function actionModifyPrice() { $form = new OrderPriceForm(); $form->attributes = post_params(); $form->store_id = get_store_id(); return $this->asJson($form->save()); } /** * 移入回收站 */ public function actionEdit() { $order_id = get_params('order_id'); $is_recycle = get_params('is_recycle'); if ($is_recycle == 0 || $is_recycle == 1) { $form = Order::find()//->where(['store_id' => get_store_id(), 'mch_id' => 0])//先注释掉,代理发货不验证此参数 ->where('id = :order_id', [':order_id' => $order_id])->one(); $form->is_recycle = $is_recycle; if ($form && $form->save()) { $handle_type = \app\models\OrderAdminHandleLog::HANDLE_TYPE_RECYCLE; if ($is_recycle == 0) { $handle_type = \app\models\OrderAdminHandleLog::HANDLE_TYPE_CANCEL_RECYCLE; } \app\models\OrderAdminHandleLog::addHandleLog($order_id, $handle_type); return $this->asJson([ 'code' => 0, 'msg' => '操作成功', ]); } }; return $this->asJson([ 'code' => 1, 'msg' => '操作失败', ]); } /** * 订单物流信息 */ public function actionExpressDetail() { $form = new ExpressDetailForm(); $form->attributes = get_params(); $form->store_id = get_store_id(); $form->user_id = get_user_id(); return $this->asJson($form->search()); } /** * 修改自提点 */ public function actionUpdateShop() { $form = new OrderShopForm(); $form->order_id = get_params('order_id'); $form->shop_id = get_params('shop_id'); return $this->asJson($form->save()); } /** * 获取订单提示列表 */ public function actionMessage() { $form = new OrderMessageForm(); $form->store_id = get_store_id(); $form->limit = 100; $form->is_read = 1; $arr = $form->search(); return $this->asJson([ 'code' => 0, 'msg' => '', 'data' => $arr['list'], 'total_count' => $arr['count'], ]); } /** * 线下转账列表 */ public function actionPayOfflineList() { $params = all_params(); $query = OrderPayOffline::find()->where(['is_delete' => 0, 'store_id' => get_store_id()]); if($params['order_no']){ $order = Order::findOne(['order_no' => trim($params['order_no'])]); $order_id = (int)$order['id']; $query->andWhere(['order_id' => $order_id]); } if($params['begin_time']){ $query->andWhere(['>=', 'add_at', strtotime($params['begin_time'])]); } if($params['end_time']){ $query->andWhere(['<=', 'add_at', strtotime($params['end_time'])]); } if($params['status'] > -1){ $query->andWhere(['status' => (int)$params['status']]); } $query->orderBy('id DESC'); $list = pagination_make($query); foreach($list['list'] as &$item){ $item['order'] = Order::findOne($item['order_id']); $item['add_at'] = date('Y-m-d H:i:s', $item['add_at']); $item['pic_list'] = json_decode($item['pic_list'], true); } return $this->asJson([ 'code' => 0, 'msg' => '', 'data' => $list, ]); } /** * 线下转账审核 */ public function actionPayOfflineAudit() { $params = all_params(); $audit = OrderPayOffline::auditPay(get_store_id(), (int)$params['id'], (int)$params['status'], $params['admin_remark']); return $this->asJson($audit); } /** * 线下转账删除 */ public function actionPayOfflineDel() { $params = all_params(); OrderPayOffline::delPay(get_store_id(), $params['id']); return $this->asJson([ 'code' => 0, 'msg' => '操作成功', ]); } public function actionGetOrderInfoByNo() { $order_no = get_params('order_no'); $order = Order::find()->alias('o') ->leftJoin(['u' => User::tableName()], 'o.user_id = u.id') ->leftJoin(['su' => SaasUser::tableName()], 'su.mobile=u.binding') ->where([ 'o.order_no' => $order_no, 'o.store_id' => get_store_id(), 'o.is_delete' => 0, ])->select('o.id, su.name, u.id as user_id')->one(); if (!$order) { return $this->asJson([ 'code' => 1, 'msg' => '订单不存在', ]); } return $this->asJson([ 'code' => 0, 'msg' => 'success', 'data' => [ 'order_id' => $order->id, 'user_id' => $order->user_id, 'user_name' => $order->name, ], ]); } /** * 获取快递公司列表 * @return void */ public function actionExpressList() { $expressList = Express::getExpressList(); return $this->asJson([ 'code' => 0, 'msg' => 'success', 'data' => $expressList, ]); } /** * 待发货订单导出 * @return void */ public function actionSendOrderExport() { $order_list = Order::find() ->where(['store_id' => get_store_id(), 'is_delete' => Order::IS_DELETE_FALSE]) ->andWhere(['trade_status' => Order::ORDER_FLOW_NO_SEND]) ->andWhere(['is_pay' => Order::IS_PAY_TRUE,'mch_id'=>0,'is_offline' => Order::IS_OFFLINE_FALSE]) ->orderBy('id DESC') ->select('id,order_no') ->all(); // 获取可导出数据 $rows = [[ '序号', '订单号', '快递单号', ]]; foreach($order_list as $item){ $r = [ '', $item['order_no'], '' ]; $rows[] = $r; } $writer = \Spatie\SimpleExcel\SimpleExcelWriter::streamDownload(time() . '.xlsx')->noHeaderRow() ->addRows($rows)->toBrowser(); } /** * 批量发货 * @return array|void */ public function actionBatchSendOrder() { $store_id = get_store_id(); $express = post_params('express', ''); $filename = $_FILES['excel']['name']; $tmpname = $_FILES['excel']['tmp_name']; $path = \Yii::$app->basePath . '/web/temp/'; if(!is_dir($path)){ mkdir($path); } $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION)); if (($ext != 'xlsx') && ($ext != 'xls')) { return [ 'code' => 1, 'msg' => '请上传excel文件' ]; } $file = time() . $store_id . '.' . $ext; $uploadfile = $path . $file; move_uploaded_file($tmpname, $uploadfile); $rows = \Spatie\SimpleExcel\SimpleExcelReader::create($uploadfile) ->getRows(); $err = []; $rows->each(function (array $item) use ($store_id,$express, &$err) { try{ $t = \Yii::$app->db->beginTransaction(); $order_no = trim($item['订单号']); $express_no = trim($item['快递单号']); if (!$order_no){ throw new \Exception('表单信息不完整,请检查'); } $order = Order::findOne([ 'is_delete' => 0, 'order_no' => $order_no, ]); if (!$order) { throw new \Exception('订单不存在或已删除'); } if ($order->is_pay == 0 && $order->pay_type != 2) { throw new \Exception('订单未支付'); } if ($order->apply_delete == Order::ORDER_APPLY_DELETE) { throw new \Exception('该订单正在申请取消操作,请先处理'); } // 订单类型判断提示 $all_goods = OrderDetail::find()->where(['order_id' => $order->id])->asArray()->all(); $is_have_express = false; foreach ($all_goods as $_goods) { if ($_goods['delivery_type'] == OrderDetail::GOODS_DELIVERY_EXPRESS) { $is_have_express = true; break; } } if ($order->is_offline == Order::IS_OFFLINE_TRUE && !$is_have_express ) { throw new \Exception('此订单商品皆为自提,请选择无需物流发货'); } if ($order->is_offline == Order::IS_OFFLINE_TRUE && $is_have_express ) { throw new \Exception('此订单包含普通快递配送,请选择快递方式发货'); } if ($express != '无需快递'){ $order->express = $express; $order->express_no = $express_no; } $order->trade_status = ORDER::ORDER_FLOW_SEND; $order->send_time = time(); if ($order->save()) { \app\models\OrderAdminHandleLog::addHandleLog($order->id, \app\models\OrderAdminHandleLog::HANDLE_TYPE_SEND); $goods = Goods::findOne(OrderDetail::findOne(['order_id' => $order->id])->goods_id); if ($order->giving_gifts_received_user_id) { NoticeSend::OrderSend($order->giving_gifts_received_user_id, $order->mobile, $order->order_no, $goods->name, $express, $express_no, $order->order_type); } else { NoticeSend::OrderSend($order->user_id, $order->mobile, $order->order_no, $goods->name, $express, $express_no); } $t->commit(); }else{ $t->rollBack(); $res = [ 'code' => 1, 'msg' => $order->getErrors() ]; } } catch (\Exception $e){ $t->rollBack(); $res = [ 'code' => 1, 'msg' => $e->getMessage(), ]; } if($res['code'] != 0){ $err[] = array_merge($res, ['order_no' => $order_no]); } }); $count = count($err); @unlink($uploadfile); return $this->asJson([ 'code' => $count ? 1 : 0, 'msg' => "操作完成" . ($err ? ",失败{$count}条数据" : ''), 'err' => $err, ]); } /** * 新增评论 */ public function actionCommentSave() { $store_id = get_store_id(); $form = new OrderCommentForm(); $pic_list = array(); if (!empty(post_params('pic_list'))) { if (count(post_params('pic_list')) > 6) { return $this->asJson( [ 'code' => 1, 'msg' => '图片最多为6张' ] ); } foreach (post_params('pic_list') as $item) { $pic_list[] = Html::encode($item); } } $form->pic_list = json_encode($pic_list); if (json_encode($pic_list) === '[""]') { $form->pic_list = '[]'; } $form->store_id = $store_id; $form->attributes = post_params(); $created_at = post_params('created_at'); $form->created_at = $created_at ? strtotime($created_at) : time(); return $this->asJson($form->commentSave()); } /** * 订单单个商品退款 */ public function actionOrderGoodsCancelList() { $store_id = get_store_id(); $form = new OrderListForm(); $form->attributes = get_params(); $is_offline = get_params('is_offline'); if (isset($is_offline)) { $form->is_offline = explode(',', $is_offline); } else { $form->is_offline = Order::IS_OFFLINE_FALSE; } if($form->order_origin == 4){ unset($form->is_offline); } $form->store_id = $store_id; $form->supplier_id = get_params('supplier_id'); $form->order_id = get_params('order_id'); $form->type = get_params('type'); $form->province_id = get_params('province_id'); $form->city_id = get_params('city_id'); $form->district_id = get_params('district_id'); return $this->asJson($form->orderGoodsCancelList()); // $store_id = get_store_id(); // $order_no = get_params('order_no'); // $refund_order_no = get_params('refund_order_no'); // $status = get_params('status'); // $username = get_params('username'); // $mobile = get_params('mobile'); // $goods_name = get_params('goods_name'); // // $query = \app\models\OrderGoodsCancel::find()->alias('ogc') // ->leftJoin(['od' => OrderDetail::tableName()], 'od.id = ogc.order_detail_id') // ->leftJoin(['o' => Order::tableName()], 'o.id = ogc.order_id') // ->leftJoin(['u' => User::tableName()], 'o.user_id = u.id') // ->where(['ogc.store_id' => $store_id]); // // // $query->andWhere(['OR', // [ // 'ogc.status' => \app\models\OrderGoodsCancel::STATUS_APPLY, // 'o.trade_status' => Order::ORDER_FLOW_NO_SEND // ], [ // '<>', 'ogc.status', \app\models\OrderGoodsCancel::STATUS_APPLY // ] // ]); // // if ($order_no) { // $query->andWhere(['LIKE', 'o.order_no', $order_no]); // } // // if ($refund_order_no) { // $query->andWhere(['LIKE', 'ogc.refund_order_no', $refund_order_no]); // } // // if ($username) { // $query->andWhere(['LIKE', 'u.nickname', $username]); // } // // if ($mobile) { // $query->andWhere(['LIKE', 'u.binding', $mobile]); // } // // if ($goods_name) { // $query->andWhere(['LIKE', 'od.goods_name', $goods_name]); // } // // if (isset($status) && in_array($status, [ // \app\models\OrderGoodsCancel::STATUS_APPLY, // \app\models\OrderGoodsCancel::STATUS_PASS, // \app\models\OrderGoodsCancel::STATUS_REFUSE, // \app\models\OrderGoodsCancel::STATUS_PAY, // \app\models\OrderGoodsCancel::STATUS_PAY_FAIL, // \app\models\OrderGoodsCancel::STATUS_CANCEL, // ])) { // $query->andWhere(['ogc.status' => $status]); // } // // $query->select('ogc.id, o.order_no, ogc.refund_order_no, ogc.status, ogc.created_at, od.goods_id, // od.goods_name, od.num, ogc.refund_price, ogc.num refund_num, od.pic, u.nickname, u.binding, u.avatar_url')->orderBy('ogc.id DESC'); // // $list = pagination_make($query); // foreach ($list['list'] as &$item) { // $item['status'] = intval($item['status']); // $item['status_text'] = \app\models\OrderGoodsCancel::$status_text[$item['status']]; // $item['created_at'] = date('Y-m-d H:i:s', $item['created_at']); // } // return $this->asJson([ // 'code' => 0, // 'msg' => '', // 'data' => $list // ]); } //订单单个商品取消处理 public function actionOrderGoodsCancelHandle() { try { $id = post_params('id'); $status = intval(post_params('status')); $result = \app\models\OrderGoodsCancel::orderGoodsCancelHandle($id, $status); return $this->asJson($result); } catch (\Exception $e) { return $this->asJson([ 'code' => 1, 'msg' => $e->getMessage() ]); } } //订单商品退款 public function actionOrderGoodsCancel() { $order_id = post_params('order_id'); $order_detail_id = post_params('order_detail_id'); $num = post_params('num'); $order = \app\models\Order::findOne($order_id); if (!$order) { return $this->asJson([ 'code' => 1, 'msg' => '订单不存在' ]); } // if (intval($order->trade_status) !== \app\models\Order::ORDER_FLOW_NO_SEND) { // return $this->asJson([ // 'code' => 1, // 'msg' => '订单已经发货' // ]); // } if (intval($order->is_sale) || ($order->future_sales_time > 0 && $order->future_sales_time <= time())) { return $this->asJson([ 'code' => 1, 'msg' => '订单已过售后期' ]); } $order_detail = \app\models\OrderDetail::findOne($order_detail_id); if (!OrderGoodsCancel::is_activity_goods($order->id, $order_detail->id)) { return $this->asJson([ 'code' => 1, 'msg' => '营销活动产品不能取消' ]); } //如果订单有售后待处理 不允许后台操作单独退款 $orderRefund = \app\models\OrderRefund::findOne(['order_id' => $order->id, 'status' => OrderRefund::STATUS_IN]); if ($orderRefund) { return $this->asJson([ 'code' => 1, 'msg' => '订单有售后待处理 不允许后台操作单独退款' ]); } $goods_info = OrderGoodsCancel::getCancelGoodsOrderQuery( $order->id, 'num, refund_price', false, $order_detail_id )->asArray()->all(); $goods_price = array_sum(array_column($goods_info, 'refund_price')) ?: 0; $goods_num = array_sum(array_column($goods_info, 'num')) ?: 0; if ($order_detail->num < ($num + $goods_num)) { //申请数量超过下单数量 return $this->asJson([ 'code' => 1, 'msg' => '申请退款数量超过下单数量' ]); } $refund_price = 0; //计算退款金额 如果带上这次已经全部退款 那么就将剩余的金额全退了 if ($order_detail->num - $goods_num == $num) { $refund_price = bcsub($order_detail->total_price, $goods_price, 2); } //如果没有全部退款 那么计算单个的商品金额 然后再乘以当前的退款商品数量 if ($order_detail->num - $goods_num > $num) { $once_goods_price = bcdiv($order_detail->total_price, $order_detail->num, 2);//计算单个的商品金额 $refund_price = bcmul($once_goods_price, $num, 2); } $order_goods_cancel = new \app\models\OrderGoodsCancel(); $order_goods_cancel->order_id = $order_id; $order_goods_cancel->order_detail_id = $order_detail_id; $order_goods_cancel->num = $num; $order_goods_cancel->user_id = $order->user_id; $order_goods_cancel->store_id = $order->store_id; $order_goods_cancel->refund_price = $refund_price; $order_goods_cancel->status = \app\models\OrderGoodsCancel::STATUS_APPLY; $order_goods_cancel->refund_order_no = \app\models\OrderGoodsCancel::getOrderNo(); if (!$order_goods_cancel->save()) { //保存失败 return $this->asJson([ 'code' => 1, 'msg' => implode(';', array_values($order_goods_cancel->firstErrors)) ]); } $result = \app\models\OrderGoodsCancel::orderGoodsCancelHandle($order_goods_cancel->id, \app\models\OrderGoodsCancel::STATUS_PASS); return $this->asJson($result); } }