complaintRepository = $complaintRepositoryEloquent; } /** * @param Request $request * * @return mixed * @throws \Prettus\Repository\Exceptions\RepositoryException */ public function handleList(Request $request) { $this->complaintRepository->pushCriteria(new ComplaintCriteria($request)); $this->complaintRepository->setPresenter(ComplaintPresenter::class); return $this->complaintRepository->searchComplaintsByPage(); } /** * @param $id * * @return \Illuminate\Database\Eloquent\Model */ public function handleProfile($id) { $this->complaintRepository->setPresenter(ComplaintPresenter::class); return $this->complaintRepository->searchComplaintBy($id); } /** * @param array $data * * @return mixed * @throws \Prettus\Validator\Exceptions\ValidatorException */ public function handleStore($data) { $complaint = $this->complaintRepository->create($data); ComplaintMessage::query()->create([ 'complaint_id' => $complaint->id, ]); return $complaint; } /** * @param array $data * * @return mixed * @throws \Prettus\Validator\Exceptions\ValidatorException */ public function handleUpdate($data) { $data_temp = $data; /** * 修改-mead * 判断是否可以指派 * --已修改 */ $com = Complaint::query()->where('id', $data['id'])->first(); if ($com->manage_messages_id) { // abort(ResponseCodeEnum::SERVICE_OPERATION_ERROR, '该投诉已经指派'); return false; } $complaint = Complaint::query()->where('id', $data['id'])->update([ 'deal_idea' => $data['multiData'][0]['body'], 'deal_department_id' => $data['multiData'][0]['department_id'], 'deal_status' => ComplaintDealStatusEnum::IN, ]); ComplaintMessage::query()->where('complaint_id', $data['id'])->where('complaint_status', ComplaintDealStatusEnum::IN)->delete(); ComplaintMessage::query()->create([ 'complaint_id' => $data['id'], 'complaint_status' => ComplaintDealStatusEnum::IN, 'deal_department_id' => $data['multiData'][0]['department_id'], ]); $arr = Category::byCategoryIdGetCategoryArr($data['category_id']); $category_1_id = 0; $category_2_id = 0; $category_3_id = 0; $category_4_id = 0; $category_5_id = 0; if (count($arr) >= 1) $category_1_id = $arr[0]; if (count($arr) >= 2) $category_2_id = $arr[1]; if (count($arr) >= 3) $category_3_id = $arr[2]; if (count($arr) >= 4) $category_4_id = $arr[3]; if (count($arr) >= 5) $category_5_id = $arr[4]; unset($data['category_id']); //指挥交办里面添加一条数据 $comp = Complaint::query()->where('id', $data['id'])->first(); Jieba::init(); Finalseg::init(); $deal_idea = Jieba::cut(remove_symbol($comp->deal_idea)); $md5 = md5($comp->deal_idea); $message = Message::query()->create([ 'type_id' => config('site.complaint'), 'category_1_id' => $category_1_id, 'category_2_id' => $category_2_id, 'category_3_id' => $category_3_id, 'category_4_id' => $category_4_id, 'category_5_id' => $category_5_id, 'no' => Str::random(8), 'name' => $comp->complaint_name, 'mobile' => $comp->complaint_phone, 'keywords' => $deal_idea, 'body' => $comp->deal_idea, 'body_md5' => $md5, 'complain_date' => $comp->created_at, 'deal_department_id' => $comp->deal_department_id, 'deal_status' => $comp->deal_status, 'deal_limit_day' => $data['multiData'][0]['limit_day'], 'deal_limit_date' => Carbon::parse($comp->created_at)->addDays($data['multiData'][0]['limit_day'])->toDateTimeString(), 'assign_deal_time' => Carbon::now(), 'assign_admin_id' => login_admin_id(), 'is_assign_status' => 1, 'status' => 1, 'warn_type_id' => 1, ]); $comp->update(['manage_messages_id' => $message->id]); //多部门协作 $data['id'] = $message->id; $model = Message::query()->where('id', $data['id'])->first(); if (!$model) abort(ResponseCodeEnum::SERVICE_OPERATION_ERROR, '找不到该记录'); if ($model->deal_status == DealStatusEnum::OK) abort(ResponseCodeEnum::SERVICE_OPERATION_ERROR, '已经处理完成,暂不能申请'); if ($model->is_more_department == 1 && $model->check_status == StatusEnum::SUCCESS) abort(ResponseCodeEnum::SERVICE_OPERATION_ERROR, '管理员已经审核通过,暂不支持操作'); $department_ids = array_column($data['multiData'], 'department_id'); if (!in_array($model->deal_department_id, $department_ids)) { abort(ResponseCodeEnum::SERVICE_OPERATION_ERROR, '协助部门必须有本部门'); } unset($data['id']); unset($data['multiData']['*']); $model->check_status = StatusEnum::WAIT; $model->extra = $data; $model->deal_status = DealStatusEnum::IN; $model->is_more_department = 1; $model->save(); $data_temp['id'] = $message->id; $this->handleCheckApplicationMultiDepartment($data_temp); return $complaint; } /** * @param $id * * @return \Illuminate\Database\Eloquent\Model */ public function revoke($data) { //return $this->complaintRepository->update($data, $data['id']); return $this->complaintRepository->delete($data['id']); } /** * @param Request $request * * @return mixed * @throws \Prettus\Validator\Exceptions\ValidatorException */ public function handleDelete($id) { $complaint = Complaint::query()->where('id', $id)->first(); if ($complaint->deal_status == ComplaintDealStatusEnum::WAIT) return $complaint->delete(); return false; } /** * 满意度 * @param array $data * @return mixed * @throws \Prettus\Validator\Exceptions\ValidatorException */ public function evaluation($data) { $complaint = Complaint::query()->where('id', $data['id'])->update(['deal_evaluation' => $data['deal_evaluation'], 'deal_status' => ComplaintDealStatusEnum::OK]); $manage_messages_id = Complaint::query()->where('id', $data['id'])->value('manage_messages_id'); //同步指挥交办里面的满意度分数 Message::query()->where('id', $manage_messages_id)->update([ 'deal_evaluation' => $data['deal_evaluation'], 'deal_status' => DealStatusEnum::OK ]); ComplaintMessage::query()->where('complaint_id', $data['id'])->where('complaint_status', ComplaintDealStatusEnum::OK)->delete(); ComplaintMessage::query()->create([ 'complaint_id' => $data['id'], 'complaint_status' => ComplaintDealStatusEnum::OK ]); return $complaint; } /** * 办理结果反馈 * @param array $data * @return mixed * @throws \Prettus\Validator\Exceptions\ValidatorException */ public function feedback($data) { $complaint = Complaint::query()->where('id', $data['id'])->update(['feedback' => $data['feedback'], 'deal_status' => ComplaintDealStatusEnum::FEEDBACK]); return $complaint; } /** * 用户投诉数量查询--客户端 */ public function nums($request) { $data = []; //查询全部 $all_nums = Complaint::query()->where('status', ModelStatusEnum::OK)->where('user_id', login_user_id())->count(); //待处理 $wait_nums = Complaint::query()->where('deal_status', ComplaintDealStatusEnum::WAIT)->where('status', ModelStatusEnum::OK)->where('user_id', login_user_id())->count(); //处理中 $in_nums = Complaint::query()->where('deal_status', ComplaintDealStatusEnum::IN)->where('status', ModelStatusEnum::OK)->where('user_id', login_user_id())->count(); //待评价 $satisfaction_nums = Complaint::query()->where('deal_status', ComplaintDealStatusEnum::SATISFACTION)->where('status', ModelStatusEnum::OK)->where('user_id', login_user_id())->count(); //处理完结 $ok_nums = Complaint::query()->where('deal_status', ComplaintDealStatusEnum::OK)->where('status', ModelStatusEnum::OK)->where('user_id', login_user_id())->count(); $data[] = [ 'name' => '全部', 'count' => $all_nums, ]; $data[] = [ 'name' => '待处理', 'count' => $wait_nums, ]; $data[] = [ 'name' => '处理中', 'count' => $in_nums, ]; $data[] = [ 'name' => '待评价', 'count' => $satisfaction_nums, ]; $data[] = [ 'name' => '处理完结', 'count' => $ok_nums, ]; return $data; } /** * 用户投诉数量查询--员工端 */ public function complaintNums($request) { $data = []; //查询全部 $all_nums = Complaint::query()->where('status', ModelStatusEnum::OK)->count(); //待处理 $wait_nums = Complaint::query()->where('deal_status', ComplaintDealStatusEnum::WAIT)->where('status', ModelStatusEnum::OK)->count(); //处理中 $in_nums = Complaint::query()->where('deal_status', ComplaintDealStatusEnum::IN)->where('status', ModelStatusEnum::OK)->count(); //待评价 $satisfaction_nums = Complaint::query()->where('deal_status', ComplaintDealStatusEnum::SATISFACTION)->where('status', ModelStatusEnum::OK)->count(); //处理完结 $ok_nums = Complaint::query()->where('deal_status', ComplaintDealStatusEnum::OK)->where('status', ModelStatusEnum::OK)->count(); $data[] = [ 'name' => '全部', 'count' => $all_nums, ]; $data[] = [ 'name' => '待处理', 'count' => $wait_nums, ]; $data[] = [ 'name' => '处理中', 'count' => $in_nums, ]; $data[] = [ 'name' => '待评价', 'count' => $satisfaction_nums, ]; $data[] = [ 'name' => '处理完结', 'count' => $ok_nums, ]; return $data; } /*** * 吹哨处理完结消息通知--客户端 * @param $request * @return mixed */ public function messages($request) { $data = []; $complaints = Complaint::query()->where('user_id', login_user_id())->where('deal_status', ComplaintDealStatusEnum::OK) ->where('status', ModelStatusEnum::OK)->get(); foreach ($complaints as $complaint) { $department_name = Department::query()->where('id', $complaint->deal_department_id)->value('name'); $message = Message::query()->where('id', $complaint->manage_messages_id)->where('status', ModelStatusEnum::OK)->first(); $category_name = ''; $category_1_name = null; $category_2_name = null; $category_3_name = null; $category_4_name = null; $category_5_name = null; if ($message->category_1_id != 0) $category_1_name = Category::query()->where('id', $message->category_1_id)->value('name'); if ($message->category_2_id != 0) $category_2_name = Category::query()->where('id', $message->category_2_id)->value('name'); if ($message->category_3_id != 0) $category_3_name = Category::query()->where('id', $message->category_3_id)->value('name'); if ($message->category_4_id != 0) $category_4_name = Category::query()->where('id', $message->category_4_id)->value('name'); if ($message->category_5_id != 0) $category_5_name = Category::query()->where('id', $message->category_5_id)->value('name'); if ($category_1_name != null) $category_name = $category_1_name; if ($category_2_name != null) $category_name = $category_name . '/' . $category_2_name; if ($category_3_name != null) $category_name = $category_name . '/' . $category_3_name; if ($category_4_name != null) $category_name = $category_name . '/' . $category_4_name; if ($category_5_name != null) $category_name = $category_name . '/' . $category_5_name; $data[] = [ 'id' => $complaint->id, 'category_name' => $category_name, 'deal_department' => $department_name, 'time' => date('Y-m-d H:m:s', strtotime($complaint->updated_at)) ]; } $data = arraySort($data, 'time'); $data_temp = ['data' => $data]; return $data_temp; } /*** * 吹哨处理完结消息详情--客户端 * @param $request * @return mixed */ public function message($req) { $data = []; $complaint = Complaint::query()->where('id', $req['id'])->first(); $message = Message::query()->where('id', $complaint->manage_messages_id)->where('status', ModelStatusEnum::OK)->first(); $category_name = ''; $category_1_name = null; $category_2_name = null; $category_3_name = null; $category_4_name = null; $category_5_name = null; if ($message->category_1_id != 0) $category_1_name = Category::query()->where('id', $message->category_1_id)->value('name'); if ($message->category_2_id != 0) $category_2_name = Category::query()->where('id', $message->category_2_id)->value('name'); if ($message->category_3_id != 0) $category_3_name = Category::query()->where('id', $message->category_3_id)->value('name'); if ($message->category_4_id != 0) $category_4_name = Category::query()->where('id', $message->category_4_id)->value('name'); if ($message->category_5_id != 0) $category_5_name = Category::query()->where('id', $message->category_5_id)->value('name'); if ($category_1_name != null) $category_name = $category_1_name; if ($category_2_name != null) $category_name = $category_name . '/' . $category_2_name; if ($category_3_name != null) $category_name = $category_name . '/' . $category_3_name; if ($category_4_name != null) $category_name = $category_name . '/' . $category_4_name; if ($category_5_name != null) $category_name = $category_name . '/' . $category_5_name; $data = [ 'category_name' => $category_name, 'content' => $complaint->content, 'deal_result' => $complaint->deal_result, 'time' => date('Y-m-d H:m:s', strtotime($complaint->updated_at)) ]; return $data; } /*** * 吹哨处理完结消息通知--员工端 * @param $request * @return mixed */ public function messagesAdmin($request) { $data = []; $complaints = Complaint::query()->where('deal_admin_id', login_admin_id())->where('deal_status', ComplaintDealStatusEnum::OK) ->where('status', ModelStatusEnum::OK)->get(); foreach ($complaints as $complaint) { $message = Message::query()->where('id', $complaint->manage_messages_id)->where('status', ModelStatusEnum::OK)->first(); $category_name = ''; $category_1_name = null; $category_2_name = null; $category_3_name = null; $category_4_name = null; $category_5_name = null; if ($message->category_1_id != 0) $category_1_name = Category::query()->where('id', $message->category_1_id)->value('name'); if ($message->category_2_id != 0) $category_2_name = Category::query()->where('id', $message->category_2_id)->value('name'); if ($message->category_3_id != 0) $category_3_name = Category::query()->where('id', $message->category_3_id)->value('name'); if ($message->category_4_id != 0) $category_4_name = Category::query()->where('id', $message->category_4_id)->value('name'); if ($message->category_5_id != 0) $category_5_name = Category::query()->where('id', $message->category_5_id)->value('name'); if ($category_1_name != null) $category_name = $category_1_name; if ($category_2_name != null) $category_name = $category_name . '/' . $category_2_name; if ($category_3_name != null) $category_name = $category_name . '/' . $category_3_name; if ($category_4_name != null) $category_name = $category_name . '/' . $category_4_name; if ($category_5_name != null) $category_name = $category_name . '/' . $category_5_name; $data[] = [ 'id' => $complaint->id, 'complaint_name' => $complaint->complaint_name, 'deal_evaluation' => $complaint->deal_evaluation, 'category_name' => $category_name, 'time' => date('Y-m-d H:m:s', strtotime($complaint->updated_at)) ]; } $data = arraySort($data, 'time'); $data_temp = ['data' => $data]; return $data_temp; } /*** * 吹哨处理完结消息详情--员工端 * @param $request * @return mixed */ public function messageAdmin($req) { $data = []; $data_image = []; $complaint = Complaint::query()->where('id', $req['id'])->first(); if (count($complaint->relevant_documents)) { foreach ($complaint->relevant_documents as $id) { $resource = Resource::query()->where('id', $id)->first(); //判断图片还是视频,供前端判断 $type = 0; $img_type = config('site.img_type'); $video_type = config('site.video_type'); $arr = explode('.', $resource->path); if (strpos($img_type, $arr[1]) !== false) $type = 1; if (strpos($video_type, $arr[1]) !== false) $type = 2; $data_image[] = [ 'path' => $resource->path, 'url' => $resource->url, 'type' => $type ]; } } $message = Message::query()->where('id', $complaint->manage_messages_id)->where('status', ModelStatusEnum::OK) ->with(['deal_department'])->with(['deal_admin'])->first(); $data = [ 'content' => $complaint->content, 'images' => $data_image, 'complaint_name' => $complaint->complaint_name, 'complaint_phone' => $complaint->complaint_phone, 'create_time' => date('Y-m-d H:m:s', strtotime($complaint->updated_at)), // 'assign_deal_time' => date('Y-m-d H:m:s', strtotime($complaint->updated_at)), 'deal_department' => $message['deal_department']['name'], 'deal_admin' => $message['deal_admin']['name'], 'deal_status' => $complaint->deal_status, 'assign_deal_time' => date('Y-m-d H:m:s', strtotime($message->deal_time)), 'deal_limit_day' => $message->deal_limit_day, 'deal_idea' => $message->deal_idea, 'deal_evaluation' => $complaint->deal_evaluation, ]; return $data; } /** * 审核申请--民意直通车自动审核成功 * @param $data * @return bool */ public function handleCheckApplicationMultiDepartment($data) { ini_set('memory_limit', '1024M'); $model = Message::query()->where('id', $data['id'])->first(); if (!$model) abort(ResponseCodeEnum::SERVICE_OPERATION_ERROR, '找不到该记录'); if ($model->deal_status == DealStatusEnum::OK) abort(ResponseCodeEnum::SERVICE_OPERATION_ERROR, '已经处理完成,暂不能申请'); if ($model->is_more_department == 1 && $model->check_status == StatusEnum::SUCCESS) abort(ResponseCodeEnum::SERVICE_OPERATION_ERROR, '管理员已经审核通过,暂不支持操作'); $department_ids = array_column($data['multiData'], 'department_id'); if (!in_array($model->deal_department_id, $department_ids)) { abort(ResponseCodeEnum::SERVICE_OPERATION_ERROR, '协助部门必须有本部门'); } $admin = login_admin(); unset($data['id']); unset($data['multiData']['*']); DB::beginTransaction(); try { $model->check_status = StatusEnum::SUCCESS; $model->extra = $data; $model->is_more_department = 1; $day = 0; Jieba::init(); Finalseg::init(); foreach ($data['multiData'] as $key => $item) { $seg_list = Jieba::cut($item['body']); Message::query()->create([ 'no' => $model['no'] . '-' . ($key + 1), 'type_id' => $model['type_id'], 'category_1_id' => $model['category_1_id'], 'category_2_id' => $model['category_2_id'], 'category_3_id' => $model['category_3_id'], 'category_4_id' => $model['category_4_id'], 'category_5_id' => $model['category_5_id'], 'name' => $model['name'], 'mobile' => $model['mobile'], 'address_id' => $model['address_id'], 'address_name' => $model['address_name'], 'complain_date' => $model['complain_date'], 'warn_type_id' => $model['warn_type_id'], 'body' => $item['body'], 'body_md5' => md5($item['body']), 'keywords' => $seg_list, 'deal_department_id' => $item['department_id'], 'deal_admin_id' => 0, 'deal_evaluation' => 0, 'deal_status' => DealStatusEnum::IN, 'assign_deal_time' => Carbon::now()->toDateTimeString(), 'assign_admin_id' => $admin['id'], 'is_assign_status' => 1, 'deal_limit_day' => $item['limit_day'], 'deal_limit_date' => Carbon::now()->addDays($item['limit_day'])->toDateTimeString(), 'is_more_department' => 1, 'extra' => $item, 'more_pid' => $model->id, 'import_department_id' => $item['department_id'], 'status' => 1 ]); if ($day < $item['limit_day']) $day = $item['limit_day']; } $model->deal_limit_day = $day; $model->deal_limit_date = Carbon::now()->addDays($day); $model->save(); DB::commit(); } catch (\Exception $exception) { DB::rollBack(); abort(ResponseCodeEnum::SERVICE_OPERATION_ERROR, $exception->getMessage()); } return true; } }