def update_file(files, file_path, invoice_data): isExists = os.path.exists(file_path) if not isExists: os.makedirs(file_path) for file in files: # 原始文件名 source_fname = files.get(file)[0].get("filename") # 生成新的文件名, 返回完整路径 full_file = FileUploadOperate.gen_file_name( file_path, source_fname) with open(full_file, "wb") as f: f.write(files.get(file)[0].get("body")) em = "save {0} to path: {1}".format(file, full_file) LOG.info(em) # 更新数据库数据库 upload_db_obj = UploadLog.query.filter( and_(UploadLog.invoice_uuid == invoice_data.invoice_uuid, UploadLog.file_type == file)).first() if not upload_db_obj: em = "can not found file type: <{0}> with invoice id: <{1}>".format( file, invoice_data.invoice_uuid) LOG.exception(em) continue upload_db_obj.file = full_file upload_db_obj.create_time = int(time.time) upload_db_obj.status = "unapproval" db_session.flush() db_session.commit() return 200
def generate_discount(money, counts=1, code_len=8, valid_date=None): ''' 随机生成8位的优惠码 记录到数据库''' db_objs = [] for count in range(counts): code_list = [] # 0-9 for i in range(10): code_list.append(str(i)) # A-Z for i in range(65, 91): code_list.append(chr(i)) # a-z for i in range(97, 123): code_list.append(chr(i)) myslice = random.sample(code_list, code_len) verification_code = ''.join(myslice) db_obj = Discount(uid=str(uuid.uuid1()), discount_id=verification_code, money=money, gen_time=int(time.time()), is_used=False, valid_date=valid_date, used_time=None, description=None) db_objs.append(db_obj) for db_obj in db_objs: db_session.add(db_obj) db_session.flush() db_session.commit() return {"result": "successful"}
def delete_order(resource_id, end_time): """结算订单""" # check resource is it exist db_objs = Orders.query.filter(Orders.resource_id == resource_id).all() if not db_objs: em = "can not found resource_id <{0}>".format(resource_id) LOG.exception(em) return {"code": 1, "message": em} used_money = 0 for db_obj in db_objs: db_obj.end_time = end_time db_obj.status = options.order_Settlement # 单条订单价格 price_obj = Price.query.filter( Price.price_type == db_obj.resource_type).first() if not price_obj: em = "can not found price type, order type is immediately. Please define first" LOG.exception(em) continue order_money = ExprOrders.order_used_money(db_obj, price_obj, immed=True) if order_money: used_money += order_money # 更新用户余额,添加消费日志 ExprOrders.update_user_money(used_money, db_obj) # 更新用户过期时间 ret = ExprOrders.expr_user_exceed_time(db_obj.user_id) if not ret: em = "update user exceed time error. user_id <{0}>".format( db_obj.user_id) LOG.exception(em) return {"code": 1, "message": em} db_session.commit() return {"code": 0, "message": ""}
def add_user_recharge(user_id, user_name, total_fee, out_trade_no, trade_status, recharge_way): """method to update user money """ # 用户冲值记录, 只要调用支付宝接口就生成。根据状态判断是否成功 # check user is it exist user = User.query.filter(User.user_id == user_id).first() if not user: em = "can not found user. user id: <{0}>".format(user_id) LOG.exception(em) # return {"error": [{"code": 400, "msg": "{0}".format(em)}]} return 0 uid = str(uuid.uuid1()) log_time = int(time.time()) try: # 记录冲值记录,默认状态为`failed` recharge_log = RechargeLog(uid, user_id, user_name, total_fee, log_time, out_trade_no, trade_status, recharge_way=recharge_way) db_session.add(recharge_log) db_session.commit() return {"success": [{"code": 200, "msg": ""}]} except Exception as e: db_session.rollback() em = "recharge for user <{0}> error. user id : <{1}>. msg: {2}".format( user.user_name, user_id, e) LOG.exception(em) return {"error": [{"code": 500, "msg": "{0}".format(em)}]}
def add_user(data): project_id = data.get("tenant_id") project_name = data.get("_context_project_name") user_id = data.get("user_id") user_name = data.get('_context_user_name') id = str(uuid.uuid1()) exist_user = User.query.filter(User.user_id == user_id).first() try: if not exist_user: db_users = User(id=id, user_id=user_id, user_name=user_name, project_id=project_id, project_name=project_name, register_time=int(time.time())) db_session.add(db_users) db_session.commit() em = "add user: <{0}> success".format(user_name) LOG.debug(em) return { "success": [{ "code": 200, "msg": "{0}".format(em), "data": db_users }] } except Exception as e: db_session.rollback() em = "add user: <{0}> failed msg: {1}".format(user_name, e) LOG.exception(em) return {"error": [{"code": 400, "msg": "{0}".format(em)}]}
def update_invoice(data): # 计算所有充值记录之和 # if not data.get("orders"): # em = "no any more orders id" # LOG.exception(em) # raise HTTPError(400, em) # 确认是发票记录是否存在 invoice_obj = Invoice.query.filter(Invoice.uuid == data.invoice_uuid).first() if not invoice_obj: em = "can not found any more invoice with id: <{0}>".format(data.invoice_uuid) LOG.exception(em) raise HTTPError(400, em) # # 如果发票状态为邮寄,也不能修改 # if invoice_obj.status == options.invoice_status.get("posted"): # em = "invoice is posted. can not change" # LOG.exception(em) # raise HTTPError(400, em) # update database Invoice.query.filter(Invoice.uuid == data.invoice_uuid).update({Invoice.status: data.status, Invoice.complete_date: data.complete_date, Invoice.description: data.description, Invoice.logistics_no: data.logistics_no, Invoice.logistics_company: data.logistics_company, Invoice.invoice_no: data.invoice_no }) db_session.commit() return True
def update_user_money(money, order): """ this method to update user's money(order's money) :param order: db object with order info :return: """ try: if float(money) <= 0: return {"code": 0, "message": ""} user = User.query.filter(User.user_id == order.user_id).first() if not user: em = "can not found user id: <{0}>".format(order.user_id) LOG.exception(em) return False user.money = (float(user.money) if float(user.money) else 0) new_money = user.money - money if new_money < 0 and order.order_type == options.order_immed: em = "user have no enough money. user id: <{0}> resource id: <{1}> " \ "resource name: <{2}>".format(order.user_id, order.resource_id, order.resource_name) LOG.exception(em) return {"code": 1, "message": em} User.query.filter(User.user_id == order.user_id).update( {User.money: new_money}) db_session.flush() msg = "update user <{0}> money from <{1}> to <{2}>".format( user.user_id, user.money, new_money) LOG.debug(msg) # add log consume_log = ConsumeLog(str(uuid.uuid1()), order.user_id, order.user_name, order.project_id, order.resource_name, order.resource_type, order.resource_id, order.start_time, order.end_time, money, int(time.time()), resource_from=order.resource_from, order_uid=order.uid, details=order.resource) db_session.add(consume_log) db_session.commit() # 实时同步数据到cmdb CMDBHandle.syncdata2cmdb("consume", consume_log.uid) return {"code": 0, "message": ""} except Exception as e: db_session.rollback() em = "update user money failed. user id: <{0}> " \ "resource id: <{1}> resource name: <{2}> msg: <{3}>".format(order.user_id, order.resource_id, order.resource_name, e) LOG.exception(em) return {"code": 1, "message": em}
def get_discount(): db_obj = Discount.query.filter( and_(Discount.is_used == False, Discount.is_allocation == False)).first() if not db_obj: LOG.exception("no avalid discount card can be use") return False, 500 db_obj.is_allocation = True db_session.commit() return True, db_obj
def cycle_update_user(): "" try: now_time = int(time.time()) User.query.filter(User.exceed_time < now_time).update( {User.is_exceed: True}) db_session.commit() except Exception as e: db_session.rollback() em = "cycle update user error. msg: <{0}>".format(e) LOG.exception(em)
def change_user_resource_status(user_id, status): """status: is a boolean value. True or False""" try: User.query.filter(User.user_id == user_id).update( {User.is_destroy: status}) db_session.commit() return True, 200 except Exception as e: db_session.rollback() em = "update user's status error msg: <{0}>".format(e) LOG.exception(em) return False, 500
def update_user_recharge(async_data): """根据号in_trade_no(唯一订单号)来更新用户冲值记录的状态""" out_trade_no = async_data.get("out_trade_no") trade_status = async_data.get("trade_status") money = float(async_data.get("price")) try: # 更新用户余额(如果是成功的消息) if trade_status == "success": # 根据订单号从recharge_log表找用户user_id recharg = RechargeLog.query.filter( RechargeLog.out_trade_no == out_trade_no).first() if not recharg: em = "can not fond user's user_id from table recharge_log" return {"error": [{"code": 500, "msg": "{0}".format(em)}]} user_id = recharg.user_id user = User.query.filter(User.user_id == user_id).first() if not user: em = "can not fond user user_id : <{0}>".format(user_id) LOG.exception(em) return 0 user_money = user.money new_money = money + (float(user_money) if float(user_money) else 0) is_exceed = (True if new_money <= 0 else False) # up date user's money User.query.filter(User.user_id == user_id).update({ User.money: new_money, User.is_exceed: is_exceed }) db_session.commit() ExprOrders.sync_user_exceed_time(user_id=user_id) # 更新日志记录 RechargeLog.query.filter( RechargeLog.out_trade_no == out_trade_no).update( {RechargeLog.trade_status: trade_status}) msg = "user <{0}> recharge money <{1}>".format(user_id, money) LOG.debug(msg) db_session.commit() # 同步数据到cmdb result = RechargeLog.query.filter( RechargeLog.out_trade_no == out_trade_no).first() CMDBHandle.syncdata2cmdb("recharge", result.uid) return {"success": [{"code": 200, "msg": ""}]} except Exception as e: db_session.rollback() em = "update user recharge failed with in_trade_no: <{0}> msg: {1}".format( out_trade_no, e) LOG.exception(em) return {"error": [{"code": 500, "msg": "{0}".format(em)}]}
def save_file(files, file_path, user_info): isExists = os.path.exists(file_path) if not isExists: os.makedirs(file_path) if not files: return None # 添加到数据库 db_obj = UploadLog( str(uuid.uuid1()), user_info.get("user_id"), user_info.get("user").get("user").get("name"), int(time.time()), ) for file in files: # 原始文件名 source_fname = files.get(file)[0].get("filename") # 生成新的文件名, 返回完整路径 full_file = FileUploadOperate.gen_file_name( file_path, source_fname) with open(full_file, "wb") as f: f.write(files.get(file)[0].get("body")) em = "save {0} to path: {1}".format(file, full_file) LOG.info(em) # 文件路径入库为url格式:http://172.16.68.75:8900/file?path=/data/upload/xxxxx/xxxx.jpg file_full_url = "http://" + str(options.float_ip) + ":" + str( options.api_port) + "/" + "file?path=" + full_file if file == "yhkh": db_obj.yhkh_url = file_full_url if file == "swdj": db_obj.swdj_url = file_full_url print file_full_url if file == "yezz": db_obj.yezz_url = file_full_url db_session.add(db_obj) db_session.commit() return db_obj.uuid
def add_discount(id, money, valid_date, user_context, description=None): try: if not id or not money or not valid_date or not user_context: em = "invalid argement with add discount" LOG.exception(em) return False, 400 # must be admin role if not user_context.get("user").get("admin"): em = "user <{0}> is not admin. role must be admin.".format( user_context.get("user").get("user").get("name")) LOG.exception(em) return False, 400 # check discount id is it esxit discount = Discount.query.filter( Discount.discount_id == id).first() if discount: em = "discount id discount_id already exist. id: <0>".format( id) LOG.exception(em) return False, 409 # add discount id add_discount = Discount(uid=str(uuid.uuid1()), discount_id=id, money=money, gen_time=int(time.time()), valid_date=int( ConvertTime2Int(valid_date)), is_used=False, description=description) db_session.add(add_discount) db_session.commit() LOG.debug( "add discount id Successful. discount id: <{0}>".format(id)) return True, 200 except Exception as e: db_session.rollback() em = "add discount error. discount id: <{0}>. msg: <{1}>".format( id, e) LOG.exception(em) return False, 500
def delete_invoice(uuid): """取消发票""" invoice_obj = Invoice.query.filter(Invoice.uuid == uuid).first() if not invoice_obj: em = "can not found invoice with uuid <{0}>".format(uuid) LOG.exception(em) raise HTTPError(400, em) # 如果发票状态为已邮寄,则不能取消和删除 if invoice_obj.status == options.invoice_status.get("posted"): em = "invoice is posted. can not delete" LOG.exception(em) raise HTTPError(400, em) # 更新充值记 if invoice_obj.recharge_uuids: recharge_ids = invoice_obj.recharge_uuids.split(",") for recharge_id in recharge_ids: RechargeLog.query.filter(RechargeLog.uid == recharge_id).update({RechargeLog.is_invoiced: False}) db_session.flush() invoice_obj.deleted = True db_session.commit() return invoice_obj
def add_order(data): """添加订单""" data = orderinfo_plugins.GetOrderAbout(data) for r_name, used in data.resources.iteritems(): if not used: continue order_object = Orders(str(uuid.uuid1()), start_time=data.time_stamp, end_time=data.end_time, resource_from=data.resource_from, resource_from_provider=data.resource_from_provider, off=data.off, used=used, resource_id=data.resource_id, resource_name=r_name, project_id=data.project_id, project_name=data.project_name, user_id=data.user_id, resource=data.resource, user_name=data.user_name, order_type=data.order_type, log_time=int(time.time()), status=options.order_Settlement, ) if data.money <= 0: em = "tencent order. money can not le 0" LOG.exception(em) continue # 更新用户余额,添加消费记录 result = ExprOrders.update_user_money(data.money, order_object) if result.get("code") != 0: return result # 订单状态为已结算 db_session.add(order_object) db_session.flush() # 更新用户过期时间 ExprOrders.expr_user_exceed_time(data.user_id) db_session.commit() return {"code": 0, "message": ""}
def use_discount(id, user_context): try: now_time = int(time.time()) # check discount id is it exsit discount = Discount.query.filter( Discount.discount_id == id).first() if not discount: em = "can not found discount id. id: <0>".format(id) LOG.exception(em) return False, 410 # check discount id is is exceed if discount.valid_date or discount.is_used: if discount.valid_date <= now_time or discount.is_used: em = "discount id is not valid. id: <{0}>".format( discount.discount_id) LOG.exception(em) return False, 400 user_id = user_context.get("user").get("user").get("id") # update user's money user = User.query.filter(User.user_id == user_id).first() if not user: em = "can not found user. user id: <{0}>".format(user_id) LOG.exception(em) # try to add user data = { "tenant_id": user_context.get("tenant_id"), "_context_project_name": user_context.get("user").get("project").get("name"), "user_id": user_context.get("user").get("user").get("id"), "_context_user_name": user_context.get("user").get("user").get("id") } ret = UserOperate.add_user(data) if not ret.get("success"): return False, 500 user = ret.get("success")[0].get("data") user.money += discount.money # update discount tables's status # Discount.query.filter(Discount.discount_id == id).update({Discount.is_used: True}) # add Recharge Log recharge = RechargeLog( uid=str(uuid.uuid1()), user_id=user_id, user_name=user_context.get("user").get("user").get("name"), money=discount.money, log_time=int(time.time()), out_trade_no=discount.discount_id, trade_status="success", recharge_way="discount_id") db_session.add(recharge) db_session.flush() # update discount id Discount.query.filter(Discount.discount_id == id).update({ Discount.is_used: True, Discount.used_time: now_time }) db_session.commit() LOG.debug("discount id used by user id: <{0}>") # update user's exceed time ExprOrders.sync_user_exceed_time(user_id=user_id) return True, 200 except Exception as e: db_session.rollback() em = "use discount id error. id: <{0}> user id<{1}>".format( id, user_id) LOG.exception(em) return False, 500
def update_order(data, resource_id): """变更订单""" new_orders = [] data = orderinfo_plugins.GetOrderAbout(data) for r_name, used in data.resources.iteritems(): if not used: continue # 检查订单是否存在 check_orders = Orders.query.filter( and_(Orders.resource_id == resource_id, Orders.project_id == data.project_id, Orders.user_id == data.user_id, Orders.resource_name == r_name, Orders.status == None)).first() if not check_orders: em = "order is not exist. resource id: <{0}> resource type: <{1}>".format( resource_id, r_name) LOG.exception(em) continue # 获取单价 price_type_obj = Price.query.filter(Price.name == r_name).first() if not price_type_obj: n_r_name = r_name.split("/")[-1] price_type_obj = Price.query.filter( Price.name == n_r_name).first() price_type = (price_type_obj.price_type if price_type_obj else None) # 结算订单 check_orders.end_time = data.time_stamp order_money = ExprOrders.order_used_money(check_orders, price_type_obj, immed=True) # 更新用户余额,添加消费记录 result = ExprOrders.update_user_money(order_money, check_orders) # if result.get("code") != 0: # return result check_orders.status = options.order_Settlement # 添加新订单 order_object = Orders( str(uuid.uuid1()), start_time=data.time_stamp, resource_from=data.resource_from, resource_from_provider=data.resource_from_provider, off=data.off, used=used, resource_id=resource_id, resource_type=price_type, resource_name=r_name, project_id=data.project_id, project_name=data.project_name, user_id=data.user_id, resource=data.resource, user_name=data.user_name, order_type=data.order_type, log_time=int(time.time()), ) new_orders.append(order_object) # 更新用户过期时间 ExprOrders.expr_user_exceed_time(data.user_id, new_orders) for new_order in new_orders: db_session.add(new_order) db_session.commit() return {"code": 0, "message": ""}
def add_order(data): """添加订单""" data = orderinfo_plugins.GetOrderAbout(data) new_orders = [] for r_name, used in data.resources.iteritems(): if not used: continue # 检查订单是否存在 check_orders = Orders.query.filter( and_(Orders.resource_id == data.resource_id, Orders.project_id == data.project_id, Orders.user_id == data.user_id, Orders.resource_name == r_name, Orders.status == None)).first() if check_orders: em = "order is already exist. resource id: <{0}> resource type: <{1}>".format( data.resource_id, r_name) LOG.exception(em) continue # 获取单价 price_type_obj = Price.query.filter(Price.name == r_name).first() if not price_type_obj: n_r_name = r_name.split("/")[-1] price_type_obj = Price.query.filter( Price.name == n_r_name).first() price_type = (price_type_obj.price_type if price_type_obj else None) order_object = Orders( str(uuid.uuid1()), start_time=data.time_stamp, end_time=data.end_time, resource_from=data.resource_from, resource_from_provider=data.resource_from_provider, off=data.off, used=used, resource_id=data.resource_id, resource_type=price_type, resource_name=r_name, project_id=data.project_id, project_name=data.project_name, user_id=data.user_id, resource=data.resource, user_name=data.user_name, order_type=data.order_type, log_time=int(time.time()), ) # 订单类型-立即结算 if data.order_type == options.order_immed: if not price_type_obj: em = "can not found price type, order type is immediately. Please define first" LOG.exception(em) return {"code": 1, "message": em} else: # get the order total used money immed_order_money = ExprOrders.order_used_money( order_object, price_type_obj, immed=True) if not immed_order_money: continue # 更新用户余额,添加消费记录 result = ExprOrders.update_user_money( immed_order_money, order_object) if result.get("code") != 0: return result # 订单状态为已结算 order_object.status = options.order_Settlement db_session.add(order_object) db_session.flush() else: if price_type_obj: new_orders.append(order_object) # 更新用户过期时间 ExprOrders.expr_user_exceed_time(data.user_id, new_orders) # 添加到数据库 for new_order in new_orders: db_session.add(new_order) db_session.flush() msg = "add order successful. resource_id: <{0}>".format( data.resource_id) LOG.debug(msg) db_session.commit() return {"code": 0, "message": ""}
def sync_user_exceed_time(user_id=None): """数据同步,根据用户当前订单及余额,更新用户超时时间""" try: now_time = int(time.time()) if not user_id: all_users = User.query.filter().all() else: all_users = User.query.filter(User.user_id == user_id).all() for user in all_users: total_used = 0 min_used = 0 orders = Orders.query.filter( and_(Orders.user_id == user.user_id, Orders.status == None, Orders.resource_type)).all() # 如果没有订单,余额大于0,更新过期时间为空,未过期 if not orders and float(user.money) > 0: User.query.filter(User.user_id == user.user_id).update({ User.is_exceed: False, User.exceed_time: None, }) db_session.flush() for order in orders: order.end_time = now_time order.order_type = options.order_immed price = Price.query.filter( Price.price_type == order.resource_type).first() if not price: em = "can not found price type. price type: <{0}>".format( order) LOG.exception(em) return False used = ExprOrders.order_used_money(order, price, immed=True) if used: total_used += used order.end_time = None if total_used > float(user.money): if not user.is_exceed: User.query.filter(User.user_id == user.user_id).update( { User.is_exceed: True, User.exceed_time: now_time, }) db_session.flush() else: for order in orders: price = Price.query.filter( Price.price_type == order.resource_type).first() used = ExprOrders.order_used_money(order, price, immed=False) if used: min_used += used if total_used > 0 and min_used > 0: new_money = float(user.money) - total_used valid_use_sec = new_money / min_used * 60 user_exceed_time = valid_use_sec + now_time User.query.filter(User.user_id == user.user_id).update( { User.exceed_time: user_exceed_time, User.is_exceed: False }) db_session.flush() em = "update <{0}> user's exceed time to <{1}>".format( user.user_id, user_exceed_time) LOG.debug(em) print "==================finish one. user_id: <{0}>==============================".format( user.user_id) db_session.commit() except ExprOrders as e: db_session.rollback() print "error. user_id==========>>>, ", user.user_id print e
def expr_user_exceed_time(user_id, new_orders=None): """计算用户过期时间""" # user_id 用户唯一ID # new_order 新进来的订单,列表中包含数据库对象[db_obj1, db_obj2, db_obj3, .....] min_used_money = 0 total_used_money = 0 now_time = int(time.time()) user = User.query.filter(User.user_id == user_id).first() if not user: em = "can not found user. user id: <{0}>".format(user_id) LOG.exception(em) return {"code": 1, "message": em} orders = Orders.query.filter( and_(Orders.user_id == user_id, Orders.status == None, Orders.resource_type != None)).all() for order in orders: price = Price.query.filter( Price.price_type == order.resource_type).first() print "start time=======", order.start_time print "end time=======", order.end_time # 结束时间为当前时间 order.end_time = now_time # 获取订单总使用金额 total_used = ExprOrders.order_used_money(order, price, immed=True) if total_used: total_used_money += total_used # 获取订单每分钟使用金额 min_used = ExprOrders.order_used_money(order, price, immed=False) if min_used: min_used_money += min_used order.end_time = None if new_orders: for new_order in new_orders: price = Price.query.filter( Price.price_type == new_order.resource_type).first() if price: # 获取新订单每分钟使用金额 min_used = ExprOrders.order_used_money(new_order, price, immed=False) if min_used: min_used_money += min_used # 当前余额 - 之前订单使用总和 = 可用余额 vaild_money = float(user.money) - total_used_money # 余额小于0,直接更新为过期 if vaild_money <= 0: if not user.is_exceed: User.query.filter(User.user_id == user_id).update({ User.is_exceed: True, User.exceed_time: now_time }) db_session.flush() em = "user available money le 0. user is exceed with user id: <{0}>".format( user_id) LOG.debug(em) else: # 可用余额 / 每分钟使用量 * 60 = 可用秒数 if min_used_money > 0: valid_use_sec = (vaild_money / min_used_money) * 60 # 过期时间 = 当前时间 + 可用秒数 user_exceed_time = now_time + valid_use_sec User.query.filter(User.user_id == user_id).update( {User.exceed_time: user_exceed_time}) db_session.flush() em = "update user's exceed time to <{0}> with user id <{1}>".format( user_exceed_time, user_id) LOG.debug(em) # 用户现在过期状态为`已过期`,如果无订单,余额大于0,更新用户过期状态为`未过期` if user.is_exceed: if not orders: User.query.filter(User.user_id == user_id).update({ User.exceed_time: None, User.is_exceed: False }) db_session.flush() db_session.commit() return True
def add_invoice(data, upfile_uuid): # 计算所有充值记录之和 if not data.orders: em = "no any more orders id" LOG.exception(em) raise HTTPError(400, em) money = 0 for order in data.orders: # 查找所有充值记录 recharge = RechargeLog.query.filter(RechargeLog.uid == order).first() if not recharge: em = "user id: <{0}>. can not found recharge log. id: <{1}>".format(data.user_id, order) LOG.exception(em) continue if recharge.trade_status != "success" : em = "user id: <{0}>. recharge log is not success. id: <{1}>".format(data.user_id, order) LOG.exception(em) continue if recharge.is_invoiced: em = "user id: <{0}>. recharge log is invoiced. id: <{1}>".format(data.user_id, order) LOG.exception(em) continue # 不允许开取发票的类型 if recharge.recharge_way in options.reject_recharge_type: em = "user id: <{0}>. recharge type is not allowed id: <{1}>".format(data.user_id, order) LOG.exception(em) continue money += float(recharge.money) # 更新充值记录为已开发票 RechargeLog.query.filter(RechargeLog.uid == order).update({RechargeLog.is_invoiced: True}) db_session.flush() if money <= 0: em = "user id: <{0}>. apply invoice error. user's money is le 0".format(data.user_id) LOG.exception(em) raise HTTPError(500, "server internal error") # add database invoice_obj = Invoice(uuid=data.invoice_uuid, title=data.title, status=options.invoice_status.get("verifying"), post_address=data.post_address, post_user=data.post_user, post_phone=data.post_phone, money=money, title_type=data.title_type, title_mode=data.title_mode, context=data.context, corporation_name=data.corporation_name, taxpayer_dentity=data.taxpayer_dentity, register_address=data.register_address, register_phone=data.register_phone, deposit_bank=data.deposit_bank, deposit_account=data.deposit_account, user_name=data.user_name, user_id=data.user_id, application_date=get_nowtime(), description=data.description, recharge_uuids=','.join(data.orders), upfile_uuid=upfile_uuid, ) db_session.add(invoice_obj) db_session.commit() return invoice_obj