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": "执行失败"})
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})
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})
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": "设置异常执行成功"})
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'})
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"))
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, })
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 })
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": "修改订单状态成功"})
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'))
def get_users(): access_log.info('users ok') out = [] for x in AdminUser.objects.filter(): out.append(x['username']) return jsonify({'users': out})
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})
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, )
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)
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())
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 "")
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})
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})
def unauthorized(): access_log.info('[Unauthorized]') return make_response(jsonify({'error': 'Unauthorized access'}), 401)
def blog_api(): qset = {} posts = parse_page_data(Post.objects(**qset)) access_log.info(posts) return jsonify({'result': posts})