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