Ejemplo n.º 1
0
 def get4extra(sequence, user_id):
     """
     :param sequence:  设备UUID, 获取连续红包时必须连接设备
     :param user_id:  用户ID
     :return: 红包金额,说明信息,是否成功
     在本月内, 根据剩余金额和红包限额获取红包, 并创建新的红包(请求状态)
     """
     # configurations = RedEnvelopeConfiguration.get_configuration()
     RedEnvelopeConfiguration.set_red_envelope_configuration()
     extra_threshold = RedEnvelopeConfiguration.RED_ENVELOPE_EXTRA_THRESHOLD
     result = {}
     device = Devices.get(sequence)
     rd_type = RedEnvelopes.RED_ENVELOPE_TYPE_EXTRA
     rd_state = RedEnvelopes.RED_ENVELOPE_STATE_REQUEST
     can = RedEnvelopes.can_get_extra(user_id)
     if not device or not can:
         result["bonus"] = 0
         result["info"] = "no device or no extra red envelope"
         result["success"] = True
         return result
     try:
         time_limit = Datetimes.get_month_range()
         start = time_limit["start"]
         end = time_limit["end"]
         given_bonus = RedEnvelopes.get_valid_and_request_bonus(start, end, RedEnvelopes.RED_ENVELOPE_TYPE_EXTRA)
         rest = extra_threshold - given_bonus
         factor = RedEnvelopeConfiguration.RED_ENVELOPE_FACTOR
         min_money = RedEnvelopeConfiguration.RED_ENVELOPE_EXTRA_MIN
         max_money = RedEnvelopeConfiguration.RED_ENVELOPE_EXTRA_MAX
         min_value = min_money * factor
         max_value = max_money * factor
         possibility = RedEnvelopeConfiguration.RED_ENVELOPE_EXTRA_POSSIBILITY
         bonus = RedEnvelopes.compute_red_envelope(
             rest,
             min_money,
             min_value,
             max_value,
             possibility,
             factor
         )
         if bonus == 0:
             result["bonus"] = bonus
             result["info"] = "no bonus it is possible"
             result["success"] = True
         else:
             RedEnvelopes.generate(bonus, user_id, device.id, rd_type, rd_state)
             result["bonus"] = bonus
             result["info"] = "OK"
             result["success"] = True
     except Exception as e:
         result["bonus"] = 0
         result["info"] = e.message
         result["success"] = False
     return result
Ejemplo n.º 2
0
 def set_device_publish_state(sequence):
     result = dict()
     try:
         device = Devices.get(sequence)
         if device:
             device.is_published = True
             device.save()
             result["info"] = "set is_published successfully"
             result["success"] = True
         else:
             result["success"] = False
             result["info"] = "device does not exist"
     except Exception as ex:
         Logs.print_current_function_name_and_line_number(ex)
         result["success"] = False
         result["info"] = ex.message
     return result
Ejemplo n.º 3
0
    def get4device(sequence, user_id):
        """
        新用户(第一次发布的用户)和 新设备(第一次发布的设备)获取设备红包
        :param sequence:  设备UUID
        :param user_id:  用户ID
        :return: 红包数据,获取红包是否成功,说明信息
        """
        result = {}
        # configuration = RedEnvelopeConfiguration.get_configuration()
        RedEnvelopeConfiguration.set_red_envelope_configuration()
        device = Devices.get(sequence)
        rd_type = RedEnvelopes.RED_ENVELOPE_TYPE_DEVICE
        rd_state = RedEnvelopes.RED_ENVELOPE_STATE_REQUEST
        bonus = RedEnvelopeConfiguration.RED_ENVELOPE_BY_DEVICE
        if not device:
            result["bonus"] = 0
            result["info"] = "the device does not exist"
            result["success"] = False
            return result

        if device:
            publishes_device = Publishes.get_publishes_by_device(device.id)
        else:
            publishes_device = None
        if user_id:
            publishes_user = Publishes.get_publishes_by_user(user_id)
        else:
            publishes_user = None

        if not publishes_device and not publishes_user:
            RedEnvelopes.generate(bonus, user_id, device.id, rd_type, rd_state)
            result["bonus"] = bonus
            result["info"] = "OK"
            result["success"] = True
        else:
            if publishes_device:
                result["bonus"] = 0
                result["info"] = "the device has got a bonus"
                result["success"] = True
            else:
                result["bonus"] = 0
                result["info"] = "the user has published before"
                result["success"] = False

        return result
Ejemplo n.º 4
0
    def get4rain(sequence, user_id):
        """
        :param sequence:  设备UUID
        :param user_id:  用户ID
        :return: 红包雨 -- 是否成功, 说明信息,红包金额
        查看红包雨是否已经发放了足够数量; 查看今天是否获取了请求红包或有效红包;
        """
        result = {}
        RedEnvelopeConfiguration.set_red_envelope_configuration()

        bonus = 0
        user = Users.get_user_by_id(user_id)
        phone = user.username

        if SpecialActivity.exist_in_99(phone):
            today = Datetimes.get_now()
            today_start = Datetimes.get_day_start(today)
            today_end = Datetimes.get_day_end(today)
            today_red_envelope = RedEnvelopes.get_valid_or_request_red_envelope(
                today_start, today_end, RedEnvelopes.RED_ENVELOPE_TYPE_RAIN)
            rest = 0.27 - today_red_envelope
            min_money = 0.01
            min_value = 1
            max_value = 27
            possibility = 1
            factor = 100
            bonus = RedEnvelopes.compute_red_envelope(
                rest,
                min_money,
                min_value,
                max_value,
                possibility,
                factor
            )
        elif SpecialActivity.exist_in_119(phone):
            today = Datetimes.get_now()
            today_start = Datetimes.get_day_start(today)
            today_end = Datetimes.get_day_end(today)
            today_red_envelope = RedEnvelopes.get_valid_or_request_red_envelope(
                today_start, today_end, RedEnvelopes.RED_ENVELOPE_TYPE_RAIN)
            rest = 0.32 - today_red_envelope
            min_money = 0.01
            min_value = 1
            max_value = 32
            possibility = 1
            factor = 100
            bonus = RedEnvelopes.compute_red_envelope(
                rest,
                min_money,
                min_value,
                max_value,
                possibility,
                factor
            )
        else:

            count = RedEnvelopes.get_rain_count(user_id)
            if count >= RedEnvelopeConfiguration.RED_ENVELOPE_RAIN_COUNT:
                result["success"] = False
                result["info"] = "the rain stopped"
                result["bonus"] = 0
                return result

            if RedEnvelopes.has_got_rain(user_id):
                result["success"] = False
                result["info"] = "you have got the rain today"
                result["bonus"] = 0
                return result
            device = Devices.get(sequence)
            if not device:
                result["success"] = False
                result["info"] = "There is no device"
                result["bonus"] = 0
                return result
            rd_type = RedEnvelopes.RED_ENVELOPE_TYPE_RAIN
            rd_state = RedEnvelopes.RED_ENVELOPE_STATE_REQUEST

            start_and_end = RedEnvelopes.get_rain_start_and_end()
            start = start_and_end["start"]
            end = start_and_end["end"]
            given_bonus = RedEnvelopes.get_valid_and_request_bonus(start, end, rd_type)
            rest = RedEnvelopeConfiguration.RED_ENVELOPE_RAIN_THRESHOLD - given_bonus
            factor = RedEnvelopeConfiguration.RED_ENVELOPE_FACTOR
            min_money = RedEnvelopeConfiguration.RED_ENVELOPE_RAIN_MIN
            min_value = RedEnvelopeConfiguration.RED_ENVELOPE_RAIN_MIN * factor
            max_value = RedEnvelopeConfiguration.RED_ENVELOPE_RAIN_MAX * factor
            bonus = RedEnvelopes.compute_red_envelope(
                rest,
                min_money,
                min_value,
                max_value,
                RedEnvelopeConfiguration.RED_ENVELOPE_RAIN_POSSIBILITY,
                factor
            )
        result["bonus"] = bonus
        if bonus == 0:
            result["success"] = False
            result["info"] = "There is no enough money for red envelope or it is possible"
        else:
            RedEnvelopes.generate(bonus, user_id, device.id, rd_type, rd_state)
            result["success"] = True
            result["info"] = "OK"
        return result