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
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
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
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