select(); } catch (\Exception $e) { return new Collection(); } } /** * 添加投诉与意见 * 限制每个用户每日每个问题类型最多提交3次 * * @param int $accountId * @param array $data 内容参数 ['type_id', 'content', 'user_name', 'user_phone'] * @throws TraitException */ public function addFeedback(int $accountId, array $data) { try { $validate = new FeedbackValidate(); if (!$validate->scene('add')->check($data)) { throw new TraitException($validate->getError()); } $allowTypeIds = $this->feedbackTypes()->column('id'); if (!in_array($data['type_id'], $allowTypeIds)) { throw new TraitException('暂不支持该问题类型信息的提交'); } $btStart = date('Y-m-d 00:00:00'); $btEnd = date('Y-m-d 23:59:59'); $hasCount = Feedback::where('account_id', $accountId) ->where('type_id', $data['type_id']) ->whereBetweenTime('created_at', $btStart, $btEnd) ->count(); if ($hasCount >= 3) { throw new TraitException('同一问题类型每日最多可提交3次,请勿频繁提交!谢谢您的反馈!'); } Feedback::create([ 'account_id' => $accountId, 'type_id' => $data['type_id'], 'content' => $data['content'], 'user_name' => $data['user_name'], 'user_phone' => $data['user_phone'], 'ip' => request()->ip(), 'status' => Feedback::STATUS_WAITING, 'created_at' => date('Y-m-d H:i:s'), ]); } catch (TraitException $e) { throw $e; } catch (\Exception $e) { throw new TraitException('反馈信息提交失败!'); } } /** * 反馈意见列表 * * @param array $where * @param array $fields * @param int $page * @param int $size * @param callable|null $callback * @param array $orders * @return array */ public function feedbackList(array $where = [], array $fields = [], int $page = 1, int $size = 10, callable $callback = null, array $orders = []): array { try { return Feedback::findList($where, $fields, $page, $size, $callback, $orders); } catch (\Exception $e) { return [ 'total' => 0, 'current' => $page, 'size' => $size, 'list' => new Collection(), ]; } } /** * 更新反馈意见的状态为已处理 * * @param array $ids * @return bool */ public function feedbacksToDone(array $ids): bool { try { Feedback::whereIn('id', $ids)->update([ 'status' => Feedback::STATUS_DONE, 'updated_at' => date('Y-m-d H:i:s') ]); } catch (\Exception $e) { return false; } return true; } }