def get_2019_donate_rank(): """ 获取2019集资排名 :return: """ rst = mysql_util.select_all(""" select s.id, s.`name`, sum(o.`backer_money`) as c from `order` o, supporter s where o.`supporter_id` = s.`id` and o.`pro_id` in (44611, 45584, 47645, 47863, 48285, 50755, 51567, 54590, 55194, 57085, 57083, 59267, 59708, 61410, 62988, 64096, 64735, 65643, 66888, 68067, 69304, 70158, 70956, 71842, 72535, 73894, 74791, 75412, 79264) group by s.`id` order by c desc limit 25; """) cur_rank = 0 row_tmp = 0 last_val = -1 new_rst = [] for rank in rst: row_tmp += 1 if rank[2] != last_val: cur_rank = row_tmp if cur_rank > 25: continue last_val = rank[2] rank_tmp = rank + (cur_rank, ) new_rst.append(rank_tmp) logger.debug(new_rst) message = '' for rank in new_rst: sub_message = '%s.%s: %s元\n' % (rank[3], str(rank[1], encoding='utf8'), rank[2]) message += sub_message return message
def get_donate_rank(start_date, num): """ 获取生日集资排名 :param start_date: :param num: :return: """ rst = mysql_util.select_all(""" select s.id, s.`name`, sum(o.`backer_money`) as c from `order` o, supporter s where o.`supporter_id` = s.`id` and o.`pro_id` in ('4mr9Xz920100009000043331') and o.`pay_time` >= '{}' group by s.`id` order by c desc limit {}; """.format(start_date, num)) cur_rank = 0 row_tmp = 0 last_val = -1 new_rst = [] for rank in rst: row_tmp += 1 if rank[2] != last_val: cur_rank = row_tmp if cur_rank > 25: continue last_val = rank[2] rank_tmp = rank + (cur_rank, ) new_rst.append(rank_tmp) logger.debug(new_rst) message = '' for rank in new_rst: sub_message = '%s.%s: %s元\n' % (rank[3], str(rank[1], encoding='utf8'), rank[2]) message += sub_message return message
def get_jizi_ranking_list(self, pro_id): """ 获取集资排名列表,从本地获取 :param pro_id: 项目id :return: """ rst = mysql_util.select_all( """ select supporter_id, sum(backer_money) as total from `order` where pro_id=%s group by supporter_id order by total desc; """, (pro_id, )) return rst
def get_all_character(): """ 获取所有人物 :return: """ my_logger.info('获取所有人物') rst = mysql_util.select_all(""" SELECT * from `t_character`; """) character_list = [] if rst: for a in rst: character = Character(a[0], str(a[1], encoding='utf-8'), int(a[2]), int(a[3]), int(a[4]), int(a[5]), int(a[6])) character_list.append(character) return character_list
def find_user_daka_rank(self, user_id, pro_id): """ 在打卡榜中找到用户的排名 :param user_id: :param pro_id: :return: """ my_logger.info('找到用户id为%s的打卡排名', user_id) ranking_list = mysql_util.select_all(""" select supporter_id, count(distinct(date(pay_time))) as c from `order` where pro_id=%s group by supporter_id order by c desc; """, (pro_id,)) cur_rank = 0 for temp_id, days in ranking_list: cur_rank += 1 if temp_id == user_id: return cur_rank, days return -1, -1
def find_user_jizi_rank(self, user_id, pro_id): """ 在集资榜中找到用户的排名 :param user_id: :param pro_id: :return: """ my_logger.info('找到id为%s的集资排名', user_id) ranking_list = mysql_util.select_all(""" select supporter_id, sum(backer_money) as c from `order` where pro_id=%s group by supporter_id order by c desc; """, (pro_id,)) cur_rank = 0 for temp_id, total in ranking_list: cur_rank += 1 if temp_id == user_id: return cur_rank, total return -1, -1
def get_current_points(pro_id): if pro_id not in [SWEET_PRO_ID, TREAT_PRO_ID]: return 0 time0 = time.time() points = 0 rst = mysql_util.select_all( """ SELECT `point` from `point_detail` WHERE `pro_id` = %s """, (pro_id, )) if not rst: return points for a in rst: points += a[0] my_logger.info('当前累计分数: %s' % points) my_logger.debug('该函数共消耗时间: %s' % (time.time() - time0)) return points
def __get_jizi_ranking_list_by_date_diff(pro_id, day_diff=0): """ 获取当日集资排名 :param pro_id: :param day_diff:与今天相差的天数 :return: 排名tuple 格式(supporter_id, supporter_name, total_amount, rank) """ # 总额 rst2 = mysql_util.select_one( """ select SUM(`order`.backer_money) as total from `order` where `order`.pro_id = %s and CURDATE()-%s=DATE(`order`.pay_time); """, (pro_id, day_diff)) total = rst2[0] # 集资排名 rst = mysql_util.select_all( """ select `supporter`.id, `supporter`.name, SUM(`order`.backer_money) as total from `order`, `supporter` where `supporter`.id=`order`.supporter_id and `order`.pro_id = %s and CURDATE()-%s=DATE(`order`.pay_time) group by `order`.supporter_id order by total desc; """, (pro_id, day_diff)) cur_rank = 0 row_tmp = 0 last_val = -1 new_rst = [] for rank in rst: row_tmp += 1 if rank[2] != last_val: cur_rank = row_tmp if cur_rank > 10: continue last_val = rank[2] rank_tmp = rank + (cur_rank, ) new_rst.append(rank_tmp) logger.debug(new_rst) return new_rst
def get_today_jizi_ranking_list(self, pro_id): """ 获取当日集资排名 :param pro_id: :return: 排名tuple 格式(supporter_id, supporter_name, total_amount, rank) """ # 总额 rst2 = mysql_util.select_one( """ select SUM(`order`.backer_money) as total from `order` where `order`.pro_id = %s and CURDATE()=DATE(`order`.pay_time); """, (pro_id, )) total = rst2[0] # 集资排名 rst = mysql_util.select_all( """ select `supporter`.id, `supporter`.name, SUM(`order`.backer_money) as total from `order`, `supporter` where `supporter`.id=`order`.supporter_id and `order`.pro_id = %s and CURDATE()=DATE(`order`.pay_time) group by `order`.supporter_id order by total desc; """, (pro_id, )) cur_rank = 0 row_tmp = 0 last_val = -1 new_rst = [] for rank in rst: row_tmp += 1 if rank[2] != last_val: cur_rank = row_tmp last_val = rank[2] rank_tmp = rank + (cur_rank, ) new_rst.append(rank_tmp) my_logger.debug(new_rst) return new_rst, total
def get_huitui_rank(context): """ 获取排行榜 :return: """ logger.debug('获取排行榜') rst = mysql_util.select_all(""" select s.`name`, tc.`name`, CONVERT((tc.prop1 * 1.5 + tc.prop2 + tc.prop3 * 1.2 + tc.prop5 * 0.9) * (1 + tc.prop4 / 100), SIGNED) as ce from `t_character` tc, `supporter` s where tc.`modian_id` = s.`id` order by ce desc limit 10; """) rank = 1 result_str = '灰推群侠传排行榜: \n' logger.debug(rst) for name, c_name, ce in rst: result_str += '{}.{}({}): {}\n'.format(rank, str(name, encoding='utf-8'), str(c_name, encoding='utf-8'), ce) rank += 1 logger.debug(result_str) bot.send(context, result_str)
def sync_names(): """ 程序启动时,本地和db同步下已使用的姓名 :return: """ global TOTAL_NAMES # 从DB获取已使用的姓名 rst = mysql_util.select_all(""" SELECT `name` from `t_character`; """) my_logger.debug(type(rst)) my_logger.debug(rst) # my_logger.debug('names in db: %s' % rst) name_used = [] if rst: for a in rst: name_used.append(str(a[0], encoding='utf-8')) my_logger.debug('name_used: %s' % name_used) # name_used = ['刘超', '李凡'] # return list1 - list2 total_copy = TOTAL_NAMES.copy() TOTAL_NAMES = total_copy.difference(set(name_used))
def get_current_points(pro_id): if pro_id not in [FXF_PRO_ID, WJL_PRO_ID]: return 0 time0 = time.time() # 当前集资人数 fxf_supporter_num = get_current_supporter_num(FXF_PRO_ID) wjl_supporter_num = get_current_supporter_num(WJL_PRO_ID) supporter_num_points = 0 rst = mysql_util.select_all( """ select * from `order` where pro_id=%s and `backer_money` <> 99.9 """, (pro_id, )) points = 0 for order in rst: """ (order_id, supporter_id, backer_money, pay_time, pro_id) """ add = plus_points(pro_id, order[2]) points += add if pro_id == FXF_PRO_ID: make_trouble_time_other = get_make_trouble_time(WJL_PRO_ID) make_trouble_time_self = get_make_trouble_time(FXF_PRO_ID) bonus_minus_time = get_plus_10_times(WJL_PRO_ID) # 对方通过捣乱给己方扣除的分数 make_trouble_points = make_trouble_time_other * WJL_MAKE_TROUBLE_POINTS # 通过累计+10分的记录为对方扣除的分数(每5次扣除10分) bonus_minus_points = int(bonus_minus_time // 5) * 10 my_logger.debug('汪佳翎共给冯晓菲捣乱%s次,共扣除%s分' % (make_trouble_time_other, make_trouble_points)) my_logger.debug('冯晓菲共有%s次+10分的记录,为汪佳翎扣除%s分' % (bonus_minus_time, bonus_minus_points)) if fxf_supporter_num > wjl_supporter_num: supporter_num_points = 61 elif pro_id == WJL_PRO_ID: make_trouble_time_self = get_make_trouble_time(WJL_PRO_ID) make_trouble_time_other = get_make_trouble_time(FXF_PRO_ID) bonus_minus_time = get_plus_10_times(FXF_PRO_ID) # 对方通过捣乱给己方扣除的分数 make_trouble_points = make_trouble_time_other * FXF_MAKE_TROUBLE_POINTS # 通过累计+10分的记录为对方扣除的分数(每5次扣除10分) bonus_minus_points = int(bonus_minus_time // 5) * 10 my_logger.debug('冯晓菲共给汪佳翎捣乱%s次,共扣除%s分' % (make_trouble_time_other, make_trouble_points)) my_logger.debug('冯晓菲共有%s次+10分的记录,为汪佳翎扣除%s分' % (bonus_minus_time, bonus_minus_points)) if fxf_supporter_num < wjl_supporter_num: supporter_num_points = 61 else: return 0 my_logger.info('%s人头数得分为:%s' % (pro_id, supporter_num_points)) # 己方捣乱加成分数 my_logger.info('%s捣乱次数为: %s' % (pro_id, make_trouble_time_self)) make_trouble_bonus_points = 10 * int(make_trouble_time_self // 5) my_logger.info('%s捣乱共加分: %s' % (pro_id, make_trouble_bonus_points)) # 分数计算方法: 基本得分 - 对方捣乱分数 + 己方捣乱分数(每5次捣乱+10分) - 额外分数(每有5次+10分项目 为对方-10分)+ 人头得分 # points = points - make_trouble_points + make_trouble_bonus_points - bonus_minus_points + supporter_num_points points = points - make_trouble_points + make_trouble_bonus_points - bonus_minus_points my_logger.info('当前%s的总得分为: %s' % (pro_id, points)) my_logger.debug('该函数共消耗时间: %s' % (time.time() - time0)) return points
def get_cards(self, modian_id): """ 获取该人所有已抽中的卡 :param modian_id: :return: """ logger.info("查询已抽中的卡: {}".format(modian_id)) rst = mysql_util.select_all(""" select card_id, count(*) from `draw_record` where supporter_id=%s group by `card_id`; """, (modian_id,)) rst_level = {} rst_level[CardLevel.UR] = [] rst_level[CardLevel.SSR] = [] rst_level[CardLevel.SR] = [] rst_level[CardLevel.R] = [] rst_num = {} type_dict = { # CardType.STAR: '星组', # CardType.MOON: '月组', # CardType.SUN: '日组', CardType.NORMAL: '普通', CardType.SPECIAL: '活动限定', } if rst and len(rst) > 0: logger.debug(rst) for tmp in rst: card = self.cards_single[int(tmp[0])] if card not in rst_level[card.level]: rst_level[card.level].append(card) else: return '桃叭ID: {}, 当前暂未抽中任何卡片 \n'.format(modian_id) logger.debug(rst_level) logger.debug(rst_num) self.generate_card_pic(rst_level, modian_id) report = '桃叭ID: {}, 当前已抽中的卡片有: \n'.format(modian_id) if CardLevel.UR in rst_level and len(rst_level[CardLevel.UR]) > 0: report += '【UR】({}/{}): '.format(len(rst_level[CardLevel.UR]), len(self.all_cards[CardLevel.UR])) for card in rst_level[CardLevel.UR]: # report += '{}-{}, '.format(type_dict[card.type0], card.name) report += '{}, '.format(card.name) report += '\n' logger.debug(report) if CardLevel.SSR in rst_level and len(rst_level[CardLevel.SSR]) > 0: report += '【SSR】({}/{}): '.format(len(rst_level[CardLevel.SSR]), len(self.all_cards[CardLevel.SSR])) for card in rst_level[CardLevel.SSR]: # report += '{}-{}, '.format(type_dict[card.type0], card.name) report += '{}, '.format(card.name) report += '\n' logger.debug(report) if CardLevel.SR in rst_level and len(rst_level[CardLevel.SR]) > 0: report += '【SR】({}/{}): '.format(len(rst_level[CardLevel.SR]), len(self.all_cards[CardLevel.SR])) for card in rst_level[CardLevel.SR]: # report += '{}{}, '.format(type_dict[card.type0], card.sub_id) report += '{}, '.format(card.name) report += '\n' if CardLevel.R in rst_level and len(rst_level[CardLevel.R]) > 0: report += '【R】({}/{}): '.format(len(rst_level[CardLevel.R]), len(self.all_cards[CardLevel.R])) for card in rst_level[CardLevel.R]: # report += '{}{}, '.format(type_dict[card.type0], card.sub_id) report += '{}, '.format(card.name) report += '\n' current_score = self.get_current_score(modian_id) report += '当前积分为: {}\n'.format(current_score) logger.debug(report) return report
def draw(self, user_id, nickname, backer_money, pay_time): logger.info('抽卡: user_id: %s, nickname: %s, backer_money: %s, pay_time: %s', user_id, nickname, backer_money, pay_time) # 计算抽卡张数 card_num = self.compute_draw_nums(backer_money) if card_num == 0: logger.info('集资未达到标准,无法抽卡') return '' logger.info('共抽卡%d张', card_num) rst = {} rst_type = {} rst_level = {} level_list = [CardLevel.R, CardLevel.SR, CardLevel.SSR, CardLevel.UR] type_dict = { # CardType.STAR: '星组', # CardType.MOON: '月组', # CardType.SUN: '日组', CardType.NORMAL: '普通', CardType.SPECIAL: '活动限定' } # 获取此ID已抽中的全部卡牌 rst_tmp = mysql_util.select_all(""" SELECT distinct(`card_id`) from `draw_record` where supporter_id="%s" """, (user_id,)) card_has = set() # 该用户已经拥有的卡片 card_new = set() # 该用户收集到的新卡 if rst_tmp and len(rst_tmp) > 0: for tmp in rst_tmp: card_has.add(tmp[0]) logger.debug('摩点ID: {}, 当前拥有的卡片: {}'.format(user_id, card_has)) score_add = 0 insert_sql = 'INSERT INTO `draw_record` (`supporter_id`, `card_id`, `draw_time`, `backer_money`) VALUES ' flag = False for no in range(card_num): # 先判断能否抽中卡,如果抽不中,直接跳过 # draw_rst = self.can_draw() # if not draw_rst: # continue flag = True # 卡片类型 idx = util.weight_choice(level_list, self.weights) card_type = level_list[idx] # 在对应卡片类型中,抽出一张卡 card = util.choice(self.cards[card_type])[0] logger.debug('抽出的卡: %s' % card) if card.id in card_has: logger.debug('卡片{}已经拥有,积分+1') # 如果已经拥有该卡片,积分+1 score_add += 1 else: card_new.add(card.id) card_has.add(card.id) # card = self.base_cards[card_index] insert_sql += """("%s", %s, '%s', %s),""" % (user_id, card.id, pay_time, backer_money) # 此种类型的卡如果已经达到了1张,则将该卡片从卡池中移除 # if card.id in ACTIVITY_CARD_ID: # rst2 = mysql_util.select_one(""" # SELECT count(*) from `draw_record` WHERE `card_id` = %s # """, (card.id,)) # if rst2: # if rst2[0] == 1: # if card in self.cards[card.level]: # self.cards[card.level].remove(card) if card in rst: rst[card] += 1 else: rst[card] = 1 if card.level not in rst_level: rst_level[card.level] = [] if card not in rst_level[card.level]: rst_level[card.level].append(card) if card.type0 not in rst_type: rst_type[card.type0] = [] if card not in rst_type[card.type0]: rst_type[card.type0].append(card) print(insert_sql[:-1]) logger.debug(insert_sql[:-1]) logger.debug('摩点ID: {}, 抽到的新卡片: {}'.format(user_id, card_new)) img_flag = True img_report = '' report = '恭喜抽中:\n' card_new_list = [] # 用来发图的 if CardLevel.UR in rst_level and len(rst_level[CardLevel.UR]) > 0: report += '【UR】: ' for card in rst_level[CardLevel.UR]: # report += '{}-{}*{}, '.format(type_dict[card.type0], card.name, rst[card]) new_flag = '' if card.id in card_new: new_flag = emojis.encode('(:new:)') card_new_list.append(self.cards_single[card.id]) report += '{}*{}{}, '.format(card.name, rst[card], new_flag) if img_flag: if len(card_new_list) > 0: img = util.choice(card_new_list)[0] else: img = util.choice(rst_level[CardLevel.UR])[0] img_report = '[CQ:image,file={}]\n'.format(img.url) img_flag = False report += '\n' if CardLevel.SSR in rst_level and len(rst_level[CardLevel.SSR]) > 0: report += '【SSR】: ' for card in rst_level[CardLevel.SSR]: # report += '{}-{}*{}, '.format(type_dict[card.type0], card.name, rst[card]) new_flag = '' if card.id in card_new: new_flag = emojis.encode('(:new:)') card_new_list.append(self.cards_single[card.id]) report += '{}*{}{}, '.format(card.name, rst[card], new_flag) if img_flag: if len(card_new_list) > 0: img = util.choice(card_new_list)[0] else: img = util.choice(rst_level[CardLevel.SSR])[0] img_report = '[CQ:image,file={}]\n'.format(img.url) img_flag = False report += '\n' if CardLevel.SR in rst_level and len(rst_level[CardLevel.SR]) > 0: report += '【SR】: ' for card in rst_level[CardLevel.SR]: # report += '{}{}*{}, '.format(type_dict[card.type0], card.sub_id, rst[card]) # report += '{}-{}*{}, '.format(type_dict[card.type0], card.name, rst[card]) new_flag = '' if card.id in card_new: new_flag = emojis.encode('(:new:)') card_new_list.append(self.cards_single[card.id]) report += '{}*{}{}, '.format(card.name, rst[card], new_flag) if img_flag: if len(card_new_list) > 0: img = util.choice(card_new_list)[0] else: img = util.choice(rst_level[CardLevel.SR])[0] img_report = '[CQ:image,file={}]\n'.format(img.url) img_flag = False report += '\n' if CardLevel.R in rst_level and len(rst_level[CardLevel.R]) > 0: report += '【R】: ' for card in rst_level[CardLevel.R]: # report += '{}{}*{}, '.format(type_dict[card.type0], card.sub_id, rst[card]) # report += '{}-{}*{}, '.format(type_dict[card.type0], card.name, rst[card]) new_flag = '' if card.id in card_new: new_flag = emojis.encode('(:new:)') card_new_list.append(self.cards_single[card.id]) report += '{}*{}{}, '.format(card.name, rst[card], new_flag) if img_flag: if len(card_new_list) > 0: img = util.choice(card_new_list)[0] else: img = util.choice(rst_level[CardLevel.R])[0] img_report = '[CQ:image,file={}]\n'.format(img.url) img_flag = False report += '\n' report += img_report if flag: # 如果一张都没有抽中,就不执行sql语句 mysql_util.query(insert_sql[:-1]) # 积分保存到数据库 if score_add > 0: mysql_util.query(""" INSERT INTO `t_card_score` (`modian_id`, `score`) VALUES (%s, %s) """, (user_id, score_add)) report += '通过重复卡获取积分: {}\n'.format(score_add) report += '当前积分为: {}\n'.format(self.get_current_score(user_id)) logger.debug(report) return report
def update_modian_conf(): global modian_handler time0 = time.time() my_logger.info('读取摩点配置') ConfigReader.read_conf() # modian_json = json.load(open("data/modian.json", encoding='utf8')) # modian_json = json.load(open("data/weixin_group_account.json", encoding='utf8')) modian_json = json.load(open("data/taoba_account.json", encoding='utf8')) modian_handler.login(modian_json['taoba_account'], modian_json['taoba_passwd']) global_config.MODIAN_POSTSCRIPTS = modian_json['modian_postscripts'] # 摩点集资PK链接数组初始化 global_config.MODIAN_NEED_DISPLAY_PK = modian_json[ 'modian_need_display_pk'] for modian_pk_j in modian_json['modian_pk_activities']: global_config.MODIAN_PK_ARRAY.append(modian_pk_j) # 是否需要开启抽卡功能 global_config.MODIAN_CARD_DRAW = modian_json['modian_need_card_draw'] # global_config.MODIAN_300_ACTIVITY = modian_json['modian_300_activity'] # 需要适应同时开多个链接的情况 global_config.MODIAN_ARRAY = [] for modian_j in modian_json['monitor_activities']: # if modian_j['modian_need_display_rank'] is False: # modian = ModianEntity(modian_j['modian_link'], modian_j['modian_title'], modian_j['modian_pro_id'], False, # modian_j['broadcast_groups']) # modian = GroupAccountEntity(modian_j['modian_link'], modian_j['modian_title'], modian_j['modian_pro_id'], # modian_j['broadcast_groups'], modian_j['qrcode']) modian = TaoBaEntity(modian_j['modian_link'], modian_j['modian_title'], modian_j['modian_pro_id'], modian_j['broadcast_groups'], modian_j['qrcode']) # elif modian_j['wds_need_display_rank'] is True: # modian = ModianEntity(modian_j['modian_link'], modian_j['modian_title'], modian_j['modian_pro_id'], True, # modian_j['broadcast_groups']) global_config.MODIAN_ARRAY.append(modian) modian_handler.taoba_project_array = global_config.MODIAN_ARRAY # modian_handler.init_order_queues() modian_handler.card_draw_handler.read_config() global_config.JIZI_NOTIFY_GROUPS = ConfigReader.get_property( 'qq_conf', 'jizi_notify_groups').split(';') modian_groups = global_config.JIZI_NOTIFY_GROUPS modian_handler.group_account_notify_groups = modian_groups my_logger.debug('JIZI_NOTIFY_GROUPS: %s, length: %d', ','.join(global_config.JIZI_NOTIFY_GROUPS), len(modian_handler.group_account_notify_groups)) my_logger.debug('读取正在进行中的flag活动') global_config.MODIAN_FLAG_ACTIVITIES = {} flag_json = json.load(open('data/modian_flag.json', encoding='utf8'))['activities'] for modian in global_config.MODIAN_ARRAY: pro_id = modian.taoba_id global_config.MODIAN_FLAG_ACTIVITIES[pro_id] = [] for activity in flag_json: pro_id = activity['pro_id'] end_time = activity['end_time'] if util.convert_timestr_to_timestamp(end_time) > time.time(): flag = ModianFlagEntity(activity['flag_name'], activity['pro_id'], activity['target_flag_amount'], activity['end_time'], activity['remark']) global_config.MODIAN_FLAG_ACTIVITIES[int(pro_id)].append(flag) my_logger.debug('MODIAN_FLAG_ACTIVITIES: %s', global_config.MODIAN_FLAG_ACTIVITIES) my_logger.debug('读取正在进行的人头flag活动') global_config.MODIAN_COUNT_FLAG_ACTIVITIES = {} count_flag_json = json.load( open('data/modian_count_flag.json', encoding='utf8'))['activities'] for modian in global_config.MODIAN_ARRAY: pro_id = modian.taoba_id global_config.MODIAN_COUNT_FLAG_ACTIVITIES[pro_id] = [] for activity in count_flag_json: pro_id = activity['pro_id'] start_time = activity['start_time'] end_time = activity['end_time'] if util.convert_timestr_to_timestamp( start_time) >= util.convert_timestr_to_timestamp(end_time): my_logger.error('人头类flag,起始时间大于结束时间!') raise RuntimeError('起始时间大于结束时间') time0 = time.time() if util.convert_timestr_to_timestamp( end_time) > time0 > util.convert_timestr_to_timestamp( start_time): flag = ModianCountFlagEntity(activity['flag_name'], activity['pro_id'], activity['target_flag_amount'], activity['start_time'], activity['end_time'], activity['remark']) global_config.MODIAN_COUNT_FLAG_ACTIVITIES[int(pro_id)].append( flag) my_logger.debug('MODIAN_COUNT_FLAG_ACTIVITIES: %s', global_config.MODIAN_COUNT_FLAG_ACTIVITIES) # 接棒活动更新,读取json文件中的内容,更新到数据库中 my_logger.debug('接棒活动更新,读取json文件中的内容,更新到数据库中') jiebang_json = json.load(open('data/modian_jiebang.json', encoding='utf8'))['activities'] # conn = sqlite3.connect('data/modian.db', check_same_thread=False) for activity in jiebang_json: end_time = activity['end_time'] my_logger.debug('活动结束时间: {}; 当前时间:{}'.format( util.convert_timestr_to_timestamp(end_time), time.time())) if util.convert_timestr_to_timestamp(end_time) < time.time(): my_logger.debug('活动结束时间早于当前时间,跳过') continue name = activity['jiebang_name'] try: # cursor = conn.cursor() # c = cursor.execute(""" # select * from jiebang WHERE name=? # """, (name, )) # rst = c.fetchall() rst = mysql_util.select_one( """ select * from jiebang WHERE name=%s """, (name, )) my_logger.debug(rst) if rst is not None: my_logger.debug('DB中有相应的接棒活动') else: my_logger.debug('DB中没有对应的接棒活动,需要创建') mysql_util.query( """ INSERT INTO jiebang (name, pro_id, current_stick_num, start_time, end_time, target_stick_num, min_stick_amount, need_detail) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) """, (name, activity['pro_id'], 0, activity['start_time'], activity['end_time'], activity['target_stick_num'], activity['min_stick_amount'], activity['need_detail'])) # conn.commit() # else: # raise RuntimeError('接棒活动名称错误!') except Exception as e: my_logger.error('读取mysql出现错误') my_logger.exception(e) # finally: # cursor.close() # 读取正在进行中的接棒活动 my_logger.debug('读取正在进行中的接棒活动') global_config.MODIAN_JIEBANG_ACTIVITIES = {} for modian in global_config.MODIAN_ARRAY: pro_id = modian.taoba_id global_config.MODIAN_JIEBANG_ACTIVITIES[pro_id] = [] try: # cursor = conn.cursor() rst = mysql_util.select_all( """ SELECT name, pro_id, current_stick_num, last_record_time, start_time, end_time, target_stick_num, min_stick_amount, need_detail FROM jiebang where pro_id=%s and end_time >= NOW() and current_stick_num < target_stick_num """, (pro_id, )) if rst: for jiebang in rst: my_logger.debug('jiebang name: {}'.format( str(jiebang[0], encoding='utf-8'))) # 修正当前棒数 my_logger.info('修正接棒棒数') real_stick_num = 0 rst0 = mysql_util.select_all( """ SELECT backer_money FROM `order` WHERE pro_id = %s and backer_money >= %s and pay_time >= %s and pay_time <= %s """, (pro_id, jiebang[7], jiebang[4], jiebang[5])) my_logger.debug( """ SELECT backer_money FROM `order` WHERE pro_id = %s and backer_money >= %s and pay_time >= %s and pay_time <= %s """ % (pro_id, jiebang[7], jiebang[4], jiebang[5])) my_logger.debug(rst0) if rst0: for order in rst0: my_logger.debug('order: {}'.format(order[0])) real_stick_num += int(order[0] // jiebang[7]) my_logger.info('记录棒数: {}, 实际棒数: {}'.format( jiebang[2], real_stick_num)) mysql_util.query( """ UPDATE jiebang SET current_stick_num = %s WHERE name = %s """, (real_stick_num, jiebang[0])) my_logger.debug( 'jiebang: %s, %s, %s, %s, %s, %s, %s, %s, %s', jiebang[0], jiebang[1], jiebang[2], jiebang[3], jiebang[4], jiebang[5], jiebang[6], jiebang[7], jiebang[8]) jiebang_entity = ModianJiebangEntity( str(jiebang[0], encoding='utf-8'), jiebang[1], jiebang[2], jiebang[3], jiebang[4], jiebang[5], jiebang[6], jiebang[7], jiebang[8]) jiebang_entity.current_stick_num = real_stick_num my_logger.info('修正完成') global_config.MODIAN_JIEBANG_ACTIVITIES[pro_id].append( jiebang_entity) except Exception as e: my_logger.error('读取正在进行中的接棒活动出现错误!') my_logger.exception(e) # finally: # cursor.close() my_logger.debug(global_config.MODIAN_JIEBANG_ACTIVITIES) # conn.close() my_logger.debug('读取摩点配置耗时: %s秒', time.time() - time0) modian_handler.init_order_queues()
TOTAL_NAMES = set( util.read_txt(os.path.join(BASE_DIR, 'data', 'wuxia', 'names.txt'))) event_json = json.load( open(os.path.join(BASE_DIR, 'data', 'wuxia', 'event.json'), encoding='utf-8')) SCHOOLS = util.read_txt(os.path.join(BASE_DIR, 'data', 'wuxia', 'school.txt')) skill1_list, skill2_list = read_skill_list() equipment_list = read_equipments_list() item_list = read_item_list() sync_names() if __name__ == '__main__': rst = mysql_util.select_all(""" select s.`name`, tc.`name`, CONVERT((tc.prop1 * 1.5 + tc.prop2 + tc.prop3 * 1.2 + tc.prop5 * 0.9) * (1 + tc.prop4 / 100), SIGNED) as ce from `t_character` tc, `supporter` s where tc.`modian_id` = s.`id` order by ce desc limit 10; """) print(rst) result_str = '' rank = 1 for name, c_name, ce in rst: result_str += '{}.{}({}): {}\n'.format(rank, str(name, encoding='utf-8'), str(c_name, encoding='utf-8'), ce) rank += 1 print(result_str) # sync_names() # for i in range(1): # print(donate('1351108', 10.17))