/** * 从tld判断域名 */ public function checkFromTld($domain) { $tld = (array) \Core\Config::item('tld'); $provinceTld = (array) \Core\Config::item('provinceTld'); $suffix = \common\Common::getDomainAllTld($domain); return in_array($suffix, $tld) || in_array($suffix, $provinceTld) ? array('flag' => 1) : array('flag' => 0); }
/** * 从new_tao表中找出状态为15的交易,请求dc接口解锁域名,解锁成功后,将该记录复制到new_trans_history表,同时从new_tao表删除该记录 * * * */ public function downAction() { $taoModel = new NewTaoModel(); $taoData = $taoModel->getDataByStatus(15); if (!empty($taoData)) { $dLogic = new DomainLogic(); foreach ($taoData as $v) { $data[$v->t_id] = (array) $v; $res = $dLogic->setDomainStatus(\core\Config::item('doPubSta')->toArray()['down'], 1); if ($res !== true) { unset($data[$v->t_id]); echo "解锁new_tao状态为15的域名id{$v->t_id}失败,解锁时间:" . date('Y-m-d H:i:s', $_SERVER['REQUEST_TIME']) . "\n"; } } if (!empty($data)) { $data = array_values($data); $TransLogic = new TransLogic(); //将信息更新到历史表中,并在new_tao中删除 foreach ($data as $v) { $copyRes = $TransLogic->copyToHistory($v, $v['t_status']); $delRes = $TransLogic->delByTid($v['t_id']); if (!$copyRes) { echo "域名id{$v['t_id']}解锁成功,但在插入new_trans_history时发生错误.时间:" . date('Y-m-d H:i:s', $_SERVER['REQUEST_TIME']) . "\n"; } if (!$delRes) { echo "域名id{$v['t_id']}解锁成功,但在从new_tao删除该条记录时发生错误.时间:" . date('Y-m-d H:i:s', $_SERVER['REQUEST_TIME']) . "\n"; } } } } }
/** * 定时处理竞价结束的数据处理 * * */ public function checkAcuctionStatusAction() { // step1 取出已过交易结束时间,类型为竞价的并且有买家id的交易记录 $taoModel = new NewTaoModel(); $taoData = $taoModel->getExpiredByType(\core\Config::item('isInquiry')->toArray()[1], time()); // step2 将step1的记录修改状态为等待买卖双方确认的状态,存到new_trans_result表,并更新用户关注表 $historyModel = new NewTransHistoryModel(); $transLogic = new TransLogic(); if (!empty($taoData)) { foreach ($taoData as $data) { $data = get_object_vars($data); $data['t_status'] = 2; //存表 if ($historyModel->setTransHistory($data)) { //更新用户关注表 if ($transLogic->updateWatchInfo($data['t_id'], $data['t_now_price'], $data['t_nickname'], $endTime = $data['t_end_time'])) { // step3 删除new_tao里面该条交易记录 if ($taoModel->delByTid($data['t_id'])) { echo 'tid 为' . $data['t_id'] . '操作成功'; } else { echo 'tid 为' . $data['t_id'] . '删除net_tao原表数据失败'; } } else { echo 'tid 为' . $data['t_id'] . '更新用户关注表失败'; } } else { echo 'tid 为' . $data['t_id'] . '复制到history 失败'; } } } }
/** * 定时从new_tao表删除指定状态的数据 * 指定状态为:交易成功,等待卖家确认,管理员取消交易 * * * */ public function delFromTaoAction() { $status = \core\Config::item('transStaCode'); $status = array($status->tranSuc, $status->buyHasCon, $status->adminCanceled); $newTaoModel = new NewTaoModel(); $res = $newTaoModel->delDataByStatus($status); echo "删除{$res}条记录" . PHP_EOL; }
/** * 创建数据库实例 * * @return object 当前对象 */ public static function getInstance($dbName = 'ename_trans') { if (isset(self::$instance[$dbName]) && self::$instance[$dbName] !== null) { return self::$instance[$dbName]; } $config = \core\Config::item($dbName); new PdoMysql($config, $dbName); return self::$instance[$dbName]; }
private function __construct($config, $configName = 'default') { $redis = new \Redis(); $redisConfig = \core\Config::item('redis'); $timeOut = isset($redisConfig->timeout) ? intval($redisConfig->timeout) : 3; if ($redis->connect($redisConfig->server, $redisConfig->port, $timeOut)) { $redis->setOption(\Redis::OPT_SERIALIZER, \Redis::SERIALIZER_PHP); self::$conn[$configName] = $redis; } else { throw new \Exception("redis is down"); } }
/** * 构造函数创建SCOKET连接 */ public function __construct() { $this->config = \core\Config::item('goServer'); $this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if (!is_resource($this->socket)) { throw new \Exception('Unable to create socket: ' . socket_strerror(socket_last_error()) . PHP_EOL); return; } if (!socket_set_option($this->socket, SOL_SOCKET, SO_REUSEADDR, 1) || !socket_set_option($this->socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $this->config->timeout, 'usec' => 0)) || !socket_set_option($this->socket, SOL_SOCKET, SO_SNDTIMEO, array('sec' => $this->config->timeout, 'usec' => 0))) { throw new \Exception('Unable to set socket option: ' . socket_strerror(socket_last_error()) . PHP_EOL); return; } if (!socket_connect($this->socket, $this->config->server, $this->config->port)) { throw new \Exception('Unable to connect go server: ' . socket_strerror(socket_last_error()) . PHP_EOL); return; } }
public function deleteDataAction() { $esFile = ROOT_PATH . './app/tasks/es.id'; $startId = @file_get_contents($esFile); $limit = 200; $newTaoModel = new \NewTaoModel(); $list = $newTaoModel->getListForDeleteEs($startId, $limit); $es = \core\Config::item('elasticSearch'); $client = \Elasticsearch\ClientBuilder::create()->setHosts(array($es['server']))->build(); echo 'start:' . time() . "\n"; foreach ($list as $v) { $params = ['index' => $es['index'], 'type' => $es['type'], 'id' => $v->t_id]; $response = $client->delete($params); $startId = $v->t_last_time; } file_put_contents($esFile, $startId); echo 'end:' . time() . "\n"; }
/** * [fixedBuy description] * @param int $uId 买家id * @param bool $isUseNickName 买家是否选择使用昵称 * @param array $transIds 交易id * @param string $buyerIp 买家ip * @return array('accessTrans' => $accessTrans, 'denyTrans' => $denyTrans); */ public function fixedBuy($uId, $transIds, $isUseNickName = false, $buyerIp = '') { try { $goServ = new \core\driver\GoServer(); $config = \core\Config::item('fixedBuy'); // 以下步骤使用goServer并行处理 // // step 调用logic方法,一次判断下面step1,step2,step3返回结果 // step1 获取该交易id的信息,不存在则该交易结束 // step2 判断交易里买家和卖家是否同一个 // step3 判断交易里的当前价格和提交上来的价格是否一致 $accessTrans = $denyTrans = array(); foreach ($transIds as $transId => $curId) { $goServ->call($transId, 'TransLogic::checkTransInfo', array($transId, $uId, $curId)); } $res = $goServ->send(); foreach ($res as $transId => $value) { $rs = $value['TransLogic::checkTransInfo']; if (isset($rs['goError']) || !$rs['flag']) { $denyTrans[$transId] = isset($rs['goError']) ? $config->systemError : $rs['msg']; } else { $accessTrans[$transId] = $rs['msg']; } } if (empty($accessTrans)) { return array('accessTrans' => $accessTrans, 'denyTrans' => $denyTrans); } // step4 创建冻结订单 foreach ($accessTrans as $transId => $info) { $goServ->call($transId, 'TransLogic::freezeMoney', array($info['t_dn'], $uId, $info['t_now_price'])); } $res = $goServ->send(); foreach ($res as $transId => $value) { $rs = $value['TransLogic::freezeMoney']; if (isset($rs['goError']) || !$rs) { $denyTrans[$transId] = isset($rs['goError']) ? $config->systemError : $config->invalidBalance; unset($accessTrans[$transId]); } else { // 冻结成功,记录财务订单id $info['financeId'] = $rs; $accessTrans[$transId] = $info; } } if (empty($accessTrans)) { return array('accessTrans' => $accessTrans, 'denyTrans' => $denyTrans); } // step5 根据交易里的我司和非我司标志更新交易记录状态,我司域名状态直接更新为14,非我司更新为等待卖家确认 // 同时非我司的交易记录要更新买家违约时间和卖家违约时间 // 若step5失败,则发起解冻step4里面的冻结订单 $buyerIp = $buyerIp ?: \common\Client::getIp(); foreach ($accessTrans as $transId => $info) { $buyerNick = $isUseNickName ? \common\common::getNickname($uId, $transId) : false; $goServ->call($transId, 'TransLogic::updateTransInfo', array($transId, $info['t_type'], $info['t_is_our'], $uId, $buyerNick, $buyerIp, $info['financeId'])); $accessTrans[$transId]['buyerNick'] = $buyerNick; } $res = $goServ->send(); foreach ($res as $transId => $value) { $rs = $value['TransLogic::updateTransInfo']; $info = $accessTrans[$transId]; if (isset($rs['goError']) || !$rs) { // 更新信息失败,解冻订单 $goServ->call($transId, 'TransLogic::unfreezeMoney', array($info['t_enameId'], $info['financeId'])); $denyTrans[$transId] = isset($rs['goError']) ? $config->systemError : $config->updateFailed; unset($accessTrans[$transId]); } else { // step6 我司域名 使用go 异步并行处理下面多个流程 // 调用logic里面的asyncDeal处理下面步骤 // 1、调用接口解锁和Push域名 // 2、调用接口确认冻结财务订单 // 3、将该交易记录插入到new_trans_history表 // 4、写入待评价表 // 5、更新其他用户关注表的交易结束时间,买家信息 // 6、发送通知买家邮件和站内信 // 7、根据卖家设置,通知卖家 // // step6: 非我司域名 使用go异步并行处理下面多个流程 // 调用logic里面的asyncDeal处理下面步骤 // 1、发送通知邮件、发送站内信、短信通知卖家 // 4、复制该交易id的记录到new_trans_result表 $goServ->call($transId, 'TransLogic::asyncDeal', array($info)); } } $goServ->asyncSend(); return array('accessTrans' => array_keys($accessTrans), 'denyTrans' => $denyTrans); } catch (\Exception $e) { \core\Logger::write('FixedbuyController.log', array('出现异常', $e->getMessage(), $e->getFile(), $e->getLine())); return false; } }
/** * 根据卖家设置通知卖家,首先要调用dc接口获取卖家设置然后调用通知接口 * *@param $enameid 卖家id */ public function noticeSellerIsOk($enameid, $domain, $price, $transId) { $sms = (new \common\Users())->noticeSellerIsOk($enameid, \core\Config::item('noticeCode')->toArray()[0]); //通知是否有抛异常 return (new \common\Message())->sendBuyNowSeller($enameId, $domain, $price, $transId, $sms); /* * 是否需要记录日志 *if($rs['msg']['result'] !== true) *{ * \core\Logger::write("DOMAIN_LOG", * array(__METHOD__,'域名 ' . $domain . ' 设置状态为 ' . $status . ' 失败,msg信息为:' . $rs['msg']['msg'])); *} */ }
/** * 交易发布 * * @param s $uId * int * @param s $domains * array 包含我司和非我司域名的二维数组,一个域名包含价格和简介以及出售周期 * @param s $cashType * int 提现类型,在控制器检查,2 不可提现 3 可体现 * @param s $type * 发布类型 * @param s $ip * 用户ip */ public function fixedPrice($uId, $domains, $cashType, $type, $ip) { try { $redis = core\driver\Redis::getInstance('default'); $domains = array_merge($domains['domainEname'], $domains['domainNoEname']); $succDomains = $failDomains = $verifyDomains = array(); // step1:检测域名后缀 $res = $this->checkDomainTld(array_keys($domains)); $succDomains = $res[0]; $failDomains = array_merge($failDomains, $res[1], $res[2]); if (empty($succDomains)) { return array('flag' => TRUE, 'msg' => array('succ' => array(), 'fail' => $failDomains)); } if (in_array($type, array(\core\Config::item('transType')->zhuantipaimai, \core\Config::item('transType')->yipaiyimai))) { //专题拍卖和易卖易卖是否需要审核 foreach ($succDomains as $v) { $this->goSer->call($v, 'DomainLogic::checkOtherTrans', array($v, $type)); } $res = $this->goSer->send(); $succDomains = array(); foreach ($res as $k => $v) { $v = $v['DomainLogic::checkOtherTrans']; if (isset($v['goError'])) { $failDomains[$k] = '系统繁忙,请重试'; } else { if ($v === 1) { $succDomains[] = $k; } elseif ($v === 3) { $verifyDomains[$k] = 1; } else { $failDomains[$k] = '不符合专题拍卖条件'; } } } if (empty($succDomains)) { return array('flag' => TRUE, 'msg' => array('succ' => array(), 'fail' => $failDomains)); } if (in_array($type, array(4, 5))) { //专题拍卖和易卖易卖是否需要审核 foreach ($succDomains as $v) { $this->goSer->call($v, 'DomainLogic::checkOtherTrans', array($v, $type)); } $res = $this->goSer->send(); $succDomains = array(); foreach ($res as $k => $v) { $v = $v['DomainLogic::checkOtherTrans']; if (isset($v['goError'])) { $failDomains[$k] = '系统繁忙,请重试'; } else { if ($v === 1) { $succDomains[] = $k; } elseif ($v === 3) { $verifyDomains[$k] = 1; } else { $failDomains[$k] = '不符合专题拍卖条件'; } } } if (empty($succDomains)) { return array('flag' => TRUE, 'msg' => array('succ' => array(), 'fail' => $failDomains)); } //专题是否存在 foreach ($succDomains as $v) { $this->goSer->call($v, 'DomainLogic::checkTopId', array($domains[$v]['topic'])); } $res = $this->goSer->send(); $succDomains = array(); foreach ($res as $k => $v) { $v = $v['DomainLogic::checkTopId']; if (isset($v['goError'])) { $failDomains[$k] = '系统繁忙,请重试'; } else { if ($v === true) { $succDomains[] = $k; } else { $failDomains[$k] = '专题不存在'; } } } if (empty($succDomains)) { return array('flag' => TRUE, 'msg' => array('succ' => array(), 'fail' => $failDomains)); } } } // step2:检测域名简介是否包含关键词 // 检测出售天数,价格 // 使用go并行处理 foreach ($succDomains as $v) { $this->goSer->call($v, 'DomainLogic::checkBaseInfo', array($domains[$v], $type)); } $res = $this->goSer->send(); $succDomains = array(); foreach ($res as $k => $v) { $v = $v['DomainLogic::checkBaseInfo']; if (isset($v['goError'])) { $failDomains[$k] = '系统繁忙,请重试'; } else { if ($v['flag'] === true) { $succDomains[] = $k; } else { $failDomains[$k] = $v['msg']; } } } if (empty($succDomains)) { return array('flag' => TRUE, 'msg' => array('succ' => array(), 'fail' => $failDomains)); } // step3:存在我司域名调用判断我司域名是否可发布 // 非我司域名判断是否$domains里面有非我司域名,有的话从redis中取出 // 上一步缓存的已经认证过的域名,排除$domains里面非我司域名那个数组 // 里面不在缓存中得域名 // 通过go并行调用返回数据 foreach ($succDomains as $v) { $this->goSer->call($v, 'DomainLogic::checkMyDomain', array($uId, $v)); } $res = $this->goSer->send(); $enameDomains = $notInEnameDomains = array(); foreach ($res as $k => $v) { $v = $v['DomainLogic::checkMyDomain']; if (isset($v['goError'])) { $failDomains[$k] = '系统繁忙,请重试'; } else { $inEname = $v['flag']; if ($inEname == 1) { $enameDomains[$k] = $v['msg']; $domains[$k]['expireTime'] = strtotime($v['msg']['expireTime']); $domains[$k]['isOur'] = 1; } elseif ($inEname == 2) { $whois = $redis->get('whois:' . $uId . $k); if ($whois) { $notInEnameDomains[] = $k; $domains[$k]['expireTime'] = strtotime($whois); $domains[$k]['isOur'] = 2; } else { $failDomains[$k] = '非我司域名认证失败'; } } else { $failDomains[$k] = $v['msg']; } if (isset($domains[$k]['expireTime'])) { $minute = rand(0, 59); $domains[$k]['endTime'] = strtotime(date('Y-m-d', time() + 86400 * $domains[$k]['day']) . ' ' . $domains[$k]['hour'] . ':' . $minute . ':00'); if ($domains[$k]['endTime'] > $domains[$k]['expireTime']) { $domains[$k]['endTime'] = $domains[$k]['expireTime']; $domains[$k]['endTimeChange'] = true; } } } } if (empty($enameDomains) && empty($notInEnameDomains)) { return array('flag' => TRUE, 'msg' => array('succ' => array(), 'fail' => $failDomains)); } // 我司域名检测 状态 注册时间和 过期时间 $succComDomains = array(); if (!empty($enameDomains)) { $res = $this->comCheck($uId, $enameDomains, $type); $succComDomains = $res[0]; $failDomains = array_merge($failDomains, $res[1]); } // 非我我司域名检测 tld 和 是否在黑名单 $succNonComDomains = array(); if (!empty($notInEnameDomains)) { $res = $this->nonComCheck($uId, $notInEnameDomains); $succNonComDomains = $res[0]; $failDomains = array_merge($failDomains, $res[1]); } if (empty($succComDomains) && empty($succNonComDomains)) { return array('flag' => TRUE, 'msg' => array('succ' => array(), 'fail' => $failDomains)); } // step4:域名检测是否在交易中 $succComTranDomains = array(); if (!empty($succComDomains)) { $res = $this->isDomainTrans($succComDomains, $type); $succComTranDomains = $res[0]; $failDomains = array_merge($failDomains, $res[1]); } $succNonComTranDomains = array(); if (!empty($succNonComDomains)) { $res = $this->isDomainTrans($succNonComDomains, $type); $succNonComTranDomains = $res[0]; $failDomains = array_merge($failDomains, $res[1]); } if (empty($succComTranDomains) && empty($succNonComTranDomains)) { return array('flag' => TRUE, 'msg' => array('succ' => array(), 'fail' => $failDomains)); } $succLockDomains = array(); $succFreezeDomains = array(); // step6:对于可发布的我司域名和非我司域名 // 处理我司域名锁定 if (!empty($succComTranDomains)) { foreach ($succComTranDomains as $k => $v) { $this->goSer->call($k, 'DomainLogic::lockDomain', array($k)); } $res = $this->goSer->send(); foreach ($res as $k => $v) { $v = $v['DomainLogic::lockDomain']; if (isset($v['goError'])) { $failDomains[$k] = '系统繁忙,请重试'; } else { $domains[$k]['orderId'] = 0; if ($v) { $succLockDomains[$k] = 1; } else { $failDomains[$k] = '域名锁定失败'; } } } } //非我司域名冻结保证金 if (!empty($succNonComTranDomains)) { foreach ($succNonComTranDomains as $k => $v) { $this->goSer->call($k, 'DomainLogic::freezeMoney', array($uId, $k, \core\Config::item('baozhengjin')->fabu)); } $res = $this->goSer->send(); foreach ($res as $k => $v) { $v = $v['DomainLogic::freezeMoney']; if (isset($v['goError'])) { $failDomains[$k] = '系统繁忙,请重试'; } else { if ($v) { $domains[$k]['orderId'] = $v; $succFreezeDomains[$k] = 1; } else { $failDomains[$k] = '保证金冻结失败'; } } } } // step5:从step3和step4里面合并获取可发布的我司域名和非我司域名 // 调用go去并行处理我司和非我司的可发布情况返回来 $succDomains = array_merge($succFreezeDomains, $succLockDomains); if (empty($succDomains)) { return array('flag' => TRUE, 'msg' => array('succ' => array(), 'fail' => $failDomains)); } // 从redis里面获取域名是否推荐数据进行标识 // 同时将推荐域名推到redis中做bbs推荐 // 调用go并发处理 foreach ($succDomains as $k => $v) { $promote = $redis->exists('promote:' . $uId . $k); if ($promote) { $domains[$k]['isHot'] = 1; $bbs = $redis->lRange('bbs:domain', 0, -1); if (!in_array($uId, $bbs)) { $redis->lPush('bbs:domain', $uId); } } else { $domains[$k]['isHot'] = 0; } } // step7:将域名写入交易表 // 调用go并行处理 foreach ($succDomains as $k => $v) { $this->goSer->call($k, 'DomainLogic::publicDomain', array($uId, $k, $domains[$k]['description'], $domains[$k]['expireTime'], $type, $domains[$k]['price'], $domains[$k]['endTime'], $cashType, $domains[$k]['isOur'], $domains[$k]['isHot'], $ip, $domains[$k]['orderId'])); } $res = $this->goSer->send(); $succInsertDomains = array(); foreach ($res as $k => $v) { $v = $v['DomainLogic::publicDomain']; if (isset($v['goError'])) { $failDomains[$k] = '系统繁忙,请重试'; } else { if ($v) { $succInsertDomains[$k] = isset($domains[$k]['endTimeChange']) ? $domains[$k]['endTime'] : 0; } else { $failDomains[$k] = '写入交易表失败'; } } } $msg = array('succ' => $succInsertDomains, 'fail' => $failDomains); //加入审核表 $succVerifyDomains = array(); if ($verifyDomains) { foreach ($verifyDomains as $k => $v) { $this->goSer->call($k, 'DomainLogic::publicToCheck', array($uId, $k, $domains[$k]['description'], $domains[$k]['expireTime'], $type, $domains[$k]['price'], $domains[$k]['endTime'], $cashType, $domains[$k]['isOur'], $domains[$k]['isHot'], $ip, $domains[$k]['topic'], $domains[$k]['orderId'])); } $res = $this->goSer->send(); foreach ($res as $k => $v) { $v = $v['DomainLogic::publicToCheck']; if (isset($v['goError'])) { $failDomains[$k] = '系统繁忙,请重试'; } else { if ($v) { $succVerifyDomains[$k] = isset($domains[$k]['endTimeChange']) ? $domains[$k]['endTime'] : 0; } else { $failDomains[$k] = '写入审核表失败'; } } } } $msg = array('succ' => $succInsertDomains, 'fail' => $failDomains, 'verify' => $succVerifyDomains); return array('flag' => TRUE, 'msg' => $msg); } catch (\Exception $e) { \core\Logger::write('FABU', array('出现异常', $e->getMessage(), $e->getFile(), $e->getLine())); return array('flag' => FALSE, 'msg' => $e->getMessage()); } }
/** * 淘域名查询数据 如果前台用户没有提交这个参数,全部传0 或者 false * * @param array $dn array(1域名|2简介OR域名,搜索的内容,开头,结尾) * @param int $type 交易类型 1:一口价 2:竞价 3:竞价(预订竞价) 4:竞价(专题拍卖) 5:竞价(易拍易卖) * 6:一口价(sedo) 8:拍卖会 * @param array $page array(开始页,每页多少条) * @param int $sort 排序参数 1:剩余时间 2:当前价格 3:出价次数 * @param int $registrar 注册商 1:我司 2:非我司 * @param array $price array(开始价格,结束价格) * @param array $bidding array(竞价是否有人出价,竞价1元起拍) * @param array $exclude 必须是2维数组 array(array(内容,开头,结尾),array(内容,开头,结尾)) * @param array $class 分类 array(二级分类,三级分类) * @param array $tld array(后缀1,后缀2) * @param array $endTime array(起始时间,结束时间) 起始时间可以是0 直接传结束时间的unix_time * @param array $len array(开始长度,结束长度) * @return false:查询失败 || array('total','data') total:文档数量,data:二维数组 */ public function index($data) { $dn = $type = $page = $sort = $registrar = $price = $bidding = $exclude = $class = $tld = $endTime = $len = null; extract($data); $es = \core\Config::item('elasticSearch'); $client = \Elasticsearch\ClientBuilder::create()->setHosts(array($es['server']))->build(); $must = $notMust = $should = array(); $from = 0; $size = 10; $dn1 = isset($dn[1]) ? $dn[1] : false; if (is_array($dn) && $dn1) { $dn2 = isset($dn[2]) ? $dn[2] : false; $dn3 = isset($dn[3]) ? $dn[3] : false; if ($dn[1] && $dn[2]) { // 只搜索域名 $should[] = array("query_string" => array("query" => "t_body:{$dn[1]}*{$dn[1]}")); } elseif ($dn[1]) { $should[] = array("query_string" => array("query" => "t_body:{$dn[1]}*")); } elseif ($dn[2]) { $should[] = array("query_string" => array("query" => "t_body:*{$dn[1]}")); } else { $should[] = array("query_string" => array("query" => "t_body:*{$dn[1]}*")); } if (1 == $dn[0]) { if ($dn[2] && $dn[3]) { // 搜索域名OR简介 $should[] = array("query_string" => array("query" => "t_desc:{$dn[1]}*{$dn[1]}")); } elseif ($dn[2]) { $should[] = array("query_string" => array("query" => "t_desc:{$dn[1]}*")); } elseif ($dn[3]) { $should[] = array("query_string" => array("query" => "t_desc:*{$dn[1]}")); } else { $should[] = array("query_string" => array("query" => "t_desc:*{$dn[1]}*")); } } } if ($type) { if (2 == $type) { $must[] = array("terms" => array("t_type" => array(2, 3, 4, 5, 8))); //竞价 } else { $must[] = array("term" => array("t_type" => $type)); } } if ($registrar) { $must[] = array("term" => array("t_is_our" => $registrar)); } if (is_array($price) && ($price[0] || $price[1])) { $range = array(); intval($price[0]) > 0 ? $range['gte'] = intval($price[0]) : ''; intval($price[1]) > 0 ? $range['lte'] = intval($price[1]) : ''; $must[] = array("range" => array("t_now_price" => $range)); } if (is_array($bidding) && 2 == $type && ($bidding[0] || $bidding[1])) { if ($bidding[0]) { $must[] = array("range" => array("t_buyer" => array("gt" => 0))); } if ($bidding[1]) { $must[] = array("term" => array("t_start_price" => 1)); } } if (is_array($exclude)) { foreach ($exclude as $v) { list($c, $s, $e) = $v; if ($c) { if ($s) { $notMust[] = array('query_string' => array("query" => "t_body:{$c}*")); } if ($e) { $notMust[] = array('query_string' => array("query" => "t_body:*{$c}")); } if (!$s && !$e) { $notMust[] = array('query_string' => array("query" => "t_body:*{$c}*")); } } } } if (is_array($class) && (isset($class[0]) || isset($class[1]))) { if (isset($class[0]) && $class[0]) { if (10 == $class[0]) { $must[] = array("terms" => array("t_two_class" => array(10, 12))); } elseif (2 == $class[0]) { $must[] = array("terms" => array("t_two_class" => array(2, 12))); } $must[] = array('term' => array('t_two_class' => $class[0])); } if (isset($class[1]) && $class[1]) { $must[] = array('term' => array('t_three_class' => $class[1])); } } if (is_array($tld)) { foreach ($tld as $v) { $should[] = array("term" => array("t_tld" => $v)); } } if (is_array($endTime)) { $endMust = array("range" => array("t_end_time" => array("lte" => $endTime[1]))); if ($endTime[0]) { $endMust['range']['t_end_time'] = array('gte' => $endTime[0]); } $must[] = $endMust; } if (is_array($len)) { $lenGte = isset($len[0]) && intval($len[0]) > 0 ? intval($len[0]) : 1; $lenRange = array("range" => array("t_len" => array("gte" => $lenGte))); if (intval($len[1])) { $lenRange['range']['t_len']['lte'] = $len[1]; } $must[] = $lenRange; } if (is_array($page)) { $from = intval($page[0]); $size = intval($page[1]); } $arrayData = array("from" => $from, "size" => $size, "query" => array("filtered" => array("filter" => array("bool" => array("must" => $must, "must_not" => $notMust, "should" => $should))))); if (3 == $sort) { $arrayData['sort'] = array('t_count' => 'desc'); } elseif (2 == $sort) { $arrayData['sort'] = array('t_now_price' => 'asc'); } else { $arrayData['sort'] = array('t_end_time' => 'asc'); } $params = ['index' => $es['index'], 'type' => $es['type'], 'body' => json_encode($arrayData)]; $result = $client->search($params); if (isset($result['hits'])) { $total = isset($result['hits']['total']) ? $result['hits']['total'] : false; if (false === $total) { return false; } else { return array('total' => $total, 'data' => $result['hits']['hits']); } } return array('total' => 0, 'data' => array()); }
/** * 获取域名后缀类型 * @param string $domain */ public static function getTldType($domain) { $tld = self::getDomainAllTld($domain); return in_array($tld, (array) \Core\Config::item('provinceTld')) ? 6 : array_search($tld, (array) \Core\Config::item('tld')); }
public function getDomainLowestPrice($domain, $price) { //(class,two,three,长度,域名主体) list($class, $two, $three, $domainLen, $domainMain) = \common\domain\Domain::getDomainClass($domain); // 获取一口价最低价提示配置 $buynowLowest = \core\Config::item('buynow_lowest')->toArray(); // 获取域名主体$domainMain 以及 域名后缀 $domainTld $domainTld = \common\Common::getDomainAllTld($domain); // 获取域名所属类型 $domainType = $this->getDomainType($class, $domainMain, $domainTld, $domainLen); if (!$domainType) { return false; } // 获取返回该域名最低价。未匹配到返回false if (isset($buynowLowest[$domainTld][$domainLen][$domainType])) { $price = $buynowLowest[$domainTld][$domainLen][$domainType]; return $price * 10000; } return false; }
<?php use Phalcon\DI, Phalcon\DI\FactoryDefault; ini_set('display_errors', 1); error_reporting(E_ALL); define('TEST_ROOT_PATH', __DIR__); define('ROOT_PATH', dirname(__DIR__)); define('LIBRARY_PATH', ROOT_PATH . '/app/library/'); define('MODELS_PATH', ROOT_PATH . '/app/models/'); define('LOGIC_PATH', ROOT_PATH . '/app/logic/'); define('DEBUG', TRUE); set_include_path(TEST_ROOT_PATH . PATH_SEPARATOR . get_include_path()); // required for phalcon/incubator // include __DIR__ . "/vendor/autoload.php"; // use the application autoloader to autoload the classes // autoload the dependencies found in composer $loader = new \Phalcon\Loader(); $loader->registerDirs(array(TEST_ROOT_PATH, MODELS_PATH, LIBRARY_PATH, LOGIC_PATH)); $loader->registerNamespaces(array('Phalcon' => TEST_ROOT_PATH . '/incubator-1.2.4/Library/Phalcon')); $loader->register(); $di = new FactoryDefault(); DI::reset(); // 配置初始化 \core\Config::init(DEBUG); //\core\Config::setConfig(TEST_ROOT_PATH.'/debug.ini'); // add any needed services to the DI here DI::setDefault($di); $db = \core\Config::item('master_trans');