示例#1
0
 def get_post_win_count_by_user(user_id):
     try:
         user = Users.get_user_by_id(user_id)
         user_extension = Users.get_user_extension(user.username)
         count = 0
         for fp in ForumPost.objects.all():
             if user_extension in fp.win_users.all():
                 count += 1
         return count
     except Exception as ex:
         Logs.print_current_function_name_and_line_number(ex)
         return 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