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()); } } }