jh-admin/app/model/system/Site.php

285 lines
10 KiB
PHP

<?php
/**
* SaaSMall商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 成都SAAS云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.gobuysaas.com
* =========================================================
*/
namespace app\model\system;
use app\model\BaseModel;
use extend\Time;
use think\facade\Cache;
use think\facade\Db;
use app\model\upload\Upload;
/**
* 站点管理
* @author Administrator
*
*/
class Site extends BaseModel
{
/**
* getSiteInfo 获取站点详情
* @param $condtion
* @param string $fields
*/
public function getSiteInfo($condition, $fields = '*')
{
$res = model('site')->getInfo($condition, $fields);
return $this->success($res);
}
/**
* 获取站点插件
* @param int $site_id
*/
public function getSiteAddon($site_id)
{
$site_info = model('site')->getInfo([['site_id', '=', $site_id]], 'site_addon');
$site_addon = $site_info['site_addon'] ?? '';
$addon_condition_str = "= 'system' ";
$addon_condition = array();
if (!empty($site_addon)) {
$temp_addon_array = explode(',', $site_addon);
foreach ($temp_addon_array as $k => $v) {
$temp_addon_array[$k] = "'" . $v . "'";
}
$temp_str = implode(',', $temp_addon_array);
$addon_condition_str .= " OR name in ($temp_str)";
}
$addon_condition[] = ["type", "exp", Db::raw($addon_condition_str)];
$addon_model = new Addon();
$result = $addon_model->getAddonList($addon_condition);
return $result;
}
/**
* getSiteShopPageList 获取站点列表
* @param array $condition
* @param bool $fields
* @param $order
* @param string $limit
* @return array
*/
public function getSitePageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = 'create_time desc', $fields = '*')
{
$res = model('site')->pageList($condition, $fields, $order, $page, $page_size, 'a');
if ($res['count'] > 0) {
$time = time();
foreach ($res['list'] as $k => $v) {
if ($v['expire_time'] == 0) {
$res['list'][$k]['status'] = '正常';
} elseif ($v['expire_time'] > $time) {
$cha = $v['expire_time'] - $time;
$date = ceil(($cha / 86400));
if ($date < 30) {
$res['list'][$k]['status'] = '即将到期';
} else {
$res['list'][$k]['status'] = '正常';
}
} else {
$res['list'][$k]['status'] = '关闭';
}
}
}
return $this->success($res);
}
/***
* 添加站点
* @param $site_data
* @param $user_info
* @param bool $is_number 是否验证代理数量
* @return array
*/
public function addSite($site_data, $user_info)
{
//用户检测
if (empty($user_info['username'])) {
model("shop")->rollback();
return $this->error('', 'USER_NOT_EXIST');
} else if ($user_info['username'] && model("user")->getInfo(['username' => $user_info['username']], 'uid') > 0) {
model("shop")->rollback();
return $this->error('', $user_info['username'] . 'USER_EXIST账户已存在');
}
$site_data['site_type'] = 'shop';
$site_data['username'] = $user_info['username'];
$site_data['create_time'] = time();
if (isset($site_data['is_admin']) && $site_data['is_admin'] == 1) {
$addon = new Addon();
$install = $addon->getAddonList([["type", "<>", "system"]]);
$addon_array = array_column($install["data"], 'name');
$site_data['site_addon'] = implode(',', $addon_array);
$site_data['group_id'] = 0;
$site_data['group_name'] = '自营店铺套餐';
$site_data['sms_num'] = 0;
} else { //套餐信息
$site_group_model = new SiteGroup();
$site_group_info = $site_group_model->getSiteGroupInfo(
[['group_id', '=', $site_data['group_id']]],
'group_id,group_name,addon_array,sms_num,unit'
);
$unit = $site_group_info['data']['unit'];
$site_data['group_id'] = $site_group_info['data']['group_id'];
$site_data['group_name'] = $site_group_info['data']['group_name'];
$site_data['site_addon'] = $site_group_info['data']['addon_array'];
if ($site_data['is_try'] == 1) {//试用
//查询是否开启体验
$site_config = new SiteConfig();
$is_try = true;
$config_info = $site_config->getOpenSiteConfig();
$site_data['sms_num'] = $config_info['data']['value']['sms_num'];
$site_data['expire_time'] = Time::daysAfter($site_data['expire_time'] ?? 7);
} else if (isset($site_data['agent_id'])) {
$site_data['sms_num'] = $site_group_info['data']['sms_num'];
if (!isset($site_data['expire_time'])) {
$site_data['expire_time'] = strtotime("+1 " . $unit);
}
}
}
model('site')->startTrans();
try {
$site_id = model("site")->add($site_data);
$shop_data['site_id'] = $site_id;
$shop_data['create_time'] = time();
model("shop")->add($shop_data);
// 添加店铺相册默认分组
model("album")->add(['site_id' => $site_id, 'album_name' => "默认分组", 'update_time' => time(), 'is_default' => 1,'level'=>1]);
//添加系统用户组
$group = new Group();
$group_data = [
'site_id' => $site_id,
'app_module' => 'shop',
'group_name' => '管理员组',
'is_system' => 1,
'menu_array' => '',
'create_time' => time()
];
$group_id = $group->addGroup($group_data)['data'];
//添加用户
$data_user = [
'app_module' => 'shop',
'is_admin' => 1,
'site_id' => $site_id,
'username' => $user_info['username'],
'password' => $user_info['password'],
'group_id' => $group_id,
'group_name' => '管理员组',
];
//添加user表
model('user')->add($data_user);
//执行事件
event("AddSite", ['site_id' => $site_id]);
model("site")->commit();
return $this->success($site_id);
} catch (\Exception $e) {
model("site")->rollback();
return $this->error("", $e->getMessage());
}
}
/**
* 修改商城站点信息
* @param $site_data
* @param $condition
* @return int
*/
public function editSite($site_data, $condition)
{
$res = model('site')->update($site_data, $condition);
return $this->success($res);
}
/**
* 修改店铺域名
* @param $site_domain
* @param $site_id
* @return array
*/
public function changeDomian($site_domain, $site_id)
{
//格式为https://baidu.com或者http://baidu.com
if (!preg_match('/^http(s)?:\\/\\/.+/', $site_domain)) {
return $this->error(-1, '域名必须以http或者https开头');
}
$nohttp_domain = preg_replace('/^https?/', '', $site_domain);
$domian_count = model('site')->getCount([['site_domain', 'LIKE', "%{$nohttp_domain}%"], ['site_id', '<>', $site_id]]);
if ($domian_count > 0) {
return $this->error('-1', '该域名已被使用,请使用其他域名');
}
$res = model('site')->update(['site_domain' => $site_domain], [['site_id', '=', $site_id]]);
return $this->success($res);
}
/**
* 统计站点字段
* @param $condition
* @param $field
*/
public function getSiteSum($condition, $field)
{
$res = model('site')->getSum($condition, $field);
return $this->success($res);
}
/**
* 统计站点字段
* @param $condition
*/
public function getSiteCount($condition)
{
$res = model('site')->getCount($condition, '*');
return $this->success($res);
}
/**
* 删除订单
* @param $site_id
*/
public function deleteSite($condition)
{
model('site')->startTrans();
try {
$site_list = model('site')->getList($condition, 'site_id');
//删除站点
$res = model('site')->delete($condition);
if ($res === false)
return $this->error();
foreach ($site_list as $k => $v) {
$site_id = $v['site_id'];
//删除站点相关配置
$config_model = new Config();
$config_condition = array(
['site_id', '=', $site_id]
);
$config_result = $config_model->deleteConfig($config_condition);
if ($config_result['code'] < 0) {
return $config_result;
}
//todo 删除站点相关属性 各种业务通过实现删除站点钩子来实现(例如删除商品.商品分类 . 订单......)
$result_list = event('SiteDelete', ['site_id' => $site_id]);
if (!empty($result_list)) {
foreach ($result_list as $k => $v) {
if (!empty($v) && $v['code'] < 0) {
return $v;
}
}
}
}
model("site")->commit();
return $this->success();
} catch (\Exception $e) {
model("site")->rollback();
return $this->error("", $e->getMessage());
}
}
}