Esempio n. 1
0
async def user_owner_group_info(user_id, page_size, current_page):
    """查询用户群主群信息"""
    async with db.conn.acquire() as con:
        if page_size == -1:
            st = await con.prepare('''
            select "group".id::varchar , "group".code, "group".name, launch_switch,mem_count, welcome_msg,
            to_char("group".create_date, 'YYYY-MM-DD HH24:MI:SS') as create_date from "group" left join "user" on 
            "group".user_id = "user".id where user_id = $1 and "group".owner_user_code = "user".code 
            and "group".status !=3 order by create_date desc''')
            groups = records_to_list(await st.fetch(user_id))
        else:
            st = await con.prepare('''
            select "group".id::varchar , "group".code, "group".name,mem_count, welcome_msg, launch_switch,
            to_char("group".create_date, 'YYYY-MM-DD HH24:MI:SS') as create_date from "group" left join "user" on 
            "group".user_id = "user".id where user_id = $1 and owner_user_code = "user".code and "group".status !=3 
            order by create_date desc limit $2 offset $3''')
            groups = records_to_list(await st.fetch(
                user_id, int(page_size),
                int(current_page) * int(page_size)))
        select_count = await con.prepare(
            '''select count(1) from "group" left join "user" on "group".user_id="user".id
        where user_id = $1 and owner_user_code ="user".code and "group".status !=3'''
        )
        total_records = await select_count.fetchval(user_id)
        page_info = get_page_info(page_size, current_page, total_records)
    return groups, page_info
Esempio n. 2
0
async def get_group_list(request, user, **kwargs):
    """获取用户的群列表"""
    user_id = user.get('user_id')
    status = request.raw_args.get('status')
    current_page = int(request.raw_args.get('current_page', 0))
    page_size = int(request.raw_args.get('page_size', 20))
    user_groups = []
    total_records = 0
    async with db.conn.acquire() as con:
        if int(status) == group_status['normal']:
            select_stmt = await con.prepare('''
            select "group".code, "group".launch_switch, "group".settle_count, "group".quality_level, "group".old_group,
            robot_group_map.nickname,"group".name , "robot".name as robot_name from "group" left join robot_group_map on
             "group".id = "robot_group_map".group_id left join robot on robot.id = "robot_group_map".robot_id where 
             "group".user_id = $1 and "group".status<>3 and "robot_group_map".status <>3 and "robot".status<>3 and 
             (quality_level is not null or old_group = 1) order by "group".create_date desc limit $2 offset $3'''
                                            )
            user_groups = records_to_list(await select_stmt.fetch(
                user_id, int(page_size),
                int(current_page) * int(page_size)))

            select_count = await con.prepare(
                '''select count(1) from "group" left join robot_group_map on 
            "group".id = robot_group_map.group_id left join robot on robot.id = robot_group_map.robot_id
                where "group".user_id = $1 and "group".status<>3 and "robot_group_map".status <>3 and "robot".status<>3 
                and (quality_level is not null or old_group = 1)''')
            total_records = await select_count.fetchval(user_id)
        elif int(status) == group_status['error']:
            select_stmt = await con.prepare(''' 
            select "group".code , "group".name, to_char("group".create_date, 'YYYY-MM-DD') as create_date  from "group"  where "group".user_id = $1 and "group".status != 3 and old_group != 1
            and quality_level is null order by "group".create_date desc limit $2 offset $3'''
                                            )
            user_groups = records_to_list(await select_stmt.fetch(
                user_id, int(page_size),
                int(current_page) * int(page_size)))

            select_count = await con.prepare('''select count(1) from "group" 
                where user_id = $1 and status != 3  and quality_level is null and old_group != 1'''
                                             )
            total_records = await select_count.fetchval(user_id)

    page_info = get_page_info(page_size, current_page, total_records)
    if len(user_groups) > 0 and int(status) == group_status['normal']:
        for item in user_groups:
            if not item['old_group']:
                if item['settle_count'] >= 30 and item['launch_switch'] == 0:
                    income_status = '未收益'
                else:
                    income_status = '收益中'
                item['income_status'] = income_status
                item['group_income'] = group_income[item['quality_level']]
            item['text_income'] = click_income
            item['robot_name'] = item['nickname'] if item[
                'nickname'] else item['robot_name']
            item.pop('nickname')
    return response_json(user_groups, page_info=page_info)
Esempio n. 3
0
async def robot_blocked(data):
    """
    机器人封号
    1. 缓存机器人封号时的状态
    2. 将该机器人置为封号状态
    """
    logger.info(f'robot blocked with params:{data}')
    robot_code = data.get('robot_id')
    async with db.conn.acquire() as con:
        get_robot_user_group_stmt = await con.prepare('''
            select "group".user_id, "group".id as group_id from "robot"
            join "robot_group_map" on "robot".id = "robot_group_map".robot_id
            join "group" on robot_group_map.group_id ="group".id where "robot".code = $1 and "robot".status <> 3 and "robot_group_map".status <> 3 order by "group".user_id'''
                                                      )
        robot_user_group_records = await get_robot_user_group_stmt.fetch(
            robot_code)
        robot_user_groups = records_to_list(robot_user_group_records)
        get_robot_stmt = await con.prepare(
            '''select id::varchar from "robot" where code = $1''')
        robot_id = await get_robot_stmt.fetchval(robot_code)
        redis_key = ROBOT_BLOCKED_REDIS_KEY.format(robot_code=robot_code)
        for user_id, items in groupby(robot_user_groups,
                                      key=itemgetter('user_id')):
            group_ids = [item('group_id') for item in items]
            await redis.conn.hset(redis_key, user_id, dumps(group_ids))
            await redis.conn.expire(redis_key, 60 * 60 * 24 * 7)
            for group_id in group_ids:
                await currency_delete_group(group_id,
                                            GroupCancelReason.ROBOT_BLOCKED)
        await remove_robot_distribute(robot_id)
        update_robot_stmt = await con.prepare(
            '''update "robot" set status = 5, update_date = now() where code = $1 and status <> 3'''
        )
        await update_robot_stmt.fetch(robot_code)
 async def mass_message_data(direction, current_page, page_size):
     async with db.conn.acquire() as con:
         if direction == 'up':
             st = await con.prepare(
                 '''select to_char(send_date, 'YYYY-MM-DD HH24:MI:SS') as send_date, 
                    jsonb_array_length(group_ids)::int as group_counts, status, id
                    from "group_task" where user_id=$1 and status <> $2 and type=1
                    and send_date >= timestamp 'today' and send_date <= (current_date + interval '3' day) 
                    order by send_date desc limit $3 offset $4''')
             st_count = await con.prepare(
                 '''select count(1) from "group_task" where user_id=$1 and status <> $2 and type=1
                    and send_date >= timestamp 'today' and send_date < (current_date + interval '3' day)'''
             )
         else:
             st = await con.prepare(
                 '''select to_char(send_date, 'YYYY-MM-DD HH24:MI:SS') as send_date, 
                    jsonb_array_length(group_ids)::int as group_counts, status, id
                    from "group_task" where user_id=$1 and status <> $2 and type=1
                    and send_date < timestamp 'today' and send_date >= (current_date - interval '3' day)
                    order by send_date desc limit $3 offset $4''')
             st_count = await con.prepare(
                 '''select count(1) from "group_task" where user_id=$1 and status <> $2 and type=1
                    and send_date < timestamp 'today' and send_date >= (current_date - interval '3' day)'''
             )
         count = await st_count.fetchval(user['user_id'], FAIL_DELETE)
         datas = await st.fetch(user['user_id'], FAIL_DELETE, page_size,
                                current_page * page_size)
     return records_to_list(datas), count
Esempio n. 5
0
async def get_problem_category(request, *args, **kwargs):
    """获取问题列表"""
    async with db.conn.acquire() as con:
        select_category = await con.prepare(
            '''select id, title, seq_no, type from "user_problem_category" 
               where status !=3''')
        problem_category = records_to_list(await select_category.fetch())
        return response_json(problem_category)
Esempio n. 6
0
 async def account_stat(account_id):
     async with db.conn.acquire() as con:
         balance_detail = await con.prepare(
             '''select to_char(settle_date, 'YYYY-MM-DD') as day, 
                sum(case when balance_type = 1 then change_amount else -change_amount end) as balance_detail 
                from "account_slip" where account_id=$1 and create_date::date >= (current_date - interval '14' day) 
                and amount_type <> 9 group by day order by day desc''')
         balance = await balance_detail.fetch(account_id)
     return records_to_list(balance)
Esempio n. 7
0
 async def chat_statistics():
     async with db.conn.acquire() as con:
         chat_stmt = await con.prepare(
             '''select g.user_id, tmp.group_code as code, tmp.mem_count as counts  
                from (select m.group_code, count(distinct mem_code) as mem_count from "message" m
                where m.send_date >= timestamp 'yesterday' and m.send_date < timestamp 'today'
                group by m.group_code) tmp join "group" g on g.code=tmp.group_code 
                where g.status<>3 order by g.user_id''')
         chats = await chat_stmt.fetch()
     return records_to_list(chats)
Esempio n. 8
0
async def get_user_distribute_robots(request, *args, **kwargs):
    """获取当前用户已分配的机器人列表"""
    user_id = kwargs['user']['user_id']
    async with db.conn.acquire() as con:
        select_robots = await con.prepare(
            '''select "robot".id, "robot".name, "robot".wechat_no from "robot" left join "robot_distribute" on 
               "robot_distribute".robot_id = "robot".id where "robot_distribute".user_id = $1 and 
               "robot_distribute".status !=3 and "robot".status !=3''')
        robots = records_to_list(await select_robots.fetch(user_id))
        return response_json(robots)
Esempio n. 9
0
 async def need_settlement_groups(groups):
     groups_join = ','.join(groups.keys())
     async with db.conn.acquire() as con:
         st = await con.prepare(
             '''select "group".id as group_id, "group".code, "user".id as user_id, "user".code as user_code
                from "group" join "user" on "group".user_id="user".id where "group".status<>3 and 
                exists(select tmp_code from (select unnest(string_to_array($1, ',')) as tmp_code) as tmp where tmp.tmp_code="group".code) 
                order by "user".code''')
         data = await st.fetch(groups_join)
     return records_to_list(data)
Esempio n. 10
0
 async def statistics_withdraw_user():
     '''统计打款用户'''
     async with db.conn.acquire() as con:
         st = await con.prepare(
             '''select distinct "account_withdraw".user_id from "account_withdraw" 
                join "user" on "user".id="account_withdraw".user_id
                where "account_withdraw".status = $1 and "account_withdraw".review_status = $2 
                and "user".status=1 group by "account_withdraw".user_id''')
         wd_users = await st.fetch(WITHDRAWING, REVIEW_SUCCESSED)
     logger.info(f'statistics user withdraw count: {len(wd_users)}')
     return records_to_list(wd_users)
Esempio n. 11
0
async def problem_feedback_export(request, *args, **kwargs):
    params = request.json
    sql, sql_count = await problem_sql(params)
    async with db.conn.acquire() as con:
        select_result = records_to_list(await con.fetch(sql))
    if not select_result:
        return response_json(None)
    title = [
        'phone', 'nickname', 'title', 'code', 'robot_name', 'robot_wechat_no',
        'group_name', 'description', 'create_date'
    ]
    out = io.BytesIO()
    workbook = xlsxwriter.Workbook(out)
    worksheet = workbook.add_worksheet()
    for item in title:
        worksheet.write(0, title.index(item), item)
    for item in select_result:
        worksheet.write(
            select_result.index(item) + 1, 0,
            item['phone'] if item['phone'] is not None else '')
        worksheet.write(
            select_result.index(item) + 1, 1,
            item['nickname'] if item['nickname'] is not None else '')
        worksheet.write(
            select_result.index(item) + 1, 2,
            item['title'] if item['title'] is not None else '')
        worksheet.write(
            select_result.index(item) + 1, 3,
            item['code'] if item['code'] is not None else '')
        worksheet.write(
            select_result.index(item) + 1, 4,
            item['wechat_no'] if item['wechat_no'] is not None else '')
        worksheet.write(
            select_result.index(item) + 1, 5,
            item['name'] if item['name'] is not None else '')
        worksheet.write(
            select_result.index(item) + 1, 6,
            item['group_name'] if item['group_name'] is not None else '')
        worksheet.write(
            select_result.index(item) + 1, 7,
            item['description'] if item['description'] is not None else '')
        worksheet.write(
            select_result.index(item) + 1, 8,
            item['create_date'] if item['create_date'] is not None else '')

    workbook.close()
    out.seek(0)
    filename = quote("问题反馈列表.xlsx")
    return raw(out.getvalue(),
               headers={
                   'Content-Disposition':
                   'attachment;filename*=utf-8{0}'.format(filename)
               },
               content_type='application/vnd.ms-excel;chartset=utf-8')
Esempio n. 12
0
 async def get_user_ids(datetime, user_ids):
     async with db.conn.acquire() as con:
         st = await con.prepare(
             '''select "user".id as user_id, "user".code as user_code, "group".code as group_code from "user" 
                join "group" on "user".id="group".user_id
                where "user".status<>3 and "group".status <>3 and "user".create_date <= to_timestamp($1, 'YYYY-MM-DD HH24:MI:SS') 
                and "group".create_date <= to_timestamp($2, 'YYYY-MM-DD HH24:MI:SS') and "user".id=any($3) order by "user".id'''
         )
         users = await st.fetch(datetime, datetime, user_ids)
     return records_to_list(users), records_to_value_list(
         users, 'user_code')
Esempio n. 13
0
 async def day_account_detail(account_id):
     async with db.conn.acquire() as con:
         select_stmt = await con.prepare(
             '''select sum(case when balance_type = 1 then change_amount when balance_type = 2 then -change_amount end)::varchar as balance,
                case when amount_type = 1 then 0 when amount_type =2 then 1 when amount_type in (3, 4) then 2 
                when amount_type = 8 then 3 when amount_type in (5, 10) then 4 end as slip_type,
                to_char(settle_date, 'YYYY-MM-DD') as day from "account_slip" 
                where account_id=$1 and create_date >= current_date - interval '14' day
                and amount_type not in (6, 7, 9)  group by day, slip_type order by day desc, slip_type'''
         )
         day_balance_detail = await select_stmt.fetch(account_id)
     return records_to_list(day_balance_detail)
Esempio n. 14
0
async def user_apprentice(user_id, current_page, page_size, leave):
    """获取用户徒弟徒孙信息"""
    if user_id is None:
        return None
    async with db.conn.acquire() as con:
        share_records = []
        count = 0
        if leave == APPRENTICE:
            select_stmt = await con.prepare(
                '''select "sharing_record".user_id::varchar , to_char("sharing_record".create_date, 'YYYY-MM-DD HH24:MI:SS') 
                   as create_date, "user".nickname, "user".need_remind from "sharing_record" left join "user" on 
                   "user".id = "sharing_record".user_id where "sharing_record".status != 3 and 
                   "sharing_record".sharing_user_id = $1 order by "sharing_record".create_date desc limit $2 offset $3'''
            )
            share_records = records_to_list(await select_stmt.fetch(
                user_id, page_size, current_page * page_size))
            select_count = await con.prepare(
                '''select count(1) from "sharing_record" 
                   where status != 3 and sharing_user_id = $1''')
            count = await select_count.fetchval(user_id)
        elif leave == GRANDSON:
            select_stmt = await con.prepare(
                '''with t as (select user_id from "sharing_record" where status != 3 and sharing_user_id = $1 )
                   select "sharing_record".user_id::varchar , to_char("sharing_record".create_date, 'YYYY-MM-DD HH24:MI:SS')
                   as create_date, "user".nickname, "user".need_remind from t,"sharing_record" left join "user" on "user".id = "sharing_record".user_id
                   where "sharing_record".status != 3 and "sharing_record".sharing_user_id = t.user_id 
                   order by "sharing_record".create_date desc limit $2 offset $3'''
            )
            share_records = records_to_list(await select_stmt.fetch(
                user_id, page_size, current_page * page_size))
            select_count = await con.prepare(
                '''select count(1) from "sharing_record" 
                   where status != 3 and sharing_user_id in (select user_id from "sharing_record" where status != 3 and 
                   sharing_user_id = $1)''')
            count = await select_count.fetchval(user_id)
        result = {
            'infos': await disciple_result_params(share_records),
            'page_info': get_page_info(page_size, current_page, count)
        }
    return result
Esempio n. 15
0
async def get_msg_context(request, group_code, msg_id, *args, **kwargs):
    """获取消息上下文"""
    logger.info(f'msg_context,group_id:{group_code},msg_id:{msg_id}')
    group_user_robot_info = await map_group_relationship(code=group_code)
    if group_user_robot_info is None:
        return response_json(None, code=RESOURCE_NOT_FOUND_CODE, msg='群信息不存在')
    async with db.conn.acquire() as con:
        msg_st = await con.prepare('''
        with cte as (select send_date from message where id =$1) (select message.id,message.content, 
        to_char(message.send_date, 'YYYY-MM-DD HH24:MI:SS') as send_date, message.mem_code from message,cte where 
        message.group_code =$2  and cte.send_date >= message.send_date order by message.send_date desc limit 21) union 
        (select message.id,message.content, to_char(message.send_date, 'YYYY-MM-DD HH24:MI:SS') as send_date, 
        message.mem_code from message,cte where message.group_code = $3 and cte.send_date < message.send_date order by 
        message.send_date asc limit 20) order by send_date asc;''')
        msg = records_to_list(await msg_st.fetch(msg_id, group_code,
                                                 group_code))
    user_codes = []
    for msg_detail in msg:
        if msg_detail['mem_code'] not in user_codes:
            user_codes.append(msg_detail['mem_code'])
    request_param = '|'.join(user_codes)  # 参数格式为 aaa|bbb|ccc
    mem_response = await group_mem_info(request_param)
    if int(mem_response['code']) == 100 and mem_response['content']:
        mem_info_list = mem_response['content']
    else:
        return response_json(None, MEM_INFO_FAIL_CODE, '获取群成员信息失败')
    logger.debug(f'mem_response:[{mem_info_list}]')

    mem_info_dict = {}
    for mem_info in mem_info_list:
        mem_info_dict[mem_info['id']] = {
            'mem_code': mem_info['id'],
            'head_url': mem_info['avatar'],
            'nickname': mem_info['nickname']
        }

    for msg_detail in msg:
        msg_detail.update(mem_info_dict[msg_detail['mem_code']])
        if msg_detail['mem_code'] == group_user_robot_info['robot_code'] or \
                msg_detail['mem_code'] == group_user_robot_info['user_code']:
            msg_detail['is_master'] = True
        else:
            msg_detail['is_master'] = False
        msg_detail['content'] = ujson.loads(msg_detail['content'])

    # 修改@消息为已读
    async with db.conn.acquire() as con:
        update_alt_msg = await con.prepare(
            '''update "alt_msg" set status =1 where msg_id =$1''')
        await update_alt_msg.fetchrow(msg_id)
    return response_json(data=msg)
Esempio n. 16
0
async def withdraw_list_admin(request, *args, **kwargs):
    """提现列表"""
    current_page = int(request.raw_args.get('current_page', 0))
    page_size = int(request.raw_args.get('page_size', 20))
    params = request.json

    sql, sql_count = await withdraw_sql(params)
    sql = sql + ''' limit ''' + str(page_size) + ''' offset ''' + str(
        current_page * page_size)

    async with db.conn.acquire() as con:
        select_result = records_to_list(await con.fetch(sql))
        select_count = await con.fetchval(sql_count)
    page_info = get_page_info(page_size, current_page, select_count)
    return response_json(select_result, page_info=page_info)
Esempio n. 17
0
async def user_remind():
    '''用户提醒,定时扫描'''
    logger.info(f'user_remind start!')
    async with db.conn.acquire() as con:
        select_user = await con.prepare('''
        select id, code, need_remind, create_date from "user" where need_remind @> '{"remind":1}'::jsonb and 
        (need_remind @> '{"is_import":0}'::jsonb or (need_remind @> '{"is_import":1}'::jsonb and 
        need_remind @> '{"is_apprentice":0}'::jsonb)) and extract(epoch FROM (now() - create_date)) > 3600*24 and 
        extract(epoch FROM (now() - create_date)) < 3600*36''')
        users = records_to_list(await select_user.fetch())
    if not users:
        logger.debug(f'user_remind users not exist!')
        return
    logger.info(f'need remind users counts: {len(users)}')
    import_remind_user = []
    apprentice_remind_user = []
    for user in users:
        async with db.conn.acquire() as con:
            select_add_robot = await con.prepare(
                '''select "robot".code from "robot_add_friend" left join "robot" on "robot".id = robot_add_friend.robot_id 
                   where "robot_add_friend".user_id = $1 order by robot_add_friend.create_date desc limit 1'''
            )
            robot_code = await select_add_robot.fetchval(user['id'])
        need_remind = ujson.loads(user['need_remind'])
        if need_remind['is_import'] == NOT_IMPORT_GROUP:
            await send_text_msg(robot_code, user['code'], NOT_IMPORT_GROUP_MSG)
            import_remind_user.append(user['id'])
        elif need_remind['is_import'] == HAS_IMPORT_GROUP and need_remind[
                'is_apprentice'] == NOT_APPRENTICE:
            url = POST_URL.format(user_id=user['id'])
            await send_image_msg(robot_code, user['code'], url)
            await send_text_msg(robot_code, user['code'],
                                IMPORT_GROUP_NOT_APPRENTICE)
            apprentice_remind_user.append(user['id'])
    if import_remind_user:
        async with db.conn.acquire() as con:
            update_user = await con.prepare(
                '''update "user" set need_remind = jsonb_set(need_remind, $1, $2::jsonb), update_date = now()
                   where id = any($3)''')
            await update_user.fetchrow({"remind"}, '0', import_remind_user)
    if apprentice_remind_user:
        async with db.conn.acquire() as con:
            update_user = await con.prepare(
                '''update "user" set need_remind = jsonb_set(need_remind, $1, $2::jsonb), update_date = now()
                   where id = any($3)''')
            await update_user.fetchrow({"remind"}, '0', apprentice_remind_user)
Esempio n. 18
0
 async def mass_message_detail(id):
     async with db.conn.acquire() as con:
         st = await con.prepare(
             '''select group_ids::jsonb as "groups_info", content::jsonb, to_char(send_date, 'YYYY-MM-DD HH24:MI:SS') as send_date 
                from "group_task" where id=$1 and status<>3''')
         group_task = await st.fetchrow(id)
         if not group_task:
             return
         group_task = dict(group_task)
         gst = await con.prepare(
             'select id, name from "group" where code = any($1) and status <> 3'
         )
         group_codes = ujson.loads(group_task['groups_info'])
         groups = await gst.fetch(group_codes)
     group_task['groups_info'] = records_to_list(groups)
     group_task['content'] = ujson.loads(group_task['content'])
     return group_task
Esempio n. 19
0
 async def check_can_created_today(user_id, send_date):
     async with db.conn.acquire() as con:
         st = await con.prepare(
             '''select to_char(send_date, 'YYYY-MM-DD') as day, count(1) as count from "group_task" 
                where user_id=$1 and status<>$2 and type = 1 group by to_char(send_date, 'YYYY-MM-DD')'''
         )
         day_group_count = records_to_list(await
                                           st.fetch(user_id, FAIL_DELETE))
     date = str_to_datetime(send_date)
     if date <= datetime.now():
         return False
     str_date = date.strftime('%Y-%m-%d')
     for item in day_group_count:
         if item['day'] == str_date and item['count'] >= MAX_MASS_MSG_AMOUNT:
             logger.info(
                 f'user [{user_id}] create mass msg max day [{str_date}]')
             return False
     return True
Esempio n. 20
0
async def users_groups_settlement():
    '''用户群结算统计'''
    logger.info('start user groups settled...')
    settle_groups = records_to_list(await need_settlement_groups())
    logger.info(f'need settlement groups count: {len(settle_groups)}')
    index = 0
    settle_date = yesterday_date()
    for user_code, items in await async_groupby(settle_groups, 'user_code'):
        index += 1
        copy_items = list(items)
        try:
            await signle_user_groups_settlement(user_code,
                                                copy_items,
                                                settle_date,
                                                settle_type=TYPE.PULL_GROUP)
        except Exception as e:
            logger.error(f'user [{user_code} settle occer error: [{e}]]')
    logger.info(f'include users count: {index}')
Esempio n. 21
0
async def launch_history(request, **kwargs):
    user_id = kwargs['user']['user_id']
    current_page = int(request.raw_args.get('current_page'))
    page_size = int(request.raw_args.get('page_size'))
    logger.debug(f'launch history req, user_id:{user_id}')
    async with db.conn.acquire() as con:
        user_task_stmt = await con.prepare(
            '''select id as task_id, to_char(send_date, 'YYYY-MM-DD HH24:MI:SS') as send_date, jsonb_array_length(group_ids)::varchar as group_count, status as send_flag from "group_task"
                where user_id = $1 and type = 2 and status =1 and create_date >= (current_date  - 2)
                order by create_date desc limit $2 offset $3''')
        user_tasks = await user_task_stmt.fetch(user_id, page_size,
                                                current_page * page_size)
        task_list = records_to_list(user_tasks)
        history_count_stmt = await con.prepare(
            '''select count(1) from "group_task" where user_id = $1 and type = 2 and status = 1 and create_date >= (current_date - 2)'''
        )
        total_records = await history_count_stmt.fetchval(user_id)
        page_info = get_page_info(page_size, current_page, total_records)
        return response_json(task_list, page_info=page_info)
Esempio n. 22
0
async def problem_feedback(request, *args, **kwargs):
    current_page = int(request.raw_args.get('current_page', 0))
    page_size = int(request.raw_args.get('page_size', 20))
    params = request.json

    sql, sql_count = await problem_sql(params)
    sql = sql + ''' limit ''' + str(page_size) + ''' offset ''' + str(
        current_page * page_size)

    async with db.conn.acquire() as con:
        select_result = records_to_list(await con.fetch(sql))
        select_count = await con.fetchval(sql_count)

    for result in select_result:
        if result['code'] is not None:
            result['robot_info'] = result['name'] + '(' + result[
                'wechat_no'] + ')'
    page_info = get_page_info(page_size, current_page, select_count)
    return response_json(select_result, page_info=page_info)
Esempio n. 23
0
async def get_alt_msg(request, *args, **kwargs):
    """获取@用户机器人信息"""
    user_id = kwargs['user']['user_id']
    current_page = int(request.raw_args.get('current_page', 0))
    page_size = int(request.raw_args.get('page_size', 20))
    async with db.conn.acquire() as con:
        select_altmsg = await con.prepare(
            '''select "alt_msg".msg_id as msg_id, "group".name as group_name, "alt_msg".msg_content as msg_content, 
               "group".code as group_code, "alt_msg".status as status from "alt_msg" left join "group" on 
               "group".id="alt_msg".group_id where "group".status !=3 and "alt_msg".user_id = $1 and 
               "alt_msg".create_date >=(current_date - interval '3' day) order by "alt_msg".create_date desc
                 limit $2 offset $3''')
        msg_infos = records_to_list(await select_altmsg.fetch(
            user_id, page_size, current_page * page_size))
        select_count = await con.prepare(
            '''select count(1) from "alt_msg" left join "group" on "group".id="alt_msg".group_id
               where "group".status !=3 and "alt_msg".user_id = $1 and "alt_msg".create_date >=(current_date - interval '3' day)'''
        )
        total_records = await select_count.fetchval(user_id)
        page_info = get_page_info(page_size, current_page, total_records)
        return response_json(msg_infos, page_info=page_info)
Esempio n. 24
0
async def export_result(request, *args, **kwargs):
    params = request.json
    sql, sql_count = await withdraw_sql(params)
    async with db.conn.acquire() as con:
        select_result = records_to_list(await con.fetch(sql))
    if not select_result:
        return response_json(None)
    title = ['phone', 'amount', 'create_date', 'paid_date', 'status']

    out = io.BytesIO()
    workbook = xlsxwriter.Workbook(out)
    worksheet = workbook.add_worksheet()
    for item in title:
        worksheet.write(0, title.index(item), item)
    for item in select_result:
        worksheet.write(
            select_result.index(item) + 1, 0,
            item['phone'] if item['phone'] is not None else '')
        worksheet.write(
            select_result.index(item) + 1, 1,
            item['amount'] if item['amount'] is not None else '')
        worksheet.write(
            select_result.index(item) + 1, 2,
            item['create_date'] if item['create_date'] is not None else '')
        worksheet.write(
            select_result.index(item) + 1, 3,
            item['paid_date'] if item['paid_date'] is not None else '')
        worksheet.write(
            select_result.index(item) + 1, 4,
            item['status'] if item['status'] is not None else '')

    workbook.close()
    out.seek(0)
    filename = quote("提现列表.xlsx")
    return raw(out.getvalue(),
               headers={
                   'Content-Disposition':
                   'attachment;filename*=utf-8{0}'.format(filename)
               },
               content_type='application/vnd.ms-excel;chartset=utf-8')
Esempio n. 25
0
async def apprentice_remind(request, *args, **kwargs):
    """徒弟唤醒"""
    user_id = request.json.get('user_id', None)
    is_import = request.json.get('is_import', None)
    is_apprentice = request.json.get('is_apprentice', None)
    redis_awakening_key = APPRENTICE_REMID_REDIS_KEY + user_id
    if await redis.conn.exists(redis_awakening_key):
        return response_json(None, msg='当日提醒一次')
    user_info = await get_user_by_id(user_id)
    async with db.conn.acquire() as con:
        select_stmt = await con.prepare(
            '''select "robot".code from "robot" left join "robot_add_friend" on "robot".id = "robot_add_friend".robot_id 
            where "robot_add_friend".user_id = $1 and "robot_add_friend".status !=3'''
        )
        robot_codes = records_to_list(await select_stmt.fetch(user_id))
    if not robot_codes:
        return response_json(None, msg='机器人未找到', code=RESOURCE_NOT_FOUND_CODE)
    if (is_import is not None and not is_import) or (not is_apprentice
                                                     and not is_import):
        await send_msg(robot_codes, NOT_IMPORT_MSG, user_info['code'])
    elif is_apprentice is not None and not is_apprentice:
        await send_msg(robot_codes, NOT_APPRENTICE_MSG, user_info['code'])
    await redis.conn.setex(redis_awakening_key, get_time(), 1)
    return response_json(None)