Exemplo n.º 1
0
def user_config():
    params = request.values.to_dict()
    action = params.get("action", '') or params.get("name")
    if action == "yh_type":
        user = AdminUser.objects.get(username=params["pk"])
        user.modify(yh_type=params["value"])
        return jsonify({"code": 1, "msg": "设置网银类型成功" })
    elif action == "jd_type":
        lst = request.form.getlist("value[]")
        user = AdminUser.objects.get(username=params["pk"])
        user.modify(source_include=lst)
        return jsonify({"code": 1, "msg": "设置接单类型成功" })
    elif action == "set_open":
        user = AdminUser.objects.get(username=params["username"])
        flag = params["flag"]
        if flag == "true":
            user.modify(is_close=False)
            access_log.info("[open_account] %s 关闭账号: %s ", current_user.username, user.username)
            return jsonify({"code": 1, "msg": "账号%s开启成功" % user.username})
        else:
            user.modify(is_close=True)
            access_log.info("[open_account] %s 开启账号: %s ", current_user.username, user.username)
            return jsonify({"code": 1, "msg": "账号%s关闭成功" % user.username})
    elif action == u"refresh":
        user = AdminUser.objects.get(username=params["username"])
        info = {
            "dt": dte.now(),
            "yue": float(params.get("yue", 0)),
            "yuebao": float(params.get("yuebao", 0)),
            "account": params.get("account", "")
        }
        user.update(status_check_info=info)
        return jsonify({"code": 1, "msg": "执行成功"})
    return jsonify({"code": 0, "msg": "执行失败"})
Exemplo n.º 2
0
def change_kefu():
    params = request.values.to_dict()
    order_no, kefu_name = params["pk"], params["value"]
    order = Order.objects.get(order_no=order_no)
    if order.yc_status != YC_STATUS_ING and order.status in [12, 13, 14]:
        return jsonify({"code": 0, "msg": "已支付,不许转!"})
    if not kefu_name:
        return jsonify({"code": 0, "msg": "请选择目标账号!"})
    if order.kefu_username != current_user.username:
        return jsonify({"code": 0, "msg": "这个单不是你的!"})
    try:
        target = AdminUser.objects.get(username=kefu_name)
    except:
        msg = "不存在%s这个账号" % kefu_name
        return jsonify({"code": 0, "msg": msg})
    if order.yc_status != YC_STATUS_ING and (not target.is_switch and target.username not in ["luojunping", "xiangleilei", "chengxiaokang"]):
        msg = "%s没在接单,禁止转单给他。" % target.username
        return jsonify({"code": 0, "msg": msg})
    access_log.info("%s 将%s转给 %s", current_user.username, order_no, kefu_name)
    order.update(kefu_username=target.username, kefu_assigntime=dte.now())
    assign.add_dealing(order, target)
    assign.remove_dealing(order, current_user)
    order.add_trace(OT_TRANSFER, "%s 将订单转给 %s" % (current_user.username, target.username))
    msg = "成功转给%s" % target.username

    if "snmpay" in current_user.username and target.username == "luojunping":
        try:
            order.refresh_status()
            assert order.status in [STATUS_ISSUE_FAIL, STATUS_ISSUE_SUCC, STATUS_ISSUE_ING]
        except:
            subject = "异常单转入(%s=>%s): %s %s, " % (current_user.username, target.username, order.crawl_source, order.order_no)
            async_send_email(subject, subject)
    return jsonify({"code": 1, "msg": msg})
Exemplo n.º 3
0
def get_api_news():
    path = request.args.get('path', '')
    params = request.values.to_dict()
    pk = params.get('pk', '')
    commit = params.get('commit', '')
    access_log.info('path: %s, pk: %s, commit: %s' %(path, pk, commit))
    # 获取具体某一篇文章
    if request.method == 'GET' and path:
        news = Jianshu.objects(Q(link_id__icontains=path)).first()
        return jsonify({'data': news})

    elif request.method == 'DELETE' and pk:
        try:
            qset = dict(link_id=pk)
            access_log.info(qset)
            Jianshu.objects(**qset).first().delete()
            return jsonify({'ok': '已经成功删除'})
        except:
            pass
    # 获取文章列表, todo ajax取得文章列表, 分页
    elif not path and request.method == 'GET':
        news = Jianshu.objects()
        ret = parse_page_data(news)
        return jsonify({'ret': ret})
    elif pk and not commit and request.method == 'POST':
        return jsonify({'error': u'请添加具体评论'})
    # 添加评论
    elif pk and commit and request.method == 'POST':
        queryset = dict(link_id__icontains=pk)
        ret = Jianshu.objects(**queryset).first()
        ret.update(add_to_set__commit={'commit': commit, 'create_time': datetime.datetime.now()})
        return jsonify({'ok': commit})
Exemplo n.º 4
0
    def post(self, order_no):
        order = Order.objects.get_or_404(order_no=order_no)
        kefu = request.form.get("username")
        desc = request.form.get("desc")
        action = request.form.get("action", "set")
        if action == "del":
            if order.yc_status != YC_STATUS_ING:
                return jsonify({"code":0, "msg": "执行失败, 状态不对"})
            old_kefu = AdminUser.objects.get(username=order.kefu_username)
            order.modify(yc_status=YC_STATUS_DONE, kefu_username=kefu)
            msg = "%s解除异常状态, 处理人:%s=>%s 描述:%s" % (current_user.username, old_kefu.username, kefu, desc)
            order.add_trace(OT_YICHANG2, msg)
            if order.status in [STATUS_WAITING_LOCK, STATUS_WAITING_ISSUE, STATUS_LOCK_RETRY]:
                assign.add_dealing(order, AdminUser.objects.get(username=kefu))
            elif order.status == STATUS_ISSUE_ING:
                assign.add_dealed_but_not_issued(order, AdminUser.objects.get(username=kefu))
            access_log.info("[yichangop] %s", msg)
            return jsonify({"code":1, "msg": "解除异常执行成功"})
        else:
            if order.yc_status == YC_STATUS_ING:
                return jsonify({"code":0, "msg": "执行失败,已经是异常单了"})

            old_kefu = None
            if order.kefu_username:
                old_kefu = AdminUser.objects.get(username=order.kefu_username)
            order.modify(yc_status=YC_STATUS_ING, kefu_username=kefu, kefu_assigntime=dte.now())
            msg = "%s将单设为异常单, 处理人:%s=>%s 描述:%s" % (current_user.username, getattr(old_kefu, "username", ""), kefu, desc)
            order.add_trace(OT_YICHANG, msg)
            if old_kefu:
                assign.remove_dealing(order, old_kefu)
            access_log.info("[yichangop] %s", msg)
            return jsonify({"code":1, "msg": "设置异常执行成功"})
Exemplo n.º 5
0
def add_test():
    # 获取json数据,post ajax
    info = request.json
    access_log.info(info)
    if request.method == 'POST':
        try:
           result = int(info['a']) + int(info['b'])
           return jsonify(result=result)
        except ValueError:
            return jsonify({'error': 'You can input numbers'})
Exemplo n.º 6
0
def user_switch():
    switch = request.form.get('switch', "off")
    is_switch = 0
    if switch == "on":
        is_switch = 1
    msgs = {0: "关闭", 1: "开启"}
    if is_switch != current_user.is_switch:
        current_user.modify(is_switch=is_switch)
    flash("%s接单" % msgs[is_switch])
    access_log.info("[user_switch] %s %s接单", current_user.username, msgs[is_switch])
    return redirect(url_for("dashboard.my_order"))
Exemplo n.º 7
0
def check():
    realip = request.environ['REMOTE_ADDR']
    access_log.info('[check ok ip: %s]'%realip)
    # 分页
    # posts = Jianshu.objects()
    # ret = parse_page_data(posts)
    return jsonify({
        'code': 1,
        'message': 'ok',
        # 'data': ret,
    })
Exemplo n.º 8
0
def ajax_login():
    # ajax登陆验证
    username = request.args.get('username')
    password = request.args.get('password')
    access_log.info('username: %s password: %s' %(username, password))
    try:
        u = AdminUser.objects.get(username=username, password=password)
        if u:
            flask_login.login_user(u)
            # return redirect(url_for('dashboard.get_news_list'))
            return jsonify({'ok': 1})
    except AdminUser.DoesNotExist:
        return jsonify({'error': 1 })
Exemplo n.º 9
0
 def post(self, order_no):
     order = Order.objects.get_or_404(order_no=order_no)
     status = int(request.form.get("status"))
     desc = request.form.get("desc",'')
     action = request.form.get("action", "set")
     if order.status in [STATUS_ISSUE_SUCC, STATUS_ISSUE_ING, STATUS_LOCK_FAIL]:
         return jsonify({"code": 0, "msg": "%s不允许修改"%STATUS_MSG[order.status]})
     if not desc and status != STATUS_LOCK_RETRY:
         return jsonify({"code": 0, "msg": "描述不能为空"})
     msg = "%s修改订单状态:%s=>%s 描述:%s" % (current_user.username,STATUS_MSG[order.status], STATUS_MSG[status], desc)
     order.add_trace(OT_MODIFY_ORDER_STATUS, msg)
     order.modify(status=status)
     if status in [STATUS_LOCK_FAIL, STATUS_ISSUE_FAIL]:
         now = dte.now()
         if status == STATUS_LOCK_FAIL:
             order.line.modify(left_tickets=0, update_datetime=now, refresh_datetime=now)
         issued_callback.delay(order.order_no)
         return jsonify({"code": 1, "msg": "修改订单状态成功"})
     access_log.info("[modify_order_status] %s", msg)
     return jsonify({"code":1, "msg": "修改订单状态成功"})
Exemplo n.º 10
0
    def post(self):
        name = request.form.get("username")
        pwd = request.form.get("password")
        session["username"] = name
        session["password"] = pwd
        # code = request.form.get("validcode")
        # if code != session.get("img_valid_code"):
        #     flash("验证码错误", "error")
        #     return redirect(url_for('dashboard.login'))

        access_log.info('login post test')
        try:
            access_log.info('%s %s' %(name, md5(pwd)))
            u = AdminUser.objects.get(username=name, password=md5(pwd), is_close=False)
            #  flash("登陆成功", "info")
            flask_login.login_user(u)
            return redirect(url_for('dashboard.index'))
        except AdminUser.DoesNotExist:
            access_log.info('login error')
            flash("用户名或密码错误!!!", "error")
            return redirect(url_for('dashboard.login'))
Exemplo n.º 11
0
def get_users():
    access_log.info('users ok')
    out = []
    for x in AdminUser.objects.filter():
        out.append(x['username'])
    return jsonify({'users': out})
Exemplo n.º 12
0
def get_tasks(task_id):
    access_log.info('ok')
    task = [task for task in tasks if task['id'] == task_id]
    if len(task) == 0:
        abort(404)
    return jsonify({'task': task})
Exemplo n.º 13
0
def order_list():
    query = {}
    params = request.values.to_dict()

    source = params.get("source", "")
    source_account = params.get("source_account", "")
    if source:
        query.update(crawl_source=source)
        if source_account:
            query.update(source_account=source_account)

    status = int(params.get("status", "0"))
    if status:
        query.update(status=status)
    else:
        params["status"] = "0"

    pay_status = params.get("pay_status", "")
    if pay_status:
        query.update(pay_status=int(pay_status))
    yc_status = params.get("yc_status", "")
    if yc_status:
        query.update(yc_status=int(yc_status))
    pay_channel = params.get("pay_channel", "")
    if pay_channel:
        query.update(pay_channel=pay_channel)
    order_channel = params.get("order_channel", "")
    if order_channel:
        query.update(order_channel=order_channel)
    q_key = params.get("q_key", "")
    q_value = params.get("q_value", "").strip()

    Q_query = None
    if q_key and q_value:
        if q_key == "contact_phone":
            query.update(contact_info__telephone=q_value)
        elif q_key == "contact_name":
            query.update(contact_info__name=q_value)
        elif q_key == "contact_idcard":
            query.update(contact_info__id_number=q_value)
        elif q_key == "sys_order_no":
            query.update(order_no=q_value)
        elif q_key == "out_order_no":
            query.update(out_order_no=q_value)
        elif q_key == "raw_order_no":
            query.update(raw_order_no=q_value)
        elif q_key == "trade_no":
            Q_query = (db.Q(pay_trade_no=q_value)|db.Q(refund_trade_no=q_value))
        elif q_key == "pay_order_no":
            query.update(pay_order_no=q_value)
        elif q_key == "channel_order_no":
            query.update(channel_order_no=q_value)

    kefu_name = params.get("kefu_name", "")
    if kefu_name:
        if kefu_name == "None":
            kefu_name=None
        query.update(kefu_username=kefu_name)

    today = dte.now().strftime("%Y-%m-%d")
    str_date = params.get("str_date", "") or today
    end_date = params.get("end_date", "") or today
    query.update(create_date_time__gte=str_date)
    query.update(create_date_time__lt=dte.strptime(end_date, "%Y-%m-%d")+timedelta(days=1))
    params["str_date"] = str_date
    params["end_date"] = end_date

    pay_account = params.get("pay_account", "")
    if pay_account:
        query.update(pay_account=pay_account)

    qs = Order.objects.filter(Q_query, **query).order_by("-create_date_time")
    action = params.get("action", "查询")
    if action == "导出CSV":
        t1 = time.time()
        access_log.info("start export order, %s, condition:%s", current_user.username, request.values.to_dict())
        si = StringIO.StringIO()
        si.write("\xEF\xBB\xBF")
        row_header =[
            (lambda o: "%s," % o.order_no, "系统订单号"),
            (lambda o: "%s," % o.out_order_no, "12308订单号"),
            (lambda o: "%s," % o.raw_order_no, "源站订单号"),
            (lambda o: STATUS_MSG[o.status], "订单状态"),
            (lambda o: "%s," % o.pay_trade_no, "付款流水号"),
            (lambda o: "%s," % o.refund_trade_no, "退款流水号"),
            (lambda o: PAY_STATUS_MSG[o.pay_status], "支付状态"),
            (lambda o: o.kefu_username, "代购人员"),
            (lambda o: o.contact_info["name"], "姓名"),
            (lambda o: "%s," % o.contact_info["telephone"], "手机号"),
            (lambda o: o.create_date_time.strftime("%Y-%m-%d %H:%M:%S"), "下单时间"),
            (lambda o: SOURCE_INFO[o.crawl_source]["name"], "源站"),
            (lambda o: "%s," % o.source_account, "源站账号"),
            (lambda o: o.ticket_amount, "订票数"),
            (lambda o: o.order_price, "订单金额"),
            (lambda o: o.pay_account, "支付账号"),
            (lambda o: o.pay_money, "支付金额"),
            (lambda o: o.refund_money, "退款金额"),
            (lambda o: o.starting_name.split(";")[0], "出发城市"),
            (lambda o: o.starting_name.split(";")[1], "出发站"),
            (lambda o: o.destination_name.split(";")[1], "目的站"),
            (lambda o: o.bus_num, "车次号"),
            (lambda o: o.drv_datetime.strftime("%Y-%m-%d %H:%M"), "出发时间"),
        ]
        cw = csv.DictWriter(si, map(lambda t: t[0], row_header))
        cw.writerow({t[0]: t[1] for t in row_header})
        info_list = []
        for o in qs:
            d = {}
            for t in row_header:
                func = t[0]
                d[func] = func(o)
            info_list.append(d)
        cw.writerows(info_list)
        output = make_response(si.getvalue())
        output.headers["Content-Disposition"] = "attachment; filename=%s_%s.csv" % (str_date, end_date)
        output.headers["Content-type"] = "text/csv"
        access_log.info("end export order, %s, time: %s", current_user.username, time.time()-t1)
        return output
    else:
        pay_accounts = qs.distinct("pay_account")
        kefu_count = {d["_id"]["kefu_username"]: d["total"] for d in qs.aggregate({"$group": {"_id": {"kefu_username": "******"}, "total":{"$sum": 1}}})}
        site_count = {d["_id"]["crawl_source"]: d["total"] for d in qs.aggregate({"$group": {"_id": {"crawl_source": "$crawl_source"}, "total":{"$sum": 1}}})}
        status_count = {str(d["_id"]["status"]): d["total"] for d in qs.aggregate({"$group": {"_id": {"status": "$status"}, "total":{"$sum": 1}}})}
        order_channel_count= {str(d["_id"]["channel"]): d["total"] for d in qs.aggregate({"$group": {"_id": {"channel": "$order_channel"}, "total":{"$sum": 1}}})}

        status_count["0"] = qs.count()
        account_count = {}
        if source:
            account_count = {str(k): v for k,v in qs.filter(crawl_source=source).item_frequencies('source_account', normalize=False).items()}
        stat = {
            "money_total": qs.aggregate_sum("order_price"),
            "order_total": qs.count(),
            "ticket_total": qs.aggregate_sum("ticket_amount")
        }
        return render_template('dashboard/orders.html',
                                page=parse_page_data(qs),
                                status_msg={str(k): v for k,v in STATUS_MSG.items()},
                                pay_status_msg = PAY_STATUS_MSG,
                                yc_status_msg = YC_STAUTS_MSG,
                                source_info=SOURCE_INFO,
                                condition=params,
                                stat=stat,
                                pay_account_list=pay_accounts,
                                kefu_count=kefu_count,
                                status_count=status_count,
                                site_count=site_count,
                                account_count=account_count,
                                all_user=AdminUser.objects.filter(is_removed=0),
                                pay_channel=PAY_CHANNEL,
                                order_channel_count=order_channel_count,
                                )
Exemplo n.º 14
0
def query_order_detail():
    """
    订单详情接口

    Input:
        {
            "sys_order_no": "1111"          # 系统订单号
            "out_order_no": "2222"          #12308订单号
        }


    Return:
        {
            "code": 1,
            "message": "OK",
            "data":{
                "out_order_no": "111",      # 商户订单号
                "raw_order_no": "222",      # 源站订单号
                "sys_order_no": "333",      # 系统订单号
                "status": 14,               # 订单状态
                "rider_info":[{             # 乘客信息
                    "name":"",
                    "telephone": xx,
                    "id_type":1,
                    "id_number": yy,
                    "agen_level": 1,
                }],
                "contacter_info": {
                    "name":"",
                    "telephone": xx,
                    "id_type":1,
                    "id_number": yy,
                    "agen_level": 1,
                }
                "ticket_info": {                # 车票信息
                    "start_city": "",
                    "start_station": "",
                    "dest_city": "",
                    "dest_station": "",
                    "drv_date": "",
                    "drv_time": "",
                    "total_price": "",
                }
             }
        }
    """
    try:
        data = {}
        post = json.loads(request.get_data())
        sys_order_no = post["sys_order_no"]
        out_order_no = post.get("out_order_no", "")
    except:
        return jsonify({
            "code": RET_PARAM_ERROR,
            "message": "parameter error",
            "data": data
        })
    try:
        order = Order.objects.get(
            db.Q(order_no=sys_order_no) | db.Q(out_order_no=out_order_no))
    except Order.DoesNotExist:
        return jsonify({
            "code": RET_ORDER_404,
            "message": "order not exist",
            "data": ""
        })
    pick_info = []
    if order.status == STATUS_ISSUE_SUCC:
        starting_name_list = order.starting_name.split(';')
        destination_name_list = order.destination_name.split(';')
        drv_datetime_list = dte.strftime(order.drv_datetime,
                                         "%Y-%m-%d %H:%M").split(' ')
        for i, code in enumerate(order.pick_code_list):
            pick_info.append({
                "pick_code": code,
                "pick_msg": order.pick_msg_list[i]
            })
        data = {
            "out_order_no": order.out_order_no,
            "raw_order_no": order.raw_order_no,
            "sys_order_no": order.order_no,
            "status": order.status,
            "contacter_info": order.get_contact_info(),
            "rider_info": order.get_rider_info(),
            "need_send_msg": order.need_send_msg,
            "ticket_info": {
                "start_city": starting_name_list[0],
                "start_station": starting_name_list[1],
                "dest_city": destination_name_list[0],
                "dest_station": destination_name_list[1],
                "drv_date": drv_datetime_list[0],
                "drv_time": drv_datetime_list[1],
                "total_price": order.order_price,
            },
            "pick_info": pick_info
        }
        ret = {"code": RET_OK, "message": "OK", "data": data}
    else:
        data = {
            "out_order_no": order.out_order_no,
            "raw_order_no": order.raw_order_no,
            "sys_order_no": order.order_no,
            "status": order.status,
            "contacter_info": {},
            "rider_info": [],
            "ticket_info": {},
            "pick_info": pick_info,
            "need_send_msg": order.need_send_msg,
        }
        ret = {"code": RET_OK, "message": "OK", "data": data}
    access_log.info("[query_order_detail] order:%s out_order_no:%s %s",
                    order.order_no, order.out_order_no, ret)
    return jsonify(ret)
Exemplo n.º 15
0
def log_request():
    access_log.info("[request_api] %s %s %s",
                    request.environ.get('HTTP_X_REAL_IP', request.remote_addr),
                    request.url, request.get_data())
Exemplo n.º 16
0
def log_request():
    uname = getattr(current_user, "username", None)
    access_log.info("[request_dashboard] %s %s %s %s", uname, request.environ.get('HTTP_X_REAL_IP', request.remote_addr), request.url, dict(request.form) or "")
Exemplo n.º 17
0
def get_news_list():
    params = request.values.to_dict()
    source = params.get('source', '')
    keyword = params.get('keyword', '')
    str_date = params.get('str_date', '')
    end_date = params.get('end_date', '')
    queryset = {}
    # access_log.info(current_user.username)
    # access_log.info(session.viewitems())
    # access_log.info(request.environ)
    # access_log.info(dir(g))
    # access_log.info(current_app.config)
    # access_log.info(request.cookies)
    if keyword:
        queryset.update(title__icontains=keyword)
    if source:
        queryset.update(source=source)
    if str_date:
        queryset.update(update_datetime__gte=str_date)
    if end_date:
        queryset.update(update_datetime__lte=end_date)
    action = params.get("action", "查询")

    # 导出csv, 这里可以为响应流(yield)生成
    if action == "导出csv":
        if current_user.is_anonymous:
            return redirect(url_for('dashboard.login'))
        qs = Jianshu.objects.filter(**queryset)
        t1 = time.time()
        access_log.info("start export order, %s, condition:%s", current_user.username, request.values.to_dict())
        si = StringIO.StringIO()
        si.write("\xEF\xBB\xBF")
        row_header =[
            (lambda o: "%s," % o.title, "title"),
            (lambda o: "%s," % o.author, "author"),
            (lambda o: "%s," % o.url, "url"),
        ]
        cw = csv.DictWriter(si, map(lambda t: t[0], row_header))
        cw.writerow({t[0]: t[1] for t in row_header})
        info_list = []
        for o in qs:
            d = {}
            for t in row_header:
                func = t[0]
                d[func] = func(o)
            info_list.append(d)
        cw.writerows(info_list)
        output = make_response(si.getvalue())
        output.headers["Content-Disposition"] = "attachment; filename=%s.csv" % (time.strftime("%Y_%m_%d"))
        output.headers["Content-type"] = "text/csv"
        access_log.info("end export order, %s, time: %s", current_user.username, time.time()-t1)
        return output
    # page = int(request.args.get('page', 1))
    # if page > 1:
    #     queryset.update(page=page)
    # else:
    #     queryset.update(page=1)
    # paginate实现分页,per_page, page 搜索条件限制
    # news = Jianshu.objects.paginate(per_page=20, **queryset)
    # if news.items:
    #     return render_template(
    #         'dashboard/new_list.html',
    #         news=news,
    #         # 定制分页
    #         # page=parse_page_data(news1),
    #     )
    # else:
    #     return jsonify({'error': 1})

    # parse_page_data定制分页
    try:
        news = Jianshu.objects(**queryset).order_by('-update_datetime')
    except:
        news = []
    if news:
        source = Jianshu.objects.distinct('source')
        # realip = request.environ['REMOTE_ADDR']
        # access_log.info('Your ip is %s' %realip)
        return render_template(
            'dashboard/new_list1.html',
            # 定制分页
            page=parse_page_data(news),
            # 一些搜索条件, 一般可以加到value里
            condition=params,
            source=source,
        )
    else:
        return jsonify({'error': 1})
Exemplo n.º 18
0
def get_news():
    access_log.info('news ok')
    out = []
    for x in News.objects.filter()[:10]:
        out.append({x['title']: x['url']})
    return jsonify({'news': out})
Exemplo n.º 19
0
def unauthorized():
    access_log.info('[Unauthorized]')
    return make_response(jsonify({'error': 'Unauthorized access'}), 401)
Exemplo n.º 20
0
def blog_api():
    qset = {}
    posts = parse_page_data(Post.objects(**qset))
    access_log.info(posts)
    return jsonify({'result': posts})