// +---------------------------------------------------------------------- namespace App\Services\Common; use App\Models\StoreModel; use App\Models\UserModel; use App\Models\UserRoleModel; use App\Services\BaseService; /** * 企业店铺管理-服务类 * @author laravel开发员 * @since 2020/11/11 * @package App\Services\Common */ class StoreService extends BaseService { /** * 构造函数 * @author laravel开发员 * @since 2020/11/11 * AdService constructor. */ public function __construct() { $this->model = new StoreModel(); } /** * 列表 * @param $params * @param int $pageSize * @return array */ public function getDataList($params, $pageSize = 15) { // 分页查询 $list = $this->model ->with(['member']) ->where(['type'=>2,'mark'=>1]) ->where(function ($query) use ($params) { // 状态筛选 if (isset($params['status']) && $params['status'] > 0) { $query->where('status', $params['status']); } // 名称搜索 if (isset($params['name']) && $params['name']) { $query->where('nickname', 'like', "%{$params['name']}%"); } // 联系电话搜索 if (isset($params['phone']) && $params['phone']) { $query->where('phone', 'like', "%{$params['phone']}%"); } // 姓名搜索 if (isset($params['real_name']) && $params['real_name']) { $query->where('real_name', 'like', "%{$params['real_name']}%"); } }) ->orderBy('create_time', 'desc') ->orderBy('id', 'desc') ->paginate($pageSize > 0 ? $pageSize : 9999999); $list = $list->toArray(); // 格式化数据 if (isset($list['data']) && !empty($list['data'])) { foreach ($list['data'] as &$item) { $item['create_time'] = $item['create_time'] ? datetime($item['create_time'], 'Y-m-d H:i:s') : ''; $item['status_text'] = $this->getStatusText($item['status']); // 处理门头照图片 if (isset($item['avatar']) && $item['avatar']) { $item['avatar'] = get_image_url($item['avatar']); } // 添加余额信息 $item['balance'] = isset($item['member']['balance']) ? $item['member']['balance'] : 0; $item['password'] = ''; } } return [ 'msg' => '操作成功', 'code' => 0, 'data' => $list['data'], 'count' => $list['total'] ]; } /** * 获取状态文本 * @param int $status * @return string */ private function getStatusText($status) { $statusMap = [ 1 => '已审核(营业中)', 2 => '待审核', 3 => '审核失败' ]; return isset($statusMap[$status]) ? $statusMap[$status] : '未知'; } /** * 查询 * @param $params * @return \Illuminate\Database\Eloquent\Builder */ public function getQuery($params) { $where = ['mark' => 1]; $status = isset($params['status']) ? $params['status'] : 0; if ($status > 0) { $where['status'] = $status; } $model = $this->model ->select('user.*') ->where($where); // 搜索条件 $model->where(function ($query) use ($params) { // 店铺名称搜索 $name = isset($params['name']) ? trim($params['name']) : ''; if ($name) { $query->where('nickname', 'like', "%{$name}%"); } // 联系电话搜索 $phone = isset($params['phone']) ? trim($params['phone']) : ''; if ($phone) { $query->where('phone', 'like', "%{$phone}%"); } // 姓名搜索 $realName = isset($params['real_name']) ? trim($params['real_name']) : ''; if ($realName) { $query->where('real_name', 'like', "%{$realName}%"); } }); return $model; } /** * 添加或编辑 * @return array * @since 2020/11/11 * @author laravel开发员 */ public function edit() { $data = request()->all(); // 图片处理 if (isset($data['avatar'])) { $data['avatar'] = get_image_path($data['avatar']); } if (empty($data['nickname'])) { return message('请填写企业名称', false); } $mobile = isset($data['mobile'])?$data['mobile']:''; if (empty($mobile)) { return message('请填写企业账号(联系电话)', false); } if (empty($data['realname'])) { return message('请填写负责人姓名', false); } if (empty($data['department'])) { return message('请填写负责人所在部门', false); } if (empty($data['position'])) { return message('请填写负责人职位', false); } // 手机号唯一性验证 $id = isset($data['id']) ? $data['id'] : 0; if ($mobile) { $checkId = $this->model->where(['username' => $mobile, 'mark' => 1])->value('id'); if ($checkId && ($id != $checkId)) { return message('登录账号已存在', false); } } // 密码处理 if (isset($data['password']) && $data['password']) { $data['password'] = get_password(trim($data['password']). $mobile); } else { // 编辑时如果密码为空则不更新密码 unset($data['password']); } if (empty($data['address'])) { $data['address'] = ''; } $result = $this->model->edit($data); // 删除已存在的用户角色关系数据 $userRoleService = new UserRoleService(); $userRole = UserRoleModel::where(['user_id'=>$result,'role_id'=>6])->first(); if($id<=0){ $userRoleService->deleteUserRole($result); // 插入用户角色关系数据 $userRoleService->insertUserRole($result, [6]); }else if(empty($userRole)){ $userRoleService->deleteUserRole($result); // 插入用户角色关系数据 $userRoleService->insertUserRole($result, [6]); } return $result; } /** * 获取当前登录企业信息 * @return array */ public function getCurrentStoreInfo($storeId) { try { // 查询企业信息 $store = StoreModel::where('id', $storeId) ->where('mark', 1) ->with(['member']) ->first(); if (!$store) { return ['code' => 1, 'msg' => '企业信息不存在']; } // 检查企业状态 if ($store->status !== 1) { return ['code' => 1, 'msg' => '企业已被禁用']; } $data = [ 'user_id' => $store->user_id, 'name' => $store->nickname, 'real_name' => $store->realname, 'phone' => $store->mobile, 'status' => $store->status ]; return ['code' => 0, 'msg' => '获取成功', 'data' => $data]; } catch (\Exception $e) { return ['code' => 1, 'msg' => '获取失败:' . $e->getMessage()]; } } /** * 获取企业详情(重写父类方法) * @return array */ public function info() { // 记录ID $id = request()->input("id", 0); $info = []; if ($id) { // 获取企业基本信息(使用关联查询) $store = $this->model->where(['id' => $id, 'mark' => 1]) ->first(); if ($store) { $info = $store->toArray(); // 处理图片 if (isset($info['avatar'])) { $info['avatar'] = get_image_url($info['avatar']); } if (isset($info['business_license'])) { $info['business_license'] = get_image_url($info['business_license']); } // 处理时间 if (isset($info['create_time'])) { $info['create_time'] = $info['create_time'] ? datetime($info['create_time'], 'Y-m-d H:i:s') : ''; } if (isset($info['update_time'])) { $info['update_time'] = $info['update_time'] ? datetime($info['update_time'], 'Y-m-d H:i:s') : ''; } // 添加状态文本 $info['status_text'] = $this->getStatusText($info['status'] ?? 0); } } return message(MESSAGE_OK, true, $info); } /** * 获取店铺选项列表(用于下拉选择) * @return array */ public function options() { $param = request()->all(); // 用户ID $keyword = getter($param, "keyword"); $list = $this->model ->where(['type'=>2,'status'=>1,'mark'=>1]) ->where(function ($query) use ($keyword) { if ($keyword) { $query->where('nickname', 'like', "%{$keyword}%")->orWhere('mobile', 'like', "%{$keyword}%"); } }) ->orderBy('id', 'asc') ->select(['id', 'nickname','username', 'mobile']) ->get() ->toArray(); return $list; } /** * 删除企业(重写父类方法以清除缓存) * @return array */ public function delete() { $result = parent::delete(); return $result; } }