| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- <?php
- namespace App\Services\Common;
- use App\Models\ActionLogModel;
- use App\Models\ComplaintModel;
- use App\Services\BaseService;
- /**
- * 投诉建议-服务类
- */
- class ComplaintService extends BaseService
- {
- public function __construct()
- {
- $this->model = new ComplaintModel();
- }
- public static function make()
- {
- if (!self::$instance) {
- self::$instance = (new static());
- }
- return self::$instance;
- }
- /**
- * 获取数据列表
- * @param array $params 请求参数
- * @param int $pageSize 分页大小
- */
- public function getDataList($params, $pageSize = 15)
- {
- try {
- $query = $this->model->where('mark', 1);
- // 状态筛选
- if (isset($params['status']) && $params['status'] !== '') {
- $query->where('status', $params['status']);
- }
- // 关键词搜索
- if (isset($params['keyword']) && $params['keyword']) {
- $keyword = $params['keyword'];
- $query->where(function ($q) use ($keyword) {
- $q->where('realname', 'like', '%' . $keyword . '%')
- ->orWhere('mobile', 'like', '%' . $keyword . '%')
- ->orWhere('content', 'like', '%' . $keyword . '%');
- });
- }
- $list = $query->with(['user'])
- ->orderBy('id', 'desc')
- ->paginate($pageSize);
- $list = $list ? $list->toArray() : [];
- if ($list && isset($list['data'])) {
- foreach ($list['data'] as &$item) {
- $item['create_time'] = $item['create_time'] ? date('Y-m-d H:i:s', $item['create_time']) : '';
- $item['update_time'] = $item['update_time'] ? date('Y-m-d H:i:s', $item['update_time']) : '';
- // 处理图片
- if (!empty($item['albums'])) {
- $albums = json_decode($item['albums'], true);
- if (is_array($albums)) {
- $item['albums_array'] = array_map(function($album) {
- // 如果是对象格式 {"url": "..."}
- if (is_array($album) && isset($album['url'])) {
- return get_image_url($album['url']);
- }
- // 如果是字符串格式
- return get_image_url($album);
- }, $albums);
- } else {
- $item['albums_array'] = [];
- }
- } else {
- $item['albums_array'] = [];
- }
- // 状态文本
- $item['status_text'] = $this->getStatusText($item['status']);
- // 用户信息
- if (isset($item['user']) && !empty($item['user'])) {
- $item['user_name'] = $item['user']['nickname'] ?? $item['user']['username'] ?? '-';
- $item['user_avatar'] = isset($item['user']['avatar']) ? get_image_url($item['user']['avatar']) : '';
- } else {
- $item['user_name'] = '-';
- $item['user_avatar'] = '';
- }
- }
- }
- return [
- 'msg' => '操作成功',
- 'code' => 0,
- 'data' => $list['data'] ?? [],
- 'count' => $list['total'] ?? 0,
- ];
- } catch (\Exception $e) {
- return [
- 'msg' => '查询失败: ' . $e->getMessage(),
- 'code' => 1,
- 'data' => [],
- 'count' => 0,
- ];
- }
- }
- /**
- * 获取状态文本
- */
- private function getStatusText($status)
- {
- $statusMap = [
- 1 => '待处理',
- 2 => '已处理'
- ];
- return isset($statusMap[$status]) ? $statusMap[$status] : '未知';
- }
- /**
- * 编辑(处理投诉)
- */
- public function edit($data = [])
- {
- if (empty($data)) {
- $data = request()->all();
- }
- if (empty($data['id'])) {
- return ['code' => 1, 'msg' => '参数错误'];
- }
- // 只允许修改备注和状态
- $updateData = [
- 'update_time' => time()
- ];
- if (isset($data['remark'])) {
- $updateData['remark'] = $data['remark'];
- }
- if (isset($data['status'])) {
- $updateData['status'] = $data['status'];
- }
- $result = $this->model->where('id', $data['id'])->update($updateData);
- if ($result !== false) {
- ActionLogModel::setTitle("处理投诉建议");
- ActionLogModel::record();
- return ['code' => 0, 'msg' => '操作成功'];
- }
- return ['code' => 1, 'msg' => '操作失败'];
- }
- /**
- * 删除
- */
- public function delete()
- {
- $id = request()->post('id');
- if (!$id) {
- return ['code' => 1, 'msg' => '参数错误'];
- }
- // 支持批量删除
- if (is_array($id)) {
- $result = $this->model->whereIn('id', $id)->update(['mark' => 0]);
- } else {
- $result = $this->model->where('id', $id)->update(['mark' => 0]);
- }
- if ($result) {
- ActionLogModel::setTitle("删除投诉建议");
- ActionLogModel::record();
- return ['code' => 0, 'msg' => '删除成功'];
- }
- return ['code' => 1, 'msg' => '删除失败'];
- }
- /**
- * 修改状态
- */
- public function status()
- {
- $params = request()->all();
- $id = isset($params['id']) ? intval($params['id']) : 0;
- $status = isset($params['status']) ? intval($params['status']) : 0;
- if (!$id) {
- return ['code' => 1, 'msg' => 'ID不能为空'];
- }
- if (!$status || ($status != 1 && $status != 2)) {
- return ['code' => 1, 'msg' => '状态参数错误'];
- }
- $result = $this->model->where('id', $id)->update([
- 'status' => $status,
- 'update_time' => time()
- ]);
- if ($result !== false) {
- ActionLogModel::setTitle("修改投诉状态");
- ActionLogModel::record();
- return ['code' => 0, 'msg' => '状态修改成功'];
- }
- return ['code' => 1, 'msg' => '状态修改失败'];
- }
- /**
- * 获取详情
- */
- public function getInfo($id)
- {
- $info = $this->model->with(['user'])->where('id', $id)->where('mark', 1)->first();
- if (!$info) {
- return ['code' => 1, 'msg' => '数据不存在'];
- }
- $info = $info->toArray();
- // 处理图片
- if (!empty($info['albums'])) {
- $albums = json_decode($info['albums'], true);
- if (is_array($albums)) {
- $info['albums_array'] = array_map(function($album) {
- // 如果是对象格式 {"url": "..."}
- if (is_array($album) && isset($album['url'])) {
- return get_image_url($album['url']);
- }
- // 如果是字符串格式
- return get_image_url($album);
- }, $albums);
- } else {
- $info['albums_array'] = [];
- }
- } else {
- $info['albums_array'] = [];
- }
- // 用户信息
- if (isset($info['user']) && !empty($info['user'])) {
- $info['user_name'] = $info['user']['nickname'] ?? $info['user']['username'] ?? '-';
- $info['user_avatar'] = isset($info['user']['avatar']) ? get_image_url($info['user']['avatar']) : '';
- } else {
- $info['user_name'] = '-';
- $info['user_avatar'] = '';
- }
- return ['code' => 0, 'data' => $info];
- }
- }
|