作者 ZhengBing He

整合需要的字段信息到工单项目表里

... ... @@ -6,7 +6,6 @@ use App\Models\Manage\Manage;
use App\Models\Project\Project;
use App\Models\WorkOrder\TicketProject;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Http;
class FetchTicketProjects extends Command
... ... @@ -72,15 +71,18 @@ class FetchTicketProjects extends Command
$item['pm'] = $item['pm'] == '未安排' ? '杨长远' : $item['pm'];
$item['assm'] = $item['assm'] == '未安排' ? '杨长远' : $item['assm'];
$item['yhs'] = $item['yhs'] == '未安排' ? '杨长远' : $item['yhs'];
// 如果 $item['cate'] 包含”推广“字符,则$engineer_name = $item['assm']
$engineer_name = (strpos($item['cate'], '推广') !== false) ? $item['assm'] : $item['pm'];
$engineer_name = (strpos($item['cate'], '推广') !== false) ? $item['yhs'] : $item['assm'];
$fields = [
'post_id' => $item['postid'],
'company_name' => $item['company'],
'title' => $item['title'],
'engineer_id' => Manage::where('name', $engineer_name)->value('id') ?? 0,
'engineer_id' => Manage::where('name', $engineer_name)->value('id') ?? 0, // 第一负责人
'assm_id' => Manage::where('name', $item['assm'])->value('id') ?? 0, //售后服务经理
'seom_id' => Manage::where('name', $item['yhs'])->value('id') ?? 0, //售后服务经理
'website' => $item['main_url'] ?? '',
];
if (!$project) {
... ... @@ -116,9 +118,9 @@ class FetchTicketProjects extends Command
*/
public function fetch_v6()
{
$lastid = 0;
while (true) {
try {
$lastid = Cache::store('redis')->get('fetch_v6_lastid', 0);
$items = Project::where('id', '>', intval($lastid))
->orderBy('id', 'asc')
->limit(10)
... ... @@ -130,22 +132,44 @@ class FetchTicketProjects extends Command
foreach ($items as $item) {
$uuid = md5("V5{$item->id}");
$project = TicketProject::where('uuid', $uuid)->first();
$fields = [
'company_name' => $item->company,
'title' => $item->title,
'assm_id' => $item->type ==3 ? $item->deploy_optimize->manager_mid ?? 0 : $item->deploy_build->manager_mid ?? 0, // 售后服务经理
'seom_id' => $item->deploy_optimize->optimist_mid ?? $item->deploy_optimize->manager_mid ?? $item->deploy_optimize->tech_leader ?? 0, // 优化推广负责人
'engineer_id' => $item->type == 3 ?
$item->deploy_optimize->optimist_mid ?? $item->deploy_optimize->manager_mid ?? $item->deploy_optimize->tech_leader ?? 0
: $item->deploy_build->manager_mid ?? $item->deploy_build->leader_mid ?? 0, // 技术组长
];
if (!$project) {
$project = new TicketProject();
$project->uuid = $uuid;
$project->post_id = $item->post_id;
$project->version = 6;
$project->table_id = $item->id;
foreach ($fields as $k => $v) {
$project->$k = $v;
}
$project->save();
}else{
$changed = false;
foreach ($fields as $k => $v) {
if ($project->$k != $v) {
$project->$k = $v;
$changed = true;
}
}
if ($changed) {
$project->save();
Cache::store('redis')->put('fetch_v6_lastid', $item->id);
}
echo "V6: {$item->company}\n";
}
$lastid = $item->id;
echo date('Y-m-d H:i:s') . " V6: $item->id {$item->company} fetch ok \n";
}
}catch (\Exception $exception) {
echo $exception;
break;
}
}
}
}
... ...
... ... @@ -138,4 +138,17 @@ class TicketController extends BaseController
{
//
}
public function projectInfo($project_id)
{
$project = TicketProject::with([
'projectV6:id,company',
'assm:id,name',
'seom:id,name',
'first_engineer:id,name',
])
->where('uuid', $project_id)->first();
if (!$project) return $this->error('未找到项目', 404);
return response()->json(['data' => $project]);
}
}
... ...
... ... @@ -19,4 +19,26 @@ class TicketProject extends Model
->where('version', 6);
}
//售后服务经理
public function assm()
{
return $this->hasOne(Manage::class, 'id', 'assm_id')
->select(['id', 'name']);
}
// 优化师
public function seom()
{
return $this->hasOne(Manage::class, 'id', 'seom_id')
->select(['id', 'name']);
}
/**
* 第一负责人
*/
public function first_engineer()
{
return $this->hasOne(Manage::class, 'id', 'engineer_id')
->select(['id', 'name']);
}
}
... ...
... ... @@ -80,6 +80,7 @@ Route::any('/get_project_by_mch_id', [\App\Http\Controllers\Api\PrivateControlle
// B端,渠道在企微群操作-售后工单
Route::prefix('tickets')->group(function () {
Route::get('/{project_id}', [\App\Http\Controllers\Api\WorkOrder\TicketController::class, 'index'])->summary('B端,渠道-工单列表')->name('tickets.list');
Route::get('/projectInfo/{project_id}', [\App\Http\Controllers\Api\WorkOrder\TicketController::class, 'projectInfo'])->summary('B端,渠道-项目信息')->name('tickets.projectInfo');
Route::post('/{project_id}', [\App\Http\Controllers\Api\WorkOrder\TicketController::class, 'store'])->summary('B端,渠道-提工单')->name('tickets.store');
Route::get('/{project_id}/{id}', [\App\Http\Controllers\Api\WorkOrder\TicketController::class, 'show'])->summary('B端,渠道-工单详情')->name('tickets.show');
});
... ...