def refund_balance(): ''' 卡退款接口 :return: ''' try: data = json.loads(request.form.get('data')) card_no = json.loads(request.form.get('card_no')) pay_passwd = SqlData().search_card_field('pay_passwd', card_no) if "-" in str(data): return jsonify({'code': RET.SERVERERROR, 'msg': '请输入正确金额!'}) refund_money = str(round(float(data) * 100)) resp = QuanQiuFu().trans_account_cinsume(card_no, pay_passwd, refund_money) resp_code = resp.get('resp_code') resp_msg = resp.get('resp_msg') results = {"code": RET.OK, "msg": MSG.OK} if resp_code == "0000": user_id = g.user_id try: detail = resp.get('response_detail') remain = int(detail.get('balance')) / 100 SqlData().update_card_remain('remain', remain, card_no) except Exception as e: logging.error('退款更新卡余额失败!' + str(e)) refund = SqlData().search_user_field('refund', user_id) hand_money = round(refund * float(data), 2) do_money = round(float(data) - hand_money, 2) before_balance = SqlData().search_user_field('balance', user_id) # 更新账户余额 SqlData().update_balance(do_money, user_id) balance = SqlData().search_user_field('balance', user_id) # 将退款金额转换为负数 do_money = do_money - do_money * 2 n_time = xianzai_time() SqlData().insert_account_trans(n_time, TRANS_TYPE.IN, DO_TYPE.REFUND, 1, card_no, do_money, hand_money, before_balance, balance, user_id) # 更新客户充值记录 pay_num = sum_code() t = xianzai_time() SqlData().insert_top_up(pay_num, t, do_money, before_balance, balance, user_id, '退款') results['msg'] = resp_msg else: resp_msg = resp.get('resp_msg') s = '卡余额领回失败,状态码: ' + resp_code + ',信息: ' + resp_msg logging.error(s) results['code'] = RET.SERVERERROR results['msg'] = resp_msg return jsonify(results) except Exception as e: logging.error(str(e)) results = {"code": RET.SERVERERROR, "msg": MSG.SERVERERROR} return jsonify(results)
def top_up(): results = {"code": RET.OK, "msg": MSG.OK} try: data = request.form.get('money') name = request.form.get('name') pay_num = sum_code() t = xianzai_time() money = float(data) before = SqlData().search_user_field_name('balance', name) user_id = SqlData().search_user_field_name('id', name) # 更新账户余额 SqlData().update_user_balance(money, user_id) # 实时查询当前余额,不以理论计算为结果 balance = SqlData().search_user_field('balance', user_id) # 更新客户充值记录 SqlData().insert_top_up(pay_num, t, money, before, balance, user_id, '系统') phone = SqlData().search_user_field_name('phone_num', name) if phone: CCP().send_Template_sms(phone, [name, t, money], 478898) return jsonify(results) except Exception as e: logging.error(e) results['code'] = RET.SERVERERROR results['msg'] = MSG.SERVERERROR return jsonify(results)
def login(): ''' 注册接口 :return: ''' if request.method == 'GET': context = dict() # 判断是否是通过中介链接过来的,是则保留middle_key referer = request.headers.get('Referer') if referer: results = re.findall('middle_key=(.*)', referer) if results: context['middle_key'] = '?middle_key=' + results[0] return render_template('user/login.html', **context) if request.method == 'POST': user_name = request.form.get('uname') user_pass = request.form.get('upwd') if not all([user_name, user_pass]): return jsonify({'code': RET.SERVERERROR, 'msg': '请完善登录信息后重试!'}) results = {'code': RET.OK, 'msg': MSG.OK} user_data = SqlData().search_user_info(user_name) try: if user_data: user_id = user_data.get('user_id') pass_word = user_data.get('password') name = user_data.get('name') stop_time = user_data.get('stop_time') n_time = xianzai_time() if not verify_login_time(n_time, stop_time): results['code'] = RET.SERVERERROR results['msg'] = '账号已到期,请联系管理员处理!' return jsonify(results) if user_pass == pass_word: session['user_id'] = user_id session['name'] = name session.permanent = True return jsonify(results) else: results['code'] = RET.SERVERERROR results['msg'] = '账号密码错误!' return jsonify(results) else: results['code'] = RET.SERVERERROR results['msg'] = '账号密码错误!' return jsonify(results) except Exception as e: logging.error(str(e)) results['code'] = RET.SERVERERROR results['msg'] = '账号密码错误!' return jsonify(results)
def add_account(): results = {"code": RET.OK, "msg": MSG.OK} try: data = json.loads(request.form.get('data')) name = data.get('name') account = data.get('account') password = data.get('password') phone_num = data.get('phone_num') stop_time = data.get('stop_time') create_price = float(data.get('create_price')) refund = float(data.get('refund')) min_top = float(data.get('min_top')) max_top = float(data.get('max_top')) ed_name = SqlData().search_user_field_name('account', name) if ed_name: results['code'] = RET.SERVERERROR results['msg'] = '该用户名已存在!' return jsonify(results) if phone_num: ret = re.match(r"^1[35789]\d{9}$", phone_num) if not ret: results['code'] = RET.SERVERERROR results['msg'] = '请输入符合规范的电话号码!' return jsonify(results) else: phone_num = "" start_time = xianzai_time() SqlData().insert_account(account, password, phone_num, name, create_price, refund, min_top, max_top, start_time, stop_time) # 添加默认充值记录0元(用于单独充值结算总充值金额避免BUG) n_time = xianzai_time() account_id = SqlData().search_user_field_name('id', name) SqlData().insert_top_up('10001', n_time, 0, 0, 0, account_id, '系统') return jsonify(results) except Exception as e: logging.error(e) results['code'] = RET.SERVERERROR results['msg'] = MSG.SERVERERROR return jsonify(results)
def card_delete(): if request.method == "DELETE": # 判断是否是子账号用户 vice_id = g.vice_id if vice_id: auth_dict = RedisTool.hash_get('svb_vice_auth', vice_id) if auth_dict is None: return jsonify({ 'code': RET.SERVERERROR, 'msg': '抱歉您没有权限执行此操作!' }) c_card = auth_dict.get('refund') if c_card == 'F': return jsonify({ 'code': RET.SERVERERROR, 'msg': '抱歉您没有权限执行此操作!' }) card_number = request.args.get('card_number') card_status = SqlData.search_one_card_status(card_number) if card_status: card_id = SqlData.search_card_field('card_id', card_number) card_detail = svb.card_detail(card_id) if not card_detail: return jsonify({'code': RET.SERVERERROR, 'msg': '网络繁忙,请稍后重试!'}) available_balance = card_detail.get('data').get( 'available_balance') res = svb.delete_card(card_id) if res: user_id = g.user_id before_balance = SqlData.search_user_field('balance', user_id) update_balance = float(available_balance / 100) SqlData.update_balance(update_balance, user_id) balance = SqlData.search_user_field("balance", user_id) SqlData.update_card_info_card_no('status', 'F', card_number) n_time = xianzai_time() SqlData.insert_account_trans(n_time, TRANS_TYPE.IN, "注销", card_number, update_balance, before_balance, balance, user_id) return jsonify({ "code": RET.OK, "msg": '注销成功!退回金额:$' + str(update_balance) }) else: return jsonify({'code': RET.SERVERERROR, 'msg': '该卡已注销!'})
def add_account(): if request.method == 'GET': return render_template('admin/add_account.html') if request.method == 'POST': results = {"code": RET.OK, "msg": MSG.OK} try: data = json.loads(request.form.get('data')) name = data.get('name').strip() account = data.get('account').strip() password = data.get('password').strip() phone_num = data.get('phone_num') create_price = float(data.get('create_price')) min_top = float(data.get('min_top')) max_top = float(30000) ed_name = SqlData.search_user_field_name('account', name) if ed_name: results['code'] = RET.SERVERERROR results['msg'] = '该用户名已存在!' return jsonify(results) if phone_num: ret = re.match(r"^1[35789]\d{9}$", phone_num) if not ret: results['code'] = RET.SERVERERROR results['msg'] = '请输入符合规范的电话号码!' return jsonify(results) else: phone_num = "" SqlData.insert_account(account, password, phone_num, name, create_price, min_top, max_top) # 创建用户后插入充值数据 pay_num = sum_code() t = xianzai_time() user_id = SqlData.search_user_field_name('id', name) SqlData.insert_top_up(pay_num, t, 0, 0, 0, user_id) SqlData.insert_account_trans(date=t, trans_type="充值", do_type="支出", card_no=0, do_money=0, before_balance=0, balance=0, user_id=user_id) return jsonify(results) except Exception as e: logging.error(e) results['code'] = RET.SERVERERROR results['msg'] = MSG.SERVERERROR return jsonify(results)
def material(): if request.method == 'GET': '''完善资料的HTML界面''' user_name = request.args.get('name') if not user_name: return redirect('/user/') context = dict() context['user_name'] = user_name return render_template('user/material.html', **context) if request.method == 'POST': '''新用户的首次登录更换密码和完善电话信息''' data = json.loads(request.form.get('data')) pass_1 = data.get('pass_1') pass_2 = data.get('pass_2') phone = data.get('phone') user_acc = data.get('user_name') if not all([pass_1, pass_2, phone]): return jsonify({'code': RET.SERVERERROR, 'msg': '必填项不能为空!'}) if pass_1 != pass_2: return jsonify({'code': RET.SERVERERROR, 'msg': '两次输入密码不一致!'}) res = re.match( '(?!.*\s)(?!^[\u4e00-\u9fa5]+$)(?!^[0-9]+$)(?!^[A-z]+$)(?!^[^A-z0-9]+$)^.{8,16}$', pass_1) if not res: return jsonify({'code': RET.SERVERERROR, 'msg': '密码不符合要求!'}) res_phone = re.match( '^1(3[0-9]|4[5,7]|5[0-9]|6[2,5,6,7]|7[0,1,7,8]|8[0-9]|9[1,8,9])\d{8}$', phone) if not res_phone: return jsonify({'code': RET.SERVERERROR, 'msg': '请输入规范手机号码!'}) try: user_id = SqlData.search_user_id(user_acc) SqlData.update_user_field('password', pass_1, user_id) SqlData.update_user_field('phone_num', phone, user_id) user_name = SqlData.search_user_field('name', user_id) now_time = xianzai_time() SqlData.update_user_field('last_login_time', now_time, user_id) session['user_id'] = user_id session['name'] = user_name session['vice_id'] = None session.permanent = True return jsonify({'code': RET.OK, 'msg': MSG.OK}) except Exception as e: logging.error(str(e)) return jsonify({'code': RET.SERVERERROR, 'MSG': MSG.SERVERERROR})
def up_pay_pic(): results = {'code': RET.OK, 'msg': MSG.OK} file = request.files.get('file') file_name = sum_code() + ".png" file_path = DIR_PATH.PHOTO_DIR + "/" + file_name file.save(file_path) filename = sm_photo(file_path) if filename == 'F': os.remove(file_path) return jsonify({'code': RET.SERVERERROR, 'msg': '不可上传相同图片,请重新上传!'}) if filename: # 上传成功后插入信息的新的收款方式信息 os.remove(file_path) t = xianzai_time() SqlData().insert_qr_code(filename, t) return jsonify(results) else: return jsonify({'code': RET.SERVERERROR, 'msg': MSG.SERVERERROR})
def top_up(): ''' 卡充值接口 :return: ''' data = json.loads(request.form.get('data')) user_id = g.user_id card_no = data.get('card_no') top_money = data.get('top_money') if not check_float(top_money): results = {"code": RET.SERVERERROR, "msg": "充值金额不能为小数!"} return jsonify(results) balance = SqlData().search_user_field('balance', user_id) if float(top_money) > balance: results = {"code": RET.SERVERERROR, "msg": "账户余额不足!"} return jsonify(results) money = str(int(top_money) * 100) resp = QuanQiuFu().trans_account_recharge(card_no, money) resp_code = resp.get('resp_code') if resp_code == '0000': try: detail = resp.get('response_detail') remain = int(detail.get('balance')) / 100 SqlData().update_card_remain('remain', remain, card_no) except Exception as e: logging.error('充值后更新卡余额失败!' + str(e)) top_money = int(top_money) # 查询账户操作前的账户余额 before_balance = SqlData().search_user_field('balance', user_id) # 计算要扣除多少钱 do_money = top_money - top_money * 2 # 直接更新账户余额,不计算理论余额,用sql更新本次操作费用 SqlData().update_balance(do_money, user_id) # 查询扣除后的余额 balance = SqlData().search_user_field('balance', user_id) n_time = xianzai_time() SqlData().insert_account_trans(n_time, TRANS_TYPE.OUT, DO_TYPE.TOP_UP, 1, card_no, float(top_money), 0, before_balance, balance, user_id) return jsonify({"code": RET.OK, "msg": "充值成功!请刷新界面!"}) else: resp_msg = resp.get('resp_msg') s = '充值卡余额失败,状态码: ' + resp_code + ',信息: ' + resp_msg logging.error(s) return jsonify({"code": RET.SERVERERROR, "msg": "充值失败!请联系服务商解决!"})
def acc_pay(): if request.method == 'POST': money = request.form.get('money') name = request.form.get('name') try: _money = float(money) f_money = round(_money, 2) if f_money < 0: return jsonify({'code': RET.SERVERERROR, 'msg': '请输入正数金额!'}) balance = SqlData.search_user_field_name('balance', name) if f_money > balance: return jsonify({'code': RET.SERVERERROR, 'msg': '扣费余额不足!'}) user_id = SqlData.search_user_field_name('id', name) SqlData.update_balance(-f_money, user_id) a_balance = SqlData.search_user_field("balance", user_id) # balance = before_balance - create_price n_time = xianzai_time() SqlData.insert_account_trans(n_time, '支出', '系统扣费', 0, f_money, balance, a_balance, user_id) return jsonify({'code': RET.OK, 'msg': MSG.OK}) except Exception as e: logging.error(str(e)) return jsonify({'code': RET.SERVERERROR, 'msg': '请输入正确的消费金额!'})
def sub_review(): if request.method == 'GET': task_code = request.args.get('task_code') account = request.args.get('account') context = {'task_code': task_code, 'account': account} return render_template('order/sub_review.html', **context) if request.method == 'POST': # 注意更新账号的待留评状态 user_id = g.user_id results = {'code': RET.OK, 'msg': MSG.OK} data = json.loads(request.form.get('data')) note = data.get('note') task_code = data.get('task_code').strip() account = data.get('account') n_time = xianzai_time() SqlData().update_review_one('task_state', '已完成', task_code) SqlData().update_review_one('urgent', '', task_code) SqlData().update_review_one('review_time', n_time, task_code) SqlData().update_account_one('account_state', '', account, user_id) SqlData().update_account_review_num(account, user_id) if note: SqlData().update_review_one('review_note', note, task_code) return jsonify(results)
def pay_pic(): if request.method == 'GET': sum_money = request.args.get('sum_money') top_money = request.args.get('top_money') cus_name = request.args.get('cus_name') cus_account = request.args.get('cus_account') phone = request.args.get('phone') ex_change = request.args.get('ex_change') # 取出目前当前收款金额最低的收款码 qr_info = SqlData().search_qr_code('WHERE status=0') if not qr_info: url = '' else: url = '' value_list = list() for i in qr_info: value_list.append(i.get('sum_money')) value = min(value_list) for n in qr_info: money = n.get('sum_money') if value == money: url = n.get('qr_code') break context = dict() context['sum_money'] = sum_money context['top_money'] = top_money context['cus_name'] = cus_name context['cus_account'] = cus_account context['phone'] = phone context['url'] = url context['ex_change'] = ex_change return render_template('pay/pay_pic.html', **context) if request.method == 'POST': ''' 获取充值金额, 保存付款截图. 发送邮件通知管理员 ''' try: # 两组数据,1,表单信息充值金额,等一下客户信息 2,截图凭证最多可上传5张 # print(request.form) # print(request.files) data = json.loads(request.form.get('data')) top_money = data.get('top_money') sum_money = data.get('sum_money') cus_name = data.get('cus_name') cus_account = data.get('cus_account') phone = data.get('phone') exchange = data.get('exchange') url = json.loads(request.form.get('url')) results = {'code': RET.OK, 'msg': MSG.OK} # 保存所有图片 file_n = 'file_' pic_list = list() for i in range(5): file_name = file_n + str(i + 1) file_img = request.files.get(file_name) if file_img: now_time = sum_code() file_name = cus_account + "_" + now_time + str(i) + ".png" file_path = DIR_PATH.PHOTO_DIR + file_name file_img.save(file_path) pic_list.append(file_name) n_time = xianzai_time() vir_code = str(uuid.uuid1())[:6] ex_range = SqlData().search_admin_field('ex_range') hand = SqlData().search_admin_field('hand') if exchange != 'None': top_exchange = round((float(exchange) + ex_range) * (hand + 1), 5) top_exchange_str = ' 充值汇率为: ' + str(top_exchange) + ", " money_type = '人民币' else: money_type = '美元' top_exchange_str = '' context = "客户: " + cus_name + " , 于" + n_time + "在线申请充值: " + top_money + "美元, 折和" + money_type + ": " + \ sum_money + "元。本次计算汇率为: " + exchange + "," + top_exchange_str + " 验证码为: " + vir_code cus_id = SqlData().search_user_check(cus_name, cus_account) sum_money = float(sum_money) top_money = float(top_money) pic_json = json.dumps(pic_list) SqlData().insert_pay_log(n_time, sum_money, top_money, vir_code, '待充值', phone, url, pic_json, cus_id) # 获取要推送邮件的邮箱 top_push = SqlData().search_admin_field('top_push') top_dict = json.loads(top_push) email_list = list() for i in top_dict: email_list.append(top_dict.get(i)) for p in email_list: send(context, pic_list, p) return jsonify(results) except Exception as e: logging.error(str(e)) return jsonify({'code': RET.SERVERERROR, 'msg': MSG.SERVERERROR})
def top_up(): if request.method == 'GET': pay_time = request.args.get('pay_time') cus_name = request.args.get('cus_name') bank_msg = request.args.get('bank_msg') context = dict() context['pay_time'] = pay_time context['cus_name'] = cus_name context['bank_msg'] = bank_msg return render_template('verify_pay/check.html', **context) if request.method == 'POST': try: results = dict() data = json.loads(request.form.get('data')) pay_time = data.get('pay_time') cus_name = data.get('cus_name') check = data.get('check') ver_code = data.get('ver_code') bank_address = data.get("bank_msg") # 校验参数验证激活码 if check != 'yes': results['code'] = RET.SERVERERROR results['msg'] = '请确认已收款!' return jsonify(results) pass_wd = SqlData.search_pay_code('ver_code', cus_name, pay_time) if pass_wd != ver_code: results['code'] = RET.SERVERERROR results['msg'] = '验证码错误!' return jsonify(results) status = SqlData.search_pay_code('status', cus_name, pay_time) if status != '待充值': results['code'] = RET.SERVERERROR results['msg'] = '该订单已充值,请刷新界面!' return jsonify(results) # 验证成功后,做客户账户充值 cus_id = SqlData.search_user_field_name('id', cus_name) ''' # 判断是否需要更改充值金额(取消改动充值金额权限) if not money: money = SqlData.search_pay_code('top_money', cus_name, pay_time) else: money = float(money) # 更新新的充值金额 SqlData.update_pay_money(money, cus_id, pay_time) ''' money = SqlData.search_pay_code('top_money', cus_name, pay_time) pay_num = sum_code() t = xianzai_time() before = SqlData.search_user_field_name('balance', cus_name) balance = before + money user_id = SqlData.search_user_field_name('id', cus_name) pay_money = SqlData.search_pay_code('pay_money', cus_name, pay_time) # 更新银行卡收款金额 if bank_address: pattern = re.compile(r'\d+\.?\d*') bank_number = pattern.findall(bank_address) bank_money = SqlData.search_bank_top(bank_number) update_money = float(pay_money) + float(bank_money) SqlData.update_bank_top(bank_number, float(pay_money), update_money) else: # 更新首款码收款金额 # pay_money = SqlData.search_pay_code('pay_money', cus_name, pay_time) url = SqlData.search_pay_code('url', cus_name, pay_time) SqlData.update_qr_money('top_money', pay_money, url) # 更新账户余额 SqlData.update_user_balance(money, user_id) # 更新客户充值记录 SqlData.insert_top_up(pay_num, t, money, before, balance, user_id) # 更新pay_log的订单的充值状态 SqlData.update_pay_status('已充值', t, cus_id, pay_time) phone = SqlData.search_user_field_name('phone_num', cus_name) mid_phone = SqlData.search_pay_code('phone', cus_name, pay_time) # 给客户和代充值人发送短信通知 money_msg = "{}元, 可用余额{}".format(money, balance) if phone: phone_list = phone.split(",") for p in phone_list: CCP().send_Template_sms(p, [cus_name, t, money_msg], 485108) if mid_phone: CCP().send_Template_sms(mid_phone, [cus_name, t, money_msg], 485108) results['code'] = RET.OK results['msg'] = MSG.OK return jsonify(results) except Exception as e: logging.error(str(e)) results = dict() results['code'] = RET.SERVERERROR results['msg'] = str(e) return jsonify(results)
def create_some(): ''' 批量开卡接口 :return: ''' # print(session.get('create')) data = json.loads(request.form.get('data')) card_num = data.get('card_num') name_status = data.get('n') content = data.get('content') limit = data.get('limit') label = data.get('label') user_id = g.user_id user_data = SqlData().search_user_index(user_id) create_price = user_data.get('create_card') min_top = user_data.get('min_top') max_top = user_data.get('max_top') balance = user_data.get('balance') card_num = int(card_num) if card_num > 20: results = {"code": RET.SERVERERROR, "msg": "批量开卡数量不得超过20张!"} return jsonify(results) if name_status == "write": name_list = content.split("|") if len(name_list) < card_num: results = {"code": RET.SERVERERROR, "msg": "名字数量小于建卡数量!"} return jsonify(results) else: name_list = make_name(card_num) if not check_float(limit): results = {"code": RET.SERVERERROR, "msg": "充值金额不能为小数!"} return jsonify(results) sum_money = card_num * int(limit) + card_num * create_price # 本次开卡需要的费用,计算余额是否充足 if sum_money > balance: results = {"code": RET.SERVERERROR, "msg": "本次消费金额:" + str(sum_money) + ",账号余额不足!"} return jsonify(results) # 计算充值金额是否在允许范围 if not min_top <= int(limit) <= max_top: results = {"code": RET.SERVERERROR, "msg": "充值金额不在允许范围内!"} return jsonify(results) act_count = SqlData().search_activation_count() if act_count < card_num: results = {"code": RET.SERVERERROR, "msg": "请联系服务商添加库存!"} return jsonify(results) # 查询是否有免费开卡的数量(如果没有,就不必在循环开卡的时候反复查询,浪费资源) free = SqlData().search_user_field('free', user_id) try: for i in range(card_num): # my_lock.acquire() activation = SqlData().search_activation() if not activation: return jsonify({"code": RET.SERVERERROR, "msg": "请联系服务商添加库存!"}) SqlData().update_card_info_field('card_name', 'USING', activation) # my_lock.release() pay_passwd = "04A5E788" resp = QuanQiuFu().create_card(activation, pay_passwd) resp_code = resp.get('resp_code') # print(resp_code) if resp_code != '0000' and resp_code != '0079': resp_msg = resp.get('resp_msg') s = '激活卡失败,状态码: ' + resp_code + ',信息: ' + resp_msg + ',激活码为:' + activation logging.error(s) return jsonify({"code": RET.SERVERERROR, "msg": resp_msg}) SqlData().update_card_info_field('account_id', user_id, activation) card_no = resp.get('response_detail').get('card_no') # 如果有免费开卡数量,则每次开卡查询免费数量,没有则不必每次查询 if free > 0: # 查询当次开卡是否免费 free_num = SqlData().search_user_field('free', user_id) # 有免费开卡数量则,设置开卡费用为0元,没有则获取设置的单价 if free_num > 0: # 设置开卡单价,并更新可免费开卡数量 create_price = 0 SqlData().update_remove_free(user_id) elif free_num == 0: create_price = SqlData().search_user_field('create_price', user_id) # 查询账户操作前的账户余额 before_balance = SqlData().search_user_field('balance', user_id) do_money = create_price - create_price * 2 # 直接更新账户余额,不计算理论余额,用sql更新本次操作费用 SqlData().update_balance(do_money, user_id) balance = SqlData().search_user_field('balance', user_id) n_time = xianzai_time() SqlData().insert_account_trans(n_time, TRANS_TYPE.OUT, DO_TYPE.CREATE_CARD, 1, card_no, create_price, 0, before_balance, balance, user_id) resp_card_info = QuanQiuFu().query_card_info(card_no) # print(resp_card_info) if resp_card_info.get('resp_code') != '0000': expire_date = '' card_verify_code = '' else: re_de = resp_card_info.get('response_detail') expire_date = re_de.get('expire_date') card_verify_code = re_de.get('card_verify_code') card_name = name_list.pop() SqlData().update_card_info(card_no, pay_passwd, n_time, card_name, label, expire_date, card_verify_code, user_id, activation) money = str(int(limit) * 100) resp = QuanQiuFu().trans_account_recharge(card_no, money) resp_code = resp.get('resp_code') # print(resp) if resp_code == '0000': top_money = int(limit) # 更新卡缓存余额 SqlData().update_card_remain('remain', top_money, card_no) # 查询账户操作前的账户余额 before_balance = SqlData().search_user_field('balance', user_id) do_money_top = top_money - top_money * 2 # 直接更新账户余额,不计算理论余额,用sql更新本次操作费用 SqlData().update_balance(do_money_top, user_id) balance = SqlData().search_user_field('balance', user_id) n_time = xianzai_time() SqlData().insert_account_trans(n_time, TRANS_TYPE.OUT, DO_TYPE.TOP_UP, 1, card_no, top_money, 0, before_balance, balance, user_id) else: resp_msg = resp.get('resp_msg') s = '充值卡余额失败,状态码: ' + resp_code + ',信息: ' + resp_msg logging.error(s) card_num = str(i+1) s = "成功开卡"+card_num+"张,充值第"+card_num+"失败!请单独充值卡号:"+card_no+"!" return jsonify({"code": RET.SERVERERROR, "msg": s}) return jsonify({"code": RET.OK, "msg": "成功开卡"+str(card_num)+"张!请刷新界面!"}) except Exception as e: logging.error(e) results = {"code": RET.SERVERERROR, "msg": MSG.SERVERERROR} return jsonify(results)
def sub_middle_money(): info_id = request.args.get('id') n_time = xianzai_time() SqlData().update_middle_sub('已确认', n_time, int(info_id)) return jsonify({"code": RET.OK, "msg": MSG.OK})
def create_card(): ''' 单卡开卡 :return: ''' data = json.loads(request.form.get('data')) card_name = data.get('card_name') top_money = data.get('top_money') label = data.get('label') user_id = g.user_id user_data = SqlData().search_user_index(user_id) create_price = user_data.get('create_card') min_top = user_data.get('min_top') max_top = user_data.get('max_top') balance = user_data.get('balance') if not check_float(top_money): results = {"code": RET.SERVERERROR, "msg": "充值金额不能为小数!"} return jsonify(results) # 本次开卡需要的费用,计算余额是否充足 money_all = int(top_money) + create_price if money_all > balance: results = {"code": RET.SERVERERROR, "msg": "本次消费金额:" + str(money_all) + ",账号余额不足!"} return jsonify(results) # 计算充值金额是否在允许范围 if not min_top <= int(top_money) <= max_top: results = {"code": RET.SERVERERROR, "msg": "充值金额不在允许范围内!"} return jsonify(results) try: # my_lock.acquire() activation = SqlData().search_activation() if not activation: return jsonify({"code": RET.SERVERERROR, "msg": "请联系服务商添加库存!"}) pay_passwd = "04A5E788" SqlData().update_card_info_field('card_name', 'USING', activation) # my_lock.acquire() # 开卡及更新相关信息(批量开卡为同一流程步骤) resp = QuanQiuFu().create_card(activation, pay_passwd) resp_code = resp.get('resp_code') if resp_code != '0000' and resp_code != '0079': resp_msg = resp.get('resp_msg') s = '卡激活失败! 状态码: ' + resp_code + ',信息: ' + resp_msg + '激活码为: ' + activation logging.error(s) return jsonify({"code": RET.SERVERERROR, "msg": resp_msg}) SqlData().update_card_info_field('account_id', user_id, activation) card_no = resp.get('response_detail').get('card_no') # 查询当次开卡是否免费 free_num = SqlData().search_user_field('free', user_id) # 有免费开卡数量则,设置开卡费用为0元,没有则获取设置的单价 if free_num > 0: # 设置开卡单价,并更新可免费开卡数量 create_price = 0 SqlData().update_remove_free(user_id) elif free_num == 0: create_price = SqlData().search_user_field('create_price', user_id) # 查询账户操作前的账户余额 before_balance = SqlData().search_user_field('balance', user_id) do_money = create_price - create_price * 2 # 直接更新账户余额,不计算理论余额,用sql更新本次操作费用 SqlData().update_balance(do_money, user_id) balance = SqlData().search_user_field('balance', user_id) n_time = xianzai_time() SqlData().insert_account_trans(n_time, TRANS_TYPE.OUT, DO_TYPE.CREATE_CARD, 1, card_no, create_price, 0, before_balance, balance, user_id) # 查询卡信息,及更新相关信息 resp_card_info = QuanQiuFu().query_card_info(card_no) if resp_card_info.get('resp_code') != '0000': expire_date = '' card_verify_code = '' else: re_de = resp_card_info.get('response_detail') expire_date = re_de.get('expire_date') card_verify_code = re_de.get('card_verify_code') SqlData().update_card_info(card_no, pay_passwd, n_time, card_name, label, expire_date, card_verify_code, user_id, activation) money = str(int(float(top_money) * 100)) # 给卡里充值金额,及更新相关信息 resp = QuanQiuFu().trans_account_recharge(card_no, money) resp_code = resp.get('resp_code') if resp_code == '0000': top_money = float(top_money) SqlData().update_card_remain('remain', top_money, card_no) # 查询账户操作前的账户余额 before_balance = SqlData().search_user_field('balance', user_id) do_money_top = top_money - top_money * 2 # 直接更新账户余额,不计算理论余额,用sql更新本次操作费用 SqlData().update_balance(do_money_top, user_id) balance = SqlData().search_user_field('balance', user_id) n_time = xianzai_time() SqlData().insert_account_trans(n_time, TRANS_TYPE.OUT, DO_TYPE.TOP_UP, 1, card_no, top_money, 0, before_balance, balance, user_id) return jsonify({"code": RET.OK, "msg": "开卡成功!请刷新界面!"}) else: resp_msg = resp.get('resp_msg') s = '充值卡余额失败,状态码: ' + resp_code + ',信息: ' + resp_msg logging.error(s) return jsonify({"code": RET.SERVERERROR, "msg": "开卡成功,充值失败!"}) except Exception as e: logging.error(e) results = {"code": RET.SERVERERROR, "msg": MSG.SERVERERROR} return jsonify(results)
def create_card(): if request.method == 'GET': user_id = g.user_id min_top = SqlData.search_user_field('min_top', user_id) create_price = SqlData.search_user_field('create_price', user_id) context = dict() context['min_top'] = min_top context['create_price'] = create_price return render_template('user/create_card.html', **context) if request.method == 'POST': # 判断是否是子账号用户 vice_id = g.vice_id if vice_id: auth_dict = RedisTool.hash_get('svb_vice_auth', vice_id) if auth_dict is None: return jsonify({ 'code': RET.SERVERERROR, 'msg': '抱歉您没有权限执行此操作!' }) c_card = auth_dict.get('c_card') if c_card == 'F': return jsonify({ 'code': RET.SERVERERROR, 'msg': '抱歉您没有权限执行此操作!' }) data = json.loads(request.form.get('data')) top_money = data.get('top_money') label = data.get('label') card_num = data.get('card_num') user_id = g.user_id user_data = SqlData.search_user_index(user_id) create_price = user_data.get('create_card') min_top = user_data.get('min_top') max_top = user_data.get('max_top') balance = user_data.get('balance') card_num = int(card_num) if card_num > 10: results = {"code": RET.SERVERERROR, "msg": "批量开卡数量不得超过10张!"} return jsonify(results) if not check_float(top_money): results = {"code": RET.SERVERERROR, "msg": "充值金额不能为小数!"} return jsonify(results) # 本次开卡需要的费用,计算余额是否充足 money_all = (int(top_money) + create_price) * card_num if money_all > balance: results = { "code": RET.SERVERERROR, "msg": "本次消费金额:" + str(money_all) + ",账号余额不足!" } return jsonify(results) # 计算充值金额是否在允许范围 # if not min_top <= int(top_money) <= max_top: if not min_top <= int(top_money): results = {"code": RET.SERVERERROR, "msg": "充值金额不在允许范围内!"} return jsonify(results) # 该处修改开卡 try: data_list = [] cents = int(top_money) * 100 for i in range(card_num): data = svb.create_card(cents) if data: # 开卡费用 n_time = xianzai_time() card_number = data.get('card_number') cvc = data.get('cvc') expiry = data.get('expiry') card_id = data.get('card_id') last4 = data.get('last4') valid_starting_on = data.get('valid_start_on') valid_ending_on = data.get('valid_end_on') # 插入卡信息 SqlData.insert_card(card_number, cvc, expiry, card_id, last4, valid_starting_on, valid_ending_on, label, 'T', int(top_money), user_id) # 扣去开卡费用 before_balance = SqlData.search_user_field( 'balance', user_id) create_price_do_money = float( create_price) - float(create_price) * 2 SqlData.update_balance(create_price_do_money, user_id) balance = SqlData.search_user_field("balance", user_id) # balance = before_balance - create_price SqlData.insert_account_trans(n_time, TRANS_TYPE.OUT, DO_TYPE.CREATE_CARD, card_number, create_price, before_balance, balance, user_id) # 扣去充值费用 before_balance = SqlData.search_user_field( 'balance', user_id) top_money = int(top_money) top_money_do_money = top_money - top_money * 2 SqlData.update_balance(top_money_do_money, user_id) balance = SqlData.search_user_field("balance", user_id) n_time = xianzai_time() SqlData.insert_account_trans(n_time, TRANS_TYPE.OUT, DO_TYPE.TOP_UP, card_number, top_money, before_balance, balance, user_id) data_list.append(card_num) return jsonify({ "code": RET.OK, "msg": "成功开卡" + str(len(data_list)) + "张! 账户余额为: $" + str(balance) }) except Exception as e: logging.error(str(e)) return jsonify({ "code": RET.SERVERERROR, "msg": "网络繁忙, 开卡失败, 请稍后再试" })
def account_html(): # 用户主页端 ''' #关闭系统时,返回的信息 return "<html><div style='position:absolute;z-index:99;padding-top:346px;left:50%;margin-left:-600px;'>" \ "<h1>{}</h1><div></html>".format('系统临时升级,预计今晚12点前能恢复。做生成的卡可以继续使用。有问题可以联系各自管理员') ''' user_name = g.user_name user_id = g.user_id dict_info = SqlData().search_user_index(user_id) create_card = dict_info.get('create_card') # 百分数显示所以乘一百 refund = dict_info.get('refund') * 100 min_top = dict_info.get('min_top') max_top = dict_info.get('max_top') balance = dict_info.get('balance') sum_balance = dict_info.get('sum_balance') free = dict_info.get('free') # 判断账号有效期是否大于30天 stop_time = dict_info.get('stop_time') s = xianzai_time() res = verify_login_time(s, stop_time, range_s=2592000) if not res: stop_string = '账号使用权到期时间: ' + stop_time else: stop_string = '' out_money = SqlData().search_trans_sum(user_id) ex_change = SqlData().search_admin_field('ex_change') ex_range = SqlData().search_admin_field('ex_range') hand = SqlData().search_admin_field('hand') notice = SqlData().search_admin_field('notice') pay_money = SqlData().search_card_remain(user_id) # 根据推送信息计算失败率 all_payed = SqlData().search_table_count("push_log WHERE account_id={} AND trans_type!='手续费'".format(user_id)) fail = SqlData().search_table_count("push_log WHERE account_id={} AND trans_status='交易失败'".format(user_id)) if all_payed == 0: fail_pro = '0.00%' else: fail_pro = "%.2f%%" % ((fail / all_payed) * 100) context = dict() context['user_name'] = user_name context['balance'] = balance context['pay_money'] = pay_money context['refund'] = refund context['create_card'] = create_card context['min_top'] = min_top context['max_top'] = max_top context['sum_balance'] = sum_balance context['out_money'] = out_money context['ex_change'] = ex_change context['ex_range'] = ex_range context['hand'] = hand context['notice'] = notice context['free'] = free context['fail_pro'] = fail_pro context['stop_time'] = stop_string context['tip_context'] = '' return render_template('user/index.html', **context)
def login(): if request.method == 'GET': str_data, img = createCodeImage(height=38) context = dict() context['img'] = img context['code'] = ImgCode().jiami(str_data) return render_template('user/login.html', **context) if request.method == 'POST': data = json.loads(request.form.get('data')) user_name = data.get('user_name') user_pass = data.get('pass_word') image_real = data.get('image_real') image_code = data.get('image_code') cus_status = data.get('cus_status') results = {'code': RET.OK, 'msg': MSG.OK} try: img_code = ImgCode().jiemi(image_real) if image_code.lower() != img_code.lower(): results['code'] = RET.SERVERERROR results['msg'] = '验证码错误!' return jsonify(results) if cus_status == "main": user_data = SqlData.search_user_info(user_name) if user_data: user_id = user_data.get('user_id') pass_word = user_data.get('password') name = user_data.get('name') if user_pass == pass_word: last_login_time = SqlData.search_user_field( 'last_login_time', user_id) if not last_login_time: return jsonify({'code': 307, 'msg': MSG.OK}) now_time = xianzai_time() SqlData.update_user_field('last_login_time', now_time, user_id) session['user_id'] = user_id session['name'] = name session['vice_id'] = None session.permanent = True return jsonify(results) else: results['code'] = RET.SERVERERROR results['msg'] = MSG.PSWDERROR return jsonify(results) else: results['code'] = RET.SERVERERROR results['msg'] = MSG.PSWDERROR return jsonify(results) if cus_status == 'vice': user_data = SqlData.search_user_vice_info(user_name) user_id = user_data.get('user_id') password = user_data.get('password') vice_id = user_data.get('vice_id') if password == user_pass: # 存储到缓存 session['user_id'] = user_id session['name'] = user_name session['vice_id'] = vice_id session.permanent = True # 存储子子账号操作权限到redis res = SqlData.search_one_acc_vice(vice_id) RedisTool.hash_set('svb_vice_auth', res.get('vice_id'), res) return jsonify(results) else: results['code'] = RET.SERVERERROR results['msg'] = MSG.PSWDERROR return jsonify(results) except Exception as e: logging.error(str(e)) results['code'] = RET.SERVERERROR results['msg'] = MSG.DATAERROR return jsonify(results)
def repair(): if request.method == 'GET': task_code = request.args.get('task_code') now_time = xianzai_time() SqlData().update_order_repair(now_time, task_code) return jsonify({'code': RET.OK, 'msg': MSG.OK})
def sub_order(): if request.method == 'GET': customer_label = request.args.get('cus_label') asin = request.args.get('asin') good_money = request.args.get('good_money') context = dict() context['customer_label'] = customer_label context['asin'] = asin context['good_money'] = good_money return render_template('order/sub_order.html', **context) elif request.method == 'POST': terrace = g.terrace results_ok = {'code': RET.OK, 'msg': MSG.OK} results_er = {'code': RET.SERVERERROR, 'msg': MSG.NODATA} data = json.loads(request.form.get('data')) task_code = data.get('task_code').strip() account = data.get('account') asin = data.get('asin').strip() store = data.get('store').strip() serve_class = data.get('serve_class') order_num = data.get('order_num') good_money_real = data.get('good_money_real') mail_money = data.get('mail_money') taxes_money = data.get('taxes_money') note = data.get('note') SqlData().update_review_one('urgent', '', task_code) good_money_real = round(float(good_money_real), 3) if mail_money: mail_money = round(float(mail_money), 3) else: mail_money = 0 if taxes_money: taxes_money = round(float(taxes_money), 3) else: taxes_money = 0 sum_money = good_money_real + mail_money + taxes_money try: task_state = '' account_state = '' if terrace == 'AMZ': if serve_class: task_state = '待留评' account_state = ", account_state='待留评'" else: task_state = '已完成' account_state = "" if terrace == 'SMT': text_review = SqlData().search_order_one('review_title', task_code) image_review = SqlData().search_order_one('review_info', task_code) defalut_review = SqlData().search_order_one('feedback_info', task_code) if text_review or image_review or defalut_review: task_state = '待留评' account_state = ", account_state='待留评'" else: task_state = '已完成' account_state = "" n_time = xianzai_time() SqlData().update_payed(order_num, good_money_real, mail_money, taxes_money, note, sum_money, task_code, task_state, n_time) now_time = xianzai_time() SqlData().update_order_time(now_time, task_code) goods, stores, first_buy_time = SqlData().search_asin_store(account) if goods: goods_dict = json.loads(goods) goods_dict[asin] = xianzai_time() goods_json = json.dumps(goods_dict) else: goods_dict = dict() goods_dict[asin] = xianzai_time() goods_json = json.dumps(goods_dict) if stores: store_dict = json.loads(stores) store_dict[store] = xianzai_time() store_json = json.dumps(store_dict) else: store_dict = dict() store_dict[store] = xianzai_time() store_json = json.dumps(store_dict) if first_buy_time: now_time = xianzai_time() SqlData().update_account_have_time(sum_money, goods_json, store_json, now_time, account_state, account) else: now_time = xianzai_time() SqlData().update_account_no_time(sum_money, goods_json, store_json, now_time, now_time, account_state, account) return jsonify(results_ok) except Exception as e: logging.error(str(e)) return jsonify(results_er)
def xls_top(): ''' 表格批量充值接口 :return: ''' if request.method == 'POST': try: file = request.files.get('file') filename = file.filename file_path = save_file(file, filename, DIR_PATH.XLS_PATH) data = xlrd.open_workbook(file_path, encoding_override='utf-8') table = data.sheets()[0] nrows = table.nrows # 行数 ncols = table.ncols # 列数 row_list = [table.row_values(i) for i in range(0, nrows)] # 所有行的数据 col_list = [table.col_values(i) for i in range(0, ncols)] # 所有列的数据 # 定义返回信息 results = {'code': '', 'msg': ''} user_id = g.user_id # 判断是否填写充值信息或者大于一百次充值 if len(row_list) <= 1 or len(row_list) > 101: results['code'] = RET.OK results['msg'] = '请规范填写内容后上传!(单次批量充值不能超过100次)' return jsonify(results) # 判断总充值金额是否满足本次充值总额 money_list = col_list[1][1:] sum_money = 0 for m in money_list: if not check_float(m): results['code'] = RET.SERVERERROR results['msg'] = '充值金额不能为小数: ' + str(m) return jsonify(results) try: sum_money += int(m) except: results['code'] = RET.SERVERERROR results['msg'] = '请填写正确的充值金额!' return jsonify(results) balance = SqlData().search_user_field('balance', user_id) if sum_money > balance: results['code'] = RET.SERVERERROR results['msg'] = '账户余额不足,请充值后重试!' return jsonify(results) # 判断卡号是否规范!判断卡号是否属于该用户!判断充值金额是否符合要求 _card = row_list[1:] for card_list in _card: card_no = card_list[0].strip() if len(card_no) != 16: results['code'] = RET.SERVERERROR results['msg'] = '卡号不规范: ' + card_no return results account_id = SqlData().search_card_field('account_id', card_no) if not account_id or account_id != user_id: results['code'] = RET.SERVERERROR results['msg'] = '没有该卡号: ' + card_no return results # 给每张卡做充值 for card_list in _card: card_no = card_list[0].strip() top_money = int(card_list[1]) balance = SqlData().search_user_field('balance', user_id) if float(top_money) > balance: results['code'] = RET.SERVERERROR results['msg'] = '充值卡号: ' + card_no + ", 失败! 账户余额不足!" return jsonify(results) money = str(int(top_money) * 100) # 防止API异常,异常则重复充值3次,直到充值成功,3次仍是失败则退出本次充值 top_num = 0 while True: resp = QuanQiuFu().trans_account_recharge(card_no, money) resp_code = resp.get('resp_code') if resp_code == '0000': top_money = int(top_money) # 查询账户操作前的账户余额 before_balance = SqlData().search_user_field('balance', user_id) # 计算要扣除多少钱 do_money = top_money - top_money * 2 # 直接更新账户余额,不计算理论余额,用sql更新本次操作费用 SqlData().update_balance(do_money, user_id) # 查询扣除后的余额 balance = SqlData().search_user_field('balance', user_id) n_time = xianzai_time() SqlData().insert_account_trans(n_time, TRANS_TYPE.OUT, DO_TYPE.TOP_UP, 1, card_no, float(top_money), 0, before_balance, balance, user_id) break elif top_num > 2: resp_msg = resp.get('resp_msg') s = '充值卡余额失败,状态码: ' + resp_code + ',信息: ' + resp_msg logging.error(s) results['code'] = RET.SERVERERROR results['msg'] = "卡号: " + card_no + ", 充值是失败!请尝试单笔充值!" return jsonify(results) else: top_num += 1 results['code'] = RET.OK results['msg'] = MSG.OK return jsonify(results) except Exception as e: logging.error(str(e)) results = {'code': RET.SERVERERROR, 'msg': MSG.SERVERERROR} return jsonify(results)
def bento_refund(): # 判断是否是子账号用户 vice_id = g.vice_id if vice_id: auth_dict = RedisTool.hash_get('svb_vice_auth', vice_id) if auth_dict is None: return jsonify({'code': RET.SERVERERROR, 'msg': '抱歉您没有权限执行此操作!'}) c_card = auth_dict.get('refund') if c_card == 'F': return jsonify({'code': RET.SERVERERROR, 'msg': '抱歉您没有权限执行此操作!'}) # 参数获取 data = request.form.get("data") card_number = request.form.get("card_number").strip() user_id = g.user_id # 金额的校验 if "-" in str(data): return jsonify({"code": RET.SERVERERROR, 'msg': "请输入正确金额!"}) if "." in str(data): if len(str(data).split(".")[1]) > 2: return jsonify({"code": RET.SERVERERROR, 'msg': "精度不大于两位小数!"}) # 校验卡状态(注销无法更新) card_status = SqlData.search_one_card_status(card_number) if not card_status: return jsonify({'code': RET.SERVERERROR, 'msg': "该卡已注销,不支持此操作!"}) # 查询卡余额,校验退款金额大小 card_id = SqlData.search_card_field('card_id', card_number) card_detail = svb.card_detail(card_id) if not card_detail: return jsonify({"code": RET.SERVERERROR, 'msg': "网络繁忙,请稍后重试!"}) available_balance = card_detail.get('data').get('available_balance') refund_money = float(data) * 100 if refund_money >= available_balance: return jsonify({ "code": RET.SERVERERROR, 'msg': "卡余额不足!当前卡余额:$" + str(available_balance / 100) }) # 更新卡余额 update_money = int(available_balance - refund_money) res = svb.update_card(card_id, update_money) # 成功则更新账户余额 if res: before_balance = SqlData.search_user_field('balance', user_id) SqlData.update_balance(float(data), user_id) balance = SqlData.search_user_field("balance", user_id) n_time = xianzai_time() SqlData.insert_account_trans(n_time, TRANS_TYPE.IN, "退款", card_number, float(data), before_balance, balance, user_id) return jsonify({ "code": RET.OK, "msg": '退款成功!当前卡余额:$' + str(update_money / 100) }) else: return jsonify({"code": RET.SERVERERROR, 'msg': "网络繁忙,请稍后重试!"})
def reg_check(): if request.method == 'GET': pay_time = request.args.get('pay_time') u_name = request.args.get('u_name') package = request.args.get('package') context = dict() context['pay_time'] = pay_time context['u_name'] = u_name context['package'] = package return render_template('verify_pay/reg_check.html', **context) if request.method == 'POST': try: results = dict() data = json.loads(request.form.get('data')) pay_time = data.get('pay_time') u_name = data.get('u_name') package = data.get('package') check = data.get('check') ver_code = data.get('ver_code') # 校验参数验证激活码 if check != 'yes': results['code'] = RET.SERVERERROR results['msg'] = '请确认已收款!' return jsonify(results) # 查询邮件中的验证码 pass_wd = SqlData().search_account_reg_field('ver_code', pay_time, u_name) if pass_wd != ver_code: results['code'] = RET.SERVERERROR results['msg'] = '验证码错误!' return jsonify(results) # 却认订单状态 status = SqlData().search_account_reg_field('status', pay_time, u_name) if status: results['code'] = RET.SERVERERROR results['msg'] = '该订单已充值,请刷新界面!' return jsonify(results) # 验证成功后,做新增客户端账号(基础参数还需:建卡费, 最低充值,最高充值) # 根据选择的套餐查出对应的收费标准 data = SqlData().search_reg_money(package) price = data.get('price') refund = data.get('refund') min_top = data.get('min_top') max_top = data.get('max_top') u_acc = SqlData().search_account_reg_field('u_acc', pay_time, u_name) u_pass = SqlData().search_account_reg_field('u_pass', pay_time, u_name) phone = SqlData().search_account_reg_field('phone', pay_time, u_name) start_time = SqlData().search_account_reg_field('start_time', pay_time, u_name) stop_time = SqlData().search_account_reg_field('stop_time', pay_time, u_name) SqlData().insert_account(u_acc, u_pass, phone, u_name, price, refund, min_top, max_top, start_time, stop_time) # 添加默认充值记录0元(用于单独充值结算总充值金额避免BUG) n_time = xianzai_time() account_id = SqlData().search_user_field_name('id', u_name) SqlData().insert_top_up('10001', n_time, 0, 0, 0, account_id, '系统') # 判断是否是中介介绍,如果是则绑定到中介 middle_id = SqlData().search_account_reg_field('middle_id', pay_time, u_name) if middle_id: SqlData().update_user_field_int('middle_id', middle_id, account_id) # 更新首款码收款金额 pay_money = SqlData().search_account_reg_field('reg_money', pay_time, u_name) url = SqlData().search_account_reg_field('url', pay_time, u_name) SqlData().update_qr_money('top_money', pay_money, url) # 更新订单状态和确认时间 SqlData().update_account_reg_field('status', '已确认', pay_time, u_name) SqlData().update_account_reg_field('ver_time', n_time, pay_time, u_name) # 给客户和代充值人发送短信通知 if phone: CCP().send_Template_sms(phone, [u_name, n_time, u_acc, u_pass], 488712) results['code'] = RET.OK results['msg'] = MSG.OK return jsonify(results) except Exception as e: logging.error(str(e)) results = dict() results['code'] = RET.SERVERERROR results['msg'] = MSG.SERVERERROR return jsonify(results)
def top_up(): # 判断是否是子账号用户 vice_id = g.vice_id if vice_id: auth_dict = RedisTool.hash_get('svb_vice_auth', vice_id) if auth_dict is None: return render_template('user/no_auth.html') c_card = auth_dict.get('top_up') if c_card == 'F': return render_template('user/no_auth.html') if request.method == 'GET': card_number = request.args.get('card_number') context = dict() context['card_number'] = card_number return render_template('user/card_top.html', **context) if request.method == 'POST': data = json.loads(request.form.get('data')) user_id = g.user_id card_number = request.args.get('card_number') top_money = data.get('top_money') user_data = SqlData.search_user_index(user_id) before_balance = user_data.get('balance') if not check_float(top_money): results = {"code": RET.SERVERERROR, "msg": "充值金额不能为小数!"} return jsonify(results) if int(top_money) > before_balance: results = { "code": RET.SERVERERROR, "msg": "本次消费金额:" + str(top_money) + ",账号余额不足!" } return jsonify(results) card_status = SqlData.search_one_card_status(card_number) if not card_status: return jsonify({'code': RET.SERVERERROR, 'msg': "该卡已注销,不支持此操作!"}) card_id = SqlData.search_card_field('card_id', card_number) card_detail = svb.card_detail(card_id) if card_detail: available_balance = card_detail.get('data').get( 'available_balance') now_balance = available_balance + int(top_money) * 100 res = svb.update_card(card_id, now_balance) if res: top_money = int(top_money) top_money_do_money = top_money - top_money * 2 SqlData.update_balance(top_money_do_money, user_id) n_time = xianzai_time() balance = SqlData.search_user_field('balance', user_id) SqlData.insert_account_trans(n_time, TRANS_TYPE.OUT, DO_TYPE.TOP_UP, card_number, top_money, before_balance, balance, user_id) return jsonify({ 'code': RET.OK, 'msg': '充值成功!账户余额:$ ' + str(balance) + ",卡余额:$ " + str(now_balance / 100) }) return jsonify({'code': RET.SERVERERROR, 'msg': '网络繁忙,请稍后重试!'}) else: return jsonify({'code': RET.SERVERERROR, 'msg': '网络繁忙,请稍后重试!'})
def top_up(): if request.method == 'GET': pay_time = request.args.get('pay_time') cus_name = request.args.get('cus_name') context = dict() context['pay_time'] = pay_time context['cus_name'] = cus_name return render_template('verify_pay/check.html', **context) if request.method == 'POST': try: results = dict() data = json.loads(request.form.get('data')) pay_time = data.get('pay_time') cus_name = data.get('cus_name') check = data.get('check') ver_code = data.get('ver_code') money = data.get('money') # 校验参数验证激活码 if check != 'yes': results['code'] = RET.SERVERERROR results['msg'] = '请确认已收款!' return jsonify(results) pass_wd = SqlData().search_pay_code('ver_code', cus_name, pay_time) if pass_wd != ver_code: results['code'] = RET.SERVERERROR results['msg'] = '验证码错误!' return jsonify(results) status = SqlData().search_pay_code('status', cus_name, pay_time) if status != '待充值': results['code'] = RET.SERVERERROR results['msg'] = '该订单已充值,请刷新界面!' return jsonify(results) # 验证成功后,做客户账户充值 cus_id = SqlData().search_user_field_name('id', cus_name) # 判断是否需要根据输入的美元金额扣除手续费在充值 if money: money = float(money) # 更新新的充值金额 dollar_hand = SqlData().search_admin_field('dollar_hand') money = round(money / (1+dollar_hand), 2) SqlData().update_pay_money(money, cus_id, pay_time) money = SqlData().search_pay_code('top_money', cus_name, pay_time) pay_num = sum_code() t = xianzai_time() before = SqlData().search_user_field_name('balance', cus_name) user_id = SqlData().search_user_field_name('id', cus_name) # 更新首款码收款金额 pay_money = SqlData().search_pay_code('pay_money', cus_name, pay_time) url = SqlData().search_pay_code('url', cus_name, pay_time) SqlData().update_qr_money('top_money', pay_money, url) # 更新账户余额 SqlData().update_user_balance(money, user_id) # 实时查询当前余额不以理论计算为结果 balance = SqlData().search_user_field('balance', user_id) # 更新客户充值记录 SqlData().insert_top_up(pay_num, t, money, before, balance, user_id, '系统') # 更新pay_log的订单的充值状态 SqlData().update_pay_status('已充值', t, cus_id, pay_time) phone = SqlData().search_user_field_name('phone_num', cus_name) mid_phone = SqlData().search_pay_code('phone', cus_name, pay_time) # 判断是否是相同电话,是则只发送一次短信 if phone and mid_phone and phone == mid_phone: CCP().send_Template_sms(phone, [cus_name, t, money], 478898) else: # 给客户和代充值人发送短信通知 if phone: CCP().send_Template_sms(phone, [cus_name, t, money], 478898) if mid_phone: CCP().send_Template_sms(mid_phone, [cus_name, t, money], 478898) results['code'] = RET.OK results['msg'] = MSG.OK return jsonify(results) except Exception as e: logging.error(str(e)) results = dict() results['code'] = RET.SERVERERROR results['msg'] = MSG.SERVERERROR return jsonify(results)
def pay_pic(): if request.method == 'GET': sum_money = request.args.get('sum_money') top_money = request.args.get('top_money') cus_name = request.args.get('cus_name') cus_account = request.args.get('cus_account') phone = request.args.get('phone') phone2 = request.args.get("phone2") ex_change = request.args.get('ex_change') # 取出目前当前收款金额最低的收款码 qr_info = SqlData.search_qr_code('WHERE status=0') if not qr_info: url = '' else: url = '' value_list = list() for i in qr_info: value_list.append(i.get('sum_money')) value = min(value_list) for n in qr_info: money = n.get('sum_money') if value == money: url = n.get('qr_code') break context = dict() bank_top_data = SqlData.search_bank_info(sql_line='WHERE status=2') if bank_top_data: data = bank_top_data[0] context['bank_name'] = data.get('bank_name') context['bank_number'] = data.get('bank_number') context['bank_address'] = data.get('bank_address') else: # 一下三个循环和判断为处理相同收款人,多个账号,取低于累计20万的中的最小收款账号 bank_data = SqlData.search_bank_info(sql_line='WHERE status=0') # bank_info 整理为一个收款人对应多个收款卡号 {'':[],'':[]} 格式 bank_info = dict() for n in bank_data: bank_name = n.get('bank_name') if bank_name in bank_info: info_list = bank_info.get(bank_name) info_list.append(n) else: info_list = list() info_list.append(n) bank_info[bank_name] = info_list # sum_money_dict 为统计一个账号一共充值了多少元 sum_money_dict = dict() for i in bank_info: value = bank_info.get(i) money = 0 for m in value: money += float(m.get('day_money')) sum_money_dict[i] = money # min_dict 为取出满足累计收款低于20万的账户,且最小的充值战账户 min_dict = dict() for acc in sum_money_dict: if sum_money_dict.get(acc) < 200000: min_dict[acc] = sum_money_dict.get(acc) if len(min_dict) == 0: context['bank_name'] = '无符合要求收款账户!' context['bank_number'] = '请联系管理员处理!' context['bank_address'] = '-------------' else: # 在最小充值账户中取出最小收款卡号推送 min_acc = min(zip(min_dict.values(), min_dict.keys())) min_acc = min_acc[1] acc_list = bank_info.get(min_acc) data = min(acc_list, key=dic_key) context['bank_name'] = data.get('bank_name') context['bank_number'] = data.get('bank_number') context['bank_address'] = data.get('bank_address') context['sum_money'] = sum_money context['top_money'] = top_money context['cus_name'] = cus_name context['cus_account'] = cus_account context['phone'] = "{},{}".format(phone, phone2) if phone2 else phone context['url'] = url context['ex_change'] = ex_change return render_template('pay/pay_pic.html', **context) if request.method == 'POST': ''' 获取充值金额, 保存付款截图. 发送邮件通知管理员 ''' # try: # 两组数据,1,表单信息充值金额,等一下客户信息 2,截图凭证最多可上传5张 # print(request.form) # print(request.files) data = json.loads(request.form.get('data')) top_money = data.get('top_money') sum_money = data.get('sum_money') cus_name = data.get('cus_name') cus_account = data.get('cus_account') phone = data.get('phone') exchange = data.get('exchange') url = json.loads(request.form.get('url')) change_type = json.loads(request.form.get("change_type")) bank_name = json.loads(request.form.get("bank_name")) bank_number = json.loads(request.form.get("bank_number")) bank_address = json.loads(request.form.get("bank_address")) results = {'code': RET.OK, 'msg': MSG.OK} try: # 保存所有图片 file_n = 'file_' pic_list = list() # 判断有无上传图片 f_obj = request.files.get("{}{}".format(file_n, 1)) if not f_obj: return jsonify({'code': RET.SERVERERROR, 'msg': "请先上传图片再操作"}) for i in range(5): file_name = "{}{}".format(file_n, i + 1) fileobj = request.files.get(file_name) if fileobj: now_time = sum_code() file_name = cus_account + "_" + str(now_time) + str( i) + ".png" file_path = os.path.join(DIR_PATH.PHOTO_DIR, file_name) fileobj.save(file_path) pic_list.append(file_path) n_time = xianzai_time() vir_code = str(uuid.uuid1())[:6] context = "556338平台客户: " + cus_name + " , 于<span style='color:red'>" + n_time + "</span>在线申请充值: " \ + top_money + "美元, 折和人名币: <span style='color:red'>" + sum_money + "</span>元。本次计算汇率为: " + exchange + ", 验证码为: " + vir_code cus_id = SqlData.search_user_check(cus_name, cus_account) sum_money = float(sum_money) top_money = float(top_money) if change_type == "pic": SqlData.insert_pay_log(n_time, sum_money, top_money, vir_code, '待充值', phone, url, cus_id) elif change_type == "bank": SqlData.insert_pay_log( n_time, sum_money, top_money, vir_code, '待充值', phone, "{},{},{}".format(bank_name, bank_number, bank_address), cus_id) # 获取要推送邮件的邮箱 top_push = SqlData.search_admin_field('top_push') top_dict = json.loads(top_push) email_list = list() for i in top_dict: email_list.append(top_dict.get(i)) for p in email_list: executor.submit(send, context, pic_list, p) # send(context, pic_list, p) return jsonify(results) except Exception as e: logging.error(str(e)) return jsonify({'code': RET.SERVERERROR, 'msg': str(e)})
def pay_pic(): ''' 用户注册支付姐界面 :return: ''' if request.method == 'GET': u_name = request.args.get('u_name') u_acc = request.args.get('u_acc') u_pass = request.args.get('u_pass') phone = request.args.get('phone') middle_key = request.args.get('middle_key') package = SqlData().search_reg_package() # 取出目前当前收款金额最低的收款码 qr_info = SqlData().search_qr_code('WHERE status=0') if not qr_info: url = '' else: url = '' value_list = list() for i in qr_info: value_list.append(i.get('sum_money')) value = min(value_list) for n in qr_info: money = n.get('sum_money') if value == money: url = n.get('qr_code') break context = dict() context['u_name'] = u_name context['u_acc'] = u_acc context['u_pass'] = u_pass context['phone'] = phone context['url'] = url context['middle_key'] = middle_key context['package_list'] = package return render_template('user/register_pay.html', **context) if request.method == 'POST': ''' 获取充值金额, 保存付款截图. 发送邮件通知管理员 ''' try: # 两组数据,1,表单信息充值金额,等一下客户信息 2,截图凭证最多可上传5张 # print(request.form) # print(request.files) data = json.loads(request.form.get('data')) u_name = data.get('u_name') u_acc = data.get('u_acc') u_pass = data.get('u_pass') phone = data.get('phone') middle_key = data.get('middle_key') url = json.loads(request.form.get('url')) package = json.loads(request.form.get('package')) results = {'code': RET.OK, 'msg': MSG.OK} if not request.files: results['code'] = RET.SERVERERROR results['msg'] = '请选择支付截图后提交!' return jsonify(results) data = SqlData().search_reg_money(package) reg_money = data.get('money') reg_days = data.get('days') # 判断是否是用中介的介绍链接进行注册的 middle_name = '' middle_id = 0 if middle_key: try: string = Base64Code().base_decrypt(middle_key.strip()) info_list = string.split('_') middle_id = int(info_list[0]) middle_name = SqlData().search_middle_field('name', middle_id) account = SqlData().search_middle_field('account', middle_id) if info_list[1] != middle_name or info_list[2] != account: return jsonify({'code': RET.SERVERERROR, 'msg': '请使用正确链接注册!'}) except Exception as e: logging.error(str(e)) return jsonify({'code': RET.SERVERERROR, 'msg': '请使用正确链接注册!'}) # 保存所有图片 file_n = 'file_' pic_list = list() for i in range(5): file_name = file_n + str(i+1) file_img = request.files.get(file_name) if file_img: now_time = sum_code() file_name = u_acc + "_" + now_time + str(i) + ".png" file_path = DIR_PATH.PHOTO_DIR + file_name file_img.save(file_path) pic_list.append(file_name) n_time = xianzai_time() pic_json = json.dumps(pic_list) ver_code = str(uuid.uuid1())[:6] context = "客户: " + u_acc + " , 于" + n_time + "申请注册全球付客户端账号: 金额" + str(reg_money) + "元, 有效使用期为 " + \ str(reg_days) + "天。 验证码为: " + ver_code stop_time = get_day_after(reg_days) SqlData().insert_account_reg(package, n_time, n_time, reg_money, reg_days, stop_time, u_name, u_acc, u_pass, phone, url, middle_id, middle_name, pic_json, ver_code) # 获取要推送邮件的邮箱 top_push = SqlData().search_admin_field('top_push') top_dict = json.loads(top_push) email_list = list() for i in top_dict: email_list.append(top_dict.get(i)) for p in email_list: send(context, pic_list, p) return jsonify(results) except Exception as e: logging.error(str(e)) return jsonify({'code': RET.SERVERERROR, 'msg': MSG.SERVERERROR})