def up_auth(): '处理正在使用的客户被删除的问题' vice_id = request.args.get('vice_id') field = request.args.get('field') check = request.args.get('check') value = request.args.get('value') if check: field_status = '' if check == "true": field_status = 'T' elif check == 'false': field_status = 'F' SqlData.update_vice_field(field, field_status, int(vice_id)) res = SqlData.search_one_acc_vice(vice_id) RedisTool.hash_set('svb_vice_auth', res.get('vice_id'), res) return jsonify({'code': RET.OK, 'msg': MSG.OK}) if value: if field == "v_account": if SqlData.search_value_in('vice_account', value, field): return jsonify({ 'code': RET.SERVERERROR, 'msg': '用户名已存在,请重新命名!' }) SqlData.update_vice_field(field, value, int(vice_id)) return jsonify({'code': RET.OK, 'msg': MSG.OK})
def lock_acc(): acc_name = request.args.get('acc_name') u_id = SqlData.search_user_field_name('id', acc_name) check = request.args.get('check') if check == 'true': RedisTool.string_del(u_id) elif check == 'false': RedisTool.string_set(u_id, 'F') return jsonify({'code': RET.OK, 'msg': MSG.OK})
def add_vice(): # 判断是否是子账号用户 vice_id = g.vice_id if vice_id: return render_template('user/no_auth.html') if request.method == 'GET': return render_template('user/update_vice.html') if request.method == 'POST': user_id = g.user_id data = json.loads(request.form.get('data')) v_account = data.get('account') v_password = data.get('password') c_card = data.get('c_card') top_up = data.get('top_up') refund = data.get('refund') del_card = data.get('del_card') up_label = data.get('up_label') account = v_account.strip() password = v_password.strip() if len(account) < 6 or len(password) < 6: return jsonify({"code": RET.SERVERERROR, 'msg': '账号或密码长度小于6位!'}) # 判断用户选择可哪些权限开启 c_card_status = 'T' if c_card else 'F' top_up_status = 'T' if top_up else 'F' refund_status = 'T' if refund else 'F' del_card_status = 'T' if del_card else 'F' up_label_status = 'T' if up_label else 'F' res = SqlData.search_vice_count(user_id) # 判断是否已经添加子账号,已添加则更新 if res < 3: if SqlData.search_value_in('vice_user', account, 'v_account'): return jsonify({ 'code': RET.SERVERERROR, 'msg': '用户名已存在,请重新命名!' }) SqlData.insert_account_vice(account, password, c_card_status, top_up_status, refund_status, del_card_status, up_label_status, user_id) vice_id = SqlData.search_vice_id(v_account) res = SqlData.search_one_acc_vice(vice_id) RedisTool.hash_set('svb_vice_auth', res.get('vice_id'), res) return jsonify({'code': RET.OK, 'msg': MSG.OK}) else: return jsonify({ 'code': RET.SERVERERROR, 'msg': '您的账号已添加3个子账号,不可重复添加!' })
def change_card_name(): ''' 更改卡姓名和标签信息 :return: ''' # 判断是否是子账号用户 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('refund') 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_label.html', **context) if request.method == 'POST': try: data = json.loads(request.form.get('data')) card_number = data.get('card_number') card_label = data.get('card_label') card_number = card_number.strip() if card_label: SqlData.update_card_info_card_no('label', card_label, card_number) 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 wraaper(*args, **kwargs): """具体实现判断用户账号是否被锁定""" user_id = session.get('user_id') res = RedisTool.string_get(user_id) if res: return render_template('user/lock_acc.html') else: return view_func(*args, **kwargs)
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 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 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 del_vice(): vice_id = request.args.get('vice_id') SqlData.del_vice(int(vice_id)) RedisTool.hash_del('svb_vice_auth', int(vice_id)) return jsonify({'code': RET.OK, 'msg': MSG.OK})
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 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)