Пример #1
0
 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": ""}
Пример #2
0
    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)}]}
Пример #3
0
 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": ""}
Пример #4
0
 def get_user_day_used(user_id):
     try:
         # 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 0
         user_day_used = ExprOrders.expr_day_used(user_id)
         if not user_day_used[0]:
             return False, 400
         return user_day_used[1]
     except Exception as e:
         em = "get user day used error. user id: <{0}>. msg: <{1}>".format(
             user_id, e)
         LOG.exception(em)
         return 0
Пример #5
0
    def expr_order_kinds_used(user_id):
        # check user is it exist
        user = User.query.filter(User.user_id == user_id).first()
        all_kinds = {}
        if not user:
            em = "can not found user. user id: <{0}>".format(user_id)
            LOG.exception(em)
            return 0
        try:
            # get user's all orders
            orders = Orders.query.filter(
                and_(Orders.user_id == user_id, Orders.resource_type != None,
                     Orders.status == None)).all()
            if not orders:
                em = "can not found user's orders. user id: <{0}>".format(
                    user_id)
                LOG.exception(em)
                return 0
            # get a user's all order kinds
            resource_kinds = set([s.resource_name for s in orders])
            # get a type's a data
            for resource_kind in resource_kinds:
                order_kinds = [
                    s for s in orders if s.resource_name == resource_kind
                ]
                price = Price.query.filter(
                    Price.price_type == order_kinds[0].resource_type).first()

                all_kinds[resource_kind] = order_kinds[0]
                min_used = 0
                for order_kind in order_kinds:
                    # get a type's all data
                    min_use = ExprOrders.order_used_money(order_kind,
                                                          price,
                                                          immed=False)
                    if min_use:
                        min_used += min_use

                all_kinds[resource_kind].money = min_used * (24 * 60)
            return all_kinds
        except Exception as e:
            em = "get user consume error. user id: <{0}>. msg: <{1}>".format(
                user_id, e)
            LOG.exception(em)
            return {"error": [{"code": 400, "msg": "{0}".format(em)}]}
Пример #6
0
 def get_user_money(user_id):
     now_time = int(time.time())
     used_money = 0
     # 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 0
     orders = Orders.query.filter(
         and_(Orders.user_id == user_id, Orders.status == None,
              Orders.resource_type != None)).all()
     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()
         used = ExprOrders.order_used_money(order, price, immed=True)
         if used:
             used_money += used
     user.money = float(user.money) - used_money
     return user
Пример #7
0
 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
Пример #8
0
 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": ""}
Пример #9
0
 def sync_user_et(user_id=None):
     ExprOrders.sync_user_exceed_time(user_id)
Пример #10
0
    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": ""}