Esempio n. 1
0
def update_order():
    # 更新order订单列表
    try:
        with db.auto_commit_db():
            db.session.query(Order).delete()
    except Exception as e:
        print(e)
    # 清空后写入全新数据
    new_orders = []
    res = Order2.query.filter().all()
    for i in res:
        tmp = i.admin_json2()
        try:
            new_orders.append(
                Order(out_order_id=tmp['out_order_id'],
                      name=tmp['name'],
                      payment=tmp['payment'],
                      contact=tmp['contact'],
                      contact_txt=tmp['contact_txt'],
                      price=tmp['price'],
                      num=tmp['num'],
                      total_price=tmp['total_price'],
                      card=tmp['card'],
                      status=tmp['status'],
                      updatetime=datetime.strptime(tmp['updatetime'],
                                                   "%Y-%m-%d %H:%M:%S")))
        except Exception as e:
            print(e)
    try:
        with db.auto_commit_db():
            db.session.add_all(new_orders)
        return 'ok'
    except Exception as e:
        print(e)
    return 'ok'
Esempio n. 2
0
def make_order(data):   # 主要为订单创建,异步一个管理员通知
    # print('后台正在创建卡密')
    out_order_id = data['out_order_id']
    name = data['name']
    payment = data['payment']
    contact = data['contact']
    contact_txt = data['contact_txt']
    price = data['price']
    num = 1
    total_price = price
    if not (Order.query.filter_by(out_order_id = out_order_id).first()):
        status = True   #订单状态
        # 生成订单 --除了上述内容外,还需要卡密。
        
        result = Card.query.filter_by(prod_name = name,isused = False).first()  #此处可用用0,也可以用false
        if result:
            card = result.to_json()['card']
            reuse = result.to_json()['reuse']   #返回True或False
            if not reuse: #卡密状态修改
                with db.auto_commit_db():
                    Card.query.filter_by(id = result.to_json()['id']).update({'isused':True})
        else:
            card = None
            status = False
            # print('卡密为空')
            print(f'{contact}购买的{name}缺货,卡密信息为空')
            return None


        #订单创建
        try:
            # print(f'卡密信息{card}')
            new_order= Order(out_order_id,name,payment,contact,contact_txt,price,num,total_price,card,None,None)
            with db.auto_commit_db():
                db.session.add(new_order)
            # log('订单创建完毕')
        except Exception as e:
            print(e)
            # return '订单创建失败', 500    
            return None     

        ##构造data数据
        data = {}
        data['out_order_id'] = out_order_id
        data['name'] = name
        data['payment'] = payment
        data['contact'] = contact
        data['contact_txt'] = contact_txt
        data['price'] = price
        data['num'] = num
        data['total_price'] = total_price
        data['card'] = card
        data['status'] = status
        # 执行队列任务
        # print('后台正在执行队列')
        try:
            task(data)  #为避免奔溃,特别设置
        except Exception as e:
            print(e)  #代表通知序列任务失败                                
Esempio n. 3
0
def update_system():
    data = request.json.get('data', None)
    if not data:
        return '参数丢失', 400
    with db.auto_commit_db():
        Config.query.filter_by(id=data['id']).update({'info': data['info']})
    return {"mgs": 'success'}, 200
Esempio n. 4
0
def remove_cards():
    ids = request.json.get('ids', None)
    if not ids:
        return 'Missing Data', 400
    with db.auto_commit_db():
        [Card.query.filter_by(id=x).delete() for x in ids]
    return '批量删除', 200
Esempio n. 5
0
def update_class():
    # print(request.json)
    id = request.json.get('id', None)
    name = request.json.get('name', None)
    info = request.json.get('info', None)
    sort = request.json.get('sort', None)
    methord = request.json.get('methord', None) #update,add,delete
    # print(methord)
    if methord not in ['update','delete','add']:
        return 'Missing data 1', 400
    # 调用smtp函数发送邮件
    try:
        with db.auto_commit_db():
            if methord == 'update':
                if not all([id,name,info,sort]):
                    return 'Missing data', 400
                ProdCag.query.filter_by(id = id).update({'name':name,'info':info,'sort':sort})
            elif methord == 'delete':
                if not id:
                    return 'Missing data', 400
                ProdCag.query.filter_by(id = id).delete()
            else:
                if not name or not info or not sort:
                    return 'Missing data 2', 400
                new_cag = ProdCag(name,info,sort)
                db.session.add(new_cag)
    except Exception as e:
        log(e)
        return '数据库异常', 500        

    # 重定向登录界面
    return '修改成功', 200
Esempio n. 6
0
def update_pays():
    try:
        if request.method == 'GET':
            pay_id = request.args.get('id')
            return jsonify(
                Payment.query.filter_by(id=pay_id).first().all_json())
        else:
            # print(request.json)
            data = request.json.get('data', None)
            if not data:
                return 'Missing Data', 400
            # print(type(data['config']))
            with db.auto_commit_db():
                Payment.query.filter_by(id=data['id']).update({
                    'icon':
                    data['icon'],
                    'config':
                    str(data['config']),
                    'isactive':
                    data['isactive']
                })
            return '修改成功', 200
    except Exception as e:
        log(e)
        return '数据库异常', 500
Esempio n. 7
0
def success_card(out_order_id):
    # print(not (tmps := TempOrder.query.filter_by(out_order_id = out_order_id,status = True).first()))
    # print(TempOrder.query.filter_by(out_order_id = out_order_id,status = True).count())
    if not (TempOrder.query.filter_by(out_order_id=out_order_id,
                                      status=True).first()):  #保证一次
        with db.auto_commit_db():
            TempOrder.query.filter_by(out_order_id=out_order_id).update({
                'status':
                True,
                'endtime':
                datetime.utcnow() + timedelta(hours=8)
            })
        # 订单创建
        res = TempOrder.query.filter_by(out_order_id=out_order_id,
                                        status=True).first()
        if res:
            name = res.to_json2()['name']
            payment = res.to_json2()['payment']
            contact = res.to_json2()['contact']
            contact_txt = res.to_json2()['contact_txt']
            price = res.to_json2()['price']
            num = res.to_json2()['num']
            total_price = res.to_json2()['total_price']
            auto = res.to_json2()['auto']
            make_order(out_order_id, name, payment, contact, contact_txt,
                       price, num, total_price, auto)

        #     pass
    return 'OK'
Esempio n. 8
0
def update_notice():
    data = request.json.get('data', None)
    if not data:
        return 'Missing Data', 400
    #数组数据更新--->两字典判断是否相等,不相等则更新
    try:
        with db.auto_commit_db():
            old_data = [x.to_json() for x in Notice.query.filter().all()]
            for (i, index) in enumerate(data):
                if old_data[i] == index:
                    pass  #数据未更新
                else:
                    Notice.query.filter_by(id=index['id']).update({
                        'config':
                        str(index['config']),
                        'admin_account':
                        index['admin_account'],
                        'admin_switch':
                        index['admin_switch'],
                        'user_switch':
                        index['user_switch']
                    })
    except Exception as e:
        log(e)
        return '数据库异常', 500

    return '修改成功', 200
Esempio n. 9
0
def update_admin_account():
    email = request.json.get('email', None)
    password = request.json.get('password', None) #传入卡密列表   
    if not all([email,password]):
        return '参数丢失', 400
    hashed = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
    with db.auto_commit_db():
        AdminUser.query.filter_by(id = 1).update({'email':email,'hash':hashed})
    return {"mgs": 'success'}, 200
Esempio n. 10
0
def update_shop():

    id = request.json.get('id', None)
    cag_name = request.json.get('cag_name', None)
    name = request.json.get('name', None)
    info = request.json.get('info', None)
    img_url = request.json.get('img_url', None)
    sort = request.json.get('sort', None)
    discription = request.json.get('discription', None)
    price = request.json.get('price', None)
    price_wholesale = request.json.get('price_wholesale', None)
    auto = request.json.get('auto', None)
    sales = request.json.get('sales', None)
    tag = request.json.get('tag', None)
    isactive = request.json.get('isactive', None)
    methord = request.json.get('methord', None)  #update,add,delete
    if methord not in ['update', 'delete', 'add']:
        return 'Missing data1', 400
    # 调用smtp函数发送邮件
    try:
        with db.auto_commit_db():
            if methord == 'update':
                if not all([
                        id, cag_name, name, img_url, sort, discription, price,
                        tag
                ]):  #因修改时auto和isactive报错缺失,移除
                    return 'Missing data2', 400
                ProdInfo.query.filter_by(id=id).update({
                    'cag_name': cag_name,
                    'name': name,
                    'info': info,
                    'img_url': img_url,
                    'sort': sort,
                    'discription': discription,
                    'price': price,
                    'price_wholesale': price_wholesale,
                    'auto': auto,
                    'tag': tag,
                    'isactive': isactive
                })
            elif methord == 'delete':
                if not id:
                    return 'Missing data', 400
                ProdInfo.query.filter_by(id=id).delete()
            else:
                if not all([name, info, sort]):
                    return 'Missing data', 400
                new_prod = ProdInfo(cag_name, name, info, img_url, sort,
                                    discription, price, price_wholesale, auto,
                                    sales, tag, isactive)
                db.session.add(new_prod)
    except Exception as e:
        log(e)
        return '数据库异常', 500

    #
    return '修改成功', 200
Esempio n. 11
0
def clean_tmp_order():
    orders = TempOrder.query.all()
    c_now = datetime.utcnow() + timedelta(hours=8)
    # del_list = []
    if orders:
        with db.auto_commit_db():
            for i in orders:
                if (c_now - i.to_date()['updatetime']).days > 5:
                    # del_list.append(i)
                    db.session.delete(i)
Esempio n. 12
0
def remove_order():
    id = request.json.get('id', None)
    if not id:
        return 'Missing Data', 400
    try:
        with db.auto_commit_db():
            Order.query.filter_by(id=id).delete()
        return '删除成功', 200
    except Exception as e:
        log(e)
        return '数据库异常', 500
Esempio n. 13
0
def tg_info():
    if request.method == 'GET':
        res = Plugin.query.filter_by(name = 'TG发卡').first()
        return jsonify(res.to_json())
    elif request.method == 'POST':
        data = request.json.get('data', None)
        if not data:    # 传递TG_token,switc,about
            return '参数丢失', 400
        with db.auto_commit_db():
            Plugin.query.filter_by(name = 'TG发卡').update({'config':str(data['config']),'about':data['about'],'switch':data['switch']})
        return '数据更新成功', 200 
Esempio n. 14
0
def update_sms():
    data = request.json.get('data', None)
    if not data:
        return 'Missing data', 400
    # 密码加密存储
    try:
        with db.auto_commit_db():
            Notice.query.filter_by(name = '短信通知').update({'config':str(data['config'])})
    except Exception as e:
        log(e)
        return '数据库异常', 500      
    # 重定向登录界面
    return '邮箱更新成功', 200
Esempio n. 15
0
def theme():
    if request.method == 'GET':
        res = Config.query.filter_by(name='theme').first()
        return jsonify(res.to_json())  # {info:'list'}
    elif request.method == 'POST':
        data = request.json.get('data', None)
        if not data:
            return '参数丢失', 400
        if data in ['list', 'taobao', 'gongge']:
            with db.auto_commit_db():
                Config.query.filter_by(name='theme').update({'info': data})
            return '数据更新成功', 200
        return '更新失败', 400
Esempio n. 16
0
def make_tmp_order(out_order_id, name, payment, contact, contact_txt, num):
    try:
        with db.auto_commit_db():
            db.session.add(
                TempOrder(out_order_id,
                          name,
                          payment,
                          contact,
                          contact_txt,
                          num,
                          status=False,
                          endtime=None))
        return make_pay_url(out_order_id)
    except Exception as e:
        log(e)
        return False
Esempio n. 17
0
def update_card():
    # print(request.json)
    id = request.json.get('id', None)
    prod_name = request.json.get('prod_name', None)
    card = request.json.get('card', None)
    isused = request.json.get('isused', None)
    reuse = request.json.get('reuse', None)
    methord = request.json.get('methord', None)  #update,add,delete
    if methord not in ['update', 'delete', 'add', 'add_all', 'delete_all']:
        return 'Missing methord', 400
    # 调用smtp函数发送邮件
    try:
        with db.auto_commit_db():
            if methord == 'update':
                if not all([id, prod_name, card]):
                    return 'Missing data 1', 400
                Card.query.filter_by(id=id).update({
                    'prod_name': prod_name,
                    'card': card,
                    'isused': isused,
                    'reuse': reuse
                })
            elif methord == 'delete':
                if not id:
                    return 'Missing data', 400
                Card.query.filter_by(id=id).delete()
            # elif methord == 'add':
            elif methord == 'delete_all':
                res = Card.query.filter_by(isused=True).all()
                if res:
                    [db.session.delete(x) for x in res]
            else:
                if not all([prod_name, card]):
                    return 'Missing data', 400
                # print(card.split('\n'))
                tmp_cards = list(set(list(filter(None, card.split('\n')))))
                if len(tmp_cards) > 1:
                    reuse = False
                db.session.add_all([
                    Card(prod_name, card=x, isused=0, reuse=reuse)
                    for x in tmp_cards
                ])
        # 重定向登录界面
        return '修改成功', 200
    except Exception as e:
        log(e)
        return '数据库异常', 500
Esempio n. 18
0
def notify_success(out_order_id):
    # 更新状态
    res = TempOrder.query.filter_by(out_order_id=out_order_id,
                                    status=False).first()
    if res:
        # 生成实际卡密
        name = res.name
        payment = res.payment
        contact = res.contact
        contact_txt = res.contact_txt
        price = res.price
        num = res.num
        total_price = res.total_price
        auto = res.auto
        with db.auto_commit_db():  # 更新卡密状态
            TempOrder.query.filter_by(out_order_id=out_order_id).update(
                {'status': True})

        make_order(out_order_id, name, payment, contact, contact_txt, price,
                   num, total_price, auto)
Esempio n. 19
0
def order_backup_sql():
    # def order_backup():
    from datetime import datetime
    # 此部分不支持再次导入。
    drop_order_table()  # 清空中间order表
    creat_order_table()
    # 初始化表
    res = Order.query.filter().all()
    orders = []
    for i in res:
        tmp = i.admin_json2()
        orders.append(
            Order2(tmp['out_order_id'], tmp['name'], tmp['payment'],
                   tmp['contact'], tmp['contact_txt'], tmp['price'],
                   tmp['num'], tmp['total_price'], tmp['card'], tmp['status'],
                   datetime.strptime(tmp['updatetime'], "%Y-%m-%d %H:%M:%S")))
    try:
        with db.auto_commit_db():
            db.session.add_all(orders)
        return 'ok'
    except Exception as e:
        print(e)
    return 'ok'
Esempio n. 20
0
def pay_url(payment, name, out_order_id, total_price):
    name = name.replace('=', '_')  # 防止k,v冲突
    try:
        if payment == '支付宝当面付':
            # return jsonify({'qr_code':'455555555454deffffffff'})
            r = AlipayF2F().create_order(name, out_order_id, total_price)
        elif payment == '虎皮椒微信':
            r = Hupi().Pay(trade_order_id=out_order_id,
                           total_fee=total_price,
                           title=name)
        elif payment == '虎皮椒支付宝':
            r = Hupi(payment='alipay').Pay(trade_order_id=out_order_id,
                                           total_fee=total_price,
                                           title=name)
        elif payment == '迅虎微信':
            r = Xunhu(payment='wechat').Pay(trade_order_id=out_order_id,
                                            total_fee=total_price,
                                            title=name)
        elif payment in ['码支付微信', '码支付支付宝', '码支付QQ']:
            if payment == '码支付微信':
                payname = 'wechat'
            elif payment == '码支付支付宝':
                payname = 'alipay'
            else:
                payname = 'qqpay'
            r = CodePay(payment=payname).create_order(payment, out_order_id,
                                                      total_price)
        elif payment in ['PAYJS支付宝', 'PAYJS微信']:
            if payment == 'PAYJS支付':
                payname = 'alipay'
            else:
                payname = 'wechat'
            r = Payjs(payment=payname).create_order(name, out_order_id,
                                                    total_price)
        elif payment in ['V免签支付宝', 'V免签微信']:
            # 参数错误情况下,会失效
            if payment == 'V免签微信':
                r = VMQ().create_order(name, out_order_id, total_price)
            else:
                r = VMQ(payment='alipay').create_order(name, out_order_id,
                                                       total_price)
        elif payment in ['微信官方接口']:
            r = Wechat().create_order(name, out_order_id, total_price)
        elif payment in ['QQ钱包']:
            r = QQpay().create_order(name, out_order_id, total_price)
        elif payment in ['易支付支付宝', '易支付QQ', '易支付微信']:
            if payment == '易支付支付宝':
                payname = 'alipay'
            elif payment == '易支付微信':
                payname = 'wechat'
            else:
                payname = 'qqpay'
            r = Epay(payment=payname).create_order(name, out_order_id,
                                                   total_price)
        elif payment in ['Mugglepay']:
            r = Mugglepay().create_order(name, out_order_id, total_price)
        elif payment in ['YunGouOS']:  # 统一接口
            r = YunGou(payment='unity').create_order(name, out_order_id,
                                                     total_price)
        elif payment in ['YunGouOS_WXPAY']:  # 微信接口
            r = YunGou().create_order_wxpay(name, out_order_id, total_price)
        elif payment in ['Stripe支付宝', 'Stripe微信']:  # 微信接口
            if payment == 'Stripe微信':
                r = Stripe(payment='wechat').create_order(
                    name, out_order_id, total_price)
            else:
                r = Stripe(payment='alipay').create_order(
                    name, out_order_id,
                    total_price)  # 导入cource_id和clinent_key[]合并
            if r:
                with db.auto_commit_db():
                    TempOrder.query.filter_by(
                        out_order_id=out_order_id).update(
                            {'contact_txt': r['signs']})
                r.pop('signs')
        elif payment in ['云免签微信', '云免签支付宝']:
            if payment == '云免签微信':
                r = Ymq(payment='wechat').create_order(name, out_order_id,
                                                       total_price)
            else:
                r = Ymq(payment='alipay').create_order(name, out_order_id,
                                                       total_price)
        else:
            return None
        return r
    except Exception as e:
        log(e)
        return False
Esempio n. 21
0
def make_order(out_order_id, name, payment, contact, contact_txt, price, num,
               total_price, auto):
    # print('后台正在创建卡密')
    #订单ID,商品名称,支付方式,联系方式、备注、单价、数量、总价
    ## 根据name查找对应的卡密信息。---卡密有重复
    # 为避免同一订单二次请求,判断是否重复
    if not (Order.query.filter_by(out_order_id=out_order_id).first()):
        status = True  #订单状态
        # 生成订单 --除了上述内容外,还需要卡密。
        if auto:  # 自动发货--获取卡密
            nums = int(num)
            if nums == 1:

                result = Card.query.filter_by(
                    prod_name=name, isused=False).first()  #此处可用用0,也可以用false
                if result:
                    card = result.to_json()['card']
                    reuse = result.to_json()['reuse']  #返回True或False
                    if not reuse:  #卡密状态修改
                        Card.query.filter_by(id=result.to_json()['id']).update(
                            {'isused': True})
                else:
                    card = None
                    status = False
                    # print('卡密为空')
                    log(f'{contact}购买的{name}缺货,卡密信息为空')

            else:
                # 处理数量订单- 卡密查询,数量大于1,重复卡密:-重复发送;不重复卡密:给出结果或空白
                result = Card.query.filter_by(
                    prod_name=name, isused=False).first()  #先查询一个,判定是否重复
                if result:

                    if result.to_json()['reuse']:  #判定是否重复使用
                        # 重复使用卡密情况下
                        pre_card = result.to_json()['card']
                        # card = str([pre_card for i in range(nums)])
                        card = (
                            pre_card + ','
                        ) * nums  #解决5~10W卡密重复行问题0.011s;50w消耗47ms--前端轮询4s一次
                        # 其余相同

                    else:
                        # 不重复卡密情况 - 查询多个结果,给出卡密列表;更新这些卡密的使用状态
                        result = Card.query.filter_by(
                            prod_name=name, isused=False).limit(nums).all()
                        pre_card = [i.to_json()['card']
                                    for i in result]  #数量可能少于实际数量
                        if len(pre_card) == nums:
                            # card = str(pre_card)[1:-1]  # 移除双【】
                            card = ','.join(pre_card)
                        else:
                            # card = str(pre_card + [None for x in range(nums-len(pre_card))])[1:-1]
                            card = ','.join(
                                pre_card +
                                [None for x in range(nums - len(pre_card))])
                            log(f'{name}已缺货')
                        # 更新已用卡密状态
                        # 120单测试--55ms;
                        # for y in result:
                        #     Card.query.filter_by(id = y.to_json()['id']).update({'isused':False})
                        # 2.
                        # [Card.query.filter_by(id = y.to_json()['id']).update({'isused':False}) for y in result] #53ms
                        for y in result:
                            y.isused = True
                        # db.auto_commit_db() #1.9ms--9ms---此步骤在后续commmit时生效
                        # [y.isused=False for y in result]

                else:
                    card = None
                    status = False
                    # print('卡密为空')
                    log(f'{contact}购买的{name}缺货,卡密信息为空')
        else:  # 手动发货模式--卡密信息
            card = '手工发货,请主动联系客服'
        #订单创建
        try:
            # print(f'卡密信息{card}')
            with db.auto_commit_db():
                new_order = Order(out_order_id, name, payment, contact,
                                  contact_txt, price, num, total_price, card,
                                  None, None)
                db.session.add(new_order)
            # log('订单创建完毕')
        except Exception as e:
            log(e)
            return '订单创建失败', 500

        ##构造data数据
        data = {}
        data['out_order_id'] = out_order_id
        data['name'] = name
        data['payment'] = payment
        data['contact'] = contact
        data['contact_txt'] = contact_txt
        data['price'] = price
        data['num'] = num
        data['total_price'] = total_price
        data['card'] = card
        data['status'] = status
        # 执行队列任务
        # print('后台正在执行队列')
        try:
            task(data)  #为避免奔溃,特别设置
        except Exception as e:
            log(e)  #代表通知序列任务失败
Esempio n. 22
0
def login_record():
    with db.auto_commit_db():
        db.session.add(AdminLog(ip=request.remote_addr))