ctms/ctms-api/controllers/gm/v1/OrderController.php
fm453 314745edf8 优化ctms-api语法、修复已知BUG;
主要修复ctms-api、dacms对PHP新版本的支持问题
2025-04-10 23:19:15 +08:00

1172 lines
37 KiB
PHP
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-04-24T20:28:47+08:00
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T09:13:54+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\gm\v1;
use Yii;
use yii\data\Pagination;
use yii\helpers\Url;
use addons\models\AcCar;
use addons\models\AcCarOwner;
use addons\models\AcCarBrand;
use addons\models\AcCarSeries;
use addons\models\AcStore;
use addons\models\AcEmployee;
use addons\models\AcOrder;
use addons\models\AcOrderPre;
use addons\models\AcOrderStatus;
use addons\models\AcTruck;
use addons\models\AcDriver;
use addons\models\AcPlat;
use common\models\CVcode;
use addons\models\AcContact;
use common\models\Member as User;
use addons\models\AcUserExt;
use common\models\Fans;
use addons\models\AcFansExt;
class OrderController extends Common
{
protected $addtionWhere = [];
//附加特定的查询条件在查询search()时引用
public function beforeAction($action)
{
if (!$this->pid) {
$this->result('您正使用本系统内部接口,禁止非法链接使用!');
}
return parent::beforeAction($action);
}
public function actionIndex()
{
$apis = [
'list' => '搜索运单',
'detail' => '运单详情',
'create' => '创建运单',
'today' => '今日运单',
'yesterday' => '昨日运单',
'qiantian' => '前日运单',
'future' => '近期运单',
'nocheck' => '待验车运单',
'week' => '本周运单',
'preweek' => '上周运单',
'month' => '本月运单',
'premonth' => '上月运单',
'dongbei' => '东三省运单',
'area1' => '京津冀运单',
'area2' => '川渝云贵运单',
'area3' => '江浙沪运单',
'mine' => '我的运单', //指派我或者我创建的
'tonghang' => '同行运单'
];
$this->result('您正使用CMTS系统订单管理接口', $apis, 200);
}
//订单列表
public function actionList()
{
$s = $this->search();
$res = $s['res'];
if (!$res) {
$this->result('没有查询到相应的数据!', [], 0);
}
$data = $s['data'];
$this->showOrder($res, $data);
}
//订单列表-昨日运单
public function actionYesterday()
{
//构建查询条件
$search = [];
//签约时间筛选
$date = strtotime('-1 day');
$day = date('Y-m-d', $date);
$s = $day . " 00:00:00";
$start = strtotime($s);
$e = $day . " 23:59:59";
$end = strtotime($e);
$search['sign_after'] = $end;
$search['sign_before'] = $start;
//执行查询
$s = $this->search($search);
$res = $s['res'];
if (!$res) {
$this->result('没有符合条件的结果');
}
$data = $s['data'];
$this->showOrder($res, $data);
}
//订单列表-今日运单
public function actionToday()
{
//构建查询条件
$search = [];
//签约时间筛选
$day = date('Y-m-d');
$s = $day . " 00:00:00";
$start = strtotime($s);
$e = $day . " 23:59:59";
$end = strtotime($e);
$search['sign_after'] = $end;
$search['sign_before'] = $start;
//执行查询
$s = $this->search($search);
$res = $s['res'];
if (!$res) {
$this->result('今日暂无运单');
}
$data = $s['data'];
$this->showOrder($res, $data);
}
//订单列表-前天运单
public function actionQiantian()
{
//构建查询条件
$search = [];
//签约时间筛选
$date = strtotime('-2 day');
$day = date('Y-m-d', $date);
$s = $day . " 00:00:00";
$start = strtotime($s);
$e = $day . " 23:59:59";
$end = strtotime($e);
$search['sign_after'] = $end;
$search['sign_before'] = $start;
//执行查询
$s = $this->search($search);
$res = $s['res'];
if (!$res) {
$this->result('没有符合条件的结果');
}
$data = $s['data'];
$this->showOrder($res, $data);
}
//订单列表-本周运单
public function actionWeek()
{
//构建查询条件
$search = [];
//签约时间筛选
$week = date('w'); //今天周几(0~6);
$days = $week - 1;
if ($week == 0) {
$date = strtotime('-6' . ' day'); //几天前
} else {
$date = strtotime('-' . $days . ' day'); //几天前
}
$day = date('Y-m-d', $date);
$s = $day . " 00:00:00";
$start = strtotime($s);
$e = $day . " 23:59:59";
$end = strtotime($e);
$search['sign_after'] = $end;
$search['sign_before'] = $start;
//执行查询
$s = $this->search($search);
$res = $s['res'];
if (!$res) {
$this->result('没有符合条件的结果');
}
$data = $s['data'];
$this->showOrder($res, $data);
}
//订单列表-上周运单
public function actionPreweek()
{
//构建查询条件
$search = [];
//签约时间筛选
$week = date('w'); //今天周几(0~6);
$days = 7 + ($week - 1);
if ($week == 0) {
$date = strtotime('-13' . ' day'); //几天前
$date_end = strtotime('-7' . ' day'); //几天前
} else {
$date = strtotime('-' . $days . ' day'); //几天前
$date_end = strtotime('-' . $week . ' day'); //几天前
}
$day = date('Y-m-d', $date);
$s = $day . " 00:00:00";
$start = strtotime($s);
$day = date('Y-m-d', $date_end);
$e = $day . " 23:59:59";
$end = strtotime($e);
$search['sign_after'] = $end;
$search['sign_before'] = $start;
//执行查询
$s = $this->search($search);
$res = $s['res'];
if (!$res) {
$this->result('没有符合条件的结果');
}
$data = $s['data'];
$this->showOrder($res, $data);
}
//订单列表-本月运单
public function actionMonth()
{
//构建查询条件
$search = [];
//签约时间筛选
$month = date('Y-m');
$s = $month . "-01 00:00:00";
$start = strtotime($s);
$last_day = strtotime("last day of " . $month);
$e = date("Y-m-d", $last_day) . " 23:59:59";
$end = strtotime($e);
$search['sign_after'] = $end;
$search['sign_before'] = $start;
//执行查询
$s = $this->search($search);
$res = $s['res'];
if (!$res) {
$this->result('没有符合条件的结果');
}
$data = $s['data'];
$this->showOrder($res, $data);
}
//订单列表-上月运单
public function actionPremonth()
{
//构建查询条件
$search = [];
//签约时间筛选
$month = date('Y-m', strtotime("-1 month"));
$s = $month . "-01 00:00:00";
$start = strtotime($s);
$last_day = strtotime("last day of " . $month);
$e = date("Y-m-d", $last_day) . " 23:59:59";
$end = strtotime($e);
$search['sign_after'] = $end;
$search['sign_before'] = $start;
//执行查询
$s = $this->search($search);
$res = $s['res'];
if (!$res) {
$this->result('没有符合条件的结果');
}
$data = $s['data'];
$this->showOrder($res, $data);
}
//订单列表-东北运单(黑吉辽方向)(包含部分内蒙古的)
public function actionDongbei()
{
//构建查询条件
$search = [];
//省份城市筛选
$search['provinces'] = ['210000', '220000', '230000']; //辽,吉,黑
$search['citys'] = ['海拉尔', '齐齐哈尔'];
//执行查询
$s = $this->search($search);
$res = $s['res'];
if (!$res) {
$this->result('没有符合条件的结果');
}
$data = $s['data'];
$this->showOrder($res, $data);
}
//订单列表-京津冀运单(包含部分内蒙古的)
public function actionArea1()
{
//构建查询条件
$search = [];
//省份城市筛选
$search['provinces'] = ['110000', '120000', '130000']; //京,津,冀
$search['citys'] = ['包头', '呼和浩特'];
//执行查询
$s = $this->search($search);
$res = $s['res'];
if (!$res) {
$this->result('没有符合条件的结果');
}
$data = $s['data'];
$this->showOrder($res, $data);
}
//订单列表-川渝云贵运单
public function actionArea2()
{
//构建查询条件
$search = [];
//省份城市筛选
$search['provinces'] = ['500000', '510000', '520000', '530000']; //渝\川\贵\云
//执行查询
$s = $this->search($search);
$res = $s['res'];
if (!$res) {
$this->result('没有符合条件的结果');
}
$data = $s['data'];
$this->showOrder($res, $data);
}
//订单列表-江浙沪运单
public function actionArea3()
{
//构建查询条件
$search = [];
//省份城市筛选
$search['provinces'] = ['310000', '320000', '330000']; //沪、江、浙
//执行查询
$s = $this->search($search);
$res = $s['res'];
if (!$res) {
$this->result('没有符合条件的结果');
}
$data = $s['data'];
$this->showOrder($res, $data);
}
//订单列表-未验车运单
public function actionNocheck()
{
//构建查询条件
$search = [];
$search['is_check'] = 0;
//执行查询
$s = $this->search($search);
$res = $s['res'];
if (!$res) {
$this->result('没有符合条件的结果');
}
$data = $s['data'];
$this->showOrder($res, $data);
}
//订单列表-我的运单(我经手或我创建的)
public function actionMine()
{
//构建查询条件
$search = [];
//创建者或关联员工筛选
$orWhere = [];
$orWhere[] = 'or';
$orWhere[] = ['=', 'create_by', $this->user_id];
$orWhere[] = ['=', 'employee_id', $this->employee_id];
$this->addtionWhere = $orWhere; //特别约定的条件格式
//执行查询
$s = $this->search($search);
$res = $s['res'];
if (!$res) {
$this->result('没有符合条件的结果');
}
$data = $s['data'];
$this->showOrder($res, $data);
}
public function actionDetail()
{
$pid = $this->pid;
$status = Yii::$app->params['OrderStatus'];
$post = $this->postdata;
$id = $post['oid'] ?? 0;
if ($id <= 0) {
$this->result('查询参数错误!');
}
$AcOrder = new AcOrder();
$order = $AcOrder->findOne($id);
$detail = $order->toArray();
$detail['thumbs'] = $detail['thumbs'] ? json_decode($detail['thumbs']) : [];
$model = new AcStore();
$store = $model->findOne($detail['store_id']);
if ($store) {
$detail['store_title'] = $store->title;
}
$model = new AcEmployee();
$employee = $model->findOne($detail['employee_id']);
if ($employee) {
$detail['employee_title'] = $employee->name;
}
$detail['car_owner_id'] = $detail['car_brand_id'] = $detail['car_series_id'] = 0;
$model = new AcCar();
$car = $model->findOne($detail['car_id']);
if ($car) {
$detail['car_owner_id'] = $car->owner_id;
$detail['car_brand_id'] = $car->brand_id;
$detail['car_series_id'] = $car->series_id;
$detail['car_number'] = $car->num_p . $car->num_area . $car->num_left;
$detail['car_number'] = $detail['car_number'] ? $detail['car_number'] : $car->num_frame;
}
$model = new Fans();
$user = $model->findOne($detail['from_mid']);
$model = new AcFansExt();
$exts = [];
$_exts = $model->find()->where(['mid' => $detail['from_mid'], 'pid' => $pid, 'deleted' => 0])->indexBy('id')->all();
foreach ($_exts as $ext) {
$ext = $ext->toArray();
if (isset($users[$s['id']])) {
if ($ext['mobile'] == $user->mobile) {
$exts[$ext['mid']][$ext['key']] = $ext['value'];
}
}
}
$AcCarOwner = new AcCarOwner();
$owner = $AcCarOwner->findOne($detail['car_owner_id']);
if ($owner) {
$_owner = User::findOne($detail['car_owner_id']);
$detail['car_owner'] = $_owner->username . '【' . $_owner->mobile . '】';
}
$AcCarBrand = new AcCarBrand();
$brand = $AcCarBrand->findOne($detail['car_brand_id']);
if ($brand) {
$detail['car_title'] = $brand->title;
}
$AcCarSeries = new AcCarSeries();
$where = [];
$series = $AcCarSeries->findOne($detail['car_series_id']);
if ($series) {
$detail['car_title'] .= $series->title;
}
$sn = '00000000000'; //11位
$sn = substr($sn, 0, 11 - strlen($id));
$sn .= $id;
$detail['sn'] = $sn;
$weekdays = [0 => '日', 1 => '一', 2 => '二', 3 => '三', 4 => '四', 5 => '五', 6 => '六'];
$wk = date('w', $detail['sign_date']);
$detail['signdate'] = date('Y-m-d 星期' . $weekdays[$wk], $detail['sign_date']);
$detail['from_province'] = isset($detail['start_province']) ? Yii::$app->params['regionAreas'][$detail['start_province']] : '';
$detail['to_province'] = isset($detail['aim_province']) ? Yii::$app->params['regionAreas'][$detail['aim_province']] : '';
$detail['remark'] = $detail['remark'] || '';
$detail['remark'] = trim($detail['remark']) ? htmlspecialchars_decode(trim($detail['remark'])) : '';
$imgDir = Yii::getAlias('@upload');
$imgKeys = ['driving_lisence', 'thumb_f', 'thumb_b', 'thumb_l', 'thumb_r'];
foreach ($imgKeys as $k) {
$detail[$k] = $detail[$k] ? $detail[$k] : '/pics/nopic.jpg';
$url_pre = substr($detail[$k], 0, 4);
if ($url_pre == '/pic') {
$detail[$k . '_url'] = Url::to('@upload' . $detail[$k], $this->imgHttp);
} else if ($url_pre == 'http') {
$detail[$k . '_url'] = $detail[$k];
}
}
if ($detail['thumbs']) {
$thumbs = $detail['thumbs'];
$thumbs_url = [];
foreach ($thumbs as $k => $v) {
$url_pre = substr($v, 0, 4);
if ($url_pre == '/pic') {
$v_url = Url::to('@upload' . $v, $this->imgHttp);
} else if ($url_pre == 'http') {
$v_url = $v;
}
$thumbs_url[] = ['src' => $v, 'url' => $v_url];
}
$detail['thumbs_url'] = $thumbs_url;
}
$unsets = ['commission', 'commission_left', 'fee_truck', 'create_at', 'create_by', 'deleted', 'income', 'expense', 'fee_deliver', 'fee_extra', 'fee_insurance', 'fee_pickup', 'fee_urgent', 'from_bid', 'from_mid', 'is_commission', 'is_cwqr', 'is_holdon', 'is_over', 'pay_receive_pids', 'pay_send_pids', 'pre_id'];
foreach ($unsets as $us) {
unset($detail[$us]);
}
$this->result('订单查询成功!', $detail, 200);
}
public function actionCreate()
{
$get = Yii::$app->request->get();
$post = $this->postdata;
$pid = $this->pid;
//格式化数据 为空的项则不修改
//目标键=》POST键
$cols = ['start_province' => 'start_province', 'start_city' => 'start_city', 'aim_province' => 'aim_province', 'aim_city' => 'aim_city', 'aim_address' => 'aim_address',
'signer' => 'signer', 'bind' => 'bind', 'wtdw' => "wtdw",
'sender_name' => 'sender_name', 'sender_idcard' => 'sender_idcard', 'sender_mobiles' => 'sender_mobiles',
'receiver_name' => 'receiver_name', 'receiver_idcard' => 'receiver_idcard', 'receiver_mobiles' => 'receiver_mobiles',
'car_extra' => 'car_extra'];
foreach ($cols as $col => $key) {
if (isset($post[$key]) && $post[$key] != '') {
$data[$col] = trim($post[$key]);
}
}
//'car_id'=>'car_id','employee_id'=>'employee_id',
$cols = ['car_value' => 'car_value', 'fee_insurance' => 'fee_insurance', 'fee_truck' => 'fee_truck', 'fee_deliver' => 'fee_deliver', 'fee_pickup' => 'fee_pickup', 'fee_urgent' => 'fee_urgent', 'fee_extra' => 'fee_extra', 'fee_total' => 'fee_total', 'pay_send' => 'pay_send', 'pay_receive' => 'pay_receive', 'not_insurance' => 'not_insurance', 'weituo' => 'weituo'];
foreach ($cols as $col => $key) {
$data[$col] = 0;
if (isset($post[$key]) && $post[$key] != '') {
$data[$col] = (int)$post[$key];
}
}
$cols = ['remark' => 'remark'];
foreach ($cols as $col => $key) {
if (isset($post[$key]) && $post[$key] != '') {
$data[$col] = htmlspecialchars($post[$key]);
}
}
$data['remark'] = $data['remark'] ?? '';
/*@sign_date: 1649952000000*/
$sign_date = isset($post['sign_date']) ? $post['sign_date'] / 1000 : '';
$data['sign_date'] = $sign_date ? $sign_date : TIMESTAMP;
// 指派运单的创建人平台管理员ID默认为当前登陆者member表
$mid = isset($post['mid']) ? (int)$post['mid'] : $this->user_id;
$data['create_by'] = $mid;
$data['is_cwqr'] = 0; //修改财务确认状态为待确认
$data['status_code'] = 1; //订单处于创建待审核状态
//关联运单前台用户fans表
$fid = isset($post['from_mid']) ? (int)$post['from_mid'] : 0;
$data['from_mid'] = $fid;
//部分规则校验
$hasError = 0;
$msg = '';
$fee_total = $data['fee_truck'] + $data['fee_insurance'] + $data['fee_deliver'] + $data['fee_pickup'] + $data['fee_urgent'] + $data['fee_extra'];
$fee_pay = $data['pay_send'] + $data['pay_receive'];
if (!$data['fee_truck']) {
$hasError += 1;
$msg .= '请注意,运费未正确填写!';
}
if ($fee_total != $data['fee_total']) {
$hasError += 1;
$msg .= '所填各项费用汇总的值与所填写的总费用不一致!';
}
if ($fee_pay != $data['fee_total']) {
$hasError += 1;
$msg .= '所填现付与到收费用汇总的值与所填写的总费用不一致!';
}
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
$data['pid'] = $pid;
$data['employee_id'] = isset($post['employee_id']) ? (int)$post['employee_id'] : $this->employee_id;
$data['store_id'] = 0;
$model = new AcEmployee();
$employee = $model->findOne($data['employee_id']);
if ($employee) {
$data['store_id'] = $employee->store_id;
}
//校验生成部分补充数据
//生成现付说明
$payments = [
'wechat' => '微信',
'alipay' => '支付宝',
'cash' => '现金',
'bankcard' => '银行卡',
'bankunion' => '银联',
'others' => '其他'
];
if ($post['pay_send']) {
$txt = $post['payto'] . '收款' . $post['pay_send'] . '元(' . $payments[$post['payment']] . '';
if ($data['remark']) {
$data['remark'] .= ' ; ' . $txt;
} else {
$data['remark'] = $txt;
}
}
//生成车辆信息
$carModel = new AcCar();
$where = [];
if ($post['isTempCarno']) {
$post['carno_left'] .= '临';
}
if (empty($post['carno_frame'])) {
$where['num_p'] = $post['carno_p'];
$where['num_area'] = $post['carno_area'];
$where['num_left'] = $post['carno_left'];
}
$post['carno_frame'] = $post['carno_frame'] ?? '';
if (!empty($post['carno_frame'])) {
$where['num_frame'] = $post['carno_frame'];
}
$car = $carModel->find()->where($where)->one();
if (empty($car)) {
$carModel->pid = $pid;
$carModel->num_frame = $post['carno_frame'];
$carModel->num_p = $post['carno_p'];
$carModel->num_area = $post['carno_area'];
$carModel->num_left = $post['carno_left'];
$carModel->title = $post['carno_title'];
$carModel->status_code = 1;
$carModel->create_at = TIMESTAMP;
$carModel->update_at = TIMESTAMP;
$carModel->save();
$car_id = $carModel->attributes['id'];
} else {
$car_id = $car->id;
}
$data['car_id'] = $car_id;
//查询联系人信息是否在库
//框架核心数据表Fans
$userModel = new Fans();
//项目分支自有数据表
$contactModel = new AcContact();
$sender_mobiles = $data['sender_mobiles'] ?? NULL;
$receiver_mobiles = $data['receiver_mobiles'] ?? NULL;
if ($sender_mobiles) {
//项目分支自有数据表
$_model = clone $contactModel;
$contactor = $_model->find()->where(['mobile' => $data['sender_mobiles'], 'pid' => $pid])->one();
if (empty($contactor)) {
$_model->name = $data['sender_name'] ?? '客户';
$_model->mobile = $data['sender_mobiles'];
$_model->pid = $pid;
$_model->idcard = $data['sender_idcard'] ?? '';
$_model->create_at = TIMESTAMP;
$_model->status_code = 1;
$_model->save();
} else {
$_contactDatas = [];
$_contactDatas['name'] = $data['sender_name'] ?? $contactor->name;
$_contactDatas['idcard'] = $data['idcard'] ?? $contactor->idcard;
if ($_contactDatas['name'] == $contactor->name && $_contactDatas['idcard'] == $contactor->idcard) {
//无须做任何变化
} else {
$_contactDatas['update_at'] = time();
$contactModel->updateAll($_contactDatas, ['id' => $contactor->id]);
}
}
//框架核心数据表Fans
$_model = clone $userModel;
$user = $_model->findByUsername($sender_mobiles);
if (empty($user)) {
$_model->mobile = $sender_mobiles;
$_model->email = $sender_mobiles . '@hiluker.com';
$_model->setPassword(Yii::$app->params['defaultFansPassword']);
$_model->generateAuthKey();
$_model->created_at = TIMESTAMP;
$_model->from = Yii::$app->params['fansFrom'];;
$_model->save();
}
}
if ($receiver_mobiles && $receiver_mobiles != $sender_mobiles) {
//项目分支自有数据表
$_model = clone $contactModel;
$contactor2 = $_model->find()->where(['mobile' => $data['receiver_mobiles'], 'pid' => $pid])->one();
if (empty($contactor2)) {
$_model->name = $data['receiver_name'] ?? '客户';
$_model->mobile = $data['receiver_mobiles'];
$_model->pid = $pid;
$_model->idcard = $data['receiver_idcard'] ?? '';
$_model->create_at = TIMESTAMP;
$_model->status_code = 1;
$_model->save();
} else {
$_contactDatas = [];
$_contactDatas['name'] = $data['receiver_name'] ?? $contactor2->name;
$_contactDatas['idcard'] = $data['idcard'] ?? $contactor2->idcard;
if ($_contactDatas['name'] == $contactor2->name && $_contactDatas['idcard'] == $contactor2->idcard) {
//无须做任何变化
} else {
$_contactDatas['update_at'] = time();
$contactor2->updateAll($_contactDatas, ['id' => $contactor2->id]);
}
}
//框架核心数据表Fans
$_model = clone $userModel;
$user = $_model->findByUsername($receiver_mobiles);
if (empty($user)) {
$_model->mobile = $receiver_mobiles;
$_model->email = $receiver_mobiles . '@hiluker.com';
$_model->setPassword(Yii::$app->params['defaultFansPassword']);
$_model->generateAuthKey();
$_model->created_at = TIMESTAMP;
$_model->from = Yii::$app->params['fansFrom'];;
$_model->save();
}
}
//保存资料
$AcOrder = new AcOrder();
foreach ($data as $key => $val) {
$AcOrder->$key = $val;
}
$res = $AcOrder->save();
$id = $AcOrder->attributes['id']; //获取插入后id
if ($res) {
$return = [];
$return['code'] = 200;
$return['msg'] = '订单保存成功!' . $msg;
$return['data'] = ['id' => $id];
} else {
$return = [];
$return['code'] = 100;
$return['msg'] = '订单保存失败!';
$return['data'] = [];
}
$this->result($return['msg'], $return['data'], $return['code']);
}
/**
* AJAX方式操作运单 //TBD
* @return void
*/
public function actionAjax()
{
$get = Yii::$app->request->get();
$post = $this->postdata;
$id = (int)$get['id'];
$data = $where = [];
$where['id'] = $id;
$data['update_at'] = time();
$model = new AcOrder();
$res = $model->findOne($id);
$return = [];
$return['timeout'] = 1; //几秒后自动跳转
$return['status'] = 0;
$return['ajax'] = 1;
if (!$res) {
$return['msg'] = '订单数据不存在';
$return['errorcode'] = 404;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
} else {
$order = $res;
if ($order->deleted > 0) {
$return['msg'] = '订单已被删除了,无法操作';
$return['errorcode'] = 404;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
}
switch ($get['do']) {
case 'cancel':
if ($order->is_cwqr > 0) {
$return['msg'] = '订单已入账,请先联系财务销账后再取消';
$return['errorcode'] = 404;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
if ($order->status_code > 1) {
$return['msg'] = '订单已进入运输后流程,无法操作取消';
$return['errorcode'] = 404;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
if ($order->status_code == -1) {
$return['msg'] = '订单已经是被取消状态';
$return['errorcode'] = 404;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
$data['status_code'] = -1;
$model->id = $id;
$res = $model->updateAll($data, $where);
if ($res) {
$return['msg'] = '订单取消成功';
$return['errorcode'] = 200;
$return['data'] = ['css' => 'btn-info'];
} else {
$return['msg'] = '订单取消失败';
$return['errorcode'] = 0;
}
break;
case 'truckcar':
if ($order->status_code == -1) {
$return['msg'] = '订单已被取消,不能承运';
$return['errorcode'] = 404;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
if ($order->status_code != 1) {
$return['msg'] = '订单当前非初始状态(协议签订),不可作承运处理';
$return['errorcode'] = 404;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
$data['status_code'] = 5;
$model->id = $id;
$res = $model->updateAll($data, $where);
if ($res) {
$return['msg'] = '订单已转为待承运状态';
$return['errorcode'] = 200;
$return['data'] = ['css' => 'default'];
} else {
$return['msg'] = '订单标记失败,请稍后再试';
$return['errorcode'] = 0;
}
break;
default:
break;
}
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
/**
* 订单搜索
* @param $search [] 预置搜索条件
* @param $sql string 直接使用SQL语句,需要配合$args一同使用传入后search一切条件无效
* @param array $args sql的参数
* @return array
*/
private function search($search = [], $sql = '', $args = [])
{
$pid = $this->pid;
$return = [];
$model = new AcOrder();
$page = $this->page;
$pageSize = $this->pageSize;
if ($sql && $args) {
$data = $model->find()->where($sql, $args);
} else {
$where = $orWhere = [];
$where[] = 'and';
$where[] = ['=', 'pid', $pid];
$deleted = 0;
$where[] = ['=', 'deleted', $deleted];
$where[] = ['=', 'is_turnover', 0]; //排除交车单
$post = $this->postdata;
$search = $search ?? $post['search'];
//车牌号使用完整精准搜索皖A88888
$CarModel = new AcCar();
if (!empty($search['carno'])) {
$search['carno'] = trim($search['carno']);
$sql = 'CONCAT(num_p,num_area,num_left) = :carno or num_frame LIKE :carno';
$cars = $CarModel->find()->where($sql, [':carno' => $search['carno']])->limit(5)->offset(0)->all();
//最多仅显示可匹配车牌号的前5个
if (empty($cars)) {
$return['code'] = 400;
$return['msg'] = '未查询到相关车辆';
return ['res' => FALSE, 'data' => $return];
} else {
$car_ids = [];
foreach ($cars as $car) {
$car_ids[] = $car->id;
}
$where[] = ['IN', 'car_id', $car_ids];
}
}
if (!empty($search['city'])) {
$search['city'] = trim($search['city']);
$where[] = ['LIKE', 'aim_city', $search['city']];
}
if (!empty($search['phone'])) {
$search['phone'] = trim($search['phone']);
$orwhere = ['or', ['LIKE', 'sender_mobiles', $search['phone']], ['LIKE', 'receiver_mobiles', $search['phone']]];
}
$search['employee'] = isset($search['employee']) ? (int)$search['employee'] : '';
$EmployeeModel = new AcEmployee();
if (!empty($search['employee'])) {
$where[] = ['=', 'employee_id', $search['employee']];
$employee = $EmployeeModel->findOne($search['employee']);
$search['employee_title'] = isset($employee->name) ? $employee->name : '';
}
$search['store_id'] = isset($search['store_id']) ? (int)$search['store_id'] : '';
if (empty($search['store_id'])) {
$search['store_id'] = isset($get['store_id']) ? (int)$get['store_id'] : 0;
}
$StoreModel = new AcStore();
if (!empty($search['store_id'])) {
$where[] = ['=', 'store_id', $search['store_id']];
$store = $StoreModel->findOne($search['store_id']);
$search['store_title'] = isset($store->title) ? $store->title : '';
}
$search['from_mid'] = isset($search['from_mid']) ? (int)$search['from_mid'] : '';
$UserModel = new User();
if (!empty($search['from_mid'])) {
$where[] = ['=', 'from_mid', $search['from_mid']];
$user = $UserModel->findById(['id' => $search['from_mid']]);
$search['from_mtitle'] = isset($user->username) ? $user->username : '';
}
$provinces = $search['provinces'] ?? [];
if ($provinces) {
$_orwhere = [
'or',
['IN', 'aim_province', $provinces],
['IN', 'start_province', $provinces]
];
$orWhere[] = $_orwhere;
} else {
$search['start_province'] = isset($search['start_province']) ? trim($search['start_province']) : '';
if (!empty($search['start_province'])) {
$where[] = ['=', 'start_province', $search['start_province']];
}
$search['aim_province'] = isset($search['aim_province']) ? trim($search['aim_province']) : '';
if (!empty($search['aim_province'])) {
$where[] = ['=', 'aim_province', $search['aim_province']];
}
}
$citys = $search['citys'] ?? [];
if ($citys) {
$_orwhere = [
'or',
['OR LIKE', 'aim_city', $citys],
['OR LIKE', 'start_city', $citys]
];
$orWhere[] = $_orwhere;
} else {
$search['aim_city'] = isset($search['aim_city']) ? trim($search['aim_city']) : '';
if (!empty($search['aim_city'])) {
$where[] = ['LIKE', 'aim_city', $search['aim_city']];
}
$search['start_city'] = isset($search['start_city']) ? trim($search['start_city']) : '';
if (!empty($search['start_city'])) {
$where[] = ['LIKE', 'start_city', $search['start_city']];
}
}
$search['signer'] = isset($search['signer']) ? trim($search['signer']) : '';
$search['wtdw'] = isset($search['wtdw']) ? trim($search['wtdw']) : '';
$search['weituo'] = isset($search['weituo']) ? (int)$search['weituo'] : 0;
if ($search['weituo']) {
$where[] = ['=', 'weituo', $search['weituo']];
} else if (!empty($search['wtdw'])) {
$where[] = ['LIKE', 'wtdw', $search['wtdw']];
} else if (!empty($search['signer'])) {
$where[] = ['LIKE', 'signer', $search['signer']];
}
$search['sender_name'] = isset($search['sender_name']) ? trim($search['sender_name']) : '';
if (!empty($search['sender_name'])) {
$where[] = ['LIKE', 'sender_name', $search['sender_name']];
}
$search['receiver_name'] = isset($search['receiver_name']) ? trim($search['receiver_name']) : '';
if (!empty($search['receiver_name'])) {
$where[] = ['LIKE', 'receiver_name', $search['receiver_name']];
}
$search['bind'] = isset($search['bind']) ? trim($search['bind']) : '';
if (!empty($search['bind'])) {
$where[] = ['LIKE', 'bind', $search['bind']];
}
if (isset($search['status_code']) && $search['status_code'] != 'all') {
$search['status_code'] = (int)$search['status_code'];
$where[] = ['=', 'status_code', $search['status_code']];
} else {
unset($search['status_code']);
}
if (isset($search['is_holdon'])) {
$search['is_holdon'] = (int)$search['is_holdon'];
$where[] = ['=', 'is_holdon', $search['is_holdon']];
}
if (isset($search['is_over'])) {
$search['is_over'] = (int)$search['is_over'];
$where[] = ['=', 'is_over', $search['is_over']];
}
if (isset($search['is_commission'])) {
$search['is_commission'] = (int)$search['is_commission'];
$where[] = ['=', 'is_commission', $search['is_commission']];
}
//运单是否通过了财务确认
$search['is_cwqr'] = $search['is_cwqr'] ?? ($get['is_cwqr'] ?? '');
if ($search['is_cwqr'] != '') {
$search['is_cwqr'] = (int)$search['is_cwqr'];
$where[] = ['=', 'is_cwqr', $search['is_cwqr']];
}
//签约时间筛选
$search['sign_m'] = isset($search['sign_m']) ? $search['sign_m'] : '';
$search['sign_after'] = isset($search['sign_after']) ? $search['sign_after'] : '';
$search['sign_before'] = isset($search['sign_before']) ? $search['sign_before'] : '';
//按月份筛选
if (!empty($search['sign_m'])) {
$start = strtotime($search['sign_m']);
$s = date("Y-m-d H:i:s", $start);
$ldm = strtotime("last day of " . $s);
$m = date("Y-m-d", $ldm) . " 23:59:59";
$end = strtotime($m);
$where[] = ['between', 'sign_date', $start, $end];
} //按指定时段筛选
else if (!empty($search['sign_after']) && !empty($search['sign_before'])) {
$start = strtotime($search['sign_after']);
$end = strtotime($search['sign_before']);
$where[] = ['between', 'sign_date', $start, $end];
} //按指定时间临界点筛选(以不早于为优先筛选条件)
else if (!empty($search['sign_after'])) {
$start = strtotime($search['sign_after']);
$where[] = ['>=', 'sign_date', $start];
} else if (!empty($search['sign_before'])) {
$end = strtotime($search['sign_before']);
$where[] = ['<=', 'sign_date', $end];
}
//仅查看我自己的
if (isset($search['onlyme']) && $search['onlyme'] == 1) {
$where[] = ['=', 'create_by', $this->user_id];
}
//带序列号搜索TBD后期考虑改为精准唯一搜索
if (isset($search['sn']) && $search['sn'] != 'undefined' && $search['sn']) {
$where[] = ['LIKE', 'sn', $search['sn']];
}
// 引用设定特别约定的查询条件(不允许从客户端直接传入)
if ($this->addtionWhere) {
$orWhere[] = $this->addtionWhere;
}
$data = $model->find()->where($where);
// 要确保$orWhere的每一个子键都是['or',['=',字段,值],['=',字段,值]]的方式or,=等符号是约定俗成的
if ($orWhere) {
foreach ($orWhere as $v) {
$data = $data->andWhere($v);
}
}
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => $pageSize]);
$pages->setPage($page - 1, TRUE); //设置分页的当前页面值
$_orderby = 'sign_date DESC,id DESC';
$res = $data->offset($pages->offset)->limit($pages->limit)->orderby($_orderby)->all();
return ['res' => $res, 'data' => $data];
}
/*
订单数据显示格式化
*/
private function showOrder($orderRes, $data)
{
$status = Yii::$app->params['OrderStatus'];
$cids = $sids = $eids = $mids = [];
if ($orderRes) {
foreach ($orderRes as $r) {
$cids[$r->car_id] = $r->car_id;
$sids[$r->store_id] = $r->store_id;
$eids[$r->employee_id] = $r->employee_id;
$mids[$r->from_mid] = $r->from_mid;
}
}
$model = new AcStore();
$where = [];
$where['pid'] = $this->pid;
$_stores = $model->find()->where(['in', 'id', $sids])->all();
$stores = [];
foreach ($_stores as $s) {
$stores[$s->id] = $s->toArray();
}
$model = new AcEmployee();
$employees = [];
$_employees = $model->find()->where(['in', 'id', $eids])->indexBy('id')->all();
foreach ($_employees as $s) {
$employees[$s->id] = $s->toArray();
}
$model = new Fans();
$users = [];
$_users = $model->find()->where(['in', 'id', $mids])->all();
foreach ($_users as $s) {
$s = $s->toArray();
$users[$s['id']] = $s;
}
$model = new AcCar();
$cars = [];
$_cars = $model->find()->where(['in', 'id', $cids])->indexBy('id')->all();
$bids = $sids = [];
foreach ($_cars as $s) {
$bids[] = $s->brand_id;
$sids[] = $s->series_id;
$cars[$s->id] = $s->toArray();
}
unset($s);
$model = new AcCarBrand();
$brands = $model->find()->where(['in', 'id', $bids])->indexBy('id')->all();
$model = new AcCarSeries();
$series = $model->find()->where(['in', 'id', $sids])->indexBy('id')->all();
if ($cars) {
foreach ($cars as &$car) {
$car['title2'] = '';
if (isset($brands[$car['brand_id']])) {
$car['title2'] .= $brands[$car['brand_id']]['title'];
}
if (isset($series[$car['series_id']])) {
$car['title2'] .= $series[$car['series_id']]['title'];
}
$car['number2'] = $car['num_frame'];
if ($car['num_p']) {
$car['number2'] = $car['num_p'];
}
if ($car['num_area']) {
$car['number2'] .= $car['num_area'];
}
if ($car['num_left']) {
$car['number2'] .= $car['num_left'];
}
}
}
unset($car);
$orders = [];
$unsets = ['pid', 'commission', 'commission_left', 'fee_truck', 'create_at', 'create_by', 'deleted', 'income', 'expense', 'fee_deliver', 'fee_extra', 'fee_insurance', 'fee_pickup', 'fee_urgent', 'from_bid', 'from_mid', 'is_commission', 'is_cwqr', 'is_holdon', 'is_over', 'pay_receive_pids', 'pay_send_pids', 'pre_id', 'remark', 'car_extra', 'thumb_b', 'thumb_f', 'thumb_l', 'thumb_r', 'thumbs', 'driving_lisence', 'videos'];
foreach ($orderRes as $s) {
$car = [];
if ($s->car_id) {
$car = $cars[$s->car_id];
}
$s = $s->toArray();
foreach ($unsets as $us) {
unset($s[$us]);
}
$weekdays = [0 => '日', 1 => '一', 2 => '二', 3 => '三', 4 => '四', 5 => '五', 6 => '六'];
$wk = date('w', $s['sign_date']);
$s['signdate'] = date('Y-m-d ', $s['sign_date']) . '星期' . $weekdays[$wk];
$s['from_province'] = $s['start_province'] ? Yii::$app->params['regionAreas'][$s['start_province']] : '';
$s['to_province'] = $s['aim_province'] ? Yii::$app->params['regionAreas'][$s['aim_province']] : '';
$s['car_number'] = $car['number2'] ?? '';
$s['car_title'] = $car['title'] ?? '';
$s['car_title'] = $s['car_title'] ? $s['car_title'] : ($car['title2'] ?? '');
$s['status'] = $status[$s['status_code']];
$orders[] = $s;
}
unset($s);
$return = [];
$return['code'] = 200;
$return['msg'] = '订单查询成功!';
$return['data'] = [
'total' => $data->count(),
'orders' => $orders,
'employees' => $employees,
'stores' => $stores,
'users' => $users,
'page' => $this->page
];
$this->result($return['msg'], $return['data'], $return['code']);
}
}