| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\modules\admin\controllers;
- use app\constants\OptionSetting;
- use app\models\AccountLog;
- use app\models\CloudGoodsBind;
- use app\models\common\admin\order\CommonUpdateAddress;
- use app\models\Express;
- use app\models\Goods;
- use app\models\MdProfit;
- use app\models\Order;
- use app\models\OrderComment;
- use app\models\OrderDetail;
- use app\models\OrderGoodsCancel;
- use app\models\OrderRefund;
- use app\models\OrderTransit;
- use app\models\SaaSLeaguePriceLog;
- use app\models\SaasUser;
- use app\models\Shop;
- use app\models\Store;
- use app\models\StoreCloud;
- use app\models\Supplier;
- use app\models\UserPayMonth;
- use app\modules\admin\models\MerchantForm;
- use app\modules\admin\models\OrderClerkForm;
- use app\modules\admin\models\OrderMessageForm;
- use app\modules\admin\models\OrderPriceForm;
- use app\modules\admin\models\OrderSendForm;
- use app\modules\client\models\v1\order\OrderForm;
- use app\modules\client\models\v1\ShareMoneyForm;
- use app\modules\common\models\NotifyForm;
- use app\utils\BookOrderNum;
- use app\utils\ExportList;
- use app\utils\OrderNo;
- use app\utils\OrderRevoke;
- use app\utils\PrintOrder;
- use app\utils\Refund;
- use yii\helpers\Html;
- use app\models\User;
- use app\modules\admin\models\ExpressDetailForm;
- use app\modules\admin\models\OrderCommentForm;
- use app\modules\admin\models\OrderListForm;
- use app\modules\admin\models\OrderRefundListForm;
- use app\modules\admin\models\OrderRevokeForm;
- use app\modules\admin\models\OrderRefundForm;
- use app\modules\admin\models\OrderShopForm;
- use app\models\OrderPayOffline;
- use app\utils\Notice\NoticeSend;
- use app\utils\PrintExpress;
- use app\models\VerifyCardSale;
- use app\models\Admin;
- class OrderController extends BaseController
- {
- /**
- * 平台商品订单提醒
- * @return \yii\web\Response
- */
- public function actionMsg() {
- $admin = get_admin();
- $store_id = get_store_id();
- $mch_id = get_mch_id();
- $md_id = input_params('md_id');
- $media = \Yii::$app->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);
- }
- }
|