SystemBaseService.php 18.9 KB
Newer Older
D
devil 已提交
1 2 3 4
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
D
2.0  
Devil 已提交
5
// | Copyright (c) 2011~2099 http://shopxo.net All rights reserved.
D
devil 已提交
6
// +----------------------------------------------------------------------
D
2.0  
Devil 已提交
7
// | Licensed ( https://opensource.org/licenses/mit-license.php )
D
devil 已提交
8 9 10 11 12
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\service;

D
Devil 已提交
13
use think\facade\Db;
D
devil 已提交
14 15
use app\service\ResourcesService;
use app\service\QuickNavService;
16
use app\service\PluginsService;
D
devil 已提交
17 18

/**
D
Devil 已提交
19
 * 系统基础公共信息服务层
D
devil 已提交
20 21 22 23 24 25
 * @author  Devil
 * @blog    http://gong.gg/
 * @version 1.0.0
 * @date    2020-09-12
 * @desc    description
 */
D
Devil 已提交
26
class SystemBaseService
D
devil 已提交
27
{
D
Devil 已提交
28 29 30
    // 商品优惠使用记录key
    public static $plugins_goods_discount_record_key = 'plugins_use_goods_discount_record_';

D
devil 已提交
31 32 33 34 35 36 37 38 39 40 41 42 43 44
    /**
     * 公共配置信息
     * @author  Devil
     * @blog    http://gong.gg/
     * @version 1.0.0
     * @date    2020-09-12
     * @desc    description
     * @param   [array]           $params [输入参数]
     */
    public static function Common($params = [])
    {
        // 配置信息
        $config = [
            // 基础
D
Devil 已提交
45
            'common_site_type'                  => self::SiteTypeValue(),
D
devil 已提交
46
            'common_shop_notice'                => MyC('common_shop_notice', null, true),
D
Devil 已提交
47

D
Devil 已提交
48 49 50 51
            // 协议、注册协议、隐私协议
            'agreement_userregister_url'        => MyUrl('index/agreement/index', ['document'=>'userregister', 'is_content'=>1]),
            'agreement_userprivacy_url'         => MyUrl('index/agreement/index', ['document'=>'userprivacy', 'is_content'=>1]),

D
Devil 已提交
52
            // 手机端相关配置
D
devil 已提交
53 54 55 56 57
            'common_app_is_enable_search'       => (int) MyC('common_app_is_enable_search', 1),
            'common_app_is_enable_answer'       => (int) MyC('common_app_is_enable_answer', 1),
            'common_app_is_header_nav_fixed'    => (int) MyC('common_app_is_header_nav_fixed', 0),
            'common_app_is_online_service'      => (int) MyC('common_app_is_online_service', 0),
            'common_app_customer_service_tel'   => MyC('common_app_customer_service_tel', null, true),
D
Devil 已提交
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114

            // 扩展项-留言、问答
            'common_is_login_answer'                => (int) MyC('common_is_login_answer', 0, true),

            // 扩展项-订单
            'common_order_close_limit_time'         => (int) MyC('common_order_close_limit_time', 30, true),
            'common_order_success_limit_time'       => (int) MyC('common_order_success_limit_time', 21600, true),
            'common_pay_log_order_close_limit_time' => (int) MyC('common_pay_log_order_close_limit_time', 30, true),

            // 扩展项-CDN
            'common_cdn_attachment_host'        => MyC('common_cdn_attachment_host', null, true),
            'common_cdn_public_host'            => MyC('common_cdn_public_host', null, true),

            // 验证码
            'common_verify_expire_time'         => (int) MyC('common_verify_expire_time', 600, true),
            'common_verify_interval_time'       => (int) MyC('common_verify_interval_time', 60, true),
            'common_img_verify_state'           => (int) MyC('common_img_verify_state', 0, true),

            // 密码找回
            'home_site_user_forgetpwd_ad_images'=> self::SiteAdConfigImagesMgerge('home_site_user_forgetpwd'),

            // 用户登录
            'home_user_login_type'              => MyC('home_user_login_type', [], true),
            'home_user_login_img_verify_state'  => (int) MyC('home_user_login_img_verify_state', 0, true),
            'home_site_user_login_ad_images'    => self::SiteAdConfigImagesMgerge('home_site_user_login'),

            // 注册
            'home_user_reg_type'                    => MyC('home_user_reg_type', [], true),
            'home_user_register_img_verify_state'   => (int) MyC('home_user_register_img_verify_state', 0, true),
            'common_register_is_enable_audit'       => (int) MyC('common_register_is_enable_audit', 0, true),
            'home_is_enable_userregister_agreement' => (int) MyC('home_is_enable_userregister_agreement', 0, true),
            'home_site_user_register_bg_images'     => ResourcesService::AttachmentPathViewHandle(MyC('home_site_user_register_bg_images')),

            // 用户帐号绑定
            'common_user_is_onekey_bind_mobile'     => (int) MyC('common_user_is_onekey_bind_mobile', 0),
            'common_user_is_mandatory_bind_mobile'  => (int) MyC('common_user_is_mandatory_bind_mobile', 0),

            // 站点信息
            'home_site_name'                    => MyC('home_site_name', null, true),
            'home_site_logo'                    => ResourcesService::AttachmentPathViewHandle(MyC('home_site_logo')),
            'home_site_logo_wap'                => ResourcesService::AttachmentPathViewHandle(MyC('home_site_logo_wap')),
            'home_site_desktop_icon'            => ResourcesService::AttachmentPathViewHandle(MyC('home_site_desktop_icon')),
            'home_site_state'                   => (int) MyC('home_site_state', 0, true),
            'home_site_close_reason'            => MyC('home_site_close_reason', null, true),

            // 备案信息
            'home_site_icp'                     => MyC('home_site_icp', null, true),
            'home_site_security_record_name'    => MyC('home_site_security_record_name', null, true),
            'home_site_security_record_url'     => MyC('home_site_security_record_url', null, true),

            // css/js版本值
            'home_static_cache_version'         => MyC('home_static_cache_version', null, true),

            // 底部代码
            'home_footer_info'                  => MyC('home_footer_info', null, true),

            // 首页设置参数
D
Devil 已提交
115
            'home_index_floor_data_type'        => (int) MyC('home_index_floor_data_type', 0, true),
D
Devil 已提交
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
            'home_index_banner_left_status'     => (int) MyC('home_index_banner_left_status', 1),
            'home_index_banner_right_status'    => (int) MyC('home_index_banner_right_status', 1),

            // 搜索相关
            'home_search_limit_number'          => (int) MyC('home_search_limit_number', 20, true),
            'home_search_is_brand'              => (int) MyC('home_search_is_brand', 1),
            'home_search_is_category'           => (int) MyC('home_search_is_category', 1),
            'home_search_is_price'              => (int) MyC('home_search_is_price', 1),
            'home_search_is_params'             => (int) MyC('home_search_is_params', 1),
            'home_search_is_spec'               => (int) MyC('home_search_is_spec', 1),

            // 站点设置-扩展-基础
            'home_index_friendship_link_status' => (int) MyC('home_index_friendship_link_status', 0, true),
            'home_header_top_is_home'           => (int) MyC('home_header_top_is_home', 1),

            // 站点设置-扩展-快捷导航
D
Devil 已提交
132
            'home_navigation_main_quick_status' => (int) MyC('home_navigation_main_quick_status', 0),
D
Devil 已提交
133 134 135
            'home_navigation_main_quick_name'   => MyC('home_navigation_main_quick_name', '百宝箱', true),

            // 站点设置-扩展-用户地址
136 137
            'home_user_address_map_status'      => (int) MyC('home_user_address_map_status', 0),
            'home_user_address_idcard_status'   => (int) MyC('home_user_address_idcard_status', 0),
D
Devil 已提交
138
            'home_extraction_address_position'  => (int) MyC('home_extraction_address_position', 0),
D
devil 已提交
139

D
devil 已提交
140 141
            // 订单相关
            'home_is_enable_order_bulk_pay'     => (int) MyC('home_is_enable_order_bulk_pay', 0),
D
Devil 已提交
142
            'common_order_is_booking'           => (int) MyC('common_order_is_booking'),
D
devil 已提交
143

D
devil 已提交
144 145 146 147 148 149 150 151 152 153 154 155
            // 用户中心相关
            'common_user_center_notice'         => MyC('common_user_center_notice', null, true),
            'common_app_is_head_vice_nav'       => (int) MyC('common_app_is_head_vice_nav', 0),

            // 商品分类相关
            'category_show_level'               => MyC('common_show_goods_category_level', 3, true),

            // 商品相关
            'common_app_is_use_mobile_detail'   => (int) MyC('common_app_is_use_mobile_detail'),
            'common_app_is_good_thing'          => (int) MyC('common_app_is_good_thing'),
            'common_app_is_poster_share'        => (int) MyC('common_app_is_poster_share'),
            'common_is_goods_detail_show_photo' => (int) MyC('common_is_goods_detail_show_photo', 0, true),
D
Devil 已提交
156
            'common_is_exhibition_mode_btn_text'=> MyC('common_is_exhibition_mode_btn_text', '立即咨询', true),
G
gongfuxiang 已提交
157
            'common_is_show_goods_comments'     => (int) MyC('common_is_show_goods_comments', 1),
D
Devil 已提交
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172

            // 百度地图密钥
            'common_baidu_map_ak'               => MyC('common_baidu_map_ak', null, true),

            // 商店信息
            'common_customer_store_tel'         => MyC('common_customer_store_tel', null, true),
            'common_customer_store_email'       => MyC('common_customer_store_email', null, true),
            'common_customer_store_address'     => MyC('common_customer_store_address', null, true),
            'common_customer_store_qrcode'      => ResourcesService::AttachmentPathViewHandle(MyC('common_customer_store_qrcode')),

            // SEO信息
            'home_seo_site_title'               => MyC('home_seo_site_title', null, true),
            'home_seo_site_keywords'            => MyC('home_seo_site_keywords', null, true),
            'home_seo_site_description'         => MyC('home_seo_site_description', null, true),
            
D
devil 已提交
173 174 175 176 177 178 179 180 181 182 183 184
        ];

        // 支付宝小程序在线客服
        if(APPLICATION_CLIENT_TYPE == 'alipay')
        {
            $config['common_app_mini_alipay_tnt_inst_id'] = MyC('common_app_mini_alipay_tnt_inst_id', null, true);
            $config['common_app_mini_alipay_scene'] = MyC('common_app_mini_alipay_scene', null, true);
        }

        // 数据集合
        $data = [
            // 全局状态值(1接口执行成功,用于前端校验接口请求完成状态,以后再加入其它状态)
D
devil 已提交
185
            'status'            => 1,
D
devil 已提交
186 187

            // 配置信息
D
devil 已提交
188
            'config'            => $config,
D
devil 已提交
189

D
devil 已提交
190 191
            // 货币符号
            'currency_symbol'   => ResourcesService::CurrencyDataSymbol(),
D
devil 已提交
192 193

            // 快捷入口信息
D
devil 已提交
194
            'quick_nav'         => QuickNavService::QuickNav(),
195 196 197

            // 插件配置信息
            'plugins_base'      => PluginsService::PluginsBaseList(),
D
devil 已提交
198 199 200 201
        ];

        // 公共配置信息钩子
        $hook_name = 'plugins_service_base_commin';
D
Devil 已提交
202
        MyEventTrigger($hook_name, [
D
devil 已提交
203 204 205 206 207 208
            'hook_name'     => $hook_name,
            'is_backend'    => true,
            'data'          => &$data,
            'params'        => $params,
        ]);

D
Devil 已提交
209 210 211
        return DataReturn('success', 0, $data);
    }

D
Devil 已提交
212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240
    /**
     * 站点相关多张广告图片配置信息合并
     * @author  Devil
     * @blog    http://gong.gg/
     * @version 1.0.0
     * @date    2021-05-08
     * @desc    description
     * @param   [string]            $type   [类型]
     * @param   [int]               $count  [数量、默认3]
     */
    public static function SiteAdConfigImagesMgerge($type, $count = 3)
    {
        $data = [];
        $key = $type.'_ad';
        for($i=1; $i<=$count; $i++)
        {
            $img = ResourcesService::AttachmentPathViewHandle(MyC($key.$i.'_images'));
            if(!empty($img))
            {
                $data[] = [
                    'images'    => $img,
                    'url'       => MyC($key.$i.'_url', null, true),
                    'bg_color'  => MyC($key.$i.'_bg_color', null, true),
                ];
            }
        }
        return $data;
    }

D
Devil 已提交
241 242 243 244 245 246 247 248 249 250 251 252
    /**
     * 数据返回处理
     * @author  Devil
     * @blog    http://gong.gg/
     * @version 1.0.0
     * @date    2021-01-06
     * @desc    description
     * @param   [array]           $data [返回数据]
     */
    public static function DataReturn($data = [])
    {
        // 当前操作名称, 兼容插件模块名称
D
Devil 已提交
253 254 255
        $module_name = RequestModule();
        $controller_name = RequestController();
        $action_name = RequestAction();
D
Devil 已提交
256

D
Devil 已提交
257
        // 钩子
258
        $hook_name = 'plugins_service_base_data_return_'.$module_name.'_'.$controller_name.'_'.$action_name;
D
Devil 已提交
259
        MyEventTrigger($hook_name, [
D
Devil 已提交
260 261 262
            'hook_name'     => $hook_name,
            'is_backend'    => true,
            'data'          => &$data,
263
            'params'        => input(),
D
Devil 已提交
264 265 266
        ]);

        return DataReturn('success', 0, $data);
D
devil 已提交
267
    }
D
Devil 已提交
268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283

    /**
     * 站点类型
     * @author  Devil
     * @blog    http://gong.gg/
     * @version 1.0.0
     * @date    2021-04-04
     * @desc    description
     */
    public static function SiteTypeValue()
    {
        // 当前站点类型、默认销售型(0销售型, 1展示型, 2自提点, 3虚拟销售, 4销售+自提)
        $value = (int) MyC('common_site_type', 0, true);

        // 钩子
        $hook_name = 'plugins_service_base_site_type_value';
D
Devil 已提交
284
        MyEventTrigger($hook_name, [
D
Devil 已提交
285 286 287 288 289 290 291
            'hook_name'     => $hook_name,
            'is_backend'    => true,
            'value'         => &$value,
        ]);

        return $value;
    }
D
Devil 已提交
292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320

    /**
     * 是否使用商品优化记录
     * @author  Devil
     * @blog    http://gong.gg/
     * @version 1.0.0
     * @date    2021-04-09
     * @desc    description
     * @param   [int]          $goods_id [商品id]
     * @param   [string]       $plugins  [插件名称]
     */
    public static function IsGoodsDiscountRecord($goods_id, $plugins)
    {
        // 获取记录
        $data = self::GetGoodsDiscountRecord($goods_id);

        // 当前插件是否存在优惠记录
        return in_array($plugins, $data);
    }

    /**
     * 商品优化记录
     * @author  Devil
     * @blog    http://gong.gg/
     * @version 1.0.0
     * @date    2021-04-09
     * @desc    description
     * @param   [int]          $goods_id [商品id]
     * @param   [string]       $plugins  [插件名称]
321
     * @param   [int]          $is_use   [是否使用(0否, 1是)]
D
Devil 已提交
322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341
     */
    public static function GoodsDiscountRecord($goods_id, $plugins, $is_use = 0)
    {
        // 记录key
        $key = self::$plugins_goods_discount_record_key.$goods_id;

        // 获取记录
        $data = self::GetGoodsDiscountRecord($goods_id);

        // 是否存在
        $index = array_search($plugins, $data);

        // 是否使用优惠
        if($is_use == 1)
        {
            // 存储记录
            if($index === false)
            {
                $data[] = $plugins;
            }
D
Devil 已提交
342
            MySession($key, $data);
D
Devil 已提交
343 344 345 346 347 348 349 350
        } else {
            if($index !== false)
            {
                unset($data[$index]);
                sort($data);
            }
        }

D
Devil 已提交
351
        MySession($key, empty($data) ? null : $data);
D
Devil 已提交
352 353 354 355 356 357 358 359 360 361 362 363 364 365
        return true;
    }

    /**
     * 获取使用商品优化记录
     * @author  Devil
     * @blog    http://gong.gg/
     * @version 1.0.0
     * @date    2021-04-09
     * @desc    description
     * @param   [int]          $goods_id [商品id]
     */
    public static function GetGoodsDiscountRecord($goods_id)
    {
D
Devil 已提交
366
        $res = MySession(self::$plugins_goods_discount_record_key.$goods_id);
D
Devil 已提交
367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446
        return empty($res) ? [] : $res;
    }

    /**
     * 商品是否支持折扣
     * @author  Devil
     * @blog    http://gong.gg/
     * @version 1.0.0
     * @date    2021-04-08
     * @desc    description
     * @param   [array]          $params     [输入参数]
     * @param   [string]         $plugins    [插件名称]
     */
    public static function IsGoodsDiscount($params = [], $plugins = '')
    {
        // 默认支持
        $status = true;

        // 是否关闭商品优惠重叠
        // 采用钩子进行处理
        if(MyC('is_close_goods_discount_overlap', 0) == 1 && !empty($params) && !empty($params['hook_name']))
        {
            switch($params['hook_name'])
            {
                // 商品处理结束
                case 'plugins_service_goods_handle_end' :
                    if(!empty($params['goods']) && !empty($params['goods']['id']))
                    {
                        $old = Db::name('Goods')->field('price,min_price,max_price')->find($params['goods']['id']);
                        if(!empty($old))
                        {
                            // 展示销售价格
                            if($status && isset($params['goods']['price']))
                            {
                                $temp = explode('-', $params['goods']['price']);
                                $temp_old = explode('-', $old['price']);
                                if($temp[count($temp)-1] < $temp_old[count($temp_old)-1])
                                {
                                    $status = false;
                                }
                            }

                            // 最低价
                            if($status && isset($params['goods']['min_price']))
                            {
                                if($params['goods']['min_price'] < $old['min_price'])
                                {
                                    $status = false;
                                }
                            }

                            // 最高价
                            if($status && isset($params['goods']['max_price']))
                            {
                                if($params['goods']['max_price'] < $old['max_price'])
                                {
                                    $status = false;
                                }
                            }
                        }
                    }
                    break;

                // 获取规格详情
                case 'plugins_service_goods_spec_base' :
                    if(!empty($params['data']) && !empty($params['data']['spec_base']) && !empty($params['data']['spec_base']['id']) && !empty($params['data']['spec_base']['goods_id']) && isset($params['data']['spec_base']['price']))
                    {
                        $price_old = Db::name('GoodsSpecBase')->where(['id'=>$params['data']['spec_base']['id']])->value('price');
                        if($status && $params['data']['spec_base']['price'] < $price_old)
                        {
                            $status = false;
                        }
                    }
                    break;
            }
        }

        // 返回状态、默认支持
        return $status;
    }
D
Devil 已提交
447

D
Devil 已提交
448 449 450 451 452 453 454 455 456 457
    /**
     * 附件地址
     * @author  Devil
     * @blog    http://gong.gg/
     * @version 1.0.0
     * @date    2021-07-06
     * @desc    description
     */
    public static function AttachmentHost()
    {
D
Devil 已提交
458
        return MyConfig('shopxo.attachment_host');
D
Devil 已提交
459
    }
D
devil 已提交
460 461
}
?>