123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- <?php
- /**
- * 任务计划 - 小时执行的任务
- *
- *
- *
- *
- */
- defined('InShopNC') or exit('Access Invalid!');
- require_once (BASE_ROOT_PATH . '/helper/third_author/wxauthor.php');
- require_once (BASE_ROOT_PATH . '/helper/third_author/signaturer.php');
- class hourControl extends BaseCronControl
- {
- /**
- * 执行频率常量 1小时
- * @var int
- */
- const EXE_TIMES = 3600;
- private $_doc;
- private $_xs;
- private $_index;
- private $_search;
- /**
- * 默认方法
- */
- public function indexOp()
- {
- $this->repush_oms();
- $this->release_bonus();
- $this->expired_bonus();
- }
- public function half_hourOp()
- {
- $this->jsapi_ticket();
- }
- public function jsapi_ticket()
- {
- thrid_author\signaturer::instance()->request();
- }
- public function init_ticketOp()
- {
- thrid_author\signaturer::instance()->request();
- }
- /**
- * 初始化对象
- */
- private function _ini_xs(){
- require(BASE_DATA_PATH.'/api/xs/lib/XS.php');
- $this->_doc = new XSDocument();
- $this->_xs = new XS(C('fullindexer.appname'));
- $this->_index = $this->_xs->index;
- $this->_search = $this->_xs->search;
- $this->_search->setCharset(CHARSET);
- }
- /**
- * 全量创建索引
- */
- public function xs_createOp() {
- if (!C('fullindexer.open')) return;
- $this->_ini_xs();
- try {
- //每次批量更新商品数
- $step_num = 200;
- $model_goods = Model('goods');
- $count = $model_goods->getGoodsOnlineCount(array(),"distinct CONCAT(goods_commonid,',',color_id)");
- echo 'Total:'.$count."\n";
- $fields = "*,CONCAT(goods_commonid,',',color_id) as nc_distinct";
- for ($i = 0; $i <= $count; $i = $i + $step_num){
- $goods_list = $model_goods->getGoodsOnlineList(array(), $fields, 0, '', "{$i},{$step_num}", 'nc_distinct');
- $this->_build_goods($goods_list);
- echo $i." ok\n";
- flush();
- ob_flush();
- }
- if ($count > 0) {
- sleep(2);
- $this->_index->flushIndex();
- sleep(2);
- $this->_index->flushLogging();
- }
- } catch (XSException $e) {
- $this->log($e->getMessage());
- }
- }
- /**
- * 更新增量索引
- */
- public function _xs_update() {
- if (!C('fullindexer.open')) return;
- $this->_ini_xs();
- try {
- //更新多长时间内的新增(编辑)商品信息,该时间一般与定时任务触发间隔时间一致,单位是秒,默认3600
- $step_time = self::EXE_TIMES + 60;
- //每次批量更新商品数
- $step_num = 100;
-
- $model_goods = Model('goods');
- $condition = array();
- $condition['goods_edittime'] = array('egt',time()-$step_time);
- $count = $model_goods->getGoodsOnlineCount($condition,"distinct CONCAT(goods_commonid,',',color_id)");
- $fields = "*,CONCAT(goods_commonid,',',color_id) as nc_distinct";
- for ($i = 0; $i <= $count; $i = $i + $step_num){
- $goods_list = $model_goods->getGoodsOnlineList($condition, $fields, 0, '', "{$i},{$step_num}", 'nc_distinct');
- $this->_build_goods($goods_list);
- }
- if ($count > 0) {
- sleep(2);
- $this->_index->flushIndex();
- sleep(2);
- $this->_index->flushLogging();
- }
- } catch (XSException $e) {
- $this->log($e->getMessage());
- }
- }
- /**
- * 索引商品数据
- * @param array $goods_list
- */
- private function _build_goods($goods_list = array()) {
- if (empty($goods_list) || !is_array($goods_list)) return;
- $goods_class = Model('goods_class')->getGoodsClassForCacheModel();
- $goods_commonid_array = array();
- $goods_id_array = array();
- $store_id_array = array();
- foreach ($goods_list as $k => $v) {
- $goods_commonid_array[] = $v['goods_commonid'];
- $goods_id_array[] = $v['goods_id'];
- $store_id_array[] = $v['store_id'];
- }
- //取common表内容
- $model_goods = Model('goods');
- $condition_common = array();
- $condition_common['goods_commonid'] = array('in',$goods_commonid_array);
- $goods_common_list = $model_goods->getGoodsCommonOnlineList($condition_common,'*',0);
- $goods_common_new_list = array();
- foreach($goods_common_list as $k => $v) {
- $goods_common_new_list[$v['goods_commonid']] = $v;
- }
- //取属性表值
- $model_type = Model('type');
- $attr_list = $model_type->getGoodsAttrIndexList(array('goods_id'=>array('in',$goods_id_array)),0,'goods_id,attr_value_id');
- if (is_array($attr_list) && !empty($attr_list)) {
- $attr_value_list = array();
- foreach ($attr_list as $val) {
- $attr_value_list[$val['goods_id']][] = $val['attr_value_id'];
- }
- }
- //整理需要索引的数据
- foreach ($goods_list as $k => $v) {
- $gc_id = $v['gc_id'];
- $depth = $goods_class[$gc_id]['depth'];
- if ($depth == 3) {
- $cate_3 = $gc_id; $gc_id = $goods_class[$gc_id]['gc_parent_id']; $depth--;
- }
- if ($depth == 2) {
- $cate_2 = $gc_id; $gc_id = $goods_class[$gc_id]['gc_parent_id']; $depth--;
- }
- if ($depth == 1) {
- $cate_1 = $gc_id; $gc_id = $goods_class[$gc_id]['gc_parent_id'];
- }
- $index_data = array();
- $index_data['pk'] = $v['goods_id'];
- $index_data['goods_id'] = $v['goods_id'];
- $index_data['goods_name'] = $v['goods_name'].$v['goods_jingle'];
- $index_data['brand_id'] = $v['brand_id'];
- $index_data['goods_price'] = $v['goods_promotion_price'];
- $index_data['goods_click'] = $v['goods_click'];
- $index_data['goods_salenum'] = $v['goods_salenum'];
- // 判断店铺是否为自营店铺
- $index_data['store_id'] = $v['is_own_shop'];
- $index_data['area_id'] = $v['areaid_1'];
- $index_data['gc_id'] = $v['gc_id'];
- $index_data['gc_name'] = str_replace('>','',$goods_common_new_list[$v['goods_commonid']]['gc_name']);
- $index_data['brand_name'] = $goods_common_new_list[$v['goods_commonid']]['brand_name'];
- $index_data['have_gift'] = $v['have_gift'];
- if (!empty($attr_value_list[$v['goods_id']])) {
- $index_data['attr_id'] = implode('_',$attr_value_list[$v['goods_id']]);
- }
- if (!empty($cate_1)) {
- $index_data['cate_1'] = $cate_1;
- }
- if (!empty($cate_2)) {
- $index_data['cate_2'] = $cate_2;
- }
- if (!empty($cate_3)) {
- $index_data['cate_3'] = $cate_3;
- }
- //添加到索引库
- $this->_doc->setFields($index_data);
- $this->_index->update($this->_doc);
- }
- }
- public function xs_clearOp(){
- if (!C('fullindexer.open')) return;
- $this->_ini_xs();
- try {
- $this->_index->clean();
- } catch (XSException $e) {
- $this->log($e->getMessage());
- }
- }
- public function xs_flushLoggingOp(){
- if (!C('fullindexer.open')) return;
- $this->_ini_xs();
- try {
- $this->_index->flushLogging();
- } catch (XSException $e) {
- $this->log($e->getMessage());
- }
- }
- public function xs_flushIndexOp(){
- if (!C('fullindexer.open')) return;
- $this->_ini_xs();
-
- try {
- $this->_index->flushIndex();
- } catch (XSException $e) {
- $this->log($e->getMessage());
- }
- }
- /**
- * 重新推送失败订单
- */
- private function repush_oms()
- {
- $order_data = Model('omsfail')->field('*')->where(array('order_status' => 0))->limit(false)->select();
- foreach ($order_data as $value)
- {
- $fail_id = $value['fail_id'];
- $logic_delivery = Logic('delivery');
- $ret = $logic_delivery->putOrder($value['pay_sn'], $value['pay_sn'],false);
- if ($ret) {
- Model('omsfail')->where(array('fail_id' => $fail_id))->update(array('order_status' => 1));
- }
- }
- }
- /**
- * 定时释放红包
- */
- private function release_bonus()
- {
- notify_helper::release_bonus();
- }
-
- /**
- * 定时清理已领取但未使用的红包
- */
- private function expired_bonus()
- {
- $maxtm = time();
- while (true) {
- $ret = notify_helper::bonus_expired($maxtm);
- if($ret == false) break;
- }
- }
- }
|