|
|
@@ -11,7 +11,6 @@
|
|
|
|
|
|
namespace App\Services\Common;
|
|
|
|
|
|
-use App\Models\GoodsModel;
|
|
|
use App\Models\StoreModel;
|
|
|
use App\Models\UserModel;
|
|
|
use App\Models\MemberModel;
|
|
|
@@ -36,7 +35,7 @@ class StoreService extends BaseService
|
|
|
*/
|
|
|
public function __construct()
|
|
|
{
|
|
|
- $this->model = new StoreModel();
|
|
|
+ $this->model = new UserModel();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -49,38 +48,17 @@ class StoreService extends BaseService
|
|
|
{
|
|
|
// 分页查询
|
|
|
$list = $this->model
|
|
|
- ->where('mark', 1)
|
|
|
+ ->where(['type'=>2,'mark'=>1])
|
|
|
->where(function ($query) use ($params) {
|
|
|
- // 商家ID筛选
|
|
|
- if (isset($params['store_id']) && $params['store_id'] > 0) {
|
|
|
- $query->where('id', $params['store_id']);
|
|
|
- }
|
|
|
+
|
|
|
// 状态筛选
|
|
|
if (isset($params['status']) && $params['status'] > 0) {
|
|
|
$query->where('status', $params['status']);
|
|
|
}
|
|
|
- // 分类筛选
|
|
|
- if (isset($params['category_id']) && $params['category_id'] > 0) {
|
|
|
- $query->where('category_id', $params['category_id']);
|
|
|
- }
|
|
|
- // 用户状态筛选
|
|
|
- if (isset($params['user_status']) && $params['user_status'] > 0) {
|
|
|
- $query->whereHas('member', function ($q) use ($params) {
|
|
|
- $q->where('status', $params['user_status'])->where('mark', 1);
|
|
|
- });
|
|
|
- }
|
|
|
- // 管理员状态筛选
|
|
|
- if (isset($params['admin_status']) && $params['admin_status'] > 0) {
|
|
|
- $query->whereHas('user', function ($q) use ($params) {
|
|
|
- $q->where('status', $params['admin_status'])->where('mark', 1);
|
|
|
- });
|
|
|
- }
|
|
|
- // 店铺名称搜索
|
|
|
+
|
|
|
+ // 名称搜索
|
|
|
if (isset($params['name']) && $params['name']) {
|
|
|
- $query->where(function ($q) use ($params) {
|
|
|
- $q->where('name', 'like', "%{$params['name']}%")
|
|
|
- ->orWhere('phone', 'like', "%{$params['name']}%");
|
|
|
- });
|
|
|
+ $query->where('nickname', 'like', "%{$params['name']}%");
|
|
|
}
|
|
|
// 联系电话搜索
|
|
|
if (isset($params['phone']) && $params['phone']) {
|
|
|
@@ -91,7 +69,6 @@ class StoreService extends BaseService
|
|
|
$query->where('real_name', 'like', "%{$params['real_name']}%");
|
|
|
}
|
|
|
})
|
|
|
- ->with(['user', 'member', 'category'])
|
|
|
->orderBy('create_time', 'desc')
|
|
|
->orderBy('id', 'desc')
|
|
|
->paginate($pageSize > 0 ? $pageSize : 9999999);
|
|
|
@@ -103,12 +80,9 @@ class StoreService extends BaseService
|
|
|
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']);
|
|
|
- $item['user_status'] = isset($item['user']['status']) ? $item['user']['status'] : 1;
|
|
|
- $item['member_status'] = isset($item['member']['status']) ? $item['member']['status'] : 1;
|
|
|
- $item['category_name'] = isset($item['category']['name']) ? $item['category']['name'] : '未分类';
|
|
|
// 处理门头照图片
|
|
|
- if (isset($item['logo']) && $item['logo']) {
|
|
|
- $item['logo'] = get_image_url($item['logo']);
|
|
|
+ if (isset($item['avatar']) && $item['avatar']) {
|
|
|
+ $item['avatar'] = get_image_url($item['avatar']);
|
|
|
}
|
|
|
// 添加余额信息
|
|
|
$item['balance'] = isset($item['member']['balance']) ? $item['member']['balance'] : 0;
|
|
|
@@ -153,42 +127,16 @@ class StoreService extends BaseService
|
|
|
$where['status'] = $status;
|
|
|
}
|
|
|
|
|
|
- // 分类筛选
|
|
|
- $categoryId = isset($params['category_id']) ? intval($params['category_id']) : 0;
|
|
|
- if ($categoryId > 0) {
|
|
|
- $where['category_id'] = $categoryId;
|
|
|
- }
|
|
|
-
|
|
|
- // 用户状态筛选(member表)
|
|
|
- $userStatus = isset($params['user_status']) ? intval($params['user_status']) : 0;
|
|
|
- // 管理员状态筛选(user表)
|
|
|
- $adminStatus = isset($params['admin_status']) ? intval($params['admin_status']) : 0;
|
|
|
-
|
|
|
$model = $this->model
|
|
|
- ->with(['user', 'member', 'category'])
|
|
|
- ->select('stores.*')
|
|
|
+ ->select('user.*')
|
|
|
->where($where);
|
|
|
|
|
|
- // 如果筛选用户状态,使用 whereHas 关联 member 表
|
|
|
- if ($userStatus > 0) {
|
|
|
- $model->whereHas('member', function ($query) use ($userStatus) {
|
|
|
- $query->where('status', $userStatus)->where('mark', 1);
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- // 如果筛选管理员状态,使用 whereHas 关联 user 表
|
|
|
- if ($adminStatus > 0) {
|
|
|
- $model->whereHas('user', function ($query) use ($adminStatus) {
|
|
|
- $query->where('status', $adminStatus)->where('mark', 1);
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
// 搜索条件
|
|
|
$model->where(function ($query) use ($params) {
|
|
|
// 店铺名称搜索
|
|
|
$name = isset($params['name']) ? trim($params['name']) : '';
|
|
|
if ($name) {
|
|
|
- $query->where('name', 'like', "%{$name}%");
|
|
|
+ $query->where('nickname', 'like', "%{$name}%");
|
|
|
}
|
|
|
|
|
|
// 联系电话搜索
|
|
|
@@ -218,192 +166,28 @@ class StoreService extends BaseService
|
|
|
{
|
|
|
$data = request()->all();
|
|
|
// 图片处理
|
|
|
- if (isset($data['logo'])) {
|
|
|
- $data['logo'] = get_image_path($data['logo']);
|
|
|
+ if (isset($data['avatar'])) {
|
|
|
+ $data['avatar'] = get_image_path($data['avatar']);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (empty($data['nickname'])) {
|
|
|
+ return message('请填写企业名称', false);
|
|
|
}
|
|
|
|
|
|
- if (empty($data['name'])) {
|
|
|
- return message('请填写店铺名称', false);
|
|
|
+ if (empty($data['phone'])) {
|
|
|
+ return message('请填写企业账号(联系电话)', false);
|
|
|
}
|
|
|
+
|
|
|
if (empty($data['address'])) {
|
|
|
$data['address'] = '';
|
|
|
}
|
|
|
|
|
|
$result = parent::edit($data);
|
|
|
|
|
|
- // 编辑成功后清除商家缓存
|
|
|
- if ($result['code'] == 0) {
|
|
|
- RedisService::keyDel("caches:storeId:id*");
|
|
|
- }
|
|
|
-
|
|
|
return $result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 审核商家
|
|
|
- * @param int $userId 操作人ID
|
|
|
- * @param array $params 审核参数
|
|
|
- * @return array
|
|
|
- */
|
|
|
- public function confirm($userId, $params)
|
|
|
- {
|
|
|
- $id = isset($params['id']) ? intval($params['id']) : 0;
|
|
|
- $status = isset($params['status']) ? intval($params['status']) : 0;
|
|
|
- $remark = isset($params['remark']) ? trim($params['remark']) : '';
|
|
|
-
|
|
|
- if (!$id) {
|
|
|
- $this->error = '商家ID不能为空';
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- $storesModel = $this->model->where(['id' => $id, 'mark' => 1])->first();
|
|
|
- if (!$storesModel) {
|
|
|
- $this->error = '商家信息不存在';
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- // 审核通过
|
|
|
- if ($status == 1) {
|
|
|
- // 使用事务确保数据一致性
|
|
|
- DB::beginTransaction();
|
|
|
- try {
|
|
|
- // 密码使用手机号后6位
|
|
|
- $password = substr($storesModel->phone, -6);
|
|
|
-
|
|
|
- // 使用商家手机号作为管理账号用户名
|
|
|
- $username = $this->generateUsername($storesModel);
|
|
|
-
|
|
|
- // 保存原始的member ID(shop.user_id应该指向member.id)
|
|
|
- $memberId = $storesModel->user_id;
|
|
|
-
|
|
|
- // 检查是否已存在相同手机号的管理员账号
|
|
|
- $existingUser = UserModel::where('mobile', $storesModel->phone)
|
|
|
- ->where('mark', 1)
|
|
|
- ->first();
|
|
|
-
|
|
|
- if ($existingUser) {
|
|
|
- // 如果存在相同手机号的账号,更新该账号
|
|
|
- $adminUserId = $existingUser->id;
|
|
|
- UserModel::where('id', $adminUserId)->update([
|
|
|
- 'user_id' => $memberId, // 确保user.user_id指向member.id
|
|
|
- 'username' => $username,
|
|
|
- 'password' => get_password($password . $username),
|
|
|
- 'realname' => $storesModel->real_name,
|
|
|
- 'mobile' => $storesModel->phone,
|
|
|
- 'status' => 1,
|
|
|
- 'update_user' => $userId,
|
|
|
- 'update_time' => time()
|
|
|
- ]);
|
|
|
- } else {
|
|
|
- // 创建新的管理账户
|
|
|
- $userData = [
|
|
|
- 'user_id' => $memberId, // 绑定会员ID(member表的ID)
|
|
|
- 'username' => $username,
|
|
|
- 'nickname' => $username,
|
|
|
- 'password' => get_password($password . $username),
|
|
|
- 'realname' => $storesModel->real_name,
|
|
|
- 'mobile' => $storesModel->phone,
|
|
|
- 'status' => 1,
|
|
|
- 'create_user' => $userId,
|
|
|
- 'create_time' => time(),
|
|
|
- 'update_user' => $userId,
|
|
|
- 'update_time' => time(),
|
|
|
- 'mark' => 1
|
|
|
- ];
|
|
|
-
|
|
|
- $adminUserId = UserModel::insertGetId($userData);
|
|
|
- }
|
|
|
-
|
|
|
- // 删除已存在的用户角色关系
|
|
|
- DB::table('user_role')->where('user_id', $adminUserId)->delete();
|
|
|
-
|
|
|
- // 创建用户角色关系(role_id = 6,商家角色)
|
|
|
- DB::table('user_role')->insert([
|
|
|
- 'user_id' => $adminUserId,
|
|
|
- 'role_id' => 6
|
|
|
- ]);
|
|
|
-
|
|
|
- // 更新商家状态为已审核,保持user_id为member ID
|
|
|
- $updateData = [
|
|
|
- 'status' => 1,
|
|
|
- 'user_id' => $memberId, // 保持shop.user_id指向member.id
|
|
|
- 'confirm_remark' => $remark ?: '审核通过',
|
|
|
- 'update_time' => time()
|
|
|
- ];
|
|
|
-
|
|
|
- $this->model->where('id', $id)->update($updateData);
|
|
|
-
|
|
|
- // 清除商家缓存
|
|
|
- RedisService::keyDel("caches:storeId:id*");
|
|
|
-
|
|
|
- DB::commit();
|
|
|
-
|
|
|
- // 清除绑定显示商家参数,从而重新获取
|
|
|
- RedisService::keyDel("caches:storeId:id*");
|
|
|
-
|
|
|
- $this->error = '审核通过,管理账号:' . $username . ',密码:' . $password;
|
|
|
- return true;
|
|
|
- } catch (\Exception $e) {
|
|
|
- DB::rollBack();
|
|
|
- Log::error('商家审核失败,创建管理员账号出错:' . $e->getMessage(), [
|
|
|
- 'store_id' => $id,
|
|
|
- 'store_name' => $storesModel->name,
|
|
|
- 'phone' => $storesModel->phone,
|
|
|
- 'exception' => $e->getTraceAsString()
|
|
|
- ]);
|
|
|
- $this->error = '审核失败,创建管理员账号失败:' . $e->getMessage();
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
- // 审核驳回
|
|
|
- elseif ($status == 3) {
|
|
|
- if (empty($remark)) {
|
|
|
- $this->error = '驳回理由不能为空';
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- $this->model->where('id', $id)->update([
|
|
|
- 'status' => 3,
|
|
|
- 'confirm_remark' => $remark,
|
|
|
- 'update_time' => time()
|
|
|
- ]);
|
|
|
-
|
|
|
- $this->error = '审核驳回成功';
|
|
|
- return true;
|
|
|
- } else {
|
|
|
- $this->error = '审核状态参数错误';
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 生成随机密码
|
|
|
- * @param int $length 密码长度
|
|
|
- * @return string
|
|
|
- */
|
|
|
- private function generatePassword($length = 8)
|
|
|
- {
|
|
|
- $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
|
|
|
- $password = '';
|
|
|
- for ($i = 0; $i < $length; $i++) {
|
|
|
- $password .= $chars[mt_rand(0, strlen($chars) - 1)];
|
|
|
- }
|
|
|
- return $password;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 生成管理账号用户名(使用商家手机号)
|
|
|
- * @param object $storeInfo 商家信息
|
|
|
- * @return string
|
|
|
- */
|
|
|
- private function generateUsername($storeInfo)
|
|
|
- {
|
|
|
- // 直接使用手机号作为用户名
|
|
|
- return $storeInfo->phone;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
* 获取当前登录商家信息
|
|
|
* @return array
|
|
|
*/
|