8 changed files with 340 additions and 4 deletions
-
75app/Controller/v3/ServiceEvaluateController.php
-
32app/Model/v3/ServiceEvaluate.php
-
66app/Request/v3/EvaluateRequest.php
-
43app/Request/v3/PersonnelRequest.php
-
101app/Service/v3/Implementations/ServiceEvaluateService.php
-
18app/Service/v3/Interfaces/ServiceEvaluateServiceInterface.php
-
1config/autoload/dependencies.php
-
8config/routes.php
@ -0,0 +1,75 @@ |
|||
<?php |
|||
|
|||
namespace App\Controller\v3; |
|||
|
|||
use App\Controller\BaseController; |
|||
use App\Request\v3\EvaluateRequest; |
|||
use App\Request\v3\UserRequest; |
|||
use App\Request\v3\PersonnelRequest; |
|||
use App\Service\v3\Interfaces\ServiceEvaluateServiceInterface; |
|||
use Hyperf\Di\Annotation\Inject; |
|||
|
|||
class ServiceEvaluateController extends BaseController |
|||
{ |
|||
/** |
|||
* @Inject |
|||
* @var ServiceEvaluateServiceInterface |
|||
*/ |
|||
protected $evaluateService; |
|||
/** |
|||
* 提交评价 |
|||
* |
|||
* 评价内容: |
|||
* 服务态度评分、服务质量评分、满意度评分、评价内容 |
|||
* 关联信息: |
|||
* 服务专员ID、市场ID、评价的用户ID |
|||
* 查询信息: |
|||
* 用户注册/创建时间 |
|||
* |
|||
*/ |
|||
public function evaluate(EvaluateRequest $validator) |
|||
{ |
|||
// TODO 数据保存失败的返回处理
|
|||
// TODO 自定义验证用户、市场、服务人员ID
|
|||
$ret = $this->evaluateService->evaluate($this->request->all()); |
|||
return $this->success($ret); |
|||
|
|||
} |
|||
|
|||
/** |
|||
*获取服务专员基本信息 |
|||
*/ |
|||
public function isPersonnel(UserRequest $validator) |
|||
{ |
|||
//根据用户iD 获取服务专员详细信息
|
|||
$user_id = $this->request->input('user_id', 0); |
|||
$res = $this->evaluateService->isPersonnel($user_id); |
|||
return $this->success($res); |
|||
} |
|||
|
|||
/** |
|||
*获取服务专员基本信息 |
|||
*/ |
|||
public function getPersonnelInfo(PersonnelRequest $validator) |
|||
{ |
|||
//根据服务专员iD 获取服务专员详细信息
|
|||
$service_personnel_id = $this->request->input('service_personnel_id', 0); |
|||
$res = $this->evaluateService->getPersonnelInfo($service_personnel_id); |
|||
//如果存在服务专员则获取配置信息
|
|||
if(!empty($res)) { |
|||
$config = $this->evaluateService->getQuickEvaluate(); |
|||
$res->config = $config; |
|||
} |
|||
return $this->success($res); |
|||
} |
|||
|
|||
/** |
|||
*获取服务专员评价列表 |
|||
*/ |
|||
public function getEvaluateList(PersonnelRequest $validator) |
|||
{ |
|||
//获取服务专员评价列表
|
|||
return $this->success($this->evaluateService->getEvaluateList($this->request->all())); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,32 @@ |
|||
<?php |
|||
|
|||
namespace App\Model\v3; |
|||
|
|||
use App\Model\Model; |
|||
|
|||
class ServiceEvaluate extends Model |
|||
{ |
|||
/** |
|||
* @var string table name |
|||
*/ |
|||
protected $table = 'lanzu_service_evaluate'; |
|||
|
|||
/** |
|||
* @var array 允许插入的属性 |
|||
*/ |
|||
protected $fillable = ['user_id', 'user_created_at', 'service_personnel_id', 'market_id', 'c_attitude', 'c_service', 'c_quality', 'c_average', 'content', 'is_new_user']; |
|||
|
|||
/** |
|||
* 默认值 |
|||
*/ |
|||
protected $attributes = []; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
protected $casts = [ |
|||
'created_at' => 'datetime:Y-m-d h:i:s', |
|||
'updated_at' => 'datetime:Y-m-d h:i:s', |
|||
]; |
|||
|
|||
} |
|||
@ -0,0 +1,66 @@ |
|||
<?php |
|||
|
|||
declare(strict_types=1); |
|||
|
|||
namespace App\Request\v3; |
|||
|
|||
use App\Request\BaseFormRequest; |
|||
|
|||
class EvaluateRequest extends BaseFormRequest |
|||
{ |
|||
/** |
|||
* Determine if the user is authorized to make this request. |
|||
*/ |
|||
public function authorize(): bool |
|||
{ |
|||
return true; |
|||
} |
|||
|
|||
/** |
|||
* Get the validation rules that apply to the request. |
|||
*/ |
|||
public function rules(): array |
|||
{ |
|||
return [ |
|||
'c_attitude' => 'required|nonempty', |
|||
'c_service' => 'required|nonempty', |
|||
'c_quality' => 'required|nonempty', |
|||
'content' => 'required|nonempty|strlen:15,150', |
|||
'user_id' => 'required|nonempty|integer|exists:ims_cjdc_user,id', |
|||
'service_personnel_id' => 'required|nonempty|integer|exists_enable:lanzu_service_personnel,id,status=1|not_equal:user_id,lanzu_service_personnel,id,user_id', |
|||
'market_id' => 'required|nonempty|integer|exists:ims_cjdc_market,id', |
|||
]; |
|||
} |
|||
|
|||
public function messages(): array |
|||
{ |
|||
return [ |
|||
'user_id.exists' => ':attribute不存在', |
|||
'service_personnel_id.exists' => ':attribute不存在', |
|||
'market_id.exists' => ':attribute不存在', |
|||
'user_id.*' => ':attribute信息不正确', |
|||
'service_personnel_id.exists_enable' => ':attribute不存在或被禁用', |
|||
'service_personnel_id.not_equal' => ':attribute不能是自己', |
|||
'service_personnel_id.*' => ':attribute信息不正确', |
|||
'market_id.*' => ':attribute信息不正确', |
|||
'c_attitude.*' => ':attribute信息不正确', |
|||
'c_service.*' => ':attribute信息不正确', |
|||
'c_quality.*' => ':attribute信息不正确', |
|||
'content.strlen' => ':attribute字数限制在:min~:max字', |
|||
'content.*' => ':attribute信息不正确', |
|||
]; |
|||
} |
|||
|
|||
public function attributes(): array |
|||
{ |
|||
return [ |
|||
'user_id' => '用户', |
|||
'service_personnel_id' => '服务专员', |
|||
'market_id' => '服务专员市场', |
|||
'c_attitude' => '服务态度评分', |
|||
'c_service' => '服务值评分', |
|||
'c_quality' => '服务质量评分', |
|||
'content' => '服务评价内容', |
|||
]; |
|||
} |
|||
} |
|||
@ -0,0 +1,43 @@ |
|||
<?php |
|||
|
|||
declare(strict_types=1); |
|||
|
|||
namespace App\Request\v3; |
|||
|
|||
use App\Request\BaseFormRequest; |
|||
|
|||
class PersonnelRequest extends BaseFormRequest |
|||
{ |
|||
/** |
|||
* Determine if the user is authorized to make this request. |
|||
*/ |
|||
public function authorize(): bool |
|||
{ |
|||
return true; |
|||
} |
|||
|
|||
/** |
|||
* Get the validation rules that apply to the request. |
|||
*/ |
|||
public function rules(): array |
|||
{ |
|||
return [ |
|||
'service_personnel_id' => 'required|nonempty|integer|exists_enable:lanzu_service_personnel,id,status=1', |
|||
]; |
|||
} |
|||
|
|||
public function messages(): array |
|||
{ |
|||
return [ |
|||
'service_personnel_id.exists_enable' => ':attribute不存在或被禁用', |
|||
'service_personnel_id.*' => ':attribute信息不正确' |
|||
]; |
|||
} |
|||
|
|||
public function attributes(): array |
|||
{ |
|||
return [ |
|||
'service_personnel_id' => '服务专员', |
|||
]; |
|||
} |
|||
} |
|||
@ -0,0 +1,101 @@ |
|||
<?php |
|||
|
|||
namespace App\Service\v3\Implementations; |
|||
|
|||
use App\Model\v3\ServiceEvaluate; |
|||
use App\Model\v3\User; |
|||
use App\Service\v3\Interfaces\ServiceEvaluateServiceInterface; |
|||
use Hyperf\DbConnection\Db; |
|||
use Hyperf\Di\Annotation\Inject; |
|||
|
|||
class ServiceEvaluateService implements ServiceEvaluateServiceInterface |
|||
{ |
|||
|
|||
public function evaluate($data) |
|||
{ |
|||
// 当前用户是否今日新注册并第一次提交评论
|
|||
$data['user_created_at'] = User::where(['id' => $data['user_id']])->value('join_time'); |
|||
$evaluateExist = ServiceEvaluate::where(['user_id' => $data['user_id']])->exists(); |
|||
|
|||
$data['is_new_user'] = 0; |
|||
if ( |
|||
!$evaluateExist |
|||
&& $data['user_created_at']>=strtotime(date('Y-m-d 00:00:00')) |
|||
&& $data['user_created_at']<=strtotime(date('Y-m-d 23:59:59')) |
|||
) { |
|||
$data['is_new_user'] = 1; |
|||
} |
|||
|
|||
// 计算评分平均分
|
|||
$score = $data['c_attitude'] + $data['c_service'] + $data['c_quality']; |
|||
$data['c_average'] = round($score/3, 1); |
|||
|
|||
return ServiceEvaluate::create($data); |
|||
} |
|||
|
|||
public function isPersonnel($user_id) |
|||
{ |
|||
$res = Db::table('lanzu_service_personnel') |
|||
->where([ |
|||
['user_id','=',$user_id], |
|||
['status','=',1] |
|||
]) |
|||
->select('id','status') |
|||
->first(); |
|||
return $res; |
|||
} |
|||
|
|||
public function getPersonnelInfo($service_personnel_id) |
|||
{ |
|||
$res = Db::table('lanzu_service_personnel') |
|||
->where([ |
|||
['id','=',$service_personnel_id], |
|||
['status','=',1] |
|||
]) |
|||
->first(); |
|||
//如果存在服务专员则计算评价平均分
|
|||
if(!empty($res)) { |
|||
$personnel_average = Db::table('lanzu_service_evaluate')->where(['service_personnel_id' => $service_personnel_id])->avg('c_average'); |
|||
$res->personnel_average = sprintf("%.1f", $personnel_average); |
|||
} |
|||
return $res; |
|||
} |
|||
|
|||
public function getEvaluateList($data) |
|||
{ |
|||
//踩坑 paginate 只能接收int型参数
|
|||
$per_page = isset($data['per_page']) && $data['per_page'] > 0 ? intval($data['per_page']) : 6; |
|||
//查询评论列表 按照创建时间降序排序
|
|||
$res = ServiceEvaluate::join('ims_cjdc_user as u','u.id','=','lanzu_service_evaluate.user_id') |
|||
->where(['lanzu_service_evaluate.service_personnel_id'=>$data['service_personnel_id']]) |
|||
->select('lanzu_service_evaluate.*','u.name','u.img') |
|||
->orderBy('lanzu_service_evaluate.created_at','desc') |
|||
->paginate($per_page); |
|||
return $res; |
|||
} |
|||
|
|||
|
|||
public function getQuickEvaluate() |
|||
{ |
|||
$data = (object)null; |
|||
//获取快速评论标题
|
|||
$obj1 = (object)null; |
|||
$obj1->title1 = '服务热情'; |
|||
$obj1->title2 = '工作仔细'; |
|||
$obj1->title3 = '亲和力强'; |
|||
$data->quick_evaluate_title = $obj1; |
|||
//获取快速评论内容
|
|||
$obj2 = (object)null; |
|||
$obj2->content1 = '懒族生活的小伙伴服务态度热情,非常耐心的解决我提出的要求。'; |
|||
$obj2->content2 = '清洗工作非常的细致入微,很干净!回家可以直接做菜了,很方便!非常感谢懒族小伙伴的服务。'; |
|||
$obj2->content3 = '懒族生活服务站的小伙伴聊天时就像朋友一样,亲和力很强。以后买菜就找他们啦!'; |
|||
$data->quick_evaluate_content = $obj2; |
|||
//获取评论长度限制参数
|
|||
$obj3 = (object)null; |
|||
$obj3->min_length = 15; |
|||
$obj3->max_length = 150; |
|||
$data->length = $obj3; |
|||
return $data; |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,18 @@ |
|||
<?php |
|||
|
|||
namespace App\Service\v3\Interfaces; |
|||
|
|||
interface ServiceEvaluateServiceInterface |
|||
{ |
|||
|
|||
public function evaluate($data); |
|||
|
|||
public function isPersonnel($user_id); |
|||
|
|||
public function getPersonnelInfo($service_personnel_id); |
|||
|
|||
public function getEvaluateList($data); |
|||
|
|||
public function getQuickEvaluate(); |
|||
|
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue