load(); } private static $stInstance = null; public static function instance() { if (self::$stInstance == null) { self::$stInstance = new transfer(); } return self::$stInstance; } public function load() { $mch_checker = function ($mchid) { $item = Model()->table('merchant')->field('mchid,admin_id')->where(['mchid' => $mchid])->find(); return intval($item['admin_id']); }; $this->mMchid2Infos = []; $i = 0; while (true) { $start = $i * 1000; $items = Model()->table('merchant')->field('mchid,transfer_cfg')->order('mchid asc')->limit("{$start},1000")->select(); if(empty($items)) { return; } $i++; foreach ($items as $item) { $transfer_cfg = $item['transfer_cfg']; if(empty($transfer_cfg)) { continue; } $transfer_cfg = unserialize($transfer_cfg); if($transfer_cfg === false) { continue; } $mchid = intval($item['mchid']); $opened = intval($transfer_cfg['transfer_opened']); $tmchid = intval($transfer_cfg['transfer_mchid']); $lower_time = intval($transfer_cfg['transfer_lowertime']); $upper_time = intval($transfer_cfg['transfer_uppertime']); $card_types = $transfer_cfg['card_types'] ?? []; if ($opened == 1 && $tmchid > 0 && $tmchid != $mchid && $lower_time > 0 && $upper_time > $lower_time) { $admin_id = $mch_checker($tmchid); if($admin_id > 0) { $this->mMchid2Infos[$mchid] = ['transfer_mchid' => $tmchid, 'admin_id' => $admin_id, 'lower_time' => $lower_time, 'upper_time' => $upper_time,'card_types' => $card_types]; } } } } } public function need_transfer($mchid,$order_time,$card_type) { if(array_key_exists($mchid,$this->mMchid2Infos)) { $transfer_cfg = $this->mMchid2Infos[$mchid]; $lower_time = $transfer_cfg['lower_time']; $upper_time = $transfer_cfg['upper_time']; $card_types = $transfer_cfg['card_types']; $elpse_secs = time() - $order_time; if ($elpse_secs >= $lower_time && $elpse_secs < $upper_time) { return true; } elseif (in_array($card_type, $card_types)) { return false; } else { return false; } } return false; } public function transfer_info($mchid) { if(array_key_exists($mchid,$this->mMchid2Infos)) { $transfer_cfg = $this->mMchid2Infos[$mchid]; $transfer_mchid = $transfer_cfg['transfer_mchid']; $admin_id = $transfer_cfg['admin_id']; return [$transfer_mchid,$admin_id]; } return [0,0]; } public function transfers() { return $this->mMchid2Infos; } }