示例#1
0
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)
示例#2
0
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)
示例#3
0
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)
示例#4
0
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)
示例#5
0
文件: user.py 项目: HelenLiu97/huihui
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': '该卡已注销!'})
示例#6
0
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)
示例#7
0
文件: user.py 项目: HelenLiu97/huihui
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})
示例#8
0
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})
示例#9
0
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": "充值失败!请联系服务商解决!"})
示例#10
0
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': '请输入正确的消费金额!'})
示例#11
0
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)
示例#12
0
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})
示例#13
0
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)
示例#14
0
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)
示例#15
0
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})
示例#16
0
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)
示例#17
0
文件: user.py 项目: HelenLiu97/huihui
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": "网络繁忙, 开卡失败, 请稍后再试"
            })
示例#18
0
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)
示例#19
0
文件: user.py 项目: HelenLiu97/huihui
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)
示例#20
0
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})
示例#21
0
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)
示例#22
0
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)
示例#23
0
文件: user.py 项目: HelenLiu97/huihui
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': "网络繁忙,请稍后重试!"})
示例#24
0
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)
示例#25
0
文件: user.py 项目: HelenLiu97/huihui
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': '网络繁忙,请稍后重试!'})
示例#26
0
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)
示例#27
0
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)})
示例#28
0
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})