蜜蜂侠

蜜蜂抢单

// ==UserScript==
// @name         蜜蜂侠
// @namespace    http://tampermonkey.net/
// @version      0.7.3
// @description  蜜蜂抢单
// @author       Shinelin
// @match        http://*.mf178.cn/customer/order/pools*
// @match        http://mf178.cn/customer/order/pools*
// @match        http://mf178.cn/customer/order/mytasks
// @grant        none
// ==/UserScript==


(function() {
    'use strict';
    // 消息提示
    var stop = false;
    var cnt = 1;
    var intervalId = 0;


    var my_message = function (message) {
        $.notify({ message:message }, { delay:2000, allow_dismiss:false, type: 'success', placement: { from: "top", align: "center" }, offset: 400});
    };
    // 播放提示音
    $.getScript("https://cdn.bootcss.com/jplayer/2.9.2/jplayer/jquery.jplayer.min.js", function() {
        $("#jplayer").jPlayer({
            // swfPath: "http://www.jplayer.org/latest/js/Jplayer.swf",
            ready: function () {
                $(this).jPlayer("setMedia", {
                    mp3: "http://hao.1015600.com/upload/ring/000/994/63ac8513b87bb67e87042b856e2b6f01.mp3"
                });
            },
            supplied: "mp3"
        });
    });


    var sumbit_ticket_without_comfirm = function(orderId) {
           var url = 'ajax?action=task_report&op=succ&id=' + orderId;
           X.get(url);
    };

    // 附加的html
    var html = (function () {/*
		<div class='row' id='robDiv'>
			<div class='col-xs-3'>
				<select class="form-control" id='amount' name='amount'>
					<option  value="30">30元</option>
					<option  value="50">50元</option>
					<option  value="100">100元</option>
					<option  value="200">200元</option>
                    <option  value="300">300元</option>
                    <option  value="500">500元</option>
				</select>
			</div>
            <div class='col-xs-2'>
				<select class="form-control" id='carrier' name='carrier'>
                    <option  value="0">不限</option>
					<option  value="1">移动</option>
					<option  value="2">联通</option>
				</select>
			</div>
			<div class='col-xs-2'>
				<select id="prov_name" name="prov_name" class="form-control">
					<option value="">不限</option>
					<option value="北京">北京</option>
					<option value="广东">广东</option>
					<option value="上海">上海</option>
					<option value="天津">天津</option>
					<option value="重庆">重庆</option>
					<option value="辽宁">辽宁</option>
					<option value="江苏">江苏</option>
					<option value="湖北">湖北</option>
					<option value="四川">四川</option>
					<option value="陕西">陕西</option>
					<option value="河北">河北</option>
					<option value="山西">山西</option>
					<option value="河南">河南</option>
					<option value="吉林">吉林</option>
					<option value="黑龙江">黑龙江</option>
					<option value="内蒙古">内蒙古</option>
					<option value="山东">山东</option>
					<option value="安徽">安徽</option>
					<option value="浙江">浙江</option>
					<option value="福建">福建</option>
					<option value="湖南">湖南</option>
					<option value="广西">广西</option>
					<option value="江西">江西</option>
					<option value="贵州">贵州</option>
					<option value="云南">云南</option>
					<option value="西藏">西藏</option>
					<option value="海南">海南</option>
					<option value="甘肃">甘肃</option>
					<option value="宁夏">宁夏</option>
					<option value="青海">青海</option>
					<option value="新疆">新疆</option>
				</select>
			</div>
			<div class='col-xs-2'>
				<button class='btn btn-default btn-info'  id='getOrderBtn'>自动抢单</button>
			</div>
			<div class='col-xs-2'>
				<button class='btn btn-default btn-danger' disabled="true" id='stopGetOrderBtn'>停止抢单</button>
			</div>
            <div id="jplayer"></div>
		</div>
        <br />
       
    */}).toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1];
    /*
     /// 测试
     <div class='row'>
             <div class='form-inline'>
				 <label>
                    <input type="checkbox" id="autosubmit"  value="1" checked="false">
                    (测试,非押金用户慎用)自动提交待充值:剩余时间设置
                    <input type="number" id="limit" value=3 class="form-control"/>
                    分钟。
                    <a id='diff_time'>-1</a>秒后将自动提交。
                 </label>
			</div>
         </div>
         <div class='row'>
             <div class='col-xs-5' id="phonenumDiv">
                 <label class='form-control'>
                     <b id="phone_num"><font color='red'>无</font></b>
                </label>
			</div>
         </div>
    */
    var setup_ui = function() {
        $('body > div.main_content > div > div > div > div > div.col-sm-10 > div.row.customer_container > div:nth-child(2)').append(html);

        // 复制黏贴号码工具,方便做单。
        var realtime_table = $('body > div.main_content > div > div > div.col-lg-10.col-sm-9 > div > div:nth-child(5) > table');
        if(realtime_table.find("tr").size() > 1) {
            var number = realtime_table.find("tr").eq(1).find('td').eq(2).children('button').val();
            $('#phone_num').children('font').text(number);
            $('#phonenumDiv').after("<div class='col-xs-2'> <button class='btn btn-info copy_btn' id='mycopybtn' value='"+ number + "'>复制</button></div>");
            $("#mycopybtn").click(function(){
                copyText($(this).val());
            });
            var orderId = realtime_table.find("tr").eq(1).find('td').eq(0).text();
            $('#mycopybtn').parent('div').after("<div class='col-xs-2'> <button id='succ_btn' class='btn btn-success' >我已充值</button></div>");
            $("#succ_btn").on('click', function(){
                   sumbit_ticket_without_comfirm(orderId);
            });
        }

    };



    var setup_storage = function() {
        // 本地存储面值,那么就使用本地存储的面值。
        if(localStorage.getItem('TICKET_PRICE') != null) {
            $('#amount').find("option:selected").attr("selected",false);
            $('#amount').find("option[value='"+ localStorage.getItem('TICKET_PRICE')+"']").attr("selected",true);
        }
        // 本地存储倒计时,就是用本地的倒计时
        if(localStorage.getItem("AUTOSUBMIT") != null) {
            $('#limit').val(parseInt(localStorage.getItem("AUTOSUBMIT")));
        }
    };

    setup_ui();
    setup_storage();




    var check_submit = function () {
        if ($('#autosubmit').attr("checked") == undefined) return ;
        var limit = $('#limit').val() * 60;
        localStorage.setItem("AUTOSUBMIT", $('#limit').val());
        var timestamp = parseInt((new Date()) / 1000) - INIT_TIME;
        $("body > div.main_content > div > div > div.col-lg-10.col-sm-9 > div > div:nth-child(5) > table tr .timeout").each(function () {
            var t = $(this);
            var diff = parseInt(t.attr("otime")) - timestamp;
            $("#diff_time").html((diff-limit) + '');
            if (diff > 0 && diff < limit) {
                   sumbit_ticket_without_comfirm(t.closest('tr').find(' td:nth-child(1)').html());
            }
        });
    };

    // 每1s检测一次订单提交。
    intervalId = setInterval(check_submit, 1000);


    // 修改订单倒计时提交时调用。
    $("#autosubmit").on('change', function() {
        if ($('#autosubmit').attr("checked") == "checked") {
            $('#autosubmit').attr("checked", false);
            if(intervalId != 0) {
                clearInterval(intervalId);
            }
        }
        else {
            $('#autosubmit').attr("checked", "checked");
            intervalId = setInterval(check_submit, 1000);
        }
    });

    var Refresh = function () {
        if(stop == true) {return;}
        // 查询订单……
        $.get('/customer/order/mytasks', function(msg) {
            var label = "获取" + $('#amount').val() + "元订单";
            if(msg.indexOf(label) < 0) {
                 //my_message('已查询' + cnt + '次,平台暂未订单,请稍后再试');
                 $("#getOrderBtn").text('已查询' + cnt + '次');
                 cnt ++;
                 setTimeout(Refresh, 100);
            }
            else {
                 getOrder();
            }
        });
        // 到这里没有被return, 说明有订单了,但是不一定有指定省份。
        // 更特殊的,有人可能在你查到和获取期间抢走这个单。
        var getOrder = function() {
            var url = 'ajax?action=get_tasks&amount=' + $('#amount').val();
            $.getJSON(url, function(msg) {
                //alert(msg.data);
                //<input type=\"hidden\" name=\"SEQ\" value=\"1519654006\" \/>
                var index = msg.data.indexOf("SEQ\" value=\"");  //
                //var len = 'SEQ\" value=\"'.length;  // 12
                //alert(index + " " + len);
                var idx = parseInt(index) + 12;
                var end = msg.data.indexOf("\"",idx);
                var SEQ = msg.data.substring(idx, end);
                var data = {
                    'prov_name': $('#prov_name').val(),
                    'operator_id': $('#carrier').val(),
                    'amount':$('#amount').val(),
                    'count':1,
                    'contract': [1, 2, 4, 8, 16, 32, 64, 128, 256, 512],
                    'SEQ':SEQ
                };
                $.post('/customer/order/get_tasks', data, function(msg) {
                    if(msg.indexOf('上报我已充值') > 0){
                        my_message('成功获取订单, 1s后自动刷新');
                        $("#jplayer").jPlayer('play');
                        setTimeout(function() {
                            window.location.href = "/customer/order/mytasks";
                        }, 1000);
                    }
                    else {
                        my_message('没有所查询的省份,或者别人比你抢先一步了');
                        setTimeout(Refresh, 2000);
                        $("#getOrderBtn").text('已查询' + cnt + '次');
                        cnt ++;
                    }
                });
            });
        };
    };

    // 获取订单
    $("#getOrderBtn").on('click', function() {
		//alert("自动抢单");
		//css
		$("#stopGetOrderBtn").attr('disabled',false);
		$("#getOrderBtn").attr('disabled', 'disabled');
		//$("#getOrderBtn").text("抢单中");
        stop = false;
        cnt = 1;
        localStorage.setItem('TICKET_PRICE', $('#amount').val());

		Refresh();
     });

    // 结束抢单
    $("#stopGetOrderBtn").on('click', function() {
		my_message('停止抢单');
		//css
		$("#stopGetOrderBtn").attr('disabled','disabled');
		$("#getOrderBtn").attr('disabled',false);
		$("#getOrderBtn").text("自动抢单");
        stop = true;
     });

    // Your code here...
})();