Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
aic_duty_strategy
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
yinxiaoling
aic_duty_strategy
Commits
b3085218
Commit
b3085218
authored
May 15, 2020
by
yinxiaoling
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
策略新建
parent
b7fa07b3
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
207 additions
and
19 deletions
+207
-19
LoginApiController.php
app/Http/Controllers/LoginApiController.php
+9
-3
StrategySetController.php
app/Http/Controllers/strategy/StrategySetController.php
+26
-2
StrategyTaskJob.php
app/Jobs/StrategyTaskJob.php
+37
-0
StrategyService.php
app/Service/StrategyService.php
+127
-10
DatabaseSeeder.php
database/seeds/DatabaseSeeder.php
+1
-0
api.php
routes/api.php
+7
-4
No files found.
app/Http/Controllers/LoginApiController.php
View file @
b3085218
...
@@ -15,14 +15,20 @@ class LoginApiController extends BaseController
...
@@ -15,14 +15,20 @@ class LoginApiController extends BaseController
$param
=
$request
->
except
(
'url'
);
$param
=
$request
->
except
(
'url'
);
$url
=
$request
->
url
;
$url
=
$request
->
url
;
Log
::
channel
(
'api'
)
->
info
(
substr
(
md5
(
json_encode
(
$param
)),
1
,
8
));
/*
Log::channel('api')->info(substr(md5(json_encode($param)),1,8));
/*
Log::channel('api')->info($url);
Log::channel('api')->info($url);
if($url != substr(md5(json_encode($param)),1,8)){
if($url != substr(md5(json_encode($param)),1,8)){
return $this->errorWithInfo('url验证不通过', 401);
return $this->errorWithInfo('url验证不通过', 401);
} */
} */
//固定登录用户
$allowLoginUser
=
[
'username'
=>
'yxl001'
,
'user_sn'
=>
'SYSUSER|9da548a2e392a679eb274a0b2abeb627'
,
'parent_sn'
=>
'ljs'
];
if
(
empty
(
$param
[
'username'
])
||
empty
(
$param
[
'password'
]
)){
if
(
empty
(
$param
[
'username'
])
||
empty
(
$param
[
'password'
]
)){
return
$this
->
errorWithInfo
(
'参数验证不通过'
,
401
);
return
$this
->
errorWithInfo
(
'用户名、密码必填'
,
401
);
}
if
(
$param
[
'username'
]
!=
$allowLoginUser
[
'username'
]){
//固定登录用户
return
$this
->
errorWithInfo
(
'用户名不正确'
,
401
);
}
}
$user
=
DB
::
table
(
'users'
)
->
select
(
'status'
,
'user_name'
,
'password'
,
'user_sn'
,
'team_name'
,
'password'
,
'expired'
,
'ai_count'
,
'caller_group'
,
'api_key'
,
'parent_sn'
)
->
where
(
'user_name'
,
$param
[
'username'
])
$user
=
DB
::
table
(
'users'
)
->
select
(
'status'
,
'user_name'
,
'password'
,
'user_sn'
,
'team_name'
,
'password'
,
'expired'
,
'ai_count'
,
'caller_group'
,
'api_key'
,
'parent_sn'
)
->
where
(
'user_name'
,
$param
[
'username'
])
...
...
app/Http/Controllers/strategy/StrategySetController.php
View file @
b3085218
...
@@ -35,6 +35,12 @@ class StrategySetController extends Controller
...
@@ -35,6 +35,12 @@ class StrategySetController extends Controller
return
$this
->
errorWithInfo
(
'表单验证失败'
,
401
);
return
$this
->
errorWithInfo
(
'表单验证失败'
,
401
);
}
}
$params
=
$request
->
all
();
$params
=
$request
->
all
();
if
(
$params
[
'frequency_type'
]
==
2
){
//一天两次时间、项目格式验证,#号分割
if
(
substr_count
(
$params
[
'call_time_set'
],
'#'
)
!=
1
||
substr_count
(
$params
[
'project_sn'
],
'#'
)
!=
1
){
return
$this
->
errorWithInfo
(
'呼叫设置验证失败'
,
401
);
}
}
$successTotal
=
$failTotal
=
0
;
$successTotal
=
$failTotal
=
0
;
$failDataFile
=
''
;
$failDataFile
=
''
;
if
(
isset
(
$params
[
'upload'
])){
//excel文件上传
if
(
isset
(
$params
[
'upload'
])){
//excel文件上传
...
@@ -61,14 +67,32 @@ class StrategySetController extends Controller
...
@@ -61,14 +67,32 @@ class StrategySetController extends Controller
$setReturn
=
$StrategySet
->
save
();
$setReturn
=
$StrategySet
->
save
();
if
(
$setReturn
){
//策略保存成功,处理excel数据
if
(
$setReturn
){
//策略保存成功,处理excel数据
if
(
isset
(
$successTotal
)
&&
$successTotal
>
0
){
if
(
isset
(
$successTotal
)
&&
$successTotal
>
0
){
$
StrategyService
->
insertStrategyExcel
(
$strategySn
,
$successData
);
$
insertExcelReturn
=
$StrategyService
->
insertStrategyExcel
(
$strategySn
,
$successData
);
}
}
}
}
//返回成功数、失败数、失败导出文件
//返回成功数、失败数、失败导出文件
$returnArr
=
compact
(
'successTotal'
,
'failTotal'
,
'failDataFile'
);
$returnArr
=
compact
(
'
total'
,
'
successTotal'
,
'failTotal'
,
'failDataFile'
);
return
$this
->
successWithInfo
([
'data'
=>
$returnArr
]);
return
$this
->
successWithInfo
([
'data'
=>
$returnArr
]);
}
}
//项目列表
public
function
getProjectsList
(){
$projectInfo
=
[[
'sn'
=>
'projects|a3a4259352c8e964ad6ea6c5ee8a7208'
,
'name'
=>
'liuy-转人工测试'
]];
return
$this
->
successWithInfo
([
'data'
=>
$projectInfo
]);
}
//下载模板及下载导入失败excel数据
public
function
downloadModel
(
Request
$request
,
StrategyService
$StrategyService
){
$excelFile
=
$request
->
filename
;
if
(
!
empty
(
$excelFile
)){
//下载失败导入数据
}
else
{
//下载模板
$excelName
=
"策略任务数据导入模板"
;
$datas
[
0
][
0
]
=
"姓名"
;
$datas
[
0
][
1
]
=
"*手机号码"
;
$datas
[
0
][
2
]
=
"值班日期"
;
$StrategyService
->
storeExcelStyle
(
$excelName
,
$datas
,
''
,
''
,
1
);
}
}
}
}
app/Jobs/StrategyTaskJob.php
0 → 100644
View file @
b3085218
<?php
namespace
App\Jobs
;
use
Illuminate\Bus\Queueable
;
use
Illuminate\Queue\SerializesModels
;
use
Illuminate\Queue\InteractsWithQueue
;
use
Illuminate\Contracts\Queue\ShouldQueue
;
use
Illuminate\Foundation\Bus\Dispatchable
;
use
App\Service\StrategyService
;
class
StrategyTaskJob
implements
ShouldQueue
{
use
Dispatchable
, InteractsWithQueue, Queueable, SerializesModels
;
private
$paramsArr
;
/**
* Create a new job instance.
*
* @return void
*/
public
function
__construct
(
$params
)
{
$this
->
paramsArr
=
$params
;
}
/**
* Execute the job.
*
* @return void
*/
public
function
handle
()
{
$StrategyService
=
new
StrategyService
();
$StrategyService
->
createTaskDataJob
(
$this
->
paramsArr
[
'strategySn'
]);
}
}
app/Service/StrategyService.php
View file @
b3085218
...
@@ -4,6 +4,9 @@ namespace App\Service;
...
@@ -4,6 +4,9 @@ namespace App\Service;
use
Maatwebsite\Excel\Facades\Excel
;
use
Maatwebsite\Excel\Facades\Excel
;
use
Illuminate\Support\Facades\Log
;
use
Illuminate\Support\Facades\Log
;
use
App\models\StrategyExcel
;
use
App\models\StrategyExcel
;
use
App\models\StrategySet
;
use
App\models\StrategyTask
;
use
App\Jobs\StrategyTaskJob
;
class
StrategyService
class
StrategyService
{
{
...
@@ -54,6 +57,7 @@ class StrategyService
...
@@ -54,6 +57,7 @@ class StrategyService
//判断excel数据问题,$day_type//外呼日期类型 0每天 1日期前一天和当天 1需要验证值班日期必填
//判断excel数据问题,$day_type//外呼日期类型 0每天 1日期前一天和当天 1需要验证值班日期必填
public
function
validExcelData
(
$successData
,
$day_type
){
public
function
validExcelData
(
$successData
,
$day_type
){
$failData
=
[];
$failData
=
[];
$total
=
count
(
$successData
);
foreach
(
$successData
as
$k
=>
$v
){
foreach
(
$successData
as
$k
=>
$v
){
$dataLab
=
1
;
$dataLab
=
1
;
if
(
strlen
(
$v
[
0
])
>
20
){
//姓名最大20个字符,中文处理,放入失败数据中
if
(
strlen
(
$v
[
0
])
>
20
){
//姓名最大20个字符,中文处理,放入失败数据中
...
@@ -83,6 +87,8 @@ class StrategyService
...
@@ -83,6 +87,8 @@ class StrategyService
}
}
}
}
}
else
{
//不需要验证附初始值
$successData
[
$k
][
2
]
=
date
(
'Y-m-d'
);
}
}
if
(
$dataLab
==
0
){
if
(
$dataLab
==
0
){
unset
(
$successData
[
$k
]);
unset
(
$successData
[
$k
]);
...
@@ -98,20 +104,20 @@ class StrategyService
...
@@ -98,20 +104,20 @@ class StrategyService
$failExcelName
=
"导入失败数据_"
.
date
(
'YmdHis'
);
$failExcelName
=
"导入失败数据_"
.
date
(
'YmdHis'
);
//dump($failExcelName);
//dump($failExcelName);
$failFile
=
$this
->
storeExcelStyle
(
$failExcelName
,
$failData
,
''
,
'import'
);
$failFile
=
$this
->
storeExcelStyle
(
$failExcelName
,
$failData
,
''
,
'import'
);
//$failDataFile = $failExcelName.'.xlsx';
if
(
$failFile
){
if
(
$failFile
){
$failDataFile
=
storage_path
(
'export'
)
.
'\\'
.
$failExcelName
.
'.xlsx'
;
$failDataFile
=
$failExcelName
.
'.xlsx'
;
}
else
{
//失败数据写入失败
}
else
{
//失败数据写入失败
Log
::
channel
(
'api'
)
->
error
(
'错误文件excel写入失败'
);
Log
::
channel
(
'api'
)
->
error
(
'错误文件excel写入失败'
);
}
}
}
}
return
compact
(
'successData'
,
'failData'
,
'failTotal'
,
'successTotal'
,
'failDataFile'
);
return
compact
(
'successData'
,
'
total'
,
'
failData'
,
'failTotal'
,
'successTotal'
,
'failDataFile'
);
}
}
//保存内容到excel文件并下载
//保存内容到excel文件并下载
,$exportType excel文件操作类型 0存储数据直接保存, 1直接导出数据 , 2保存并导出数据
public
function
storeExcelStyle
(
$excelName
,
$datas
,
$endLen
=
''
,
$path
=
''
){
public
function
storeExcelStyle
(
$excelName
,
$datas
,
$endLen
=
''
,
$path
=
''
,
$exportType
=
0
){
try
{
try
{
$arr
=
range
(
'A'
,
'Z'
);
$arr
=
range
(
'A'
,
'Z'
);
if
(
!
empty
(
$endLen
)){
if
(
!
empty
(
$endLen
)){
...
@@ -145,11 +151,27 @@ class StrategyService
...
@@ -145,11 +151,27 @@ class StrategyService
});
});
});
});
if
(
empty
(
$path
)){
//默认路径storage/exports
if
(
$exportType
==
1
){
$e
->
store
(
'xlsx'
);
if
(
empty
(
$path
)){
//默认路径storage/exports
}
else
{
//自定义路径 storage/$path
$e
->
export
(
'xlsx'
);
$e
->
store
(
'xlsx'
,
storage_path
(
$path
));
}
else
{
//自定义路径 storage/$path
$e
->
export
(
'xlsx'
,
storage_path
(
$path
));
}
}
elseif
(
$exportType
==
2
){
if
(
empty
(
$path
)){
//默认路径storage/exports
$e
->
store
(
'xlsx'
)
->
export
(
'xlsx'
);
}
else
{
//自定义路径 storage/$path
$e
->
store
(
'xlsx'
,
storage_path
(
$path
))
->
export
(
'xlsx'
,
storage_path
(
$path
));
}
}
else
{
if
(
empty
(
$path
)){
//默认路径storage/exports
$e
->
store
(
'xlsx'
);
}
else
{
//自定义路径 storage/$path
$e
->
store
(
'xlsx'
,
storage_path
(
$path
));
}
}
}
return
true
;
return
true
;
}
catch
(
\Exception
$e
){
}
catch
(
\Exception
$e
){
Log
::
channel
(
'api'
)
->
error
(
$e
->
getFile
()
.
'-'
.
$e
->
getLine
()
.
'-'
.
$e
->
getMessage
());
Log
::
channel
(
'api'
)
->
error
(
$e
->
getFile
()
.
'-'
.
$e
->
getLine
()
.
'-'
.
$e
->
getMessage
());
...
@@ -173,10 +195,105 @@ class StrategyService
...
@@ -173,10 +195,105 @@ class StrategyService
$insertData
[]
=
$insertTemp
;
$insertData
[]
=
$insertTemp
;
}
}
//dd($insertData);
//dd($insertData);
return
StrategyExcel
::
insert
(
$insertData
);
$insertExcelReturn
=
StrategyExcel
::
insert
(
$insertData
);
if
(
$insertExcelReturn
){
//创建任务数据,这一步剥离出来,不然接口返回太慢,方案==,使用队列处理
$jobParams
=
[
'strategySn'
=>
$strategySn
];
$job
=
(
new
StrategyTaskJob
(
$jobParams
))
->
onQueue
(
'StrategyTask'
);
dispatch
(
$job
);
//$this->createTaskDataJob($strategySn);
return
true
;
}
}
}
return
false
;
}
}
//跟进策略任务数据生成待新建任务的excel数据,(两种情况 一、有新数据时当时生成,二、每月1号生成)$operaterType类型 1为每月1号生成,0是按照当前日期计算
public
function
createTaskDataJob
(
$strategySn
){
//set_time_limit(0);
if
(
empty
(
$strategyInfo
)){
$strategyInfo
=
StrategySet
::
where
(
'strategy_sn'
,
$strategySn
)
->
first
()
->
toArray
();
}
$cmonth
=
date
(
'n'
);
//当前月份(不带0)
$data
=
StrategyExcel
::
where
([[
'strategy_sn'
,
$strategySn
],[
'last_handle_month'
,
'<>'
,
$cmonth
]])
->
get
();
$batch
=
500
;
//单批处理多少条
$total
=
count
(
$data
);
$now
=
date
(
'Y-m-d H:i:s'
);
$taskData
=
[];
//一天呼叫两次类型,拆分时间,拆分项目
$call_time
=
explode
(
"#"
,
$strategyInfo
[
'call_time_set'
]);
$project_sn
=
explode
(
"#"
,
$strategyInfo
[
'project_sn'
]);
$tempi
=
0
;
if
(
$strategyInfo
[
'day_type'
]
==
0
){
//每天拨打
$startDay
=
date
(
'Y-m-d'
);
//执行当天时间
//这个月最后一天日期
$endDay
=
date
(
'Y-m-d'
,
strtotime
(
"-1 day"
,
strtotime
(
"+1 month"
,
strtotime
(
date
(
'Y-m-01'
)))));
for
(
$i
=
$startDay
;
$i
<=
$endDay
;
$i
=
date
(
"Y-m-d"
,
strtotime
(
"+1 day"
,
strtotime
(
$i
)))){
foreach
(
$data
as
$k
=>
$v
){
$tempi
++
;
$taskData
[]
=
[
'name'
=>
$v
->
name
,
'phone'
=>
$v
->
phone
,
'duty_date'
=>
$v
->
duty_date
,
'parent_sn'
=>
$strategyInfo
[
'parent_sn'
],
'call_number'
=>
$strategyInfo
[
'call_number'
],
'project_sn'
=>
$project_sn
[
0
],
//$strategyInfo['project_sn'],
'call_date'
=>
$i
,
'call_time'
=>
$call_time
[
0
],
//$strategyInfo['call_time'],
'created_at'
=>
$now
];
if
(
count
(
$taskData
)
==
$batch
||
$total
==
$batch
||
$tempi
==
$total
){
if
(
!
empty
(
$taskData
)){
StrategyTask
::
insert
(
$taskData
);
$taskData
=
[];
}
}
}
}
}
else
{
$doubleTotal
=
$total
*
2
;
foreach
(
$data
as
$k
=>
$v
){
$tempi
=
$tempi
+
2
;
$yesterday
=
date
(
'Y-m-d'
,
strtotime
(
"-1 day"
,
strtotime
(
$v
->
duty_date
)));
$taskData
[]
=
[
'name'
=>
$v
->
name
,
'phone'
=>
$v
->
phone
,
'duty_date'
=>
$v
->
duty_date
,
'parent_sn'
=>
$strategyInfo
[
'parent_sn'
],
'call_number'
=>
$strategyInfo
[
'call_number'
],
'project_sn'
=>
$project_sn
[
0
],
'call_date'
=>
$yesterday
,
'call_time'
=>
$call_time
[
0
],
'created_at'
=>
$now
];
$taskData
[]
=
[
'name'
=>
$v
->
name
,
'phone'
=>
$v
->
phone
,
'duty_date'
=>
$v
->
duty_date
,
'parent_sn'
=>
$strategyInfo
[
'parent_sn'
],
'call_number'
=>
$strategyInfo
[
'call_number'
],
'project_sn'
=>
$project_sn
[
1
],
'call_date'
=>
$v
[
'duty_date'
],
'call_time'
=>
$call_time
[
1
],
'created_at'
=>
$now
];
if
(
count
(
$taskData
)
==
$batch
||
$doubleTotal
==
$batch
||
$tempi
==
$doubleTotal
){
if
(
!
empty
(
$taskData
)){
StrategyTask
::
insert
(
$taskData
);
$taskData
=
[];
}
}
}
}
}
}
}
...
...
database/seeds/DatabaseSeeder.php
View file @
b3085218
...
@@ -54,6 +54,7 @@ class DatabaseSeeder extends Seeder
...
@@ -54,6 +54,7 @@ class DatabaseSeeder extends Seeder
$table
->
char
(
'name'
,
50
)
->
nullable
();
//姓名
$table
->
char
(
'name'
,
50
)
->
nullable
();
//姓名
$table
->
date
(
'duty_date'
)
->
nullable
();
//值班日期
$table
->
date
(
'duty_date'
)
->
nullable
();
//值班日期
$table
->
unsignedBigInteger
(
'phone'
);
//手机号
$table
->
unsignedBigInteger
(
'phone'
);
//手机号
$table
->
unsignedSmallInteger
(
'last_handle_month'
)
->
default
(
0
);
//最后处理月份,当月处理后不再处理
$table
->
timestamp
(
'updated_at'
)
->
nullable
();
$table
->
timestamp
(
'updated_at'
)
->
nullable
();
$table
->
timestamp
(
'created_at'
)
->
nullable
();
$table
->
timestamp
(
'created_at'
)
->
nullable
();
});
});
...
...
routes/api.php
View file @
b3085218
...
@@ -20,11 +20,14 @@ Route::middleware('auth:api')->get('/user', function (Request $request) {
...
@@ -20,11 +20,14 @@ Route::middleware('auth:api')->get('/user', function (Request $request) {
//接口路由
//接口路由
Route
::
post
(
'login'
,
'LoginApiController@index'
);
Route
::
post
(
'login'
,
'LoginApiController@index'
);
Route
::
group
([
'middleware'
=>
'check.apikey'
,
'namespace'
=>
'strategy'
],
function
()
{
Route
::
group
([
'middleware'
=>
'check.apikey'
,
'namespace'
=>
'strategy'
],
function
()
{
Route
::
match
([
'get'
,
'post'
],
'strategyLists'
,
'InfoController@index'
);
//初始化
Route
::
match
([
'get'
,
'post'
],
'strategyLists'
,
'InfoController@index'
);
//初始化
Route
::
post
(
'strategy/getProjectsList'
,
'StrategySetController@getProjectsList'
)
->
name
(
'strategy.getProjectsList'
);
//项目列表
Route
::
get
(
'strategy/downloadModel'
,
'StrategySetController@downloadModel'
)
->
name
(
'strategy.downloadModel'
);
//导出模板
Route
::
apiResource
(
'strategySet'
,
StrategySetController
::
class
);
Route
::
apiResource
(
'strategy'
,
'StrategySetController'
);
});
});
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment