alias('operations') ->field('operations.*, user.nickName, user.avatarUrl') ->with(['grade']) ->join('user', 'user.user_id = operations.user_id') ->where('operations.is_delete', '=', 0) ->order(['operations.create_time' => 'desc']); // 查询条件 if (!empty($search)) { $model = $model->where('user.nickName|operations.real_name|operations.mobile', 'like', '%' . $search . '%'); } // 获取列表数据 $list = $model->paginate($limit); foreach ($list as $user){ $user['total_money'] = sprintf('%.2f', $user['money'] + $user['freeze_money'] + $user['total_money']); } return $list; } public static function getListAll($grade_id = 0) { $model = new static; if($grade_id > 0) { $model->where('grade_id', '=', $grade_id); } return $model->where('is_delete', '=', 0)->with(['grade'])->select(); } /** * 编辑股东用户 * @param $operations_id * @param $operations_level */ public static function getUser($operations_id, $operations_level = OperationsLevelEnum::PROVINCE) { $model = new static; $model = $model->where('operations_level', '=', $operations_level); // 省代理 if($operations_level == OperationsLevelEnum::PROVINCE) { $model = $model->where('province_id', '=', $operations_id); } if($operations_level == OperationsLevelEnum::CITY) { $model = $model->where('city_id', '=', $operations_id); } if($operations_level == OperationsLevelEnum::AREA) { $model = $model->where('area_id', '=', $operations_id); } return $model->where('is_delete', '=', 0)->select(); } /** * 编辑股东用户 * @param $data * @return bool */ public function edit($data) { $this->startTrans(); try { // 检查区域是否已被占用 $model = $this->where('user_id', $data['user_id'])->find(); $checkData = [ 'operations_level' => $model['operations_level']['value'], 'is_delete' => 0 ]; if ($checkData['operations_level'] == 1) { $checkData['province_id'] = $model['province_id']; } elseif ($checkData['operations_level'] == 2) { $checkData['province_id'] = $model['province_id']; $checkData['city_id'] = $model['city_id']; } elseif ($checkData['operations_level'] == 3) { $checkData['province_id'] = $model['province_id']; $checkData['city_id'] = $model['city_id']; $checkData['area_id'] = $model['area_id']; } $conflict = $this->where($checkData)->where('user_id', '<>', $data['user_id'])->find(); if ($conflict) { $this->error = '该区域已有代理,请先删除原有代理'; return false; } // 更新区域代理基本信息 $saveData = [ 'real_name' => $data['real_name'], 'mobile' => $data['mobile'], 'update_time' => time() ]; if (!$this->save($saveData)) { throw new \Exception('更新失败'); } // 处理管理员账号 $userLoginModel = new UserLoginModel(); $admin = $userLoginModel->where('user_id', '=', $data['user_id'])->where('is_super', '=', 1)->find(); if ($userLoginModel->detail(['real_name'=>$data['real_name'],'user_id'=>['neq'=>$data['user_id']]])){ throw new \Exception('该账号已存在'); } // 如果传入了用户名,则更新或创建管理员账号 if (isset($data['user_name']) && !empty($data['user_name'])) { $loginData = [ 'user_id' => $data['user_id'], 'user_name' => $data['user_name'], 'real_name' => $data['real_name'], 'mobile' => $data['mobile'], 'is_delete' => 0, 'app_id' => self::$app_id, 'update_time' => time() ]; if (!empty($data['password'])) { $loginData['user_name'] = salt_hash($data['user_name']); $loginData['password'] = salt_hash($data['password']); } if ($admin) { // 更新现有管理员账号 if (!$userLoginModel->where('shop_user_id', '=', $admin['shop_user_id'])->update($loginData)) { throw new \Exception('管理员账号更新失败'); } } else { // 创建新的管理员账号 $loginData['create_time'] = time(); $loginData['is_super'] = 1; $role_id = RoleModel::where('operations_level','=',$checkData['operations_level'])->value('role_id'); $loginData['role_id'] = $role_id; if (!$userLoginModel->save($loginData)) { throw new \Exception('管理员账号创建失败'); } // 为新管理员分配默认角色(如果有) $add_arr = []; $model = new UserRole(); $add_arr[] = [ 'operations_user_id' => $userLoginModel['operations_user_id'], 'role_id' => $role_id, 'app_id' => self::$app_id, ]; $model->saveAll($add_arr); } } $this->commit(); return true; } catch (\Exception $e) { $this->error = $e->getMessage(); $this->rollback(); return false; } } /** * 删除股东用户 * @return mixed */ public function setDelete() { return $this->transaction(function () { // 标记当前股东记录为已删除 return $this->save([ 'is_delete' => 1 ]); }); } /** * 提现打款成功:累积提现佣金 */ public static function totalMoney($user_id, $money) { $model = self::detail($user_id); return $model->save([ 'freeze_money' => $model['freeze_money'] - $money, 'total_money' => $model['total_money'] + $money, ]); } /** * 提现驳回:解冻股东资金 */ public static function backFreezeMoney($user_id, $money) { $model = self::detail($user_id); return $model->save([ 'money' => $model['money'] + $money, 'freeze_money' => $model['freeze_money'] - $money, ]); } /** * 添加区域代理(后台直接添加) * @param $data * @return bool */ public function addoperationsUser($data) { $this->startTrans(); try { // 检查用户是否已经是区域代理 $existing = self::detail($data['user_id']); if ($existing && $existing['is_delete'] == 0) { $this->error = '该用户已经是区域代理'; return false; } // 检查区域是否已被占用 $checkData = [ 'operations_level' => $data['operations_level'], 'is_delete' => 0 ]; if ($data['operations_level'] == 1) { $checkData['province_id'] = $data['province_id']; } elseif ($data['operations_level'] == 2) { $checkData['province_id'] = $data['province_id']; $checkData['city_id'] = $data['city_id']; } elseif ($data['operations_level'] == 3) { $checkData['province_id'] = $data['province_id']; $checkData['city_id'] = $data['city_id']; $checkData['area_id'] = $data['area_id']; } $conflict = $this->where($checkData)->find(); if ($conflict) { $this->error = '该区域已有代理,请先删除原有代理'; return false; } // 准备数据 $saveData = [ 'user_id' => $data['user_id'], 'real_name' => $data['real_name'], 'mobile' => $data['mobile'], 'operations_level' => $data['operations_level'], 'province_id' => $data['province_id'], 'city_id' => isset($data['city_id']) ? $data['city_id'] : 0, 'area_id' => isset($data['area_id']) ? $data['area_id'] : 0, 'referee_id' => isset($data['referee_id']) ? $data['referee_id'] : 0, 'grade_id' => isset($data['grade_id']) ? $data['grade_id'] : 0, 'money' => 0, 'freeze_money' => 0, 'total_money' => 0, 'total_num' => 0, 'first_num' => 0, 'second_num' => 0, 'third_num' => 0, 'is_delete' => 0, 'app_id' => self::$app_id, 'create_time' => time(), 'update_time' => time() ]; // 如果之前有记录且已删除,则更新 if ($existing && $existing['is_delete'] == 1) { $saveData['update_time'] = time(); $result = $this->where('user_id', $data['user_id'])->update($saveData); } else { // 新增 $result = $this->save($saveData); } $userLoginModel = new UserLoginModel(); if ($userLoginModel->detail(['real_name'=>$data['real_name']])){ throw new \Exception('该账号已存在'); } // 创建管理员账号 if (isset($data['user_name']) && !empty($data['user_name'])) { $loginData = [ 'user_id' => $data['user_id'], 'user_name' => $data['user_name'], 'password' => salt_hash($data['password']), 'real_name' => $data['real_name'], 'is_super' => 1, 'mobile' => $data['mobile'], 'is_delete' => 0, 'app_id' => self::$app_id, 'client_id' => 0 ]; if (!$userLoginModel->save($loginData)) { throw new \Exception('管理员账号创建失败'); } $role_id = RoleModel::where('operations_level','=',$data['operations_level'])->value('role_id'); // 这里可以分配默认角色ID,暂时不分配 $model = new UserRole(); $add_arr[] = [ 'operations_user_id' => $userLoginModel['operations_user_id'], 'role_id' => $role_id, 'app_id' => self::$app_id, ]; $model->saveAll($add_arr); } $this->commit(); return true; } catch (\Exception $e) { $this->error = $e->getMessage(); $this->rollback(); return false; } } /** * 获取平台的总销售额 */ public function getTotalMoney($type = 'all_money') { $model = $this; if($type == 'money'){ return $model->sum('money'); } else if($type == 'freeze_money'){ return $model->sum('freeze_money'); } else if($type == 'total_money'){ return $model->sum('total_money'); } else if($type == 'all_money'){ return $model->sum('total_money') + $model->sum('freeze_money') + $model->sum('money'); } return 0; } }