Example #1
0
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
Example #2
0
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
Example #3
0
 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
Example #4
0
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
Example #5
0
 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
Example #6
0
 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
Example #7
0
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
Example #8
0
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
Example #9
0
    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
Example #10
0
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)
Example #11
0
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
Example #13
0
    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
Example #14
0
    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
Example #15
0
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()
Example #16
0
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))