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'
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) #代表通知序列任务失败
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
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
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
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
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'
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
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
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
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)
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
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
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
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
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
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
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)
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'
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
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) #代表通知序列任务失败
def login_record(): with db.auto_commit_db(): db.session.add(AdminLog(ip=request.remote_addr))