Преглед изворни кода

Merge branch 'bonus_rate' into car

stanley-king пре 7 година
родитељ
комит
54ff1f4eb3

+ 18 - 10
centra_srv.php

@@ -55,7 +55,7 @@ function fork_subprocess($count,$listen_fd)
 {
     if (($pid = pcntl_fork()) === 0)
     {
-        //ob_end_clean(); // Discard the output buffer and close
+        //ob_end_clean();      // Discard the output buffer and close
         fclose(STDIN);  // Close all of the standard
         fclose(STDOUT); // file descriptors as we
         fclose(STDERR); // are running as a daemon.
@@ -71,6 +71,7 @@ function fork_subprocess($count,$listen_fd)
     }
     else
     {
+        socket_close($listen_fd);
         Log::record("pid = {$pid} count = {$count} ",Log::DEBUG);
         $ret = pcntl_waitpid($pid,$status,WNOHANG);
         if($ret == 0) {
@@ -85,19 +86,26 @@ function fork_subprocess($count,$listen_fd)
     }
 }
 
-function remote_addr()
-{
-    global $config;
-
-    $host = $config['searcher']['host'];
-    $port = $config['searcher']['port'];
+global $config;
+$host = $config['searcher']['host'];
+$port = $config['searcher']['port'];
 
-    return "{$host}:{$port}";
+$listen_fd = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
+if(!socket_set_option($listen_fd, SOL_SOCKET, SO_REUSEADDR, 1)) {
+    echo "socket_set_option 地址重用失败.\n";
+}
+if(!socket_set_nonblock($listen_fd)) {
+    $err = socket_last_error();
+    Log::record("socket_set_blocking error : {$err}",Log::DEBUG);
 }
 
-$listen_fd = stream_socket_server (remote_addr(), $errno, $errstr);
-if($listen_fd == false) {
+if(!socket_bind($listen_fd, $host, $port)) {
+    echo "无法创建socket,请退出之前进程.\n";
+    return;
+}
+if(!socket_listen($listen_fd)) {
     echo "无法创建socket,请退出之前进程.\n";
+    return;
 }
 
 $count = 1;

+ 18 - 8
data/resource/mobile/bargain/css/main.css

@@ -60,11 +60,11 @@ ul,li {
     -webkit-line-clamp: 2;
     -webkit-box-orient: vertical;
     line-height: 1.5;
-    margin-bottom: 20px;
+    margin-bottom: 5px;
 }
 .price_describe {
     display: flex;
-    margin-bottom: 20px;
+    margin-bottom: 13px;
 }
 .price_describe > div {
     flex: 1;
@@ -135,6 +135,16 @@ ul,li {
     background: url(../images/bargain_btn.png?v=1) no-repeat;
     background-size: 100% 100%;
 }
+.mine_bargain_btn {
+    display: inline-block;
+    height: 101px;
+    width: 718px;
+    box-sizing: border-box;
+    color: #ffffff;
+    background: url(../images/mine_bargain_btn.jpg?v=1) no-repeat;
+    background-size: 100% 100%;
+    margin-bottom: 17px;
+}
 .join_btn {
     display: inline-block;
     height: 101px;
@@ -214,7 +224,7 @@ ul,li {
     color: #fad952;
 }
 .users_list li .user {
-    width: 420px;
+    width: 400px;
     font-size: 28px;
     line-height: 1.3;
 }
@@ -390,9 +400,9 @@ ul,li {
 }
 .barrage img {
     display: inline-block;
-    margin-right: 33px;
-    width: 33px;
-    height: 33px;
+    margin-right: 66px;
+    width: 66px;
+    height: 66px;
     border-radius: 50px;
     vertical-align: middle;
 }
@@ -534,11 +544,11 @@ ul,li {
 .pop .bargain_msg {
     margin-top: 117px;
     margin-bottom: 21px;
-    font-size: 61px;
+    font-size: 50px;
     color: #ea302d;
 }
 .pop .bargain_goods_msg {
-    font-size: 36px;
+    font-size: 30px;
 }
 .join_btn_2 {
     position: absolute;

BIN
data/resource/mobile/bargain/images/mine_bargain_btn.jpg


BIN
data/resource/mobile/bargain/images/rules.png


+ 4 - 1
data/resource/mobile/comm/websocket.js

@@ -99,7 +99,7 @@ var WebsocketConnect = function(wshost,fAutoConnect,fAutojoin,callbacks,room_msg
 
     var bargain_over = function () {
         var jsonobject = {
-            op:"bargain_over",
+            op:"close",
             room:room_msgs.room,
             room_key:room_msgs.roomkey
         };
@@ -158,6 +158,9 @@ var WebsocketConnect = function(wshost,fAutoConnect,fAutojoin,callbacks,room_msg
             else if(op == 'ret_bargain') {
                     msg_handler.message(datasJsonParse);
             }
+            else if(op == 'bargain_close') {
+                    msg_handler.message(datasJsonParse);
+            }
         };
         socket.onclose = function(){
             webSocket_callbacks.onclose();

+ 43 - 0
data/resource/mobile/comm/websocket_handles.js

@@ -0,0 +1,43 @@
+//发送弹幕
+var Barrage = function()
+{
+    this.sendData = null;
+    this.barrage_html = '';
+    this.dataParse = function(data)
+    {
+        return {
+            posY :parseInt(Math.random() * (100 - 20)),
+            avatar: data.avatar,
+            nickname : data.nickname,
+            msg:data.msg
+        }
+    };
+    this.add = function(send_data){
+        this.sendData = this.dataParse(send_data);
+        return this;
+    };
+    this.send = function()
+    {
+        if(this.sendData)
+        {
+            if(this.sendData.msg != null) {
+                this.barrage_html = '<div class="barrage" style="position:absolute;top:'+this.sendData.posY+'%"><img src="'+this.sendData.avatar+'">'+this.sendData.nickname+'说:<span class="price">'+this.sendData.msg+'</span></div>';
+            }
+            $('body').append(this.barrage_html);
+            this.sendData = null;
+            this.barrage_html = '';
+            this.clear();
+            return this;
+        }
+        else {
+            console.log('没有弹幕可以发送');
+        }
+    };
+    this.clear = function()
+    {
+        $('.barrage').on('webkitAnimationEnd',function(){
+            $(this).remove();
+        });
+        return this;
+    };
+};

+ 3 - 0
helper/account_helper.php

@@ -25,6 +25,9 @@ require_once(BASE_ROOT_PATH . '/helper/async/status.php');
 require_once(BASE_ROOT_PATH . '/helper/async/register.php');
 require_once(BASE_ROOT_PATH . '/helper/async/order.php');
 require_once(BASE_ROOT_PATH . '/helper/async/qugc.php');
+require_once(BASE_ROOT_PATH . '/helper/async/bargain.php');
+require_once(BASE_ROOT_PATH . '/helper/room_helper.php');
+
 require_once(BASE_ROOT_PATH . '/helper/async/broadcast_order.php');
 require_once(BASE_ROOT_PATH . '/helper/async/broadcast.php');
 require_once(BASE_ROOT_PATH . '/helper/async/broadcast/filter.php');

+ 17 - 14
helper/async/bargain.php

@@ -84,19 +84,22 @@ class bargain
 
     private function send_bonus($discount,$userid)
     {
-//        $params = bonus\parameters::user_reigster_fixed();
-//        foreach ($params as $param) {
-//            $type = bonus_helper::create_type_input($param);
-//            $money = $type->getTotal_amount();
-//            $ret = bonus_helper::make_bonus($param, $param['rate_money']);
-//
-//            if ($ret != false) {
-//                $type_sn = $ret['type_sn'];
-//                bonus_helper::send($type_sn, [$this->cur_user]);
-//                push_helper::register_bonus($this->cur_user, $money, $type_sn);
-//            } else {
-//                return false;
-//            }
-//        }
+        $cent = intval($discount * 100 + 0.5);
+        if($cent <= 0) return false;
+
+        $params = bonus\parameters::bargain_fixed(100,$discount);
+        foreach ($params as $param) {
+            $type = bonus_helper::create_type_input($param);
+            $money = $type->getTotal_amount();
+            $ret = bonus_helper::make_bonus($param, $param['rate_money']);
+
+            if ($ret != false) {
+                $type_sn = $ret['type_sn'];
+                bonus_helper::send($type_sn, [$userid]);
+                push_helper::bargain_bonus($userid, $discount, $type_sn);
+            } else {
+                return false;
+            }
+        }
     }
 }

+ 4 - 2
helper/bonus/parameters.php

@@ -364,8 +364,9 @@ class parameters
         return $param;
     }
 
-    public static function bargain_fixed($rate,$amount,$type_name,$can_share = 0)
+    public static function bargain_fixed($rate,$amount,$type_name='',$can_share = 0)
     {
+        $params = [];
         $param['make_type'] = type::MakeSendType;
         $param['type_name'] = empty($type_name) ? "砍价红包" : $type_name;
         $param['send_type'] = type::SendType_Fixed;
@@ -376,7 +377,8 @@ class parameters
         $param['can_share']   = $can_share;
         $param['rate_money'][] = ['amount' => $amount,'num' => 1, 'rate' => $rate];
 
-        return $param;
+        $params[] = $param;
+        return $params;
     }
 
     public static function appreciate($sender_id,$rate,$amount,$bless)

+ 3 - 2
helper/goods_helper.php

@@ -209,8 +209,9 @@ class goods_helper
 
             $goods_num = $item['goods_num'];
             $storage   = $summary['goods_storage'];
-            if($storage > intval(($goods_num - $storage) / 2)) {
-                $grabed_num = intval(($goods_num - $storage) / 2 + 0.5);
+
+            if($storage > $goods_num) {
+                $grabed_num = $goods_num - 1;
             } else {
                 $grabed_num = $goods_num - $storage;
             }

+ 20 - 1
helper/push_helper.php

@@ -834,7 +834,7 @@ class push_helper
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     public static function poor_user_bonus($user, $money, $rate, $type_sn, $fQueue=false)
     {
-//        $url = self::pushurl() . "&op=bonus&type_sn={$type_sn}";
+//      $url = self::pushurl() . "&op=bonus&type_sn={$type_sn}";
         $desc = self::money_rate_desc($money,$rate);
         $text = "您的红包余额不足,好心人紧急为您充值{$desc}红包~";
 
@@ -907,6 +907,25 @@ class push_helper
 
         return $push_param;
     }
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    public static function bargain_bonus($user, $money,$type_sn,$fQueue=false)
+    {
+        $text = "您获得{$money}元的砍价红包,请查收~";
+
+        $push_param['alias'] = $user;
+        $push_param['title'] = "收到砍价红包";
+        $push_param['text']  = $text;
+
+        $push_param['extra']['go_type']   = 'bonus';
+        $push_param['extra']['title']    = "收到砍价红包";
+        $push_param['extra']['text']     = $text;
+        $push_param['extra']['show_type'] = 'pop';
+        $push_param['extra']['url']      = schema_helper::bonus_detail($type_sn);
+        $push_param['extra']['image']    = self::admin_avatar();
+
+        QueueClient::push('upushSendMsg',$push_param);
+    }
 }
 
 class push_event

+ 1 - 1
helper/room/access_client.php

@@ -38,7 +38,7 @@ class access_client extends tcp_client
 
         $host = $config['room_srv']['host'];
         $port = $config['room_srv']['port'];
-        return "{$host}:{$port}";
+        return "tcp://{$host}:{$port}";
     }
 
     public function join($room,$room_key)

+ 22 - 10
helper/room/bargain_manager.php

@@ -40,14 +40,18 @@ class room_extend
             return intval($this->mParams['dateid']);
         }
     }
+    public function exist()
+    {
+        return !empty($this->mParams);
+    }
+
     public function date_empty($dateid)
     {
-        if(empty($this->mParams)) return true;
         if($this->dateid() == $dateid) {
             return false;
         }
         else {
-            return false;
+            return true;
         }
     }
 }
@@ -143,7 +147,6 @@ class bargain_manager
     const normal = 1;
     const closing = 2;
 
-    private $mDateId;
     private $mFriends;
     private $mParams;
     private $mBargainId;
@@ -153,7 +156,6 @@ class bargain_manager
     public function __construct($roomid)
     {
         $this->mRoomId = $roomid;
-        $this->mDateId = strtotime(date('Y-m-d',time()));
         $mod_bargain = Model('room_bargain');
         $info = $mod_bargain->getBargainByRoom($roomid,true);
         $this->mBargain = new bargain($info);
@@ -171,10 +173,14 @@ class bargain_manager
         }
     }
 
+    private function dateid() {
+        return strtotime(date('Y-m-d',time()));
+    }
     public function bargain($userid,&$state)
     {
         $state = self::unknown_state;
         $value = $this->bargained($userid);
+
         if($value != false) {
             return ['value' => $value,'success' => false,'discount' => $this->mParams->discount(),'user_num' => $this->mParams->user_num()];
         }
@@ -186,18 +192,24 @@ class bargain_manager
         $info = $mod_room->getRoomExtend($userid);
 
         $room_extend = new room_extend($info);
-        $count = $room_extend->bargain_count($this->mDateId);
+        $count = $room_extend->bargain_count($this->dateid());
         $value = $this->mParams->bargain($count,$completed);
         if($value === false) {
             return false;
         }
         else
         {
-
-            if(!$room_extend->date_empty($this->mDateId)) {
-                $mod_room->editExtend($userid,['bargain_count' => ['exp', 'bargain_count+1']]);
-            } else {
-                $mod_room->addExtend($userid,['bargain_count' => 1,'dateid' => $this->mDateId]);
+            if($room_extend->exist())
+            {
+                if($room_extend->date_empty($this->dateid())) {
+                    $mod_room->editExtend($userid,['bargain_count' => 1,'dateid' => $this->dateid()]);
+                }
+                else {
+                    $mod_room->editExtend($userid,['bargain_count' => ['exp', 'bargain_count+1']]);
+                }
+            }
+            else {
+                $mod_room->addExtend($userid,['bargain_count' => 1,'dateid' => $this->dateid()]);
             }
 
             $mod_bargain = Model('room_bargain');

+ 1 - 1
helper/room/factory_client.php

@@ -40,7 +40,7 @@ class factory_client extends tcp_client
 
         $host = $config['room_factory']['host'];
         $port = $config['room_factory']['port'];
-        return "{$host}:{$port}";
+        return "tcp://{$host}:{$port}";
     }
 
     public function create_bargain($goods_id,$user,$lowest_price,$usable_days,$random = true,$total_num = 10)

+ 1 - 1
helper/room/room_client.php

@@ -78,7 +78,7 @@ class room_client extends tcp_client
     }
 
     public function remote_addr() {
-        return "{$this->mHost}:{$this->mPort}";
+        return "tcp://{$this->mHost}:{$this->mPort}";
     }
 
     public function invite($roomid,$user)

+ 4 - 8
helper/search/srv_base.php

@@ -47,10 +47,6 @@ abstract class srv_base
     public function run_loop($sockfd)
     {
         $this->mListenSocket = $sockfd;
-        Log::record("stream_set_blocking",Log::DEBUG);
-        if(stream_set_blocking($this->mListenSocket, 0) == false) {
-            Log::record("stream_set_blocking error",Log::DEBUG);
-        }
         $this->mEvbase = event_base_new();
         $this->mEv = event_new();
 
@@ -80,14 +76,14 @@ abstract class srv_base
 
         static $bufid = 1;
 
-        $stream = stream_socket_accept($socket);
+        $stream = socket_accept($socket);
         if($stream == false) {
             Log::record("stream_socket_accept return false pid={$pid} socket_fd={$socket}",Log::DEBUG);
             return;
         }
         Log::record("stream_socket_accept pid={$pid}  stream={$stream}",Log::DEBUG);
 
-        stream_set_blocking($stream, 0);
+        socket_set_nonblock($stream);
         $buffer = event_buffer_new($stream, 'ev_read', NULL, 'ev_error', $bufid);
         if($buffer == false) {
             fclose($stream);
@@ -170,7 +166,7 @@ abstract class srv_base
         event_buffer_free($buffer);
 
         if(array_key_exists($bufid,$this->mStreams)) {
-            stream_socket_shutdown($this->mStreams[$bufid],STREAM_SHUT_RDWR);
+            socket_shutdown($this->mStreams[$bufid],STREAM_SHUT_RDWR);
             fclose($this->mStreams[$bufid]);
             unset($this->mStreams[$bufid]);
         }
@@ -207,7 +203,7 @@ abstract class srv_base
         event_buffer_free($buffer);
 
         if(array_key_exists($bufid,$this->mStreams)) {
-            stream_socket_shutdown($this->mStreams[$bufid],STREAM_SHUT_RDWR);
+            socket_shutdown($this->mStreams[$bufid],STREAM_SHUT_RDWR);
             fclose($this->mStreams[$bufid]);
             unset($this->mStreams[$bufid]);
         }

+ 2 - 2
helper/search/tcp_client.php

@@ -224,7 +224,7 @@ class search_client extends tcp_client
         $host = $config['searcher']['host'];
         $port = $config['searcher']['port'];
 
-        return "{$host}:{$port}";
+        return "tcp://{$host}:{$port}";
     }
 }
 
@@ -260,7 +260,7 @@ class relation_client extends tcp_client
         $host = $config['relation']['host'];
         $port = $config['relation']['port'];
 
-        return "{$host}:{$port}";
+        return "tcp://{$host}:{$port}";
     }
     public function add_inviter($param)
     {

+ 1 - 1
helper/url_helper.php

@@ -139,7 +139,7 @@ class author_url
     public static function bargain_url($bargain_id)
     {
         $relay_id = session_helper::relay_id();
-        $url = BASE_SITE_URL . "/mobile/index.php?act=bargain&op=open_bargain&client_type=wap&bargain_id={$bargain_id}&relay_id={$relay_id}";
+        $url = BASE_SITE_URL . "/mobile/index.php?act=bargain&op=open&client_type=wap&bargain_id={$bargain_id}&relay_id={$relay_id}";
         return $url;
     }
 }



+ 30 - 2
mobile/control/bargain.php

@@ -244,10 +244,14 @@ class tpl_bargain
                     </div>
                     <div class=\"introduce\">
                         <p class=\"goods_name\">{$summary['goods_mobile_name']}</p>
+                        <p class=\"floor_price\" style='margin-bottom: 7px;'>原价{$summary['goods_price']}</p>
+                       
                         <div class=\"price_describe\">
                             <div class=\"price_box\">
                                 <span class=\"current_price\" id=\"current_price\">现价¥{$cur_price}</span>
                                 <span class=\"floor_price\">可砍至{$lowest}元</span>
+                                <input type=\"hidden\" value=\"{$summary['goods_price']}\" id=\"goods_price\">
+                                <input type=\"hidden\" value=\"{$lowest}\" id=\"lowest_price\">
                             </div>
                         </div>
                         <div class=\"count_down\">
@@ -398,8 +402,9 @@ class tpl_bargain
                         <span class="invite_btn join_btn" id="invite_btn"></span>';
             }
             else {
-                $str = '<span class="bargain_btn" id="bargain_btn"></span>
-                        <span class="join_btn hide" id="join_btn"></span>';
+                $str = '<span class="mine_bargain_btn" id="mine_bargain_btn"></span>
+                        <span class="just_buy" id="just_buy"></span>
+                        <span class="invite_btn join_btn" id="invite_btn"></span>';
             }
         }
         else
@@ -417,16 +422,39 @@ class tpl_bargain
         return $str;
     }
 
+    public function show_close_pop()
+    {
+        $str = "";
+//        if($this->mBargain->closed()) {
+//            $str = '<div class="over_pop">
+//                        <div class="bargain_over_bg"></div>
+//                        <span class="start_bargain_btn"></span>
+//                    </div>';
+//        }
+//        else {
+//            $str = '<div class="over_pop hide">
+//                        <div class="bargain_over_bg"></div>
+//                        <span class="start_bargain_btn"></span>
+//                    </div>';;
+//        }
+        return $str;
+    }
+
     public function share_url()
     {
+        return url_helper::bargain_open_url($this->mBargain->bargain_id());
     }
     public function share_title()
     {
+        return $this->mSummary['goods_mobile_name'];
     }
     public function share_image()
     {
+        return $this->mSummary['goods_image_url'];
     }
     public function share_subtitle()
     {
+        $price = $this->mBargain->lowest_price();
+        return "帮我砍个价,{$price}元得商品~";
     }
 }

+ 2 - 2
mobile/control/control.php

@@ -297,9 +297,9 @@ class mbMemberControl extends mobileControl
 
 function bonus_version()
 {
-    return "v=2018013101";
+    return "v=2018020501";
 }
 function shop_version()
 {
-    return "v=20180131";
+    return "v=2018020501";
 }

+ 68 - 82
mobile/templates/default/bargain/bargain.php

@@ -45,11 +45,9 @@
         <div class="send_msg">发送</div>
     </div>
     <div>
-        <?php if(session_helper::isapp()) { ?>
-            <button class="join_btn download_app">发起砍价</button>
-        <?php } else {?>
+        <?php if(!session_helper::isapp()) { ?>
             <button class="download_app" id="download_app">下载app</button>
-        <?php }?>
+        <?php } ?>
     </div>
 </div>
 
@@ -57,7 +55,7 @@
     <div class="bargain_pop scale">
         <span class="close_btn"></span>
         <p class="bargain_msg">您已成功帮砍<span class="ret_bargain"></span>元</p>
-        <p class="bargain_goods_msg">还差<span class=""></span>元他就可0元拿下心仪商品</p>
+        <p class="bargain_goods_msg">还差<span class="balance"></span>元他就可以拿下心仪商品</p>
         <span class="join_btn_2"></span>
     </div>
 </div>
@@ -81,22 +79,20 @@
     </div>
 </div>
 
-<div class="over_pop hide">
-    <div class="bargain_over_bg"></div>
-    <span class="start_bargain_btn"></span>
-</div>
+<?php echo $output['tpl']->show_close_pop(); ?>
 
 
 <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js?<?php echo bonus_version(); ?>"></script>
 <script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/mobile/comm/wx_share.js?<?php echo bonus_version(); ?>"></script>
-<script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/mobile/shake/js/zepto.min.js"></script>
-<script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/mobile/comm/animate.js"></script>
-<script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/mobile/comm/iscroll.js"></script>
-<script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/mobile/comm/websocket.js"></script>
-<script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/mobile/comm/new_bridge.js"></script>
+<script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/mobile/shake/js/zepto.min.js?<?php echo bonus_version(); ?>"></script>
+<script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/mobile/comm/animate.js?<?php echo bonus_version(); ?>"></script>
+<script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/mobile/comm/iscroll.js?<?php echo bonus_version(); ?>"></script>
+<script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/mobile/comm/websocket.js?<?php echo bonus_version(); ?>"></script>
+<script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/mobile/comm/websocket_handles.js?<?php echo bonus_version(); ?>"></script>
+<script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/mobile/comm/new_bridge.js?<?php echo bonus_version(); ?>"></script>
 <script type="text/javascript" src="http://qzonestyle.gtimg.cn/qzone/qzact/common/share/share.js?<?php echo bonus_version(); ?>"></script>
-
 <script type="text/javascript">
+
     var url         = "<?php echo $output['tpl']->share_url(); ?>";
     var title       = "<?php echo $output['tpl']->share_title(); ?>";
     var img_url     = "<?php echo $output['tpl']->share_image(); ?>";
@@ -123,56 +119,27 @@
     };
     bridge.call_native_handler('on_native_click',JSON.stringify(jsInit));
 
-    window.onload = function(){
-        var myScroll = new IScroll('#wrapper',{
-            click: true,
-            taps:true
-        });
-    };
-
-    //发送弹幕
-    var Barrage = function()
-    {
-        this.sendData = null;
-        this.barrage_html = '';
-        this.dataParse = function(data)
-        {
-            return {
-                posY :parseInt(Math.random() * (100 - 20)),
-                avatar: data.avatar,
-                nickname : data.nickname,
-                msg:data.msg
-            }
-        };
-        this.add = function(send_data){
-            this.sendData = this.dataParse(send_data);
-            return this;
-        };
-        this.send = function()
-        {
-            if(this.sendData)
-            {
-                if(this.sendData.msg != null) {
-                    this.barrage_html = '<div class="barrage" style="position:absolute;top:'+this.sendData.posY+'%"><img src="'+this.sendData.avatar+'">'+this.sendData.nickname+'说:<span class="price">'+this.sendData.msg+'</span></div>';
-                }
-                $('body').append(this.barrage_html);
-                this.sendData = null;
-                this.barrage_html = '';
-                this.clear();
-                return this;
-            }
-            else {
-                console.log('没有弹幕可以发送');
+    $('#invite_btn').on('click',function(){
+        var jsonobject = {
+            action:"share_page",
+            params: {
+                title:title,
+                sub_title:sub_title,
+                img_url:img_url,
+                url:url
             }
         };
-        this.clear = function()
-        {
-            $('.barrage').on('webkitAnimationEnd',function(){
-                $(this).remove();
-            });
-            return this;
-        };
-    };
+        bridge.call_native_handler('on_native_click',JSON.stringify(jsonobject));
+    });
+
+    if(from_app) {
+        $('.send_input').css('width','560px');
+    }
+
+    var myScroll = new IScroll('#wrapper',{
+        click: true,
+        taps:true
+    });
 
     var barrage = new Barrage();
     function ret_join(datas){
@@ -195,6 +162,8 @@
             clearInterval(bargain_count_down);
             $('.show_count_down').addClass('hide');
             $('.bargain_over').removeClass('hide');
+            $('#bargain_btn').addClass('hide');
+            $('#join_btn').removeClass('hide');
             return;
         }
         if(days < 10) {
@@ -223,7 +192,7 @@
             this.play();
         };
         this.play = function(){
-            if($parent.children('li').length < 5){
+            if($parent.children('li').length <= 5){
                  return;
             }
             else {
@@ -256,6 +225,9 @@
                                 '</div>'+
                           '</li>';
             $parent.append(sub_html);
+            setTimeout(function () {
+                myScroll.refresh();
+            },0);
             return this;
         };
         this.stop = function(){
@@ -341,16 +313,6 @@
         }
     });
 
-    $('.start_bargain_btn').on('click',function(){
-        if(from_app){
-           alert('schema跳转,地址不清楚');
-        }
-        else {
-            download_app();
-        }
-    });
-
-
     var room    =  <?php echo $output['room']['room']; ?>;
     var roomkey = "<?php echo $output['room']['room_key']; ?>";
     var addr    = "<?php echo $output['room']['addr']; ?>";
@@ -372,11 +334,11 @@
     function sOpen(){
     }
     function sError(e){
-        console.log('网络连接失败!请刷新重试 msg:' + e.message);
+        console.log('网络连接失败!请刷新重试');
         online = false;
     }
     function sClose(e){
-        console.log('网络连接关闭!msg:' + e.message);
+        console.log('网络连接关闭!');
         online = false;
     }
 
@@ -386,19 +348,29 @@
         console.log(datas);
         try
         {
+            var goods_price  = $('#goods_price').val();
+            var lowest_price = $('#lowest_price').val();
+
             if(msg_type == 'bargain') {
-                var price = datas.content.value;
-                priceChange(price);
+                var discount = datas.content.discount;
+                priceChange(goods_price - discount);
                 slideMsgs.addChild(datas).play();
             }
             else if(msg_type =='ret_bargain') {
                 var ret_bargain_price = datas.content.value;
+                var discount = datas.content.discount;
+
                 var image = new Image();
                 image.src = "<?php echo RESOURCE_SITE_URL; ?>/mobile/bargain/images/bargain_pop.jpg";
                 image.onload = function(){
                     $('.bargain_pop').removeClass('hide');
                 };
                 $('.ret_bargain').text(ret_bargain_price);
+
+                var gap = goods_price - lowest_price - discount;
+                gap = (parseInt(gap * 100 + 0.5) / 100).toFixed(2);
+                $('.balance').text(gap);
+                $('.pop').removeClass('hide');
             }
             else if(msg_type == 'message') {
                 var msg = datas.content.content;
@@ -412,8 +384,6 @@
             }
             else if(msg_type == 'bargain_close') {
                 count_down_time = -1;
-                $('#bargain_btn').addClass('hide');
-                $('#join_btn').removeClass('hide');
             }
         }
         catch (e) {
@@ -428,9 +398,20 @@
             return;
         }
         $(this).addClass('hide');
-        $('.pop').removeClass('hide');
         $('.join_btn').removeClass('hide');
         websocket.bargain();
+        myScroll.refresh();
+    });
+
+    //我的砍价按钮
+    $('#mine_bargain_btn').on('click',function(){
+        if(!online) {
+            alert('网络连接失败!请刷新重试');
+            return;
+        }
+        $(this).addClass('hide');
+        websocket.bargain();
+        myScroll.refresh();
     });
 
     //发送信息
@@ -460,13 +441,18 @@
     });
 
     $('.affirm_btn').on('click',function(){
+        if(!online) {
+            alert('网络连接失败!请刷新重试');
+            return;
+        }
         websocket.bargain_over();
-        alert('结束成功!请在APP中查收您的红包购买砍价所得商品');
+        window.location.reload();
     });
 
     $('.affirm_close_btn').on('click',function(){
         $('.affirm_pop').addClass('hide');
     });
+
 </script>
 </body>
 </html>

+ 0 - 132
mobile/templates/default/bargain/bargain_list.php

@@ -1,132 +0,0 @@
-<?php defined('InShopNC') or exit('Access Invalid!'); ?>
-
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title>砍价团</title>
-    <meta name="viewport" content="width=750,user-scalable=no,target-densitydpi=device-dpi">
-    <meta name="format-detection" content="telephone=no">
-    <link rel="stylesheet" href="<?php echo RESOURCE_SITE_URL; ?>/mobile/bargain/css/main.css?<?php echo bonus_version(); ?>"/>
-    <link rel="stylesheet" href="<?php echo RESOURCE_SITE_URL; ?>/mobile/bargain/css/list.css?<?php echo bonus_version(); ?>"/>
-</head>
-<body>
-    <div class="container">
-        <ul class="bargain_list">
-            <li>
-                <div class="goods_image">
-                    <img src="http://img2.imgtn.bdimg.com/it/u=2909519701,1856442059&fm=11&gp=0.jpg">
-                </div>
-                <div class="goods_details">
-                    <p class="goods_name">【雪花秀】与润修复面膜</p>
-                    <div class="goods_price">原价 380 元</div>
-                    <div class="nums">
-                        <div class="gross">共20份</div>
-                        <div class="bargained_num">已抢100份</div>
-                    </div>
-                    <p class="bargain_over hide">该砍价已结束</p>
-                    <p class="show_count_down">剩:<span class="days time_color"></span> 天 <span class="hours time_color"></span> :<span class="minutes time_color"></span> :<span class="seconds time_color"></span> 结束</p>
-                    <div class="launch">
-                        <span class="launch_btn allow">砍价0元得</span>
-                    </div>
-                </div>
-            </li>
-            <li>
-                <div class="goods_image">
-                    <img src="http://img2.imgtn.bdimg.com/it/u=2909519701,1856442059&fm=11&gp=0.jpg">
-                    <span class="start_date">周三福利</span>
-                </div>
-                <div class="goods_details">
-                    <p class="goods_name">【雪花秀】与润修复面膜</p>
-                    <div class="goods_price">原价 380 元</div>
-                    <div class="nums">
-                        <div class="gross">共20份</div>
-                        <div class="bargained_num">已抢100份</div>
-                    </div>
-                    <p class="bargain_over hide">该砍价已结束</p>
-                    <p class="show_count_down">还有:<span class="days time_color"></span> 天 <span class="hours time_color"></span> :<span class="minutes time_color"></span> :<span class="seconds time_color"></span> 开始</p>
-                    <div class="launch">
-                        <span class="launch_btn not_started">等待砍价</span>
-                    </div>
-                </div>
-            </li>
-            <li>
-                <div class="goods_image">
-                    <img src="http://img2.imgtn.bdimg.com/it/u=2909519701,1856442059&fm=11&gp=0.jpg">
-                    <span class="start_date">周五福利</span>
-                </div>
-                <div class="goods_details">
-                    <p class="goods_name">【雪花秀】与润修复面膜</p>
-                    <div class="goods_price">原价 380 元</div>
-                    <div class="nums">
-                        <div class="gross">共20份</div>
-                        <div class="bargained_num">已抢100份</div>
-                    </div>
-                    <p class="bargain_over hide">该砍价已结束</p>
-                    <p class="show_count_down">还有:<span class="days time_color"></span> 天 <span class="hours time_color"></span> :<span class="minutes time_color"></span> :<span class="seconds time_color"></span> 开始</p>
-                    <div class="launch">
-                        <span class="launch_btn not_started">等待砍价</span>
-                    </div>
-                </div>
-            </li>
-        </ul>
-    </div>
-
-
-<script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/mobile/shake/js/zepto.min.js"></script>
-<script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/mobile/comm/new_bridge.js"></script>
-<script type="text/javascript">
-    //倒计时
-    var over_times = [
-                    (new Date(2018,0,20).getTime())/1000,
-                    (new Date(2018,0,21).getTime())/1000,
-                    (new Date(2018,0,24).getTime())/1000];
-
-
-
-    (function(){
-        for(var i=0;i<over_times.length;i++) {
-            (function(j){
-                var g = j;
-                var bargain_count_down = setInterval(function(){
-                    var local_time = (new Date().getTime())/1000;
-                    var count_down_time = (over_times[g] - local_time).toFixed(0);
-                    formatDuring(count_down_time,g,bargain_count_down);
-                },1000);
-            })(i);
-        }
-    })();
-
-
-    function formatDuring(mss,num,timer) {
-        var days = parseInt( mss / 60 / 60 / 24, 10); //计算剩余的天数
-        var hours = parseInt(mss / 60 / 60 % 24, 10); //计算剩余的小时
-        var minutes = parseInt(mss / 60 % 60, 10);//计算剩余的分钟
-        var seconds = parseInt(mss % 60, 10);//计算剩余的秒数
-        if(days <= 0 && hours <= 0 && minutes <= 0 && seconds <= 0) {
-            clearInterval(timer);
-            $('.show_count_down').eq(num).addClass('hide');
-            $('.bargain_over').eq(num).removeClass('hide');
-            return;
-        }
-        if(days < 10) {
-            days = '0' + days;
-        }
-        if(hours < 10) {
-            hours = '0' + hours;
-        }
-        if(minutes < 10) {
-            minutes = '0' + minutes;
-        }
-        if(seconds < 10) {
-            seconds = '0' + seconds;
-        }
-        $('.days').eq(num).text(days);
-        $('.hours').eq(num).text(hours);
-        $('.minutes').eq(num).text(minutes);
-        $('.seconds').eq(num).text(seconds);
-    }
-</script>
-</body>
-</html>
-

+ 3 - 2
mobile/wxauthor.php

@@ -15,6 +15,8 @@ error_reporting(E_ERROR);
 $code  = $_GET['code'];
 $state = $_GET['state'];
 
+Log::record("state:{$state}",Log::DEBUG);
+
 if(empty($code)) {
     Log::record("没有同意授权");
 }
@@ -55,8 +57,7 @@ else
     }
     else
     {
-        $host = $state;
-        $state = urlencode($state);
+        $host = urldecode($state);
         $url = "{$host}/mobile/wxauthor.php?code={$code}&state={$state}";
         Log::record("redirect url={$url}",Log::DEBUG);
         $html = "<!DOCTYPE html>

+ 16 - 17
restart.py

@@ -45,11 +45,11 @@ def restart(item):
             try:
                 if cur_pid != pid:
                     os.kill(pid, signal.SIGKILL)
-                    # print 'kill pid=', pid
+                    print 'kill pid=', pid
                 else:
                     continue
             except OSError, e:
-                # print "OSError no=", e.errno, " err=", e.strerror
+                print "OSError no=", e.errno, " err=", e.strerror
                 pass
             except BaseException, be:
                 pass
@@ -58,7 +58,6 @@ def restart(item):
         print cmd
         time.sleep(1)
         os.system(cmd)
-        time.sleep(1)
 
     if tip:
         print "tip:",tip
@@ -109,14 +108,14 @@ def main():
             cmds.append({'file_name': 'room_srv.php', 'cmd': 'php room_srv.php', 'tip': ''})
             cmds.append({'file_name': 'mac_webacc', 'cmd': './mac_webacc','tip': 'tail -f -n 20 /tmp/ugcman.out\n tail -f -n 20 /tmp/webacc.out'})
         elif option == 'all':
-            cmds.append({'file_name': 'fcgi_run.php', 'cmd': 'spawn-fcgi -a 127.0.0.1 -p 9100 -F 1 -f "php fcgi_run.php"','tip': ''})
-            cmds.append({'file_name': 'crontab.php', 'cmd': '', 'tip': ''})
-            cmds.append({'file_name': 'mac_ugcman', 'cmd': './mac_ugcman', 'tip': ''})
-            cmds.append({'file_name': 'ugc_srv.php', 'cmd': 'php ugc_srv.php', 'tip': ''})
-            cmds.append({'file_name': 'centra_srv.php', 'cmd': 'php centra_srv.php', 'tip': ''})
-            cmds.append({'file_name': 'room_factory.php', 'cmd': 'php room_factory.php', 'tip': ''})
-            cmds.append({'file_name': 'room_srv.php', 'cmd': 'php room_srv.php', 'tip': ''})
-            cmds.append({'file_name': 'mac_webacc', 'cmd': './mac_webacc','tip': 'tail -f -n 20 /tmp/ugcman.out\n tail -f -n 20 /tmp/webacc.out'})
+            cmds.append({'file_name': 'fcgi_run.php',   'cmd': 'spawn-fcgi -a 127.0.0.1 -p 9100 -F 1 -f "php fcgi_run.php"','tip': ''})
+            cmds.append({'file_name': 'crontab.php',    'cmd': '', 'tip': ''})
+            cmds.append({'file_name': 'mac_ugcman',     'cmd': './mac_ugcman', 'tip': ''})
+            cmds.append({'file_name': 'ugc_srv.php',    'cmd': 'php ugc_srv.php', 'tip': ''})
+            cmds.append({'file_name': 'centra_srv.php',     'cmd': 'php centra_srv.php', 'tip': ''})
+            cmds.append({'file_name': 'room_factory.php',   'cmd': 'php room_factory.php', 'tip': ''})
+            cmds.append({'file_name': 'room_srv.php',   'cmd': 'php room_srv.php', 'tip': ''})
+            cmds.append({'file_name': 'mac_webacc',     'cmd': './mac_webacc','tip': 'tail -f -n 20 /tmp/ugcman.out\n tail -f -n 20 /tmp/webacc.out'})
         else:
             cmds.append({'file_name': 'fcgi_run.php', 'cmd': 'spawn-fcgi -a 127.0.0.1 -p 9100 -F 1 -f "php fcgi_run.php"','tip':''})
             cmds.append({'file_name': 'crontab.php',  'cmd': '','tip':''})
@@ -150,13 +149,13 @@ def main():
             cmds.append({'file_name': 'webacc', 'cmd': './webacc','tip': 'tail -f -n 20 /tmp/ugcman.out\ntail -f -n 20 /tmp/webacc.out'})
         elif option == 'all':
             cmds.append({'file_name': 'fcgi_run.php', 'cmd': 'spawn-fcgi -a 127.0.0.1 -p 9100 -F 10 -f "php fcgi_run.php"','tip': ''})
-            cmds.append({'file_name': 'crontab.php',    'cmd': '','tip':''})
-            cmds.append({'file_name': 'ugcman', 'cmd': './ugcman', 'tip': ''})
-            cmds.append({'file_name': 'ugc_srv.php', 'cmd': 'php ugc_srv.php', 'tip': ''})
-            cmds.append({'file_name': 'centra_srv.php', 'cmd': 'php centra_srv.php', 'tip': ''})
+            cmds.append({'file_name': 'crontab.php',  'cmd': '','tip':''})
+            cmds.append({'file_name': 'ugcman',       'cmd': './ugcman', 'tip': ''})
+            cmds.append({'file_name': 'ugc_srv.php',  'cmd': 'php ugc_srv.php', 'tip': ''})
+            cmds.append({'file_name': 'centra_srv.php',     'cmd': 'php centra_srv.php', 'tip': ''})
             cmds.append({'file_name': 'room_factory.php',   'cmd': 'php room_factory.php','tip':''})
-            cmds.append({'file_name': 'room_srv.php', 'cmd': 'php room_srv.php', 'tip': ''})
-            cmds.append({'file_name': 'webacc', 'cmd': './webacc','tip': 'tail -f -n 20 /tmp/ugcman.out\ntail -f -n 20 /tmp/webacc.out'})
+            cmds.append({'file_name': 'room_srv.php',   'cmd': 'php room_srv.php', 'tip': ''})
+            cmds.append({'file_name': 'webacc',         'cmd': './webacc','tip': 'tail -f -n 20 /tmp/ugcman.out\ntail -f -n 20 /tmp/webacc.out'})
         else:
             print "you must input some tag: fcgi,queue,ugc,center,room,factory,master,slave,all to restart server or no input it will restart fcgi,queue"
 

+ 19 - 9
room_factory.php

@@ -50,6 +50,7 @@ function fork_subprocess($count,$listen_fd)
     }
     else
     {
+        socket_close($listen_fd);
         Log::record("pid = {$pid} count = {$count} ",Log::DEBUG);
         $ret = pcntl_waitpid($pid,$status,WNOHANG);
         if($ret == 0) {
@@ -64,17 +65,26 @@ function fork_subprocess($count,$listen_fd)
     }
 }
 
-function remote_addr()
-{
-    global $config;
-    $host = $config['room_factory']['host'];
-    $port = $config['room_factory']['port'];
-    return "{$host}:{$port}";
+global $config;
+$host = $config['room_factory']['host'];
+$port = $config['room_factory']['port'];
+
+$listen_fd = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
+if(!socket_set_option($listen_fd, SOL_SOCKET, SO_REUSEADDR, 1)) {
+    echo "socket_set_option 地址重用失败.\n";
+}
+if(!socket_set_nonblock($listen_fd)) {
+    $err = socket_last_error();
+    Log::record("socket_set_blocking error : {$err}",Log::DEBUG);
 }
 
-$listen_fd = stream_socket_server (remote_addr(), $errno, $errstr);
-if($listen_fd == false) {
-    echo "无法创建socket,请退出之前进程.\n";
+if(!socket_bind($listen_fd, $host, $port)) {
+    echo "无法绑定socket {$host} : {$port},请退出之前进程.\n";
+    return;
+}
+if(!socket_listen($listen_fd)) {
+    echo "无法监听socket,请退出之前进程.\n";
+    return;
 }
 
 $count = 1;

+ 19 - 11
room_srv.php

@@ -63,17 +63,27 @@ function fork_subprocess($count,$listen_fd)
     }
 }
 
-function remote_addr()
-{
-    global $config;
-    $host = $config['room_srv']['host'];
-    $port = $config['room_srv']['port'];
-    return "{$host}:{$port}";
+
+global $config;
+$host = $config['room_srv']['host'];
+$port = $config['room_srv']['port'];
+
+$listen_fd = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
+if(!socket_set_option($listen_fd, SOL_SOCKET, SO_REUSEADDR, 1)) {
+    echo "socket_set_option 地址重用失败.\n";
+}
+if(!socket_set_nonblock($listen_fd)) {
+    $err = socket_last_error();
+    Log::record("socket_set_blocking error : {$err}",Log::DEBUG);
 }
 
-$listen_fd = stream_socket_server (remote_addr(), $errno, $errstr);
-if($listen_fd == false) {
+if(!socket_bind($listen_fd, $host, $port)) {
     echo "无法创建socket,请退出之前进程.\n";
+    return;
+}
+if(!socket_listen($listen_fd)) {
+    echo "无法创建socket,请退出之前进程.\n";
+    return;
 }
 
 $count = 1;
@@ -81,6 +91,4 @@ while ($count-- > 0) {
     fork_subprocess($count,$listen_fd);
 }
 
-//search_work($listen_fd);
-
-
+//search_work($sockfd);

+ 2 - 0
test/TestTime.php

@@ -22,6 +22,8 @@ class TestTime extends PHPUnit_Framework_TestCase
 
     public function testS()
     {
+        $date = date('Y-m-d H:i:S',1517399862);
+
         $tm = strtotime('2017-08-01 3:43:00');
         $tm1 = strtotime('2017-8-01 3:43:00');
         $tm2 = strtotime('2017-08-1 3:43:00');