コード例 #1
0
ファイル: statistics.py プロジェクト: waylonwang/biz-server
def get_statistics_data(request):
    '''
        获取dashboard的统计数据
    :param request: HTTP请求对象l
    :return: 统计数据
    '''
    from datetime import timedelta

    from common.util import output_datetime, get_now

    if request.method == 'GET':
        type = request.args.get('type')
        botid = request.args.get('botid')
        target = request.args.get('target')
        days = request.args.get('days')
    elif request.method == 'POST':
        type = request.form.get('type')
        botid = request.form.get('botid')
        target = request.form.get('target')
        days = request.form.get('days')

    today = output_datetime(get_now(), True, False)
    if int(type) == 1:
        # 汇总数据
        return _get_counts(botid)
    elif int(type) == 2:
        # 查询发言统计
        if int(days) == 7 or int(days) == 30 or int(days) == 60:
            return _get_speak_statistics(
                botid, target,
                output_datetime(get_now() - timedelta(days=int(days)), True,
                                False), today)
        else:
            return {'success': 0}
    elif int(type) == 3:
        # 重新计算发言统计
        return _do_speak_statistics(botid, target, today, today)
    elif int(type) == 4:
        # 发言排行榜
        if int(days) == 0 or int(days) == 1:
            # 0:查询今天
            # 1:查询昨天
            return _get_speak_tops(
                botid, target,
                output_datetime(get_now() - timedelta(days=int(days)), True,
                                False),
                output_datetime(get_now() - timedelta(days=int(days)), True,
                                False))
        elif int(days) == 7 or int(days) == 99999:
            # 7:查询7天内
            # 99999:查询全部
            return _get_speak_tops(
                botid, target,
                output_datetime(get_now() - timedelta(days=int(days)), True,
                                False), today)
        else:
            return {'success': 0}
    else:
        return {'success': 0}
コード例 #2
0
    def post(self):
        try:
            parser = reqparse.RequestParser()
            parser.add_argument('biz_type',
                                required=True,
                                help='请求中必须包含biz_type')
            parser.add_argument('outgo_member_id',
                                required=True,
                                help='请求中必须包含outgo_member_id')
            parser.add_argument('income_member_id',
                                required=True,
                                help='请求中必须包含income_member_id')
            parser.add_argument('amount',
                                type=int,
                                required=True,
                                help='请求中必须包含amount')
            parser.add_argument('account')
            parser.add_argument('outgo_member_name')
            parser.add_argument('income_member_name')
            parser.add_argument('remark')
            args = parser.parse_args()
            if args['amount'] <= 0:
                return ac.fault(error=Exception('amount必须大于0'))

            record = ScoreRecord.create_transfer(
                args['biz_type'],
                args['outgo_member_id'],
                args['income_member_id'],
                args['amount'],
                args['account'],
                outgo_member_name=args['outgo_member_name'],
                income_member_name=args['income_member_name'],
                remark=args['remark'],
                botid=ac.get_bot())
            if record is not None:
                return ac.success(
                    account=record.account,
                    biz_type=record.biz_type,
                    trans_type=record.trans_type,
                    outgo_member_id=args['outgo_member_id'],
                    outgo_member_name=args['outgo_member_name'],
                    income_member_id=args['income_member_id'],
                    income_member_name=args['income_member_name'],
                    amount=record.amount,
                    date=output_datetime(record.date),
                    time=output_datetime(record.time),
                    create_at=output_datetime(record.create_at),
                    remark=args['remark'])
            else:
                return ac.fault(error=Exception('未知原因导致数据创建失败'))
        except Exception as e:
            return ac.fault(error=e)
コード例 #3
0
ファイル: point.py プロジェクト: waylonwang/biz-server
 def get_report_status(botid, target_type, target_account, reporter_id, ):
     target = get_target_composevalue(target_type, target_account)
     result = Point.get_report_count(botid, target, '0', reporter_id, output_datetime(get_now(), True, False))
     status = {}
     status['botid'] = botid
     status['target'] = target
     status['reporter_id'] = reporter_id
     status['reporter_confirmed_total'] = result.reporter_confirmed_total
     status['reporter_unconfirm_total'] = result.reporter_unconfirm_total
     return status
コード例 #4
0
    def post(self):
        try:
            parser = reqparse.RequestParser()
            parser.add_argument('biz_type',
                                required=True,
                                help='请求中必须包含biz_type')
            parser.add_argument('member_id',
                                required=True,
                                help='请求中必须包含member_id')
            parser.add_argument('amount', type=int)
            parser.add_argument('account')
            parser.add_argument('member_name')
            parser.add_argument('remark')
            args = parser.parse_args()

            record = ScoreRecord.create_change(args['biz_type'],
                                               args['member_id'],
                                               args['amount'],
                                               args['account'],
                                               member_name=args['member_name'],
                                               remark=args['remark'],
                                               botid=ac.get_bot())
            if record is not None:
                return ac.success(account=record.account,
                                  trans_type=record.trans_type,
                                  biz_type=record.biz_type,
                                  member_id=record.member_id,
                                  member_name=record.member_name,
                                  amount=record.amount,
                                  date=output_datetime(record.date),
                                  time=output_datetime(record.time),
                                  create_at=output_datetime(record.create_at),
                                  remark=record.remark)
            else:
                return ac.fault(error=Exception('未知原因导致数据创建失败'))
        except Exception as e:
            return ac.fault(error=e)
コード例 #5
0
 def post(self):
     try:
         parser = reqparse.RequestParser()
         parser.add_argument('target_type',
                             required=True,
                             help='请求中必须包含target_type')
         parser.add_argument('target_account',
                             required=True,
                             help='请求中必须包含target_account')
         parser.add_argument('member_id',
                             required=True,
                             help='请求中必须包含member_id')
         parser.add_argument('member_name')
         parser.add_argument('message',
                             required=True,
                             help='请求中必须包含message')
         args = parser.parse_args()
         record = Sign.create(ac.get_bot(),
                              args['target_type'],
                              args['target_account'],
                              args['member_id'],
                              args['message'],
                              member_name=args['member_name'])
         if record is not None:
             return ac.success(botid=record.botid,
                               target=record.target,
                               member_id=record.member_id,
                               member_name=record.member_name,
                               date=output_datetime(record.date),
                               time=output_datetime(record.time),
                               create_at=output_datetime(record.create_at),
                               message=record.message)
         else:
             return ac.fault(error=Exception('未知原因导致数据创建失败'))
     except Exception as e:
         return ac.fault(error=e)
コード例 #6
0
ファイル: point.py プロジェクト: waylonwang/biz-server
 def post(self):
     try:
         parser = reqparse.RequestParser()
         parser.add_argument('target_type', required = True, help = '请求中必须包含target_type')
         parser.add_argument('target_account', required = True, help = '请求中必须包含target_account')
         parser.add_argument('member_id', required = True, help = '请求中必须包含member_id')
         parser.add_argument('member_name')
         parser.add_argument('reporter_id', required = True, help = '请求中必须包含reporter_id')
         parser.add_argument('reporter_name')
         parser.add_argument('point', type = int, required = True, choices = (1, 2), help = '请求中必须包含point,且只能为1或2')
         parser.add_argument('message', required = True, help = '请求中必须包含message')
         parser.add_argument('is_newbie', type = bool)
         args = parser.parse_args()
         kwargs = {}
         kwargs['member_name'] = args['member_name']
         kwargs['reporter_name'] = args['reporter_name']
         if args['is_newbie'] is not None: kwargs['is_newbie'] = args['is_newbie']
         record = Point.create(ac.get_bot(),
                               args['target_type'],
                               args['target_account'],
                               args['member_id'],
                               args['reporter_id'],
                               args['point'],
                               args['message'],
                               **kwargs)
         if record is not None:
             return ac.success(botid = record.botid,
                               target = record.target,
                               reporter_id = args['reporter_id'],
                               reporter_name = args['reporter_name'],
                               member_id = args['member_id'],
                               member_name = args['member_name'],
                               point = args['point'],
                               confirm_code = record.confirm_code,
                               expire_at = output_datetime(record.expire_at))
         else:
             return ac.fault(error = Exception('未知原因导致数据创建失败'))
     except Exception as e:
         return ac.fault(error = e)
コード例 #7
0
ファイル: statistics.py プロジェクト: waylonwang/biz-server
def _get_counts(botid):
    from plugins.setting import TargetRule

    from common import login
    from common.util import output_datetime, get_now

    if not login.current_user.is_authenticated:
        abort(401)

    targets = TargetRule.find_allow_by_user(login.current_user.username)

    speak_today_count = 0
    sign_today_count = 0
    point_today_total = 0
    score_today_total = 0

    today = output_datetime(get_now(), True, False)

    for target in targets:
        speak_today_count += _get_speak_today_count(botid, target, today,
                                                    today)
        sign_today_count += _get_sign_today_count(botid, target, today, today)
        point_today_total += _get_point_today_total(botid, target, today,
                                                    today)
        score_today_total += _get_score_today_total(botid, target, today,
                                                    today)
    return {
        'success': 1,
        'data': {
            'statistics_data': {
                'speak_today_count': speak_today_count,
                'sign_today_count': sign_today_count,
                'point_today_total': point_today_total,
                'score_today_total': score_today_total
            }
        }
    }