建议反馈

This commit is contained in:
DESKTOP-B7F3Q04\admin
2022-03-25 17:19:01 +08:00
parent 98f1944b39
commit 9764cfa7f3
4 changed files with 374 additions and 0 deletions

7
.env Normal file
View File

@@ -0,0 +1,7 @@
[email]
;发送建议邮件邮箱
send_email = tmrweb@tmrjournals.com
send_email_password = Wu999999tmrwe
;审核建议邮箱
editor_email = publisher@tmrjournals.com

View File

@@ -1 +1,14 @@
<?php
// 建议感谢
function getUserEmail($name,$caseId){
$content = 'Dear '.$name.',<br><br>';
$content .= 'Thank you for contacting TMR Publishing Group Service Center.<br><br>'.'Case ID:'.$caseId.'<br><br>';
$content .='You will receive a response to your inquiry or suggestion shortly.<br><br>' ;
$content .='Please use your case number: '.$caseId.' for future reference regarding this inquiry.<br><br>' ;
$content .='Thank you for your support.<br><br>' ;
$content .='Sincerely,<br>TMR Publishing Group Service Center<br>'.date('Y-m-d H:i:s') ;
return $content;
}

View File

@@ -0,0 +1,300 @@
<?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([]);
}
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()
];
$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());
$insert['suggest_url'] = $icon;
}else{
// 上传失败获取错误信息
return json(['code'=>1,'msg'=>$file->getError()]);
}
}
$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','RIGHT')
->join('t_problem','t_problem.problem_id = t_suggest.problem_id','RIGHT')
->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','RIGHT')
->join('t_problem','t_problem.problem_id = t_suggest.problem_id','RIGHT')
->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([]);
}
private function sendEmailForUser($userID,$email,$realname,$caseId,$insert){
$sendData=[
'sendEmail'=>Env::get('email.send_email'), // 发件人邮箱
'sendPassword'=>Env::get('email.send_email_password'), // 发件人密码
'user_id'=>$userID, //收件人ID
'email'=>$email,// 收件人邮箱
'title'=>'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'), // 发件人密码
'user_id'=>0,
'email'=>Env::get('email.editor_email'),// 收件人邮箱
'title'=>'TMR', // 邮件标题
'content'=>"Dear editor, please check the new feedback.",//邮件内容
];
return $editorData;
}
}

View File

@@ -0,0 +1,54 @@
<?php
namespace app\api\job;
use think\Db;
use think\Log;
use think\queue\Job;
class domail {
public function fire(Job $job, $data) {
$this->send($data);
$job->delete();
}
/**
* 发送邮件的逻辑
* @param type $data
*/
public function send($data){
$res = sendEmail($data['email'],$data['title'],$data['title'],$data['content'],$data['sendEmail'],$data['sendPassword']);
$insert = [
'title'=>$data['title'],
'content'=>$data['content'],
'recive_id'=>$data['user_id'],
'recive_email'=>$data['email'],
'journal_email'=>$data['sendEmail'],
'journal_password'=>$data['sendPassword'],
'create_time'=>time()
];
if(isset($data['attachment_url'])){
$insert['is_attachment'] = 1;
$insert['attachment_url'] = $data['attachment_url'];
}
if($res['status']==1){
$info = Db::name('email')->insert($insert);
if(!$info){
Log::write($insert,'thanksEmailError');
}
return true;
}else{
$insert['is_success'] = 0;
$insert['fail_reason'] = $res['data'];
$info = Db::name('email')->insert($insert);
if(!$info){
Log::write($insert,'thanksEmailError');
}
return false;
}
}
}