Files
tougao/application/api/controller/Suggest.php
2022-04-02 11:19:12 +08:00

336 lines
11 KiB
PHP

<?php
namespace app\api\controller;
use think\Controller;
use think\Db;
use think\Env;
use think\Log;
use think\Queue;
use think\Validate;
use think\Request;
/**
* @title 建议相关
* @description 建议相关
*/
class Suggest extends Controller{
protected $problem_obj = '';
protected $suggest_obj = '';
protected $user_obj = '';
public function __construct(\think\Request $request = null) {
parent::__construct($request);
$this->problem_obj = Db::name('problem');
$this->suggest_obj = Db::name('suggest');
$this->user_obj = Db::name('user');
}
/**
* @title 获取问题列表
* @description 获取问题列表
* @author wangzhaocui
* @url /api/Suggest/getProblem
* @method POST
*
*
* @return problem_id:问题ID#
* @return problem_title:问题title#
*
*/
public function getProblem(){
if (!Request::instance()->isPost()){
return json(['code'=>1,'msg'=>"Request method error"]);
}
$res = $this->problem_obj->where('problem_title_state',0)->field('problem_id,problem_title')->select();
return jsonSuccess($res);
}
/**
* @title 新增问题列表选项
* @description 新增问题列表选项
* @author wangzhaocui
* @url /api/Suggest/addProblem
* @method POST
*
* @param name:problem_title type:string require:1 desc:标题
* @param name:problem_press type:string require:1 desc:出版集团
* @param name:problem_type type:string require:1 desc:类型
*
* @return problem_id:问题ID#
* @return problem_title:问题title#
*
*/
public function addProblem(){
$data = $this->request->post();
// 验证规则
$rule = new Validate([
'problem_title'=>'require',
'problem_press'=>'require',
'problem_type'=>'require'
]);
if(!$rule->check($data)){
return json(['code' => 1,'msg'=>$rule->getError()]);
}
$insert=[
'problem_title'=>$data['problem_title'],
'problem_press'=>$data['problem_press'],
'problem_type'=>$data['problem_type'],
'problem_ctime'=>time(),
];
$this->problem_obj->insert($insert);
return jsonSuccess([]);
}
/**
* @title 修改问题列表
* @description 修改问题列表
* @author wangzhaocui
* @url /api/Suggest/updateProblem
* @method POST
*
* @param name:problem_id type:int require:1 desc:ID
* @param name:problem_title type:string require:1 desc:标题
* @param name:problem_press type:string require:1 desc:出版集团
* @param name:problem_type type:string require:1 desc:类型
* @param name:problem_title_state type:int require:1 desc:状态0正常1删除
*
*/
public function updateProblem(){
$data = $this->request->post();
// 验证规则
$rule = new Validate([
'problem_id'=>'require|number',
'problem_title'=>'require',
'problem_press'=>'require',
'problem_type'=>'require',
'problem_title_state'=>'require|number'
]);
if(!$rule->check($data)){
return json(['code' => 1,'msg'=>$rule->getError()]);
}
$this->problem_obj->where('problem_id',$data['problem_id'])->update($data);
return jsonSuccess([]);
}
/**
* @title 提交建议
* @description 提交建议
* @author wangzhaocui
* @url /api/Suggest/addSuggest
* @method POST
*
* @param name:user_id type:int require:1 desc:用户id
* @param name:problem_id type:int require:1 desc:问题id
* @param name:suggest_desc type:string require:1 desc:问题描述
* @param name:img type:file require:0 desc:问题图片
*/
public function addSuggest(){
$data = $this->request->post();
// 验证规则
$rule = new Validate([
'user_id'=>'require|number',
'problem_id'=>'require|number',
'suggest_desc'=>'require'
]);
if(!$rule->check($data)){
return json(['code' => 1,'msg'=>$rule->getError()]);
}
$insert=[
'user_id'=>$data['user_id'],
'problem_id'=>$data['problem_id'],
'suggest_desc'=>$data['suggest_desc'],
'suggest_ctime'=>time(),
'suggest_url'=>$data['suggest_url']
];
$userEmail = $this->user_obj->where('user_id',$data['user_id'])->field('email,realname')->find();
$problemInfo = $this->problem_obj->where(['problem_id'=>$data['problem_id'],'problem_title_state'=>0])->find();
//建议写入数据表
$id = $this->suggest_obj->insertGetId($insert);
$caseId = $problemInfo['problem_press'].'-'.$problemInfo['problem_type'].'-'.date('Ymd').'-'.sprintf("%03d", $id);
// 给用户发送感谢邮件
$sendUser = self::sendEmailForUser($data['user_id'],$userEmail['email'],$userEmail['realname'],$caseId,$insert);
// 给编辑发送邮件
$sendEditor = self::sendEmailForEditor();
$isUserPushed = Queue::push('app\api\job\domail@fire',$sendUser,'domail');
$isEditorPushed = Queue::push('app\api\job\domail@fire',$sendEditor,'domail');
return jsonSuccess([]);
}
/**
* @title 获取建议列表和搜索
* @description 获取建议列表和搜索
* @author wangzhaocui
* @url /api/Suggest/getSuggestList
* @method POST
*
* @param name:pageIndex type:int require:1 desc:页数
* @param name:pageSize type:int require:1 desc:条数
* @param name:problem_id type:int require:0 desc:问题id
* @param name:suggest_state type:int require:0 desc:状态
*
* @return data:建议#
* @return total:总数#
*
*/
public function getSuggestList(){
$data = $this->request->post();
// 验证规则
$rule = new Validate([
'pageIndex'=>'require|number',
'pageSize'=>'require|number'
]);
if(!$rule->check($data)){
return json(['code' => 1,'msg'=>$rule->getError()]);
}
$where=[];
if(isset($data['problem_id']) && $data['problem_id']>0){
$where['t_suggest.problem_id'] = $data['problem_id'];
}
if(isset($data['suggest_state']) && $data['suggest_state']>=0){
$where['t_suggest.suggest_state'] = $data['suggest_state'];
}
$res['data'] = $this->suggest_obj->field('t_suggest.*,t_user.realname,t_problem.problem_title')
->join('t_user','t_user.user_id = t_suggest.user_id','LEFT')
->join('t_problem','t_problem.problem_id = t_suggest.problem_id','LEFT')
->where($where)
->page($data['pageIndex'],$data['pageSize'])
->select();
$res['total'] = $this->suggest_obj->where($where)->count();
return jsonSuccess($res);
}
/**
* @title 查看建议详情
* @description 查看建议详情
* @author wangzhaocui
* @url /api/Suggest/getSuggestDetail
* @method POST
*
* @param name:suggest_id type:int require:1 desc:建议id
*
*/
public function getSuggestDetail(){
$data = $this->request->post();
// 验证规则
$rule = new Validate([
'suggest_id'=>'require|number'
]);
if(!$rule->check($data)){
return json(['code' => 1,'msg'=>$rule->getError()]);
}
$res = $this->suggest_obj->field('t_suggest.*,t_user.realname,t_problem.problem_title')
->join('t_user','t_user.user_id = t_suggest.user_id','LEFT')
->join('t_problem','t_problem.problem_id = t_suggest.problem_id','LEFT')
->where(['t_suggest.suggest_id'=>$data['suggest_id']])
->find();
return jsonSuccess($res);
}
/**
* @title 审核建议
* @description 审核建议
* @author wangzhaocui
* @url /api/Suggest/updateSuggest
* @method POST
*
* @param name:suggest_id type:int require:1 desc:建议id
*
*/
public function updateSuggest(){
$data = $this->request->post();
// 验证规则
$rule = new Validate([
'suggest_id'=>'require|number'
]);
if(!$rule->check($data)){
return json(['code' => 1,'msg'=>$rule->getError()]);
}
// 先查看这条建议是否被审核
$state = $this->suggest_obj->where('suggest_id',$data['suggest_id'])->find();
if($state['suggest_state']==1 ){
return json(['code' => 1,'msg'=>'please do not review again']);
}
$res = $this->suggest_obj->where('suggest_id',$data['suggest_id'])->update(['suggest_state'=>1]);
return jsonSuccess([]);
}
/**
* @title 上传反馈图片
* @description 上传反馈图片
* @author wangzhaocui
* @url /api/Suggest/upImg
* @method POST
* @param name:img type:file require:1 desc:图片
*
*/
// 上传反馈图片
public function upImg(){
$file = request()->file('img');
if($file){
$info = $file->move(ROOT_PATH . 'public' . DS . 'suggest');
if($info){
// 输出 suggest/20160820/42a79759f284b767dfcb2a0197904287.jpg
$icon = 'suggest/'.str_replace("\\", "/", $info->getSaveName());
return jsonSuccess(['icon'=>$icon]);
}else{
// 上传失败获取错误信息
return json(['code'=>1,'msg'=>$file->getError()]);
}
}
}
private function sendEmailForUser($userID,$email,$realname,$caseId,$insert){
$sendData=[
'sendEmail'=>Env::get('email.send_email'), // 发件人邮箱
'sendPassword'=>Env::get('email.send_email_password'), // 发件人密码
'journal_id'=>0,
'user_id'=>$userID, //收件人ID
'email'=>$email,// 收件人邮箱
'title'=>'Dear ' . $realname, // 邮件标题
'from_name'=>'TMR',
'content'=>getUserEmail($realname,$caseId),//邮件内容
];
if(isset($insert['suggest_url'])){
$sendData['is_attachment'] = 1;
$sendData['attachment_url'] = $insert['suggest_url'];
}
return $sendData;
}
private function sendEmailForEditor(){
$editorData=[
'sendEmail'=>Env::get('email.send_email'), // 发件人邮箱
'sendPassword'=>Env::get('email.send_email_password'), // 发件人密码
'journal_id'=>0,
'user_id'=>0,
'email'=>Env::get('email.editor_email'),// 收件人邮箱
'title'=>'Dear editor', // 邮件标题
'from_name'=>'TMR',
'content'=>"Dear editor, please check the new feedback.",//邮件内容
];
return $editorData;
}
}