123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341 |
- <?php
- /**
- * 异步任务脚本
- * @author leeon <leeon_on@qq.com>
- */
- require_once(APP_PATH."/protected/vendor/autoload.php");
- use Qiniu\Auth;
- use Qiniu\Storage\BucketManager;
- class AsyncWorkCommand extends CConsoleCommand{
- public function run($args) {
- error_reporting(E_ALL);
- ini_set('memory_limit', '512M');
- ignore_user_abort(true);
- set_time_limit(0);
- $time_H = time();
- while (true) {
- sleep(3);
- $time = time();
- if($time - $time_H > 3600){
- exit();
- }
- //用户注册后异步任务
- $list = new ARedisList('after_user_reg');
- $auth = new Auth(Yii::app()->params['qiniuConfig']['ak'],Yii::app()->params['qiniuConfig']['sk']);
- $bmgr = new BucketManager($auth);
- while ($list->getCount() > 0) {
- $user_id = $list->pop();
- try {
- $userAr = RUser::get(new MongoId($user_id));
- //用户注册后默认关注几个圈子
- $z_group = new ZGroup();
- $default_groups = $z_group->get_default_fllow_group();
- $mongo = new MongoClient(DB_CONNETC);
- $db = $mongo->wozhua_data;
- $collection = $db->selectCollection('groups');
- $conditions = array(
- '_id' => array('$in' => $default_groups)
- );
- $collection->update(
- $conditions,
- array('$inc' => array("users_count" => 1)),
- array("multiple" => true)
- );
- //注册后默认关注几个用户
- $default_fllow_users = Yii::app()->params['default_fllow_users'];
- $user_node = new UserNodeRecord($userAr->_id);
- foreach ($default_fllow_users as $fuser_id) {
- $user_node->follow($fuser_id);
- }
-
- //抓取头像到七牛
- $url = $userAr->avatar;
- if(strpos($url,'qiniu')===false){
- $bucket = Yii::app()->params['qiniuConfig']['avatars'];
- $key = dechex(time()).rand(10,99).'.jpg';
- list($ret, $err) = $bmgr->fetch($url, $bucket, $key);
- echo "=====> fetch $url to bucket: $bucket key: $key\n";
- if ($err !== null) {
- file_put_contents(APP_PATH.'/download/log/after_user_reg.log',var_export($err,true),FILE_APPEND);
- } else {
- if(YII_DEBUG == true){
- $userAr->avatar = 'http://wozhua-test.qiniudn.com/'.$key;
- }else{
- $userAr->avatar = 'http://avatars.wozhua.mobi/'.$key;
- }
- }
- }
- $userAr->update(array('avatar'),true);
- //发送私信推送
- $model = new ZMessage();
- $from_user = Yii::app()->params['sys_user'];
- $message_data = array(
- 'from_user' => $from_user,
- 'to_user' => $user_id,
- 'content' => '感谢您注册壹管家,这里是新人必看的<a href="http://www.wozhua.mobi/topic/556551ec0eb9fb131f8b60c1">壹管家操作指南</a>,同时一定要遵守<a href="http://www.wozhua.mobi/topic/564d9fdea84ea080498cedaa">壹管家社区总规则</a>哦~',
- 'pics' => array(),
- 'voice' => array(),
- 'video'=> array()
- );
- $result = $model->addMessage($message_data);
- } catch (Exception $e) {
- var_dump($e);
- continue;
- }
-
- }
- //七牛语音转码消息队列
- $list = new ARedisList(Yii::app()->params['voice_conv_list']);
- $qiniu_config = Yii::app()->params['qiniuConfig'];
- $bucket = $qiniu_config['voice'];
- while ($list->getCount() > 0) {
- $key = $list->pop();
- try {
- $status = CommonFn::ConvVoice($bucket,$key);
- } catch (Exception $e) {
- continue;
- }
- }
- //打标签异步任务
- $list = new ARedisList('add_tag');
- while ($list->getCount() > 0) {
- $res = $list->pop();
- if(ENVIRONMENT != 'product'){
- continue;
- }
- $data = unserialize($res);
- try {
- $getui = Service::factory('PushService');
- $cids = $getui->queryCID($data['user_id']);
- if($cids){
- $tags = [];
- foreach ($cids as $cid){
- $res = $getui->getCidTags($cid);
- $new_tags = explode(' ',$res);
- $new_tags[] = $data['tag'];
- $res = $getui->setTag($cid,$new_tags);
- var_dump($res);
- }
- }
- } catch (Exception $e) {
- continue;
- }
- }
- //订单支付成功后异步任务
- $list = new ARedisList('o2o_after_pay_success');
- while ($list->getCount() > 0) {
- $res = $list->pop();
- $input_data = json_decode($res,true);
- try {
- $order = ROrder::get(new MongoId($input_data['order_no']));
- $criteria = new EMongoCriteria();
- $criteria->user('==',$order->user);
- $criteria->status('notin',array(0,-1,-2));
- $order_count = ROrder::model()->count($criteria);
- if($order_count == 1){
- $criteria = new EMongoCriteria();
- $criteria->channel('==','20150814');
- $criteria->user('==',$order->user);
- $coupon_status = CouponCode::model()->count($criteria);
- if($coupon_status){
- $criteria = new EMongoCriteria();
- $criteria->date('==',(int)date('Ymd'));
- $offCountModel = OfflineOrderCount::model()->find($criteria);
- if(!$offCountModel){
- $offCountModel = new OfflineOrderCount();
- $offCountModel->date = intval(date('Ymd'));
- $offCountModel->count = 1;
- $offCountModel->save();
- }else{
- $offCountModel->count += 1;
- $offCountModel->update(array('count'),true);
- }
- }
- }
- $key = $input_data['id'].'_send_sms';
- $cache = new ARedisCache();
- $have_send = $cache->get($key);
- if(!$have_send){
- $order_info = $order->parseRow($order);
- $month = date('m');
- $day = date('d');
- $address = $order_info['address']['poi']['name'].$order_info['address']['detail'];
-
- if(date('w') == 0 || date('w') == 6){
- $info = '我们将在工作时间为您安排';
- }else{
- $info = '我们正在为您安排';
- }
- $master = '保洁师';//训犬师
- CommonSMS::send('order_pay_success',array('month'=>$month,'day'=>$day,'address'=>$address,'info'=>$info,'master'=>$master,'mobile'=>$order_info['address']['mobile']));
- $cache->set($key,1,86400);
- }
- //计算订单完成时间
- if($order->technician){
- $cost_time = Service::factory('OrderTimeCalService')->evaluaTime($order->products);
- $cost_hours = ceil($cost_time/60);
- $time_stamp = $order->booking_time;
- FreeTimeRecord::TechUnsetFreetime($order->technician,$time_stamp - 3600);
- for ($i=0; $i < $cost_hours; $i++) {
- $unset_time_stamp = $time_stamp + $i*3600;
- FreeTimeRecord::TechUnsetFreetime($order->technician,$unset_time_stamp);
- }
- FreeTimeRecord::TechUnsetFreetime($order->technician,$unset_time_stamp + 3600);
- }
- // 通知被选择的保洁师
- if ($order->technician) {
- $tech = TechInfo::get(intval($order->technician));
- if ($tech->weixin_userid) {
- $wechat = O2oApp::getWechatActive();
- $url_prefix = ENVIRONMENT == 'product' ? 'http://api.wozhua.mobi' : 'http://apitest.wozhua.mobi';
- $wechat_data = [
- 'touser' => $tech->weixin_userid,
- 'msgtype' => 'news',
- 'agentid' => '24',
- 'news' => [
- 'articles' => [
- [
- 'title' => '壹管家提示-新订单',
- 'description' => $tech->name.'你好!刚刚有一个新的订单被分配给你,请点击查看。',
- 'url' => $url_prefix.'/index.php?r=o2o/myOrder/info&order='.(string)$order->_id.'&user='.$tech->_id,
- ],
- ],
- ],
- ];
- $wechat->sendMessage($wechat_data);
- }
- }
-
- foreach ($order->products as $product) {
- $product_obj = Product::get($product['product']);
- if($product_obj){
- switch ($product_obj->type) {
- case '1':
- $start_time = time();
- $end_time = strtotime(date('Y-m-d',$start_time+2592000));
- $coupon_id = new MongoId('556671c20eb9fb2e488be078');
- Service::factory('CouponService')->giveCoupon($order->user,$coupon_id,$start_time,$end_time);
- break;
- case '2':
- $start_time = time();
- $end_time = strtotime(date('Y-m-d',$start_time+2592000));
- $coupon_id = new MongoId('55667f6c0eb9fb14518b6e0a');
- Service::factory('CouponService')->giveCoupon($order->user,$coupon_id,$start_time,$end_time);
- break;
- case '3':
- $start_time = time();
- $end_time = strtotime(date('Y-m-d',$start_time+2592000));
- $coupon_id = new MongoId('55667f4a0eb9fb39518b6c06');
- Service::factory('CouponService')->giveCoupon($order->user,$coupon_id,$start_time,$end_time);
- break;
- }
- }
- }
- } catch (Exception $e) {
- continue;
- }
- }
-
- //删帖后异步任务
- $list = new ARedisList('topic_del_new_list');
- $from_user = Yii::app()->params['sys_user'];
- $z_message = new ZMessage();
- $z_topic = new ZTopic();
- while ($list->getCount() > 0) {
- $res = $list->pop();
- try {
- $data = unserialize($res);
- $topic = Topic::get(new MongoId($data['id']));
- if($topic){
- Service::factory('ScoreService')->cutDownScore((string)$topic->user,'score_deltopic',2);
- $z_topic->syncData($topic->_id,'del');
- if($data['reason']){
- $content = '你的帖子 『'.mb_substr($topic->content,0,20,'utf-8').'』 被管理员删除了。'.$data['reason'];
- $data = array(
- 'from_user' => $from_user,
- 'to_user' => (string)$topic->user,
- 'content' => $content,
- 'pics' => array(),
- 'voice' => array(),
- 'video'=> array()
- );
- $z_message->addMessage($data);
- }
- }
- } catch (Exception $e) {
- continue;
- }
- }
- //点喜欢后异步任务
- $list = new ARedisList('after_like_work');
- while ($list->getCount() > 0) {
- $key = $list->pop();
- try {
- $likeAr = Like::get(new MongoId($key));
- if($likeAr && $likeAr->type == 'topic'){
- // $parsed_like = $likeAr->parseRow($likeAr);
- // $getui = Service::factory('PushService');
- // $gt_content = [
- // 'title' => $parsed_like['user']['user_name'],
- // 'content' => '喜欢了你的帖子',
- // 'type' => 'like',
- // 'data' => $parsed_like
- // ];
- // $getui->pushMessageToSingle($getui->TransmissionTemplate(['transmissionType'=> 2,'alert' => $parsed_like['user']['user_name'].'喜欢了你的帖子','transmissionContent'=>$gt_content]),$parsed_like['like_obj']['user']['id']);
- $like_obj = Topic::get($likeAr->like_obj);
- $author = RUser::get($like_obj->user);
- $z_like = new ZLike();
- $z_like->addAction($likeAr);
- //帖子的被赞数加一
- $like_obj->like_count = $like_obj->like_count+1;
- //帖子的作者的被赞数加一
- $author->liked_count = $author->liked_count+1;
- $like_obj->update(array('like_count'), true);
- $author->update(array('liked_count'), true);
- //用户行为记录
- CommonFn::setInteraction($likeAr->user,$author->_id,'like');
- }
- } catch (Exception $e) {
- continue;
- }
- }
- //发送短信异步任务
- $list = new ARedisList('send_sms_list');
- $smsservice = Service::factory('SendSMSService');
- while ($list->getCount() > 0) {
- $key = $list->pop();
- try {
- $sms_data = json_decode($key,true);
- $smsservice->send_sms($sms_data['tpl'],$sms_data['mobile']);
- } catch (Exception $e) {
- continue;
- }
- }
- //帖子查看数异步处理
- $list = new ARedisList('topic_viewcounter_list');
- while ($list->getCount() > 0) {
- $topic_id = $list->pop();
- $topic = Topic::get(new MongoId($topic_id));
- $topic->visit_count = $topic->visit_count+10;
- $topic->update(array('visit_count'),true);
- }
- }
- }
- }
|