SysSetting.php 10.1 KB
<?php

namespace common\models;

use Yii;
use yii\base\ErrorException;
use yii\db\ActiveRecord;
use yii\behaviors\TimestampBehavior;
use common\services\redis\RedisConfig;

/**
 * 系统设置
 * This is the model class for table "{{%sys_setting}}".
 */
class SysSetting extends ActiveRecord
{
    const DEFAULT_GURANTEE_TIME             = 15; // 默认免费保修期(天)
    const DEFAULT_ORDER_POLLING_INTERVAL    = 3; // 默认订单实时轮询间隔(秒)
    const ONE_DAY_SECONDS                   = 86400; // 1天24小时转换为秒数 = 24 * 3600

    // 消息推送模式
    const MESSAGE_PUSH_ASYNC                = 0; // 异步(后台多任务分发)
    const MESSAGE_PUSH_SYNC                 = 1; // 同步(直接发送)

    const DEFAULT_REALNAME_AUTH_PASS_SCORE  = 75; // 实名认证身份证电子图片和头像通过匹配度
    const MAINTAIN_STOP                     = 'maintain'; // 系统维护标志

    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return '{{%sys_setting}}';
    }

    /**
     * @inheritdoc
     */
    public function behaviors()
    {
        return [
            'time' => [
                'class' => TimestampBehavior::className(),
                'createdAtAttribute' => 'created_at',
                'updatedAtAttribute' => 'updated_at',
            ]
        ];
    }

    /**
     * 读取系统设置
     * @param int $readCache  1-读取缓存; 0-直接读取数据库
     * @return array|mixed|null|ActiveRecord
     */
    private static function getSystemSetting()
    {
        $redis = Yii::$app->redis;
        $currentTime = time();

        // 缓存设置信息未过期, 并且系统设置表自缓存依赖未被更新过
        if ($redis->exists(RedisConfig::KEY_SYSTEM_SETTING)) {
            $setting = json_decode($redis->get(RedisConfig::KEY_SYSTEM_SETTING), true);
            if($setting && ($setting['cache_at'] + RedisConfig::SYSTEM_SETTING_CACHE_DURATION > $currentTime)){
                $setting['from'] = 'redis';  // 判断来源
                return $setting; // 直接读取缓存数据
            }
        }

        // 数据库读取并写入缓存
        $query = SysSetting::find();
        $query->where(['id'=>1]);
        $query->asArray();
        $setting = $query->one();
        if (empty($setting)) {
            throw new ErrorException('严重错误: 系统设置不存在!');
        }

        $setting['cache_at'] = $currentTime;
        $setting['from'] = 'DB';  // 判断来源
        $redis->set(RedisConfig::KEY_SYSTEM_SETTING,  json_encode($setting));
        return $setting;
    }

    /**
     * 清除系统设置缓存(后台更改设置时调用)
     */
    public static function removeCache()
    {
        $redis = Yii::$app->redis;
        $redis->del(RedisConfig::KEY_SYSTEM_SETTING);
    }

    /**
     * 获取当前上门费
     * @return int|mixed
     */
    public static function getDoorFee($city = '')
    {
        if ('' == $city) {
            return self::getDefaultDoorFee();
        }
        $row = RegionFeeSetting::findOne (['city'=> $city ]);

        if($row){
            return $row['door_fee'];
        }else{
            return self::getDefaultDoorFee();
        }
    }

    // 获取系统默认的上门费
    private static function getDefaultDoorFee()
    {
        return Yii::$app->params['DEFAULT_DOOR_FEE'];
    }

    /**
     * 获取免费保修期(天)
     * @return int|mixed
     */
    public static function getGuranteeTime()
    {
        $setting = self::getSystemSetting();
        if (empty($setting)) {
            return self::DEFAULT_GURANTEE_TIME;
        }
        return $setting['gurantee_time'];
    }

    /**
     * 获取二维码域名
     * @return int|mixed
     */
    public static function getQrcodeDomain()
    {
        $setting = self::getSystemSetting();
        return $setting['qrcode_domain'];
    }

    /**
     * 获取极窝二维码域名
     * @return int|mixed
     */
    public static function getJiwoQrcodeDomain()
    {
        $setting = self::getSystemSetting();
        return $setting['jiwo_qrcode_domain'];
    }

    /**
     * 获取订单实时轮询间隔(秒)
     * @return int|mixed
     */
    public static function getOrderPollingInterval()
    {
        $setting = self::getSystemSetting();
        if (empty($setting)) {
            return self::DEFAULT_ORDER_POLLING_INTERVAL;
        }
        return $setting['order_polling_interval'];
    }

    /**
     * 获取用户每日取消订单数量上限
     * @return int|mixed
     */
    public static function getUserCancelOrderLimitPerDay()
    {
        $setting = self::getSystemSetting();
        return $setting['user_cancel_order_limit_per_day'];
    }

    /**
     * 获取用户每日下单数量上限
     * @return int|mixed
     */
    public static function getUserOrderLimitPerDay()
    {
        $setting = self::getSystemSetting();
        return $setting['user_order_limit_per_day'];
    }

    /**
     * 获取客服电话
     * @return int|mixed
     */
    public static function getServicePhone()
    {
        $setting = self::getSystemSetting();
        return $setting['service_phone'];
    }

    /**
     * 获取是否启用更多分类
     * @return int|mixed
     */
    public static function getIsMoreDeviceEnable()
    {
        $setting = self::getSystemSetting();
        return $setting['is_more_device_enable'];
    }

    /**
     * 获取是否启用支付测试模式
     * @return int|mixed
     */
    public static function getIsPayTestMode()
    {
        $setting = self::getSystemSetting();
        return $setting['is_pay_test_mode'];
    }

    /**
     * 获取平台抽佣比例
     * @return int|mixed
     */
    public static function getCommissionRatio()
    {
        $setting = self::getSystemSetting();
        return $setting['commission_ratio'];
    }

    /**
     * 获取配件费抽佣比例
     * @return int|mixed
     */
    public static function getPartsCommissionRatio()
    {
        $setting = self::getSystemSetting();
        return $setting['parts_commission_ratio'];
    }

    /**
     * 是否启用通知栏
     * @return int|mixed
     */
    public static function getIsNoticeEnable()
    {
        $setting = self::getSystemSetting();
        return $setting['is_notice_enable'];
    }

    /**
     * 是否允许关闭通知栏
     * @return int|mixed
     */
    public static function getCanCloseNotice()
    {
        $setting = self::getSystemSetting();
        return $setting['can_close_notice'];
    }

    /**
     * 消息推送模式
     * @return int|mixed
     */
    public static function getMessagePushMode()
    {
        $setting = self::getSystemSetting();
        return $setting['msg_push_mode'];
    }

    /** 检查客户端维护状态
     * @return bool
     */
    public static function checkClientSiteStop()
    {
        $stopInfo = self::getClientSiteInfo();
        return $stopInfo['stop'];
    }

    public static function getClientSiteInfo()
    {
        $stopInfo = Yii::$app->params['STOP_SITES'];
        return $stopInfo;
    }

    /**
     * 获取系统设置的质保联系时间
     * 默认24小时
     */
    public static function getAppealDoorHours()
    {
        $settings = self::getSystemSetting();
        $appealDoorHours = isset($settings['appeal_door_hours']) && !empty($settings['appeal_door_hours']) ? $settings['appeal_door_hours'] : 24;
        return $appealDoorHours;
    }

    /**
     * 获取系统设置质保处理周期
     * 默认48小时
     */
    public static function getAppealDealHours()
    {
        $settings = self::getSystemSetting();
        $appealDealHours = isset($settings['appeal_deal_hours']) && !empty($settings['appeal_deal_hours']) ? $settings['appeal_deal_hours'] : 48;
        return $appealDealHours;
    }

    /**
     * 获取规定上门耗时
     * 默认2小时
     */
    public static function getStandardDoorHours()
    {
        $settings = self::getSystemSetting();
        $appealDoorHours = isset($settings['standard_door_hours']) && !empty($settings['standard_door_hours']) ? $settings['standard_door_hours'] : 2;
        return $appealDoorHours;
    }

    /**
     * 获取免责取消订单时间
     * 默认20分钟
     */
    public static function getDisclaimCancelTime()
    {
        $settings = self::getSystemSetting();
        $appealDoorHours = isset($settings['disclaim_cancel_time']) && !empty($settings['disclaim_cancel_time']) ? $settings['disclaim_cancel_time'] : 20;
        return $appealDoorHours;
    }
    /**
     * 获取系统设置的具体参数
     * @param $field 字段
     * @return value
     */
    public static function getSysSettingFieldValue($field)
    {
        $setting = self::getSystemSetting();
        if (empty($setting) || empty($field) || !isset($setting[$field])) {
            return false;
        }
        return $setting[$field];
    }

    /**
     * 工程师退款是否退上门费
     * @return int|mixed
     */
    public static function getRefundDoorFee()
    {
        $setting = self::getSystemSetting();
        return (isset($setting['refund_door_fee']) && $setting['refund_door_fee'] == 1) ? true : false;
    }

    /**
     * 是否开启百度身份证文字识别
     * @return int|mixed
     */
    public static function getBdocrCheckOpen()
    {
        $setting = self::getSystemSetting();
        return (isset($setting['bdocr_check_open']) && $setting['bdocr_check_open'] == 1) ? true : false;
    }

    /**
     * 获取 实名认证身份证电子图片和头像通过匹配度
     * @return int|mixed
     */
    public static function getRealnameAuthPassScore()
    {
        $setting = self::getSystemSetting();
        if (empty($setting) && !isset($setting['realname_auth_pass_score'])) {
            return self::DEFAULT_REALNAME_AUTH_PASS_SCORE;
        }
        return $setting['realname_auth_pass_score'];
    }

    /**
     * 是否保存派单记录到数据库
     * @return int|mixed
     */
    public static function getIsSaveDispatchOrderRecord()
    {
        $setting = self::getSystemSetting();
        return (isset($setting['is_save_dispatch_order_record']) && $setting['is_save_dispatch_order_record'] == 1) ? true : false;
    }
}