作者 刘锟

Merge remote-tracking branch 'origin/master' into akun

... ... @@ -121,6 +121,7 @@ class RemainDay extends Command
if($deploy_build['seo_plan'] == 1){
if($deploy_build['seo_service_duration'] != 0){
if(in_array($item['id'],$this->bm_projectId)){
$compliance_day = (int)$item['bm_finish_remain_day'];
$seo_remain_day = $deploy_build['seo_service_duration'] - (int)$item['bm_finish_remain_day'];
}else{
//按自然日统计
... ... @@ -133,7 +134,7 @@ class RemainDay extends Command
$this->project->edit(['seo_remain_day'=>$seo_remain_day,'bm_finish_remain_day'=>$compliance_day ?? 0],['id'=>$item['id']]);
}else{
//同时包括白帽版本+默认版本的项目
$this->project->edit(['seo_remain_day'=>$seo_remain_day],['id'=>$item['id']]);
$this->project->edit(['seo_remain_day'=>$seo_remain_day,'bm_finish_remain_day'=>$compliance_day ?? 0],['id'=>$item['id']]);
}
}
}
... ...
... ... @@ -88,7 +88,27 @@ class ClearSeoTdk extends Command
'seo_description' => '',
'keyword_title' => '',
'keyword_content' => '',
]
],
'gl_ai_blog' => [
'seo_title' => '',
'seo_keyword' => '',
'seo_description' => '',
],
'gl_ai_blog_author' => [
'seo_title' => '',
'seo_keyword' => '',
'seo_description' => '',
],
'gl_custom_module_category' => [
'seo_title' => '',
'seo_keywords' => '',
'seo_description' => '',
],
'gl_custom_module_content' => [
'seo_title' => '',
'seo_keywords' => '',
'seo_description' => '',
],
];
/**
... ...
... ... @@ -78,8 +78,7 @@ class AsideTicketController extends BaseController
*/
public function getProjects($search)
{
$projects = TicketProject::where('is_del', 0)
->where(function ($query) use ($search) {
$projects = TicketProject::where(function ($query) use ($search) {
// 查找项目名称或公司名称
$query->where('title', 'like', '%' . $search . '%')
->orWhere('company_name', 'like', '%' . $search . '%');
... ... @@ -99,8 +98,7 @@ class AsideTicketController extends BaseController
$dept_id = ManageHr::where('manage_id', $this->manage['id'])
->value('dept_id');
$lists = TicketProject::where('is_del', 0)
->when(($this->manage['role'] != 1 && $dept_id != 5), function ($query) use ($dept_id) {
$lists = TicketProject::when(($this->manage['role'] != 1 && $dept_id != 5), function ($query) use ($dept_id) {
/**
* 超管看所有项目 $this->manage['role']=1
* 全球搜: 技术部ID 1、售后部ID 2
... ... @@ -171,12 +169,13 @@ class AsideTicketController extends BaseController
$ticket->submit_username = $this->manage['name'];
$ticket->star = $request->input('star', 3);
$ticket->plan_end_at = $request->input('plan_end_at', null);
$ticket->close_wechat = $request->input('close_wechat', false);
$ticket->save();
// 分配工单参与人
$ticket->saveEngineers($request->input('engineer_ids', []));
$nickname = ManageHr::where('manage_id', $this->manage['id'])->value('nickname') ?? mb_substr($ticket->submit_username, 0, 1) . '**';
if ($project->wechat_switch)
if ($project->wechat_switch && !$ticket->close_wechat)
$project->pushWechatGroupMsg("创贸({$nickname})新增了工单(ID:{$ticket->id}),请及时处理!");
return $ticket;
});
... ... @@ -237,7 +236,7 @@ class AsideTicketController extends BaseController
->update(['status' => TicketLog::STATUS_COMPLETED, 'end_at' => now()]);
// 推动微信通知
$project = $ticket->project;
if ($project->wechat_switch)
if ($project->wechat_switch && !$ticket->close_wechat)
$project->pushWechatGroupMsg("工单(ID:{$ticket->id})已全部完成,请访问查看详情!");
$ticket->pushDing('finish');
... ...
... ... @@ -92,7 +92,7 @@ class AsideTicketLogController extends BaseController
$ticket->status = Tickets::STATUS_COMPLETED;
$ticket->end_at = now();
$project = $ticket->project;
if ($project->wechat_switch)
if ($project->wechat_switch && !$ticket->close_wechat)
$project->pushWechatGroupMsg("工单(ID:{$ticket->id})已全部完成,请访问查看详情!");
$ticket->pushDing('finish');
}
... ...
... ... @@ -66,7 +66,8 @@ class TicketChatController extends BaseController
$chat->save();
$project = $ticket->project;
$nickname = ManageHr::where('manage_id', $this->manage['id'])->value('nickname') ?? mb_substr($ticket->submit_username, 0, 1) . '**';
$project->pushWechatGroupMsg("创贸({$nickname})对工单(ID:{$ticket->id})进行了补充,请及时查看处理!");
if ($project->wechat_switch && !$ticket->close_wechat)
$project->pushWechatGroupMsg("创贸({$nickname})对工单(ID:{$ticket->id})进行了补充,请及时查看处理!");
$this->response('success', Code::SUCCESS, $chat);
}
... ...
... ... @@ -50,7 +50,7 @@ class GeoQuestionResLogic extends BaseLogic
$filed = ['id','project_id','question_id','platform','question','en_question','keywords','url','created_at','updated_at'];
if(!empty($map['created_at'])){
$map['project_id'] = $this->user['project_id'];
$map['created_at'] = ['between',[$map['created_at'].' 00:00:00',$map['created_at'].'23:59:59']];
$map['created_at'] = ['between',[$map['created_at'].' 00:00:00',$map['created_at'].' 23:59:59']];
$this->model = new GeoQuestionLog();
}
$query = $this->model->formatQuery($map);
... ... @@ -83,7 +83,7 @@ class GeoQuestionResLogic extends BaseLogic
*/
public function countQuantity(){
$questionModel = new GeoQuestion();
$list = $questionModel->list(['project_id',$this->user['project_id']],['question','keywords','url']);
$list = $questionModel->list(['project_id'=>$this->user['project_id']],['question','keywords','url']);
$questionTotalCount = $urlTotalCount = $keywordsTotalCount = $keywordUrlCount = 0;
foreach ($list as $item){
$questionTotalCount += count($item['question'] ?? []);
... ... @@ -91,15 +91,13 @@ class GeoQuestionResLogic extends BaseLogic
$urlTotalCount += count($item['url'] ?? []);
}
$keywordArr = [];
$questionResModel = new GeoQuestionResult();
$resList = $questionResModel->list(['project_id',$this->user['project_id']],['keywords_num','url_num']);
$questionResModel = new GeoQuestionLog();
$resList = $questionResModel->list(['project_id'=>$this->user['project_id']],['keywords','url','keywords_num','url_num']);
foreach ($resList as $resItem){
$keywordsNumArr = json_decode($resItem['keywords_num'] ?? [], true); // 转为 PHP 关联数组
$keywordUrlCount += array_sum($keywordsNumArr); // 获取值的总和
$urlNumArr = json_decode($resItem['url'] ?? [],true);
$keywordUrlCount += array_sum($urlNumArr); // 获取值的总和
$keywordUrlCount += count($resItem['keywords']);
$keywordUrlCount += count($resItem['url']);
foreach ($resItem['keywords_num'] as $key => $value) {
$keywordArr[$key] = ($keywordArr[$key] ?? 0) + $value;
$keywordArr[$key] = ($keywordArr[$key] ?? 0) + (($value != 0) ? 1 : 0);
}
}
$data = [
... ...
... ... @@ -31,6 +31,7 @@ class AsideTicketStoreRequest extends FormRequest
'engineer_ids' => 'array',
'star' => 'nullable|in:1,2,3|integer',
'plan_end_at' => 'nullable|date',
'close_wechat' => 'nullable|boolean',
];
}
}
... ...
... ... @@ -9,6 +9,7 @@
namespace App\Models\Geo;
use App\Helper\Arr;
use App\Models\Base;
/**
... ... @@ -21,4 +22,80 @@ use App\Models\Base;
class GeoQuestionLog extends Base
{
protected $table = 'gl_geo_question_log';
/**
* @remark :geo提交关键字获取器
* @name :getUrlAttribute
* @author :lyh
* @method :post
* @time :2025/7/3 9:53
*/
public function getKeywordsAttribute($value)
{
if($value){
$value = Arr::s2a($value);
}
return $value;
}
/**
* @remark :geo提交网址获取器
* @name :getUrlAttribute
* @author :lyh
* @method :post
* @time :2025/7/3 9:52
*/
public function getUrlAttribute($value)
{
if($value){
$value = Arr::s2a($value);
}
return $value;
}
/**
* @remark :geo提交结果获取器
* @name :getUrlAttribute
* @author :lyh
* @method :post
* @time :2025/7/3 9:52
*/
public function getTextAttribute($value)
{
if($value){
$value = Arr::s2a($value);
}
return $value;
}
/**
* @remark :命中的关键词数量
* @name :getKeywordsNumAttribute
* @author :lyh
* @method :post
* @time :2025/7/21 11:33
*/
public function getKeywordsNumAttribute($value)
{
if($value){
$value = Arr::s2a($value);
}
return $value;
}
/**
* @remark :命中的url数量
* @name :getUrlNumAttribute
* @author :lyh
* @method :post
* @time :2025/7/21 11:34
*/
public function getUrlNumAttribute($value)
{
if($value){
$value = Arr::s2a($value);
}
return $value;
}
}
... ...
... ... @@ -435,6 +435,10 @@ class Project extends Base
}
$project_id = $domainModel->formatQuery(['domain'=>$domain,'status'=>1])->value('project_id');
if(empty($project_id)){
//项目多语言自定义跳转连接
$project_id = CountryCustom::where('is_create', 1)->where('custom_domain', $domain)->value('project_id');
}
if (empty($project_id)) {
//是否小语种域名或amp站域名
$domainPrefix = explode(".",$domain);
... ...
... ... @@ -53,7 +53,25 @@ class Tickets extends Base
elseif ($this->project->project_cate == 4)
$canyu[] = 85; // 黄小玉
else{
// todo 待完善
// todo V5V6 的项目, 组长能够给看到组员的工单
$leaders = [];
foreach (array_merge($engineer_ids, $canyu) as $engineer_id)
{
$engineer = ManageHr::where('manage_id', $engineer_id)->first();
if ($engineer)
{
$leader = ManageHr::where('is_leader', 1)
->where('status', ManageHr::STATUS_ONE)
->where('dept_id', $engineer->dept_id)
->where('belong_group', $engineer->belong_group)
->value('manage_id');
if ($leader)
$leaders[] = $leader;
}
}
// 合并组长 id 到 $canyu
$canyu = array_merge($canyu, $leaders);
}
$all_engineer_ids = array_unique(array_merge($canyu, $engineer_ids));
... ...
... ... @@ -62,7 +62,7 @@ class MessagePush extends Base
}
//特殊处理, 要求任何时候收到询盘都要及时推送到群里面
$special_project_ids = [650, 2045];
$special_project_ids = [650, 2045, 916];
//9-21 点,每条消息及时通知
//21-第二天 9 点,整合一起通知
$hour = date('H', strtotime($submit_at));
... ...