This commit is contained in:
wong
2025-05-09 09:22:47 +08:00
61 changed files with 3363 additions and 1460 deletions

View File

@@ -12,6 +12,8 @@ class Administrator extends Model
{
use SoftDelete;
const MASTER_ID = 1;
// 设置数据表名
protected $name = 'administrators';

View File

@@ -3,12 +3,15 @@
namespace app\common\model;
use think\Model;
use think\model\concern\SoftDelete;
/**
* 设备任务配置模型类
*/
class DeviceTaskconf extends Model
{
use SoftDelete;
// 设置表名
protected $name = 'device_taskconf';
@@ -16,4 +19,6 @@ class DeviceTaskconf extends Model
protected $autoWriteTimestamp = true;
protected $createTime = 'createTime';
protected $updateTime = 'updateTime';
protected $deleteTime = 'deleteTime';
protected $defaultSoftDelete = 0;
}

View File

@@ -9,6 +9,9 @@ use think\Model;
*/
class Menu extends Model
{
const STATUS_ACTIVE = 1;
const TOP_LEVEL = 0;
// 设置数据表名
protected $name = 'menus';
}

View File

@@ -9,6 +9,14 @@ class User extends Model
{
use SoftDelete;
const ADMIN_STP = 1;
const ADMIN_OTP = 0;
const NOT_USER = -1;
const MASTER_USER = 1; // 操盘手
const CUSTOMER_USER = 2; // 门店接待
const STATUS_STOP = 0; // 禁用状态
const STATUS_ACTIVE = 1; // 活动状态
/**
* 数据表名
* @var string

View File

@@ -10,6 +10,7 @@ Route::group('v1/', function () {
// 设备管理相关
Route::group('devices', function () {
Route::get('add-results', 'app\cunkebao\controller\device\GetAddResultedDevicesController@index'); // 更新设备任务配置
Route::get(':id/related-accounts', 'app\cunkebao\controller\device\GetRelatedAccountsV1Controller@index'); // 设备关联微信账号路由
Route::get(':id/handle-logs', 'app\cunkebao\controller\device\GetDeviceHandleLogsV1Controller@index'); // 获取设备操作记录
Route::get('', 'app\cunkebao\controller\device\GetDeviceListV1Controller@index'); // 获取设备列表
@@ -18,7 +19,6 @@ Route::group('v1/', function () {
Route::put('refresh', 'app\cunkebao\controller\device\RefreshDeviceDetailV1Controller@index'); // 刷新设备状态
Route::delete(':id', 'app\cunkebao\controller\Device@delete'); // 删除设备
Route::post('task-config', 'app\cunkebao\controller\device\UpdateDeviceTaskConfigV1Controller@index');
Route::get('add-results', 'app\cunkebao\controller\device\GetAddResultedDevicesController@index'); // 更新设备任务配置
});
// 设备微信相关
@@ -35,6 +35,7 @@ Route::group('v1/', function () {
// 获客场景相关
Route::group('plan/scenes', function () {
Route::get('', 'app\cunkebao\controller\Scene@index'); // 获取场景列表
Route::post('create', 'app\cunkebao\controller\Plan@index'); // 获取场景列表
});
// 流量标签相关
@@ -80,4 +81,14 @@ Route::group('v1/', function () {
});
})->middleware(['jwt']);
// 计划任务相关路由
Route::group('plan', function () {
// 添加计划任务
Route::post('add', 'app\cunkebao\controller\Plan@index');
// 获取计划任务列表
Route::get('list', 'app\cunkebao\controller\Plan@getList');
});
})->middleware(['jwt']);
return [];

View File

@@ -0,0 +1,254 @@
<?php
namespace app\cunkebao\controller;
use think\Controller;
use think\Db;
use think\facade\Request;
use library\ResponseHelper;
/**
* 获客场景控制器
*/
class Plan extends Controller
{
/**
* 添加计划任务
*
* @return \think\response\Json
*/
public function index()
{
try {
// 获取表单数据
$data = [
'name' => Request::post('name', ''),
'sceneId' => Request::post('sceneId', 0),
'status' => Request::post('status', 0),
'reqConf' => Request::post('reqConf', ''),
'msgConf' => Request::post('msgConf', ''),
'tagConf' => Request::post('tagConf', ''),
'createTime' => time(),
'updateTime' => time()
];
// 验证必填字段
if (empty($data['name'])) {
return ResponseHelper::error('计划名称不能为空', 400);
}
if (empty($data['sceneId'])) {
return ResponseHelper::error('场景ID不能为空', 400);
}
// 验证数据格式
if (!$this->validateJson($data['reqConf'])) {
return ResponseHelper::error('好友申请设置格式不正确', 400);
}
if (!$this->validateJson($data['msgConf'])) {
return ResponseHelper::error('消息设置格式不正确', 400);
}
if (!$this->validateJson($data['tagConf'])) {
return ResponseHelper::error('标签设置格式不正确', 400);
}
// 插入数据库
$result = Db::name('friend_plan')->insert($data);
if ($result) {
return ResponseHelper::success([], '添加计划任务成功');
} else {
return ResponseHelper::error('添加计划任务失败', 500);
}
} catch (\Exception $e) {
return ResponseHelper::error('系统错误: ' . $e->getMessage(), 500);
}
}
/**
* 获取计划任务列表
*
* @return \think\response\Json
*/
public function getList()
{
try {
// 获取分页参数
$id = Request::param('id', 1);
$page = Request::param('page', 1);
$pageSize = Request::param('pageSize', 10);
// 构建查询条件
$where = [];
// 过滤已删除的记录
$where[] = ['deleteTime', 'null'];
// 查询总数
$total = Db::name('friend_plan')->where('sceneId', $id)->count();
// 查询列表数据
$list = Db::name('friend_plan')
->where('sceneId', $id)
->field('id, name, status, createTime, updateTime, sceneId')
->order('createTime desc')
->page($page, $pageSize)
->select();
// 遍历列表,获取每个计划的统计信息
foreach ($list as &$item) {
// 获取计划的统计信息
$stats = $this->getPlanStats($item['id']);
// 合并统计信息到结果中
$item = array_merge($item, $stats);
// 格式化状态为文字描述
$item['statusText'] = $item['status'] == 1 ? '进行中' : '已暂停';
// 格式化时间
$item['createTimeFormat'] = date('Y-m-d H:i', $item['createTime']);
// 获取最近一次执行时间
$lastExecution = $this->getLastExecution($item['id']);
$item['lastExecutionTime'] = $lastExecution['lastTime'] ?? '';
$item['nextExecutionTime'] = $lastExecution['nextTime'] ?? '';
}
// 返回结果
$result = [
'total' => $total,
'list' => $list,
'page' => $page,
'pageSize' => $pageSize
];
return ResponseHelper::success($result);
} catch (\Exception $e) {
return ResponseHelper::error('获取数据失败: ' . $e->getMessage(), 500);
}
}
/**
* 获取计划的统计信息
*
* @param int $planId 计划ID
* @return array
*/
private function getPlanStats($planId)
{
try {
// 获取设备数
$deviceCount = $this->getDeviceCount($planId);
// 获取已获客数
$customerCount = $this->getCustomerCount($planId);
// 获取已添加数
$addedCount = 1; //$this->getAddedCount($planId);
// 计算通过率
$passRate = $customerCount > 0 ? round(($addedCount / $customerCount) * 100) : 0;
return [
'deviceCount' => $deviceCount,
'customerCount' => $customerCount,
'addedCount' => $addedCount,
'passRate' => $passRate
];
} catch (\Exception $e) {
return [
'deviceCount' => 0,
'customerCount' => 0,
'addedCount' => 0,
'passRate' => 0
];
}
}
/**
* 获取计划使用的设备数
*
* @param int $planId 计划ID
* @return int
*/
private function getDeviceCount($planId)
{
try {
// 获取计划
$plan = Db::name('friend_plan')->where('id', $planId)->find();
if (!$plan) {
return 0;
}
// 解析reqConf
$reqConf = json_decode($plan['reqConf'], true);
// 返回设备数量
return isset($reqConf['selectedDevices']) ? count($reqConf['selectedDevices']) : 0;
} catch (\Exception $e) {
return 0;
}
}
/**
* 获取计划的已获客数
*
* @param int $planId 计划ID
* @return int
*/
private function getCustomerCount($planId)
{
// 模拟数据,实际应从相关表获取
return rand(10, 50);
}
/**
* 获取计划的已添加数
*
* @param int $planId 计划ID
* @return int
*/
private function getAddedCount($planId)
{
// 模拟数据,实际应从相关表获取
$customerCount = $this->getCustomerCount($planId);
return rand(5, $customerCount);
}
/**
* 获取计划的最近一次执行时间
*
* @param int $planId 计划ID
* @return array
*/
private function getLastExecution($planId)
{
// 模拟数据,实际应从执行记录表获取
$now = time();
$lastTime = $now - rand(3600, 86400);
$nextTime = $now + rand(3600, 86400);
return [
'lastTime' => date('Y-m-d H:i', $lastTime),
'nextTime' => date('Y-m-d H:i:s', $nextTime)
];
}
/**
* 验证JSON格式是否正确
*
* @param string $string
* @return bool
*/
private function validateJson($string)
{
if (empty($string)) {
return true;
}
json_decode($string);
return (json_last_error() == JSON_ERROR_NONE);
}
}

View File

@@ -5,14 +5,14 @@ namespace app\cunkebao\controller\device;
use app\api\controller\DeviceController as ApiDeviceController;
use app\common\model\Device as DeviceModel;
use app\common\model\User as UserModel;
use app\cunkebao\controller\BaseController;
use library\ResponseHelper;
use think\Controller;
use think\Db;
/**
* 设备控制器
*/
class GetAddResultedDevicesController extends Controller
class GetAddResultedDevicesController extends BaseController
{
/**
* 通过账号id 获取项目id。
@@ -85,7 +85,7 @@ class GetAddResultedDevicesController extends Controller
[
'accountId' => $accountId,
'pageIndex' => 0,
'pageSize' => 1
'pageSize' => 1
],
true
);

View File

@@ -6,8 +6,11 @@ use app\common\model\Device as DeviceModel;
use app\common\model\DeviceTaskconf as DeviceTaskconfModel;
use app\common\model\DeviceUser as DeviceUserModel;
use app\common\model\DeviceWechatLogin;
use app\common\model\User as UserModel;
use app\common\model\WechatFriend;
use app\cunkebao\controller\BaseController;
use Eison\Utils\Helper\ArrHelper;
use library\ResponseHelper;
/**
* 设备管理控制器
@@ -23,15 +26,15 @@ class GetDeviceDetailV1Controller extends BaseController
protected function checkUserDevicePermission(int $deviceId): void
{
$where = [
'deviceId' => $deviceId,
'userId' => $this->getUserInfo('id'),
'deviceId' => $deviceId,
'userId' => $this->getUserInfo('id'),
'companyId' => $this->getUserInfo('companyId')
];
$hasPermission = DeviceUserModel::where($where)->count() > 0;
if (!$hasPermission) {
throw new \Exception('您没有权限查看该设备', '403');
throw new \Exception('您没有权限查看该设备', 403);
}
}
@@ -64,19 +67,23 @@ class GetDeviceDetailV1Controller extends BaseController
protected function getTaskConfig(int $deviceId): array
{
$where = [
'deviceId' => $deviceId,
'deviceId' => $deviceId,
'companyId' => $this->getUserInfo('companyId'),
'deleteTime' => 0
];
$conf = DeviceTaskconfModel::where($where)->field('autoAddFriend,autoReply,contentSync,aiChat')->find();
$conf = DeviceTaskconfModel::alias('c')
->field([
'c.autoAddFriend', 'c.autoReply', 'c.momentsSync', 'c.aiChat'
])
->where($where)
->find();
return $conf ? $conf->toArray() : [
'autoAddFriend' => 0,
'autoReply' => 0,
'contentSync' => 0,
'aiChat' => 0
];
if (!is_null($conf)) {
return $conf->toArray();
}
// 未配置时赋予默认关闭的状态
return ArrHelper::getValue('autoAddFriend,autoReply,momentsSync,aiChat', [], 0);
}
/**
@@ -89,7 +96,7 @@ class GetDeviceDetailV1Controller extends BaseController
protected function getTotalFriend(int $deviceId): int
{
$where = [
'deviceId' => $deviceId,
'deviceId' => $deviceId,
'companyId' => $this->getUserInfo('companyId'),
];
@@ -124,11 +131,10 @@ class GetDeviceDetailV1Controller extends BaseController
->field([
'd.id', 'd.imei', 'd.memo', 'd.alive', 'd.updateTime as lastUpdateTime', 'd.extra'
])
->where('d.deleteTime', 0)
->find($id);
if (empty($device)) {
throw new \Exception('设备不存在', '404');
throw new \Exception('设备不存在', 404);
}
$device['battery'] = $this->parseExtraForBattery($device['extra']);
@@ -152,25 +158,17 @@ class GetDeviceDetailV1Controller extends BaseController
public function index()
{
try {
// 获取设备ID
$id = $this->request->param('id/d');
if ($this->getUserInfo('isAdmin') != 1) {
if ($this->getUserInfo('isAdmin') != UserModel::ADMIN_STP) {
$this->checkUserDevicePermission($id);
}
$info = $this->getDeviceInfo($id);
$resultSet = $this->getDeviceInfo($id);
return json([
'code' => 200,
'msg' => '获取成功',
'data' => $info
]);
return ResponseHelper::success($resultSet);
} catch (\Exception $e) {
return json([
'code' => $e->getMessage(),
'msg' => $e->getMessage()
]);
return ResponseHelper::error($e->getMessage(), $e->getCode());
}
}
}

View File

@@ -4,7 +4,9 @@ namespace app\cunkebao\controller\device;
use app\common\model\DeviceHandleLog;
use app\common\model\DeviceUser as DeviceUserModel;
use app\common\model\User as UserModel;
use app\cunkebao\controller\BaseController;
use library\ResponseHelper;
/**
* 设备管理控制器
@@ -20,15 +22,15 @@ class GetDeviceHandleLogsV1Controller extends BaseController
protected function checkUserDevicePermission(int $deviceId): void
{
$where = [
'deviceId' => $deviceId,
'userId' => $this->getUserInfo('id'),
'deviceId' => $deviceId,
'userId' => $this->getUserInfo('id'),
'companyId' => $this->getUserInfo('companyId')
];
$hasPermission = DeviceUserModel::where($where)->count() > 0;
if (!$hasPermission) {
throw new \Exception('您没有权限查看该设备', '403');
throw new \Exception('您没有权限查看该设备', 403);
}
}
@@ -42,9 +44,7 @@ class GetDeviceHandleLogsV1Controller extends BaseController
{
return DeviceHandleLog::alias('l')
->field([
'l.id',
'l.content',
'l.createTime',
'l.id', 'l.content', 'l.createTime',
'u.username'
])
->leftJoin('users u', 'l.userId = u.id')
@@ -63,25 +63,20 @@ class GetDeviceHandleLogsV1Controller extends BaseController
try {
$deviceId = $this->request->param('id/d');
if ($this->getUserInfo('isAdmin') != 1) {
if ($this->getUserInfo('isAdmin') != UserModel::ADMIN_STP) {
$this->checkUserDevicePermission($deviceId);
}
$logs = $this->getHandleLogs($deviceId);
return json([
'code' => 200,
'msg' => '获取成功',
'data' => [
return ResponseHelper::success(
[
'total' => $logs->total(),
'list' => $logs->items()
'list' => $logs->items()
]
]);
);
} catch (\Exception $e) {
return json([
'code' => $e->getCode(),
'msg' => $e->getMessage()
]);
return ResponseHelper::error($e->getMessage(), $e->getCode());
}
}
}

View File

@@ -1,10 +1,13 @@
<?php
namespace app\cunkebao\controller\device;
use app\common\model\Device as DeviceModel;
use app\common\model\DeviceUser as DeviceUserModel;
use app\common\model\User as UserModel;
use app\common\model\WechatFriend;
use app\cunkebao\controller\BaseController;
use library\ResponseHelper;
/**
* 设备管理控制器
@@ -32,7 +35,6 @@ class GetDeviceListV1Controller extends BaseController
}
$where['d.companyId'] = $this->getUserInfo('companyId');
$where['d.deleteTime'] = 0;
return array_merge($params, $where);
}
@@ -70,7 +72,11 @@ class GetDeviceListV1Controller extends BaseController
protected function getDeviceList(array $where, int $page = 1, int $limit = 10): \think\Paginator
{
$query = DeviceModel::alias('d')
->field(['d.id', 'd.imei', 'd.memo', 'l.wechatId', 'd.alive','wa.nickname','wa.alias', '0 totalFriend'])
->field([
'd.id', 'd.imei', 'd.memo', 'd.alive',
'l.wechatId',
'wa.nickname', 'wa.alias', '0 totalFriend'
])
->leftJoin('device_wechat_login l', 'd.id = l.deviceId')
->leftJoin('wechat_account wa', 'l.wechatId = wa.wechatId')
->order('d.id desc');
@@ -117,7 +123,7 @@ class GetDeviceListV1Controller extends BaseController
public function index()
{
try {
if ($this->getUserInfo('isAdmin') == 1) {
if ($this->getUserInfo('isAdmin') == UserModel::ADMIN_STP) {
$where = $this->makeWhere();
$result = $this->getDeviceList($where);
} else {
@@ -125,19 +131,14 @@ class GetDeviceListV1Controller extends BaseController
$result = $this->getDeviceList($where);
}
return json([
'code' => 200,
'msg' => '获取成功',
'data' => [
'list' => $this->countFriend($result),
return ResponseHelper::success(
[
'list' => $this->countFriend($result),
'total' => $result->total(),
]
]);
);
} catch (\Exception $e) {
return json([
'code' => $e->getCode(),
'msg' => $e->getMessage()
]);
return ResponseHelper::error($e->getMessage(), $e->getCode());
}
}
}

View File

@@ -4,9 +4,11 @@ namespace app\cunkebao\controller\device;
use app\common\model\DeviceUser as DeviceUserModel;
use app\common\model\DeviceWechatLogin as DeviceWechatLoginModel;
use app\common\model\User as UserModel;
use app\common\model\WechatAccount as WechatAccountModel;
use app\common\model\WechatFriend;
use app\cunkebao\controller\BaseController;
use library\ResponseHelper;
/**
* 设备管理控制器
@@ -22,15 +24,15 @@ class GetRelatedAccountsV1Controller extends BaseController
protected function checkUserDevicePermission(int $deviceId): void
{
$where = [
'deviceId' => $deviceId,
'userId' => $this->getUserInfo('id'),
'deviceId' => $deviceId,
'userId' => $this->getUserInfo('id'),
'companyId' => $this->getUserInfo('companyId')
];
$hasPermission = DeviceUserModel::where($where)->count() > 0;
if (!$hasPermission) {
throw new \Exception('您没有权限查看该设备', '403');
throw new \Exception('您没有权限查看该设备', 403);
}
}
@@ -43,7 +45,7 @@ class GetRelatedAccountsV1Controller extends BaseController
protected function getDeviceWechatIds(int $deviceId): array
{
$where = [
'deviceId' => $deviceId,
'deviceId' => $deviceId,
'companyId' => $this->getUserInfo('companyId')
];
@@ -68,18 +70,18 @@ class GetRelatedAccountsV1Controller extends BaseController
}
/**
* 通过微信id获取微信最后活跃时间
* TODO 通过微信id获取微信最后活跃时间
*
* @param int $wechatId
* @param int $time
* @return string
*/
protected function getWechatLastActiveTime($wechatId): string
protected function getWechatLastActiveTime(int $time): string
{
return date('Y-m-d H:i:s', $wechatId ?: time());
return date('Y-m-d H:i:s', $time ?: time());
}
/**
* 加友状态
* TODO 加友状态
*
* @param string $wechatId
* @return string
@@ -90,7 +92,7 @@ class GetRelatedAccountsV1Controller extends BaseController
}
/**
* 账号状态
* TODO 账号状态
*
* @param string $wechatId
* @return string
@@ -147,27 +149,22 @@ class GetRelatedAccountsV1Controller extends BaseController
try {
$deviceId = $this->request->param('id/d');
if ($this->getUserInfo('isAdmin') != 1) {
if ($this->getUserInfo('isAdmin') != UserModel::ADMIN_STP) {
$this->checkUserDevicePermission($deviceId);
}
// 获取设备关联的微信账号
$wechatAccounts = $this->getDeviceRelatedAccounts($deviceId);
return json([
'code' => 200,
'msg' => '获取成功',
'data' => [
return ResponseHelper::success(
[
'deviceId' => $deviceId,
'accounts' => $wechatAccounts,
'total' => count($wechatAccounts)
'total' => count($wechatAccounts)
]
]);
);
} catch (\Exception $e) {
return json([
'code' => $e->getCode(),
'msg' => $e->getMessage()
]);
return ResponseHelper::error($e->getMessage(), $e->getCode());
}
}
}

View File

@@ -1,9 +1,11 @@
<?php
namespace app\cunkebao\controller\device;
use app\common\model\Device as DeviceModel;
use app\common\model\DeviceHandleLog as DeviceHandleLogModel;
use app\cunkebao\controller\BaseController;
use library\ResponseHelper;
use library\s2\CurlHandle;
use think\Db;
use think\Validate;
@@ -23,9 +25,8 @@ class PostAddDeviceV1Controller extends BaseController
{
if ($this->request->param('imei')) {
$where = [
'imei' => $this->request->param('imei'),
'imei' => $this->request->param('imei'),
'companyId' => $this->getUserInfo('companyId'),
'deleteTime' => 0
];
$exist = DeviceModel::where($where)->count() > 0;
@@ -43,7 +44,7 @@ class PostAddDeviceV1Controller extends BaseController
{
$curl = CurlHandle::getInstant();
// $curl->setMethod()
// $curl->setMethod()
}
/**
@@ -70,9 +71,9 @@ class PostAddDeviceV1Controller extends BaseController
{
DeviceHandleLogModel::addLog(
[
'deviceId' => $deviceId,
'content' => '添加设备',
'userId' => $this->getUserInfo('id'),
'deviceId' => $deviceId,
'content' => '添加设备',
'userId' => $this->getUserInfo('id'),
'companyId' => $this->getUserInfo('companyId'),
]
);
@@ -114,17 +115,10 @@ class PostAddDeviceV1Controller extends BaseController
Db::commit();
return json([
'code' => 200,
'msg' => '添加成功'
]);
return ResponseHelper::success();
} catch (\Exception $e) {
Db::rollback();
return json([
'code' => $e->getCode(),
'msg' => $e->getMessage()
]);
return ResponseHelper::error($e->getMessage(), $e->getCode());
}
}
}

View File

@@ -3,6 +3,7 @@
namespace app\cunkebao\controller\device;
use app\cunkebao\controller\BaseController;
use library\ResponseHelper;
/**
* 设备管理控制器
@@ -17,16 +18,9 @@ class RefreshDeviceDetailV1Controller extends BaseController
{
try {
// TODO: 实现实际刷新设备状态的功能
return json([
'code' => 200,
'msg' => '刷新成功',
]);
return ResponseHelper::success();
} catch (\Exception $e) {
return json([
'code' => $e->getCode(),
'msg' => $e->getMessage()
]);
return ResponseHelper::error($e->getMessage(), $e->getCode());
}
}
}

View File

@@ -1,13 +1,15 @@
<?php
namespace app\cunkebao\controller\device;
use app\common\model\DeviceTaskconf;
use app\common\model\DeviceUser as DeviceUserModel;
use app\cunkebao\controller\BaseController;
use app\common\model\Device as DeviceModel;
use app\common\model\DeviceHandleLog as DeviceHandleLogModel;
use app\common\model\DeviceTaskconf;
use app\common\model\DeviceUser as DeviceUserModel;
use app\common\model\User as UserModel;
use app\cunkebao\controller\BaseController;
use library\ResponseHelper;
use think\Db;
use think\facade\Request;
/**
* 设备管理控制器
@@ -24,15 +26,14 @@ class UpdateDeviceTaskConfigV1Controller extends BaseController
protected function checkDeviceExists(int $deviceId)
{
$where = [
'deviceId' => $deviceId,
'companyId' => $this->getUserInfo('companyId'),
'deleteTime' => 0
'deviceId' => $deviceId,
'companyId' => $this->getUserInfo('companyId'),
];
$device = DeviceModel::find($where);
if (!$device) {
throw new \Exception('设备不存在或已删除', '404');
throw new \Exception('设备不存在或已删除', 404);
}
}
@@ -45,15 +46,15 @@ class UpdateDeviceTaskConfigV1Controller extends BaseController
protected function checkUserDevicePermission(int $deviceId): void
{
$where = [
'deviceId' => $deviceId,
'userId' => $this->getUserInfo('id'),
'deviceId' => $deviceId,
'userId' => $this->getUserInfo('id'),
'companyId' => $this->getUserInfo('companyId')
];
$hasPermission = DeviceUserModel::where($where)->count() > 0;
if (!$hasPermission) {
throw new \Exception('您没有权限操作该设备', '403');
throw new \Exception('您没有权限操作该设备', 403);
}
}
@@ -69,20 +70,20 @@ class UpdateDeviceTaskConfigV1Controller extends BaseController
$data = $this->request->post();
$content = null;
if (isset($data['autoAddFriend']))/**/$content = $data['autoAddFriend'] ? '开启自动添加好友' : '关闭自动添加好友';
if (isset($data['autoReply']))/* */$content = $data['autoReply'] ? '开启自动回复' : '关闭自动回复';
if (isset($data['momentsSync']))/* */$content = $data['momentsSync'] ? '开启朋友圈同步' : '关闭朋友圈同步';
if (isset($data['aiChat']))/* */$content = $data['aiChat'] ? '开启AI会话' : '关闭AI会话';
if (isset($data['autoAddFriend']))/**/ $content = $data['autoAddFriend'] ? '开启自动添加好友' : '关闭自动添加好友';
if (isset($data['autoReply']))/* */ $content = $data['autoReply'] ? '开启自动回复' : '关闭自动回复';
if (isset($data['momentsSync']))/* */ $content = $data['momentsSync'] ? '开启朋友圈同步' : '关闭朋友圈同步';
if (isset($data['aiChat']))/* */ $content = $data['aiChat'] ? '开启AI会话' : '关闭AI会话';
if (empty($content)) {
throw new \Exception('参数错误', '400');
throw new \Exception('参数错误', 400);
}
DeviceHandleLogModel::addLog(
[
'deviceId' => $deviceId,
'content' => $content,
'userId' => $this->getUserInfo('id'),
'deviceId' => $deviceId,
'content' => $content,
'userId' => $this->getUserInfo('id'),
'companyId' => $this->getUserInfo('companyId'),
]
);
@@ -118,7 +119,7 @@ class UpdateDeviceTaskConfigV1Controller extends BaseController
$this->checkDeviceExists($id);
if ($this->getUserInfo('isAdmin') != 1) {
if ($this->getUserInfo('isAdmin') != UserModel::ADMIN_STP) {
$this->checkUserDevicePermission($id);
}
@@ -130,17 +131,10 @@ class UpdateDeviceTaskConfigV1Controller extends BaseController
Db::commit();
return json([
'code' => 200,
'msg' => '更新任务配置成功'
]);
return ResponseHelper::success();
} catch (\Exception $e) {
Db::rollback();
return json([
'code' => $e->getCode(),
'msg' => $e->getMessage()
]);
return ResponseHelper::error($e->getMessage(), $e->getCode());
}
}
}

View File

@@ -2,6 +2,7 @@
namespace app\superadmin\controller\Menu;
use app\common\model\Administrator as AdministratorModel;
use app\common\model\Menu as MenuModel;
use app\common\model\AdministratorPermissions as AdministratorPermissionsModel;
use app\superadmin\controller\BaseController;
@@ -69,7 +70,7 @@ class GetMenuTreeController extends BaseController
protected function getMenuTree(): array
{
// 获取所有菜单
$allMenus = MenuModel::where('status', 1)->order('sort', 'asc')->select()->toArray();
$allMenus = MenuModel::where('status', MenuModel::STATUS_ACTIVE)->order('sort', 'asc')->select()->toArray();
// 组织成树状结构
return $allMenus ? $this->buildMenuTree($allMenus) : [];
@@ -84,8 +85,8 @@ class GetMenuTreeController extends BaseController
protected function getTopMenusInPermissionIds(array $permissionIds): array
{
$where = [
'parentId' => 0,
'status' => 1,
'parentId' => MenuModel::TOP_LEVEL,
'status' => MenuModel::STATUS_ACTIVE,
];
return MenuModel::where($where)->whereIn('id', $permissionIds)->order('sort', 'asc')->select()->toArray();
@@ -99,7 +100,7 @@ class GetMenuTreeController extends BaseController
*/
protected function getAllChildrenInPermissionIds(array $topMenuIds): array
{
return MenuModel::where('status', 1)->whereIn('parentId', $topMenuIds)->order('sort', 'asc')->select()->toArray();
return MenuModel::where('status', MenuModel::STATUS_ACTIVE)->whereIn('parentId', $topMenuIds)->order('sort', 'asc')->select()->toArray();
}
/**
@@ -165,7 +166,7 @@ class GetMenuTreeController extends BaseController
*/
public function index()
{
if ($this->getAdminInfo('id') == 1) {
if ($this->getAdminInfo('id') == AdministratorModel::MASTER_ID) {
$menuTree = $this->getMenuTree();
} else {
$menuTree = $this->getMenuTreeByPermissions(

View File

@@ -19,8 +19,8 @@ class GetTopLevelForPermissionController extends BaseController
protected function getTopLevelMenus(): array
{
$where = [
'parentId' => 0,
'status' => 1
'parentId' => MenuModel::TOP_LEVEL,
'status' => MenuModel::STATUS_NORMAL
];
return MenuModel::where($where)->field('id, title')->order('sort', 'asc')->select()->toArray();

View File

@@ -41,15 +41,15 @@ class AddAdministratorController extends BaseController
protected function dataValidate(array $params): self
{
$validate = Validate::make([
'account' => 'require|regex:^[a-zA-Z0-9]+$|/\S+/',
'username' => 'require|/\S+/',
'password' => 'require|/\S+/',
'account' => 'require|regex:^[a-zA-Z0-9]+$|/\S+/',
'username' => 'require|/\S+/',
'password' => 'require|/\S+/',
'permissionIds' => 'require|array',
], [
'account.require' => '账号不能为空',
'account.regex' => '账号只能用数字或者字母或者数字字母组合',
'username.require' => '用户名不能为空',
'password.require' => '密码不能为空',
'account.require' => '账号不能为空',
'account.regex' => '账号只能用数字或者字母或者数字字母组合',
'username.require' => '用户名不能为空',
'password.require' => '密码不能为空',
'permissionIds.require' => '请至少分配一种权限',
]);
@@ -67,7 +67,7 @@ class AddAdministratorController extends BaseController
*/
protected function checkPermission(): self
{
if ($this->getAdminInfo('id') != 1) {
if ($this->getAdminInfo('id') != AdministratorModel::MASTER_ID) {
throw new \Exception('您没有权限添加管理员', 403);
}
@@ -95,7 +95,7 @@ class AddAdministratorController extends BaseController
]);
} else {
return AdministratorPermissionsModel::create([
'adminId' => $adminId,
'adminId' => $adminId,
'permissions' => json_encode($permissionData),
]);
}
@@ -141,7 +141,6 @@ class AddAdministratorController extends BaseController
}
Db::commit();
return ResponseHelper::success();
} catch (\Exception $e) {
Db::rollback();

View File

@@ -66,12 +66,12 @@ class DeleteAdministratorController extends BaseController
}
// 只有超级管理员(ID为1)可以删除管理员
if ($this->getAdminInfo('id') != 1) {
if ($this->getAdminInfo('id') != AdministratorModel::MASTER_ID) {
throw new \Exception('您没有权限删除管理员', 403);
}
// 不能删除超级管理员账号
if ($adminId == 1) {
if ($adminId == AdministratorModel::MASTER_ID) {
throw new \Exception('不能删除超级管理员账号', 403);
}
}
@@ -88,7 +88,7 @@ class DeleteAdministratorController extends BaseController
$validate = Validate::make([
'id' => 'require|regex:/^[1-9]\d*$/',
], [
'id.regex' => '非法请求',
'id.regex' => '非法请求',
'id.require' => '非法请求',
]);

View File

@@ -22,9 +22,10 @@ class GetAdministratorDetailController extends BaseController
protected function getAdministrator(int $adminId): AdministratorModel
{
$admin = AdministratorModel::alias('a')
->field(
'a.id, a.account, a.username, a.status, a.authId, a.createTime createdAt, a.lastLoginTime lastLogin, p.permissions'
)
->field([
'a.id', 'a.account', 'a.username', 'a.status', 'a.authId', 'a.createTime createdAt', 'a.lastLoginTime lastLogin',
'p.permissions'
])
->leftJoin('administrator_permissions p', 'a.id = p.adminId')
->where('a.id', $adminId)
->find();
@@ -94,10 +95,10 @@ class GetAdministratorDetailController extends BaseController
return ResponseHelper::success(
array_merge($admin->toArray(), [
'roleName' => $roleName,
'roleName' => $roleName,
'permissions' => $permissionIds,
'lastLogin' => $admin->lastLogin ? date('Y-m-d H:i', $admin->lastLogin) : '从未登录',
'createdAt' => date('Y-m-d H:i', $admin->createdAt),
'lastLogin' => $admin->lastLogin ? date('Y-m-d H:i', $admin->lastLogin) : '从未登录',
'createdAt' => date('Y-m-d H:i', $admin->createdAt),
])
);
} catch (\Exception $e) {

View File

@@ -40,9 +40,9 @@ class GetAdministratorListController extends Controller
protected function getAdministratorList(array $where): \think\Paginator
{
$query = AdministratorModel::alias('a')
->field(
'id, account, username, status, authId, createTime createdAt, lastLoginTime, lastLoginIp'
);
->field([
'a.id', 'a.account', 'a.username', 'a.status', 'a.authId', 'a.createTime createdAt', 'a.lastLoginTime', 'a.lastLoginIp'
]);
foreach ($where as $key => $value) {
if (is_numeric($key) && is_array($value) && isset($value[0]) && $value[0] === 'exp') {
@@ -139,13 +139,13 @@ class GetAdministratorListController extends Controller
foreach ($list->items() as $item) {
$section = [
'id' => $item->id,
'account' => $item->account,
'username' => $item->username,
'status' => $item->status,
'createdAt' => date('Y-m-d H:i:s', $item->createdAt),
'lastLogin' => !empty($item->lastLoginTime) ? date('Y-m-d H:i:s', $item->lastLoginTime) : '从未登录',
'role' => $this->getRoleName($item->authId),
'id' => $item->id,
'account' => $item->account,
'username' => $item->username,
'status' => $item->status,
'createdAt' => date('Y-m-d H:i:s', $item->createdAt),
'lastLogin' => !empty($item->lastLoginTime) ? date('Y-m-d H:i:s', $item->lastLoginTime) : '从未登录',
'role' => $this->getRoleName($item->authId),
'permissions' => $this->getPermissions($item->id),
];
@@ -167,7 +167,7 @@ class GetAdministratorListController extends Controller
return ResponseHelper::success(
[
'list' => $this->makeReturnedResult($result),
'list' => $this->makeReturnedResult($result),
'total' => $result->total(),
]
);

View File

@@ -48,16 +48,16 @@ class UpdateAdministratorController extends BaseController
protected function dataValidate(array $params): self
{
$validate = Validate::make([
'id' => 'require|regex:/^[1-9]\d*$/',
'account' => 'require|regex:^[a-zA-Z0-9]+$|/\S+/',
'username' => 'require|/\S+/',
'password' => '/\S+/',
'id' => 'require|regex:/^[1-9]\d*$/',
'account' => 'require|regex:^[a-zA-Z0-9]+$|/\S+/',
'username' => 'require|/\S+/',
'password' => '/\S+/',
'permissionIds' => 'array',
], [
'id.require' => '缺少必要参数',
'account.require' => '账号不能为空',
'account.regex' => '账号只能用数字或者字母或者数字字母组合',
'username.require' => '用户名不能为空',
'id.require' => '缺少必要参数',
'account.require' => '账号不能为空',
'account.regex' => '账号只能用数字或者字母或者数字字母组合',
'username.require' => '用户名不能为空',
'permissionIds.array' => '请至少分配一种权限',
]);
@@ -79,11 +79,11 @@ class UpdateAdministratorController extends BaseController
{
$currentAdminId = $this->getAdminInfo('id');
if ($currentAdminId != 1 && $currentAdminId != $adminId) {
if ($currentAdminId != AdministratorModel::MASTER_ID && $currentAdminId != $adminId) {
throw new \Exception('您没有权限修改其他管理员', 403);
}
if ($params['id'] != 1 && empty($params['permissionIds'])) {
if ($params['id'] != AdministratorModel::MASTER_ID && empty($params['permissionIds'])) {
throw new \Exception('请至少分配一种权限', 403);
}
@@ -111,7 +111,7 @@ class UpdateAdministratorController extends BaseController
]);
} else {
return AdministratorPermissionsModel::create([
'adminId' => $adminId,
'adminId' => $adminId,
'permissions' => json_encode($permissionData),
]);
}
@@ -137,7 +137,7 @@ class UpdateAdministratorController extends BaseController
$this->udpateAdministrator($params);
// 如果当前是超级管理员(ID为1),并且修改的不是自己,则更新权限
if ($this->getAdminInfo('id') == 1
if ($this->getAdminInfo('id') == AdministratorModel::MASTER_ID
&& $this->getAdminInfo('id') != $adminId
&& !empty($params['permissionIds'])
) {

View File

@@ -7,6 +7,7 @@ use app\superadmin\controller\administrator\DeleteAdministratorController;
use library\ResponseHelper;
use think\Controller;
use think\Validate;
use think\facade\Cookie;
class AuthLoginController extends Controller
{
@@ -30,7 +31,7 @@ class AuthLoginController extends Controller
protected function dataValidate(array $params): self
{
$validate = Validate::make([
'account' => 'require|/\S+/',
'account' => 'require|/\S+/',
'password' => 'require|/\S+/',
]);
@@ -96,11 +97,11 @@ class AuthLoginController extends Controller
{
// 获取当前环境
$env = app()->env->get('APP_ENV', 'production');
// 获取请求的域名
$origin = $this->request->header('origin');
$domain = '';
if ($origin) {
// 解析域名
$parsedUrl = parse_url($origin);
@@ -112,7 +113,7 @@ class AuthLoginController extends Controller
// 生产环境使用顶级域名
$parts = explode('.', $parsedUrl['host']);
if (count($parts) > 1) {
$domain = '.' . $parts[count($parts)-2] . '.' . $parts[count($parts)-1];
$domain = '.' . $parts[count($parts) - 2] . '.' . $parts[count($parts) - 1];
}
}
}
@@ -120,11 +121,11 @@ class AuthLoginController extends Controller
// 设置cookie选项
$options = [
'expire' => 86400,
'path' => '/',
'expire' => 86400,
'path' => '/',
'httponly' => true,
'samesite' => 'None', // 允许跨域
'secure' => true // 仅 HTTPS 下有效
'samesite' => 'None', // 允许跨域
'secure' => true // 仅 HTTPS 下有效
];
// 如果有域名,添加到选项
@@ -133,8 +134,8 @@ class AuthLoginController extends Controller
}
// 设置cookies
\think\facade\Cookie::set('admin_id', $admin->id, $options);
\think\facade\Cookie::set('admin_token', $this->createToken($admin), $options);
Cookie::set('admin_id', $admin->id, $options);
Cookie::set('admin_token', $this->createToken($admin), $options);
}
/**
@@ -152,10 +153,10 @@ class AuthLoginController extends Controller
return ResponseHelper::success(
[
'id' => $admin->id,
'name' => $admin->username,
'id' => $admin->id,
'name' => $admin->username,
'account' => $admin->account,
'token' => cookie('admin_token')
'token' => Cookie::get('admin_token')
]
);
} catch (\Exception $e) {

View File

@@ -7,10 +7,12 @@ use app\common\model\Company as CompanyModel;
use app\common\model\User as UsersModel;
use app\superadmin\controller\BaseController;
use Eison\Utils\Helper\ArrHelper;
use Exception;
use library\ResponseHelper;
use library\s2\CurlHandle;
use think\Db;
use think\facade\Env;
use think\response\Json;
use think\Validate;
/**
@@ -23,7 +25,7 @@ class CreateCompanyController extends BaseController
*
* @param array $params
* @return mixed|null
* @throws \Exception
* @throws Exception
*/
protected function s2CreateUser(array $params): ?array
{
@@ -38,7 +40,7 @@ class CreateCompanyController extends BaseController
$result = json_decode($response, true);
if ($result['code'] != 200) {
throw new \Exception($result['msg'], 210 . $result['code']);
throw new Exception($result['msg'], 210 . $result['code']);
}
return $result['data'] ?: null;
@@ -63,7 +65,7 @@ class CreateCompanyController extends BaseController
$result = json_decode($response, true);
if ($result['code'] != 200) {
throw new \Exception($result['msg'], 210 . $result['code']);
throw new Exception($result['msg'], 210 . $result['code']);
}
return $result['data'] ?: null;
@@ -74,33 +76,33 @@ class CreateCompanyController extends BaseController
*
* @param array $params
* @return $this
* @throws \Exception
* @throws Exception
*/
protected function dataValidate(array $params): self
{
$validate = Validate::make([
'name' => 'require|max:50|/\S+/',
'account' => 'require|regex:^[a-zA-Z0-9]+$|max:20|/\S+/',
'name' => 'require|max:50|/\S+/',
'account' => 'require|regex:^[a-zA-Z0-9]+$|max:20|/\S+/',
'username' => 'require|max:20|/\S+/',
'phone' => 'require|regex:/^1[3-9]\d{9}$/',
'status' => 'require|in:0,1',
'phone' => 'require|regex:/^1[3-9]\d{9}$/',
'status' => 'require|in:0,1',
'password' => 'require|/\S+/',
'memo' => '/\S+/',
'memo' => '/\S+/',
], [
'name.require' => '请输入项目名称',
'account.require' => '请输入账号',
'account.max' => '账号长度受限',
'account.regex' => '账号只能用数字或者字母或者数字字母组合',
'name.require' => '请输入项目名称',
'account.require' => '请输入账号',
'account.max' => '账号长度受限',
'account.regex' => '账号只能用数字或者字母或者数字字母组合',
'username.require' => '请输入用户昵称',
'phone.require' => '请输入手机号',
'phone.regex' => '手机号格式错误',
'status.require' => '缺少重要参数',
'status.in' => '非法参数',
'phone.require' => '请输入手机号',
'phone.regex' => '手机号格式错误',
'status.require' => '缺少重要参数',
'status.in' => '非法参数',
'password.require' => '请输入密码',
]);
if (!$validate->check($params)) {
throw new \Exception($validate->getError(), 400);
throw new Exception($validate->getError(), 400);
}
return $this;
@@ -111,7 +113,7 @@ class CreateCompanyController extends BaseController
*
* @param array $params
* @return void
* @throws \Exception
* @throws Exception
*/
protected function s2CreateDeviceGroup(array $params): void
{
@@ -119,7 +121,7 @@ class CreateCompanyController extends BaseController
$respon = json_decode($respon, true);
if ($respon['code'] != 200) {
throw new \Exception('设备分组添加错误', 210 . $respon['code']);
throw new Exception('设备分组添加错误', 210 . $respon['code']);
}
}
@@ -128,14 +130,14 @@ class CreateCompanyController extends BaseController
*
* @param array $params
* @return array
* @throws \Exception
* @throws Exception
*/
protected function creatS2About(array $params): array
{
$department = $this->s2CreateDepartmentAndUser($params);
if (!$department || !isset($department['id']) || !isset($department['departmentId'])) {
throw new \Exception('S2返参异常', 210402);
throw new Exception('S2返参异常', 210402);
}
// 设备创建分组
@@ -152,7 +154,7 @@ class CreateCompanyController extends BaseController
*
* @param array $params
* @return void
* @throws \Exception
* @throws Exception
*/
protected function ckbCreateCompany(array $params): void
{
@@ -160,7 +162,7 @@ class CreateCompanyController extends BaseController
$result = CompanyModel::create($params);
if (!$result) {
throw new \Exception('创建公司记录失败', 402);
throw new Exception('创建公司记录失败', 402);
}
}
@@ -169,17 +171,17 @@ class CreateCompanyController extends BaseController
*
* @param array $params
* @return void
* @throws \Exception
* @throws Exception
*/
protected function createFuncUsers(array $params): void
{
$seedCols = [
['account' => $params['account'] . '_offline', 'username' => '处理离线专用', 'status' => 0, 'isAdmin' => 0, 'typeId' => -1],
['account' => $params['account'] . '_delete' , 'username' => '处理删除专用', 'status' => 0, 'isAdmin' => 0, 'typeId' => -1],
['account' => $params['account'] . '_offline', 'username' => '处理离线专用', 'status' => UsersModel::STATUS_STOP, 'isAdmin' => UsersModel::ADMIN_OTP, 'typeId' => UsersModel::NOT_USER],
['account' => $params['account'] . '_delete', 'username' => '处理删除专用', 'status' => UsersModel::STATUS_STOP, 'isAdmin' => UsersModel::ADMIN_OTP, 'typeId' => UsersModel::NOT_USER],
];
foreach ($seedCols as $seeds) {
$this->s2CreateUser (array_merge($params, ArrHelper::getValue('account,username', $seeds)));
$this->s2CreateUser(array_merge($params, ArrHelper::getValue('account,username', $seeds)));
$this->ckbCreateUser(array_merge($params, $seeds));
}
}
@@ -189,7 +191,7 @@ class CreateCompanyController extends BaseController
*
* @param array $params
* @return void
* @throws \Exception
* @throws Exception
*/
protected function ckbCreateUser(array $params): void
{
@@ -201,14 +203,14 @@ class CreateCompanyController extends BaseController
]);
if (!UsersModel::create($params)) {
throw new \Exception('创建用户记录失败', 402);
throw new Exception('创建用户记录失败', 402);
}
}
/**
* @param array $params
* @return void
* @throws \Exception
* @throws Exception
*/
protected function createCkbAbout(array $params)
{
@@ -217,8 +219,8 @@ class CreateCompanyController extends BaseController
// 2. 存客宝创建操盘手总账号
$this->ckbCreateUser(array_merge($params, [
'isAdmin' => 1, // 主要账号默认1
'typeId' => 1, // 类型:运营后台/操盘手传1、 门店传2
'isAdmin' => UsersModel::ADMIN_STP, // 主要账号默认1
'typeId' => UsersModel::MASTER_USER, // 类型:运营后台/操盘手传1、 门店传2
]));
}
@@ -227,7 +229,7 @@ class CreateCompanyController extends BaseController
*
* @param array $where
* @return void
* @throws \Exception
* @throws Exception
*/
protected function checkCompanyNameOrAccountOrPhoneExists(array $where): void
{
@@ -236,26 +238,26 @@ class CreateCompanyController extends BaseController
// 项目名称尽量不重名
$exists = CompanyModel::where(compact('name'))->count() > 0;
if ($exists) {
throw new \Exception('项目名称已存在', 403);
throw new Exception('项目名称已存在', 403);
}
// 账号不重名
$exists = UsersModel::where(compact('account'))->count() > 0;
if ($exists) {
throw new \Exception('用户账号已存在', 403);
throw new Exception('用户账号已存在', 403);
}
// 手机号不重名
$exists = UsersModel::where(compact('phone'))->count() > 0;
if ($exists) {
throw new \Exception('手机号已存在', 403);
throw new Exception('手机号已存在', 403);
}
}
/**
* 创建新项目
*
* @return \think\response\Json
* @return Json
*/
public function index()
{
@@ -273,7 +275,7 @@ class CreateCompanyController extends BaseController
Db::commit();
return ResponseHelper::success();
} catch (\Exception $e) {
} catch (Exception $e) {
Db::rollback();
return ResponseHelper::error($e->getMessage(), $e->getCode());
}

View File

@@ -26,7 +26,7 @@ class DeleteCompanyController extends BaseController
$validate = Validate::make([
'id' => 'require|regex:/^[1-9]\d*$/',
], [
'id.regex' => '非法请求',
'id.regex' => '非法请求',
'id.require' => '非法请求',
]);

View File

@@ -23,9 +23,9 @@ class GetCompanyDetailForProfileController extends BaseController
*/
protected function getDeveiceWechats(int $companyId): array
{
$wechatId = DeviceWechatLoginModel::where('companyId', $companyId)->column('wechatId');
$wechatIds = DeviceWechatLoginModel::where('companyId', $companyId)->column('wechatId');
return array_unique($wechatId);
return array_unique($wechatIds);
}
/**
@@ -60,7 +60,7 @@ class GetCompanyDetailForProfileController extends BaseController
*/
protected function getUsersCountByCompanyId(int $companyId): int
{
$where = array_merge(compact('companyId'), array('isAdmin' => 0));
$where = array_merge(compact('companyId'), array('isAdmin' => UserModel::ADMIN_OTP));
return UserModel::where($where)->count();
}
@@ -79,7 +79,7 @@ class GetCompanyDetailForProfileController extends BaseController
'c.id', 'c.name', 'c.memo', 'c.companyId', 'c.createTime',
'u.account', 'u.phone'
])
->leftJoin('users u', 'c.companyId = u.companyId and u.isAdmin = 1')
->leftJoin('users u', 'c.companyId = u.companyId and u.isAdmin = ' . UserModel::ADMIN_STP)
->find($id);
if (!$detail) {
@@ -100,7 +100,7 @@ class GetCompanyDetailForProfileController extends BaseController
try {
$data = $this->getCompanyDetail($id);
$userCount = $this->getUsersCountByCompanyId($id);
$userCount = $this->getUsersCountByCompanyId($id);
$deviceCount = $this->getDeviceCountByCompanyId($id);
$friendCount = $this->getFriendCountByCompanyId($id);

View File

@@ -4,6 +4,7 @@ namespace app\superadmin\controller\company;
use app\common\model\Company as CompanyModel;
use app\common\model\Device as DeviceModel;
use app\common\model\User as UserModel;
use app\superadmin\controller\BaseController;
use library\ResponseHelper;
@@ -43,7 +44,7 @@ class GetCompanyDetailForUpdateController extends BaseController
'c.id', 'c.name', 'c.status', 'c.memo', 'c.companyId',
'u.account', 'u.username', 'u.phone', 'u.s2_accountId'
])
->leftJoin('users u', 'c.companyId = u.companyId and u.isAdmin = 1')
->leftJoin('users u', 'c.companyId = u.companyId and u.isAdmin = ' . UserModel::ADMIN_STP)
->find($id);
if (!$detail) {

View File

@@ -23,7 +23,11 @@ class GetCompanyDevicesForProfileController extends Controller
{
$companyId = $this->request->param('companyId/d', 0);
$devices = DeviceModel::where(compact('companyId'))->field('id,memo,imei,phone,model,brand,alive,id deviceId')
$devices = DeviceModel::alias('d')
->field([
'd.id', 'd.memo', 'd.imei', 'd.phone', 'd.model', 'd.brand', 'd.alive', 'd.id deviceId'
])
->where(compact('companyId'))
->select()
->toArray();
@@ -47,7 +51,10 @@ class GetCompanyDevicesForProfileController extends Controller
// 获取最新登录记录id
$latestIds = array_column($latestLogs, 'lastedId');
return DeviceWechatLoginModel::field('deviceId,wechatId,alive wAlive')
return DeviceWechatLoginModel::alias('d')
->field([
'd.deviceId', 'd.wechatId', 'd.alive wAlive'
])
->whereIn('id', $latestIds)
->select()
->toArray();
@@ -65,7 +72,10 @@ class GetCompanyDevicesForProfileController extends Controller
$relations = $this->getDeviceWechatRelationsByDeviceIds($deviceIds);
// 统计微信好友数量
$friendCounts = WechatFriendModel::alias('f')->field('ownerWechatId wechatId,count(*) friendCount')
$friendCounts = WechatFriendModel::alias('f')
->field([
'f.ownerWechatId wechatId', 'count(*) friendCount'
])
->whereIn('ownerWechatId', array_column($relations, 'wechatId'))
->group('ownerWechatId')
->select()

View File

@@ -57,9 +57,9 @@ class GetCompanyListController extends BaseController
protected function getCompanyList(array $where): \think\Paginator
{
$query = CompanyModel::alias('c')
->field(
'id, name, status, companyId, memo, createTime'
);
->field([
'c.id', 'c.name', 'c.status', 'c.companyId', 'c.memo', 'c.createTime'
]);
foreach ($where as $key => $value) {
if (is_numeric($key) && is_array($value) && isset($value[0]) && $value[0] === 'exp') {
@@ -118,7 +118,7 @@ class GetCompanyListController extends BaseController
return ResponseHelper::success(
[
'list' => $this->makeReturnedResult($result),
'list' => $this->makeReturnedResult($result),
'total' => $result->total(),
]
);

View File

@@ -21,10 +21,16 @@ class GetCompanySubusersForProfileController extends Controller
{
$where = [
'companyId' => $this->request->param('companyId/d', 0),
'isAdmin' => 0
'isAdmin' => UserModel::ADMIN_OTP
];
return UserModel::field('id,account,phone,username,avatar,status,createTime,typeId')->where($where)->select()->toArray();
return UserModel::alias('u')
->field([
'u.id', 'u.account', 'u.phone', 'u.username', 'u.avatar', 'u.status', 'u.createTime', 'u.typeId'
])
->where($where)
->select()
->toArray();
}
/**

View File

@@ -46,7 +46,7 @@ class UpdateCompanyController extends BaseController
protected function getUserDetailByCompanyId(): ?UsersModel
{
$where = [
'isAdmin' => 1, // 必须保证 isAdmin 有且只有一个
'isAdmin' => UsersModel::MASTER_USER, // 必须保证 isAdmin 有且只有一个
'companyId' => $this->companyId,
];
@@ -175,23 +175,23 @@ class UpdateCompanyController extends BaseController
protected function dataValidate(array $params): self
{
$validate = Validate::make([
'id' => 'require',
'name' => 'require|max:50|/\S+/',
'id' => 'require',
'name' => 'require|max:50|/\S+/',
'username' => 'require|max:20|/\S+/',
'account' => 'require|regex:^[a-zA-Z0-9]+$|max:20|/\S+/',
'phone' => 'require|regex:/^1[3-9]\d{9}$/',
'status' => 'require|in:0,1'
'account' => 'require|regex:^[a-zA-Z0-9]+$|max:20|/\S+/',
'phone' => 'require|regex:/^1[3-9]\d{9}$/',
'status' => 'require|in:0,1'
], [
'id.require' => '非法请求',
'name.require' => '请输入项目名称',
'id.require' => '非法请求',
'name.require' => '请输入项目名称',
'username.require' => '请输入用户昵称',
'account.require' => '请输入账号',
'account.regex' => '账号只能用数字或者字母或者数字字母组合',
'account.max' => '账号长度受限',
'phone.require' => '请输入手机号',
'phone.regex' => '手机号格式错误',
'status.require' => '缺少重要参数',
'status.in' => '非法参数',
'account.require' => '请输入账号',
'account.regex' => '账号只能用数字或者字母或者数字字母组合',
'account.max' => '账号长度受限',
'phone.require' => '请输入手机号',
'phone.regex' => '手机号格式错误',
'status.require' => '缺少重要参数',
'status.in' => '非法参数',
]);
if (!$validate->check($params)) {

View File

@@ -52,7 +52,7 @@ class GetBasestatisticsController extends Controller
{
return ResponseHelper::success(
[
'companyCount' => $this->getCompanyCount(),
'companyCount' => $this->getCompanyCount(),
'adminCount' => $this->getAdminCount(),
'customerCount' => $this->getDeviceCount(),
]

View File

@@ -85,7 +85,7 @@ class GetAddResultedDevicesController extends Controller
[
'accountId' => $accountId,
'pageIndex' => 0,
'pageSize' => 1
'pageSize' => 1
],
true
);

View File

@@ -61,9 +61,9 @@ class GetPoolListController extends BaseController
protected function makeReturnedValue(\think\Paginator $list): \think\Paginator
{
$list->each(function ($item) {
$item->gender = $this->formatGender($item->gender);
$item->gender = $this->formatGender($item->gender);
$item->addTime = $this->formatDate($item->addTime);
$item->tags = $this->handlTags($item->tags);
$item->tags = $this->handlTags($item->tags);
});
return $list;
@@ -78,15 +78,10 @@ class GetPoolListController extends BaseController
{
$query = TrafficPoolModel::alias('tp')
->field([
'ts.id',
'tp.wechatId',
'ts.createTime as addTime',
'ts.fromd as source',
'ts.id', 'ts.createTime as addTime', 'ts.fromd as source',
'c.name as projectName',
'wa.avatar',
'wa.gender',
'wa.nickname',
'wa.region',
'wa.avatar', 'wa.gender', 'wa.nickname', 'wa.region',
'wt.tags'
])
->join('traffic_source ts', 'tp.identifier = ts.identifier', 'RIGHT')
@@ -108,9 +103,9 @@ class GetPoolListController extends BaseController
return ResponseHelper::success(
[
'list' => $this->makeReturnedValue($list)->items(),
'list' => $this->makeReturnedValue($list)->items(),
'total' => $list->total(),
'page' => $list->currentPage(),
'page' => $list->currentPage(),
'limit' => $list->listRows()
]
);