123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- <?php
- namespace refill;
- class transfer
- {
- private $mMchid2Infos;
- public function __construct()
- {
- $this->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;
- }
- public function transfer_ids()
- {
- $result = [];
- foreach ($this->mMchid2Infos as $item) {
- $result[] = $item['transfer_mchid'];
- }
- return $result;
- }
- }
|