Browse Source

服务评价

master
weigang 5 years ago
parent
commit
3aa5ac4d55
  1. 75
      app/Controller/v3/ServiceEvaluateController.php
  2. 32
      app/Model/v3/ServiceEvaluate.php
  3. 66
      app/Request/v3/EvaluateRequest.php
  4. 43
      app/Request/v3/PersonnelRequest.php
  5. 101
      app/Service/v3/Implementations/ServiceEvaluateService.php
  6. 18
      app/Service/v3/Interfaces/ServiceEvaluateServiceInterface.php
  7. 1
      config/autoload/dependencies.php
  8. 8
      config/routes.php

75
app/Controller/v3/ServiceEvaluateController.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()));
}
}

32
app/Model/v3/ServiceEvaluate.php

@ -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',
];
}

66
app/Request/v3/EvaluateRequest.php

@ -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' => '服务评价内容',
];
}
}

43
app/Request/v3/PersonnelRequest.php

@ -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' => '服务专员',
];
}
}

101
app/Service/v3/Implementations/ServiceEvaluateService.php

@ -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;
}
}

18
app/Service/v3/Interfaces/ServiceEvaluateServiceInterface.php

@ -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();
}

1
config/autoload/dependencies.php

@ -87,4 +87,5 @@ return [
\App\Service\v3\Interfaces\UserRelationBindServiceInterface::class => \App\Service\v3\Implementations\UserCommunityBindService::class, \App\Service\v3\Interfaces\UserRelationBindServiceInterface::class => \App\Service\v3\Implementations\UserCommunityBindService::class,
\App\Service\v3\Interfaces\BadgeServiceInterface::class => \App\Service\v3\Implementations\BadgeService::class, \App\Service\v3\Interfaces\BadgeServiceInterface::class => \App\Service\v3\Implementations\BadgeService::class,
\App\Service\v3\Interfaces\InitialDeliveryServiceInterface::class => \App\Service\v3\Implementations\InitialDeliveryService::class, \App\Service\v3\Interfaces\InitialDeliveryServiceInterface::class => \App\Service\v3\Implementations\InitialDeliveryService::class,
\App\Service\v3\Interfaces\ServiceEvaluateServiceInterface::class => \App\Service\v3\Implementations\ServiceEvaluateService::class,
]; ];

8
config/routes.php

@ -141,10 +141,10 @@ Router::addGroup('/v3/', function () {
Router::post('userAddress/getAddressAndDistributionPrice', 'App\Controller\v3\UserAddressController@getAddressAndDistributionPrice'); Router::post('userAddress/getAddressAndDistributionPrice', 'App\Controller\v3\UserAddressController@getAddressAndDistributionPrice');
Router::post('withdraw/applyByStore', 'App\Controller\v3\WithdrawController@applyByStore'); Router::post('withdraw/applyByStore', 'App\Controller\v3\WithdrawController@applyByStore');
Router::post('community/bind', 'App\Controller\v3\CommunityController@bind'); Router::post('community/bind', 'App\Controller\v3\CommunityController@bind');
Router::post('serviceEvaluate/evaluate', 'App\Controller\ServiceEvaluateController@evaluate');
Router::post('serviceEvaluate/isPersonnel', 'App\Controller\ServiceEvaluateController@isPersonnel');
Router::post('serviceEvaluate/getPersonnelInfo', 'App\Controller\ServiceEvaluateController@getPersonnelInfo');
Router::post('serviceEvaluate/getEvaluateList', 'App\Controller\ServiceEvaluateController@getEvaluateList');
Router::post('serviceEvaluate/evaluate', 'App\Controller\v3\ServiceEvaluateController@evaluate');
Router::post('serviceEvaluate/isPersonnel', 'App\Controller\v3\ServiceEvaluateController@isPersonnel');
Router::post('serviceEvaluate/getPersonnelInfo', 'App\Controller\v3\ServiceEvaluateController@getPersonnelInfo');
Router::post('serviceEvaluate/getEvaluateList', 'App\Controller\v3\ServiceEvaluateController@getEvaluateList');
Router::post('home/market', 'App\Controller\v3\HomeController@marketInfo'); Router::post('home/market', 'App\Controller\v3\HomeController@marketInfo');
},['middleware' => [\App\Middleware\Auth\ApiMiddleware::class, \App\Middleware\Auth\UserMiddleware::class]]); },['middleware' => [\App\Middleware\Auth\ApiMiddleware::class, \App\Middleware\Auth\UserMiddleware::class]]);

Loading…
Cancel
Save