ADD:添加后台管理端接口;

DEL:删除不必要的头部注释;
FIX:修正若干已知错误;
This commit is contained in:
fm453 2025-06-30 09:40:13 +08:00
parent a69894effd
commit 4b842ebf3d
66 changed files with 8619 additions and 8130 deletions

2
.idea/php.xml generated
View File

@ -121,7 +121,7 @@
</component>
<component name="PhpUnit">
<phpunit_settings>
<PhpUnitSettings custom_loader_path="$PROJECT_DIR$/vendor/autoload.php" />
<PhpUnitSettings custom_loader_path="$PROJECT_DIR$/vendor/autoload.php" phpunit_phar_path="" />
</phpunit_settings>
</component>
<component name="PsalmOptionsConfiguration">

View File

@ -1,4 +1,12 @@
<!doctype html>
<!doc/**
* @Author: 嗨噜客(三亚)<fm453>
* @Date: 2025-04-10 23:19:11
* @FilePath: 453_test.php
* @Description:
* @Email: 393213759@qq.com
* Copyright (c) 2025 by www.hiluker.cn, All Rights Reserved.
*/
type html>
<html>
<head>
<meta charset="utf-8">

View File

@ -6,15 +6,27 @@
台网页版、桌面应用版、APP/轻应用版等。
#### 软件架构
开发及建议运行环境:
- PHP版本:7.x或8.0
- 数据库mysql 5.6;
开发工具:
- phpstorm
开发及建议运行环境:
- 后端PHP版本:7.x或8.0
- 数据库mysql 5.6;
- APP及H5 基于uni-app开发
- 桌面应用版基于electron开发
开发工具:
- phpstorm
- sublime text
- HbuilderX
字符编码格式UTF-8
PHP环境扩展
- mbstring必须判断中文字符串长度需要
#### 使用说明
#### 开发备忘
1. 等待完善中……
1. gm-车主资料录入逻辑2025.06
- 车主资料编辑时原则上在操作页面上是不会显示出关联会员对应的user表也没有会员选择界面需要后台依据主手机号去关联判断。
- 由于会员表字段只录入手机号、密码、用户名等关键字段,故其他资料字段应录入车主资料数据表。
- 车主信息的逻辑:车主可能会更换手机号(对应需要更新会员关联)、身份证信息不一定会有(因此不能作为唯一关联性的字段),仅将一些固定可确定信息录入车主表,其他信息录入扩展字段表
- 一份车主信息至少关联了主数据源的会员表c_member、本应用数据源的车主表car_owner、会员扩展字段表user_ext
- 存在多应用(平台)时,一个车主可能会在不同平台留下的信息并不一样
#### 参与贡献

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,63 @@
<?php
namespace addons\functions;
class FmFunc
{
//自定义函数类
}
// 自定义函数汇集,方便他处调用
//是否手机号
function isMobile($phone){
// 定义正则表达式
$pattern = '/^1[3-9]\d{9}$/';
// 使用preg_match函数进行匹配
if (preg_match($pattern, $phone)) {
return true; // 手机号有效
} else {
return false; // 手机号无效
}
}
function strLen($str){
if (function_exists('mb_strlen')) {
return mb_strlen($str, 'utf-8');
} else {
return strlen($str);
}
}
function getMillisecond(){
//获取毫秒级时间
list($t1,$t2) = explode(' ',microtime());
return (float)sprintf('%.f',(floatval($t1) + floatval($t2))*1000);
}
//手机号掩码
function mobile_mask($mobile) {
return substr($mobile, 0, 3) . '****' . substr($mobile, 7);
}
//银行卡号加空格隔断
function bankcard_space($cardnumber){
$card ='';
for($i=0; $i<5; $i++){
$card = $card. substr($cardnumber,4*$i,4). ' ';
}
return $card;
}
//生成不重复的随机字符串
function randchars($len)
{
$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
$string=time();
for(;$len>=1;$len--)
{
$position=rand()%strlen($chars);
$position2=rand()%strlen($string);
$string=substr_replace($string,substr($chars,$position,1),$position2,0);
}
return $string;
}

View File

@ -28,6 +28,7 @@ CREATE TABLE `ac_car` (
`pid` int(11) NOT NULL COMMENT '平台ID',
`mid` int(11) NOT NULL COMMENT '关联会员ID',
`owner_id` int(11) NOT NULL COMMENT '对应车主ID',
`car_no` char(50) NOT NULL COMMENT '车牌号外显',
`num_frame` char(50) CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '车架号',
`num_p` char(4) CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '车牌_省',
`num_area` char(2) CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '车牌_区域标识字母',
@ -51,6 +52,8 @@ CREATE TABLE `ac_car` (
-- ADD COLUMN `brand_id` int(11) NOT NULL DEFAULT 0 COMMENT '品牌ID',
-- ADD COLUMN `series_id` int(11) NOT NULL DEFAULT 0 COMMENT '车型ID',
-- ADD COLUMN `title` char(50) CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '车型名称';
-- ALTER TABLE `ac_car`
-- ADD COLUMN `car_no` char(50) NOT NULL COMMENT '车牌号外显' AFTER `owner_id`;
CREATE TABLE `ac_car_brand` (
`id` int(11) NOT NULL AUTO_INCREMENT,
@ -666,6 +669,8 @@ CREATE TABLE `ac_albums` (
INDEX `car_num`(`car_num`) USING BTREE COMMENT '车牌/车架号'
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '车辆验视照图库' ROW_FORMAT = COMPRESSED;
-- ALTER TABLE `ctms`.`ac_albums`
-- ADD COLUMN `order_sn` varchar(32) NULL COMMENT '运单SN' AFTER `deleted`;
/*
v0
v1

View File

@ -649,6 +649,7 @@ CREATE TABLE `ac_weituoren` (
CREATE TABLE `ac_albums` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pid` int(11) NOT NULL COMMENT '平台ID',
`order_sn` varchar(32) NULL COMMENT '运单SN',
`mid` int(11) NOT NULL COMMENT '关联会员ID',
`uid` int(11) NOT NULL COMMENT '关联管理员ID',
`car_num` char(50) CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '车架号/车牌',
@ -670,6 +671,8 @@ CREATE TABLE `ac_albums` (
INDEX `car_num`(`car_num`) USING BTREE COMMENT '车牌/车架号'
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '车辆验视照图库' ROW_FORMAT = COMPRESSED;
-- ALTER TABLE `ctms`.`ac_albums`
-- ADD COLUMN `order_sn` varchar(32) NULL COMMENT '运单SN' AFTER `deleted`;
/*
v0
v1

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -15428,3 +15428,841 @@ $_SERVER = [
'REQUEST_TIME_FLOAT' => 1723209255.555
'REQUEST_TIME' => 1723209255
]
2025-05-29 12:23:47 [11.22.33.2][-][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:23:47 [11.22.33.2][-][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:23:47 [11.22.33.2][-][-][info][application] $_GET = []
$_POST = []
$_FILES = []
$_COOKIE = [
'PHPSESSID' => '0egqk0f8a5me52erj7ijh8q82s'
'_csrf-frontend' => 'd6f914521f30ce8e7b76fa0c9dac185af0cccbd2cf65441db5d0f6bb626c878ba:2:{i:0;s:14:\"_csrf-frontend\";i:1;s:32:\"k2NsfI3MCpfMtu_lIdwucXGDqglRnKLq\";}'
'_csrf-backend' => '0187bd531a5a810efd8ccdf9a2a07ac9d81f84f3822d9a637c68eed670dc7053a:2:{i:0;s:13:\"_csrf-backend\";i:1;s:32:\"WWn9vR6metqT7B-BCouqzRWlbsIs97j2\";}'
'advanced-ctms-api' => 'o564h84tqrpnhvn9p9k2v9si7r'
'advanced-frontend-web' => 'evf9hlrcca64078arvo6mbkbt1'
'csrf' => '43KcKEeDJDwBF7Xw8xmWrHpG8bhArkQn'
'advanced-frontend-api' => 'o5oea55lgfvq15je1tn5pvnnbb'
'i_like_gitea' => 'eac81993543b0a60'
'lang' => 'zh-CN'
'tencent' => 'false'
'advanced-backend' => '347o30oilhggolpp9b1fg57iu6'
'b17e34166755bd29bbc2ad7668dfa9f3' => '3a0d3195-64bc-4df4-8ff8-68f40cb718de.VY7_pedTrOQNaNOwTOYZ6hyAULc'
]
$_SESSION = [
'__flash' => []
'__returnUrl' => 'http://11.22.33.48:1002/fm_admin_453_test.php/'
]
$_SERVER = [
'USER' => 'www'
'HOME' => '/home/www'
'HTTP_PRIORITY' => 'u=0, i'
'HTTP_UPGRADE_INSECURE_REQUESTS' => '1'
'HTTP_COOKIE' => 'PHPSESSID=0egqk0f8a5me52erj7ijh8q82s; _csrf-frontend=d6f914521f30ce8e7b76fa0c9dac185af0cccbd2cf65441db5d0f6bb626c878ba%3A2%3A%7Bi%3A0%3Bs%3A14%3A%22_csrf-frontend%22%3Bi%3A1%3Bs%3A32%3A%22k2NsfI3MCpfMtu_lIdwucXGDqglRnKLq%22%3B%7D; _csrf-backend=0187bd531a5a810efd8ccdf9a2a07ac9d81f84f3822d9a637c68eed670dc7053a%3A2%3A%7Bi%3A0%3Bs%3A13%3A%22_csrf-backend%22%3Bi%3A1%3Bs%3A32%3A%22WWn9vR6metqT7B-BCouqzRWlbsIs97j2%22%3B%7D; advanced-ctms-api=o564h84tqrpnhvn9p9k2v9si7r; advanced-frontend-web=evf9hlrcca64078arvo6mbkbt1; csrf=43KcKEeDJDwBF7Xw8xmWrHpG8bhArkQn; advanced-frontend-api=o5oea55lgfvq15je1tn5pvnnbb; i_like_gitea=eac81993543b0a60; lang=zh-CN; tencent=false; advanced-backend=347o30oilhggolpp9b1fg57iu6; b17e34166755bd29bbc2ad7668dfa9f3=3a0d3195-64bc-4df4-8ff8-68f40cb718de.VY7_pedTrOQNaNOwTOYZ6hyAULc'
'HTTP_CONNECTION' => 'keep-alive'
'HTTP_DNT' => '1'
'HTTP_ACCEPT_ENCODING' => 'gzip, deflate'
'HTTP_ACCEPT_LANGUAGE' => 'zh-CN,en-US;q=0.7,en;q=0.3'
'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:140.0) Gecko/20100101 Firefox/140.0'
'HTTP_HOST' => '11.22.33.48:1002'
'PATH_INFO' => '/index.php'
'REDIRECT_STATUS' => '200'
'SERVER_NAME' => 'saas.localhost'
'SERVER_PORT' => '1002'
'SERVER_ADDR' => '11.22.33.48'
'REMOTE_PORT' => '55868'
'REMOTE_ADDR' => '11.22.33.2'
'SERVER_SOFTWARE' => 'nginx/1.24.0'
'GATEWAY_INTERFACE' => 'CGI/1.1'
'REQUEST_SCHEME' => 'http'
'SERVER_PROTOCOL' => 'HTTP/1.1'
'DOCUMENT_ROOT' => '/media/psf/localhost/yii'
'DOCUMENT_URI' => '/fm_admin_453_test.php/'
'REQUEST_URI' => '/fm_admin_453_test.php/'
'SCRIPT_NAME' => '/fm_admin_453_test.php'
'CONTENT_LENGTH' => ''
'CONTENT_TYPE' => ''
'REQUEST_METHOD' => 'GET'
'QUERY_STRING' => ''
'SCRIPT_FILENAME' => '/media/psf/localhost/yii/fm_admin_453_test.php'
'FCGI_ROLE' => 'RESPONDER'
'PHP_SELF' => '/fm_admin_453_test.php/index.php'
'REQUEST_TIME_FLOAT' => 1748492627.675
'REQUEST_TIME' => 1748492627
]
2025-05-29 12:23:47 [11.22.33.2][-][347o30oilhggolpp9b1fg57iu6][error][Error] Error: Class "yii\bootstrap\ActiveForm" not found in /media/psf/localhost/yii/admins/views/site/login.php:27
Stack trace:
#0 /media/psf/localhost/yii/vendor/yiisoft/yii2/base/View.php(347): require()
#1 /media/psf/localhost/yii/vendor/yiisoft/yii2/base/View.php(257): yii\base\View->renderPhpFile()
#2 /media/psf/localhost/yii/vendor/yiisoft/yii2/base/View.php(156): yii\base\View->renderFile()
#3 /media/psf/localhost/yii/vendor/yiisoft/yii2/base/Controller.php(407): yii\base\View->render()
#4 /media/psf/localhost/yii/admins/controllers/SiteController.php(97): yii\base\Controller->render()
#5 [internal function]: backend\controllers\SiteController->actionLogin()
#6 /media/psf/localhost/yii/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array()
#7 /media/psf/localhost/yii/vendor/yiisoft/yii2/base/Controller.php(178): yii\base\InlineAction->runWithParams()
#8 /media/psf/localhost/yii/vendor/yiisoft/yii2/base/Module.php(552): yii\base\Controller->runAction()
#9 /media/psf/localhost/yii/vendor/yiisoft/yii2/web/Application.php(103): yii\base\Module->runAction()
#10 /media/psf/localhost/yii/vendor/yiisoft/yii2/base/Application.php(384): yii\web\Application->handleRequest()
#11 /media/psf/localhost/yii/fm_admin_453_test.php(48): yii\base\Application->run()
#12 {main}
2025-05-29 12:23:47 [11.22.33.2][-][347o30oilhggolpp9b1fg57iu6][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:23:47 [11.22.33.2][-][347o30oilhggolpp9b1fg57iu6][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:23:47 [11.22.33.2][-][347o30oilhggolpp9b1fg57iu6][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:23:47 [11.22.33.2][-][347o30oilhggolpp9b1fg57iu6][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:23:47 [11.22.33.2][-][347o30oilhggolpp9b1fg57iu6][info][application] $_GET = []
$_POST = []
$_FILES = []
$_COOKIE = [
'PHPSESSID' => '0egqk0f8a5me52erj7ijh8q82s'
'_csrf-frontend' => 'd6f914521f30ce8e7b76fa0c9dac185af0cccbd2cf65441db5d0f6bb626c878ba:2:{i:0;s:14:\"_csrf-frontend\";i:1;s:32:\"k2NsfI3MCpfMtu_lIdwucXGDqglRnKLq\";}'
'_csrf-backend' => '0187bd531a5a810efd8ccdf9a2a07ac9d81f84f3822d9a637c68eed670dc7053a:2:{i:0;s:13:\"_csrf-backend\";i:1;s:32:\"WWn9vR6metqT7B-BCouqzRWlbsIs97j2\";}'
'advanced-ctms-api' => 'o564h84tqrpnhvn9p9k2v9si7r'
'advanced-frontend-web' => 'evf9hlrcca64078arvo6mbkbt1'
'csrf' => '43KcKEeDJDwBF7Xw8xmWrHpG8bhArkQn'
'advanced-frontend-api' => 'o5oea55lgfvq15je1tn5pvnnbb'
'i_like_gitea' => 'eac81993543b0a60'
'lang' => 'zh-CN'
'tencent' => 'false'
'advanced-backend' => '347o30oilhggolpp9b1fg57iu6'
'b17e34166755bd29bbc2ad7668dfa9f3' => '3a0d3195-64bc-4df4-8ff8-68f40cb718de.VY7_pedTrOQNaNOwTOYZ6hyAULc'
]
$_SESSION = [
'__flash' => []
'__returnUrl' => 'http://11.22.33.48:1002/fm_admin_453_test.php/'
]
$_SERVER = [
'USER' => 'www'
'HOME' => '/home/www'
'HTTP_PRIORITY' => 'u=0, i'
'HTTP_UPGRADE_INSECURE_REQUESTS' => '1'
'HTTP_COOKIE' => 'PHPSESSID=0egqk0f8a5me52erj7ijh8q82s; _csrf-frontend=d6f914521f30ce8e7b76fa0c9dac185af0cccbd2cf65441db5d0f6bb626c878ba%3A2%3A%7Bi%3A0%3Bs%3A14%3A%22_csrf-frontend%22%3Bi%3A1%3Bs%3A32%3A%22k2NsfI3MCpfMtu_lIdwucXGDqglRnKLq%22%3B%7D; _csrf-backend=0187bd531a5a810efd8ccdf9a2a07ac9d81f84f3822d9a637c68eed670dc7053a%3A2%3A%7Bi%3A0%3Bs%3A13%3A%22_csrf-backend%22%3Bi%3A1%3Bs%3A32%3A%22WWn9vR6metqT7B-BCouqzRWlbsIs97j2%22%3B%7D; advanced-ctms-api=o564h84tqrpnhvn9p9k2v9si7r; advanced-frontend-web=evf9hlrcca64078arvo6mbkbt1; csrf=43KcKEeDJDwBF7Xw8xmWrHpG8bhArkQn; advanced-frontend-api=o5oea55lgfvq15je1tn5pvnnbb; i_like_gitea=eac81993543b0a60; lang=zh-CN; tencent=false; advanced-backend=347o30oilhggolpp9b1fg57iu6; b17e34166755bd29bbc2ad7668dfa9f3=3a0d3195-64bc-4df4-8ff8-68f40cb718de.VY7_pedTrOQNaNOwTOYZ6hyAULc'
'HTTP_CONNECTION' => 'keep-alive'
'HTTP_DNT' => '1'
'HTTP_ACCEPT_ENCODING' => 'gzip, deflate'
'HTTP_ACCEPT_LANGUAGE' => 'zh-CN,en-US;q=0.7,en;q=0.3'
'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:140.0) Gecko/20100101 Firefox/140.0'
'HTTP_HOST' => '11.22.33.48:1002'
'PATH_INFO' => '/site/login.hi'
'REDIRECT_STATUS' => '200'
'SERVER_NAME' => 'saas.localhost'
'SERVER_PORT' => '1002'
'SERVER_ADDR' => '11.22.33.48'
'REMOTE_PORT' => '55868'
'REMOTE_ADDR' => '11.22.33.2'
'SERVER_SOFTWARE' => 'nginx/1.24.0'
'GATEWAY_INTERFACE' => 'CGI/1.1'
'REQUEST_SCHEME' => 'http'
'SERVER_PROTOCOL' => 'HTTP/1.1'
'DOCUMENT_ROOT' => '/media/psf/localhost/yii'
'DOCUMENT_URI' => '/fm_admin_453_test.php/site/login.hi'
'REQUEST_URI' => '/fm_admin_453_test.php/site/login.hi'
'SCRIPT_NAME' => '/fm_admin_453_test.php'
'CONTENT_LENGTH' => ''
'CONTENT_TYPE' => ''
'REQUEST_METHOD' => 'GET'
'QUERY_STRING' => ''
'SCRIPT_FILENAME' => '/media/psf/localhost/yii/fm_admin_453_test.php'
'FCGI_ROLE' => 'RESPONDER'
'PHP_SELF' => '/fm_admin_453_test.php/site/login.hi'
'REQUEST_TIME_FLOAT' => 1748492627.8132
'REQUEST_TIME' => 1748492627
]
2025-05-29 12:27:23 [11.22.33.2][-][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
in /media/psf/localhost/yii/admins/views/layouts/main.php:79
in /media/psf/localhost/yii/admins/controllers/SiteController.php:97
2025-05-29 12:27:23 [11.22.33.2][-][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
in /media/psf/localhost/yii/admins/views/layouts/main.php:79
in /media/psf/localhost/yii/admins/controllers/SiteController.php:97
2025-05-29 12:27:23 [11.22.33.2][-][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:27:23 [11.22.33.2][-][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:27:23 [11.22.33.2][-][-][info][application] $_GET = []
$_POST = []
$_FILES = []
$_COOKIE = [
'PHPSESSID' => '0egqk0f8a5me52erj7ijh8q82s'
'_csrf-frontend' => 'd6f914521f30ce8e7b76fa0c9dac185af0cccbd2cf65441db5d0f6bb626c878ba:2:{i:0;s:14:\"_csrf-frontend\";i:1;s:32:\"k2NsfI3MCpfMtu_lIdwucXGDqglRnKLq\";}'
'_csrf-backend' => '0187bd531a5a810efd8ccdf9a2a07ac9d81f84f3822d9a637c68eed670dc7053a:2:{i:0;s:13:\"_csrf-backend\";i:1;s:32:\"WWn9vR6metqT7B-BCouqzRWlbsIs97j2\";}'
'advanced-ctms-api' => 'o564h84tqrpnhvn9p9k2v9si7r'
'advanced-frontend-web' => 'evf9hlrcca64078arvo6mbkbt1'
'csrf' => '43KcKEeDJDwBF7Xw8xmWrHpG8bhArkQn'
'advanced-frontend-api' => 'o5oea55lgfvq15je1tn5pvnnbb'
'i_like_gitea' => 'eac81993543b0a60'
'lang' => 'zh-CN'
'tencent' => 'false'
'advanced-backend' => '347o30oilhggolpp9b1fg57iu6'
'b17e34166755bd29bbc2ad7668dfa9f3' => '3a0d3195-64bc-4df4-8ff8-68f40cb718de.VY7_pedTrOQNaNOwTOYZ6hyAULc'
]
$_SESSION = [
'__flash' => []
'__returnUrl' => 'http://11.22.33.48:1002/fm_admin_453_test.php/'
]
$_SERVER = [
'USER' => 'www'
'HOME' => '/home/www'
'HTTP_PRIORITY' => 'u=0, i'
'HTTP_UPGRADE_INSECURE_REQUESTS' => '1'
'HTTP_COOKIE' => 'PHPSESSID=0egqk0f8a5me52erj7ijh8q82s; _csrf-frontend=d6f914521f30ce8e7b76fa0c9dac185af0cccbd2cf65441db5d0f6bb626c878ba%3A2%3A%7Bi%3A0%3Bs%3A14%3A%22_csrf-frontend%22%3Bi%3A1%3Bs%3A32%3A%22k2NsfI3MCpfMtu_lIdwucXGDqglRnKLq%22%3B%7D; _csrf-backend=0187bd531a5a810efd8ccdf9a2a07ac9d81f84f3822d9a637c68eed670dc7053a%3A2%3A%7Bi%3A0%3Bs%3A13%3A%22_csrf-backend%22%3Bi%3A1%3Bs%3A32%3A%22WWn9vR6metqT7B-BCouqzRWlbsIs97j2%22%3B%7D; advanced-ctms-api=o564h84tqrpnhvn9p9k2v9si7r; advanced-frontend-web=evf9hlrcca64078arvo6mbkbt1; csrf=43KcKEeDJDwBF7Xw8xmWrHpG8bhArkQn; advanced-frontend-api=o5oea55lgfvq15je1tn5pvnnbb; i_like_gitea=eac81993543b0a60; lang=zh-CN; tencent=false; advanced-backend=347o30oilhggolpp9b1fg57iu6; b17e34166755bd29bbc2ad7668dfa9f3=3a0d3195-64bc-4df4-8ff8-68f40cb718de.VY7_pedTrOQNaNOwTOYZ6hyAULc'
'HTTP_CONNECTION' => 'keep-alive'
'HTTP_DNT' => '1'
'HTTP_ACCEPT_ENCODING' => 'gzip, deflate'
'HTTP_ACCEPT_LANGUAGE' => 'zh-CN,en-US;q=0.7,en;q=0.3'
'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:140.0) Gecko/20100101 Firefox/140.0'
'HTTP_HOST' => '11.22.33.48:1002'
'PATH_INFO' => '/site/login.hi'
'REDIRECT_STATUS' => '200'
'SERVER_NAME' => 'saas.localhost'
'SERVER_PORT' => '1002'
'SERVER_ADDR' => '11.22.33.48'
'REMOTE_PORT' => '56104'
'REMOTE_ADDR' => '11.22.33.2'
'SERVER_SOFTWARE' => 'nginx/1.24.0'
'GATEWAY_INTERFACE' => 'CGI/1.1'
'REQUEST_SCHEME' => 'http'
'SERVER_PROTOCOL' => 'HTTP/1.1'
'DOCUMENT_ROOT' => '/media/psf/localhost/yii'
'DOCUMENT_URI' => '/fm_admin_453_test.php/site/login.hi'
'REQUEST_URI' => '/fm_admin_453_test.php/site/login.hi'
'SCRIPT_NAME' => '/fm_admin_453_test.php'
'CONTENT_LENGTH' => ''
'CONTENT_TYPE' => ''
'REQUEST_METHOD' => 'GET'
'QUERY_STRING' => ''
'SCRIPT_FILENAME' => '/media/psf/localhost/yii/fm_admin_453_test.php'
'FCGI_ROLE' => 'RESPONDER'
'PHP_SELF' => '/fm_admin_453_test.php/site/login.hi'
'REQUEST_TIME_FLOAT' => 1748492843.1722
'REQUEST_TIME' => 1748492843
]
2025-05-29 12:27:23 [11.22.33.2][-][347o30oilhggolpp9b1fg57iu6][error][yii\web\HttpException:404] yii\web\NotFoundHttpException: 页面未找到。 in /media/psf/localhost/yii/vendor/yiisoft/yii2/web/Request.php:299
Stack trace:
#0 /media/psf/localhost/yii/vendor/yiisoft/yii2/web/Application.php(82): yii\web\Request->resolve()
#1 /media/psf/localhost/yii/vendor/yiisoft/yii2/base/Application.php(384): yii\web\Application->handleRequest()
#2 /media/psf/localhost/yii/fm_admin_453_test.php(48): yii\base\Application->run()
#3 {main}
2025-05-29 12:27:23 [11.22.33.2][-][347o30oilhggolpp9b1fg57iu6][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
in /media/psf/localhost/yii/admins/views/layouts/main.php:79
2025-05-29 12:27:23 [11.22.33.2][-][347o30oilhggolpp9b1fg57iu6][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
in /media/psf/localhost/yii/admins/views/layouts/main.php:79
2025-05-29 12:27:23 [11.22.33.2][-][347o30oilhggolpp9b1fg57iu6][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:27:23 [11.22.33.2][-][347o30oilhggolpp9b1fg57iu6][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:27:23 [11.22.33.2][-][347o30oilhggolpp9b1fg57iu6][info][application] $_GET = []
$_POST = []
$_FILES = []
$_COOKIE = [
'PHPSESSID' => '0egqk0f8a5me52erj7ijh8q82s'
'_csrf-frontend' => 'd6f914521f30ce8e7b76fa0c9dac185af0cccbd2cf65441db5d0f6bb626c878ba:2:{i:0;s:14:\"_csrf-frontend\";i:1;s:32:\"k2NsfI3MCpfMtu_lIdwucXGDqglRnKLq\";}'
'_csrf-backend' => '0187bd531a5a810efd8ccdf9a2a07ac9d81f84f3822d9a637c68eed670dc7053a:2:{i:0;s:13:\"_csrf-backend\";i:1;s:32:\"WWn9vR6metqT7B-BCouqzRWlbsIs97j2\";}'
'advanced-ctms-api' => 'o564h84tqrpnhvn9p9k2v9si7r'
'advanced-frontend-web' => 'evf9hlrcca64078arvo6mbkbt1'
'csrf' => '43KcKEeDJDwBF7Xw8xmWrHpG8bhArkQn'
'advanced-frontend-api' => 'o5oea55lgfvq15je1tn5pvnnbb'
'i_like_gitea' => 'eac81993543b0a60'
'lang' => 'zh-CN'
'tencent' => 'false'
'advanced-backend' => '347o30oilhggolpp9b1fg57iu6'
'b17e34166755bd29bbc2ad7668dfa9f3' => '3a0d3195-64bc-4df4-8ff8-68f40cb718de.VY7_pedTrOQNaNOwTOYZ6hyAULc'
]
$_SESSION = [
'__flash' => []
'__returnUrl' => 'http://11.22.33.48:1002/fm_admin_453_test.php/'
]
$_SERVER = [
'USER' => 'www'
'HOME' => '/home/www'
'HTTP_PRIORITY' => 'u=6'
'HTTP_COOKIE' => 'PHPSESSID=0egqk0f8a5me52erj7ijh8q82s; _csrf-frontend=d6f914521f30ce8e7b76fa0c9dac185af0cccbd2cf65441db5d0f6bb626c878ba%3A2%3A%7Bi%3A0%3Bs%3A14%3A%22_csrf-frontend%22%3Bi%3A1%3Bs%3A32%3A%22k2NsfI3MCpfMtu_lIdwucXGDqglRnKLq%22%3B%7D; _csrf-backend=0187bd531a5a810efd8ccdf9a2a07ac9d81f84f3822d9a637c68eed670dc7053a%3A2%3A%7Bi%3A0%3Bs%3A13%3A%22_csrf-backend%22%3Bi%3A1%3Bs%3A32%3A%22WWn9vR6metqT7B-BCouqzRWlbsIs97j2%22%3B%7D; advanced-ctms-api=o564h84tqrpnhvn9p9k2v9si7r; advanced-frontend-web=evf9hlrcca64078arvo6mbkbt1; csrf=43KcKEeDJDwBF7Xw8xmWrHpG8bhArkQn; advanced-frontend-api=o5oea55lgfvq15je1tn5pvnnbb; i_like_gitea=eac81993543b0a60; lang=zh-CN; tencent=false; advanced-backend=347o30oilhggolpp9b1fg57iu6; b17e34166755bd29bbc2ad7668dfa9f3=3a0d3195-64bc-4df4-8ff8-68f40cb718de.VY7_pedTrOQNaNOwTOYZ6hyAULc'
'HTTP_REFERER' => 'http://11.22.33.48:1002/fm_admin_453_test.php/site/login.hi'
'HTTP_CONNECTION' => 'keep-alive'
'HTTP_DNT' => '1'
'HTTP_ACCEPT_ENCODING' => 'gzip, deflate'
'HTTP_ACCEPT_LANGUAGE' => 'zh-CN,en-US;q=0.7,en;q=0.3'
'HTTP_ACCEPT' => 'image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5'
'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:140.0) Gecko/20100101 Firefox/140.0'
'HTTP_HOST' => '11.22.33.48:1002'
'PATH_INFO' => '/site/favicon.ico'
'REDIRECT_STATUS' => '200'
'SERVER_NAME' => 'saas.localhost'
'SERVER_PORT' => '1002'
'SERVER_ADDR' => '11.22.33.48'
'REMOTE_PORT' => '56105'
'REMOTE_ADDR' => '11.22.33.2'
'SERVER_SOFTWARE' => 'nginx/1.24.0'
'GATEWAY_INTERFACE' => 'CGI/1.1'
'REQUEST_SCHEME' => 'http'
'SERVER_PROTOCOL' => 'HTTP/1.1'
'DOCUMENT_ROOT' => '/media/psf/localhost/yii'
'DOCUMENT_URI' => '/fm_admin_453_test.php/site/favicon.ico'
'REQUEST_URI' => '/fm_admin_453_test.php/site/favicon.ico'
'SCRIPT_NAME' => '/fm_admin_453_test.php'
'CONTENT_LENGTH' => ''
'CONTENT_TYPE' => ''
'REQUEST_METHOD' => 'GET'
'QUERY_STRING' => ''
'SCRIPT_FILENAME' => '/media/psf/localhost/yii/fm_admin_453_test.php'
'FCGI_ROLE' => 'RESPONDER'
'PHP_SELF' => '/fm_admin_453_test.php/site/favicon.ico'
'REQUEST_TIME_FLOAT' => 1748492843.3946
'REQUEST_TIME' => 1748492843
]
2025-05-29 12:27:26 [11.22.33.2][1][-][error][yii\symfonymailer\Mailer::sendMessage] Connection could not be established with host "ssl://smtp.qq.com:587": stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages:
error:1408F10B:SSL routines:ssl3_get_record:wrong version number
in /media/psf/localhost/yii/admins/models/LoginForm.php:124
in /media/psf/localhost/yii/admins/controllers/SiteController.php:94
2025-05-29 12:27:26 [11.22.33.2][1][-][error][yii\symfonymailer\Mailer::sendMessage] Connection could not be established with host "ssl://smtp.qq.com:587": stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages:
error:1408F10B:SSL routines:ssl3_get_record:wrong version number
in /media/psf/localhost/yii/admins/models/LoginForm.php:131
in /media/psf/localhost/yii/admins/controllers/SiteController.php:94
2025-05-29 12:27:26 [11.22.33.2][1][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:27:26 [11.22.33.2][1][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:27:26 [11.22.33.2][1][-][info][application] $_GET = []
$_POST = [
'_csrf-backend' => 'yzuIYr7ACEl-rkOd89cz1Zx4Z-w0b0BTMyhOcHiageacbOZbyJI-JBvaMsnElR6X3xcSnU49Fz9RWwcDQa3r1A=='
'LoginForm' => [
'username' => 'fm453'
'password' => 'Lukegzs168.com'
'rememberMe' => '0'
]
'login-button' => ''
]
$_FILES = []
$_COOKIE = [
'PHPSESSID' => '0egqk0f8a5me52erj7ijh8q82s'
'_csrf-frontend' => 'd6f914521f30ce8e7b76fa0c9dac185af0cccbd2cf65441db5d0f6bb626c878ba:2:{i:0;s:14:\"_csrf-frontend\";i:1;s:32:\"k2NsfI3MCpfMtu_lIdwucXGDqglRnKLq\";}'
'_csrf-backend' => '0187bd531a5a810efd8ccdf9a2a07ac9d81f84f3822d9a637c68eed670dc7053a:2:{i:0;s:13:\"_csrf-backend\";i:1;s:32:\"WWn9vR6metqT7B-BCouqzRWlbsIs97j2\";}'
'advanced-ctms-api' => 'o564h84tqrpnhvn9p9k2v9si7r'
'advanced-frontend-web' => 'evf9hlrcca64078arvo6mbkbt1'
'csrf' => '43KcKEeDJDwBF7Xw8xmWrHpG8bhArkQn'
'advanced-frontend-api' => 'o5oea55lgfvq15je1tn5pvnnbb'
'i_like_gitea' => 'eac81993543b0a60'
'lang' => 'zh-CN'
'tencent' => 'false'
'advanced-backend' => '347o30oilhggolpp9b1fg57iu6'
'b17e34166755bd29bbc2ad7668dfa9f3' => '3a0d3195-64bc-4df4-8ff8-68f40cb718de.VY7_pedTrOQNaNOwTOYZ6hyAULc'
]
$_SESSION = [
'__flash' => []
'__returnUrl' => 'http://11.22.33.48:1002/fm_admin_453_test.php/'
'__id' => 1
'__authKey' => 'Ar8SbMSghjsg1N7o3mOFU6UZGWQxz2Nc'
]
$_SERVER = [
'USER' => 'www'
'HOME' => '/home/www'
'HTTP_PRIORITY' => 'u=0, i'
'HTTP_UPGRADE_INSECURE_REQUESTS' => '1'
'HTTP_COOKIE' => 'PHPSESSID=0egqk0f8a5me52erj7ijh8q82s; _csrf-frontend=d6f914521f30ce8e7b76fa0c9dac185af0cccbd2cf65441db5d0f6bb626c878ba%3A2%3A%7Bi%3A0%3Bs%3A14%3A%22_csrf-frontend%22%3Bi%3A1%3Bs%3A32%3A%22k2NsfI3MCpfMtu_lIdwucXGDqglRnKLq%22%3B%7D; _csrf-backend=0187bd531a5a810efd8ccdf9a2a07ac9d81f84f3822d9a637c68eed670dc7053a%3A2%3A%7Bi%3A0%3Bs%3A13%3A%22_csrf-backend%22%3Bi%3A1%3Bs%3A32%3A%22WWn9vR6metqT7B-BCouqzRWlbsIs97j2%22%3B%7D; advanced-ctms-api=o564h84tqrpnhvn9p9k2v9si7r; advanced-frontend-web=evf9hlrcca64078arvo6mbkbt1; csrf=43KcKEeDJDwBF7Xw8xmWrHpG8bhArkQn; advanced-frontend-api=o5oea55lgfvq15je1tn5pvnnbb; i_like_gitea=eac81993543b0a60; lang=zh-CN; tencent=false; advanced-backend=347o30oilhggolpp9b1fg57iu6; b17e34166755bd29bbc2ad7668dfa9f3=3a0d3195-64bc-4df4-8ff8-68f40cb718de.VY7_pedTrOQNaNOwTOYZ6hyAULc'
'HTTP_REFERER' => 'http://11.22.33.48:1002/fm_admin_453_test.php/site/login.hi'
'HTTP_CONNECTION' => 'keep-alive'
'HTTP_DNT' => '1'
'HTTP_ORIGIN' => 'http://11.22.33.48:1002'
'HTTP_CONTENT_LENGTH' => '217'
'HTTP_CONTENT_TYPE' => 'application/x-www-form-urlencoded'
'HTTP_ACCEPT_ENCODING' => 'gzip, deflate'
'HTTP_ACCEPT_LANGUAGE' => 'zh-CN,en-US;q=0.7,en;q=0.3'
'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:140.0) Gecko/20100101 Firefox/140.0'
'HTTP_HOST' => '11.22.33.48:1002'
'PATH_INFO' => '/site/login.hi'
'REDIRECT_STATUS' => '200'
'SERVER_NAME' => 'saas.localhost'
'SERVER_PORT' => '1002'
'SERVER_ADDR' => '11.22.33.48'
'REMOTE_PORT' => '56105'
'REMOTE_ADDR' => '11.22.33.2'
'SERVER_SOFTWARE' => 'nginx/1.24.0'
'GATEWAY_INTERFACE' => 'CGI/1.1'
'REQUEST_SCHEME' => 'http'
'SERVER_PROTOCOL' => 'HTTP/1.1'
'DOCUMENT_ROOT' => '/media/psf/localhost/yii'
'DOCUMENT_URI' => '/fm_admin_453_test.php/site/login.hi'
'REQUEST_URI' => '/fm_admin_453_test.php/site/login.hi'
'SCRIPT_NAME' => '/fm_admin_453_test.php'
'CONTENT_LENGTH' => '217'
'CONTENT_TYPE' => 'application/x-www-form-urlencoded'
'REQUEST_METHOD' => 'POST'
'QUERY_STRING' => ''
'SCRIPT_FILENAME' => '/media/psf/localhost/yii/fm_admin_453_test.php'
'FCGI_ROLE' => 'RESPONDER'
'PHP_SELF' => '/fm_admin_453_test.php/site/login.hi'
'REQUEST_TIME_FLOAT' => 1748492846.0345
'REQUEST_TIME' => 1748492846
]
2025-05-29 12:27:27 [11.22.33.2][1][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
in /media/psf/localhost/yii/admins/views/layouts/main.php:79
in /media/psf/localhost/yii/admins/controllers/SiteController.php:74
2025-05-29 12:27:27 [11.22.33.2][1][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
in /media/psf/localhost/yii/admins/views/layouts/main.php:79
in /media/psf/localhost/yii/admins/controllers/SiteController.php:74
2025-05-29 12:27:27 [11.22.33.2][1][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:27:27 [11.22.33.2][1][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:27:26 [11.22.33.2][1][-][info][application] $_GET = []
$_POST = []
$_FILES = []
$_COOKIE = [
'PHPSESSID' => '0egqk0f8a5me52erj7ijh8q82s'
'_csrf-frontend' => 'd6f914521f30ce8e7b76fa0c9dac185af0cccbd2cf65441db5d0f6bb626c878ba:2:{i:0;s:14:\"_csrf-frontend\";i:1;s:32:\"k2NsfI3MCpfMtu_lIdwucXGDqglRnKLq\";}'
'_csrf-backend' => '3d4618a63642f4a787a98260ab989f539a7bf170d637ee052c2831f9151fba19a:2:{i:0;s:13:\"_csrf-backend\";i:1;s:32:\"fJWHCMl91a9-_oN_VZEAvxPvNCzd1iYo\";}'
'advanced-ctms-api' => 'o564h84tqrpnhvn9p9k2v9si7r'
'advanced-frontend-web' => 'evf9hlrcca64078arvo6mbkbt1'
'csrf' => '43KcKEeDJDwBF7Xw8xmWrHpG8bhArkQn'
'advanced-frontend-api' => 'o5oea55lgfvq15je1tn5pvnnbb'
'i_like_gitea' => 'eac81993543b0a60'
'lang' => 'zh-CN'
'tencent' => 'false'
'advanced-backend' => '2mu9c3ngiqjgb4l1g2l007gdpr'
'b17e34166755bd29bbc2ad7668dfa9f3' => '3a0d3195-64bc-4df4-8ff8-68f40cb718de.VY7_pedTrOQNaNOwTOYZ6hyAULc'
]
$_SESSION = [
'__flash' => []
'__returnUrl' => 'http://11.22.33.48:1002/fm_admin_453_test.php/'
'__id' => 1
'__authKey' => 'Ar8SbMSghjsg1N7o3mOFU6UZGWQxz2Nc'
]
$_SERVER = [
'USER' => 'www'
'HOME' => '/home/www'
'HTTP_PRIORITY' => 'u=0, i'
'HTTP_UPGRADE_INSECURE_REQUESTS' => '1'
'HTTP_COOKIE' => 'PHPSESSID=0egqk0f8a5me52erj7ijh8q82s; _csrf-frontend=d6f914521f30ce8e7b76fa0c9dac185af0cccbd2cf65441db5d0f6bb626c878ba%3A2%3A%7Bi%3A0%3Bs%3A14%3A%22_csrf-frontend%22%3Bi%3A1%3Bs%3A32%3A%22k2NsfI3MCpfMtu_lIdwucXGDqglRnKLq%22%3B%7D; _csrf-backend=3d4618a63642f4a787a98260ab989f539a7bf170d637ee052c2831f9151fba19a%3A2%3A%7Bi%3A0%3Bs%3A13%3A%22_csrf-backend%22%3Bi%3A1%3Bs%3A32%3A%22fJWHCMl91a9-_oN_VZEAvxPvNCzd1iYo%22%3B%7D; advanced-ctms-api=o564h84tqrpnhvn9p9k2v9si7r; advanced-frontend-web=evf9hlrcca64078arvo6mbkbt1; csrf=43KcKEeDJDwBF7Xw8xmWrHpG8bhArkQn; advanced-frontend-api=o5oea55lgfvq15je1tn5pvnnbb; i_like_gitea=eac81993543b0a60; lang=zh-CN; tencent=false; advanced-backend=2mu9c3ngiqjgb4l1g2l007gdpr; b17e34166755bd29bbc2ad7668dfa9f3=3a0d3195-64bc-4df4-8ff8-68f40cb718de.VY7_pedTrOQNaNOwTOYZ6hyAULc'
'HTTP_CONNECTION' => 'keep-alive'
'HTTP_DNT' => '1'
'HTTP_REFERER' => 'http://11.22.33.48:1002/fm_admin_453_test.php/site/login.hi'
'HTTP_ACCEPT_ENCODING' => 'gzip, deflate'
'HTTP_ACCEPT_LANGUAGE' => 'zh-CN,en-US;q=0.7,en;q=0.3'
'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:140.0) Gecko/20100101 Firefox/140.0'
'HTTP_HOST' => '11.22.33.48:1002'
'PATH_INFO' => '/index.php'
'REDIRECT_STATUS' => '200'
'SERVER_NAME' => 'saas.localhost'
'SERVER_PORT' => '1002'
'SERVER_ADDR' => '11.22.33.48'
'REMOTE_PORT' => '56105'
'REMOTE_ADDR' => '11.22.33.2'
'SERVER_SOFTWARE' => 'nginx/1.24.0'
'GATEWAY_INTERFACE' => 'CGI/1.1'
'REQUEST_SCHEME' => 'http'
'SERVER_PROTOCOL' => 'HTTP/1.1'
'DOCUMENT_ROOT' => '/media/psf/localhost/yii'
'DOCUMENT_URI' => '/fm_admin_453_test.php/'
'REQUEST_URI' => '/fm_admin_453_test.php/'
'SCRIPT_NAME' => '/fm_admin_453_test.php'
'CONTENT_LENGTH' => ''
'CONTENT_TYPE' => ''
'REQUEST_METHOD' => 'GET'
'QUERY_STRING' => ''
'SCRIPT_FILENAME' => '/media/psf/localhost/yii/fm_admin_453_test.php'
'FCGI_ROLE' => 'RESPONDER'
'PHP_SELF' => '/fm_admin_453_test.php/index.php'
'REQUEST_TIME_FLOAT' => 1748492846.9618
'REQUEST_TIME' => 1748492846
]
2025-05-29 12:27:27 [11.22.33.2][1][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
in /media/psf/localhost/yii/admins/views/layouts/main.php:79
in /media/psf/localhost/yii/admins/controllers/IndexController.php:56
2025-05-29 12:27:27 [11.22.33.2][1][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
in /media/psf/localhost/yii/admins/views/layouts/main.php:79
in /media/psf/localhost/yii/admins/controllers/IndexController.php:56
2025-05-29 12:27:27 [11.22.33.2][1][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:27:27 [11.22.33.2][1][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:27:27 [11.22.33.2][1][-][info][application] $_GET = []
$_POST = []
$_FILES = []
$_COOKIE = [
'PHPSESSID' => '0egqk0f8a5me52erj7ijh8q82s'
'_csrf-frontend' => 'd6f914521f30ce8e7b76fa0c9dac185af0cccbd2cf65441db5d0f6bb626c878ba:2:{i:0;s:14:\"_csrf-frontend\";i:1;s:32:\"k2NsfI3MCpfMtu_lIdwucXGDqglRnKLq\";}'
'_csrf-backend' => '3d4618a63642f4a787a98260ab989f539a7bf170d637ee052c2831f9151fba19a:2:{i:0;s:13:\"_csrf-backend\";i:1;s:32:\"fJWHCMl91a9-_oN_VZEAvxPvNCzd1iYo\";}'
'advanced-ctms-api' => 'o564h84tqrpnhvn9p9k2v9si7r'
'advanced-frontend-web' => 'evf9hlrcca64078arvo6mbkbt1'
'csrf' => '43KcKEeDJDwBF7Xw8xmWrHpG8bhArkQn'
'advanced-frontend-api' => 'o5oea55lgfvq15je1tn5pvnnbb'
'i_like_gitea' => 'eac81993543b0a60'
'lang' => 'zh-CN'
'tencent' => 'false'
'advanced-backend' => '2mu9c3ngiqjgb4l1g2l007gdpr'
'b17e34166755bd29bbc2ad7668dfa9f3' => '3a0d3195-64bc-4df4-8ff8-68f40cb718de.VY7_pedTrOQNaNOwTOYZ6hyAULc'
]
$_SESSION = [
'__flash' => []
'__returnUrl' => 'http://11.22.33.48:1002/fm_admin_453_test.php/'
'__id' => 1
'__authKey' => 'Ar8SbMSghjsg1N7o3mOFU6UZGWQxz2Nc'
]
$_SERVER = [
'USER' => 'www'
'HOME' => '/home/www'
'HTTP_PRIORITY' => 'u=4'
'HTTP_UPGRADE_INSECURE_REQUESTS' => '1'
'HTTP_COOKIE' => 'PHPSESSID=0egqk0f8a5me52erj7ijh8q82s; _csrf-frontend=d6f914521f30ce8e7b76fa0c9dac185af0cccbd2cf65441db5d0f6bb626c878ba%3A2%3A%7Bi%3A0%3Bs%3A14%3A%22_csrf-frontend%22%3Bi%3A1%3Bs%3A32%3A%22k2NsfI3MCpfMtu_lIdwucXGDqglRnKLq%22%3B%7D; _csrf-backend=3d4618a63642f4a787a98260ab989f539a7bf170d637ee052c2831f9151fba19a%3A2%3A%7Bi%3A0%3Bs%3A13%3A%22_csrf-backend%22%3Bi%3A1%3Bs%3A32%3A%22fJWHCMl91a9-_oN_VZEAvxPvNCzd1iYo%22%3B%7D; advanced-ctms-api=o564h84tqrpnhvn9p9k2v9si7r; advanced-frontend-web=evf9hlrcca64078arvo6mbkbt1; csrf=43KcKEeDJDwBF7Xw8xmWrHpG8bhArkQn; advanced-frontend-api=o5oea55lgfvq15je1tn5pvnnbb; i_like_gitea=eac81993543b0a60; lang=zh-CN; tencent=false; advanced-backend=2mu9c3ngiqjgb4l1g2l007gdpr; b17e34166755bd29bbc2ad7668dfa9f3=3a0d3195-64bc-4df4-8ff8-68f40cb718de.VY7_pedTrOQNaNOwTOYZ6hyAULc'
'HTTP_REFERER' => 'http://11.22.33.48:1002/fm_admin_453_test.php/'
'HTTP_CONNECTION' => 'keep-alive'
'HTTP_DNT' => '1'
'HTTP_ACCEPT_ENCODING' => 'gzip, deflate'
'HTTP_ACCEPT_LANGUAGE' => 'zh-CN,en-US;q=0.7,en;q=0.3'
'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:140.0) Gecko/20100101 Firefox/140.0'
'HTTP_HOST' => '11.22.33.48:1002'
'PATH_INFO' => '/index/welcome.hi'
'REDIRECT_STATUS' => '200'
'SERVER_NAME' => 'saas.localhost'
'SERVER_PORT' => '1002'
'SERVER_ADDR' => '11.22.33.48'
'REMOTE_PORT' => '56105'
'REMOTE_ADDR' => '11.22.33.2'
'SERVER_SOFTWARE' => 'nginx/1.24.0'
'GATEWAY_INTERFACE' => 'CGI/1.1'
'REQUEST_SCHEME' => 'http'
'SERVER_PROTOCOL' => 'HTTP/1.1'
'DOCUMENT_ROOT' => '/media/psf/localhost/yii'
'DOCUMENT_URI' => '/fm_admin_453_test.php/index/welcome.hi'
'REQUEST_URI' => '/fm_admin_453_test.php/index/welcome.hi'
'SCRIPT_NAME' => '/fm_admin_453_test.php'
'CONTENT_LENGTH' => ''
'CONTENT_TYPE' => ''
'REQUEST_METHOD' => 'GET'
'QUERY_STRING' => ''
'SCRIPT_FILENAME' => '/media/psf/localhost/yii/fm_admin_453_test.php'
'FCGI_ROLE' => 'RESPONDER'
'PHP_SELF' => '/fm_admin_453_test.php/index/welcome.hi'
'REQUEST_TIME_FLOAT' => 1748492847.1111
'REQUEST_TIME' => 1748492847
]
2025-05-29 12:27:27 [11.22.33.2][1][2mu9c3ngiqjgb4l1g2l007gdpr][error][yii\web\HttpException:404] yii\web\NotFoundHttpException: 页面未找到。 in /media/psf/localhost/yii/vendor/yiisoft/yii2/web/Request.php:299
Stack trace:
#0 /media/psf/localhost/yii/vendor/yiisoft/yii2/web/Application.php(82): yii\web\Request->resolve()
#1 /media/psf/localhost/yii/vendor/yiisoft/yii2/base/Application.php(384): yii\web\Application->handleRequest()
#2 /media/psf/localhost/yii/fm_admin_453_test.php(48): yii\base\Application->run()
#3 {main}
2025-05-29 12:27:27 [11.22.33.2][1][2mu9c3ngiqjgb4l1g2l007gdpr][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
in /media/psf/localhost/yii/admins/views/layouts/main.php:79
2025-05-29 12:27:27 [11.22.33.2][1][2mu9c3ngiqjgb4l1g2l007gdpr][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
in /media/psf/localhost/yii/admins/views/layouts/main.php:79
2025-05-29 12:27:27 [11.22.33.2][1][2mu9c3ngiqjgb4l1g2l007gdpr][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:27:27 [11.22.33.2][1][2mu9c3ngiqjgb4l1g2l007gdpr][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:27:27 [11.22.33.2][1][2mu9c3ngiqjgb4l1g2l007gdpr][info][application] $_GET = []
$_POST = []
$_FILES = []
$_COOKIE = [
'PHPSESSID' => '0egqk0f8a5me52erj7ijh8q82s'
'_csrf-frontend' => 'd6f914521f30ce8e7b76fa0c9dac185af0cccbd2cf65441db5d0f6bb626c878ba:2:{i:0;s:14:\"_csrf-frontend\";i:1;s:32:\"k2NsfI3MCpfMtu_lIdwucXGDqglRnKLq\";}'
'_csrf-backend' => '3d4618a63642f4a787a98260ab989f539a7bf170d637ee052c2831f9151fba19a:2:{i:0;s:13:\"_csrf-backend\";i:1;s:32:\"fJWHCMl91a9-_oN_VZEAvxPvNCzd1iYo\";}'
'advanced-ctms-api' => 'o564h84tqrpnhvn9p9k2v9si7r'
'advanced-frontend-web' => 'evf9hlrcca64078arvo6mbkbt1'
'csrf' => '43KcKEeDJDwBF7Xw8xmWrHpG8bhArkQn'
'advanced-frontend-api' => 'o5oea55lgfvq15je1tn5pvnnbb'
'i_like_gitea' => 'eac81993543b0a60'
'lang' => 'zh-CN'
'tencent' => 'false'
'advanced-backend' => '2mu9c3ngiqjgb4l1g2l007gdpr'
'b17e34166755bd29bbc2ad7668dfa9f3' => '3a0d3195-64bc-4df4-8ff8-68f40cb718de.VY7_pedTrOQNaNOwTOYZ6hyAULc'
]
$_SESSION = [
'__flash' => []
'__returnUrl' => 'http://11.22.33.48:1002/fm_admin_453_test.php/'
'__id' => 1
'__authKey' => 'Ar8SbMSghjsg1N7o3mOFU6UZGWQxz2Nc'
]
$_SERVER = [
'USER' => 'www'
'HOME' => '/home/www'
'HTTP_PRIORITY' => 'u=6'
'HTTP_COOKIE' => 'PHPSESSID=0egqk0f8a5me52erj7ijh8q82s; _csrf-frontend=d6f914521f30ce8e7b76fa0c9dac185af0cccbd2cf65441db5d0f6bb626c878ba%3A2%3A%7Bi%3A0%3Bs%3A14%3A%22_csrf-frontend%22%3Bi%3A1%3Bs%3A32%3A%22k2NsfI3MCpfMtu_lIdwucXGDqglRnKLq%22%3B%7D; _csrf-backend=3d4618a63642f4a787a98260ab989f539a7bf170d637ee052c2831f9151fba19a%3A2%3A%7Bi%3A0%3Bs%3A13%3A%22_csrf-backend%22%3Bi%3A1%3Bs%3A32%3A%22fJWHCMl91a9-_oN_VZEAvxPvNCzd1iYo%22%3B%7D; advanced-ctms-api=o564h84tqrpnhvn9p9k2v9si7r; advanced-frontend-web=evf9hlrcca64078arvo6mbkbt1; csrf=43KcKEeDJDwBF7Xw8xmWrHpG8bhArkQn; advanced-frontend-api=o5oea55lgfvq15je1tn5pvnnbb; i_like_gitea=eac81993543b0a60; lang=zh-CN; tencent=false; advanced-backend=2mu9c3ngiqjgb4l1g2l007gdpr; b17e34166755bd29bbc2ad7668dfa9f3=3a0d3195-64bc-4df4-8ff8-68f40cb718de.VY7_pedTrOQNaNOwTOYZ6hyAULc'
'HTTP_REFERER' => 'http://11.22.33.48:1002/fm_admin_453_test.php/'
'HTTP_CONNECTION' => 'keep-alive'
'HTTP_DNT' => '1'
'HTTP_ACCEPT_ENCODING' => 'gzip, deflate'
'HTTP_ACCEPT_LANGUAGE' => 'zh-CN,en-US;q=0.7,en;q=0.3'
'HTTP_ACCEPT' => 'image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5'
'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:140.0) Gecko/20100101 Firefox/140.0'
'HTTP_HOST' => '11.22.33.48:1002'
'PATH_INFO' => '/favicon.ico'
'REDIRECT_STATUS' => '200'
'SERVER_NAME' => 'saas.localhost'
'SERVER_PORT' => '1002'
'SERVER_ADDR' => '11.22.33.48'
'REMOTE_PORT' => '56109'
'REMOTE_ADDR' => '11.22.33.2'
'SERVER_SOFTWARE' => 'nginx/1.24.0'
'GATEWAY_INTERFACE' => 'CGI/1.1'
'REQUEST_SCHEME' => 'http'
'SERVER_PROTOCOL' => 'HTTP/1.1'
'DOCUMENT_ROOT' => '/media/psf/localhost/yii'
'DOCUMENT_URI' => '/fm_admin_453_test.php/favicon.ico'
'REQUEST_URI' => '/fm_admin_453_test.php/favicon.ico'
'SCRIPT_NAME' => '/fm_admin_453_test.php'
'CONTENT_LENGTH' => ''
'CONTENT_TYPE' => ''
'REQUEST_METHOD' => 'GET'
'QUERY_STRING' => ''
'SCRIPT_FILENAME' => '/media/psf/localhost/yii/fm_admin_453_test.php'
'FCGI_ROLE' => 'RESPONDER'
'PHP_SELF' => '/fm_admin_453_test.php/favicon.ico'
'REQUEST_TIME_FLOAT' => 1748492847.1282
'REQUEST_TIME' => 1748492847
]
2025-05-29 12:27:56 [11.22.33.2][1][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
in /media/psf/localhost/yii/admins/views/layouts/main.php:79
in /media/psf/localhost/yii/admins/controllers/AdminerController.php:57
2025-05-29 12:27:56 [11.22.33.2][1][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
in /media/psf/localhost/yii/admins/views/layouts/main.php:79
in /media/psf/localhost/yii/admins/controllers/AdminerController.php:57
2025-05-29 12:27:56 [11.22.33.2][1][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:27:56 [11.22.33.2][1][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:27:56 [11.22.33.2][1][-][info][application] $_GET = []
$_POST = []
$_FILES = []
$_COOKIE = [
'PHPSESSID' => '0egqk0f8a5me52erj7ijh8q82s'
'_csrf-frontend' => 'd6f914521f30ce8e7b76fa0c9dac185af0cccbd2cf65441db5d0f6bb626c878ba:2:{i:0;s:14:\"_csrf-frontend\";i:1;s:32:\"k2NsfI3MCpfMtu_lIdwucXGDqglRnKLq\";}'
'_csrf-backend' => '3d4618a63642f4a787a98260ab989f539a7bf170d637ee052c2831f9151fba19a:2:{i:0;s:13:\"_csrf-backend\";i:1;s:32:\"fJWHCMl91a9-_oN_VZEAvxPvNCzd1iYo\";}'
'advanced-ctms-api' => 'o564h84tqrpnhvn9p9k2v9si7r'
'advanced-frontend-web' => 'evf9hlrcca64078arvo6mbkbt1'
'csrf' => '43KcKEeDJDwBF7Xw8xmWrHpG8bhArkQn'
'advanced-frontend-api' => 'o5oea55lgfvq15je1tn5pvnnbb'
'i_like_gitea' => 'eac81993543b0a60'
'lang' => 'zh-CN'
'tencent' => 'false'
'advanced-backend' => '2mu9c3ngiqjgb4l1g2l007gdpr'
'b17e34166755bd29bbc2ad7668dfa9f3' => '3a0d3195-64bc-4df4-8ff8-68f40cb718de.VY7_pedTrOQNaNOwTOYZ6hyAULc'
]
$_SESSION = [
'__flash' => []
'__returnUrl' => 'http://11.22.33.48:1002/fm_admin_453_test.php/'
'__id' => 1
'__authKey' => 'Ar8SbMSghjsg1N7o3mOFU6UZGWQxz2Nc'
]
$_SERVER = [
'USER' => 'www'
'HOME' => '/home/www'
'HTTP_PRIORITY' => 'u=4'
'HTTP_UPGRADE_INSECURE_REQUESTS' => '1'
'HTTP_COOKIE' => 'PHPSESSID=0egqk0f8a5me52erj7ijh8q82s; _csrf-frontend=d6f914521f30ce8e7b76fa0c9dac185af0cccbd2cf65441db5d0f6bb626c878ba%3A2%3A%7Bi%3A0%3Bs%3A14%3A%22_csrf-frontend%22%3Bi%3A1%3Bs%3A32%3A%22k2NsfI3MCpfMtu_lIdwucXGDqglRnKLq%22%3B%7D; _csrf-backend=3d4618a63642f4a787a98260ab989f539a7bf170d637ee052c2831f9151fba19a%3A2%3A%7Bi%3A0%3Bs%3A13%3A%22_csrf-backend%22%3Bi%3A1%3Bs%3A32%3A%22fJWHCMl91a9-_oN_VZEAvxPvNCzd1iYo%22%3B%7D; advanced-ctms-api=o564h84tqrpnhvn9p9k2v9si7r; advanced-frontend-web=evf9hlrcca64078arvo6mbkbt1; csrf=43KcKEeDJDwBF7Xw8xmWrHpG8bhArkQn; advanced-frontend-api=o5oea55lgfvq15je1tn5pvnnbb; i_like_gitea=eac81993543b0a60; lang=zh-CN; tencent=false; advanced-backend=2mu9c3ngiqjgb4l1g2l007gdpr; b17e34166755bd29bbc2ad7668dfa9f3=3a0d3195-64bc-4df4-8ff8-68f40cb718de.VY7_pedTrOQNaNOwTOYZ6hyAULc'
'HTTP_REFERER' => 'http://11.22.33.48:1002/fm_admin_453_test.php/'
'HTTP_CONNECTION' => 'keep-alive'
'HTTP_DNT' => '1'
'HTTP_ACCEPT_ENCODING' => 'gzip, deflate'
'HTTP_ACCEPT_LANGUAGE' => 'zh-CN,en-US;q=0.7,en;q=0.3'
'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:140.0) Gecko/20100101 Firefox/140.0'
'HTTP_HOST' => '11.22.33.48:1002'
'PATH_INFO' => '/adminer/list.hi'
'REDIRECT_STATUS' => '200'
'SERVER_NAME' => 'saas.localhost'
'SERVER_PORT' => '1002'
'SERVER_ADDR' => '11.22.33.48'
'REMOTE_PORT' => '56105'
'REMOTE_ADDR' => '11.22.33.2'
'SERVER_SOFTWARE' => 'nginx/1.24.0'
'GATEWAY_INTERFACE' => 'CGI/1.1'
'REQUEST_SCHEME' => 'http'
'SERVER_PROTOCOL' => 'HTTP/1.1'
'DOCUMENT_ROOT' => '/media/psf/localhost/yii'
'DOCUMENT_URI' => '/fm_admin_453_test.php/adminer/list.hi'
'REQUEST_URI' => '/fm_admin_453_test.php/adminer/list.hi'
'SCRIPT_NAME' => '/fm_admin_453_test.php'
'CONTENT_LENGTH' => ''
'CONTENT_TYPE' => ''
'REQUEST_METHOD' => 'GET'
'QUERY_STRING' => ''
'SCRIPT_FILENAME' => '/media/psf/localhost/yii/fm_admin_453_test.php'
'FCGI_ROLE' => 'RESPONDER'
'PHP_SELF' => '/fm_admin_453_test.php/adminer/list.hi'
'REQUEST_TIME_FLOAT' => 1748492876.599
'REQUEST_TIME' => 1748492876
]
2025-05-29 12:28:08 [11.22.33.2][1][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
in /media/psf/localhost/yii/admins/views/layouts/main.php:79
in /media/psf/localhost/yii/admins/controllers/AdminerController.php:57
2025-05-29 12:28:08 [11.22.33.2][1][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
in /media/psf/localhost/yii/admins/views/layouts/main.php:79
in /media/psf/localhost/yii/admins/controllers/AdminerController.php:57
2025-05-29 12:28:08 [11.22.33.2][1][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:28:08 [11.22.33.2][1][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:28:08 [11.22.33.2][1][-][info][application] $_GET = []
$_POST = []
$_FILES = []
$_COOKIE = [
'PHPSESSID' => '0egqk0f8a5me52erj7ijh8q82s'
'_csrf-frontend' => 'd6f914521f30ce8e7b76fa0c9dac185af0cccbd2cf65441db5d0f6bb626c878ba:2:{i:0;s:14:\"_csrf-frontend\";i:1;s:32:\"k2NsfI3MCpfMtu_lIdwucXGDqglRnKLq\";}'
'_csrf-backend' => '3d4618a63642f4a787a98260ab989f539a7bf170d637ee052c2831f9151fba19a:2:{i:0;s:13:\"_csrf-backend\";i:1;s:32:\"fJWHCMl91a9-_oN_VZEAvxPvNCzd1iYo\";}'
'advanced-ctms-api' => 'o564h84tqrpnhvn9p9k2v9si7r'
'advanced-frontend-web' => 'evf9hlrcca64078arvo6mbkbt1'
'csrf' => '43KcKEeDJDwBF7Xw8xmWrHpG8bhArkQn'
'advanced-frontend-api' => 'o5oea55lgfvq15je1tn5pvnnbb'
'i_like_gitea' => 'eac81993543b0a60'
'lang' => 'zh-CN'
'tencent' => 'false'
'advanced-backend' => '2mu9c3ngiqjgb4l1g2l007gdpr'
'b17e34166755bd29bbc2ad7668dfa9f3' => '3a0d3195-64bc-4df4-8ff8-68f40cb718de.VY7_pedTrOQNaNOwTOYZ6hyAULc'
]
$_SESSION = [
'__flash' => []
'__returnUrl' => 'http://11.22.33.48:1002/fm_admin_453_test.php/'
'__id' => 1
'__authKey' => 'Ar8SbMSghjsg1N7o3mOFU6UZGWQxz2Nc'
]
$_SERVER = [
'USER' => 'www'
'HOME' => '/home/www'
'HTTP_PRIORITY' => 'u=4'
'HTTP_UPGRADE_INSECURE_REQUESTS' => '1'
'HTTP_COOKIE' => 'PHPSESSID=0egqk0f8a5me52erj7ijh8q82s; _csrf-frontend=d6f914521f30ce8e7b76fa0c9dac185af0cccbd2cf65441db5d0f6bb626c878ba%3A2%3A%7Bi%3A0%3Bs%3A14%3A%22_csrf-frontend%22%3Bi%3A1%3Bs%3A32%3A%22k2NsfI3MCpfMtu_lIdwucXGDqglRnKLq%22%3B%7D; _csrf-backend=3d4618a63642f4a787a98260ab989f539a7bf170d637ee052c2831f9151fba19a%3A2%3A%7Bi%3A0%3Bs%3A13%3A%22_csrf-backend%22%3Bi%3A1%3Bs%3A32%3A%22fJWHCMl91a9-_oN_VZEAvxPvNCzd1iYo%22%3B%7D; advanced-ctms-api=o564h84tqrpnhvn9p9k2v9si7r; advanced-frontend-web=evf9hlrcca64078arvo6mbkbt1; csrf=43KcKEeDJDwBF7Xw8xmWrHpG8bhArkQn; advanced-frontend-api=o5oea55lgfvq15je1tn5pvnnbb; i_like_gitea=eac81993543b0a60; lang=zh-CN; tencent=false; advanced-backend=2mu9c3ngiqjgb4l1g2l007gdpr; b17e34166755bd29bbc2ad7668dfa9f3=3a0d3195-64bc-4df4-8ff8-68f40cb718de.VY7_pedTrOQNaNOwTOYZ6hyAULc'
'HTTP_REFERER' => 'http://11.22.33.48:1002/fm_admin_453_test.php/'
'HTTP_CONNECTION' => 'keep-alive'
'HTTP_DNT' => '1'
'HTTP_ACCEPT_ENCODING' => 'gzip, deflate'
'HTTP_ACCEPT_LANGUAGE' => 'zh-CN,en-US;q=0.7,en;q=0.3'
'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:140.0) Gecko/20100101 Firefox/140.0'
'HTTP_HOST' => '11.22.33.48:1002'
'PATH_INFO' => '/adminer/list.hi'
'REDIRECT_STATUS' => '200'
'SERVER_NAME' => 'saas.localhost'
'SERVER_PORT' => '1002'
'SERVER_ADDR' => '11.22.33.48'
'REMOTE_PORT' => '56105'
'REMOTE_ADDR' => '11.22.33.2'
'SERVER_SOFTWARE' => 'nginx/1.24.0'
'GATEWAY_INTERFACE' => 'CGI/1.1'
'REQUEST_SCHEME' => 'http'
'SERVER_PROTOCOL' => 'HTTP/1.1'
'DOCUMENT_ROOT' => '/media/psf/localhost/yii'
'DOCUMENT_URI' => '/fm_admin_453_test.php/adminer/list.hi'
'REQUEST_URI' => '/fm_admin_453_test.php/adminer/list.hi'
'SCRIPT_NAME' => '/fm_admin_453_test.php'
'CONTENT_LENGTH' => ''
'CONTENT_TYPE' => ''
'REQUEST_METHOD' => 'GET'
'QUERY_STRING' => ''
'SCRIPT_FILENAME' => '/media/psf/localhost/yii/fm_admin_453_test.php'
'FCGI_ROLE' => 'RESPONDER'
'PHP_SELF' => '/fm_admin_453_test.php/adminer/list.hi'
'REQUEST_TIME_FLOAT' => 1748492888.3485
'REQUEST_TIME' => 1748492888
]
2025-05-29 12:28:14 [11.22.33.2][1][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
in /media/psf/localhost/yii/admins/views/layouts/main.php:79
in /media/psf/localhost/yii/admins/controllers/IndexController.php:56
2025-05-29 12:28:14 [11.22.33.2][1][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
in /media/psf/localhost/yii/admins/views/layouts/main.php:79
in /media/psf/localhost/yii/admins/controllers/IndexController.php:56
2025-05-29 12:28:14 [11.22.33.2][1][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:28:14 [11.22.33.2][1][-][warning][yii\debug\Module::checkAccess] Access to debugger is denied due to IP address restriction. The requesting IP address is 11.22.33.2
2025-05-29 12:28:14 [11.22.33.2][1][-][info][application] $_GET = []
$_POST = []
$_FILES = []
$_COOKIE = [
'PHPSESSID' => '0egqk0f8a5me52erj7ijh8q82s'
'_csrf-frontend' => 'd6f914521f30ce8e7b76fa0c9dac185af0cccbd2cf65441db5d0f6bb626c878ba:2:{i:0;s:14:\"_csrf-frontend\";i:1;s:32:\"k2NsfI3MCpfMtu_lIdwucXGDqglRnKLq\";}'
'_csrf-backend' => '3d4618a63642f4a787a98260ab989f539a7bf170d637ee052c2831f9151fba19a:2:{i:0;s:13:\"_csrf-backend\";i:1;s:32:\"fJWHCMl91a9-_oN_VZEAvxPvNCzd1iYo\";}'
'advanced-ctms-api' => 'o564h84tqrpnhvn9p9k2v9si7r'
'advanced-frontend-web' => 'evf9hlrcca64078arvo6mbkbt1'
'csrf' => '43KcKEeDJDwBF7Xw8xmWrHpG8bhArkQn'
'advanced-frontend-api' => 'o5oea55lgfvq15je1tn5pvnnbb'
'i_like_gitea' => 'eac81993543b0a60'
'lang' => 'zh-CN'
'tencent' => 'false'
'advanced-backend' => '2mu9c3ngiqjgb4l1g2l007gdpr'
'b17e34166755bd29bbc2ad7668dfa9f3' => '3a0d3195-64bc-4df4-8ff8-68f40cb718de.VY7_pedTrOQNaNOwTOYZ6hyAULc'
]
$_SESSION = [
'__flash' => []
'__returnUrl' => 'http://11.22.33.48:1002/fm_admin_453_test.php/'
'__id' => 1
'__authKey' => 'Ar8SbMSghjsg1N7o3mOFU6UZGWQxz2Nc'
]
$_SERVER = [
'USER' => 'www'
'HOME' => '/home/www'
'HTTP_PRIORITY' => 'u=4'
'HTTP_UPGRADE_INSECURE_REQUESTS' => '1'
'HTTP_COOKIE' => 'PHPSESSID=0egqk0f8a5me52erj7ijh8q82s; _csrf-frontend=d6f914521f30ce8e7b76fa0c9dac185af0cccbd2cf65441db5d0f6bb626c878ba%3A2%3A%7Bi%3A0%3Bs%3A14%3A%22_csrf-frontend%22%3Bi%3A1%3Bs%3A32%3A%22k2NsfI3MCpfMtu_lIdwucXGDqglRnKLq%22%3B%7D; _csrf-backend=3d4618a63642f4a787a98260ab989f539a7bf170d637ee052c2831f9151fba19a%3A2%3A%7Bi%3A0%3Bs%3A13%3A%22_csrf-backend%22%3Bi%3A1%3Bs%3A32%3A%22fJWHCMl91a9-_oN_VZEAvxPvNCzd1iYo%22%3B%7D; advanced-ctms-api=o564h84tqrpnhvn9p9k2v9si7r; advanced-frontend-web=evf9hlrcca64078arvo6mbkbt1; csrf=43KcKEeDJDwBF7Xw8xmWrHpG8bhArkQn; advanced-frontend-api=o5oea55lgfvq15je1tn5pvnnbb; i_like_gitea=eac81993543b0a60; lang=zh-CN; tencent=false; advanced-backend=2mu9c3ngiqjgb4l1g2l007gdpr; b17e34166755bd29bbc2ad7668dfa9f3=3a0d3195-64bc-4df4-8ff8-68f40cb718de.VY7_pedTrOQNaNOwTOYZ6hyAULc'
'HTTP_REFERER' => 'http://11.22.33.48:1002/fm_admin_453_test.php/'
'HTTP_CONNECTION' => 'keep-alive'
'HTTP_DNT' => '1'
'HTTP_ACCEPT_ENCODING' => 'gzip, deflate'
'HTTP_ACCEPT_LANGUAGE' => 'zh-CN,en-US;q=0.7,en;q=0.3'
'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:140.0) Gecko/20100101 Firefox/140.0'
'HTTP_HOST' => '11.22.33.48:1002'
'PATH_INFO' => '/index/welcome.hi'
'REDIRECT_STATUS' => '200'
'SERVER_NAME' => 'saas.localhost'
'SERVER_PORT' => '1002'
'SERVER_ADDR' => '11.22.33.48'
'REMOTE_PORT' => '56105'
'REMOTE_ADDR' => '11.22.33.2'
'SERVER_SOFTWARE' => 'nginx/1.24.0'
'GATEWAY_INTERFACE' => 'CGI/1.1'
'REQUEST_SCHEME' => 'http'
'SERVER_PROTOCOL' => 'HTTP/1.1'
'DOCUMENT_ROOT' => '/media/psf/localhost/yii'
'DOCUMENT_URI' => '/fm_admin_453_test.php/index/welcome.hi'
'REQUEST_URI' => '/fm_admin_453_test.php/index/welcome.hi'
'SCRIPT_NAME' => '/fm_admin_453_test.php'
'CONTENT_LENGTH' => ''
'CONTENT_TYPE' => ''
'REQUEST_METHOD' => 'GET'
'QUERY_STRING' => ''
'SCRIPT_FILENAME' => '/media/psf/localhost/yii/fm_admin_453_test.php'
'FCGI_ROLE' => 'RESPONDER'
'PHP_SELF' => '/fm_admin_453_test.php/index/welcome.hi'
'REQUEST_TIME_FLOAT' => 1748492894.0191
'REQUEST_TIME' => 1748492894
]

View File

@ -1,11 +1,11 @@
<?php
/* @var $this yii\web\View */
/* @var $form yii\bootstrap\ActiveForm */
/* @var $form yii\bootstrap5\ActiveForm */
/* @var $model \common\models\LoginForm */
use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
use yii\bootstrap5\ActiveForm;
$this->title = Yii::t('backend' ,'System Name');
$keywords = '';

View File

@ -231,6 +231,10 @@ class Member extends ActiveRecord implements IdentityInterface
$this->password_reset_token = null;
}
public function lenthUsername(){
return 32;
}
// //获取所有用户
// public function get_all_user(){
// $where='';

View File

@ -1,14 +1,8 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-04-15 20:22:03
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T09:02:06+08:00
# @Copyright: www.hiluker.cn
//前端用户入口
namespace api\controllers\client\v1;
namespace api\controllers\client\v1;
use Yii;
use yii\web\Controller;

View File

@ -1,14 +1,8 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-04-15 20:22:03
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T08:59:44+08:00
# @Copyright: www.hiluker.cn
//前端普通用户入口
namespace api\controllers\client\v1;
namespace api\controllers\client\v1;
use Yii;
use common\models\Fans; //from字段为ctms的数据

View File

@ -0,0 +1,88 @@
<?php
namespace api\controllers\client\v1;
use Yii;
use yii\data\Pagination;
use yii\web\UploadedFile;
use yii\helpers\Url;
use common\models\CAttachment;
class ImageController extends Common
{
public function beforeAction($action)
{
if (!$this->pid) {
$this->result('您正使用本系统内部接口,禁止非法链接使用!');
}
return parent::beforeAction($action);
}
public function actionIndex()
{
$apis = [
'list'=>'图片列表',
];
$this->result('您正使用CMTS-CLIENT图库管理接口', $apis, 200);
}
public function actionList()
{
$siteId =$this->site_id;
$pid = $this->pid;
$model = new CAttachment();
$search = $where = [];
$where[] = 'and';
$where[] = ['=','status_code',1];
$where[] = ['=','type',0];
$where[] = ['=','siteid',$siteId];
$where[] = ['=','pid',$pid];
$post = $this->postdata;
$search = $post['search'];
if ($search) {
if ($search['create_m']) {
$start = strtotime($search['create_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','create_at',$start,$end];
} elseif (!empty($search['create_after']) && !empty($search['create_before'])) {
$start = strtotime($search['create_after']);
$end = strtotime($search['create_before']);
$where[] = ['between','create_at',$start,$end];
} elseif (!empty($search['create_after'])) {
$start = strtotime($search['create_after']);
$where[] = ['>=','create_at',$start];
} elseif (!empty($search['create_before'])) {
$end = strtotime($search['create_before']);
$where[] = ['<=','create_at',$end];
}
if ($search['title']) {
$where[] = ['LIKE','title',$search['title']];
}
}
//分页
$orderby = ['id' => SORT_DESC];
$Attachment = new CAttachment();
$list = $Attachment->getData($model, $where, $orderby);
$pager = $Attachment->getPagination();
//附件网址前缀
$src = Url::base(true)."/../../upload"; //在网站根目录下使用upload/pics目录;适合使用yii框架主目录入口而非绑定子域名的情形
if ($_SERVER['DOCUMENT_ROOT'].'/upload' != Yii::getAlias("@upload")) {
// $src = Url::toRoute(['attach/index','img'=>'']); //换用网络加载转换的方式-反应慢
$src = Yii::$app->params['attachSrc'].Yii::$app->params['attachDir'];
}
$callback = $_GET['callback'] ?? 'thumb';
$data = [
'list'=>$list,
'pager' => $pager,
'src'=>$src,
'callback'=>$callback
];
$this->result('', $data, 200);
}
}

View File

@ -1,16 +1,8 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-05-13T09:20:03+08:00
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T08:59:48+08:00
# @Copyright: www.hiluker.cn
//主入口页
namespace api\controllers\client\v1;
namespace api\controllers\client\v1;
use Yii;
use yii\data\Pagination;

View File

@ -0,0 +1,707 @@
<?php
namespace api\controllers\client\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 JiaocheController extends Common
{
public function beforeAction($action)
{
if (!$this->pid) {
$this->result('您正使用本系统内部接口,禁止非法链接使用!');
}
return parent::beforeAction($action);
}
public function actionIndex()
{
$apis = [
'list'=>'搜索运单',
'detail'=>'运单详情',
'create'=>'创建运单'
];
$this->result('您正使用CMTS-CLIENT交车单管理接口', $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 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);
} elseif ($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);
} elseif ($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($contactModel2)
{
$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
$mid = isset($post['mid']) ? (int)$post['mid'] : 0; //11是方孟
$data['create_by'] = $mid;
$data['is_cwqr'] = 0; //修改财务确认状态为待确认
$data['status_code'] = 1; //订单处于创建待审核状态
//关联运单前台用户fans表
$fid = $this->user_id;
$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'] : 1; //1是宫雪
$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']);
}
//订单列表
private function search()
{
$pid = $this->pid;
$return = [];
$model = new AcOrder();
$where = [];
$where[]='and';
$where[] = ['=','pid',$pid];
$post = $this->postdata;
$search = $post['search'] ?? [];
//预置搜索条件,只允许查询与自己完全相关的订单
$search['phone'] = $this->user_info->mobile;
$orwhere = ['or', ['LIKE', 'sender_mobiles', $search['phone']], ['LIKE', 'receiver_mobiles', $search['phone']]];
//车牌号使用完整精准搜索皖A88888
$CarModel = new AcCar();
if (isset($search['carno']) && !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']];
}
$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['start_province'] = isset($search['start_province']) ? trim($search['start_province']) : '';
if (!empty($search['start_province'])) {
$where[] = ['=','start_province',$search['start_province']];
}
$search['start_city'] = isset($search['start_city']) ? trim($search['start_city']) : '';
if (!empty($search['start_city'])) {
$where[] = ['LIKE','start_city',$search['start_city']];
}
$search['aim_province'] = isset($search['aim_province']) ? trim($search['aim_province']) : '';
if (!empty($search['aim_province'])) {
$where[] = ['=','aim_province',$search['aim_province']];
}
$search['aim_city'] = isset($search['aim_city']) ? trim($search['aim_city']) : '';
if (!empty($search['aim_city'])) {
$where[] = ['LIKE','aim_city',$search['aim_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']];
} elseif (!empty($search['wtdw'])) {
$where[] = ['LIKE','wtdw',$search['wtdw']];
} elseif (!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];
}
//按指定时段筛选
elseif (!empty($search['sign_after']) && !empty($search['sign_before'])) {
$start = strtotime($search['sign_after']);
$end = strtotime($search['sign_before']);
$where[] = ['between','sign_date',$start,$end];
}
//按指定时间临界点筛选(以不早于为优先筛选条件)
elseif (!empty($search['sign_after'])) {
$start = strtotime($search['sign_after']);
$where[] = ['>=','sign_date',$start];
} elseif (!empty($search['sign_before'])) {
$end = strtotime($search['sign_before']);
$where[] = ['<=','sign_date',$end];
}
//带序列号搜索TBD后期考虑改为精准唯一搜索
if (isset($search['sn']) && $search['sn'] != 'undefined' && $search['sn']) {
$where[] = ['LIKE','sn',$search['sn']];
}
$deleted = 0;
$where[]=['=','deleted',$deleted];
$where[]=['=','is_turnover',1]; //交车单
$page = $this->page;
$pageSize = $this->pageSize;
$data = $model->find()->where($where)->andwhere($orwhere);
$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']);
}
}

View File

@ -1,13 +1,6 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2024-08-03T15:34:01+08:00
# @Email: 1280880631@qq.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T09:00:02+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\client\v1;
namespace api\controllers\client\v1;
use addons\models\AcNews;
use addons\models\AcNewsCat;

View File

@ -1,12 +1,5 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2024-08-03T16:38:33+08:00
# @Email: 1280880631@qq.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T08:59:58+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\client\v1;
use addons\models\AcNewsCat;

View File

@ -1,16 +1,9 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2024-08-02T01:08:31+08:00
# @Email: 1280880631@qq.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T09:00:06+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\client\v1;
namespace api\controllers\client\v1;
use addons\models\AcNotice;
use yii\data\Pagination;
use addons\models\AcNotice;
use yii\data\Pagination;
class NoticeController extends Common
{

View File

@ -0,0 +1,59 @@
<?php
namespace api\controllers\client\v1;
use Yii;
use yii\data\Pagination;
use vendor\huawei\obsclient\Hwobs;
use vendor\huawei\obsclient\TemporarySignature;
use vendor\huawei\obsclient\PostObject;
class ObsController extends Common
{
public function actionIndex()
{
$apis = [
'getkey'=>'获取访问Key',
];
$this->result('您正使用CMTS系统-华为云OBS接口(尚未开启)', $apis, 200);
}
private function getconf()
{
return [
'id'=> 'ee124c5102064b83bccd2fdda53261cc', //账号ID
'ak'=> '1DYBXUNEPNCIEEQOGGAE',
'sk'=> '0VBI2xPlDB0NtqqVJv3hSFC8DY52G8OYPYNhncGK',
'area'=>'cn-south-1', //华南广州
'endpoint'=>'obs.cn-south-1.myhuaweicloud.com',
'bucketName'=>'hilu-ctms',
];
}
public function actionGetkey()
{
$params = $this->getconf();
$obs = new Hwobs($ak=$params['ak'], $sk=$params['sk'], $endpoint=$params['endpoint'], $t1=30, $t2=10);
}
public function actionGeturl()
{
$params = $this->getconf();
$obs = new TemporarySignature($ak=$params['ak'], $sk=$params['sk'], $endpoint=$params['endpoint'], $t1=30, $t2=10);
$res = $obs->UploadUrl($params['bucketName']);
// $res = $obs->getCors($params['bucketName']);
var_dump($res);
// $this->result('获取上传网址成功!', $res, 200);
}
public function actionGetform()
{
$params = $this->getconf();
$obs = new PostObject($ak=$params['ak'], $sk=$params['sk'], $endpoint=$params['endpoint'], $t1=30, $t2=10);
$obs->init('obs');
$res = $obs->claimPost('hilu-ctms', 'file.jpg');
$url = 'https://'.$params['bucketName'].".".$params['endpoint'];
$res['up_url'] = $url;
$this->result('获取OBS上传准备信息', $res, 200);
}
}

View File

@ -1,13 +1,6 @@
<?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:00:15+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\client\v1;
namespace api\controllers\client\v1;
use Yii;
use yii\data\Pagination;

View File

@ -1,13 +1,6 @@
<?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:00:10+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\client\v1;
namespace api\controllers\client\v1;
use Yii;
use yii\data\Pagination;

View File

@ -1,13 +1,6 @@
<?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:00:19+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\client\v1;
namespace api\controllers\client\v1;
use addons\models\AcEmployee;
use addons\models\AcOrderPre;

View File

@ -1,13 +1,6 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-05-22T07:38:52+08:00
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T08:53:58+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\client\v1;
namespace api\controllers\client\v1;
use Yii;
use vendor\aliyun\dysms\Sms;

View File

@ -0,0 +1,87 @@
<?php
namespace api\controllers\client\v1;
use Yii;
use yii\data\Pagination;
use addons\models\AcStore;
class StoreController extends Common
{
//主界面
public function actionIndex()
{
$apis = [
'list'=>'网点清单',
'detail'=>'网点详情'
];
$this->result('您正使用CMTS系统网点管理接口', $apis, 200);
}
public function actionList()
{
$pid = $this->pid;
$model = new AcStore();
$where = [];
$where['pid'] = $pid;
$citys = Yii::$app->params['citys'];
$post = $this->postdata;
$where['deleted'] = 0;
$where['status_code'] = 1;
$data = $model->find()->where($where);
$page = $this->page;
$pageSize = $this->pageSize;
$pages = new Pagination(['totalCount' =>$data->count(), 'pageSize' => $pageSize]);
$pages->setPage($page-1, true); //设置分页的当前页面值
$res = $data->offset($pages->offset)->limit($pages->limit)->all();
if (!$res) {
$this->result('没有符合条件的结果');
}
$stores = [];
foreach ($res as $k=>$v) {
$stores[$v->id] = $v->toArray();
}
$return = [];
$return['data'] = [
'stores'=>$stores,
'citys'=>$citys,
];
$return['total'] = $data->count();
$return['page'] = $this->page;
$this->result('网点列表', $return, 200);
}
public function actionSelect()
{
$model = new AcStore();
$where = [];
$where['pid'] = Yii::$app->session->get('pid');
$citys = Yii::$app->params['citys'];
$post = Yii::$app->request->post();
$where['deleted'] = 0;
$where['status_code'] = 1;
$data = $model->find()->where($where);
$search = [];
$search['title'] = isset($post['title']) ? trim(htmlspecialchars_decode($post['title'])) : '';
if (!empty($search['title'])) {
$where2 = ['LIKE','title',$search['title']];
$data = $data->andwhere($where2);
}
$pages = new Pagination(['totalCount' =>$data->count(), 'pageSize' => '20']);
$res = $data->offset($pages->offset)->limit($pages->limit)->all();
$status = ['0'=>'隐藏','1'=>'正常'];
$callback = !empty(Yii::$app->request->get('callback')) ? Yii::$app->request->get('callback') : 'store';
return $this->render('select', [
'stores'=>$res,
'pager' => $pages,
'citys'=>$citys,
'status'=>$status,
'search'=>$search,
'callback'=>$callback
]);
}
}

View File

@ -0,0 +1,373 @@
<?php
namespace api\controllers\client\v1;
use Yii;
use yii\data\Pagination;
use yii\web\UploadedFile;
use common\models\CAttachment;
use backend\controllers\Common;
class UploadController extends Common
{
public function beforeAction($action)
{
if (!$this->pid) {
$this->result('您正使用本系统内部接口,禁止非法链接使用!');
}
return parent::beforeAction($action);
}
public function actionIndex()
{
$apis = [
'image'=>'上传图片(单传)',
'images'=>'上传图片(多传)',
];
$this->result('您正使用CMTS系统文件上传接口', $apis, 200);
}
public function actionImage()
{
$post = $this->postdata;
$model = new CAttachment();
$file = UploadedFile::getInstanceByName('file');
//{error: 0
// name: "e8.png"
// size: 5362
// tempName: "/Applications/XAMPP/xamppfiles/temp/phpG8vgnV"
// type: "image/png"}
// 构建目录
$attachDir = Yii::getAlias('@upload'); //附件所在目录
$targetDir = "/pics"; //开始构建目标转存目录
if (!file_exists($attachDir . $targetDir)) {
@mkdir($attachDir . $targetDir);
}
$siteId = $this->site_id;
$targetDir .= '/'.$siteId;
if (!file_exists($attachDir . $targetDir)) {
@mkdir($attachDir . $targetDir);
}
$pid = $this->pid;
$targetDir .= '/'.$pid;
if (!file_exists($attachDir . $targetDir)) {
@mkdir($attachDir . $targetDir);
}
$timeDir = date('Ym');
$targetDir .= "/".$timeDir;
if (!file_exists($attachDir . $targetDir)) {
@mkdir($attachDir . $targetDir);
}
//处理请求的文件信息
$title = isset($file->name) ? $file->name : md5(TIMESTAMP.rand(1, 99)).'.jpg'; //文件原名
//取后缀名
$_filetype = explode('/', $file->type);
$suffix = strtolower($_filetype[1]);
//重新命名以便转存
$newName = date('dHis', TIMESTAMP).'_'.md5($title);
$newFile = $attachDir . $targetDir."/".$newName.".".$suffix;
$res = $file->saveAs($newFile, true);
//文件入库
//POST数据处理
$member_id = 0;
if (isset($post['mid']) && (int)$post['mid']>0) {
$member_id = (int)$post['mid'];
}
$options = '';
if (isset($post['options'])) {
$options = json_encode($options, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT);
}
$model = new CAttachment();
$model->siteid = $siteId;
$model->pid = $this->pid;
$model->uid = $this->user_id;
$model->mid = $member_id;
$model->type = 0; //附件类型0图片1视频2音频3表格4文档5PPT888证书999其他
$model->status_code = 1;
$model->title = $title;
$model->filesize = $file->size;
$model->route = $targetDir."/".$newName.".".$suffix;
$model->options = $options;
$model->update_at = $model->create_at = time();
$model->save();
$id = $model->attributes['id']; //获取插入后id
$this->result('上传成功', ['id'=>$id,'path'=>$model->route], 200);
}
public function actionImages()
{
$post = $this->postdata;
$model = new CAttachment();
$files = UploadedFile::getInstancesByName('files');
// 构建目录
$attachDir = Yii::getAlias('@upload'); //附件所在目录
$targetDir = "/pics"; //开始构建目标转存目录
if (!file_exists($attachDir . $targetDir)) {
@mkdir($attachDir . $targetDir);
}
$siteId = $this->site_id;
$targetDir .= '/'.$siteId;
if (!file_exists($attachDir . $targetDir)) {
@mkdir($attachDir . $targetDir);
}
$pid = $this->pid;
$targetDir .= '/'.$pid;
if (!file_exists($attachDir . $targetDir)) {
@mkdir($attachDir . $targetDir);
}
$timeDir = date('Ym');
$targetDir .= "/".$timeDir;
if (!file_exists($attachDir . $targetDir)) {
@mkdir($attachDir . $targetDir);
}
//处理请求的文件信息
//POST数据处理
$member_id = 0;
if (isset($post['mid']) && (int)$post['mid']>0) {
$member_id = (int)$post['mid'];
}
$options = '';
if (isset($post['options'])) {
$options = json_encode($options, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT);
}
$attachModel = new CAttachment();
$ids = $paths = $datas = [];
foreach ($files as $file) {
$tkey = microtime();
$title = isset($file->name) ? $file->name : md5($tkey.rand(1, 99)).'.jpg'; //文件原名
//取后缀名
$_filetype = explode('/', $file->type);
$suffix = strtolower($_filetype[1]);
//重新命名以便转存
$newName = date('dHis', TIMESTAMP).'_'.md5($title);
$newFile = $attachDir . $targetDir."/".$newName.".".$suffix;
$res = $file->saveAs($newFile, true);
//文件入库
$model = clone $attachModel;
$model->siteid = $siteId;
$model->pid = $this->pid;
$model->uid = $this->user_id;
$model->mid = $member_id;
$model->type = 0; //附件类型0图片1视频2音频3表格4文档5PPT888证书999其他
$model->status_code = 1;
$model->title = $title;
$model->filesize = $file->size;
$model->route = $targetDir."/".$newName.".".$suffix;
$model->options = $options;
$model->update_at = $model->create_at = time();
$model->save();
$id = $model->attributes['id']; //获取插入后id
$ids[$id] = $id;
$paths[$id] = $model->route;
}
$this->result('上传成功', ['ids'=>$ids,'paths'=>$paths], 200);
}
public function save_image()
{
$post = Yii::$app->request->post();
$model = new CAttachment();
$files = UploadedFile::getInstanceByName('files');
//{error: 0
// name: "e8.png"
// size: 5362
// tempName: "/Applications/XAMPP/xamppfiles/temp/phpG8vgnV"
// type: "image/png"}
// 构建目录
$attachDir = Yii::getAlias('@upload'); //附件所在目录
$targetDir = "/pics"; //开始构建目标转存目录
if (!file_exists($attachDir . $targetDir)) {
@mkdir($attachDir . $targetDir);
}
$siteId = $this->site_id;
$targetDir .= '/'.$siteId;
if (!file_exists($attachDir . $targetDir)) {
@mkdir($attachDir . $targetDir);
}
$pid = $this->pid;
$targetDir .= '/'.$pid;
if (!file_exists($attachDir . $targetDir)) {
@mkdir($attachDir . $targetDir);
}
$timeDir = date('Ym');
$targetDir .= "/".$timeDir;
if (!file_exists($attachDir . $targetDir)) {
@mkdir($attachDir . $targetDir);
}
//处理请求的文件信息
$title = isset($file->name) ? $file->name : md5(TIMESTAMP.rand(1, 99)).'.jpg'; //文件原名
//取后缀名
$_filetype = explode('/', $file->type);
$suffix = strtolower($_filetype[1]);
//重新命名以便转存
$newName = date('dHis', TIMESTAMP).'_'.md5($title);
$newFile = $attachDir . $targetDir."/".$newName.".".$suffix;
$res = $file->saveAs($newFile, true);
//文件入库
//POST数据处理
$post = Yii::$app->request->post();
$member_id = 0;
if (isset($post['mid']) && (int)$post['mid']>0) {
$member_id = (int)$post['mid'];
}
$options = '';
if (isset($post['options'])) {
$options = json_encode($options, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT);
}
$model = new CAttachment();
$model->siteid = $siteId;
$model->pid = $this->pid;
$model->uid = $this->user_id;
$model->mid = $member_id;
$model->type = 0; //附件类型0图片1视频2音频3表格4文档5PPT888证书999其他
$model->status_code = 1;
$model->title = $title;
$model->filesize = $file->size;
$model->route = $targetDir."/".$newName.".".$suffix;
$model->options = $options;
$model->update_at = $model->create_at = time();
$model->save();
$id = $model->attributes['id']; //获取插入后id
$this->result('上传成功', ['id'=>$id,'path'=>$model->route], 200);
}
}
/*多图上传时的数据示例
array(7) {
[0]=>
object(yii\web\UploadedFile)#60 (6) {
["name"]=>
string(18) "file-1652511550195"
["tempName"]=>
string(45) "/Applications/XAMPP/xamppfiles/temp/phpJvR1FV"
["type"]=>
string(9) "text/html"
["size"]=>
int(425)
["error"]=>
int(0)
["_tempResource":"yii\web\UploadedFile":private]=>
array(0) {
}
}
[1]=>
object(yii\web\UploadedFile)#62 (6) {
["name"]=>
string(18) "file-1652511550195"
["tempName"]=>
string(45) "/Applications/XAMPP/xamppfiles/temp/phpzIuYVB"
["type"]=>
string(9) "text/html"
["size"]=>
int(425)
["error"]=>
int(0)
["_tempResource":"yii\web\UploadedFile":private]=>
array(0) {
}
}
[2]=>
object(yii\web\UploadedFile)#63 (6) {
["name"]=>
string(18) "file-1652511550195"
["tempName"]=>
string(45) "/Applications/XAMPP/xamppfiles/temp/phpUHXR4W"
["type"]=>
string(9) "text/html"
["size"]=>
int(425)
["error"]=>
int(0)
["_tempResource":"yii\web\UploadedFile":private]=>
array(0) {
}
}
[3]=>
object(yii\web\UploadedFile)#64 (6) {
["name"]=>
string(18) "file-1652511550195"
["tempName"]=>
string(45) "/Applications/XAMPP/xamppfiles/temp/phpEa5Q93"
["type"]=>
string(9) "text/html"
["size"]=>
int(425)
["error"]=>
int(0)
["_tempResource":"yii\web\UploadedFile":private]=>
array(0) {
}
}
[4]=>
object(yii\web\UploadedFile)#65 (6) {
["name"]=>
string(18) "file-1652511550195"
["tempName"]=>
string(45) "/Applications/XAMPP/xamppfiles/temp/phpEDfHIr"
["type"]=>
string(9) "text/html"
["size"]=>
int(425)
["error"]=>
int(0)
["_tempResource":"yii\web\UploadedFile":private]=>
array(0) {
}
}
[5]=>
object(yii\web\UploadedFile)#66 (6) {
["name"]=>
string(18) "file-1652511550195"
["tempName"]=>
string(45) "/Applications/XAMPP/xamppfiles/temp/phpiLqBVZ"
["type"]=>
string(9) "text/html"
["size"]=>
int(425)
["error"]=>
int(0)
["_tempResource":"yii\web\UploadedFile":private]=>
array(0) {
}
}
[6]=>
object(yii\web\UploadedFile)#67 (6) {
["name"]=>
string(18) "file-1652511550195"
["tempName"]=>
string(45) "/Applications/XAMPP/xamppfiles/temp/php5rqzIk"
["type"]=>
string(9) "text/html"
["size"]=>
int(425)
["error"]=>
int(0)
["_tempResource":"yii\web\UploadedFile":private]=>
array(0) {
}
}
}
*/

View File

@ -0,0 +1,90 @@
<?php
namespace api\controllers\client\v1;
use Yii;
use yii\data\Pagination;
use addons\models\AcWeituoren;
use common\models\Member as User;
use addons\models\AcUserExt;
class WeituorenController extends Common
{
public function beforeAction($action)
{
if (!$this->pid) {
// $this->result('您正使用本系统内部接口,禁止非法链接使用!');
}
return parent::beforeAction($action);
}
public function actionIndex()
{
$apis = [
'list'=>'搜索委托单位清单',
'detail'=>'委托单位详情'
];
$this->result('您正使用CMTS系统委托单位管理接口', $apis, 200);
}
//列表
public function actionList()
{
$pid = $this->pid;
$return = [];
$model = new AcWeituoren();
$where = $where2 = [];
$where2[]='and';
$where['pid'] = $pid;
$post = $this->postdata;
$search = isset($post['search']) ? $post['search'] : null;
if (!$search) {
$search = [];
}
$search['title'] = isset($search['title']) ? trim(htmlspecialchars_decode($search['title'])) : '';
if (!empty($search['title'])) {
$where2[] = ['LIKE','company',$search['title']];
}
$where['deleted'] = 0;
$data = $model->find()->asArray()->where($where); //asArray() 放在find后可让查询结果以数组形式呈现
if ($search['title']) {
$data = $data->andwhere($where2);
}
$page = $this->page;
$pageSize = $this->pageSize;
$pages = new Pagination(['totalCount' =>$data->count(), 'pageSize' => $pageSize]);
$pages->setPage($page-1, true); //设置分页的当前页面值
$_orderby = 'orderby DESC,id ASC';
$res = $data->offset($pages->offset)->limit($pages->limit)->orderby($_orderby)->all();
if (!$res) {
$this->result('没有符合条件的结果');
}
$status = Yii::$app->params['CommonStatus'];
$return['code'] = 200;
$return['msg'] = '委托单位查询成功!';
$return['data']= ['total'=>$data->count(),
'data'=>[
'weituoren' => $res
],
'page'=>$this->page];
exit(json_encode($return, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT));
}
public function actionDetail()
{
$pid = $this->pid;
$post = $this->postdata;
$id = isset($post['id']) ? $post['id'] : 0;
if ($id<=0) {
$this->result('查询参数错误!');
}
$model = new AcWeituoren();
$weituo = $model->findOne($id);
$detail = $weituo->toArray();
$this->result('查询成功!', $detail, 200);
}
}

View File

@ -1,12 +1,4 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-05-22T07:27:54+08:00
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T09:17:02+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\gm\v1;
use Yii;
@ -17,38 +9,85 @@
use addons\models\AcAlbumPics;
use addons\models\AcAlbumVersion;
//TD:未完成
class AlbumsController extends Common
{
//主界面
public function beforeAction($action)
{
if (!$this->pid) {
$this->result('您正使用本系统内部接口,禁止非法链接使用!');
}
return parent::beforeAction($action);
}
public function actionIndex()
{
global $_HI, $_FM;
return $this->render('../layouts/dev', []);
$apis = [
'list'=>'相册列表',
'detail'=>'详情',
'add'=>'添加',
'edit'=>'编辑',
'delete'=>'删除',
'show'=>'显示',
'hide'=>'隐藏'
];
$this->result('您正使用CMTS-GM系统验车相册管理接口', $apis, 200);
}
//相册列表
public function actionList()
{
return $this->render('../layouts/dev');
global $_HI, $_FM;
$pid = Yii::$app->session->get('pid');
$session = Yii::$app->session;
$model = new AcAlbums();
$where = [];
$where[] = 'and';
$where[] = ['=', 'pid', $pid];
$post = Yii::$app->request->post();
$get = Yii::$app->request->get();
$searchSession = 'acalbums::search';
if (isset($post['search'])) {
$search = $post['search'];
$session->set($searchSession, $search);
} else if ($session->get($searchSession)) {
$search = $session->get($searchSession);
$s = $this->search();
$res = $s['res'];
if (!$res) {
$this->result('没有查询到相应的数据!', [], 0);
}
$data = $s['query'];
$this->showAlbums($res, $data);
}
public function actionDetail(){
$pid = $this->pid;
$post = $this->postdata;
$id = isset($post['id']) ? $post['id'] : 0;
if ($id <= 0) {
$this->result('查询参数错误!');
}
$model = new AcAlbums();
$detail = $model->findOne($id)->toArray();
if(!$detail) $this->result('未查询到相应数据');
$this->result('查询成功!', $detail, 200);
}
public function actionGetStatus(){
$status = Yii::$app->params['AlbumStatus'];
$this->result('获取相册状态字典', $status, 200);
}
public function actionAdd()
{
}
/*编辑相册*/
public function actionEdit()
{
}
private function search(){
$pid = $this->pid;
$return = [];
$model = new AcAlbums();
$where = [];
$where[]='and';
$where[] = ['=','pid',$pid];
$post = $this->postdata;
$search = $post['search'] ?? [];
//关联指定车辆
$search['car_id'] = isset($search['car_id']) ? (int)$search['car_id'] : '';
$CarModel = new AcCar();
if (empty($search['car_id'])) {
@ -60,356 +99,208 @@
$search['car_title'] = isset($car->title) ? $car->title : '';
}
//关联指定手机
$search['phone'] = isset($search['phone']) ? trim($search['phone']) : '';
if (!empty($search['phone'])) {
$where[] = ['or', ['LIKE', 'phone1_1', $search['phone']], ['LIKE', 'phone1_2', $search['phone']], ['LIKE', 'phone2_1', $search['phone']], ['LIKE', 'phone2_2', $search['phone']]];
}
//排除软删数据
$deleted = 0;
if (isset($_GET['deleted'])) {
$deleted = isset($_GET['deleted']) ? ((int)$_GET['deleted'] >= 0 ? 1 : 0) : 0;
}
$where[] = ['=', 'deleted', $deleted];
$page = $this->page;
$pageSize = $this->pageSize;
$data = $model->find()->where($where);
$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)->indexBy('id')->all();
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => '20']);
$res = $data->offset($pages->offset)->limit($pages->limit)->indexBy('id')->all();
$status = Yii::$app->params['AlbumStatus'];
$orders = [];
foreach ($res as $s) {
$s = $s->toArray();
$orders[$s['id']] = $s;
return ['res'=>$res,'qeury'=>$data];
}
return $this->render('list', [
'orders' => $orders,
'pager' => $pages,
'status' => $status,
'search' => $search
]);
}
//验新车
public function actionNewcar()
/*
* 数据更新前的预检查,返回对应关联数据
* 必须确保get与post数据中均包含需更新的数据id且一致
* */
private function preUpdate()
{
return $this->render('../layouts/dev');
$status = Yii::$app->params['AlbumStatus'];
$AcAlbum = new AcAlbums();
$AcAlbum->status_code = 0;
$detail = $AcAlbum->toArray();
return $this->render('modify', ['status' => $status, 'detail' => $detail]);
$id = (int)Yii::$app->request->get('id');
if(!$id) $this->result('请求错误未携带ID参数');
$post = $this->postdata;
if($post['id'] != $id) $this->result('传参id与请求数据不匹配',[],403);
$model = new AcAlbums();
$res = $model->findOne($id);
if(!$res) $this->result('未查询到相应数据',[],404);
if($res->pid != $this->pid) $this->result('非本平台数据,不允许操作',[],401);
return $res;
}
/*编辑相册*/
public function actionEdit()
/*
* 数据保存前的预检查(查重、参数校验等)
* 要保存的数据[],直接从post中取出
* @op操作类型add,edit……
* @detail, 编辑模式下,要修改的数据对象
* 校验机制:
* 编辑数据时必须用get方式传入参数id并与post进来的数据id进行比对只有一致时才能继续;
* 查重:禁止录入重复数据
* 返回:校验重组后的数据
* */
private function preSave($op,$detail=null)
{
return $this->render('../layouts/dev');
$pid = Yii::$app->session->get('pid');
$status = Yii::$app->params['OrderStatus'];
$post = Yii::$app->request->post();
$id = Yii::$app->request->get('id');
$AcOrder = new AcOrder();
$order = $AcOrder->findOne($id);
$detail = $order->toArray();
$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 User();
$user = $model->findOne($detail['from_mid']);
$model = new AcUserExt();
$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;
}
$op = Yii::$app->request->get('op');
$tpl = 'modify';
if ($op == 'print') {
$tpl = 'print';
$sn = '00000000000'; //11位
$sn = substr($sn, 0, 11 - strlen($id));
$sn .= $id;
$detail['sn'] = $sn;
}
return $this->render(
$tpl,
[
'status' => $status,
'detail' => $detail,
'store' => $store,
'employee' => $employee,
'id' => $id
]
);
}
/*相册详情*/
public function actionDetail()
{
$pid = Yii::$app->session->get('pid');
$status = Yii::$app->params['OrderStatus'];
$post = Yii::$app->request->post();
$id = Yii::$app->request->get('id');
$AcOrder = new AcOrder();
$order = $AcOrder->findOne($id);
$detail = $order->toArray();
$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 User();
$user = $model->findOne($detail['from_mid']);
$model = new AcUserExt();
$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;
return $this->render(
'detail',
[
'status' => $status,
'detail' => $detail,
'store' => $store,
'employee' => $employee,
'id' => $id
]
);
}
//站点验车
public function actionOrder()
{
return $this->render('../layouts/dev');
$post = Yii::$app->request->post();
$id = (int)$post['id'];
$pid = Yii::$app->session->get('pid');
$AcOrder = new AcOrder();
if ($id) {
$order = $AcOrder->findOne($id);
if ($order->create_by != Yii::$app->user->identity->id) {
//不允许修改非本人操作的表单
$return['msg'] = '您不是该运单的制单人,不允许进行修改!';
$return['errorcode'] = 404;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
}
//格式化数据 为空的项则不修改
$post = $this->postdata;
$data = [];
$_time = time();
$oid = (int)$post['order_id'] ?? 0;
//格式化数据
$_thumbs = $_logs = [];
//目标键=》POST键
$cols = ['start_province' => 'start_province', 'start_city' => 'start_city', 'aim_province' => 'aim_province', 'aim_city' => 'aim_city', 'signer' => 'signer', 'sender_name' => 'sender_name', 'sender_idcard' => 'sender_idcard', 'sender_mobiles' => 'sender_mobiles', 'receiver_name' => 'receiver_name', 'receiver_idcard' => 'receiver_idcard', 'receiver_mobiles' => 'receiver_mobiles', 'aim_address' => 'aim_address', 'thumb_f' => 'thumb_f', 'thumb_b' => 'thumb_b', 'thumb_l' => 'thumb_l', 'thumb_r' => 'thumb_r', 'car_extra' => 'car_extra', 'bind' => 'bind', 'driving_lisence' => 'driving_lisence'];
foreach ($cols as $col => $key) {
if (isset($post[$key]) && $post[$key] != '') {
$data[$col] = trim($post[$key]);
switch ($op) {
case 'add':
if(!$oid || $oid != $post['order_id']) $this->result('未关联运单,禁止操作',[],403);
$AcOrder = new AcOrder();
$order = $AcOrder->findOne($oid);
if (!$order) {
$this->result('未找到关联运单,请检查并重新选择运单!', [], 404);
}
$data['order_id'] = $oid;
$data['create_by'] = $this->user_id;
$data['create_at'] = $_time;
$data['update_at'] = $_time;
break;
case 'edit':
$id = (int)Yii::$app->request->get('id');
$_id = (int)$post['id'];
if($id != $_id) $this->result('id参数不匹配请检查');
if($oid != $detail->order_id) $this->result('不允许更改运单关联,请检查');
if (isset($detail->logs)) {
$_logs = json_decode($detail->logs, TRUE);
}
if (isset($detail->thumbs)) {
$_thumbs = json_decode($detail->thumbs, TRUE);
}
$data['update_at'] = $_time;
break;
}
$data['pid'] = $this->pid;
//格式化数据 为空的项则不修改
$cols = ['pay_from' => '付款方', 'pay_to' => '收款人'];
foreach ($cols as $key => $ti) {
if (isset($post[$key]) && $post[$key] != '') {
$data[$key] = trim($post[$key]);
} else {
$msg = $ti . '不能为空,请检查并填写';
$this->result($msg, [], 100);
}
// $data[$col] = isset($post[$key]) ? trim($post[$key]) : '';
}
$cols = ['car_id' => 'car_id', 'employee_id' => 'employee_id', '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', 'is_checked' => 'is_checked', 'no_driving_lisence' => 'no_driving_lisence', 'start_km' => 'start_km', 'not_insurance' => 'not_insurance'];
foreach ($cols as $col => $key) {
$key = 'paytype';
if (isset($post[$key]) && $post[$key] != '') {
$data[$col] = (int)$post[$key];
$data[$key] = (int)$post[$key];
} else {
$msg = '支付方式必须选择,请检查';
$this->result($msg, [], 100);
}
// $data[$col] = isset($post[$key]) ? (int)$post[$key] : 0;
$cols = ['money1', 'money2', 'money3']; //金额换算,元角分
$is_minus = FALSE;
//考虑是否有负值情况
if (isset($post['money1']) && (int)$post['money1'] < 0) {
$is_minus = TRUE;
} else if (isset($post['money2']) && (int)$post['money2'] < 0) {
$is_minus = TRUE;
} else if (isset($post['money3']) && (int)$post['money3'] < 0) {
$is_minus = TRUE;
}
foreach ($cols as $key) {
if (isset($post[$key]) && $post[$key] != '') {
$money[$key] = abs((int)$post[$key]); //取绝对值
} else {
$money[$key] = 0;
}
}
//角、分 数值必须个位数
if ($money['money2']) {
$money['money2'] = min($money['money2'], 9);
}
if ($money['money3']) {
$money['money3'] = min($money['money3'], 9);
}
$data['fee'] = 100 * $money['money1'] + 10 * $money['money2'] + $money['money3'];
if ($is_minus) {
$data['fee'] = 0 - $data['fee'];
}
//支付流水号
$key = 'sn';
if (isset($post[$key]) && $post[$key] != '') {
$data[$key] = trim($post[$key]);
}
//图片组处理
$cols = ['thumbs' => 'thumbs'];
foreach ($cols as $col => $key) {
$key = 'thumbs';
$imgs = [];
if (isset($post[$key]) && !empty($post[$key])) {
$imgs = $post[$key]; //数组格式
$imgs = array_unique($imgs);
$imgs = json_encode($imgs);
$data[$col] = $imgs;
}
if ($imgs) {
if ($_thumbs) {
$imgs = array_merge($imgs, $_thumbs);
$imgs = array_unique($imgs);
}
}
if (!$imgs) {
$msg = '支付凭证截图必须上传,请检查';
$this->result($msg, [], 100);
}
$data[$key] = json_encode($imgs, JSON_UNESCAPED_UNICODE);
$cols = ['remark' => 'editor'];
foreach ($cols as $col => $key) {
//操作日志处理
$key = 'logs';
$logs = [];
if (isset($post[$key]) && $post[$key] != '') {
$data[$col] = htmlspecialchars($post[$key]);
}
// $data[$col] = isset($post[$key]) ? htmlspecialchars($post[$key]) : '';
}
$sign_date = isset($post['sign_date']) ? strtotime($post['sign_date']) : '';
if (!$id) {
$data['create_by'] = Yii::$app->user->identity->id;
$data['sign_date'] = $sign_date ? $sign_date : time();
}
//部分规则校验
$has_err = FALSE;
$data['is_cwqr'] = 0; //修改财务确认状态为待确认
if (!$id) {
$data['status_code'] = 1;
}
/*不投保的保额不超过20W保费为0*/
if ($data['not_insurance']) {
if ($data['fee_insurance']) {
$data['fee_insurance'] = 0;
\Yii::$app->getSession()->setFlash('warning', '勾选了不投保已强制修改保费为0');
}
if ($data['car_value'] > Yii::$app->params['DefaultCarInsuranceValueMax']) {
$has_err = TRUE;
$data['car_value'] = Yii::$app->params['DefaultCarInsuranceValueMax'];
\Yii::$app->getSession()->setFlash('danger', '勾选了不投保,默认最高赠送的运输险保额不超过' . Yii::$app->params['DefaultCarInsuranceValueMax'] . '万元,已自动强制校正');
}
}
$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']) {
$has_err = TRUE;
\Yii::$app->getSession()->setFlash('danger', '请注意,运费未正确填写!');
}
if (!$data['pay_send'] && !$data['pay_receive']) {
$has_err = TRUE;
\Yii::$app->getSession()->setFlash('danger', '请注意,到收运费及起运地预收运费均未填写!');
}
if ($fee_total != $data['fee_total']) {
$has_err = TRUE;
\Yii::$app->getSession()->setFlash('danger', '请注意,所填运费、保费、提车费、送车费、额外费用、加急费等各项费用汇总的值与所填写的总费用不一致,请检查并更新');
}
if ($fee_pay != $data['fee_total']) {
$has_err = TRUE;
\Yii::$app->getSession()->setFlash('danger', '请注意,所填起运地预付运费、到收运费的汇总值与所填写的总费用不一致,请检查并更新');
}
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
$data['pid'] = $pid;
$model = new AcEmployee();
$employee = $model->findOne($data['employee_id']);
if ($employee) {
$data['store_id'] = $employee->store_id;
}
//保存资料
if ($id) {
unset($data['create_at']);
$res = $AcOrder->updateAll($data, ['id' => $id]);
$data['remark'] = isset($post[$key]) ? htmlspecialchars($post[$key]) : '';
$log = $this->user_info->username . '于' . date('Y-m-d H:i') . '备注-' . htmlspecialchars($post[$key]);
} else {
foreach ($data as $key => $val) {
$AcOrder->$key = $val;
$log = $this->user_info->username . '于' . date('Y-m-d H:i') . '进行了调整';
}
$res = $AcOrder->save();
$id = $AcOrder->attributes['id']; //获取插入后id
if ($_logs) {
$logs = $_logs;
}
array_unshift($logs, $log);
$data['cwlogs'] = json_encode($logs, JSON_UNESCAPED_UNICODE);
return $data;
}
if ($res) {
if ($has_err) {
\Yii::$app->getSession()->setFlash('success', '订单保存成功,但有价格数据录入错误,请根据情况检查更新!');
} else {
\Yii::$app->getSession()->setFlash('success', '订单保存成功!');
}
return $this->redirect(['edit', 'id' => $id]);
} else {
\Yii::$app->getSession()->setFlash('warning', '订单保存失败!');
return $this->goBack();
/*
* 数据显示格式化
* @res 数据源,查询的结果
* @query 数据表查询实例
* */
private function showAlbums($res,$query){
$datas = [];
foreach ($res as $s) {
$s = $s->toArray();
$datas[$s['id']] = $s;
}
$data = [
'total'=>$query->count(),
'albums' => $datas,
'page'=>$this->page
];
$this->result('相册查询成功!', $data, 200);
}
private function showAlbum($detail){
}
}

View File

@ -1,12 +1,5 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-05-22T07:29:34+08:00
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T09:17:16+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\gm\v1;
use Yii;
@ -21,51 +14,189 @@
class CarController extends Common
{
public function beforeAction($action)
{
if (!$this->pid) {
$this->result('您正使用本系统内部接口,禁止非法链接使用!');
}
return parent::beforeAction($action);
}
//主界面
public function actionIndex()
{
return $this->render('../layouts/dev', []);
$apis = [
'list'=>'车辆列表',
'detail'=>'详情',
'add'=>'添加',
'edit'=>'编辑',
'delete'=>'删除',
'show'=>'显示',
'hide'=>'隐藏',
'ajax'=>'ajax操作'
];
$this->result('您正使用CMTS-GM系统车辆管理接口', $apis, 200);
}
//车辆列表
public function actionList()
{
$pid = Yii::$app->session->get('pid');
$session = Yii::$app->session;
$AcCar = new AcCar();
$where = $where2 = [];
$where['pid'] = $pid;
$post = Yii::$app->request->post();
$search = [];
$searchSession = 'cars::search';
if (isset($_GET['reset']) && $_GET['reset'] == 1) {
$post['search'] = [];
}
if (isset($post['search'])) {
$search = $post['search'];
$session->set($searchSession, $search);
// }elseif($session->get($searchSession)){
// $search = $session->get($searchSession);
$s = $this->search();
$res = $s['res'];
if (!$res) {
$this->result('没有查询到相应的数据!', [], 0);
}
$return = [];
$return['code'] = 200;
$return['msg'] = '车辆查询成功!';
$return['data']= [
'total'=>$s['query']->count(),
'cars' => $res,
'series' => $s['series'],
'brands' => $s['brands'],
'owners' => $s['owners'],
'users' => $s['users'],
'page'=>$this->page
];
$this->result($return['msg'], $return['data'], $return['code']);
}
public function actionDetail()
{
$id = (int)Yii::$app->request->get('id');
if(!$id) $this->result('请求错误未携带ID参数');
$model = new AcCar();
$res = $model->findOne($id)->toArray();
if(!$res) $this->result('未查询到相应数据');
$car = $this->showCar($res);
$this->result('车辆信息查询完成', $car, 200);
}
public function actionAdd()
{
//数据预检查、编排
$data = $this->preSave('add');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
$model = new AcCar();
foreach ($data as $key=>$val) {
$model->$key = $val;
}
$res = $model->save();
$msg = '数据保存失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '数据保存成功!';
$return = [];
$return['id']= $model->attributes['id']; //获取插入后id;
$this->result($msg,$return, 200);
}
//编辑客车资料
public function actionEdit()
{
$detail = $this->preUpdate();
//数据预检查、编排
$data = $this->preSave('edit');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '数据编辑失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '数据编辑成功!';
$return = [];
$return['data']= $detail;
$this->result($msg,$return, 200);
}
//删除车辆
public function actionDelete()
{
$detail = $this->preUpdate();
$data = [];
$data['update_at'] = time();
$data['deleted'] = $detail->deleted + 1;
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '车型数据删除失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '车型数据删除成功!';
$this->result($msg,[], 200);
}
public function actionAjax()
{
$detail = $this->preUpdate();
$get = Yii::$app->request->get();
$msg = '';
$errorCode = 0;
$detail->update_at = time();
switch ($get['do']) {
case 'hide':
$detail->status_code = 0;
$res = $detail->save();
if ($res) {
$msg = '车型隐藏标记成功';
$errorCode = 200;
} else {
$msg = '车型隐藏标记失败';
}
break;
case 'show':
$detail->status_code = 1;
$res = $detail->save();
if ($res) {
$msg = '车型显示标记成功';
$errorCode = 200;
} else {
$msg = '车型显示标记失败';
}
break;
default:
break;
}
$this->result($msg,[], $errorCode);
}
private function search(){
$pid = $this->pid;
$return = [];
$model = new AcCar();
$where = $where2 = [];
$where['pid'] = $pid;
$post = $this->postdata;
$search = $post['search'] ?? [];
$search['title'] = isset($search['title']) ? trim(htmlspecialchars_decode($search['title'])) : '';
if (!empty($search['title'])) {
$where2[] = 'or';
$where2[] = ['LIKE', 'car_no', $search['title']];
$where2[] = ['LIKE', 'num_left', $search['title']];
$where2[] = ['LIKE', 'num_frame', $search['title']];
}
$search['brand'] = isset($search['brand_id']) ? trim(htmlspecialchars_decode($search['brand'])) : '';
$search['brand_id'] = isset($search['brand_id']) ? (int)$search['brand_id'] : 0;
if (!empty($search['brand_id'])) {
$where['brand_id'] = $search['brand_id'];
}
$search['series_id'] = isset($search['series_id']) ? (int)$search['series_id'] : 0;
if (!empty($search['series_id'])) {
$where['series_id'] = $search['series_id'];
}
$where['deleted'] = 0;
$data = $AcCar->find()->where($where);
$data = $model->find()->where($where);
if ($search['title']) {
$data = $data->andwhere($where2);
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => '20']);
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => $this->pageSize]);
$res = $data->offset($pages->offset)->limit($pages->limit)->orderby('id DESC')->all();
$oids = $mids = $bids = $sids = [];
@ -77,7 +208,6 @@
$sids[] = $r->series_id;
}
}
$status = Yii::$app->params['CommonStatus'];
$AcCarOwner = new AcCarOwner();
$where = [];
$where['pid'] = $pid;
@ -135,337 +265,86 @@
$brands[$r->id] = $r->toArray();
}
}
$cars = [];
if ($res) {
foreach ($res as $r) {
$car = $r->toArray();
$t = '';
if (isset($series[$r->series_id]['title'])) {
$t .= $brands[$r->brand_id]['title'];
}
$t .= '-';
if (isset($series[$r->series_id]['title'])) {
$t .= $series[$r->series_id]['title'];
}
$car['title2'] = $t;
$car['numbers'] = $car['num_p'] . $car['num_area'] . $car['num_left'];
$car['numbers'] = $car['numbers'] ? $car['numbers'] : $car['num_frame'];
$car['numbers'] = $car['num_p'] ? $car['numbers'] : $car['num_frame'];
$cars[$r->id] = $car;
}
}
return $this->render('list', [
'cars' => $cars,
'pager' => $pages,
'owners' => $owners,
'users' => $users,
'status' => $status,
'search' => $search
]);
return ['res'=>$cars,'query'=>$data,'owners'=>$owners,'users'=>$users,'brands'=>$brands,'series'=>$series];
}
public function actionSelect()
{
$pid = Yii::$app->session->get('pid');
$session = Yii::$app->session;
$AcCar = new AcCar();
$where = $where2 = [];
$where['pid'] = $pid;
$post = Yii::$app->request->post();
$search = [];
$searchSession = 'cars::search';
if (isset($_GET['reset']) && $_GET['reset'] == 1) {
$post['search'] = [];
}
if (isset($post['search'])) {
$search = $post['search'];
$session->set($searchSession, $search);
// }elseif($session->get($searchSession)){
// $search = $session->get($searchSession);
}
$search['title'] = isset($search['title']) ? trim(htmlspecialchars_decode($search['title'])) : '';
if (!empty($search['title'])) {
$where2[] = 'or';
$where2[] = ['LIKE', 'num_left', $search['title']];
$where2[] = ['LIKE', 'num_frame', $search['title']];
}
$search['brand'] = isset($search['brand_id']) ? trim(htmlspecialchars_decode($search['brand'])) : '';
$search['brand_id'] = isset($search['brand_id']) ? (int)$search['brand_id'] : 0;
if (!empty($search['brand_id'])) {
$where['brand_id'] = $search['brand_id'];
}
$where['deleted'] = 0;
$data = $AcCar->find()->where($where);
if ($search['title']) {
$data = $data->andWhere($where2);
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => '20']);
$res = $data->offset($pages->offset)->limit($pages->limit)->orderby(' id DESC')->all();
$oids = $mids = $bids = $sids = [];
if ($res) {
foreach ($res as $r) {
$oids[] = $r->owner_id;
$mids[] = $r->mid;
$bids[] = $r->brand_id;
$sids[] = $r->series_id;
}
}
$status = Yii::$app->params['CommonStatus'];
$AcCarOwner = new AcCarOwner();
$where = [];
$where['pid'] = $pid;
$_owners = $AcCarOwner->find()->where($where)->andwhere(['in', 'id', $oids])->all();
$owners = [];
foreach ($_owners as $s) {
$owners[$s->id] = $s->toArray();
}
$User = new User();
$where = [];
$_users = $User->find()->where($where)->andwhere(['in', 'id', $mids])->all();
$users = [];
foreach ($_users as $s) {
$users[$s->id] = $s->toArray();
}
$AcUserExt = new AcUserExt();
$userExts = $AcUserExt->find()->where(['pid' => $pid, 'deleted' => 0])->andWhere(['in', 'mid', $mids])->all();
$exts = [];
if ($userExts) {
foreach ($userExts as $v) {
$exts[$v->mid][$v->key] = $v->value;
}
foreach ($exts as $i => $ext) {
$_owner = $users[$i] ? $users[$i] : [];
if ($ext['title']) {
$_owner['owner_title'] = $ext['title'];
}
if ($ext['nickname']) {
$_owner['owner_title'] = $ext['nickname'];
}
if ($ext['realname']) {
$_owner['owner_title'] = $ext['realname'];
}
$users[$i]['username'] = $_owner['owner_title'] . '【' . $users[$i]['mobile'] . '】';
}
}
$AcCarSeries = new AcCarSeries();
$where = [];
$series = [];
$_series = $AcCarSeries->find()->where($where)->andwhere(['in', 'id', $sids])->all();
if ($_series) {
foreach ($_series as $r) {
$series[$r->id] = $r->toArray();
}
}
$AcCarBrand = new AcCarBrand();
$where = [];
$_brands = $AcCarBrand->find()->where($where)->andwhere(['in', 'id', $bids])->all();
if ($_brands) {
foreach ($_brands as $r) {
$brands[$r->id] = $r->toArray();
}
}
$cars = [];
if ($res) {
foreach ($res as $r) {
$car = $r->toArray();
$t = '';
if (isset($series[$r->series_id]['title'])) {
$t .= $brands[$r->brand_id]['title'];
}
$t .= '-';
if (isset($series[$r->series_id]['title'])) {
$t .= $series[$r->series_id]['title'];
}
$car['title2'] = $t;
$car['numbers'] = $car['num_p'] . $car['num_area'] . $car['num_left'];
$car['numbers'] = $car['numbers'] ? $car['numbers'] : $car['num_frame'];
$cars[$r->id] = $car;
}
}
$callback = !empty(Yii::$app->request->get('callback')) ? Yii::$app->request->get('callback') : 'truck';
return $this->render('select', [
'cars' => $cars,
'pager' => $pages,
'owners' => $owners,
'users' => $users,
'status' => $status,
'search' => $search,
'callback' => $callback
]);
}
public function actionNew()
{
$status = Yii::$app->params['CommonStatus'];
$AcCar = new AcCar();
$AcCar->status_code = 0;
return $this->render('modify', ['status' => $status, 'detail' => $AcCar]);
}
//编辑客车资料
public function actionEdit()
/*
* 数据更新前的预检查,返回对应关联数据
* 必须确保get与post数据中均包含需更新的数据id且一致
* */
private function preUpdate()
{
$id = (int)Yii::$app->request->get('id');
if(!$id) $this->result('请求错误未携带ID参数');
$post = $this->postdata;
if($post['id'] != $id) $this->result('传参id与请求数据不匹配',[],403);
$model = new AcCar();
$id = Yii::$app->request->get('id');
$res = $model->find()->where(['id' => $id])->one();
if ($res) {
$res = $res->toArray();
}
$pid = Yii::$app->session->get('pid');
$AcCarOwner = new AcCarOwner();
$owner = $AcCarOwner->find()->where(['id' => $res['owner_id']])->one();
if ($owner) {
$mid = $owner->mid;
$User = new User();
$user = $User->find()->where(['id' => $mid])->one();
if ($user) {
$res['owner_title'] = $user->username . '【' . $user->mobile . '】';
}
$AcUserExt = new AcUserExt();
$userExt = $AcUserExt->find()->where(['pid' => $pid, 'mid' => $res['mid'], 'deleted' => 0])->all();
$exts = [];
if ($userExt) {
foreach ($userExt as $v) {
$exts[$v->key] = $v->value;
}
if ($exts['title']) {
$res['owner_title'] = $exts['title'];
}
if ($exts['nickname']) {
$res['owner_title'] = $exts['nickname'];
}
if ($exts['realname']) {
$res['owner_title'] = $exts['realname'];
}
$res['owner_title'] = $res['owner_title'] . '【' . $user->mobile . '】';
}
}
$AcCarSeries = new AcCarSeries();
$series = $AcCarSeries->find()->where(['id' => $res['series_id']])->one();
if ($series) {
$res['series_title'] = $series->title;
}
$AcCarBrand = new AcCarBrand();
$brand = $AcCarBrand->find()->where(['id' => $res['brand_id']])->one();
if ($brand) {
$res['brand_title'] = $brand->title;
}
$status = Yii::$app->params['CommonStatus'];
return $this->render('modify', ['status' => $status, 'detail' => $res]);
$res = $model->findOne($id);
if(!$res) $this->result('未查询到相应数据',[],404);
return $res;
}
//复制客车资料后新建
public function actionCopy()
/*
* 数据保存前的预检查(查重、参数校验等)
* 要保存的数据[],直接从post中取出
* @op操作类型add,edit……
* 校验机制:
* 编辑数据时必须用get方式传入参数id并与post进来的数据id进行比对只有一致时才能继续;
* 查重:禁止录入重复数据
* 返回:校验重组后的数据
* */
private function preSave($op)
{
$model = new AcCar();
$id = Yii::$app->request->get('id');
$res = $model->find()->where(['id' => $id])->one();
if ($res) {
$res = $res->toArray();
}
$pid = Yii::$app->session->get('pid');
$AcCarSeries = new AcCarSeries();
$series = $AcCarSeries->find()->where(['id' => $res['series_id']])->one();
if ($series) {
$res['series_title'] = $series->title;
}
$AcCarBrand = new AcCarBrand();
$brand = $AcCarBrand->find()->where(['id' => $res['brand_id']])->one();
if ($brand) {
$res['brand_title'] = $brand->title;
}
$status = Yii::$app->params['CommonStatus'];
$res['id'] = 0;
$res['num_p'] = $res['num_area'] = $res['num_left'] = $res['num_frame'] = '';
return $this->render('modify', ['status' => $status, 'detail' => $res]);
}
//浏览客车详情
public function actionDetail()
{
$model = new AcCar();
$id = Yii::$app->request->get('id');
$res = $model->find()->where(['id' => $id])->one();
if ($res) {
$res = $res->toArray();
}
$pid = Yii::$app->session->get('pid');
$AcCarOwner = new AcCarOwner();
$owner = $AcCarOwner->find()->where(['id' => $res['owner_id']])->one();
$User = new User();
$user = $User->find()->where(['id' => $res['mid']])->one();
if ($user) {
$res['owner_title'] = $user->username . '【' . $user->mobile . '】';
}
$AcUserExt = new AcUserExt();
$userExt = $AcUserExt->find()->where(['pid' => $pid, 'mid' => $res['mid'], 'deleted' => 0])->all();
$exts = [];
if ($userExt) {
foreach ($userExt as $v) {
$exts[$v->key] = $v->value;
}
if ($exts['title']) {
$res['owner_title'] = $exts['title'];
}
if ($exts['nickname']) {
$res['owner_title'] = $exts['nickname'];
}
if ($exts['realname']) {
$res['owner_title'] = $exts['realname'];
}
$res['owner_title'] = $res['owner_title'] . '【' . $user->mobile . '】';
}
$AcCarSeries = new AcCarSeries();
$series = $AcCarSeries->find()->where(['id' => $res['series_id']])->one();
if ($series) {
$res['series_title'] = $series->title;
}
$AcCarBrand = new AcCarBrand();
$brand = $AcCarBrand->find()->where(['id' => $res['brand_id']])->one();
if ($brand) {
$res['brand_title'] = $brand->title;
}
$status = Yii::$app->params['CommonStatus'];
return $this->render('detail', ['status' => $status, 'detail' => $res]);
}
//保存车辆资料
public function actionSave()
{
$post = Yii::$app->request->post();
$id = (int)$post['id'];
$pid = Yii::$app->session->get('pid');
$post = $this->postdata;
$car_no = trim($post['car_no']) ?? '';//车牌号
$num_frame = trim($post['num_frame']) ?? '';//车架号
if(!$car_no && !$num_frame) $this->result('请传入车牌/架号');
$data = [];
//格式化数据
//目标键=》POST键
$cols = ['title' => 'title', 'num_frame' => 'num_frame', 'num_p' => 'num_p', 'num_area' => 'num_area', 'num_left' => 'num_left'];
$cols = ['title' => 'title', 'num_frame' => 'num_frame', 'num_p' => 'num_p', 'num_area' => 'num_area', 'num_left' => 'num_left','car_no'=>'car_no'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? trim($post[$key]) : '';
}
//查询车牌号是否在库
$hasCar = FALSE;
if (!$data['num_frame']) {
$hasCar = AcCar::find()->where(['num_p' => $data['num_p'], 'num_area' => $data['num_area'], 'num_left' => $data['num_left']])->one();
}
if ($hasCar) {
if ($id && $id != $hasCar->id) {
\Yii::$app->getSession()->setFlash('danger', '保存失败,该车牌号已在库!');
return $this->goBack();
} else {
$id = $hasCar->id;
$model = new AcCar();
switch ($op) {
case 'add':
if(!$num_frame){
$error = "车牌号已存在";
$hasOne = $model->find()->where(['deleted'=>0,'pid'=>$this->pid,'car_no'=>$car_no])->one();
}else{
$error = "车架/牌号已存在";
$hasOne = $model->find()->where(['deleted'=>0,'pid'=>$this->pid])->andWhere(['OR',['LIKE', 'car_no', $car_no],['LIKE', 'num_frame', $num_frame]])->one();
}
if ($hasOne) {
$this->result($error);
}
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
break;
case 'edit':
$id = (int)Yii::$app->request->get('id');
$_id = (int)$post['id'];
if(!$id != $_id) $this->result('id参数不匹配请检查');
$hasOne = $model->find()->select('id')->where(['car_no'=>$car_no,'id'<>$id,'pid'=>$this->pid,'deleted'=>0])->indexBy('id')->one();
if ($hasOne) {
$this->result('车牌号重复,请检查');
}
$data['update_at'] = time();
break;
}
$data['pid'] = $this->pid;
$cols = ['brand_id' => 'brand_id', 'series_id' => 'series_id', 'owner_id' => 'owner_id', 'status_code' => 'status_code', 'deleted' => 'deleted'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? (int)$post[$key] : 0;
@ -474,131 +353,55 @@
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? htmlspecialchars($post[$key]) : '';
}
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
// $data['status_code'] = 1;
$data['pid'] = $pid;
//填补mid参数
if($data['owner_id']){
$AcCarOwner = new AcCarOwner();
$owner = $AcCarOwner->findOne($data['owner_id']);
if ($owner) {
$data['mid'] = $owner->mid;
}
//保存车辆资料
$AcCar = new AcCar();
foreach ($data as $key => $val) {
$AcCar->$key = $val;
}
if ($id) {
$AcCar->id = $id;
unset($data['create_at']);
$res = $AcCar->updateAll($data, ['id' => $id]);
} else {
$res = $AcCar->save();
$id = $AcCar->attributes['id']; //获取插入后id
return $data;
}
if ($res) {
\Yii::$app->getSession()->setFlash('success', '车辆资料保存成功!');
return $this->redirect(['edit', 'id' => $id]);
} else {
\Yii::$app->getSession()->setFlash('warning', '车辆资料保存失败!');
return $this->goBack();
}
}
//格式化显示车辆信息 @car 车辆信息原始数据 []
private function showCar($car){
$oid = $car['owner_id'];
$mid = $car['mid'];
$bid = $car['brand_id'];
$sid = $car['series_id'];
$AcCarSeries = new AcCarSeries();
$series = $AcCarSeries->findOne($sid);
$car['series'] = $series;
$AcCarBrand = new AcCarBrand();
$brand = $AcCarBrand->findOne($bid);
$car['brand'] = $brand;
$AcCarOwner = new AcCarOwner();
$owner = $AcCarOwner->findOne($oid);
$car['owner'] = $owner;
//删除车辆
public function actionDelete()
{
$get = Yii::$app->request->get();
$post = Yii::$app->request->post();
$id = (int)$get['id'];
$data = $where = [];
$where['pid'] = Yii::$app->session->get('pid');
$where['id'] = $id;
$data['update_at'] = time();
$data['deleted'] = 1;
$CUser = new User();
$user = $CUser->findOne($mid)->toArray();
$AcUserExt = new AcUserExt();
$userExts = $AcUserExt->find()->where(['pid' => $this->pid, 'deleted' => 0,'mid'=>$mid])->all();
$ext = [];
foreach ($userExts as $v) {
$ext[$v->key] = $v->value;
}
if ($ext['title']) {
$user['owner_title'] = $ext['title'];
}
if ($ext['nickname']) {
$user['owner_title'] = $ext['nickname'];
}
if ($ext['realname']) {
$user['owner_title'] = $ext['realname'];
}
$car['user'] = $user;
$model = new AcCar();
foreach ($data as $key => $val) {
$model->$key = $val;
}
$model->id = $id;
$res = $model->updateAll($data, $where);
$return = [];
$return['url'] = Url::toRoute('car/list');
$return['timeout'] = 3; //3秒后自动跳转
$return['status'] = 0;
if ($res) {
$return['msg'] = '车辆删除成功';
$return['errorcode'] = 200;
$return['data'] = $id;
} else {
$return['msg'] = '车辆删除失败';
$return['errorcode'] = 0;
}
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
public function actionAjax()
{
$get = Yii::$app->request->get();
$post = Yii::$app->request->post();
$id = (int)$get['id'];
$data = $where = [];
$where['pid'] = Yii::$app->session->get('pid');
$where['id'] = $id;
$data['update_at'] = time();
$model = new AcCar();
$res = $model->find()->where(['id' => $id])->one();
$return = [];
$return['timeout'] = 1; //3秒后自动跳转
// $return['status_code'] = 0;
$return['ajax'] = 1;
if ($res) {
$res = $res->toArray();
} else {
$return['msg'] = '车辆数据不存在';
$return['errorcode'] = 404;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
switch ($get['do']) {
case 'hide':
$data['status_code'] = 0;
$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;
case 'show':
$data['status_code'] = 1;
$model->id = $id;
$res = $model->updateAll($data, $where);
if ($res) {
$return['msg'] = '车辆显示记成功';
$return['errorcode'] = 200;
$return['data'] = ['css' => 'primary'];
} else {
$return['msg'] = '车辆显示标记失败';
$return['errorcode'] = 0;
}
break;
default:
break;
}
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
$car['numbers'] = $car['num_p'] . $car['num_area'] . $car['num_left'];
$car['numbers'] = $car['num_p'] ? $car['numbers'] : $car['num_frame'];
return $car;
}
}

View File

@ -1,266 +1,248 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-05-22T07:28:54+08:00
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T09:17:11+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\gm\v1;
use Yii;
use yii\data\Pagination;
use yii\helpers\Url;
use addons\models\AcCarBrand;
class CarbrandController extends Common
{
//主界面
public function actionIndex()
{
return $this->render('../layouts/dev', []);
$apis = [
'list'=>'品牌列表',
'detail'=>'详情',
'add'=>'添加',
'edit'=>'编辑',
'delete'=>'删除',
'show'=>'显示',
'hide'=>'隐藏',
'ajax'=>'ajax操作'
];
$this->result('您正使用CMTS-GM系统车辆品牌管理接口', $apis, 200);
}
//车品牌列表
public function actionList()
{
$pid = Yii::$app->session->get('pid');
$model = new AcCarBrand();
$where = $where2 = [];
$where2[] = 'and';
$where['pid'] = $pid;
$post = Yii::$app->request->post();
$search = [];
$search['title'] = isset($post['title']) ? trim(htmlspecialchars_decode($post['title'])) : '';
if (!empty($search['title'])) {
$where2[] = ['LIKE', 'title', $search['title']];
}
$where['deleted'] = 0;
$data = $model->find()->where($where);
if ($search['title']) {
$data = $data->andwhere($where2);
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => '20']);
$res = $data->offset($pages->offset)->limit($pages->limit)->all();
$brands = [];
foreach ($res as $s) {
$s = $s->toArray();
$brands[$s['id']] = $s;
$s = $this->search();
$res = $s['res'];
if (!$res) {
$this->result('没有查询到相应的数据!', [], 0);
}
$status = Yii::$app->params['CommonStatus'];
return $this->render('list', [
'brands' => $brands,
'pager' => $pages,
'status' => $status,
'search' => $search
]);
$return = [];
$return['code'] = 200;
$return['msg'] = '车辆品牌查询成功!';
$return['data']= [
'total'=>$s['query']->count(),
'brands' => $res,
'page'=>$this->page
];
$this->result($return['msg'], $return['data'], $return['code']);
}
//车品牌列表
public function actionSelect()
//品牌详情
public function actionDetail()
{
global $_HI, $_FM;
$pid = Yii::$app->session->get('pid');
$id = (int)Yii::$app->request->get('id');
if(!$id) $this->result('请求错误未携带ID参数');
$model = new AcCarBrand();
$where = $where2 = [];
$where2[] = 'and';
$where['pid'] = $pid;
$post = Yii::$app->request->post();
$search = [];
$search['title'] = isset($post['title']) ? trim(htmlspecialchars_decode($post['title'])) : '';
if (!empty($search['title'])) {
$where2[] = ['LIKE', 'title', $search['title']];
}
$where['deleted'] = 0;
$data = $model->find()->where($where);
if ($search['title']) {
$data = $data->andwhere($where2);
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => '20']);
$res = $data->offset($pages->offset)->limit($pages->limit)->all();
$brands = [];
foreach ($res as $s) {
$s = $s->toArray();
$brands[$s['id']] = $s;
}
$status = Yii::$app->params['CommonStatus'];
$callback = !empty(Yii::$app->request->get('callback')) ? Yii::$app->request->get('callback') : 'car';
return $this->render('select', [
'brands' => $brands,
'pager' => $pages,
'status' => $status,
'search' => $search,
'callback' => $callback
]);
$res = $model->findOne($id)->toArray();
if(!$res) $this->result('未查询到相应数据');
$this->result('品牌信息查询完成', $res, 200);
}
//新增车品牌
public function actionNew()
public function actionAdd()
{
global $_HI, $_FM;
$status = Yii::$app->params['CommonStatus'];
$AcCarBrand = new AcCarBrand();
$AcCarBrand->status_code = 0;
return $this->render('modify', ['status' => $status, 'detail' => $AcCarBrand->toArray()]);
$post = $this->postdata;
$data = [];
//格式化数据 为空的项则不修改
$data['title'] = trim($post['title']);
if(!$data['title']) $this->result('请传入品牌名称');
$data['status_code'] = 1; //状态代码1可用
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
//数据预检查
$res = $this->preSave($data,'add');
if(!$res) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
$model = new AcCarBrand();
foreach ($data as $key=>$val) {
$model->$key = $val;
}
$res = $model->save();
$msg = '数据保存失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '数据保存成功!';
$return = [];
$return['id']= $model->attributes['id']; //获取插入后id;
$this->result($msg,$return, 200);
}
//更新车品牌
public function actionEdit()
{
global $_HI, $_FM;
$model = new AcCarBrand();
$id = Yii::$app->request->get('id');
$pid = Yii::$app->session->get('pid');
$res = $model->find()->where(['id' => $id])->one();
if ($res) {
$res = $res->toArray();
} else {
$res = [];
}
$status = Yii::$app->params['CommonStatus'];
return $this->render('modify', [
'detail' => $res,
'status' => $status,
'id' => $id,
]);
}
$detail = $this->preUpdate();
$post = $this->postdata;
//保存车品牌资料
public function actionSave()
{
$post = Yii::$app->request->post();
$id = (int)$post['id'];
$pid = Yii::$app->session->get('pid');
//格式化数据
$data = [];
//格式化数据
$data['title'] = trim($post['title']);
if(!$data['title']) $this->result('请传入品牌名称');
//目标键=》POST键
$cols = ['status_code' => 'status_code', 'deleted' => 'deleted'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? (int)$post[$key] : 0;
}
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
$data['pid'] = $pid;
//格式化资料
$AcCarBrand = new AcCarBrand();
foreach ($data as $key => $val) {
$AcCarBrand->$key = $val;
}
//资料入库
if ($id) {
$AcCarBrand->id = $id;
unset($data['create_at']);
$res = $AcCarBrand->updateAll($data, ['id' => $id]);
} else {
$res = $AcCarBrand->save();
$id = $AcCarBrand->attributes['id']; //获取插入后id
}
if ($res) {
\Yii::$app->getSession()->setFlash('success', '车主资料保存成功!');
return $this->redirect(['edit', 'id' => $id]);
} else {
\Yii::$app->getSession()->setFlash('warning', '车主资料保存失败!');
return $this->goBack();
}
}
//删除用户
public function actionDelete($id)
{
global $_HI, $_FM;
$get = Yii::$app->request->get();
$post = Yii::$app->request->post();
$id = (int)$get['id'];
$data = $where = [];
$where['pid'] = Yii::$app->session->get('pid');
$where['id'] = $id;
$data['update_at'] = time();
$data['deleted'] = 1;
$model = new AcCarBrand();
foreach ($data as $key => $val) {
$model->$key = $val;
//数据预检查
$res = $this->preSave($data,'edit');
if(!$res) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$model->id = $id;
$res = $model->updateAll($data, $where);
$res = $detail->save();
$msg = '品牌数据更新失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '品牌数据更新成功!';
$return = [];
$return['url'] = Url::toRoute('carbrand/list');
$return['timeout'] = 3; //3秒后自动跳转
$return['status'] = 0;
if ($res) {
$return['msg'] = '删除成功';
$return['errorcode'] = 200;
$return['data'] = $id;
} else {
$return['msg'] = '删除失败';
$return['errorcode'] = 0;
$return['data']= $detail;
$this->result($msg,$return, 200);
}
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
//删除
public function actionDelete()
{
$detail = $this->preUpdate();
$data = [];
$data['update_at'] = time();
$data['deleted'] = $detail->deleted + 1;
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '品牌数据删除失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '品牌数据删除成功!';
$this->result($msg,[], 200);
}
public function actionAjax()
{
$detail = $this->preUpdate();
$get = Yii::$app->request->get();
$post = Yii::$app->request->post();
$id = (int)$get['id'];
$data = $where = [];
$where['pid'] = Yii::$app->session->get('pid');
$where['id'] = $id;
$data['update_at'] = time();
$model = new AcCarBrand();
$res = $model->find()->where(['id' => $id])->one();
$return = [];
$return['timeout'] = 1; //3秒后自动跳转
$return['status_code'] = 0;
$return['ajax'] = 1;
if ($res) {
$res = $res->toArray();
} else {
$return['msg'] = '品牌数据不存在';
$return['errorcode'] = 404;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
$msg = '';
$errorCode = 0;
$detail->update_at = time();
switch ($get['do']) {
case 'hide':
$data['status_code'] = 0;
$model->id = $id;
$res = $model->updateAll($data, $where);
$detail->status_code = 0;
$res = $detail->save();
if ($res) {
$return['msg'] = '品牌隐藏标记成功';
$return['errorcode'] = 200;
$return['data'] = ['css' => 'info'];
$msg = '品牌隐藏标记成功';
$errorCode = 200;
} else {
$return['msg'] = '品牌隐藏标记失败';
$return['errorcode'] = 0;
$msg = '品牌隐藏标记失败';
}
break;
case 'show':
$data['status_code'] = 1;
$model->id = $id;
$res = $model->updateAll($data, $where);
$detail->status_code = 1;
$res = $detail->save();
if ($res) {
$return['msg'] = '品牌显示标记成功';
$return['errorcode'] = 200;
$return['data'] = ['css' => 'default'];
$msg = '品牌显示标记成功';
$errorCode = 200;
} else {
$return['msg'] = '品牌显示标记失败';
$return['errorcode'] = 0;
$msg = '品牌显示标记失败';
}
break;
default:
break;
}
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
$this->result($msg,[], $errorCode);
}
private function search(){
$pid = $this->pid;
$return = [];
$model = new AcCarBrand();
$where = $where2 = [];
$where2[] = 'and';
// $where['pid'] = $pid;
$post = $this->postdata;
$search = $post['search'] ?? [];
$search['title'] = isset($search['title']) ? trim(htmlspecialchars_decode($search['title'])) : '';
if (!empty($search['title'])) {
$where2[] = ['LIKE', 'title', $search['title']];
}
$where['deleted'] = 0;
$data = $model->find()->where($where);
if ($search['title']) {
$data = $data->andwhere($where2);
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => $this->pageSize]);
$res = $data->offset($pages->offset)->limit($pages->limit)->all();
$brands = [];
foreach ($res as $s) {
$s = $s->toArray();
$brands[$s['id']] = $s;
}
return ['res'=>$brands,'query'=>$data];
}
//数据更新前的预检查,返回对应关联数据
private function preUpdate()
{
$id = (int)Yii::$app->request->get('id');
if(!$id) $this->result('请求错误未携带ID参数');
$post = $this->postdata;
if($post['id'] != $id) $this->result('传参与请求数据不匹配',[],403);
$model = new AcCarBrand();
$res = $model->findOne($id);
if(!$res) $this->result('未查询到相应数据',[],404);
return $res;
}
/*
* 数据保存前的预检查(查重、参数校验等)
* @data,要保存的数据[]
* @op操作类型add,edit……
* 校验机制:
* 编辑数据时必须用get方式传入参数id并与post进来的数据id进行比对只有一致时才能继续;
* 查重:禁止录入重复数据
* 返回校验结果true,false
* */
private function preSave($data,$op)
{
$title = trim($data['title']);
$model = new AcCarBrand();
switch ($op) {
case 'add':
$hasOne = $model->find()->where(['title'=>$title])->one();
if ($hasOne) {
$this->result('品牌名称重复,请检查重录');
}
break;
case 'edit':
$id = (int)$data['id'];
$origin = $model->findOne($id);
if(!$origin) $this->result('指定id('.$id.')的数据不存在,请检查');
$hasOne = $model->find()->select('id')->where(['title'=>$title,'id'<>$id])->indexBy('id')->one();
if ($hasOne) {
$this->result('品牌名称重复,请检查重录');
}
break;
}
return true;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,17 +1,9 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-05-22T07:30:22+08:00
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T09:17:27+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\gm\v1;
use Yii;
use yii\data\Pagination;
use yii\helpers\Url;
use addons\models\AcCarBrand;
use addons\models\AcCarSeries;
@ -20,320 +12,271 @@
//主界面
public function actionIndex()
{
return $this->render('../layouts/dev', []);
$apis = [
'list'=>'车型列表',
'detail'=>'详情',
'add'=>'添加',
'edit'=>'编辑',
'delete'=>'删除',
'show'=>'显示',
'hide'=>'隐藏',
'ajax'=>'ajax操作'
];
$this->result('您正使用CMTS-GM系统品牌车型管理接口', $apis, 200);
}
//车型列表
public function actionList()
{
global $_HI, $_FM;
$pid = Yii::$app->session->get('pid');
$session = Yii::$app->session;
$model = new AcCarSeries();
$where = $where2 = [];
$where2[] = 'and';
$where2[] = ['in', 'pid', [0, $pid]];
$post = Yii::$app->request->post();
$search = [];
$searchSession = 'carseries::search';
if (isset($_GET['reset']) && $_GET['reset'] == 1) {
$post['search'] = [];
}
if (isset($post['search'])) {
$search = $post['search'];
$session->set($searchSession, $search);
} else if ($session->get($searchSession)) {
$search = $session->get($searchSession);
$s = $this->search();
$res = $s['res'];
if (!$res) {
$this->result('没有查询到相应的数据!', [], 0);
}
$search['title'] = isset($search['title']) ? trim(htmlspecialchars_decode($search['title'])) : '';
if (!empty($search['title'])) {
$where2[] = ['LIKE', 'title', $search['title']];
$return = [];
$return['code'] = 200;
$return['msg'] = '车型查询成功!';
$return['data']= [
'total'=>$s['query']->count(),
'series' => $res,
'brands' => $s['brands'],
'page'=>$this->page
];
$this->result($return['msg'], $return['data'], $return['code']);
}
$search['brand'] = isset($search['brand_id']) ? trim(htmlspecialchars_decode($search['brand'])) : '';
$search['brand_id'] = isset($search['brand_id']) ? (int)$search['brand_id'] : 0;
if (!empty($search['brand_id'])) {
$where['brand_id'] = $search['brand_id'];
}
$where['deleted'] = 0;
$data = $model->find()->where($where);
if ($search['title']) {
$data = $data->andwhere($where2);
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => '20']);
$res = $data->offset($pages->offset)->limit($pages->limit)->indexBy('id')->all();
$status = Yii::$app->params['CommonStatus'];
$series = $bids = [];
foreach ($res as $r) {
$r = $r->toArray();
$series[$r['id']] = $r;
$bids[] = $r['brand_id'];
}
$AcCarBrand = new AcCarBrand();
$brands = [];
$_brands = $AcCarBrand->find()->where(['in', 'id', $bids])->indexBy('id')->all();
foreach ($_brands as $s) {
$brands[$s->id] = $s->toArray();
}
return $this->render('list', [
'series' => $series,
'pager' => $pages,
'brands' => $brands,
'status' => $status,
'search' => $search
]);
}
//车型列表
public function actionSelect()
public function actionDetail()
{
global $_HI, $_FM;
$pid = Yii::$app->session->get('pid');
$session = Yii::$app->session;
$id = (int)Yii::$app->request->get('id');
if(!$id) $this->result('请求错误未携带ID参数');
$model = new AcCarSeries();
$where = $where2 = [];
$where2[] = 'and';
$where2[] = ['in', 'pid', [0, $pid]];
$post = Yii::$app->request->post();
$search = [];
$searchSession = 'carseries::search';
if (isset($_GET['reset']) && $_GET['reset'] == 1) {
$post['search'] = [];
}
if (isset($post['search'])) {
$search = $post['search'];
$session->set($searchSession, $search);
} else if ($session->get($searchSession)) {
$search = $session->get($searchSession);
}
$search['title'] = isset($search['title']) ? trim(htmlspecialchars_decode($search['title'])) : '';
if (!empty($search['title'])) {
$where2[] = ['LIKE', 'title', $search['title']];
}
// $search['brand'] = isset($search['brand']) ? trim(htmlspecialchars_decode($search['brand'])) : '';
$search['brand'] = isset($search['brand_id']) ? trim(htmlspecialchars_decode($search['brand'])) : '';
$search['brand_id'] = isset($search['brand_id']) ? (int)$search['brand_id'] : 0;
if (!empty($search['brand_id'])) {
$where['brand_id'] = $search['brand_id'];
}
$where['deleted'] = 0;
$data = $model->find()->where($where);
if ($search['title']) {
$data = $data->andwhere($where2);
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => '20']);
$res = $data->offset($pages->offset)->limit($pages->limit)->indexBy('id')->all();
$status = Yii::$app->params['CommonStatus'];
$series = $bids = [];
foreach ($res as $r) {
$r = $r->toArray();
$series[$r['id']] = $r;
$bids[$r['brand_id']] = $r['brand_id'];
}
$AcCarBrand = new AcCarBrand();
$brands = [];
$_brands = $AcCarBrand->find()->where(['in', 'id', $bids])->indexBy('id')->all();
foreach ($_brands as $s) {
$brands[$s->id] = $s->toArray();
}
$callback = !empty(Yii::$app->request->get('callback')) ? Yii::$app->request->get('callback') : 'car';
return $this->render('select', [
'series' => $series,
'pager' => $pages,
'brands' => $brands,
'status' => $status,
'search' => $search,
'callback' => $callback
]);
$res = $model->findOne($id)->toArray();
if(!$res) $this->result('未查询到相应数据');
$this->result('车型信息查询完成', $res, 200);
}
//新增车型
public function actionNew()
public function actionAdd()
{
global $_HI, $_FM;
$status = Yii::$app->params['CommonStatus'];
$AcCarSeries = new AcCarSeries();
$AcCarSeries->status_code = 0;
return $this->render('modify', ['status' => $status, 'detail' => $AcCarSeries->toArray()]);
$post = $this->postdata;
$data = [];
//格式化数据 为空的项则不修改
$data['title'] = trim($post['title']);
if(!$data['title']) $this->result('请传入车型名称');
$data['brand_id'] = (int)$post['brand_id'];
if(!$data['brand_id']) $this->result('请传入所属品牌');
$data['params'] = $post['params'] ?? [];
$data['status_code'] = 1; //状态代码1可用
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
//数据预检查、编排
$data = $this->preSave($data,'add');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
$model = new AcCarSeries();
foreach ($data as $key=>$val) {
$model->$key = $val;
}
$res = $model->save();
$msg = '数据保存失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '数据保存成功!';
$return = [];
$return['id']= $model->attributes['id']; //获取插入后id;
$this->result($msg,$return, 200);
}
//更新车型
public function actionEdit()
{
global $_HI, $_FM;
$status = Yii::$app->params['CommonStatus'];
$model = new AcCarSeries();
$id = Yii::$app->request->get('id');
$pid = Yii::$app->session->get('pid');
$res = $model->find()->where(['id' => $id])->one();
$parmas = [];
if ($res) {
$res = $res->toArray();
$parmas = json_decode($res['params'], TRUE);
} else {
$res = [];
}
$detail = $this->preUpdate();
$post = $this->postdata;
//查询对应的品牌
$brand = AcCarBrand::find()->where(['id' => $res['brand_id']])->one();
if ($brand) {
$res['brand_title'] = $brand->title;
}
return $this->render('modify', [
'detail' => $res,
'params' => $parmas,
'status' => $status,
'id' => $id,
]);
}
//保存车型资料
public function actionSave()
{
$post = Yii::$app->request->post();
$id = (int)$post['id'];
$pid = Yii::$app->session->get('pid');
//格式化数据
$data = [];
//格式化数据 为空的项则不修改
$data['title'] = trim($post['title']);
//目标键=》POST键
$cols = ['brand_id' => 'brand_id', 'status_code' => 'status_code', 'deleted' => 'deleted'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? (int)$post[$key] : 0;
}
$params = $post['p'];
$cols = ['height', 'length', 'width', 'kg', 'seat'];
foreach ($cols as $col) {
$params[$col] = isset($params[$col]) ? (int)$params[$col] : 0;
}
$data['params'] = json_encode($params, JSON_UNESCAPED_UNICODE);
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
$data['pid'] = $pid;
if(!$data['title']) $this->result('请传入车型名称');
$data['brand_id'] = (int)$post['brand_id'];
if(!$data['brand_id']) $this->result('请传入所属品牌');
//格式化车型资料
$AcCarSeries = new AcCarSeries();
foreach ($data as $key => $val) {
$AcCarSeries->$key = $val;
}
$data['params'] = $post['params'] ?? [];
$data['status_code'] = 1; //状态代码1可用
$data['update_at'] = time();
$data = $this->preSave($data,'edit');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//车型资料入库
if ($id) {
$AcCarSeries->id = $id;
unset($data['create_at']);
$res = $AcCarSeries->updateAll($data, ['id' => $id]);
} else {
$res = $AcCarSeries->save();
$id = $AcCarSeries->attributes['id']; //获取插入后id
}
if ($res) {
\Yii::$app->getSession()->setFlash('success', '车型资料保存成功!');
return $this->redirect(['edit', 'id' => $id]);
} else {
\Yii::$app->getSession()->setFlash('warning', '车型资料保存失败!');
return $this->goBack();
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '车型数据更新失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '车型数据更新成功!';
$return = [];
$return['data']= $detail;
$this->result($msg,$return, 200);
}
//删除车型
public function actionDelete($id)
public function actionDelete()
{
global $_HI, $_FM;
$get = Yii::$app->request->get();
$post = Yii::$app->request->post();
$id = (int)$get['id'];
$data = $where = [];
$where['pid'] = Yii::$app->session->get('pid');
$where['id'] = $id;
$detail = $this->preUpdate();
$data = [];
$data['update_at'] = time();
$data['deleted'] = 1;
$data['deleted'] = $detail->deleted + 1;
$model = new AcCarSeries();
foreach ($data as $key => $val) {
$model->$key = $val;
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '车型数据删除失败!';
if(!$res) $this->result($msg, [], 100);
$model->id = $id;
$res = $model->updateAll($data, $where);
$return = [];
$return['url'] = Url::toRoute('carowner/list');
$return['timeout'] = 3; //3秒后自动跳转
$return['status'] = 0;
if ($res) {
$return['msg'] = '删除成功';
$return['errorcode'] = 200;
$return['data'] = $id;
} else {
$return['msg'] = '删除失败';
$return['errorcode'] = 0;
}
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
$msg = '车型数据删除成功!';
$this->result($msg,[], 200);
}
public function actionAjax()
{
$detail = $this->preUpdate();
$get = Yii::$app->request->get();
$post = Yii::$app->request->post();
$id = (int)$get['id'];
$data = $where = [];
$where['pid'] = Yii::$app->session->get('pid');
$where['id'] = $id;
$data['update_at'] = time();
$model = new AcCarSeries();
$res = $model->find()->where(['id' => $id])->one();
$return = [];
$return['timeout'] = 1; //3秒后自动跳转
$return['status_code'] = 0;
$return['ajax'] = 1;
if ($res) {
$res = $res->toArray();
} else {
$return['msg'] = '车型数据不存在';
$return['errorcode'] = 404;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
$msg = '';
$errorCode = 0;
$detail->update_at = time();
switch ($get['do']) {
case 'hide':
$data['status_code'] = 0;
$model->id = $id;
$res = $model->updateAll($data, $where);
$detail->status_code = 0;
$res = $detail->save();
if ($res) {
$return['msg'] = '车型隐藏标记成功';
$return['errorcode'] = 200;
$return['data'] = ['css' => 'info'];
$msg = '车型隐藏标记成功';
$errorCode = 200;
} else {
$return['msg'] = '车型隐藏标记失败';
$return['errorcode'] = 0;
$msg = '车型隐藏标记失败';
}
break;
case 'show':
$data['status_code'] = 1;
$model->id = $id;
$res = $model->updateAll($data, $where);
$detail->status_code = 1;
$res = $detail->save();
if ($res) {
$return['msg'] = '车型显示标记成功';
$return['errorcode'] = 200;
$return['data'] = ['css' => 'default'];
$msg = '车型显示标记成功';
$errorCode = 200;
} else {
$return['msg'] = '车型显示标记失败';
$return['errorcode'] = 0;
$msg = '车型显示标记失败';
}
break;
default:
break;
}
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
$this->result($msg,[], $errorCode);
}
private function search(){
$pid = $this->pid;
$return = [];
$model = new AcCarSeries();
$where = $where2 = [];
$where2[] = 'and';
// $where['pid'] = $pid;
$post = $this->postdata;
$search = $post['search'] ?? [];
$search['title'] = isset($search['title']) ? trim(htmlspecialchars_decode($search['title'])) : '';
if (!empty($search['title'])) {
$where2[] = ['LIKE', 'title', $search['title']];
}
$search['brand'] = isset($search['brand']) ? trim(htmlspecialchars_decode($search['brand'])) : '';
$search['brand_id'] = isset($search['brand_id']) ? (int)$search['brand_id'] : 0;
if (!empty($search['brand_id'])) {
$where['brand_id'] = $search['brand_id'];
}
$where['deleted'] = 0;
$data = $model->find()->where($where);
if ($search['title']) {
$data = $data->andwhere($where2);
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => $this->pageSize]);
$res = $data->offset($pages->offset)->limit($pages->limit)->indexBy('id')->all();
$series = $bids = [];
foreach ($res as &$s) {
$s = $s->toArray();
$brands[$s['id']] = $s;
}
$AcCarBrand = new AcCarBrand();
$brands = [];
$_brands = $AcCarBrand->find()->where(['in', 'id', $bids])->indexBy('id')->all();
unset($s);
foreach ($_brands as $s) {
$brands[$s->id] = $s->toArray();
}
return ['res'=>$res,'query'=>$data,'brands'=>$brands];
}
//数据更新前的预检查,返回对应关联数据
private function preUpdate()
{
$id = (int)Yii::$app->request->get('id');
if(!$id) $this->result('请求错误未携带ID参数');
$post = $this->postdata;
if($post['id'] != $id) $this->result('传参与请求数据不匹配',[],403);
$model = new AcCarSeries();
$res = $model->findOne($id);
if(!$res) $this->result('未查询到相应数据',[],404);
return $res;
}
/*
* 数据保存前的预检查(查重、参数校验等)
* @data,要保存的数据[]
* @op操作类型add,edit……
* 校验机制:
* 编辑数据时必须用get方式传入参数id并与post进来的数据id进行比对只有一致时才能继续;
* 查重:禁止录入重复数据
* 返回校验重组后的data
* */
private function preSave($data,$op)
{
$title = trim($data['title']);
$id = 0;
$model = new AcCarBrand();
switch ($op) {
case 'add':
$hasOne = $model->find()->where(['title'=>$title])->one();
if ($hasOne) {
$this->result('品牌名称重复,请检查重录');
}
break;
case 'edit':
$id = (int)$data['id'];
$origin = $model->findOne($id);
if(!$origin) $this->result('指定id('.$id.')的数据不存在,请检查');
$hasOne = $model->find()->select('id')->where(['title'=>$title,'id'<>$id])->indexBy('id')->one();
if ($hasOne) {
$this->result('品牌名称重复,请检查重录');
}
break;
}
//处理车型相关参数(数组内检查完成后转json)
$params = $data['params'];
$arr = ['length','width','height','kg'];
foreach ($arr as $v) {
$params[$v] = isset($params[$v]) ? (int)$params[$v] : 0;
}
$arr = ['gas'=>'汽油','diesel'=>'柴油','e-power'=>'纯电','hybrid'=>'混动'];
$arr_keys = array_keys($arr);
//设置默认能源类型为 汽油
$energy = $params['energy'] ?? '';
if(!empty($energy) && array_key_exists($energy,$arr_keys)){
$params['energy'] = $energy;
}else{
$params['energy'] = 'gas';
}
$data['params'] = json_encode($params, JSON_UNESCAPED_UNICODE);
return $data;
}
}

View File

@ -1,39 +1,51 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-05-22T07:30:47+08:00
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T09:17:33+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\gm\v1;
use Yii;
use yii\data\Pagination;
use yii\helpers\Url;
// use backend\models\Citys;
class CityController extends Common
{
//主界面
public function actionIndex()
public function beforeAction($action)
{
return $this->render('../layouts/dev', []);
if (!$this->pid) {
$this->result('您正使用本系统内部接口,禁止非法链接使用!');
}
return parent::beforeAction($action);
}
public function actionSelect()
//主界面
public function actionIndex()
{
$apis = [
'list'=>'城市列表',
];
$this->result('您正使用CMTS-GM系统车主管理接口', $apis, 200);
}
public function actionList()
{
$s = $this->search();
$res = $s['res'];
if (!$res) {
$this->result('没有查询到相应的数据!', [], 0);
}
$return = [];
$return['code'] = 200;
$return['msg'] = '查询成功!';
$return['data']= [
'total'=>count($res),
'citys' => $res,
'page'=>$this->page
];
$this->result($return['msg'], $return['data'], $return['code']);
}
private function search(){
$citys = Yii::$app->params['citys'];
$pager = new Pagination(['totalCount' => count($citys), 'pageSize' => '100']);
$callback = isset($_GET['callback']) ? $_GET['callback'] : 'city';
$search = [];
return $this->render('select', [
'citys' => $citys,
'pager' => $pager,
'search' => $search,
'callback' => $callback
]);
return ['res'=>$citys];
}
}

View File

@ -1,11 +1,5 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-04-15 20:22:03
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-07-08T16:02:30+08:00
# @Copyright: www.hiluker.cn
//平台用户入口
namespace api\controllers\gm\v1;
@ -16,6 +10,8 @@
use addons\models\AcUserExt;
use addons\models\AcStore;
use addons\models\AcEmployee;
use addons\models\AcPlat;
use common\models\CVcode;
class Common extends Controller
{
@ -91,7 +87,7 @@
$this->pageSize = $pageSize <= 0 ? 10 : $pageSize;
}
public function result($msg, $data = NULL, $code = 0)
public function result($msg, $data = [], $code = 0)
{
$return = [];
$return['code'] = $code;
@ -118,4 +114,77 @@
$user['tokenExpired'] = $tokenExpired;
return $user;
}
/*用户权限获取判断
@user 用户信息model原型
@auth 要授权的行为动作
@data 要操作的数据
*/
public function userPrivilege($user,$auth,$data)
{
//TD:待明确更多用户权限角色的配置、获取
switch ($auth) {
case 'feeEdit':
case 'feeOrderEdit':
case 'feeDriverEdit':
//允许本人操作该员工创建或被关联的运单、数据
if($user->id == $data->create_by) return true;
//允许超管操作
if($user->id == 1) return true;
return false;
break;
case 'orderPreEdit':
case 'orderEdit':
case 'orderPreDelete':
default:
//允许员工本人操作该员工创建或被关联的运单、数据
if($user->id == $data->from_mid) return true;
if($data->employee_id == $this->employee_id) return true;
//允许超管操作
if($user->id == 1) return true;
return false;
break;
}
}
/*
* SN格式化处理(ID转SN
* */
public function idToSn($id,$type){
switch ($type) {
case 'order':
$pre = 'YD';
$sn = '00000000000'; //11位
$sn = substr($sn, 0, 11 - strlen($id));
$sn .= $id;
break;
}
return $pre.$sn;
}
//校验财务验证码
public function vcodeCwCheck($vcode){
$plat = AcPlat::findOne($this->pid);
$platExt = json_decode($plat->remark, TRUE);
if(!isset($platExt['cw_phone'])) return ['res'=>false,'err'=>'平台尚未配置财务手机号','code'=>1];
$vcodeModel = new CVcode();
$_time = time();
//查询上次发送记录
$where = [];
$where['mobile'] = $platExt['cw_phone'];
$where['deleted'] = 0;
$where['type'] = 'caiwu';
$res = $vcodeModel->find()->where($where)->orderby('id DESC')->one();
if(!$res) return ['res'=>false,'err'=>'没有验证码发送记录','code'=>2];
if ($vcode != $res->code) {
return ['res'=>false,'err'=>'财务操作验证码校验失败,请检查并重新输入验证码!','code'=>3];
}
if (($_time - $res->create_at) > 7200) {
return ['res'=>false,'err'=>'验证码已超时,请重新获取后再填写提交!','code'=>4];
}
return ['res'=>true,'err'=>'','code'=>0];
}
}

View File

@ -1,278 +1,263 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-05-22T07:35:33+08:00
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T09:17:44+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\gm\v1;
use Yii;
use yii\data\Pagination;
use yii\helpers\Url;
use addons\models\AcContact;
use common\models\Member as User;
use common\models\UserExt;
class ContactController extends Common
{
public function beforeAction($action)
{
if (!$this->pid) {
$this->result('您正使用本系统内部接口,禁止非法链接使用!');
}
return parent::beforeAction($action);
}
public function actionIndex()
{
return $this->render('index');
$apis = [
'list'=>'联系人列表',
'detail'=>'详情',
'add'=>'添加',
'edit'=>'编辑',
'delete'=>'删除',
'show'=>'显示',
'hide'=>'隐藏',
'ajax'=>'ajax操作'
];
$this->result('您正使用CMTS-GM系统联系人管理接口', $apis, 200);
}
//通讯录列表
public function actionList()
{
$model = new AcContact();
$where = $where2 = [];
$pid = Yii::$app->session->get('pid');
$session = Yii::$app->session;
$post = Yii::$app->request->post();
$search = [];
$searchSession = 'contact::search';
if (isset($_GET['reset']) && $_GET['reset'] == 1) {
$post['search'] = [];
}
if (isset($post['search'])) {
$search = $post['search'];
$session->set($searchSession, $search);
} else if ($session->get($searchSession)) {
$search = $session->get($searchSession);
$s = $this->search();
$res = $s['res'];
if (!$res) {
$this->result('没有查询到相应的数据!', [], 0);
}
$search['title'] = isset($search['title']) ? trim(htmlspecialchars_decode($search['title'])) : '';
if (!empty($search['title'])) {
$where2[] = 'or';
$where2[] = ['LIKE', 'name', $search['title']];
$where2[] = ['LIKE', 'mobile', $search['title']];
}
$where['deleted'] = 0;
$data = $model->find()->where($where);
if ($search['title']) {
$data = $data->andwhere($where2);
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => '20']);
$res = $data->offset($pages->offset)->limit($pages->limit)->all();
$status = Yii::$app->params['CommonStatus'];
return $this->render('list', [
$return = [];
$return['code'] = 200;
$return['msg'] = '联系人查询成功!';
$return['data']= [
'total'=>$s['query']->count(),
'contactors' => $res,
'pager' => $pages,
'status' => $status,
'search' => $search
]);
'page'=>$this->page
];
$this->result($return['msg'], $return['data'], $return['code']);
}
public function actionSelect()
public function actionDetail()
{
$id = (int)Yii::$app->request->get('id');
if(!$id) $this->result('请求错误未携带ID参数');
$model = new AcContact();
$pid = Yii::$app->session->get('pid');
$session = Yii::$app->session;
$where = $where2 = [];
$where['pid'] = $pid;
$post = Yii::$app->request->post();
$search = [];
$searchSession = 'contact::search';
if (isset($_GET['reset']) && $_GET['reset'] == 1) {
$post['search'] = [];
}
if (isset($post['search'])) {
$search = $post['search'];
$session->set($searchSession, $search);
} else if ($session->get($searchSession)) {
$search = $session->get($searchSession);
$res = $model->findOne($id)->toArray();
if(!$res) $this->result('未查询到相应数据');
$this->result('车主信息查询完成', $res, 200);
}
$search['title'] = isset($search['title']) ? trim(htmlspecialchars_decode($search['title'])) : '';
if (!empty($search['title'])) {
$where2[] = 'or';
$where2[] = ['LIKE', 'name', $search['title']];
$where2[] = ['LIKE', 'mobile', $search['title']];
}
$where['deleted'] = 0;
$data = $model->find()->where($where);
if ($search['title']) {
$data = $data->andwhere($where2);
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => '20']);
$res = $data->offset($pages->offset)->limit($pages->limit)->all();
$status = Yii::$app->params['CommonStatus'];
$callback = !empty(Yii::$app->request->get('callback')) ? Yii::$app->request->get('callback') : 'contactor';
return $this->render('select', [
'contactors' => $res,
'pager' => $pages,
'status' => $status,
'search' => $search,
'callback' => $callback
]);
}
public function actionNew()
public function actionAdd()
{
return $this->render('modify', []);
//数据预检查、编排
$data = $this->preSave('add');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
$model = new AcContact();
foreach ($data as $key=>$val) {
$model->$key = $val;
}
$res = $model->save();
$msg = '数据保存失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '数据保存成功!';
$return = [];
$return['id']= $model->attributes['id']; //获取插入后id;
$this->result($msg,$return, 200);
}
//编辑通讯录资料
public function actionEdit()
{
$model = new AcContact();
$id = Yii::$app->request->get('id');
$res = $model->find()->where(['id' => $id])->one();
if ($res) {
$res = $res->toArray();
}
$detail = $this->preUpdate();
//数据预检查、编排
$data = $this->preSave('edit');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
return $this->render('modify', ['detail' => $res]);
}
//保存通讯录资料
public function actionSave()
{
$post = Yii::$app->request->post();
$id = (int)$post['id'];
$pid = Yii::$app->session->get('pid');
//格式化数据
//目标键=》POST键
$cols = ['company' => 'company', 'name' => 'name', 'mobile' => 'mobile', 'idcard' => 'idcard'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? trim($post[$key]) : '';
}
//查询通讯录手机号是否在库
$hasContactor = AcContact::find()->where(['mobile' => $data['mobile']])->one();
if ($hasContactor) {
if ($id && $id == $hasContactor->id) {
} else {
$id = $hasContactor->id;
\Yii::$app->getSession()->setFlash('danger', '保存失败,该手机号对应的通讯录已在库,系统自动现在为您调出该通讯录资料!');
return $this->redirect(['edit', 'id' => $id]);
}
}
$cols = ['status_code' => 'status_code', 'deleted' => 'deleted'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? (int)$post[$key] : 0;
}
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
$data['pid'] = $pid;
//保存通讯录资料
$AcContact = new AcContact();
foreach ($data as $key => $val) {
$AcContact->$key = $val;
}
if ($id) {
$AcContact->id = $id;
unset($data['create_at']);
$res = $AcContact->updateAll($data, ['id' => $id]);
} else {
$res = $AcContact->save();
$id = $AcContact->attributes['id']; //获取插入后id
}
if ($res) {
\Yii::$app->getSession()->setFlash('success', '通讯录信息保存成功!');
return $this->redirect(['edit', 'id' => $id]);
} else {
\Yii::$app->getSession()->setFlash('warning', '通讯录信息保存失败!');
return $this->goBack();
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '数据编辑失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '数据编辑成功!';
$return = [];
$return['data']= $detail;
$this->result($msg,$return, 200);
}
//删除
public function actionDelete()
{
$get = Yii::$app->request->get();
$post = Yii::$app->request->post();
$id = (int)$get['id'];
$data = $where = [];
$where['pid'] = Yii::$app->session->get('pid');
$where['id'] = $id;
$detail = $this->preUpdate();
$data = [];
$data['update_at'] = time();
$data['deleted'] = 1;
$data['deleted'] = $detail->deleted + 1;
$model = new AcContact();
foreach ($data as $key => $val) {
$model->$key = $val;
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '通讯录数据删除失败!';
if(!$res) $this->result($msg, [], 100);
$model->id = $id;
$res = $model->updateAll($data, $where);
$return = [];
$return['url'] = Url::toRoute('contact/list');
$return['timeout'] = 3; //3秒后自动跳转
$return['status'] = 0;
if ($res) {
$return['msg'] = '通讯录删除成功';
$return['errorcode'] = 200;
$return['data'] = $id;
} else {
$return['msg'] = '通讯录删除失败';
$return['errorcode'] = 0;
}
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
$msg = '通讯录数据删除成功!';
$this->result($msg,[], 200);
}
public function actionAjax()
{
$detail = $this->preUpdate();
$get = Yii::$app->request->get();
$post = Yii::$app->request->post();
$id = (int)$get['id'];
$data = $where = [];
$where['pid'] = Yii::$app->session->get('pid');
$where['id'] = $id;
$data['update_at'] = time();
$model = new AcContact();
$res = $model->find()->where(['id' => $id])->one();
$return = [];
$return['timeout'] = 1; //3秒后自动跳转
$return['status'] = 0;
$return['ajax'] = 1;
if ($res) {
$res = $res->toArray();
} else {
$return['msg'] = '通讯录数据不存在';
$return['errorcode'] = 404;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
$msg = '';
$errorCode = 0;
$detail->update_at = time();
switch ($get['do']) {
case 'out':
$data['status'] = 0;
$model->id = $id;
$res = $model->updateAll($data, $where);
case 'hide':
$detail->status_code = 0;
$res = $detail->save();
if ($res) {
$return['msg'] = '通讯录隐藏标记成功';
$return['errorcode'] = 200;
$return['data'] = ['css' => 'info'];
$msg = '通讯录隐藏标记成功';
$errorCode = 200;
} else {
$return['msg'] = '通讯录隐藏标记失败';
$return['errorcode'] = 0;
$msg = '通讯录隐藏标记失败';
}
break;
case 'in':
$data['status'] = 1;
$model->id = $id;
$res = $model->updateAll($data, $where);
case 'show':
$detail->status_code = 1;
$res = $detail->save();
if ($res) {
$return['msg'] = '通讯录显示标记成功';
$return['errorcode'] = 200;
$return['data'] = ['css' => 'default'];
$msg = '通讯录显示标记成功';
$errorCode = 200;
} else {
$return['msg'] = '通讯录显示标记失败';
$return['errorcode'] = 0;
$msg = '通讯录显示标记失败';
}
break;
default:
break;
}
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
$this->result($msg,[], $errorCode);
}
private function search(){
$pid = $this->pid;
$return = [];
$model = new AcContact();
$where = $where2 = [];
$where['pid'] = $pid;
$post = $this->postdata;
$search = $post['search'] ?? [];
$search['title'] = isset($search['title']) ? trim(htmlspecialchars_decode($search['title'])) : '';
if (!empty($search['title'])) {
$where2[] = 'or';
$where2[] = ['LIKE', 'name', $search['title']];
$where2[] = ['LIKE', 'mobile', $search['title']];
}
$search['company'] = isset($search['company']) ? trim(htmlspecialchars_decode($search['company'])) : '';
if(!empty($search['company'])){
$where2[] = 'and';
$where2[] = ['like', 'company', $search['company']];
}
$where['deleted'] = 0;
$data = $model->find()->where($where);
if ($where2) {
$data = $data->andwhere($where2);
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => $this->pageSize]);
$res = $data->offset($pages->offset)->limit($pages->limit)->all();
return ['res'=>$res,'query'=>$data];
}
/*
* 数据更新前的预检查,返回对应关联数据
* 必须确保get与post数据中均包含需更新的数据id且一致
* */
private function preUpdate()
{
$id = (int)Yii::$app->request->get('id');
if(!$id) $this->result('请求错误未携带ID参数');
$post = $this->postdata;
if($post['id'] != $id) $this->result('传参id与请求数据不匹配',[],403);
$model = new AcContact();
$res = $model->findOne($id);
if(!$res) $this->result('未查询到相应数据',[],404);
return $res;
}
/*
* 数据保存前的预检查(查重、参数校验等)
* 要保存的数据[],直接从post中取出
* @op操作类型add,edit……
* 校验机制:
* 编辑数据时必须用get方式传入参数id并与post进来的数据id进行比对只有一致时才能继续;
* 查重:禁止录入重复数据
* 返回:校验重组后的数据
* */
private function preSave($op)
{
$post = $this->postdata;
$name = trim($post['name']) ?? '';
if(!$name) $this->result('请传入客户名称');
$data = [];
//格式化数据
//目标键=》POST键
$cols = ['company' => 'company', 'idcard' => 'idcard'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? trim($post[$key]) : '';
}
$model = new AcContact();
switch ($op) {
case 'add':
$mobile = trim($post['mobile']) ?? '';
if(!$mobile) $this->result('请传入手机号');
//查询通讯录手机号是否在库(如果在库,则取出相应资料,剩余逻辑由前端完成)
$hasOne = AcContact::find()->where(['mobile' => $mobile])->one();
if($hasOne){
$detail = $hasOne->toArray();
$this->result('保存失败,该手机号对应的通讯录已在库,系统自动现在为您调出该通讯录资料!',$detail,100);
}
$data['mobile'] = $mobile;
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
break;
case 'edit':
//编辑模式下没有改mobile避免校验重复通讯录
$id = (int)Yii::$app->request->get('id');
$_id = (int)$post['id'];
if(!$id != $_id) $this->result('id参数不匹配请检查');
$data['update_at'] = time();
break;
}
$data['pid'] = $this->pid;
$cols = ['status_code' => 'status_code', 'deleted' => 'deleted'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? (int)$post[$key] : 0;
}
return $data;
}
}

View File

@ -1,157 +1,270 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-05-22T07:35:09+08:00
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T09:17:49+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\gm\v1;
use Yii;
use yii\data\Pagination;
use yii\helpers\Url;
use addons\models\AcDriver;
use common\models\Member as User;
use common\models\UserExt;
class DriverController extends Common
{
public function beforeAction($action)
{
if (!$this->pid) {
$this->result('您正使用本系统内部接口,禁止非法链接使用!');
}
return parent::beforeAction($action);
}
public function actionIndex()
{
return $this->render('index');
$apis = [
'list'=>'司机列表',
'detail'=>'详情',
'get-status'=>'状态字典',
'add'=>'添加',
'edit'=>'编辑',
'delete'=>'删除',
'show'=>'显示',
'hide'=>'隐藏',
'ajax'=>'ajax操作'
];
$this->result('您正使用CMTS-GM系统司机管理接口', $apis, 200);
}
//司机列表
public function actionList()
{
$model = new AcDriver();
$where = $where2 = [];
$where2[] = 'and';
$where['pid'] = Yii::$app->session->get('pid');
$post = Yii::$app->request->post();
$search = [];
$search['title'] = isset($post['title']) ? trim(htmlspecialchars_decode($post['title'])) : '';
if (!empty($search['title'])) {
$where2[] = ['LIKE', 'name', $search['title']];
}
$where['deleted'] = 0;
$data = $model->find()->where($where);
if ($search['title']) {
$data = $data->andwhere($where2);
$s = $this->search();
$res = $s['res'];
if (!$res) {
$this->result('没有查询到相应的数据!', [], 0);
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => '20']);
$res = $data->offset($pages->offset)->limit($pages->limit)->all();
$status = Yii::$app->params['DriverStatus'];
return $this->render('list', [
$data= [
'total'=>$s['query']->count(),
'drivers' => $res,
'pager' => $pages,
'status' => $status,
'search' => $search
]);
'page'=>$this->page
];
$this->result('驾驶员查询成功!', $data, 200);
}
public function actionSelect()
public function actionDetail()
{
$id = (int)Yii::$app->request->get('id');
if(!$id) $this->result('请求错误未携带ID参数');
$model = new AcDriver();
$where = $where2 = [];
$where2[] = 'and';
$where['pid'] = Yii::$app->session->get('pid');
$post = Yii::$app->request->post();
$search = [];
$search['title'] = isset($post['title']) ? trim(htmlspecialchars_decode($post['title'])) : '';
if (!empty($search['title'])) {
$where2[] = ['LIKE', 'name', $search['title']];
}
$where['deleted'] = 0;
$data = $model->find()->where($where);
if ($search['title']) {
$data = $data->andwhere($where2);
$res = $model->findOne($id)->toArray();
if(!$res) $this->result('未查询到相应数据');
$this->result('驾驶员信息查询完成', $res, 200);
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => '20']);
$res = $data->offset($pages->offset)->limit($pages->limit)->all();
$status = Yii::$app->params['DriverStatus'];
$callback = !empty(Yii::$app->request->get('callback')) ? Yii::$app->request->get('callback') : 'driver';
return $this->render('select', [
'drivers' => $res,
'pager' => $pages,
'status' => $status,
'search' => $search,
'callback' => $callback
]);
}
public function actionNew()
public function actionGetStatus()
{
return $this->render('modify', []);
$status = Yii::$app->params['DriverStatus'];
$this->result('司机状态字典获取成功', $status, 200);
}
public function actionAdd()
{
//数据预检查、编排
$data = $this->preSave('add');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
$model = new AcDriver();
foreach ($data as $key=>$val) {
$model->$key = $val;
}
$res = $model->save();
$msg = '数据保存失败!';
if(!$res) $this->result($msg, [], 100);
//驾驶员资料注册系统用户(驾驶员需要可以登陆指定客户端以进行业务操作)
$this->driverToUser($data);
$msg = '数据保存成功!';
$return = [];
$return['id']= $model->attributes['id']; //获取插入后id;
$this->result($msg,$return, 200);
}
//编辑司机资料
public function actionEdit()
{
$model = new AcDriver();
$id = Yii::$app->request->get('id');
$res = $model->find()->where(['id' => $id])->one();
if ($res) {
$res = $res->toArray();
$detail = $this->preUpdate();
//数据预检查、编排
$data = $this->preSave('edit');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '数据编辑失败!';
if(!$res) $this->result($msg, [], 100);
//驾驶员资料注册系统用户(驾驶员需要可以登陆指定客户端以进行业务操作)
$this->driverToUser($data);
$msg = '数据编辑成功!';
$return = [];
$return['data']= $detail;
$this->result($msg,$return, 200);
}
return $this->render('modify', ['detail' => $res]);
}
//保存司机资料
public function actionSave()
//删除员工
public function actionDelete()
{
$post = Yii::$app->request->post();
$id = (int)$post['id'];
$pid = Yii::$app->session->get('pid');
$detail = $this->preUpdate();
$data = [];
$data['update_at'] = time();
$data['deleted'] = $detail->deleted + 1;
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '驾驶员数据删除失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '驾驶员数据删除成功!';
$this->result($msg,[], 200);
}
public function actionAjax()
{
$detail = $this->preUpdate();
$get = Yii::$app->request->get();
$msg = '';
$errorCode = 0;
$detail->update_at = time();
switch ($get['do']) {
case 'out':
$detail->status_code = 0;
$res = $detail->save();
if ($res) {
$msg = '司机离职标记成功';
$errorCode = 200;
} else {
$msg = '司机离职标记失败';
}
break;
case 'in':
$detail->status_code = 1;
$res = $detail->save();
if ($res) {
$msg = '司机在职标记成功';
$errorCode = 200;
} else {
$msg = '司机在职标记失败';
}
break;
default:
break;
}
$this->result($msg,[], $errorCode);
}
private function search(){
$pid = $this->pid;
$return = [];
$model = new AcDriver();
$where = $where2 = [];
$where['pid'] = $pid;
$post = $this->postdata;
$search = $post['search'] ?? [];
$search['title'] = isset($search['title']) ? trim(htmlspecialchars_decode($search['title'])) : '';
if (!empty($search['title'])) {
$where2[] = 'or';
$where2[] = ['LIKE', 'name', $search['title']];
$where2[] = ['LIKE', 'mobile', $search['title']];
}
$where['deleted'] = 0;
$data = $model->find()->where($where);
if ($search['title']) {
$data = $data->andwhere($where2);
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => $this->pageSize]);
$res = $data->offset($pages->offset)->limit($pages->limit)->orderBy('order_by DESC')->all();
return ['res'=>$res,'query'=>$data];
}
/*
* 数据更新前的预检查,返回对应关联数据
* 必须确保get与post数据中均包含需更新的数据id且一致
* */
private function preUpdate()
{
$id = (int)Yii::$app->request->get('id');
if(!$id) $this->result('请求错误未携带ID参数');
$post = $this->postdata;
if($post['id'] != $id) $this->result('传参id与请求数据不匹配',[],403);
$model = new AcDriver();
$res = $model->findOne($id);
if(!$res) $this->result('未查询到相应数据',[],404);
return $res;
}
/*
* 数据保存前的预检查(查重、参数校验等)
* 要保存的数据[],直接从post中取出
* @op操作类型add,edit……
* 校验机制:
* 编辑数据时必须用get方式传入参数id并与post进来的数据id进行比对只有一致时才能继续;
* 查重:禁止录入重复数据
* 返回:校验重组后的数据
* */
private function preSave($op)
{
$post = $this->postdata;
$name = trim($post['name']) ?? '';
if(!$name) $this->result('请传入司机姓名');
$data = [];
//格式化数据
//目标键=》POST键
$cols = ['name' => 'name', 'mobile' => 'mobile', 'idcard' => 'idcard'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? trim($post[$key]) : '';
}
//查询司机手机号是否在库
$hasDriver = AcDriver::find()->where(['mobile' => $data['mobile']])->one();
if ($hasDriver) {
if ($id && $id == $hasDriver->id) {
} else {
$id = $hasDriver->id;
\Yii::$app->getSession()->setFlash('danger', '保存失败,该手机号对应的司机已在库,系统自动现在为您调出该司机资料!');
return $this->redirect(['edit', 'id' => $id]);
$model = new AcDriver();
switch ($op) {
case 'add':
$mobile = trim($post['mobile']) ?? '';
if(!$mobile) $this->result('请传入手机号');
//查询通讯录手机号是否在库(如果在库,则取出相应资料,剩余逻辑由前端完成)
$hasOne = AcDriver::find()->where(['mobile' => $mobile])->one();
if($hasOne){
$detail = $hasOne->toArray();
$this->result('保存失败,该手机号对应的驾驶员已在库,系统自动现在为您调出该司机资料!',$detail,100);
}
$data['mobile'] = $mobile;
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
break;
case 'edit':
//编辑模式下没有改mobile避免校验重复性
$id = (int)Yii::$app->request->get('id');
$_id = (int)$post['id'];
if(!$id != $_id) $this->result('id参数不匹配请检查');
$data['update_at'] = time();
break;
}
$data['pid'] = $this->pid;
$cols = ['status_code' => 'status_code', 'deleted' => 'deleted'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? (int)$post[$key] : 0;
}
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
$data['pid'] = $pid;
//保存司机资料
$AcDriver = new AcDriver();
foreach ($data as $key => $val) {
$AcDriver->$key = $val;
}
if ($id) {
$AcDriver->id = $id;
unset($data['create_at']);
$res = $AcDriver->updateAll($data, ['id' => $id]);
} else {
$res = $AcDriver->save();
$id = $AcDriver->attributes['id']; //获取插入后id
return $data;
}
//驾驶员资料注册系统会员
private function driverToUser($data){
//查询司机对应的系统用户
$userModel = new User();
$user = $userModel->find()->where(['mobile' => $data['mobile']])->one();
if (empty($user)) {
if($user) return $user->id;
$userModel->username = !$data['name'] ? $data['mobile'] : $data['name'];
$userModel->mobile = $data['mobile'];
$userModel->email = $data['mobile'] . '@hiluker.com';
@ -161,108 +274,6 @@
$userModel->created_at = time();
$userModel->status = 1;
$userModel->save();
$user_id = $userModel->attributes['id']; //获取插入后id
}
\Yii::$app->getSession()->setFlash('info', '已成功注册该用户!');
if ($res) {
\Yii::$app->getSession()->setFlash('success', '司机信息保存成功!');
return $this->redirect(['edit', 'id' => $id]);
} else {
\Yii::$app->getSession()->setFlash('warning', '司机信息保存失败!');
return $this->goBack();
}
}
//删除员工
public function actionDelete()
{
$get = Yii::$app->request->get();
$post = Yii::$app->request->post();
$id = (int)$get['id'];
$data = $where = [];
$where['pid'] = Yii::$app->session->get('pid');
$where['id'] = $id;
$data['update_at'] = time();
$data['deleted'] = 1;
$model = new AcDriver();
foreach ($data as $key => $val) {
$model->$key = $val;
}
$model->id = $id;
$res = $model->updateAll($data, $where);
$return = [];
$return['url'] = Url::toRoute('driver/list');
$return['timeout'] = 3; //3秒后自动跳转
$return['status'] = 0;
if ($res) {
$return['msg'] = '司机删除成功';
$return['errorcode'] = 200;
$return['data'] = $id;
} else {
$return['msg'] = '司机删除失败';
$return['errorcode'] = 0;
}
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
public function actionAjax()
{
$get = Yii::$app->request->get();
$post = Yii::$app->request->post();
$id = (int)$get['id'];
$data = $where = [];
$where['pid'] = Yii::$app->session->get('pid');
$where['id'] = $id;
$data['update_at'] = time();
$model = new AcDriver();
$res = $model->find()->where(['id' => $id])->one();
$return = [];
$return['timeout'] = 1; //3秒后自动跳转
$return['status'] = 0;
$return['ajax'] = 1;
if ($res) {
$res = $res->toArray();
} else {
$return['msg'] = '司机数据不存在';
$return['errorcode'] = 404;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
switch ($get['do']) {
case 'out':
$data['status'] = 0;
$model->id = $id;
$res = $model->updateAll($data, $where);
if ($res) {
$return['msg'] = '司机离职标记成功';
$return['errorcode'] = 200;
$return['data'] = ['css' => 'info'];
} else {
$return['msg'] = '司机离职标记失败';
$return['errorcode'] = 0;
}
break;
case 'in':
$data['status'] = 1;
$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));
return $userModel->attributes['id']; //获取插入后id
}
}

View File

@ -1,147 +1,277 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-05-22T07:34:47+08:00
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T09:17:55+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\gm\v1;
use Yii;
use yii\data\Pagination;
use yii\helpers\Url;
use addons\models\AcEmployee;
use addons\models\AcStore;
use common\models\Member as User;
use addons\models\AcUserExt;
use function addons\functions\isMobile;
class EmployeeController extends Common
{
public function beforeAction($action)
{
if (!$this->pid) {
$this->result('您正使用本系统内部接口,禁止非法链接使用!');
}
return parent::beforeAction($action);
}
public function actionIndex()
{
return $this->render('index');
$apis = [
'list' => '员工清单',
'detail' => '员工详情',
'get-status'=>'状态字典',
'add'=>'添加',
'edit'=>'编辑',
'delete'=>'删除',
'show'=>'显示',
'hide'=>'隐藏',
'ajax'=>'ajax操作'
];
$this->result('您正使用CMTS-GM系统员工管理接口', $apis, 200);
}
public function actionGetStatus()
{
$status = Yii::$app->params['EmployeeStatus'];
$this->result('员工状态字典获取成功', $status, 200);
}
//用户列表
public function actionList()
{
$model = new AcEmployee();
$where = $where2 = [];
$where2[] = 'and';
$where['pid'] = Yii::$app->session->get('pid');
$post = Yii::$app->request->post();
$search = [];
$search['title'] = isset($post['title']) ? trim(htmlspecialchars_decode($post['title'])) : '';
if (!empty($search['title'])) {
$where2[] = ['LIKE', 'name', $search['title']];
}
$where['deleted'] = 0;
$data = $model->find()->where($where);
if ($search['title']) {
$data = $data->andwhere($where2);
$s = $this->search();
$res = $s['res'];
if (!$res) {
$this->result('没有查询到相应的数据!', [], 0);
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => '20']);
$res = $data->offset($pages->offset)->limit($pages->limit)->all();
$status = Yii::$app->params['EmployeeStatus'];
$gender = Yii::$app->params['gender'];
$model = new AcStore();
$where = [];
$where['pid'] = Yii::$app->session->get('pid');
$_stores = $model->find()->where($where)->all();
$stores = [];
foreach ($_stores as $s) {
$stores[$s->id] = $s->toArray();
}
return $this->render('list', [
$data= [
'total'=>$s['query']->count(),
'employees' => $res,
'pager' => $pages,
'stores' => $stores,
'status' => $status,
'gender' => $gender,
'search' => $search
]);
'stores' => $s['stores'],
'page'=>$this->page
];
$this->result('员工查询成功!', $data, 200);
}
public function actionSelect()
public function actionDetail()
{
$pid = $this->pid;
$post = $this->postdata;
$id = isset($post['id']) ? $post['id'] : 0;
if ($id <= 0) {
$this->result('查询参数错误!');
}
$model = new AcEmployee();
$where = $where2 = [];
$where2[] = 'and';
$where['pid'] = Yii::$app->session->get('pid');
$post = Yii::$app->request->post();
$search = [];
$search['title'] = isset($post['title']) ? trim(htmlspecialchars_decode($post['title'])) : '';
if (!empty($search['title'])) {
$where2[] = ['LIKE', 'name', $search['title']];
}
$where['deleted'] = 0;
$data = $model->find()->where($where);
if ($search['title']) {
$data = $data->andwhere($where2);
$detail = $model->findOne($id)->toArray();
if(!$detail) $this->result('未查询到相应数据');
$this->result('查询成功!', $detail, 200);
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => '20']);
$res = $data->offset($pages->offset)->limit($pages->limit)->all();
$status = Yii::$app->params['EmployeeStatus'];
$gender = Yii::$app->params['gender'];
$model = new AcStore();
$where = [];
$where['pid'] = Yii::$app->session->get('pid');
$_stores = $model->find()->where($where)->all();
$stores = [];
foreach ($_stores as $s) {
$stores[$s->id] = $s->toArray();
}
$callback = !empty(Yii::$app->request->get('callback')) ? Yii::$app->request->get('callback') : 'employee';
return $this->render('select', [
'employees' => $res,
'pager' => $pages,
'stores' => $stores,
'status' => $status,
'gender' => $gender,
'search' => $search,
'callback' => $callback
]);
}
public function actionNew()
public function actionAdd()
{
return $this->render('modify', []);
//数据预检查、编排
$data = $this->preSave('add');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
$model = new AcEmployee();
foreach ($data as $key=>$val) {
$model->$key = $val;
}
$res = $model->save();
$msg = '数据保存失败!';
if(!$res) $this->result($msg, [], 100);
//员工资料注册系统用户
$this->EmployeeToUser($data);
$msg = '数据保存成功!';
$return = [];
$return['id']= $model->attributes['id']; //获取插入后id;
$this->result($msg,$return, 200);
}
//编辑员工资料
public function actionEdit()
{
$model = new AcEmployee();
$id = Yii::$app->request->get('id');
$res = $model->find()->where(['id' => $id])->one();
if ($res) {
$res = $res->toArray();
$detail = $this->preUpdate();
//数据预检查、编排
$data = $this->preSave('edit');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '数据编辑失败!';
if(!$res) $this->result($msg, [], 100);
//员工资料注册系统用户
$this->EmployeeToUser($data);
$msg = '数据编辑成功!';
$return = [];
$return['data']= $detail;
$this->result($msg,$return, 200);
}
$store = AcStore::find()->where(['id' => $res['store_id']])->one();
if ($store) {
$res['store_title'] = $store->title;
}
return $this->render('modify', ['detail' => $res]);
}
//保存员工资料
public function actionSave()
//删除员工
public function actionDelete()
{
$post = Yii::$app->request->post();
$id = (int)$post['id'];
$pid = Yii::$app->session->get('pid');
$detail = $this->preUpdate();
$data = [];
$data['update_at'] = time();
$data['deleted'] = $detail->deleted + 1;
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '员工数据删除失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '员工数据删除成功!';
$this->result($msg,[], 200);
}
public function actionAjax()
{
$detail = $this->preUpdate();
$get = Yii::$app->request->get();
$msg = '';
$errorCode = 0;
$detail->update_at = time();
switch ($get['do']) {
case 'out':
$detail->status_code = 0;
$res = $detail->save();
if ($res) {
$msg = '员工离职标记成功';
$errorCode = 200;
} else {
$msg = '员工离职标记失败';
}
break;
case 'in':
$detail->status_code = 1;
$res = $detail->save();
if ($res) {
$msg = '员工在职标记成功';
$errorCode = 200;
} else {
$msg = '员工在职标记失败';
}
break;
default:
break;
}
$this->result($msg,[], $errorCode);
}
private function search(){
$pid = $this->pid;
$return = [];
$model = new AcEmployee();
$where = $where2 = [];
$where['pid'] = $pid;
$post = $this->postdata;
$search = $post['search'] ?? [];
$search['title'] = isset($search['title']) ? trim(htmlspecialchars_decode($search['title'])) : '';
if (!empty($search['title'])) {
$where2[] = 'or';
$where2[] = ['LIKE', 'name', $search['title']];
$where2[] = ['LIKE', 'mobile', $search['title']];
$where2[] = ['LIKE', 'adminer', $search['title']];
}
$store_id = isset($search['store_id']) ? (int)$search['store_id'] : 0;
if ($store_id) $where['store_id'] = $store_id;
$where['deleted'] = 0;
$data = $model->find()->where($where);
if ($search['title']) {
$data = $data->andwhere($where2);
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => $this->pageSize]);
$_orderby = 'orderby DESC,update_at DESC';
$res = $data->offset($pages->offset)->limit($pages->limit)->orderBy($_orderby)->all();
$AcStore = new AcStore();
$sids = [];
if($res){
foreach ($res as $k=>$v){
$sids[] = $v->store_id;
}
}
$stores = [];
if($sids){
$stores = $AcStore->find()->where(['IN','id',$sids])->asArray()->indexBy('id')->all();
}
return ['res'=>$res,'query'=>$data,'stores'=>$stores];
}
/*
* 数据更新前的预检查,返回对应关联数据
* 必须确保get与post数据中均包含需更新的数据id且一致
* */
private function preUpdate()
{
$id = (int)Yii::$app->request->get('id');
if(!$id) $this->result('请求错误未携带ID参数');
$post = $this->postdata;
if($post['id'] != $id) $this->result('传参id与请求数据不匹配',[],403);
$model = new AcEmployee();
$res = $model->findOne($id);
if(!$res) $this->result('未查询到相应数据',[],404);
return $res;
}
/*
* 数据保存前的预检查(查重、参数校验等)
* 要保存的数据[],直接从post中取出
* @op操作类型add,edit……
* 校验机制:
* 编辑数据时必须用get方式传入参数id并与post进来的数据id进行比对只有一致时才能继续;
* 查重:禁止录入重复数据
* 返回:校验重组后的数据
* */
private function preSave($op)
{
$post = $this->postdata;
$name = trim($post['name']) ?? '';
if(!$name) $this->result('请传入员工姓名');
$data = [];
//格式化数据
//目标键=》POST键
$cols = ['name' => 'name', 'mobile' => 'mobile'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? trim($post[$key]) : '';
$model = new AcEmployee();
switch ($op) {
case 'add':
$mobile = trim($post['mobile']) ?? '';
if(!isMobile($mobile)) $this->result('请传入正确的手机号');
//查询通讯录手机号是否在库(如果在库,则取出相应资料,剩余逻辑由前端完成)
$hasOne = AcEmployee::find()->where(['mobile' => $mobile])->one();
if($hasOne) $this->result('保存失败,该手机号对应的数据已在库!',$hasOne,100);
$data['mobile'] = $mobile;
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
break;
case 'edit':
//编辑模式下没有改mobile避免校验重复性
$id = (int)Yii::$app->request->get('id');
$_id = (int)$post['id'];
if(!$id != $_id) $this->result('id参数不匹配请检查');
$data['update_at'] = time();
break;
}
$cols = ['gender' => 'gender', 'status' => 'status', 'store_id' => 'store', 'deleted' => 'deleted'];
$data['pid'] = $this->pid;
$cols = ['status_code' => 'status_code', 'gender'=>'gender','status' => 'status', 'store_id' => 'store_id','deleted' => 'deleted','order_by'=>'order_by'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? (int)$post[$key] : 0;
}
@ -149,37 +279,17 @@
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? htmlspecialchars($post[$key]) : '';
}
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
$data['status_code'] = 1;
$data['pid'] = $pid;
//保存员工资料
$AcEmployee = new AcEmployee();
foreach ($data as $key => $val) {
$AcEmployee->$key = $val;
return $data;
}
//查询员工手机号是否在库
$employee = AcEmployee::find()->where(['mobile' => $data['mobile']])->one();
if ($employee) {
$id = $employee->id;
}
if ($id) {
$AcEmployee->id = $id;
unset($data['create_at']);
$res = $AcEmployee->updateAll($data, ['id' => $id]);
} else {
$res = $AcEmployee->save();
$id = $AcEmployee->attributes['id']; //获取插入后id
}
//查询员工对应的系统用户
//员工资料注册系统会员
private function EmployeeToUser($data){
//查询对应的系统用户
$userModel = new User();
$user = User::find()->where(['mobile' => $data['mobile']])->one();
if (empty($user)) {
$userModel->username = $data['mobile'];
$user = $userModel->find()->where(['mobile' => $data['mobile']])->one();
if($user) return $user->id;
$userModel->username = !$data['name'] ? $data['mobile'] : $data['name'];
$userModel->mobile = $data['mobile'];
$userModel->email = $data['mobile'] . '@hiluker.com';
$userModel->setPassword(Yii::$app->params['defaultUserPassword']);
@ -188,108 +298,6 @@
$userModel->created_at = time();
$userModel->status = 1;
$userModel->save();
$user_id = $userModel->attributes['id']; //获取插入后id
}
\Yii::$app->getSession()->setFlash('info', '已成功注册该用户!');
if ($res) {
\Yii::$app->getSession()->setFlash('success', '员工信息保存成功!');
return $this->redirect(['edit', 'id' => $id]);
} else {
\Yii::$app->getSession()->setFlash('warning', '员工信息保存失败!');
return $this->goBack();
}
}
//删除员工
public function actionDelete()
{
$get = Yii::$app->request->get();
$post = Yii::$app->request->post();
$id = (int)$get['id'];
$data = $where = [];
$where['pid'] = Yii::$app->session->get('pid');
$where['id'] = $id;
$data['update_at'] = time();
$data['deleted'] = 1;
$model = new AcEmployee();
foreach ($data as $key => $val) {
$model->$key = $val;
}
$model->id = $id;
$res = $model->updateAll($data, $where);
$return = [];
$return['url'] = Url::toRoute('employee/list');
$return['timeout'] = 3; //3秒后自动跳转
$return['status'] = 0;
if ($res) {
$return['msg'] = '员工删除成功';
$return['errorcode'] = 200;
$return['data'] = $id;
} else {
$return['msg'] = '员工删除失败';
$return['errorcode'] = 0;
}
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
public function actionAjax()
{
$get = Yii::$app->request->get();
$post = Yii::$app->request->post();
$id = (int)$get['id'];
$data = $where = [];
$where['pid'] = Yii::$app->session->get('pid');
$where['id'] = $id;
$data['update_at'] = time();
$model = new AcEmployee();
$res = $model->find()->where(['id' => $id])->one();
$return = [];
$return['timeout'] = 1; //3秒后自动跳转
$return['status'] = 0;
$return['ajax'] = 1;
if ($res) {
$res = $res->toArray();
} else {
$return['msg'] = '员工数据不存在';
$return['errorcode'] = 404;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
switch ($get['do']) {
case 'out':
$data['status'] = 0;
$model->id = $id;
$res = $model->updateAll($data, $where);
if ($res) {
$return['msg'] = '员工离职标记成功';
$return['errorcode'] = 200;
$return['data'] = ['css' => 'info'];
} else {
$return['msg'] = '员工离职标记失败';
$return['errorcode'] = 0;
}
break;
case 'in':
$data['status'] = 1;
$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));
return $userModel->attributes['id']; //获取插入后id
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,19 +1,12 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-05-10T01:13:34+08:00
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T09:18:41+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\gm\v1;
use Yii;
use yii\helpers\Url;
use yii\data\Pagination;
use yii\web\UploadedFile;
use common\models\CAttachment;
use backend\controllers\Common;
class ImageController extends Common
{
@ -30,29 +23,47 @@
$apis = [
'list' => '图片列表',
];
$this->result('您正使用CMTS系统订单管理接口!', $apis, 200);
$this->result('您正使用CMTS-GM系统图库管理接口!', $apis, 200);
}
public function actionList()
{
$siteId = Yii::$app->params['siteId'];
$session = Yii::$app->session;
$s = $this->search();
$res = $s['res'];
if (!$res) {
$this->result('没有查询到相应的数据!', [], 0);
}
//附件网址前缀
$src = Url::base(TRUE) . "/../../upload"; //在网站根目录下使用upload/pics目录;适合使用yii框架主目录入口而非绑定子域名的情形
if ($_SERVER['DOCUMENT_ROOT'] . '/upload' != Yii::getAlias("@upload")) {
// $src = Url::toRoute(['attach/index','img'=>'']); //换用网络加载转换的方式-反应慢
$src = Yii::$app->params['attachSrc'] . Yii::$app->params['attachDir'];
}
$data= [
'total'=>$s['query']->count(),
'images' => $res,
'src' => $src,
'page'=>$this->page
];
$this->result('图片查询成功', $data, 200);
}
private function search(){
$pid = $this->pid;
$siteId = Yii::$app->params['siteId'];
$return = [];
$model = new CAttachment();
$search = $where = [];
$where = [];
$where[] = 'and';
$where[] = ['=', 'status_code', 1];
$where[] = ['=', 'type', 0];
$where[] = ['=', 'siteid', $siteId];
$where[] = ['=', 'pid', $pid];
$post = $this->postdata;
if (isset($post['search'])) {
$search = $post['search'];
$session->set('images::search', $search);
} else if ($session->get('images::search')) {
$search = $session->get('images::search');
}
$post = $this->postdata;
$search = $post['search'] ?? [];
if ($search) {
if ($search['create_m']) {
$start = strtotime($search['create_m']);
@ -76,26 +87,12 @@
$where[] = ['LIKE', 'title', $search['title']];
}
}
//分页
$orderby = ['id' => SORT_DESC];
$Attachment = new Attachment();
$list = $Attachment->getData($model, $where, $orderby);
$pager = $Attachment->getPagination();
//附件网址前缀
$src = Url::base(TRUE) . "/../../upload"; //在网站根目录下使用upload/pics目录;适合使用yii框架主目录入口而非绑定子域名的情形
if ($_SERVER['DOCUMENT_ROOT'] . '/upload' != Yii::getAlias("@upload")) {
// $src = Url::toRoute(['attach/index','img'=>'']); //换用网络加载转换的方式-反应慢
$src = Yii::$app->params['attachSrc'] . Yii::$app->params['attachDir'];
}
$data = $model->find()->where($where);
$callback = isset($_GET['callback']) ? $_GET['callback'] : 'thumb';
$data = [
'list' => $list,
'pager' => $pager,
'src' => $src,
'callback' => $callback
];
$this->result('', $data, 200);
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => $this->pageSize]);
$_orderby = 'id DESC';
$res = $data->offset($pages->offset)->limit($pages->limit)->orderBy($_orderby)->all();
return ['res'=>$res,'query'=>$data];
}
}

View File

@ -1,13 +1,5 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-05-13T09:20:03+08:00
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T09:18:46+08:00
# @Copyright: www.hiluker.cn
//主入口页
namespace api\controllers\gm\v1;
@ -46,7 +38,7 @@
$apis = [
'h5data' => '拉取APP首页数据',
];
$this->result('您正使用CMTS系统接口!', $apis, 200);
$this->result('您正使用CMTS-GM系统接口!', $apis, 200);
}
public function actionH5data()

View File

@ -1,11 +1,5 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-05-22T07:35:53+08:00
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T09:18:58+08:00
# @Copyright: www.hiluker.cn
//前端管理员入口
namespace api\controllers\gm\v1;
@ -30,7 +24,7 @@
$apis = [
'login' => '登陆'
];
$this->result('您正使用CMTS系统用户管理接口!', $apis, 200);
$this->result('您正使用CMTS-GM系统用户管理接口!', $apis, 200);
}
//用户登陆

File diff suppressed because it is too large Load Diff

View File

@ -1,19 +1,13 @@
<?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:00:19+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\gm\v1;
use Yii;
use yii\data\Pagination;
use addons\models\AcEmployee;
use addons\models\AcOrderPre;
use addons\models\AcStore;
use Yii;
use yii\data\Pagination;
class OrderpreController extends Common
{
@ -30,9 +24,17 @@
$apis = [
'list' => '搜索询单',
'detail' => '询单详情',
'create' => '创建询单'
'get-status'=>'获取询价单状态字典',
'add' => '创建询单',
'edit'=>'编辑',
'cancel'=>'取消',
'delete'=>'删除',
'ajax'=>[
'show'=>'显示',
'hide'=>'隐藏'
]
];
$this->result('您正使用CMTS系统询价单管理接口', $apis, 200);
$this->result('您正使用CMTS-GM系统询价单管理接口!', $apis, 200);
}
//订单列表
@ -43,56 +45,201 @@
if (!$res) {
$this->result('没有查询到相应的数据!', [], 0);
}
$_res = $this->showOrders($res);
$data = $s['data'];
$this->showOrder($res, $data);
$return = [
'total' => $data->count(),
'orders' => $_res['orders'],
'employees' => $_res['employees'],
'stores' => $_res['stores'],
'page' => $this->page
];
$this->result('订单查询成功',$return,200);
}
private function search()
public function actionDetail()
{
$order = $this->preUpdate();
$detail = $this->showOrder($order);
$this->result('查询成功!', $detail, 200);
}
public function actionGetStatus()
{
$status = Yii::$app->params['OrderPreStatus'];
$this->result('查询成功!', $status, 200);
}
public function actionCancel()
{
$order = $this->preUpdate();
$res = $this->userPrivilege($this->user_info,'orderPreEdit',$order);
if(!$res) $this->result('您没有操作权限!',[],403);
if ($order->status_code <= 0 || $order->status_code >= 99) {
$this->result('订单已取消或已经完成,不允许操作!',[],403);
}
$order->status_code = -1;
$order->save();
$this->result('已取消!', $order, 200);
}
/**
* 创建咨询单
* @mid [int] 平台租户身份
* @uid [int] 前端用户身份
*/
public function actionAdd()
{
//数据预检查、编排
$data = $this->preSave('add');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
$model = new AcOrderPre();
foreach ($data as $key=>$val) {
$model->$key = $val;
}
$res = $model->save();
$msg = '数据保存失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '数据保存成功!';
$return = [];
$return['id']= $model->attributes['id']; //获取插入后id;
$this->result($msg,$return, 200);
}
/**
* 更新咨询单
* @mid [int] 平台租户身份
* @uid [int] 前端用户身份
*/
public function actionEdit()
{
$detail = $this->preUpdate();
$res = $this->userPrivilege($this->user_info,'orderPreEdit',$detail);
if(!$res) $this->result('您没有操作权限!',[],403);
//数据预检查、编排
$data = $this->preSave('edit');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '数据编辑失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '数据编辑成功!';
$return = [];
$return['data']= $detail;
$this->result($msg,$return, 200);
}
//删除记录
public function actionDelete()
{
$detail = $this->preUpdate();
$res = $this->userPrivilege($this->user_info,'orderPreDelete',$detail);
if(!$res) $this->result('您没有操作权限!',[],403);
if ($detail->deleted != 0) {
$this->result('数据已被删除过,操作无效', [], 400);
}
$data = [];
$data['update_at'] = time();
$data['deleted'] = $detail->deleted + 1;
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '询单记录删除失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '询单记录删除成功!';
$this->result($msg,[], 200);
}
public function actionAjax()
{
$detail = $this->preUpdate();
$get = Yii::$app->request->get();
$msg = '';
$errorCode = 0;
$_time = time();
$detail->update_at = $_time;
$res = true;
switch ($get['do']) {
case 'hide':
if ($detail->status_code != 0) {
$detail->status_code = 0;
$res = $detail->save();
}
if ($res) {
$msg = '记录隐藏标记成功';
$errorCode = 200;
} else {
$msg = '记录隐藏标记失败';
$errorCode = 0;
}
break;
default:
break;
}
$this->result($msg, [], $errorCode);
}
/*onlyMe,预置搜索条件,仅查看本人运单*/
private function search($onlyMe=false)
{
$pid = $this->pid;
$return = [];
$model = new AcOrderPre();
$where = $orwhere = [];
$where = [];
$where[] = 'and';
$where[] = ['=', 'pid', $pid];
$post = $this->postdata;
$get = yii::$app->request->get();
$search = isset($post['search']) ? $post['search'] : [];
if($onlyMe){
//预置搜索条件,只允许查询与自己完全相关的订单
$where[] = ['=', 'from_uid', $this->user_id];
$search['phone'] = $this->user_info->mobile;
$where[] = ['=', 'from_mobile', $search['phone']];
if (isset($search['carno']) && !empty($search['carno'])) {
$search['carno'] = trim($search['carno']);
$where[] = ['LIKE', 'car_no', $search['carno']];
}
if (isset($search['phone']) && !empty($search['phone'])) {
$search['phone'] = trim($search['phone']);
$where[] = ['=', 'from_mobile', $search['phone']];
}
if (isset($search['carno']) && !empty($search['carno'])) {
$search['carno'] = trim($search['carno']);
$where[] = ['LIKE', 'car_no', $search['carno']];
}
if (isset($search['city']) && !empty($search['city'])) {
$search['city'] = trim($search['city']);
$where[] = ['LIKE', 'aim_city', $search['city']];
}
$search['employee'] = isset($search['employee']) ? (int)$search['employee'] : '';
$EmployeeModel = new AcEmployee();
$search['employee'] = isset($search['employee']) ? (int)$search['employee'] : 0;
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['sotre_id'])) {
$search['store_id'] = isset($search['store_id']) ? (int)$search['store_id'] : 0;
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['start_province'] = isset($search['start_province']) ? trim($search['start_province']) : '';
@ -119,28 +266,107 @@
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']);
}
$deleted = 0;
$where[] = ['=', 'deleted', $deleted];
$where[] = ['=', 'deleted', 0];
$page = $this->page;
$pageSize = $this->pageSize;
$data = $model->find()->where($where)->andwhere($orwhere);
$data = $model->find()->where($where);
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => $pageSize]);
$pages->setPage($page - 1, TRUE); //设置分页的当前页面值
$_orderby = 'update_at DESC,id DESC';
$_orderby = 'update_at DESC,date ASC,id DESC';
$res = $data->offset($pages->offset)->limit($pages->limit)->orderby($_orderby)->all();
return ['res' => $res, 'data' => $data];
}
private function showOrder($orderRes, $data)
/*
* 数据更新前的预检查,返回对应关联数据
* 必须确保get与post数据中均包含需更新的数据id且一致
* */
private function preUpdate()
{
$id = (int)Yii::$app->request->get('id');
if(!$id) $this->result('请求错误未携带ID参数');
$post = $this->postdata;
if($post['id'] != $id) $this->result('传参id与请求数据不匹配',[],403);
$model = new AcOrderPre();
$res = $model->findOne($id);
if(!$res) $this->result('未查询到相应数据',[],404);
if($res->pid != $this->pid) $this->result('非本平台数据,不允许操作',[],401);
return $res;
}
/*
* 数据保存前的预检查(查重、参数校验等)
* 要保存的数据[],直接从post中取出
* @op操作类型add,edit……
* 校验机制:
* 编辑数据时必须用get方式传入参数id并与post进来的数据id进行比对只有一致时才能继续;
* 查重:禁止录入重复数据
* 返回:校验重组后的数据
* */
private function preSave($op)
{
$post = $this->postdata;
$data = [];
$_time = time();
//格式化数据
//目标键=》POST键
switch ($op) {
case 'add':
$data['from_uid'] = $this->user_id;
$data['status_code'] = 1; //订单处于创建待审核状态
$data['create_at'] = $_time;
$data['update_at'] = $data['create_at'];
break;
case 'edit':
$id = (int)Yii::$app->request->get('id');
$_id = (int)$post['id'];
if(!$id != $_id) $this->result('id参数不匹配请检查');
$data['update_at'] = $_time;
break;
}
$data['pid'] = $this->pid;
$cols = ['start_province' => 'start_province', 'start_city' => 'start_city', 'aim_province' => 'aim_province', 'aim_city' => 'aim_city',
'car_title' => 'car_title', 'car_no' => 'car_no', 'price' => 'price',
'bind' => 'bind', 'receptionist' => "receptionist",
'from_name' => 'from_name', 'from_mobile' => 'from_mobile',
];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? trim($post[$key]) : '';
}
$cols = ['car_value' => 'car_value', 'from_gender' => 'from_gender','from_mid'=>'from_mid','status_code'=>'status_code'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? (int)$post[$key] : 0;
}
$data['employee_id'] = isset($post['employee_id']) ? (int)$post['employee_id'] : 0;
$data['store_id'] = isset($post['store_id']) ? (int)$post['store_id'] : 0;
$cols = ['remark' => 'remark', 'car' => 'car'];
foreach ($cols as $col => $key) {
if (isset($post[$key]) && $post[$key] != '') {
$data[$col] = htmlspecialchars($post[$key]);
}
}
/*@date: 1649952000000*/
$data['date'] = isset($post['plan_date']) ? $post['plan_date'] / 1000 : strtotime('+7 day');
// 计划时间默认7天后
return $data;
}
/*
订单数据显示
*/
private function showOrders($orderRes)
{
$status = Yii::$app->params['OrderPreStatus'];
$cids = $sids = $eids = $mids = [];
$sids = $eids = [];
if ($orderRes) {
foreach ($orderRes as $r) {
$sids[$r->store_id] = $r->store_id;
@ -148,9 +374,6 @@
}
}
$where = [];
$where['pid'] = Yii::$app->session->get('pid');
$model = new AcStore();
$_stores = $model->find()->where(['in', 'id', $sids])->all();
$stores = [];
@ -189,33 +412,13 @@
}
unset($s);
$return = [];
$return['code'] = 200;
$return['msg'] = '订单查询成功!';
$return['data'] = [
'total' => $data->count(),
'orders' => $orders,
'employees' => $employees,
'stores' => $stores,
'page' => $this->page
];
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
$data = ['orders'=>$orders,'employees'=>$employees,'stores'=>$stores];
return $data;
}
public function actionDetail()
private function showOrder($order)
{
$pid = $this->pid;
$status = Yii::$app->params['OrderStatus'];
$post = $this->postdata;
$id = isset($post['id']) ? $post['id'] : 0;
if ($id <= 0) {
$this->result('查询参数错误!');
}
$AcOrderPre = new AcOrderPre();
$order = $AcOrderPre->findOne($id);
$detail = $order->toArray();
if ($detail['store_id']) {
$model = new AcStore();
$store = $model->findOne($detail['store_id']);
@ -233,8 +436,8 @@
}
$sn = '00000000000'; //11位
$sn = substr($sn, 0, 11 - strlen($id));
$sn .= $id;
$sn = substr($sn, 0, 11 - strlen($order->id));
$sn .= $order->id;
$detail['sn'] = $detail['sn'] ? $detail['sn'] : $sn;
$weekdays = [0 => '日', 1 => '一', 2 => '二', 3 => '三', 4 => '四', 5 => '五', 6 => '六'];
@ -247,172 +450,6 @@
foreach ($unsets as $us) {
unset($detail[$us]);
}
$this->result('查询成功!', $detail, 200);
}
public function actionCancel()
{
$pid = $this->pid;
$status = Yii::$app->params['OrderStatus'];
$post = $this->postdata;
$id = isset($post['id']) ? $post['id'] : 0;
if ($id <= 0) {
$this->result('未指定订单!');
}
$AcOrderPre = new AcOrderPre();
$order = $AcOrderPre->findOne($id);
if ($order->from_uid != $this->user_id) {
$this->result('非本人订单,不允许操作!');
}
if ($order->status_code <= 0 || $order->status_code >= 99) {
$this->result('订单已取消或已经完成,不允许操作!');
}
$order->status_code = -1;
$order->save();
$this->result('已取消!', $order->toArray(), 200);
}
public function actionCreate()
{
/**
* 创建咨询单
* @mid [int] 平台租户身份
* @uid [int] 前端用户身份
*/
$get = Yii::$app->request->get();
$post = $this->postdata;
$pid = $this->pid;
//格式化数据 为空的项则不修改
$data['from_uid'] = $this->user_id;
//目标键=》POST键
$cols = ['start_province' => 'start_province', 'start_city' => 'start_city', 'aim_province' => 'aim_province', 'aim_city' => 'aim_city',
'car_title' => 'car_title', 'car_no' => 'car_no', 'price' => 'price',
'bind' => 'bind', 'receptionist' => "receptionist",
'from_name' => 'from_name', 'from_mobile' => 'from_mobile',
];
foreach ($cols as $col => $key) {
if (isset($post[$key]) && $post[$key] != '') {
$data[$col] = trim($post[$key]);
}
}
$cols = ['car_value' => 'car_value', 'from_gender' => 'from_gender'];
foreach ($cols as $col => $key) {
$data[$col] = 0;
if (isset($post[$key]) && $post[$key] != '') {
$data[$col] = (int)$post[$key];
}
}
$cols = ['remark' => 'remark', 'car' => 'car'];
foreach ($cols as $col => $key) {
if (isset($post[$key]) && $post[$key] != '') {
$data[$col] = htmlspecialchars($post[$key]);
}
}
/*@date: 1649952000000*/
$data['date'] = isset($post['plan_date']) ? $post['plan_date'] / 1000 : strtotime('+7 day');
// 计划时间默认7天后
$mid = isset($post['mid']) ? (int)$post['mid'] : 0;
$data['from_mid'] = $mid;
$data['status_code'] = 1; //订单处于创建待审核状态
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
$data['pid'] = $pid;
$data['employee_id'] = isset($post['employee_id']) ? (int)$post['employee_id'] : 0;
$data['store_id'] = isset($post['store_id']) ? (int)$post['store_id'] : 0;
//保存资料
$AcOrderPre = new AcOrderPre();
foreach ($data as $key => $val) {
$AcOrderPre->$key = $val;
}
$res = $AcOrderPre->save();
$id = $AcOrderPre->attributes['id']; //获取插入后id
if ($res) {
$this->result('询单保存成功!', ['id' => $id], 200);
} else {
$this->result('询单保存失败!', [], 100);
}
}
/*
订单数据显示格式化
*/
public function actionEdit()
{
/**
* 更新咨询单
* @mid [int] 平台租户身份
* @uid [int] 前端用户身份
*/
$get = Yii::$app->request->get();
$post = $this->postdata;
$id = isset($post['id']) ? (int)$post['id'] : 0;
if (!$id) {
$this->result('未指定询价单!');
}
$model = new AcOrderPre();
$detail = $model->findOne($id);
if (!$detail) {
$this->result('询价单信息不存在!');
}
if ($detail->pid != $this->pid) {
$this->result('非法操作!');
}
if ($detail->from_uid != $this->user_id) {
$this->result('非法操作,请检查订单归属!');
}
//格式化数据 为空的项则不修改
//目标键=》POST键
$cols = ['start_province' => 'start_province', 'start_city' => 'start_city', 'aim_province' => 'aim_province', 'aim_city' => 'aim_city',
'car_title' => 'car_title', 'car_no' => 'car_no',
'from_name' => 'from_name', 'from_mobile' => 'from_mobile',
];
foreach ($cols as $col => $key) {
if (isset($post[$key]) && $post[$key] != '') {
$detail->$col = trim($post[$key]);
}
}
$cols = ['car_value' => 'car_value', 'from_gender' => 'from_gender'];
foreach ($cols as $col => $key) {
if (isset($post[$key]) && $post[$key] != '') {
$detail->$col = (int)$post[$key];
}
}
$cols = ['remark' => 'remark'];
foreach ($cols as $col => $key) {
if (isset($post[$key]) && $post[$key] != '') {
$detail->$col = htmlspecialchars($post[$key]);
}
}
$detail->date = isset($post['plan_date']) ? $post['plan_date'] / 1000 : $detail->date;
$detail->status_code = 1; //标记订单处于创建待审核状态
$detail->update_at = time();
//保存资料
$res = $detail->save();
if ($res) {
$this->result('询单保存成功!', ['id' => $id], 200);
} else {
$this->result('询单保存失败!', [], 100);
}
return $detail;
}
}

View File

@ -1,12 +1,5 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-05-22T07:39:14+08:00
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T09:19:45+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\gm\v1;
use Yii;
@ -19,230 +12,277 @@
//主界面
public function actionIndex()
{
return $this->render('../layouts/dev', []);
$apis = [
'list' => '平台清单',
'detail' => '平台详情',
'add'=>'添加',
'edit'=>'编辑',
'exts'=>'扩展参数',
'delete'=>'删除',
'show'=>'显示',
'hide'=>'隐藏',
'ajax'=>'ajax操作'
];
$this->result('您正使用CMTS-GM系统平台管理接口', $apis, 200);
}
public function actionList()
{
$s = $this->search();
$res = $s['res'];
if (!$res) {
$this->result('没有查询到相应的数据!', [], 0);
}
$data= [
'total'=>$s['query']->count(),
'plats' => $res,
'stores' => $s['stores'],
'page'=>$this->page
];
$this->result('平台查询成功!', $data, 200);
}
public function actionDetail()
{
$pid = $this->pid;
$post = $this->postdata;
$id = isset($post['id']) ? $post['id'] : 0;
if ($id <= 0) {
$this->result('查询参数错误!');
}
$model = new AcPlat();
$search = $where = [];
$detail = $model->findOne($id)->toArray();
if(!$detail) $this->result('未查询到相应数据');
$exts = $this->showExt($detail);
foreach ($exts as $k => $v) {
$detail[$k] = $v;
}
$this->result('查询成功!', $detail, 200);
}
public function actionAdd()
{
//数据预检查、编排
$data = $this->preSave('add');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
$model = new AcPlat();
foreach ($data as $key=>$val) {
$model->$key = $val;
}
$res = $model->save();
$msg = '数据保存失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '数据保存成功!';
$return = [];
$return['id']= $model->attributes['id']; //获取插入后id;
$this->result($msg,$return, 200);
}
public function actionEdit()
{
$detail = $this->preUpdate();
//数据预检查、编排
$data = $this->preSave('edit');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '数据编辑失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '数据编辑成功!';
$return = [];
$return['data']= $detail;
$this->result($msg,$return, 200);
}
//编辑平台参数
public function actionExts()
{
$pid = $this->pid;
if(!$pid) $this->result('您正使用本系统内部接口,禁止非法链接使用!');
if($this->user_id !=1) $this->result('修改失败,平台配置仅支持超级管理员修改!');
$detail = $this->preUpdate();
//数据预检查、编排
$data = $this->preSave('edit');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
$exts = $this->saveExt();
if(!$exts) $this->result('参数为空,保存失败', [], 100);
$detail->remark = $exts;
$res = $detail->save();
$msg = '参数编辑失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '参数编辑成功!';
$this->result($msg,[], 200);
}
public function actionDelete()
{
$detail = $this->preUpdate();
$data = [];
$data['update_at'] = time();
$data['deleted'] = $detail->deleted + 1;
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '平台删除失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '平台删除成功!';
$this->result($msg,[], 200);
}
public function actionAjax()
{
$detail = $this->preUpdate();
$get = Yii::$app->request->get();
$msg = '';
$errorCode = 0;
$detail->update_at = time();
switch ($get['do']) {
case 'hide':
$detail->status_code = 0;
$res = $detail->save();
if ($res) {
$msg = '平台隐藏标记成功';
$errorCode = 200;
} else {
$msg = '平台隐藏标记失败';
}
break;
case 'show':
$detail->status_code = 1;
$res = $detail->save();
if ($res) {
$msg = '平台显示标记成功';
$errorCode = 200;
} else {
$msg = '平台显示标记失败';
}
break;
default:
break;
}
$this->result($msg,[], $errorCode);
}
private function search(){
$return = [];
$model = new AcPlat();
$where = [];
$where[] = 'and';
if (isset($_POST['title']) && $_POST['title'] != '') {
$search['title'] = $_POST['title'];
$post = $this->postdata;
$search = $post['search'] ?? [];
$search['title'] = isset($search['title']) ? trim(htmlspecialchars_decode($search['title'])) : '';
if (!$search['title']) {
$where[] = ['LIKE', 'title', $search['title']];
}
$where[] = ['=', 'deleted', 0];
$data = $model->find()->where($where);
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => '5']);
$res = $data->orderby('orderby DESC')->offset($pages->offset)->limit($pages->limit)->all();
$status = Yii::$app->params['CommonStatus'];
$plats = [];
foreach ($res as $r) {
$plats[$r->id] = $r->toArray();
}
return $this->render('list', [
'plats' => $plats,
'pager' => $pages,
'search' => $search,
'status' => $status
]);
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => $this->pageSize]);
$_orderby = 'orderby DESC,update_at DESC';
$res = $data->offset($pages->offset)->limit($pages->limit)->orderBy($_orderby)->indexBy('id')->all();
return ['res'=>$res,'query'=>$data];
}
public function actionNew()
{
return $this->render('modify', []);
}
public function actionEdit()
/*
* 数据更新前的预检查,返回对应关联数据
* 必须确保get与post数据中均包含需更新的数据id且一致
* */
private function preUpdate()
{
$id = (int)Yii::$app->request->get('id');
if(!$id) $this->result('请求错误未携带ID参数');
$post = $this->postdata;
if($post['id'] != $id) $this->result('传参id与请求数据不匹配',[],403);
$model = new AcPlat();
$id = Yii::$app->request->get('id');
$res = $model->findOne($id);
if ($res) {
$res = $res->toArray();
}
return $this->render('modify', ['detail' => $res]);
if(!$res) $this->result('未查询到相应数据',[],404);
return $res;
}
public function actionSave()
/*
* 数据保存前的预检查(查重、参数校验等)
* 要保存的数据[],直接从post中取出
* @op操作类型add,edit……
* 校验机制:
* 编辑数据时必须用get方式传入参数id并与post进来的数据id进行比对只有一致时才能继续;
* 查重:禁止录入重复数据
* 返回:校验重组后的数据
* */
private function preSave($op)
{
$post = Yii::$app->request->post();
$post = $this->postdata;
$title = trim($post['title']) ?? '';
if(!$title) $this->result('请传入平台名称');
$data = [];
$id = $post['id'];
//格式化数据
//目标键=》POST键
$cols = ['title' => 'title', 'thumb' => 'thumb'];
$model = new AcPlat();
switch ($op) {
case 'add':
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
break;
case 'edit':
//编辑模式下没有改mobile避免校验重复性
$id = (int)Yii::$app->request->get('id');
$_id = (int)$post['id'];
if(!$id != $_id) $this->result('id参数不匹配请检查');
$data['update_at'] = time();
break;
}
$cols = ['thumb' => 'thumb'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? trim($post[$key]) : '';
}
$cols = ['orderby' => 'orderby', 'deleted' => 'deleted'];
$cols = ['status_code' => 'status_code', 'deleted' => 'deleted','order_by'=>'order_by'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? (int)$post[$key] : 0;
}
$data['update_at'] = time();
$data['create_at'] = $data['update_at'];
$model = new AcPlat();
foreach ($data as $key => $val) {
$model->$key = $val;
}
if ($id) {
$model->id = $id;
$res = $model->updateAll($data, ['id' => $id]);
} else {
$res = $model->save();
$id = $model->attributes['id']; //获取插入后id
$exts = $this->saveExt();
if($exts) $data['remark'] = $exts;
return $data;
}
if ($res) {
\Yii::$app->getSession()->setFlash('success', '平台保存成功!');
return $this->redirect(['edit', 'id' => $id]);
} else {
\Yii::$app->getSession()->setFlash('warning', '平台保存失败!');
return $this->goBack();
}
/*
* 格式化显示扩展字段
* @data 平台数据[]
* 返回[]
* */
private function showExt($data){
$json = $data['remark'];
$res = json_decode($json,true);
return $res;
}
public function actionExt()
private function saveExt()
{
$session = Yii::$app->session;
if (isset($_GET['pid']) && (int)$_GET['pid'] > 0) {
$session->set('pid', (int)$_GET['pid']);
}
$pid = $session->get('pid');
if (!$pid) {
$url = Url::toRoute(['index/index', 'pid' => 0]);
header('location:' . $url);
exit;
}
$model = new AcPlat();
$res = $model->findOne($pid);
$detail = [];
if ($res) {
$detail = json_decode($res->remark, TRUE);
}
return $this->render('ext', ['detail' => $detail]);
}
public function actionExtsave()
{
$user_id = Yii::$app->user->identity->getId();
if ($user_id != 1) {
\Yii::$app->getSession()->setFlash('warning', '修改失败,平台配置仅支持超级管理员修改!');
return $this->redirect(['plat/ext']);
}
$post = Yii::$app->request->post();
$session = Yii::$app->session;
$pid = $session->get('pid');
$post = $this->postdata;
$data = [];
//目标键=》POST键
$cols = ['cw_phone' => 'cw_phone'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? trim($post[$key]) : '';
}
$remark = json_encode($data, JSON_UNESCAPED_UNICODE);
$model = new AcPlat();
$model->remark = $remark;
$res = $model->updateAll(['remark' => $remark], ['id' => $pid]);
if ($res) {
\Yii::$app->getSession()->setFlash('success', '参数保存成功!');
} else {
\Yii::$app->getSession()->setFlash('warning', '参数保存失败!');
}
return $this->redirect(['plat/ext']);
}
public function actionDelete()
{
$get = Yii::$app->request->get();
$post = Yii::$app->request->post();
$id = (int)$get['id'];
$data = $where = [];
$where['pid'] = Yii::$app->session->get('pid');
$where['id'] = $id;
$data['update_at'] = time();
$data['deleted'] = 1;
$model = new AcPlat();
foreach ($data as $key => $val) {
$model->$key = $val;
}
$model->id = $id;
$res = $model->updateAll($data, $where);
$return = [];
$return['url'] = Url::toRoute('plat/list');
$return['timeout'] = 3; //3秒后自动跳转
$return['status'] = 0;
if ($res) {
$return['msg'] = '平台删除成功';
$return['errorcode'] = 200;
$return['data'] = $id;
} else {
$return['msg'] = '平台删除失败';
$return['errorcode'] = 0;
}
exit(json_encode($return));
}
public function actionAjax()
{
$get = Yii::$app->request->get();
$post = Yii::$app->request->post();
$id = (int)$get['id'];
$data = $where = [];
$where['id'] = $id;
$data['update_at'] = time();
$model = new AcPlat();
$res = $model->findOne($id);
$return = [];
$return['timeout'] = 1; //3秒后自动跳转
$return['status'] = 0;
$return['ajax'] = 1;
if ($res) {
$res = $res->toArray();
} else {
$return['msg'] = '平台数据不存在';
$return['errorcode'] = 404;
exit(json_encode($return));
}
switch ($get['do']) {
case 'hide':
$data['status_code'] = 0;
$model->id = $id;
$res = $model->updateAll($data, $where);
if ($res) {
$return['msg'] = '平台隐藏成功';
$return['errorcode'] = 200;
$return['data'] = ['css' => 'info'];
} else {
$return['msg'] = '平台隐藏失败';
$return['errorcode'] = 0;
}
break;
case 'show':
$data['status_code'] = 1;
$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));
if(!$data) return false;
return json_encode($data, JSON_UNESCAPED_UNICODE);
}
}

View File

@ -1,5 +0,0 @@
<?php
# @Author: fm453
# @Date: 2025/3/10
# @updated: 上午11:27
# @Email: 1280880631@qq.com

View File

@ -1,13 +1,6 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-05-22T07:38:52+08:00
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T09:13:59+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\gm\v1;
namespace api\controllers\gm\v1;
use Yii;
use vendor\aliyun\dysms\Sms;
@ -28,9 +21,11 @@
public function actionIndex()
{
$apis = [
'vcode' => '获取短信验证码'
'vcode' => '获取短信验证码',
'send' => '批量发送营销短信(50条)',
'caiwu' => '给财务发送短信'
];
$this->result('您正使用CMTS-CLIENT系统短信管理接口', $apis, 200);
$this->result('您正使用CMTS-GM系统短信管理接口!', $apis, 200);
}
public function actionSend()
@ -57,21 +52,21 @@
$option = array();
$sms = new Sms($option, $config);
$address = isset($dataPost['address']) ? $dataPost['address'] : '';
$address = $dataPost['address'] ?? '';
if ($address) {
$session->set('sms::address', $address);
} else {
$address = $session->get('sms::address');
}
$tmpl = isset($dataPost['tmpl']) ? $dataPost['tmpl'] : '';
$tmpl = $dataPost['tmpl'] ?? '';
if ($tmpl) {
$session->set('sms::tmpl', $tmpl);
} else {
$tmpl = $session->get('sms::tmpl');
}
$_guests = isset($dataPost['guests']) ? $dataPost['guests'] : '';
$_guests = $dataPost['guests'] ?? '';
if (!$_guests) {
$guests = $session->get('sms::guests');
} else {
@ -108,7 +103,7 @@
foreach ($guests as $p => $username) {
$j--;
$content['name'] = !empty($username) ? $username . '安诚托车' : '安诚捷顺运车';
$content['name'] = !empty($username) ? $username . '安邮车联' : '安邮运车';
$result = $sms->send($p, $tmpl, $content);
$results[$p] = $result;

View File

@ -1,95 +1,254 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-05-16T16:31:49+08:00
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T09:19:58+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\gm\v1;
use Yii;
use yii\data\Pagination;
use yii\helpers\Url;
use addons\models\AcStore;
class StoreController extends Common
{
public function beforeAction($action)
{
if (!$this->pid) {
$this->result('您正使用本系统内部接口,禁止非法链接使用!');
}
return parent::beforeAction($action);
}
//主界面
public function actionIndex()
{
$apis = [
'list' => '网点清单',
'detail' => '网点详情'
'detail' => '网点详情',
'add'=>'添加',
'edit'=>'编辑',
'delete'=>'删除',
'show'=>'显示',
'hide'=>'隐藏',
'ajax'=>'ajax操作'
];
$this->result('您正使用CMTS系统网点管理接口', $apis, 200);
$this->result('您正使用CMTS-GM系统网点管理接口!', $apis, 200);
}
public function actionList()
{
$s = $this->search();
$res = $s['res'];
if (!$res) {
$this->result('没有查询到相应的数据!', [], 0);
}
$data= [
'total'=>$s['query']->count(),
'stores' => $res,
'page'=>$this->page
];
$this->result('网点列表查询成功!', $data, 200);
}
public function actionDetail()
{
$pid = $this->pid;
$model = new AcStore();
$where = [];
$where['pid'] = $pid;
$citys = Yii::$app->params['citys'];
$post = $this->postdata;
$where['deleted'] = 0;
$where['status_code'] = 1;
$data = $model->find()->where($where);
$page = $this->page;
$pageSize = $this->pageSize;
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => $pageSize]);
$pages->setPage($page - 1, TRUE); //设置分页的当前页面值
$res = $data->offset($pages->offset)->limit($pages->limit)->all();
if (!$res) {
$this->result('没有符合条件的结果');
$id = isset($post['id']) ? $post['id'] : 0;
if ($id <= 0) {
$this->result('查询参数错误!');
}
$stores = [];
foreach ($res as $k => $v) {
$stores[$v->id] = $v->toArray();
}
$return = [];
$return['data'] = [
'stores' => $stores,
'citys' => $citys,
];
$return['total'] = $data->count();
$return['page'] = $this->page;
$this->result('网点列表', $return, 200);
}
public function actionSelect()
{
$model = new AcStore();
$where = [];
$where['pid'] = Yii::$app->session->get('pid');
$citys = Yii::$app->params['citys'];
$post = Yii::$app->request->post();
$detail = $model->findOne($id)->toArray();
if(!$detail) $this->result('未查询到相应数据');
$this->result('查询成功!', $detail, 200);
}
public function actionAdd()
{
//数据预检查、编排
$data = $this->preSave('add');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
$model = new AcStore();
foreach ($data as $key=>$val) {
$model->$key = $val;
}
$res = $model->save();
$msg = '数据保存失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '数据保存成功!';
$return = [];
$return['id']= $model->attributes['id']; //获取插入后id;
$this->result($msg,$return, 200);
}
//编辑资料
public function actionEdit()
{
$detail = $this->preUpdate();
//数据预检查、编排
$data = $this->preSave('edit');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '数据编辑失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '数据编辑成功!';
$return = [];
$return['data']= $detail;
$this->result($msg,$return, 200);
}
//删除员工
public function actionDelete()
{
$detail = $this->preUpdate();
$data = [];
$data['update_at'] = time();
$data['deleted'] = $detail->deleted + 1;
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '网点数据删除失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '网点数据删除成功!';
$this->result($msg,[], 200);
}
public function actionAjax()
{
$detail = $this->preUpdate();
$get = Yii::$app->request->get();
$msg = '';
$errorCode = 0;
$detail->update_at = time();
switch ($get['do']) {
case 'out':
$detail->status_code = 0;
$res = $detail->save();
if ($res) {
$msg = '网点移除标记成功';
$errorCode = 200;
} else {
$msg = '网点移除标记失败';
}
break;
case 'in':
$detail->status_code = 1;
$res = $detail->save();
if ($res) {
$msg = '网点加入标记成功';
$errorCode = 200;
} else {
$msg = '网点加入标记失败';
}
break;
default:
break;
}
$this->result($msg,[], $errorCode);
}
private function search(){
$pid = $this->pid;
$return = [];
$model = new AcStore();
$where = $where2 = [];
$where['pid'] = $pid;
$post = $this->postdata;
$search = $post['search'] ?? [];
$search['title'] = isset($search['title']) ? trim(htmlspecialchars_decode($search['title'])) : '';
if (!empty($search['title'])) {
$where2[] = ['LIKE', 'title', $search['title']];
}
$where['deleted'] = 0;
$where['status_code'] = 1;
$data = $model->find()->where($where);
$search = [];
$search['title'] = isset($post['title']) ? trim(htmlspecialchars_decode($post['title'])) : '';
if (!empty($search['title'])) {
$where2 = ['LIKE', 'title', $search['title']];
if ($search['title']) {
$data = $data->andwhere($where2);
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => $this->pageSize]);
$_orderby = 'order_by DESC';
$res = $data->offset($pages->offset)->limit($pages->limit)->orderBy($_orderby)->all();
return ['res'=>$res,'query'=>$data];
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => '20']);
$res = $data->offset($pages->offset)->limit($pages->limit)->all();
$status = ['0' => '隐藏', '1' => '正常'];
$callback = !empty(Yii::$app->request->get('callback')) ? Yii::$app->request->get('callback') : 'store';
return $this->render('select', [
'stores' => $res,
'pager' => $pages,
'citys' => $citys,
'status' => $status,
'search' => $search,
'callback' => $callback
]);
/*
* 数据更新前的预检查,返回对应关联数据
* 必须确保get与post数据中均包含需更新的数据id且一致
* */
private function preUpdate()
{
$id = (int)Yii::$app->request->get('id');
if(!$id) $this->result('请求错误未携带ID参数');
$post = $this->postdata;
if($post['id'] != $id) $this->result('传参id与请求数据不匹配',[],403);
$model = new AcStore();
$res = $model->findOne($id);
if(!$res) $this->result('未查询到相应数据',[],404);
return $res;
}
/*
* 数据保存前的预检查(查重、参数校验等)
* 要保存的数据[],直接从post中取出
* @op操作类型add,edit……
* 校验机制:
* 编辑数据时必须用get方式传入参数id并与post进来的数据id进行比对只有一致时才能继续;
* 查重:禁止录入重复数据
* 返回:校验重组后的数据
* */
private function preSave($op)
{
$post = $this->postdata;
$title = trim($post['title']) ?? '';
if(!$title) $this->result('请传入网点名称');
$data = [];
//格式化数据
//目标键=》POST键
$model = new AcStore();
switch ($op) {
case 'add':
$mobile = trim($post['mobile']) ?? '';
if(!isMobile($mobile)) $this->result('请传入正确的手机号');
//查询通讯录手机号是否在库(如果在库,则取出相应资料,剩余逻辑由前端完成)
$hasOne = AcEmployee::find()->where(['mobile' => $mobile])->one();
if($hasOne) $this->result('保存失败,该手机号对应的数据已在库!',$hasOne,100);
$data['mobile'] = $mobile;
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
break;
case 'edit':
//编辑模式下没有改mobile避免校验重复性
$id = (int)Yii::$app->request->get('id');
$_id = (int)$post['id'];
if(!$id != $_id) $this->result('id参数不匹配请检查');
$data['update_at'] = time();
break;
}
$data['pid'] = $this->pid;
$cols = ['status_code' => 'status_code', 'gender'=>'gender','status' => 'status', 'store_id' => 'store_id','deleted' => 'deleted','order_by'=>'order_by'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? (int)$post[$key] : 0;
}
$cols = ['remark' => 'editor'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? htmlspecialchars($post[$key]) : '';
}
return $data;
}
}

View File

@ -1,161 +1,366 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-05-22T07:38:08+08:00
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T09:20:07+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\gm\v1;
use Yii;
use yii\data\Pagination;
use yii\helpers\Url;
use addons\models\AcTruck;
use addons\models\AcDriver;
class TruckController extends Common
{
public function beforeAction($action)
{
if (!$this->pid) {
$this->result('您正使用本系统内部接口,禁止非法链接使用!');
}
return parent::beforeAction($action);
}
//主界面
public function actionIndex()
{
return $this->render('../layouts/dev', []);
$apis = [
'list' => '板车清单',
'detail' => '详情',
'get-status'=>'状态字典',
'fache'=>'发车',
'list-online'=>'装车中',
'add'=>'添加',
'edit'=>'编辑',
'delete'=>'删除',
'show'=>'显示',
'hide'=>'隐藏',
'ajax'=>'ajax操作'
];
$this->result('您正使用CMTS-GM系统板车管理接口', $apis, 200);
}
public function actionGetStatus(){
$status = Yii::$app->params['TruckStatus'];
$this->result('板车状态字典', $status, 200);
}
//板车列表
public function actionList()
{
$AcTruck = new AcTruck();
$where = $where2 = [];
$where2[] = 'and';
$where['pid'] = Yii::$app->session->get('pid');
$post = Yii::$app->request->post();
$search = [];
$search['title'] = isset($post['title']) ? trim(htmlspecialchars_decode($post['title'])) : '';
if (!empty($search['title'])) {
$where2[] = ['LIKE', 'num_left', $search['title']];
$s = $this->search();
$res = $s['res'];
if (!$res) {
$this->result('没有查询到相应的数据!', [], 0);
}
$where['deleted'] = 0;
$data = $AcTruck->find()->where($where);
if ($search['title']) {
$data = $data->andwhere($where2);
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => '20']);
$res = $data->offset($pages->offset)->limit($pages->limit)->all();
$status = Yii::$app->params['TruckStatus'];
$AcDriver = new AcDriver();
$where = [];
$where['pid'] = Yii::$app->session->get('pid');
$_drivers = $AcDriver->find()->where($where)->all();
$drivers = [];
foreach ($_drivers as $s) {
$drivers[$s->id] = $s->toArray();
}
return $this->render('list', [
$data= [
'total'=>$s['query']->count(),
'trucks' => $res,
'pager' => $pages,
'drivers' => $drivers,
'status' => $status,
'search' => $search
]);
'drivers' => $s['drivers'],
'page'=>$this->page
];
$this->result('板车列表查询成功!', $data, 200);
}
public function actionSelect()
public function actionDetail()
{
$AcTruck = new AcTruck();
$where = $where2 = [];
$where2[] = 'and';
$where['pid'] = Yii::$app->session->get('pid');
$post = Yii::$app->request->post();
$search = [];
$search['title'] = isset($post['title']) ? trim(htmlspecialchars_decode($post['title'])) : '';
if (!empty($search['title'])) {
$where2[] = ['LIKE', 'num_left', $search['title']];
$pid = $this->pid;
$post = $this->postdata;
$id = isset($post['id']) ? $post['id'] : 0;
if ($id <= 0) {
$this->result('查询参数错误!');
}
$where['deleted'] = 0;
$data = $AcTruck->find()->where($where);
if ($search['title']) {
$data = $data->andwhere($where2);
$model = new AcTruck();
$detail = $model->findOne($id)->toArray();
if(!$detail) $this->result('未查询到相应数据');
$data = $this->showTruck($detail);
$this->result('查询成功!', $data, 200);
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => '20']);
$res = $data->offset($pages->offset)->limit($pages->limit)->all();
$status = Yii::$app->params['TruckStatus'];
$AcDriver = new AcDriver();
$where = [];
$where['pid'] = Yii::$app->session->get('pid');
$_drivers = $AcDriver->find()->where($where)->all();
$drivers = [];
foreach ($_drivers as $s) {
$drivers[$s->id] = $s->toArray();
}
$callback = !empty(Yii::$app->request->get('callback')) ? Yii::$app->request->get('callback') : 'truck';
return $this->render('select', [
'trucks' => $res,
'pager' => $pages,
'drivers' => $drivers,
'status' => $status,
'search' => $search,
'callback' => $callback
]);
}
public function actionNew()
public function actionAdd()
{
$status = Yii::$app->params['TruckStatus'];
$AcTruck = new AcTruck();
$AcTruck->status_code = 0;
return $this->render('modify', ['status' => $status, 'detail' => $AcTruck]);
//数据预检查、编排
$data = $this->preSave('add');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
$model = new AcTruck();
foreach ($data as $key=>$val) {
$model->$key = $val;
}
$res = $model->save();
$msg = '数据保存失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '数据保存成功!';
$return = [];
$return['id']= $model->attributes['id']; //获取插入后id;
$this->result($msg,$return, 200);
}
//编辑板车资料
public function actionEdit()
{
$model = new AcTruck();
$id = Yii::$app->request->get('id');
$res = $model->find()->where(['id' => $id])->one();
if ($res) {
$res = $res->toArray();
$detail = $this->preUpdate();
//数据预检查、编排
$data = $this->preSave('edit');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$AcDriver = new AcDriver();
$driver = $AcDriver->find()->where(['id' => $res['driver_id']])->one();
if ($driver) {
$res['driver_title'] = $driver->name;
}
$driver2 = $AcDriver->find()->where(['id' => $res['driver2_id']])->one();
if ($driver2) {
$res['driver2_title'] = $driver2->name;
}
$status = Yii::$app->params['TruckStatus'];
return $this->render('modify', ['status' => $status, 'detail' => $res]);
$res = $detail->save();
$msg = '数据编辑失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '数据编辑成功!';
$return = [];
$return['data']= $detail;
$this->result($msg,$return, 200);
}
//保存板车资料
public function actionSave()
//删除板车
public function actionDelete()
{
$post = Yii::$app->request->post();
$id = (int)$post['id'];
$pid = Yii::$app->session->get('pid');
$detail = $this->preUpdate();
$data = [];
$data['update_at'] = time();
$data['deleted'] = $detail->deleted + 1;
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '板车删除失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '板车删除成功!';
$this->result($msg,[], 200);
}
public function actionAjax()
{
$detail = $this->preUpdate();
$get = Yii::$app->request->get();
$msg = '';
$errorCode = 0;
$detail->update_at = time();
switch ($get['do']) {
case 'out':
$detail->status_code = 0;
$res = $detail->save();
if ($res) {
$msg = '板车停用标记成功';
$errorCode = 200;
} else {
$msg = '板车停用标记失败';
}
break;
case 'in':
$detail->status_code = 1;
$res = $detail->save();
if ($res) {
$msg = '板车启用标记成功';
$errorCode = 200;
} else {
$msg = '板车启用标记失败';
}
break;
case 'lock':
$detail->status_code = 99;
$res = $detail->save();
if ($res) {
$msg = '板车锁定标记成功';
$errorCode = 200;
} else {
$msg = '板车锁定标记失败';
}
break;
case 'repair':
$detail->status_code = 2;
$res = $detail->save();
if ($res) {
$msg = '板车检修标记成功';
$errorCode = 200;
} else {
$msg = '板车检修标记失败';
}
break;
case 'reset':
$detail->status_code = 3;
$res = $detail->save();
if ($res) {
$msg = '板车保养标记成功';
$errorCode = 200;
} else {
$msg = '板车保养标记失败';
}
break;
case 'working':
$detail->status_code = 1;
$res = $detail->save();
if ($res) {
$msg = '板车恢复标记成功';
$errorCode = 200;
} else {
$msg = '板车恢复标记失败';
}
break;
default:
break;
}
$this->result($msg,[], $errorCode);
}
//发车
public function actionFache()
{
$truck = $this->preUpdate();
$get = Yii::$app->request->get();
$msg = '';
$errorCode = 0;
if ($truck->status_code == 1) {
$truck->update_at = time();
$res = $truck->update();
if ($res) {
$msg = '发车成功,请进行下一步操作';
$errorCode = 200;
}else{
$msg = '发车标记保存失败';
$errorCode = 0;
}
}elseif ($truck->status_code == 4) {
$msg = '当前板车已在装车中,发车操作无效';
$errorCode = 400;
} else if ($truck->status_code == 5) {
$msg = '当前板车已在运输中,发车操作无效';
$errorCode = 400;
}else if ($truck->status_code != 1) {
$msg = '当前板车状态不允许发车,请先确认板车已归为正常状态';
$errorCode = 400;
}
$this->result($msg,[], $errorCode);
}
//装车中的板车(即在线板车列表,标记了发车状态为装车中的)
public function actionListOnline(){
$this->postdata['status'] = 4;
$s = $this->search();
$res = $s['res'];
if (!$res) {
$this->result('没有在装车中的板车!', [], 0);
}
$data= [
'total'=>$s['query']->count(),
'trucks' => $res,
'drivers' => $s['drivers'],
'page'=>$this->page
];
$this->result('在线板车列表获取成功!', $data, 200);
}
private function search(){
$pid = $this->pid;
$return = [];
$model = new AcTruck();
$where = $where2 = [];
$where['pid'] = $pid;
$where2[] = 'and';
$post = $this->postdata;
if(isset($post['status'])){
$where['status_code'] = (int)$post['status'];
}
$search = $post['search'] ?? [];
$search['title'] = isset($search['title']) ? trim(htmlspecialchars_decode($search['title'])) : '';
if (!empty($search['title'])) {
$where2[] = ['LIKE', 'num_left', $search['title']];
}
$where['deleted'] = 0;
$data = $model->find()->where($where);
if ($search['title']) {
$data = $data->andwhere($where2);
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => $this->pageSize]);
$res = $data->offset($pages->offset)->limit($pages->limit)->all();
$dids = [];
if ($res) {
foreach ($res as $k => $v) {
if($v->driver_id) $dids[] = $v->driver_id;
if($v->driver2_id) $dids[] = $v->driver2_id;
}
}
$drivers = [];
if($dids){
$AcDriver = new AcDriver();
$where = [];
$where[] = ['=','pid',$this->pid];
$where[] = ['IN','id',$dids];
$_drivers = $AcDriver->find()->where($where)->all();
foreach ($_drivers as $s) {
$drivers[$s->id] = $s->toArray();
}
}
return ['res'=>$res,'query'=>$data,'drivers'=>$drivers];
}
/*
* 数据更新前的预检查,返回对应关联数据
* 必须确保get与post数据中均包含需更新的数据id且一致
* */
private function preUpdate()
{
$id = (int)Yii::$app->request->get('id');
if(!$id) $this->result('请求错误未携带ID参数');
$post = $this->postdata;
if($post['id'] != $id) $this->result('传参id与请求数据不匹配',[],403);
$model = new AcTruck();
$res = $model->findOne($id);
if(!$res) $this->result('未查询到相应数据',[],404);
return $res;
}
/*
* 数据保存前的预检查(查重、参数校验等)
* 要保存的数据[],直接从post中取出
* @op操作类型add,edit……
* 校验机制:
* 编辑数据时必须用get方式传入参数id并与post进来的数据id进行比对只有一致时才能继续;
* 查重:禁止录入重复数据
* 返回:校验重组后的数据
* */
private function preSave($op)
{
$post = $this->postdata;
$data = [];
//格式化数据
//目标键=》POST键
$model = new AcTruck();
switch ($op) {
case 'add':
$cols = ['num_p' => 'num_p', 'num_area' => 'num_area', 'num_left' => 'num_left'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? trim($post[$key]) : '';
if(!$data[$col]) $this->result('请传入板车车牌号');
}
//查询车牌号是否在库
$hasTruck = AcTruck::find()->where(['num_p' => $data['num_p'], 'num_area' => $data['num_area'], 'num_left' => $data['num_left']])->one();
if ($hasTruck) {
if ($id && $id != $hasTruck->id) {
\Yii::$app->getSession()->setFlash('danger', '保存失败,该车牌号已在库!');
return $this->goBack();
} else {
$id = $hasTruck->id;
}
$hasOne = AcTruck::find()->where(['num_p' => $data['num_p'], 'num_area' => $data['num_area'], 'num_left' => $data['num_left']])->one();
if($hasOne) $this->result('保存失败,该车牌号已在库!',$hasOne,100);
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
break;
case 'edit':
//编辑模式下,没有改车牌号,避免校验重复性
$id = (int)Yii::$app->request->get('id');
$_id = (int)$post['id'];
if(!$id != $_id) $this->result('id参数不匹配请检查');
$data['update_at'] = time();
break;
}
$data['pid'] = $this->pid;
$cols = ['driver_id' => 'driver', 'driver2_id' => 'driver2', 'status_code' => 'status_code', 'max_cars' => 'max_cars', 'deleted' => 'deleted'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? (int)$post[$key] : 0;
@ -164,259 +369,23 @@
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? htmlspecialchars($post[$key]) : '';
}
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
// $data['status_code'] = 1;
$data['pid'] = $pid;
//保存板车资料
$AcTruck = new AcTruck();
foreach ($data as $key => $val) {
$AcTruck->$key = $val;
return $data;
}
if ($id) {
$AcTruck->id = $id;
unset($data['create_at']);
$res = $AcTruck->updateAll($data, ['id' => $id]);
} else {
$res = $AcTruck->save();
$id = $AcTruck->attributes['id']; //获取插入后id
}
if ($res) {
\Yii::$app->getSession()->setFlash('success', '板车资料保存成功!');
return $this->redirect(['edit', 'id' => $id]);
} else {
\Yii::$app->getSession()->setFlash('warning', '板车资料保存失败!');
return $this->goBack();
}
}
//删除板车
public function actionDelete()
{
$get = Yii::$app->request->get();
$post = Yii::$app->request->post();
$id = (int)$get['id'];
$data = $where = [];
$where['pid'] = Yii::$app->session->get('pid');
$where['id'] = $id;
$data['update_at'] = time();
$data['deleted'] = 1;
$model = new AcTruck();
foreach ($data as $key => $val) {
$model->$key = $val;
}
$model->id = $id;
$res = $model->updateAll($data, $where);
$return = [];
$return['url'] = Url::toRoute('truck/list');
$return['timeout'] = 3; //3秒后自动跳转
$return['status'] = 0;
if ($res) {
$return['msg'] = '板车删除成功';
$return['errorcode'] = 200;
$return['data'] = $id;
} else {
$return['msg'] = '板车删除失败';
$return['errorcode'] = 0;
}
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
public function actionAjax()
{
$get = Yii::$app->request->get();
$post = Yii::$app->request->post();
$id = (int)$get['id'];
$data = $where = [];
$where['pid'] = Yii::$app->session->get('pid');
$where['id'] = $id;
$data['update_at'] = time();
$model = new AcTruck();
$res = $model->find()->where(['id' => $id])->one();
$return = [];
$return['timeout'] = 1; //3秒后自动跳转
$return['ajax'] = 1;
if ($res) {
$res = $res->toArray();
} else {
$return['msg'] = '板车数据不存在';
$return['errorcode'] = 404;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
switch ($get['do']) {
case 'hide':
$data['status_code'] = 0;
$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;
case 'show':
$data['status_code'] = 1;
$model->id = $id;
$res = $model->updateAll($data, $where);
if ($res) {
$return['msg'] = '板车入库记成功';
$return['errorcode'] = 200;
$return['data'] = ['css' => 'primary'];
} else {
$return['msg'] = '板车入库标记失败';
$return['errorcode'] = 0;
}
break;
case 'lock':
$data['status_code'] = 99;
$model->id = $id;
$res = $model->updateAll($data, $where);
if ($res) {
$return['msg'] = '板车锁定标记成功';
$return['errorcode'] = 200;
$return['data'] = ['css' => 'danger'];
} else {
$return['msg'] = '板车锁定标记失败';
$return['errorcode'] = 0;
}
break;
case 'repair':
$data['status_code'] = 2;
$model->id = $id;
$res = $model->updateAll($data, $where);
if ($res) {
$return['msg'] = '板车检修标记成功';
$return['errorcode'] = 200;
$return['data'] = ['css' => 'warning'];
} else {
$return['msg'] = '板车检修标记失败';
$return['errorcode'] = 0;
}
break;
case 'reset':
$data['status_code'] = 2;
$model->id = $id;
$res = $model->updateAll($data, $where);
if ($res) {
$return['msg'] = '板车保养标记成功';
$return['errorcode'] = 200;
$return['data'] = ['css' => 'info'];
} else {
$return['msg'] = '板车保养标记失败';
$return['errorcode'] = 0;
}
break;
case 'working':
$data['status_code'] = 1;
$model->id = $id;
$res = $model->updateAll($data, $where);
if ($res) {
$return['msg'] = '板车恢复正常,标记成功';
$return['errorcode'] = 200;
$return['data'] = ['css' => 'success'];
} else {
$return['msg'] = '板车恢复标记失败';
$return['errorcode'] = 0;
}
break;
default:
break;
}
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
//发车
public function actionFache()
{
$get = Yii::$app->request->get();
$post = Yii::$app->request->post();
$id = (int)$get['id'];
$AcTruck = new AcTruck();
$truck = $AcTruck->findOne($id);
if (!$truck) {
$return['msg'] = '板车数据不存在';
$return['errorcode'] = 404;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
if ($truck->status_code == 4) {
$return = [];
// $return['url'] = Url::toRoute('truckol/modify');
$return['timeout'] = 3; //3秒后自动跳转
$return['status'] = 0;
$return['msg'] = '当前板车已在装车中,发车操作无效';
$return['errorcode'] = 400;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
} else if ($truck->status_code == 5) {
$return = [];
// $return['url'] = Url::toRoute('truckol/modify');
$return['timeout'] = 3; //3秒后自动跳转
$return['status'] = 0;
$return['msg'] = '当前板车已在运输途中,发车操作无效';
$return['errorcode'] = 400;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
} else if ($truck->status_code != 1) {
$return['msg'] = '当前板车状态不允许发车,请先确认板车已归为正常状态';
$return['errorcode'] = 400;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
$data = $where = [];
$where['pid'] = Yii::$app->session->get('pid');
$where['id'] = $id;
$data['update_at'] = time();
$data['status_code'] = 4;
foreach ($data as $key => $val) {
$AcTruck->$key = $val;
}
$res = $AcTruck->updateAll($data, $where);
$return = [];
// $return['url'] = Url::toRoute('truckol/modify');
$return['timeout'] = 3; //3秒后自动跳转
$return['status'] = 0;
if ($res) {
$return['msg'] = '发车成功,请进行下一步操作';
$return['errorcode'] = 200;
$return['data'] = $id;
} else {
$return['msg'] = '发车操作失败';
$return['errorcode'] = 0;
}
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
//浏览板车资料
public function actionDetail()
{
$model = new AcTruck();
$id = Yii::$app->request->get('id');
$res = $model->find()->where(['id' => $id])->one();
if ($res) {
$res = $res->toArray();
}
private function showTruck($detail){
$data = $detail->toArray();
$AcDriver = new AcDriver();
$driver = $AcDriver->find()->where(['id' => $res['driver_id']])->one();
$driver = $AcDriver->findOne($detail->driver_id);
if ($driver) {
$res['driver_title'] = $driver->name;
$res['driver_mobile'] = $driver->mobile;
$data['driver_title'] = $driver->name;
$data['driver_mobile'] = $driver->mobile;
}
$driver2 = $AcDriver->find()->where(['id' => $res['driver2_id']])->one();
$driver2 = $AcDriver->findOne($detail->driver2_id);
if ($driver2) {
$res['driver2_title'] = $driver2->name;
$res['driver2_mobile'] = $driver2->mobile;
$data['driver2_title'] = $driver2->name;
$data['driver2_mobile'] = $driver2->mobile;
}
$status = Yii::$app->params['TruckStatus'];
return $this->render('detail', ['status' => $status, 'detail' => $res]);
return $data;
}
}

View File

@ -1,50 +1,235 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-05-22T07:38:28+08:00
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T09:20:02+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\gm\v1;
use Yii;
use yii\data\Pagination;
use yii\helpers\Url;
use addons\models\AcTruck;
use addons\models\AcDriver;
use addons\models\AcTruckOnline;
use addons\models\AcTruckCars;
use addons\models\AcStore;
use addons\models\AcCar;
use addons\models\AcCarBrand;
use addons\models\AcCarSeries;
use addons\models\AcOrder;
use addons\models\AcGps;
use addons\models\AcGpsRoute;
class TruckcarController extends Common
{
public function beforeAction($action)
{
if (!$this->pid) {
$this->result('您正使用本系统内部接口,禁止非法链接使用!');
}
return parent::beforeAction($action);
}
//主界面
public function actionIndex()
{
return $this->render('../layouts/dev', []);
$apis = [
'list' => '承运清单',
'detail' => '承运详情',
'get-status'=>'获取运输状态字典',
'add'=>'添加',
'edit'=>'编辑',
'delete'=>'删除',
'show'=>'显示',
'hide'=>'隐藏',
'ajax'=>'ajax操作'
];
$this->result('您正使用CMTS-GM系统板车承运管理接口', $apis, 200);
}
public function actionGetStatus(){
$status = Yii::$app->params['TruckCarsStatus'];
$this->result('板车装载状态字典', $status, 200);
}
//所有装车记录列表
public function actionList()
{
$pid = Yii::$app->session->get('pid');
$post = Yii::$app->request->post();
$s = $this->search();
$res = $s['res'];
if (!$res) {
$this->result('没有查询到相应的数据!', [], 0);
}
$data= [
'total'=>$s['query']->count(),
'truck_cars' => $res,
'cars' => $s['cars'],
'page'=>$this->page
];
$this->result('板车列表查询成功!', $data, 200);
}
public function actionDetail()
{
$pid = $this->pid;
$post = $this->postdata;
$id = isset($post['id']) ? $post['id'] : 0;
if ($id <= 0) {
$this->result('查询参数错误!');
}
$model = new AcTruckCars();
$detail = $model->findOne($id)->toArray();
if(!$detail) $this->result('未查询到相应数据');
$data = $this->showTruck($detail);
$this->result('查询成功!', $data, 200);
}
public function actionAdd()
{
//数据预检查、编排
$data = $this->preSave('add');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
$model = new AcTruckCars();
foreach ($data as $key=>$val) {
$model->$key = $val;
}
$res = $model->save();
$msg = '数据保存失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '数据保存成功!';
$return = [];
$return['id']= $model->attributes['id']; //获取插入后id;
$this->result($msg,$return, 200);
}
//编辑客车上板信息
public function actionEdit()
{
$detail = $this->preUpdate();
//数据预检查、编排
$data = $this->preSave('edit');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '数据编辑失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '数据编辑成功!';
$return = [];
$return['data']= $detail;
$this->result($msg,$return, 200);
}
//删除板车
public function actionDelete()
{
$detail = $this->preUpdate();
if ($detail->deleted != 0) {
$this->result('数据已被删除过,操作无效', [], 400);
}
$data = [];
$data['update_at'] = time();
$data['deleted'] = $detail->deleted + 1;
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '上板记录删除失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '上板记录删除成功!';
$this->result($msg,[], 200);
}
public function actionAjax()
{
$detail = $this->preUpdate();
$get = Yii::$app->request->get();
$msg = '';
$errorCode = 0;
$_time = time();
$detail->update_at = $_time;
$online_id = $detail->online_id;
$AcTruckOnline = new AcTruckOnline();
$truckol = $AcTruckOnline->findOne($online_id);
$order_id = $detail->order_id;
$AcOrder = new AcOrder();
$order = $AcOrder->findOne($order_id);
switch ($get['do']) {
case 'intruck':
//上板
if ($detail->status_code != 0) {
$this->result('当前运单并非待承运状态,操作无效',[], 400);
}
$detail->status_code = 1;
$res = $detail->save();
if ($res) {
//增加板车一辆装车统计
$truckol->update_at = $_time;
$truckol->updateCounters(['cars' => 1]);
$truckol->save();
//修改对应订单的状态
$order->update_at = $_time;
$order->status_code = 2;
$order->save();
$msg = '客车上板标记成功';
$errorCode = 200;
} else {
$msg = '客车上板标记失败';
$errorCode = 100;
}
break;
case 'arrive':
//运达
if ($detail->status_code == 0) {
$this->result('当前运单尚待承运,操作无效',[], 400);
}
$detail->status_code = 99;
$detail->to_time = $_time;
$res = $detail->save();
if ($res) {
//修改对应订单的状态
$order->update_at = $_time;
$order->status_code = 3;
$order->save();
$msg = '客车运达标记记成功';
$errorCode = 200;
} else {
$this->result('客车运达标记失败',[], 100);
}
break;
case 'fix':
//处理质损
$data['status_code'] = 80;
if ($detail->status_code != 1) {
$this->result('当前运单并非运输中状态,操作无效',[], 400);
}
$res = $detail->save();
if ($res) {
$msg = '客车运达标记记成功';
$errorCode = 200;
} else {
$this->result('客车运损标记失败',[], 100);
}
break;
default:
break;
}
$this->result($msg,[], $errorCode);
}
private function search(){
$pid = $this->pid;
$online_id = Yii::$app->request->get('online_id'); //发车任务ID
$AcTruckCars = new AcTruckCars();
$return = [];
$model = new AcTruckCars();
$where = [];
$where[] = 'and';
$where[] = ['=', 'pid', Yii::$app->session->get('pid')];
$where[] = ['=', 'pid', $pid];
$post = $this->postdata;
$search = $post['search'] ?? [];
$search = isset($post['search']) ? $post['search'] : [];
$search['start_city'] = isset($search['start_city']) ? trim(htmlspecialchars_decode($search['start_city'])) : '';
if (!empty($search['start_city'])) {
$where[] = ['LIKE', 'from_city', $search['start_city']];
@ -54,15 +239,12 @@
$where[] = ['LIKE', 'to_city', $search['aim_city']];
}
$search['car_id'] = isset($search['car_id']) ? (int)$search['car_id'] : 0;
$CarModel = new AcCar();
if (!empty($search['car_id'])) {
if (!$search['car_id']) {
$where[] = ['=', 'car_id', $search['car_id']];
$car = $CarModel->findOne($search['car_id']);
$search['car_title'] = isset($car->title) ? $car->title : '';
}
$search['status_code'] = isset($search['status_code']) ? $search['status_code'] : 'all';
if ($search['status_code'] != 'all') {
$where[] = ['=', 'status_code', (int)$search['status_code']];
$search['status_code'] = isset($search['status_code']) ? (int)$search['status_code'] : 0;
if ($search['status_code']) {
$where[] = ['=', 'status_code', $search['status_code']];
}
//按月份筛选
$search['start_m'] = isset($search['start_m']) ? $search['start_m'] : '';
@ -76,8 +258,10 @@
}
$where[] = ['=', 'deleted', 0];
$data = $AcTruckCars->find()->where($where);
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => '20']);
$data = $model->find()->where($where);
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => $this->pageSize]);
$res = $data->offset($pages->offset)->limit($pages->limit)->orderby('status_code ASC,id DESC')->all();
$car_ids = [];
@ -93,470 +277,84 @@
$where[] = ['=', 'deleted', 0];
$cars = $AcCar->find()->where($where)->indexby('id')->all();
$status = Yii::$app->params['TruckCarsStatus'];
return $this->render('list', [
'list' => $res,
'pager' => $pages,
'status' => $status,
'cars' => $cars,
'search' => $search
]);
return ['res'=>$res,'query'=>$data,'cars'=>$cars];
}
public function actionNew()
/*
* 数据更新前的预检查,返回对应关联数据
* 必须确保get与post数据中均包含需更新的数据id且一致
* */
private function preUpdate()
{
$status = Yii::$app->params['TruckCarsStatus'];
$AcTruckCars = [];
$AcTruckCars['status_code'] = 0;
$online_id = Yii::$app->request->get('online_id'); //发车任务ID
$AcTruckCars['online_id'] = $online_id;
$order_id = Yii::$app->request->get('order_id'); //待承运订单ID
$AcTruckCars['order_id'] = $order_id;
$car_id = Yii::$app->request->get('car_id'); //待装客车ID
$AcTruckCars['car_id'] = $car_id;
return $this->render('create', ['status' => $status, 'detail' => $AcTruckCars]);
$id = (int)Yii::$app->request->get('id');
if(!$id) $this->result('请求错误未携带ID参数');
$post = $this->postdata;
if($post['id'] != $id) $this->result('传参id与请求数据不匹配',[],403);
$model = new AcTruckCars();
$res = $model->findOne($id);
if(!$res) $this->result('未查询到相应数据',[],404);
if($res->pid != $this->pid) $this->result('非本平台数据,不允许操作',[],401);
return $res;
}
//编辑客车上板信息
public function actionEdit()
/*
* 数据保存前的预检查(查重、参数校验等)
* 要保存的数据[],直接从post中取出
* @op操作类型add,edit……
* 校验机制:
* 编辑数据时必须用get方式传入参数id并与post进来的数据id进行比对只有一致时才能继续;
* 查重:禁止录入重复数据
* 返回:校验重组后的数据
* */
private function preSave($op)
{
$id = Yii::$app->request->get('id'); //承运单ID
$truck_id = $online_id = $store_id = $store2_id = 0;
$truckCar = $truckol = [];
$AcTruckCars = new AcTruckCars();
$res = $AcTruckCars->findOne($id);
if ($res) {
$truckCar = $res->toArray();
$online_id = $res->online_id;
$store2_id = $res->to_store;
$store_id = $res->from_store;
$order_id = $res->order_id;
}
$AcOrder = new AcOrder();
$order = $AcOrder->findOne($order_id);
$AcTruckOnline = new AcTruckOnline();
$res = $AcTruckOnline->findOne($online_id);
if ($res) {
$truck_id = $res->truck_id;
$truckol = $res->toArray();
}
$AcTruck = new AcTruck();
$truck = $AcTruck->findOne($truck_id);
if (!$truck) {
$post = Yii::$app->request->post();
$return = [];
$return['msg'] = '关联板车数据获取异常,发车任务编辑失败';
$return['errorcode'] = 0;
$return['url'] = Url::toRoute(['truck/list', $post]);
$return['buttons'] = [
['title' => '好的,我知道了', 'class' => 'info', 'url' => $return['url']]
];
$return['content'] = $return['msg'];
$return['class'] = 'warning';
Yii::$app->request->setBodyParams($return);
return Yii::$app->runAction('index/msg');
}
$truckCar['truck_id'] = $truck_id;
$truckCar['truck_title'] = $truck->num_p . $truck->num_area . $truck->num_left;
$truckCar['truck_num'] = $truckCar['truck_title'] ? $truckCar['truck_title'] : $truckol['truck_num'];
$AcStore = new AcStore();
$store = $AcStore->findOne($store_id);
if ($store) {
$truckCar['fromstore_title'] = $store->title;
}
$store2 = $AcStore->findOne($store2_id);
if ($store2) {
$truckCar['endstore_title'] = $store2->title;
}
$AcDriver = new AcDriver();
$driver = $AcDriver->find()->where(['id' => $truck->driver_id])->one();
$truckCar['driver_title'] = $truckCar['driver_mobile'] = '';
if ($driver) {
$truckCar['driver_title'] = $driver->name;
$truckCar['driver_mobile'] = $driver->mobile;
}
$truckCar['from_time'] = !empty($truckCar['from_time']) ? $truckCar['from_time'] : $truckol['from_date'];
$truckCar['to_time'] = !empty($truckCar['to_time']) ? $truckCar['to_time'] : $truckol['end_date'];
$from_city = $order->start_city;
$truckCar['from_city'] = !empty($truckCar['from_city']) ? $truckCar['from_city'] : $from_city;
$truckCar['from_city'] = $truckCar['from_city'] ? $truckCar['from_city'] : $truckol['from_city'];
$end_city = $order->aim_city;
$truckCar['to_city'] = !empty($truckCar['to_city']) ? $truckCar['to_city'] : $end_city;
$truckCar['to_city'] = $truckCar['to_city'] ? $truckCar['to_city'] : $truckol['end_city'];
$truckCar['driver_name'] = isset($truckCar['driver_name']) ? $truckCar['driver_name'] : $truckol['driver_name'];
$truckCar['driver_mobiles'] = isset($truckCar['driver_mobiles']) ? $truckCar['driver_mobiles'] : $truckol['driver_mobiles'];
$status = Yii::$app->params['TruckCarsStatus'];
return $this->render('modify', ['status' => $status, 'detail' => $truckCar]);
}
//保存客车上板信息(直接指派方式)
public function actionSave()
{
$post = Yii::$app->request->post();
$id = (int)$post['id'];
$pid = Yii::$app->session->get('pid');
//格式化数据
//目标键=》POST键
$cols = ['from_city' => 'from_city', 'to_city' => 'to_city'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? trim($post[$key]) : '';
}
$cols = ['online_id' => 'online_id', 'from_store' => 'from_store', 'to_store' => 'to_store'];
if (isset($_GET['debug']) && ($_GET['debug'] == 1)) {
$cols['status_code'] = 'status_code';
}
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? (int)$post[$key] : 0;
}
$post = $this->postdata;
/*出车计划判断*/
$online_id = $data['online_id'];
if (!$online_id) {
$return['msg'] = '未关联板车出车计划信息,保存失败';
$return['errorcode'] = 400;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
$online_id = $post['online_id'] ?? 0;
if (!(int)$online_id) {
$this->result('未关联板车出车计划信息,保存失败',[],400);
}
$AcTruckOnline = new AcTruckOnline();
$truckol = $AcTruckOnline->findOne($online_id);
if (!$truckol) {
$return['msg'] = '未找到指定板车出车计划,保存失败';
$return['errorcode'] = 404;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
$this->result('未找到指定板车出车计划,保存失败',[],404);
}
$key = 'remark';
$data[$key] = isset($post[$key]) ? htmlspecialchars(trim($post[$key])) : '';
$_time = time();
$key = 'to_time';
if (isset($post[$key]) && $post[$key] != "") {
$data[$key] = strtotime($post[$key]);
}
$key = 'from_time';
if (isset($post[$key]) && $post[$key] != "") {
$data[$key] = strtotime($post[$key]);
}
if (!$id) {
$data['create_at'] = $_time;
}
$data['update_at'] = $_time;
$data['pid'] = $pid;
//保存上板信息
$AcTruckCars = new AcTruckCars();
foreach ($data as $key => $val) {
$AcTruckCars->$key = $val;
}
if ($id) {
$res = $AcTruckCars->updateAll($data, ['id' => $id]);
} else {
$res = $AcTruckCars->save();
$id = $AcTruckCars->attributes['id']; //获取插入后id
}
if ($res) {
//修改对应运单状态
$_code = 0;
if (isset($data['status_code'])) {
if ($data['status_code'] == 1) {
$_code = 2;
} else if ($data['status_code'] == 99) {
$_code = 3;
}
}
if ($_code) {
$order_id = isset($post['order_id']) ? (int)$post['order_id'] : 0;
if (!$order_id) {
$car = $AcTruckCars->findOne($id);
$order_id = $car->order_id;
}
$AcOrder = new AcOrder();
$order = $AcOrder->findOne($order_id);
$order->update_at = $_time;
$order->status_code = $_code;
$order->save();
}
\Yii::$app->getSession()->setFlash('success', '信息保存成功!');
return $this->redirect(['edit', 'id' => $id]);
} else {
\Yii::$app->getSession()->setFlash('warning', '信息保存失败!');
return $this->goBack();
}
}
//保存客车上板信息(板车出车界面车辆管理方式)
public function actionSave2()
{
$post = Yii::$app->request->post();
$id = (int)$post['id'];
$pid = Yii::$app->session->get('pid');
$data = [];
//格式化数据
//目标键=》POST键
$cols = ['from_city' => 'from_city', 'to_city' => 'to_city'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? trim($post[$key]) : '';
}
$cols = ['online_id' => 'online_id', 'from_store' => 'from_store', 'to_store' => 'to_store', 'order_id' => 'order_id', 'car_id' => 'car_id'];
if (isset($_GET['debug']) && ($_GET['debug'] == 1)) {
$cols['status_code'] = 'status_code';
}
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? (int)$post[$key] : 0;
}
/*出车计划判断*/
$online_id = $data['online_id'];
if (!$online_id) {
$return['msg'] = '未关联板车出车计划信息,保存失败';
$return['errorcode'] = 400;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
$AcTruckOnline = new AcTruckOnline();
$truckol = $AcTruckOnline->findOne($online_id);
if (!$truckol) {
$return['msg'] = '未找到指定板车出车计划,保存失败';
$return['errorcode'] = 404;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
$key = 'remark';
$data[$key] = isset($post[$key]) ? htmlspecialchars(trim($post[$key])) : '';
$_time = time();
$key = 'to_time';
if (isset($post[$key]) && $post[$key] != "") {
$data[$key] = strtotime($post[$key]);
}
$key = 'from_time';
if (isset($post[$key]) && $post[$key] != "") {
$data[$key] = strtotime($post[$key]);
}
if (!$id) {
$data['create_at'] = $_time;
}
$data['update_at'] = $_time;
$data['pid'] = $pid;
//保存上板信息
$AcTruckCars = new AcTruckCars();
foreach ($data as $key => $val) {
$AcTruckCars->$key = $val;
}
if ($id) {
$res = $AcTruckCars->updateAll($data, ['id' => $id]);
} else {
$res = $AcTruckCars->save();
$id = $AcTruckCars->attributes['id']; //获取插入后id
}
if ($res) {
//修改对应运单状态
$_code = 0;
if (isset($data['status_code'])) {
if ($data['status_code'] == 1) {
$_code = 2;
} else if ($data['status_code'] == 99) {
$_code = 3;
}
}
if ($_code) {
$order_id = isset($post['order_id']) ? (int)$post['order_id'] : 0;
if (!$order_id) {
$car = $AcTruckCars->findOne($id);
$order_id = $car->order_id;
}
$AcOrder = new AcOrder();
$order = $AcOrder->findOne($order_id);
$order->update_at = $_time;
$order->status_code = $_code;
$order->save();
}
\Yii::$app->getSession()->setFlash('success', '信息保存成功!');
return $this->redirect(['edit', 'id' => $id]);
} else {
\Yii::$app->getSession()->setFlash('warning', '信息保存失败!');
return $this->goBack();
}
}
//删除板车
public function actionDelete()
{
$get = Yii::$app->request->get();
$post = Yii::$app->request->post();
$id = (int)$get['id'];
$pid = Yii::$app->session->get('pid');
$data = $return = [];
$model = new AcTruckCars();
switch ($op) {
case 'add':
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
break;
case 'edit':
//编辑模式下,没有改车牌号,避免校验重复性
$id = (int)Yii::$app->request->get('id');
$_id = (int)$post['id'];
if(!$id != $_id) $this->result('id参数不匹配请检查');
$data['update_at'] = time();
$data['deleted'] = 1;
$model = new AcTruckCars();
$car = $model->findOne($id);
if (!$car) {
$return['msg'] = '数据不存在,删除失败';
$return['errorcode'] = 404;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
if ($car->pid != $pid) {
$return['msg'] = '非本平台数据,不允许操作';
$return['errorcode'] = 400;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
if ($car->deleted != 0) {
$return['msg'] = '数据已被删除过,操作无效';
$return['errorcode'] = 400;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
foreach ($data as $key => $val) {
$model->$key = $val;
}
$model->id = $id;
$res = $model->updateAll($data, ['id' => $id]);
$return['url'] = Url::toRoute('truckcar/list');
$return['timeout'] = 3; //3秒后自动跳转
$return['status'] = 0;
if ($res) {
$return['msg'] = '上板记录删除成功';
$return['errorcode'] = 200;
$return['data'] = $id;
} else {
$return['msg'] = '上板记录删除失败';
$return['errorcode'] = 0;
}
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
public function actionAjax()
{
$get = Yii::$app->request->get();
$post = Yii::$app->request->post();
$id = (int)$get['id'];
$pid = Yii::$app->session->get('pid');
$data = $return = [];
$_time = time();
$data['update_at'] = $_time;
$model = new AcTruckCars();
$car = $model->findOne($id);
if (!$car) {
$return['msg'] = '数据不存在,删除失败';
$return['errorcode'] = 404;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
if ($car->pid != $pid) {
$return['msg'] = '非本平台数据,不允许操作';
$return['errorcode'] = 400;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
if ($car->deleted != 0) {
$return['msg'] = '数据已被删除,操作无效';
$return['errorcode'] = 400;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
$online_id = $car->online_id;
$AcTruckOnline = new AcTruckOnline();
$truckol = $AcTruckOnline->findOne($online_id);
$order_id = $car->order_id;
$AcOrder = new AcOrder();
$order = $AcOrder->findOne($order_id);
$return['timeout'] = 1; //n秒后自动跳转
$where = ['id' => $id];
switch ($get['do']) {
case 'intruck':
if ($car->status_code != 0) {
$return['msg'] = '当前运单并非待承运状态,操作无效';
$return['errorcode'] = 400;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
$data['status_code'] = 1;
$data['from_time'] = $_time;
$res = $model->updateAll($data, $where);
if ($res) {
//增加板车一辆装车统计
$truckol->update_at = $_time;
$truckol->updateCounters(['cars' => 1]);
$truckol->save();
//修改对应订单的状态
$order->update_at = $_time;
$order->status_code = 2;
$order->save();
$return['msg'] = '客车上板标记成功';
$return['errorcode'] = 200;
$return['data'] = ['css' => 'success'];
} else {
$return['msg'] = '客车上板标记失败';
$return['errorcode'] = 0;
}
break;
case 'arrive':
if ($car->status_code == 0) {
$return['msg'] = '当前任务尚待承运,操作无效';
$return['errorcode'] = 400;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
$data['status_code'] = 99;
$data['to_time'] = $_time;
$res = $model->updateAll($data, $where);
if ($res) {
//修改对应订单的状态
$order->update_at = $_time;
$order->status_code = 3;
$order->save();
$return['msg'] = '客车运达标记记成功';
$return['errorcode'] = 200;
$return['data'] = ['css' => 'primary'];
} else {
$return['msg'] = '客车运达标记失败';
$return['errorcode'] = 0;
}
break;
case 'fix':
$data['status_code'] = 80;
if ($car->status_code != 1) {
$return['msg'] = '当前运单并非运输中状态,操作无效';
$return['errorcode'] = 400;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
$res = $model->updateAll($data, $where);
if ($res) {
$return['msg'] = '客车运达标记记成功';
$return['errorcode'] = 200;
$return['data'] = ['css' => 'primary'];
} else {
$return['msg'] = '客车运达标记失败';
$return['errorcode'] = 0;
}
break;
default:
break;
}
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
$data['pid'] = $this->pid;
$key = 'remark';
$data[$key] = isset($post[$key]) ? htmlspecialchars(trim($post[$key])) : '';
$cols = ['from_city' => 'from_city', 'to_city' => 'to_city'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? trim($post[$key]) : '';
}
$cols = ['to_time' => 'to_time', 'from_time' => 'from_time'];
foreach ($cols as $col => $key) {
if (isset($post[$key]) && $post[$key] != "") $data[$key] = strtotime($post[$key]);
}
$cols = ['from_store' => 'from_store', 'to_store' => 'to_store', 'order_id' => 'order_id', 'car_id' => 'car_id','status_code'=>'status_code'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? (int)$post[$key] : 0;
}
return $data;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,233 +1,306 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-05-22T07:37:26+08:00
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T09:20:16+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\gm\v1;
use Yii;
use yii\data\Pagination;
use yii\helpers\Url;
use addons\models\AcTruck;
use addons\models\AcDriver;
use addons\models\AcTruckOnline;
use addons\models\AcTruckCars;
use addons\models\AcStore;
use addons\models\AcCar;
use addons\models\AcCarBrand;
use addons\models\AcCarSeries;
use addons\models\AcOrder;
use addons\models\AcGps;
use addons\models\AcGpsRoute;
use addons\models\AcTruckRoute;
class TruckrouteController extends Common
{
//替代常规的_construct 析构函数;其他方法调用前执行
public function init()
public $online_id = 0;
public $truckOl;
public function beforeAction($action)
{
$session = Yii::$app->session;
if (isset($_GET['pid']) && (int)$_GET['pid'] > 0) {
$session->set('pid', (int)$_GET['pid']);
}
$pid = $session->get('pid');
if (!$pid) {
return Yii::$app->response->redirect(['index/index']);
if (!$this->pid) {
$this->result('您正使用本系统内部接口,禁止非法链接使用!');
}
$online_id = Yii::$app->request->get('online_id'); //发车任务ID
if (!$online_id) {
$online_id = $session->get('online_id');
} else {
$session->set('online_id', $online_id);
}
if (!$online_id) {
$post = Yii::$app->request->post();
$return = [];
$return['msg'] = '请先选择好要查看的出车大板';
$return['errorcode'] = 0;
$return['url'] = Url::toRoute(['truckol/index', $post]);
$return['buttons'] = [
['title' => '好的,我知道了', 'class' => 'info', 'url' => $return['url']]
];
$return['content'] = $return['msg'];
$return['class'] = 'warning';
Yii::$app->request->setBodyParams($return);
return Yii::$app->runAction('index/msg');
}
$truckol = $session->get('truckOnline');
if($online_id > 0){
$AcTruckOnline = new AcTruckOnline();
$res = TRUE;
if (!$truckol) {
$res = $AcTruckOnline->findOne($online_id);
if ($res) {
$truck_id = $res->truck_id;
$store_id = $res->from_store;
$store2_id = $res->end_store;
$truckol = $res->toArray();
$truckOl = $AcTruckOnline->findOne($online_id);
if(!$truckOl) $this->result('未找到的关联板车任务!',[],404);
$this->truckOl = $truckOl;
$this->online_id = $online_id;
}
$AcStore = new AcStore();
$store = $AcStore->findOne($store_id);
if ($store) {
$truckol['fromstore_title'] = $store->title;
}
$store2 = $AcStore->findOne($store2_id);
if ($store2) {
$truckol['endstore_title'] = $store2->title;
}
$session->set('truckOnline', $truckol);
}
}
if ($online_id != $truckol['id']) {
$res = $AcTruckOnline->findOne($online_id);
if ($res) {
$truck_id = $res->truck_id;
$store_id = $res->from_store;
$store2_id = $res->end_store;
$truckol = $res->toArray();
$AcStore = new AcStore();
$store = $AcStore->findOne($store_id);
if ($store) {
$truckol['fromstore_title'] = $store->title;
}
$store2 = $AcStore->findOne($store2_id);
if ($store2) {
$truckol['endstore_title'] = $store2->title;
}
$session->set('truckOnline', $truckol);
}
}
if (!$res) {
$post = Yii::$app->request->post();
$return = [];
$return['msg'] = '请先选择好要查看的出车大板';
$return['errorcode'] = 0;
$return['url'] = Url::toRoute(['truckol/index', $post]);
$return['buttons'] = [
['title' => '好的,我知道了', 'class' => 'info', 'url' => $return['url']]
];
$return['content'] = $return['msg'];
$return['class'] = 'warning';
Yii::$app->request->setBodyParams($return);
return Yii::$app->runAction('index/msg');
}
return parent::beforeAction($action);
}
//主界面
public function actionIndex()
{
return $this->render('../layouts/dev', []);
$apis = [
'list' => '板车路线记录列表',
'detail' => '路线记录详情',
'add'=>'添加',
'edit'=>'编辑',
'delete'=>'删除',
'show'=>'显示',
'hide'=>'隐藏',
'ajax'=>'ajax操作'
];
$this->result('您正使用CMTS-GM系统在途板车路线管理接口', $apis, 200);
}
//所有板车位置记录列表
public function actionList()
{
$pid = Yii::$app->session->get('pid');
$post = Yii::$app->request->post();
$online_id = Yii::$app->session->get('online_id'); //发车任务ID
$truckol = Yii::$app->session->get('truckOnline'); //发车任务
$AcTruckRoute = new AcTruckRoute();
$where = [];
$where[] = 'and';
$where[] = ['=', 'pid', Yii::$app->session->get('pid')];
if ($online_id) {
$where[] = ['=', 'online_id', $online_id];
$s = $this->search();
$res = $s['res'];
if (!$res) {
$this->result('没有查询到相应的数据!', [], 0);
}
$data= [
'total'=>$s['query']->count(),
'routes' => $res,
'truckOls' => $s['truckOls'],
'trucks' => $s['trucks'],
'page'=>$this->page
];
$this->result('板车路线记录查询成功!', $data, 200);
}
$where[] = ['=', 'deleted', 0];
$data = $AcTruckRoute->find()->where($where)->orderby('orderby ASC,id DESC');
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => '20']);
$res = $data->offset($pages->offset)->limit($pages->limit)->all();
public function actionDetail()
{
$pid = $this->pid;
$post = $this->postdata;
$id = isset($post['id']) ? $post['id'] : 0;
if ($id <= 0) {
$this->result('查询参数错误!');
}
$model = new AcTruckRoute();
$detail = $model->findOne($id)->toArray();
if(!$detail) $this->result('未查询到相应数据');
$this->result('查询成功!', $detail, 200);
}
public function actionAdd()
{
//数据预检查、编排
$data = $this->preSave('add');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
$model = new AcTruckRoute();
foreach ($data as $key=>$val) {
$model->$key = $val;
}
$res = $model->save();
$msg = '数据保存失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '数据保存成功!';
$return = [];
$return['id']= $model->attributes['id']; //获取插入后id;
$this->result($msg,$return, 200);
}
//编辑板车位置信息
public function actionEdit()
{
$detail = $this->preUpdate();
//数据预检查、编排
$data = $this->preSave('edit');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '数据编辑失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '数据编辑成功!';
$return = [];
$return['data']= $detail;
$this->result($msg,$return, 200);
}
//删除记录
public function actionDelete()
{
$detail = $this->preUpdate();
if ($detail->deleted != 0) {
$this->result('数据已被删除过,操作无效', [], 400);
}
$data = [];
$data['update_at'] = time();
$data['deleted'] = $detail->deleted + 1;
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '板车路线记录删除失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '板车路线记录删除成功!';
$this->result($msg,[], 200);
}
public function actionAjax()
{
$detail = $this->preUpdate();
$get = Yii::$app->request->get();
$msg = '';
$errorCode = 0;
$_time = time();
$detail->update_at = $_time;
$res = true;
switch ($get['do']) {
case 'show':
if ($detail->status_code != 1) {
$detail->status_code = 1;
$res = $detail->save();
}
if ($res) {
$msg = '记录显示标记成功';
$errorCode = 200;
} else {
$msg = '记录显示标记失败';
$errorCode = 0;
}
break;
case 'hide':
if ($detail->status_code != 0) {
$detail->status_code = 0;
$res = $detail->save();
}
if ($res) {
$msg = '记录隐藏标记成功';
$errorCode = 200;
} else {
$msg = '记录隐藏标记失败';
$errorCode = 0;
}
break;
default:
break;
}
$this->result($msg, [], $errorCode);
}
private function search(){
$pid = $this->pid;
$model = new AcTruckRoute();
$where = [];
$where[] = ['=', 'pid', $pid];
if($this->online_id){
$where[] = ['=', 'online_id', $this->online_id];
}
$post = $this->postdata;
$search = $post['search'] ?? [];
//板车
$search['truck_id'] = isset($search['truck_id']) ? (int)$search['turck_id'] : 0;
if ($search['truck_id']) {
$where[] = ['=', 'truck_id', $search['truck_id']];
}
$where[] = ['=', 'deleted', 0];
$data = $model->find()->where($where);
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => $this->pageSize]);
$res = $data->offset($pages->offset)->limit($pages->limit)->orderby('orderby ASC')->all();
$AcTruck = new AcTruck();
if ($search['truck_id']) {
$trucks[$search['truck_id']] = $AcTruck->findOne($search['truck_id']);
}else{
$truck_ids = [];
foreach ($res as $r) {
$truck_ids[] = $r->truck_id;
}
$AcTruck = new AcTruck();
$truck_ids = array_unique($truck_ids);
$where = [];
$where[] = 'and';
$where[] = ['=', 'pid', $pid];
$where[] = ['IN', 'id', $truck_ids];
$where[] = ['=', 'deleted', 0];
$trucks = $AcTruck->find()->where($where)->indexby('id')->all();
$status = Yii::$app->params['CommonStatus'];
return $this->render('list', [
'list' => $res,
'pager' => $pages,
'status' => $status,
'trucks' => $trucks,
'online_id' => $online_id,
'truckol' => $truckol
]);
}
public function actionNew()
$AcTruckOnline = new AcTruckOnline();
if ($this->online_id) {
$truckOls[$this->online_id] = $this->truckOl;
}else{
$truckOl_ids = [];
foreach ($res as $r) {
$truckOl_ids[] = $r->online_id;
}
$truckOl_ids = array_unique($truckOl_ids);
$where = [];
$where[] = 'and';
$where[] = ['=', 'pid', $pid];
$where[] = ['IN', 'id', $truckOl_ids];
$where[] = ['=', 'deleted', 0];
$truckOls = $AcTruckOnline->find()->where($where)->indexby('id')->all();
}
return ['res'=>$res,'query'=>$data,'trucks'=>$trucks,'truckOls'=>$truckOls];
}
/*
* 数据更新前的预检查,返回对应关联数据
* 必须确保get与post数据中均包含需更新的数据id且一致
* */
private function preUpdate()
{
$status = Yii::$app->params['CommonStatus'];
$AcTruckRoute = [];
$AcTruckRoute['status_code'] = 0;
$online_id = Yii::$app->session->get('online_id'); //发车任务ID
$truckol = Yii::$app->session->get('truckOnline'); //发车任务
$AcTruckRoute['truck_id'] = $truckol['truck_id'];
$AcTruckRoute['truck_num'] = $truckol['truck_num'];
return $this->render('modify', ['status' => $status, 'detail' => $AcTruckRoute, 'online_id' => $online_id, 'truckol' => $truckol]);
$id = (int)Yii::$app->request->get('id');
if(!$id) $this->result('请求错误未携带ID参数');
$post = $this->postdata;
if($post['id'] != $id) $this->result('传参id与请求数据不匹配',[],403);
$model = new AcTruckRoute();
$res = $model->findOne($id);
if(!$res) $this->result('未查询到相应数据',[],404);
if($res->pid != $this->pid) $this->result('非本平台数据,不允许操作',[],401);
return $res;
}
//编辑板车位置信息
public function actionEdit()
/*
* 数据保存前的预检查(查重、参数校验等)
* 要保存的数据[],直接从post中取出
* @op操作类型add,edit……
* 校验机制:
* 编辑数据时必须用get方式传入参数id并与post进来的数据id进行比对只有一致时才能继续;
* 查重:禁止录入重复数据
* 返回:校验重组后的数据
* */
private function preSave($op)
{
$id = Yii::$app->request->get('id'); //记录ID
$online_id = Yii::$app->session->get('online_id'); //发车任务ID
$truckol = Yii::$app->session->get('truckOnline'); //发车任务
$AcTruckRoute = new AcTruckRoute();
$route = $AcTruckRoute->findOne($id);
if (!$route) {
$post = Yii::$app->request->post();
$return = [];
$return['msg'] = '位置记录数据获取异常,请重新选择获取';
$return['errorcode'] = 0;
$return['url'] = '';
$return['buttons'] = [
['title' => '好的,我知道了', 'class' => 'info', 'url' => $return['url']]
];
$return['content'] = $return['msg'];
$return['class'] = 'warning';
Yii::$app->request->setBodyParams($return);
return Yii::$app->runAction('index/msg');
}
$route = $route->toArray();
$route['truck_id'] = $truckol['truck_id'];
$route['online_id'] = $online_id;
$route['truck_num'] = $truckol['truck_num'];
$status = Yii::$app->params['CommonStatus'];
return $this->render('modify', ['status' => $status, 'detail' => $route, 'online_id' => $online_id, 'truckol' => $truckol]);
}
//保存位置记录信息
public function actionSave()
{
$post = Yii::$app->request->post();
$id = (int)$post['id'];
$pid = Yii::$app->session->get('pid');
$online_id = Yii::$app->session->get('online_id');
$truckol = Yii::$app->session->get('truckOnline'); //发车任务
$post = $this->postdata;
$data = [];
$data['truck_id'] = $truckol['truck_id'];
$data['online_id'] = $online_id;
$_time = time();
//格式化数据
//目标键=》POST键
$cols = ['longt' => 'lng', 'lat' => 'lat', 'addr' => 'addr'];
switch ($op) {
case 'add':
if(!$this->online_id) $this->result('未关联板车装载任务,保存失败',[],403);
$data['online_id'] = $this->online_id;
$data['truck_id'] = $this->truckOl->truck_id;
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
break;
case 'edit':
$id = (int)Yii::$app->request->get('id');
$_id = (int)$post['id'];
if(!$id != $_id) $this->result('id参数不匹配请检查');
$data['update_at'] = $_time;
break;
}
$data['pid'] = $this->pid;
$cols = ['longt' => 'lng', 'lat' => 'lat', 'addr' => 'addr','province'=>'province','city'=>'city'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? trim($post[$key]) : '';
}
@ -237,142 +310,6 @@
$data[$col] = isset($post[$key]) ? (int)$post[$key] : 0;
}
$_time = time();
$key = 'update_at';
$data[$key] = isset($post[$key]) ? strtotime($post[$key]) : $_time;
if (!$id) {
$data['create_at'] = $_time;
}
$data['pid'] = $pid;
//保存位置资料
$AcTruckRoute = new AcTruckRoute();
foreach ($data as $key => $val) {
$AcTruckRoute->$key = $val;
}
if ($id) {
$res = $AcTruckRoute->updateAll($data, ['id' => $id]);
} else {
$res = $AcTruckRoute->save();
$id = $AcTruckRoute->attributes['id']; //获取插入后id
}
if ($res) {
\Yii::$app->getSession()->setFlash('success', '信息保存成功!');
return $this->redirect(['edit', 'id' => $id]);
} else {
\Yii::$app->getSession()->setFlash('warning', '信息保存失败!');
return $this->goBack();
}
}
//删除记录
public function actionDelete()
{
$get = Yii::$app->request->get();
$post = Yii::$app->request->post();
$id = (int)$get['id'];
$pid = Yii::$app->session->get('pid');
$return = [];
$model = new AcTruckRoute();
$route = $model->findOne($id);
if (!$route) {
$return['msg'] = '数据不存在,删除失败';
$return['errorcode'] = 404;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
if ($route->pid != $pid) {
$return['msg'] = '非本平台数据,不允许操作';
$return['errorcode'] = 400;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
if ($route->deleted != 0) {
$return['msg'] = '数据已被删除过,操作无效';
$return['errorcode'] = 400;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
$route->deleted = 1;
$res = $route->save();
$return['url'] = '';
$return['timeout'] = 1; //n秒后自动跳转
$return['status'] = 0;
if ($res) {
$return['msg'] = '位置记录删除成功';
$return['errorcode'] = 200;
$return['data'] = $id;
} else {
$return['msg'] = '位置记录删除失败';
$return['errorcode'] = 0;
}
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
public function actionAjax()
{
$get = Yii::$app->request->get();
$post = Yii::$app->request->post();
$id = (int)$get['id'];
$pid = Yii::$app->session->get('pid');
$return = [];
$model = new AcTruckRoute();
$route = $model->findOne($id);
if (!$route) {
$return['msg'] = '数据不存在,删除失败';
$return['errorcode'] = 404;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
if ($route->pid != $pid) {
$return['msg'] = '非本平台数据,不允许操作';
$return['errorcode'] = 400;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
if ($route->deleted != 0) {
$return['msg'] = '数据已被删除,操作无效';
$return['errorcode'] = 400;
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
}
$return['timeout'] = 1; //n秒后自动跳转
$res = TRUE;
switch ($get['do']) {
case 'show':
if ($route->status_code != 1) {
$route->status_code = 1;
$res = $route->save();
}
if ($res) {
$return['msg'] = '记录显示标记成功';
$return['errorcode'] = 200;
$return['data'] = ['css' => 'success'];
} else {
$return['msg'] = '客车上板标记失败';
$return['errorcode'] = 0;
}
break;
case 'hide':
if ($route->status_code != 0) {
$route->status_code = 0;
$res = $route->save();
}
if ($res) {
$return['msg'] = '记录隐藏标记成功';
$return['errorcode'] = 200;
$return['data'] = ['css' => 'success'];
} else {
$return['msg'] = '客车上板标记失败';
$return['errorcode'] = 0;
}
break;
default:
break;
}
exit(json_encode($return, JSON_UNESCAPED_UNICODE));
return $data;
}
}

View File

@ -13,7 +13,6 @@
use yii\data\Pagination;
use yii\web\UploadedFile;
use common\models\CAttachment;
use backend\controllers\Common;
class UploadController extends Common
{
@ -30,7 +29,7 @@
$apis = [
'image' => '上传图片(单传)',
];
$this->result('您正使用CMTS系统文件上传接口!', $apis, 200);
$this->result('您正使用CMTS-GM系统文件上传接口!', $apis, 200);
}
public function actionImage()

View File

@ -1,12 +1,5 @@
<?php
# @Author: 嗨噜客(三亚) <fm453>
# @Date: 2022-05-22T07:37:06+08:00
# @Email: fm453@lukegzs.com
# @Last modified by: fm453
# @Last modified time: 2024-08-09T09:20:36+08:00
# @Copyright: www.hiluker.cn
namespace api\controllers\gm\v1;
use Yii;
@ -21,7 +14,7 @@
public function beforeAction($action)
{
if (!$this->pid) {
// $this->result('您正使用本系统内部接口,禁止非法链接使用!');
$this->result('您正使用本系统内部接口,禁止非法链接使用!');
}
return parent::beforeAction($action);
}
@ -29,55 +22,33 @@
public function actionIndex()
{
$apis = [
'list' => '搜索委托单位清单',
'detail' => '委托单位详情'
'list' => '委托单位清单',
'detail' => '委托单位详情',
'add'=>'添加',
'edit'=>'编辑',
'delete'=>'删除',
'show'=>'显示',
'hide'=>'隐藏',
'ajax'=>'ajax操作'
];
$this->result('您正使用CMTS系统委托单位管理接口', $apis, 200);
$this->result('您正使用CMTS-GM系统委托单位管理接口!', $apis, 200);
}
//列表
public function actionList()
{
$pid = $this->pid;
$return = [];
$model = new AcWeituoren();
$where = $where2 = [];
$where2[] = 'and';
$where['pid'] = $pid;
$post = $this->postdata;
$search = isset($post['search']) ? $post['search'] : NULL;
if (!$search) {
$search = [];
}
$search['title'] = isset($search['title']) ? trim(htmlspecialchars_decode($search['title'])) : '';
if (!empty($search['title'])) {
$where2[] = ['LIKE', 'company', $search['title']];
}
$where['deleted'] = 0;
$data = $model->find()->asArray()->where($where); //asArray() 放在find后可让查询结果以数组形式呈现
if ($search['title']) {
$data = $data->andwhere($where2);
}
$page = $this->page;
$pageSize = $this->pageSize;
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => $pageSize]);
$pages->setPage($page - 1, TRUE); //设置分页的当前页面值
$_orderby = 'orderby DESC,id ASC';
$res = $data->offset($pages->offset)->limit($pages->limit)->orderby($_orderby)->all();
$s = $this->search();
$res = $s['res'];
if (!$res) {
$this->result('没有符合条件的结果');
$this->result('没有查询到相应的数据!', [], 0);
}
$status = Yii::$app->params['CommonStatus'];
$return['code'] = 200;
$return['msg'] = '委托单位查询成功!';
$return['data'] = ['total' => $data->count(),
'data' => [
'weituoren' => $res
],
'page' => $this->page];
exit(json_encode($return, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT));
$data= [
'total'=>$s['query']->count(),
'weituoren' => $res,
'page'=>$this->page
];
$this->result('合作单位查询成功!', $data, 200);
}
public function actionDetail()
@ -90,9 +61,202 @@
$this->result('查询参数错误!');
}
$model = new AcWeituoren();
$weituo = $model->findOne($id);
$detail = $weituo->toArray();
$detail = $model->findOne($id)->toArray();
if(!$detail) $this->result('未查询到相应数据');
$this->result('查询成功!', $detail, 200);
}
public function actionAdd()
{
//数据预检查、编排
$data = $this->preSave('add');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
$model = new AcWeituoren();
foreach ($data as $key=>$val) {
$model->$key = $val;
}
$res = $model->save();
$msg = '数据保存失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '数据保存成功!';
$return = [];
$return['id']= $model->attributes['id']; //获取插入后id;
$this->result($msg,$return, 200);
}
//编辑司机资料
public function actionEdit()
{
$detail = $this->preUpdate();
//数据预检查、编排
$data = $this->preSave('edit');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '数据编辑失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '数据编辑成功!';
$return = [];
$return['data']= $detail;
$this->result($msg,$return, 200);
}
//删除员工
public function actionDelete()
{
$detail = $this->preUpdate();
$data = [];
$data['update_at'] = time();
$data['deleted'] = $detail->deleted + 1;
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '驾驶员数据删除失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '驾驶员数据删除成功!';
$this->result($msg,[], 200);
}
public function actionAjax()
{
$detail = $this->preUpdate();
$get = Yii::$app->request->get();
$msg = '';
$errorCode = 0;
$detail->update_at = time();
switch ($get['do']) {
case 'hide':
$detail->status_code = 0;
$res = $detail->save();
if ($res) {
$msg = '合作单位隐藏标记成功';
$errorCode = 200;
} else {
$msg = '合作单位隐藏标记失败';
}
break;
case 'show':
$detail->status_code = 1;
$res = $detail->save();
if ($res) {
$msg = '合作单位显示标记成功';
$errorCode = 200;
} else {
$msg = '合作单位显示标记失败';
}
break;
default:
break;
}
$this->result($msg,[], $errorCode);
}
private function search(){
$pid = $this->pid;
$return = [];
$model = new AcWeituoren();
$where = $where2 = [];
$where['pid'] = $pid;
$post = $this->postdata;
$search = $post['search'] ?? [];
$search['title'] = isset($search['title']) ? trim(htmlspecialchars_decode($search['title'])) : '';
if (!empty($search['title'])) {
$where2[] = 'or';
$where2[] = ['LIKE', 'name', $search['title']];
$where2[] = ['LIKE', 'mobile', $search['title']];
$where2[] = ['LIKE', 'company', $search['title']];
}
$where['deleted'] = 0;
$data = $model->find()->where($where);
if ($search['title']) {
$data = $data->andwhere($where2);
}
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => $this->pageSize]);
$_orderby = 'orderby DESC,update_at DESC';
$res = $data->offset($pages->offset)->limit($pages->limit)->orderBy($_orderby)->all();
return ['res'=>$res,'query'=>$data];
}
/*
* 数据更新前的预检查,返回对应关联数据
* 必须确保get与post数据中均包含需更新的数据id且一致
* */
private function preUpdate()
{
$id = (int)Yii::$app->request->get('id');
if(!$id) $this->result('请求错误未携带ID参数');
$post = $this->postdata;
if($post['id'] != $id) $this->result('传参id与请求数据不匹配',[],403);
$model = new AcWeituoren();
$res = $model->findOne($id);
if(!$res) $this->result('未查询到相应数据',[],404);
return $res;
}
/*
* 数据保存前的预检查(查重、参数校验等)
* 要保存的数据[],直接从post中取出
* @op操作类型add,edit……
* 校验机制:
* 编辑数据时必须用get方式传入参数id并与post进来的数据id进行比对只有一致时才能继续;
* 查重:禁止录入重复数据
* 返回:校验重组后的数据
* */
private function preSave($op)
{
$post = $this->postdata;
$company = trim($post['company']) ?? '';
if(!$company) $this->result('请传入单位名称');
$data = [];
//格式化数据
//目标键=》POST键
$model = new AcWeituoren();
switch ($op) {
case 'add':
$mobile = trim($post['mobile']) ?? '';
if(!$mobile) $this->result('请传入手机号');
//查询通讯录手机号是否在库(如果在库,则取出相应资料,剩余逻辑由前端完成)
$hasOne = AcWeituoren::find()->where(['mobile' => $mobile])->one();
if($hasOne){
$detail = $hasOne->toArray();
$this->result('保存失败,该手机号对应的数据已在库,系统自动现在为您调出该资料!',$detail,100);
}
$data['mobile'] = $mobile;
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
break;
case 'edit':
//编辑模式下没有改mobile避免校验重复性
$id = (int)Yii::$app->request->get('id');
$_id = (int)$post['id'];
if(!$id != $_id) $this->result('id参数不匹配请检查');
$data['update_at'] = time();
break;
}
$data['pid'] = $this->pid;
$cols = ['status_code' => 'status_code', 'deleted' => 'deleted','orderby'=>'orderby'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? (int)$post[$key] : 0;
}
return $data;
}
}

View File

@ -1,11 +1,3 @@
<?php
/**
* @Author: 嗨噜客(三亚)<fm453>
* @Date: 2025-04-10 23:19:13
* @FilePath: version.php
* @Description:
* @Email: 393213759@qq.com
* Copyright (c) 2025 by www.hiluker.cn, All Rights Reserved.
*/
defined('HI_VERSION') or define('HI_VERSION', '20250501.001');
defined('HI_VERSION') or define('HI_VERSION', '20250610.001');

View File

@ -1,8 +1,5 @@
@Author: fm453
@Date: 1970-01-01T08:00:00+08:00
@Email: fm43@hiluker.com
@Last modified by: Fm453
@Last modified time: 2021-09-15T00:45:53+08:00
管理系统