You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

501 lines
16 KiB

<?php
/**
* Created by IntelliJ IDEA.
* User: luwei
* Date: 2017/7/20
* Time: 14:27
*/
namespace app\modules\mch\controllers;
use app\models\common\admin\order\CommonUpdateAddress;
use app\models\common\api\CommonShoppingList;
use app\models\Express;
use app\models\Order;
use app\models\Shop;
use app\models\User;
use app\models\WechatTplMsgSender;
use app\modules\api\models\OrderRevokeForm;
use app\modules\mch\models\ExportList;
use app\modules\mch\models\order\OrderClerkForm;
use app\modules\mch\models\order\OrderDeleteForm;
use app\modules\mch\models\OrderDetailForm;
use app\modules\mch\models\OrderListForm;
use app\modules\mch\models\OrderPriceForm;
use app\modules\mch\models\OrderRefundForm;
use app\modules\mch\models\OrderRefundListForm;
use app\modules\mch\models\OrderSendForm;
use app\modules\mch\models\PrintForm;
use app\modules\mch\models\StoreDataForm;
use app\modules\mch\extensions\Export;
use app\utils\PinterOrder;
use app\utils\TaskCreate;
use yii\web\UploadedFile;
use app\models\RefundAddress;
class OrderController extends Controller
{
public function actionIndex($is_offline = null)
{
// 获取可导出数据
$f = new ExportList();
$exportList = $f->getList();
$form = new OrderListForm();
$form->attributes = \Yii::$app->request->get();
$form->attributes = \Yii::$app->request->post();
$form->store_id = $this->store->id;
$form->limit = 10;
$data = $form->search();
$store_data_form = new StoreDataForm();
$store_data_form->store_id = $this->store->id;
$store_data_form->is_offline = \Yii::$app->request->get('is_offline');
$user_id = \Yii::$app->request->get('user_id');
$clerk_id = \Yii::$app->request->get('clerk_id');
$shop_id = \Yii::$app->request->get('shop_id');
$store_data_form->user_id = $user_id;
$store_data_form->clerk_id = $clerk_id;
$store_data_form->shop_id = $shop_id;
if ($user_id) {
$user = User::findOne(['store_id' => $this->store->id, 'id' => $user_id]);
}
if ($clerk_id) {
$clerk = User::findOne(['store_id' => $this->store->id, 'id' => $clerk_id]);
}
if ($shop_id) {
$shop = Shop::findOne(['store_id' => $this->store->id, 'id' => $shop_id]);
}
return $this->render('index', [
'row_count' => $data['row_count'],
'pagination' => $data['pagination'],
'list' => $data['list'],
'store_data' => $store_data_form->search(),
'express_list' => $this->getExpressList(),
'user' => $user,
'clerk' => $clerk,
'shop' => $shop,
'exportList' => \Yii::$app->serializer->encode($exportList),
]);
}
//移入回收站
public function actionEdit()
{
$order_id = \Yii::$app->request->get('order_id');
$is_recycle = \Yii::$app->request->get('is_recycle');
if ($is_recycle == 0 || $is_recycle == 1) {
$form = Order::find()->where(['store_id' => $this->store->id, 'mch_id' => 0])
->andWhere('id = :order_id', [':order_id' => $order_id])->one();
$form->is_recycle = $is_recycle;
if ($form && $form->save()) {
return [
'code' => 0,
'msg' => '操作成功',
];
}
};
return [
'code' => 1,
'msg' => '操作失败',
];
}
//添加备注
public function actionSellerComments()
{
$order_id = \Yii::$app->request->get('order_id');
$seller_comments = \Yii::$app->request->get('seller_comments');
$form = Order::find()->where(['store_id' => $this->store->id, 'id' => $order_id, 'mch_id' => 0])->one();
$form->seller_comments = $seller_comments;
if ($form->save()) {
return [
'code' => 0,
'msg' => '操作成功',
];
} else {
return [
'code' => 1,
'msg' => '操作失败',
];
}
}
//订单发货
public function actionSend()
{
$form = new OrderSendForm();
$post = \Yii::$app->request->post();
if ($post['is_express'] == 1) {
$form->scenario = 'EXPRESS';
}
$form->attributes = $post;
$form->store_id = $this->store->id;
return $form->save();
}
private function getExpressList()
{
$storeExpressList = Order::find()
->select('express')
->where([
'AND',
['store_id' => $this->store->id],
['is_send' => 1],
['!=', 'express', ''],
])->groupBy('express')->orderBy('send_time DESC')->limit(5)->asArray()->all();
$expressLst = Express::getExpressList();
$newStoreExpressList = [];
foreach ($storeExpressList as $i => $item) {
foreach ($expressLst as $value) {
if ($value['name'] == $item['express']) {
$newStoreExpressList[] = $item['express'];
break;
}
}
}
$newPublicExpressList = [];
foreach ($expressLst as $i => $item) {
$newPublicExpressList[] = $item['name'];
}
return [
'private' => $newStoreExpressList,
'public' => $newPublicExpressList,
];
}
//售后订单列表
public function actionRefund()
{
// 获取可导出数据
$f = new ExportList();
$f->type = 1;
$exportList = $f->getList();
$form = new OrderRefundListForm();
$form->attributes = \Yii::$app->request->get();
$form->attributes = \Yii::$app->request->post();
$form->store_id = $this->store->id;
$form->limit = 10;
$data = $form->search();
$address = RefundAddress::find()->where(['store_id' => $this->store->id, 'is_delete' => 0])->all();
foreach ($address as &$v) {
if (mb_strlen($v->address) > 20) {
$v->address = mb_substr($v->address, 0, 20) . '···';
}
}
unset($v);
return $this->render('refund', [
'row_count' => $data['row_count'],
'pagination' => $data['pagination'],
'list' => $data['list'],
'address' => $address,
'exportList' => \Yii::$app->serializer->encode($exportList)
]);
}
//订单取消申请处理
public function actionApplyDeleteStatus($id, $status, $type = 0)
{
$where = [
'id' => $id,
'is_delete' => 0,
'store_id' => $this->store->id,
'mch_id' => 0,
];
// type=1 后台主要取消订单, type=0 用户发起订单取消申请
if ($type == 0) {
$where['apply_delete'] = 1;
}
$order = Order::findOne($where);
if (!$order || $order->mch_id > 0) {
return [
'code' => 1,
'msg' => '订单不存在,请刷新页面后重试',
];
}
$remark = \Yii::$app->request->get('remark');
if ($status == 1) { //同意
$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) {
$msg_sender = new WechatTplMsgSender($this->store->id, $order->id, $this->wechat);
$msg_sender->revokeMsg($remark ? $remark : '商家同意了您的订单取消请求');
$wechatAccessToken = $this->wechat->getAccessToken();
$res = CommonShoppingList::updateBuyGood($wechatAccessToken, $order, 0, 12);
return [
'code' => 0,
'msg' => '操作成功',
];
} else {
return $res;
}
} else { //拒绝
$order->apply_delete = 0;
$order->save();
$msg_sender = new WechatTplMsgSender($this->store->id, $order->id, $this->wechat);
$msg_sender->revokeMsg($remark ? $remark : '您的取消申请已被拒绝');
return [
'code' => 0,
'msg' => '操作成功',
];
}
}
public function actionPrint()
{
$id = \Yii::$app->request->get('id');
$express = \Yii::$app->request->get('express');
$post_code = \Yii::$app->request->get('post_code');
$form = new PrintForm();
$form->store_id = $this->store->id;
$form->order_id = $id;
$form->express = $express;
$form->post_code = $post_code;
return $form->send();
}
public function actionAddPrice()
{
$form = new OrderPriceForm();
$form->store_id = $this->store->id;
$form->attributes = \Yii::$app->request->get();
return $form->update();
}
public function actionDetail($order_id = null)
{
$form = new OrderDetailForm();
$form->store_id = $this->store->id;
$form->order_id = $order_id;
$arr = $form->search();
$arr['is_update'] = true;
return $this->render('detail', $arr);
}
public function actionOffline()
{
$form = new OrderListForm();
$form->attributes = \Yii::$app->request->get();
$form->attributes = \Yii::$app->request->post();
$form->is_offline = 1;
$form->store_id = $this->store->id;
$form->platform = \Yii::$app->request->get('platform');
$form->limit = 10;
$data = $form->search();
$store_data_form = new StoreDataForm();
$store_data_form->store_id = $this->store->id;
$store_data_form->is_offline = 1;
$user_id = \Yii::$app->request->get('user_id');
$clerk_id = \Yii::$app->request->get('clerk_id');
$shop_id = \Yii::$app->request->get('shop_id');
$store_data_form->user_id = $user_id;
$store_data_form->clerk_id = $clerk_id;
$store_data_form->shop_id = $shop_id;
if ($user_id) {
$user = User::findOne(['store_id' => $this->store->id, 'id' => $user_id]);
}
if ($clerk_id) {
$clerk = User::findOne(['store_id' => $this->store->id, 'id' => $clerk_id]);
}
if ($shop_id) {
$shop = Shop::findOne(['store_id' => $this->store->id, 'id' => $shop_id]);
}
// 获取可导出数据
$f = new ExportList();
$exportList = $f->getList();
return $this->render('index', [
'row_count' => $data['row_count'],
'pagination' => $data['pagination'],
'list' => $data['list'],
//'count_data' => OrderListForm::getCountData($this->store->id),
'store_data' => $store_data_form->search(),
'express_list' => $this->getExpressList(),
'user' => $user,
'clerk' => $clerk,
'shop' => $shop,
'exportList' => \Yii::$app->serializer->encode($exportList)
]);
}
//批量发货
public function actionBatchShip()
{
if (\Yii::$app->request->isPost) {
$file = \Yii::$app->request->post();
if (!$file['url']) {
return [
'code' => 1,
'msg' => '请输入模板地址'
];
}
if (!$file['express']) {
return [
'code' => 1,
'msg' => '请输入快递公司'
];
}
$arrCSV = array();
if (($handle = fopen($file['url'], "r")) !== false) {
$key = 0;
while (($data = fgetcsv($handle, 0, ",")) !== false) {
$c = count($data);
for ($x = 0; $x < $c; $x++) {
$arrCSV[$key][$x] = trim($data[$x]);
}
$key++;
}
fclose($handle);
}
unset($arrCSV[0]);
$form = new OrderSendForm();
$form->store_id = $this->store->id;
$form->express = \Yii::$app->request->post('express');
$info = $form->batch($arrCSV);
return [
'code' => 0,
'msg' => '操作成功',
'data' => $info,
];
}
return $this->render('batch-ship', [
'express_list' => $this->getExpressList(),
]);
}
public function actionShipModel()
{
Export::shipModel();
}
//货到付款,确认收货
public function actionConfirm()
{
$order_id = \Yii::$app->request->get('order_id');
$order = Order::findOne([
'id' => $order_id,
'mch_id' => 0,
]);
if (!$order) {
return [
'code' => 1,
'msg' => '订单不存在,请刷新重试',
];
}
if ($order->pay_type != 2) {
return [
'code' => 1,
'msg' => '订单支付方式不是货到付款,无法确认收货',
];
}
if ($order->is_send == 0) {
return [
'code' => 1,
'msg' => '订单未发货',
];
}
$order->is_confirm = 1;
$order->confirm_time = time();
$order->is_pay = 1;
$order->pay_time = time();
if ($order->save()) {
return [
'code' => 0,
'msg' => '成功',
];
} else {
foreach ($order->errors as $error) {
return [
'code' => 1,
'msg' => $error,
];
}
}
}
// 处理售后订单
public function actionRefundHandle()
{
$form = new OrderRefundForm();
$form->attributes = \Yii::$app->request->post();
$form->store_id = $this->store->id;
return $form->save();
}
// 删除订单(软删除)
public function actionDelete($order_id = null)
{
$orderDeleteForm = new OrderDeleteForm();
$orderDeleteForm->order_model = 'app\models\Order';
$orderDeleteForm->order_id = $order_id;
$orderDeleteForm->store = $this->store;
return $orderDeleteForm->delete();
}
// 清空回收站
public function actionDeleteAll()
{
$orderDeleteForm = new OrderDeleteForm();
$orderDeleteForm->order_model = 'app\models\Order';
$orderDeleteForm->store = $this->store;
$orderDeleteForm->type = get_plugin_type();
$orderDeleteForm->mch_id = 0;
return $orderDeleteForm->deleteAll();
}
// 修改价格
public function actionUpdatePrice()
{
$form = new \app\modules\mch\models\order\OrderPriceForm();
$form->attributes = \Yii::$app->request->get();
$form->store_id = $this->store->id;
$form->order_type = 's';
return $form->save();
}
// 核销订单
public function actionClerk()
{
$form = new OrderClerkForm();
$form->attributes = \Yii::$app->request->get();
$form->order_model = 'app\models\Order';
$orderType = get_plugin_type();
if ($orderType == 2) {
$form->order_type = 7;
} else {
$form->order_type = 0;
}
$form->store = $this->store;
return $form->clerk();
}
// 更新订单地址
public function actionUpdateOrderAddress()
{
$commonUpdateAddress = new CommonUpdateAddress();
$commonUpdateAddress->data = \Yii::$app->request->post();
$updateAddress = $commonUpdateAddress->updateAddress();
return $updateAddress;
}
public function actionPrintOrder()
{
$get = \Yii::$app->request->get();
$print = new PinterOrder($this->store->id, $get['order_id'], 'reprint', $get['order_type']);
return $print->print_order();
}
}