建议反馈
This commit is contained in:
7
.env
Normal file
7
.env
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
[email]
|
||||||
|
;发送建议邮件邮箱
|
||||||
|
send_email = tmrweb@tmrjournals.com
|
||||||
|
send_email_password = Wu999999tmrwe
|
||||||
|
|
||||||
|
;审核建议邮箱
|
||||||
|
editor_email = publisher@tmrjournals.com
|
||||||
@@ -1 +1,14 @@
|
|||||||
<?php
|
<?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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
300
application/api/controller/Suggest.php
Normal file
300
application/api/controller/Suggest.php
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
54
application/api/job/domail.php
Normal file
54
application/api/job/domail.php
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user