Files
tougao/application/api/controller/Promotion.php
wangjinlei 30e1287ebb 1
2023-05-12 11:22:17 +08:00

223 lines
7.8 KiB
PHP

<?php
namespace app\api\controller;
use app\api\controller\Base;
use think\Db;
use think\Exception;
use think\Queue;
use think\Validate;
class Promotion extends Base
{
public function __construct(\think\Request $request = null)
{
parent::__construct($request);
}
/**获取推广任务列表
* @return \think\response\Json|void
*/
public function getPromotions(){
$data = $this->request->post();
$rule = new Validate([
'user_id'=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$list = $this->promotion_obj->where('user_id',$data['user_id'])->select();
$re['list'] = $list;
return jsonSuccess($list);
}
/**获取用户库列表
* @return void
*/
public function getHumenLib(){
$lib[] = "user";
$lib[] = "author";
$lib[] = "ash";
$re['list'] = $lib;
return jsonSuccess($re);
}
/**筛选用户库目标数量
* @return void
* @throws Exception
*/
public function getLibUsers(){
$data = $this->request->post();
$rule = new Validate([
"lib"=>"require",
'category'=>"require",
"body"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$count = 0;
if($data['lib']=="user"){//用户库选择为正式库
$where['t_user.state'] = 0;
$where['t_user.no_email'] = 0;
if($data['category']=="major"){
$where['t_user_reviewer_info.major'] = ['in',$this->majorids($data['body'])];
}else{
$where["t_user_reviewer_info.field"] = ["like","%".$data['body']."%"];
}
$count=$this->user_obj->join("t_user_reviewer_info","t_user.user_id = t_user_reviewer_info.reviewer_id","left")->where($where)->count();
}elseif($data['lib']=="author"){//用户库选择为作者库
$where['t_user.state'] = 0;
$where['t_user.no_email'] = 0;
if($data['category']=="major"){
$where['t_user_reviewer_info.major'] = ['in',$this->majorids($data['body'])];
}else{
$where["t_user_reviewer_info.field"] = ["like","%".$data['body']."%"];
}
$exist = "select * from t_user_author where user_id = t_user.user_id";
$count=$this->user_obj->join("t_user_reviewer_info","t_user.user_id = t_user_reviewer_info.reviewer_id","left")->where($where)->whereExists($exist)->count();
}else{//灰库
$where["t_user_ash.state"] = 0 ;
$where['t_user_ash.no_email'] = 0;
if($data['category']=="major"){
$where['t_user_ash.major'] = ['in',$this->majorids($data['body'])];
}else {
$where['t_use_ash.field'] = ['like',"%".$data['body']."%"];
}
$count=$this->user_ash_obj->where($where)->count();
}
$re['count'] = $count;
return jsonSuccess($re);
}
/**退订推广邮件
* @return void
*/
public function NoEmail(){
}
/**获取官网文章列表
* @return void
*/
public function getWebArticles(){
$data = $this->request->post();
$rule = new Validate([
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
}
/**获取邮件模版列表
* @return void
*/
public function getEmailModel(){
$list = $this->promotion_email_obj->where('state',0)->select();
$re['list'] = $list;
return jsonSuccess($re);
}
/**添加推广任务主体
* @return void
*/
public function addPromotion(){
$data = $this->request->post();
$rule = new Validate([
'user_id'=>"require",
'journal_id'=>"require",
"library"=>"require",
"category"=>"require",
"pagesize"=>"require",
"email_title"=>"require",
"template"=>"require",
"has_hb"=>"require",
"frequency"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$insert['user_id'] = $data['user_id'];
$insert['journal_id'] = $data['journal_id'];
$insert['library'] = $data['library'];
$insert['category'] = $data['category'];
if($data['category']=="major"){
$insert['major'] = $data['major'];
}else{
$insert['keyword'] = trim($data['keyword']);
}
$insert['pagesize'] = $data['pagesize'];
$insert['email_title'] = $data['email_title'];
$insert['template']=$data['template'];
$insert['has_hb'] = $data['has_hb'];
$insert['frequency'] = $data['frequency'];
$insert['ctime'] = time();
$this->promotion_obj->insert($insert);
return jsonSuccess([]);
}
/**执行推广任务主方法
* @return void
*/
public function autoPushPromotion(){
$data = $this->request->post();
$rule = new Validate([
"pro_id"=>'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$pro_info = $this->promotion_obj->where('pro_id',$data['pro_id'])->find();
$journal_info = $this->journal_obj->where('journal_id',$pro_info['journal_id'])->find();
if(!$pro_info||$pro_info['is_end']==1){
return jsonError('ended');
}
$push_arr = json_decode($pro_info['pushed']);
$pageIndex = $pro_info['pushed']==""?1:end($push_arr)+1;
//选择人员
$list = $this->getLibraryList($pro_info['library'],$pro_info['category'],$pro_info['category']=="major"?$pro_info['major']:$pro_info['keyword'],$pageIndex,$pro_info['pagesize']);
// $l['email'] = "751475802@qq.com";
// $l['name'] = "wangjinlei";
// $l['type'] = "ash";
// $l['id'] = 35;
// $list[] = $l;
//组合模版
$template = $pro_info['template'];
$template = str_replace("{{journal_title}}",$journal_info['title'],$template);
$template = str_replace("{{journal_abbr}}",$journal_info['abbr'],$template);
$template = str_replace("{{journal_email}}",$journal_info['email'],$template);
$template = str_replace("{{journal_jabbr}}",$journal_info['jabbr'],$template);
$template = str_replace("{{journal_issn}}",$journal_info['issn'],$template);
//发送邮件
foreach ($list as $v){
$template = str_replace("{{user_name}}",$v['name'],$template);
$template = str_replace("{{unsubscribe}}","http://journalapi.tmrjournals.com/public/index.php/api/Promotion/NoEmail?lib=".$v['type']."&id=".$v['id'],$template);
$ali['email'] = $v['email'];
$ali['title'] = $pro_info['email_title'];
$ali['content'] = $template;
$ali['has_hb'] = $pro_info['has_hb'];
// aliemail($v['email'],$pro_info['email_title'],$template,$pro_info['has_hb']);
Queue::push('app\api\job\mail@promotion',$ali,'mail');
}
//更改各种状态
//如果后续没有待发数据,要关闭此推广项目
$check_next = $this->getLibraryList($pro_info['library'],$pro_info['category'],$pro_info['category']=="major"?$pro_info['major']:$pro_info['keyword'],$pageIndex+1,$pro_info['pagesize']);
if(count($check_next)==0){
$this->promotion_obj->where('pro_id',$data['pro_id'])->update(['is_end'=>1]);
}
//发送过的数据加一页
$push_arr[] = $pageIndex;
$this->promotion_obj->where('pro_id',$data['pro_id'])->update(["pushed"=>json_encode($push_arr)]);
$re['msg'] = "push email :".count($list);
return jsonSuccess($re);
}
}