新版本四报告

新版本四报告接口文档,接口代码,数据库定义文档已经完成。

生活习惯报告
接口代码示例:
# -*- coding: utf-8 -*-
from __future__ import absolute_import
from collections import OrderedDict
from flask import request

from .comm.wrappers import Resource, api

from .comm.errno import *

from comm.db import db
import datetime
import time
era = datetime.datetime(1970, 1, 1)


class ReportLifeHabit(Resource):
    def get(self, watch_id):
        result = self.create_report(watch_id)
        return {
            'code': E_SUCCESS,
            'result': result
        }

    def create_report(self, watch_id):
        food_data = self.get_food_data(watch_id)
        habit_data = self.get_habit_data(watch_id)
        return [food_data, habit_data]

    def get_food_data(self, watch_id):
        """
        膳食记录获取
        param:
            start_time
            end_time
        """
        result = []
        query = {'maketime': {'$gte': float(request.data['start_time']), '$lte': float(request.data['end_time'])},
                 'watch_id': watch_id}
        date_group_mode = {'m': {'$month': '$time'}, 'd': {'$dayOfMonth': '$time'},
                           'type': '$type', 'name': '$name'}
        print query
        cursor = db.diet.aggregate([
            {'$match': query},
            {'$project': {
                'time': {'$add': [{'$multiply': [1000, {'$add': ['$maketime', 28800]}]}, era]},
                'name': '$food_name',
                'type': '$type',
                'n': '$food_value',
                'c': '$calorie'
            }},
            {'$group': {
                '_id': date_group_mode,
                'n': {'$sum': '$n'},
                'c': {'$sum': '$c'}
            }}
        ])
        return_data = {}
        for i in cursor:
            day = str(i['_id']['m']) + '-' + str(i['_id']['d'])
            ty = i['_id']['type']
            na = i['_id']['name']
            try:
                daily_data = return_data[day]
            except KeyError:
                daily_data = {'breakfast': {}, 'lunch': {}, 'dinner': {}, 'calorie': 0}
                return_data[day] = daily_data
            monment = daily_data[ty]
            monment[na] = i['n']
        result = []
        for k, v in return_data.items():
            i = v
            i['maketime'] = k
            result.append(i)
        return result

    def get_habit_data(self, watch_id):
        result = {'smoke_num': 0, 'alcoholic': {'beer': 0, 'red': 0, 'wine': 0}}
        cursor = db.habit.find({'maketime': {'$gte': float(request.data['start_time']), '$lte': float(request.data['end_time'])},
                       'watch_id': watch_id})
        for i in cursor:

            result['smoke_num'] += i.get('cigarette', 0)
            result['alcoholic']['beer'] += i['alcoholic'].get(u'啤酒', 0)
            result['alcoholic']['wine'] += i['alcoholic'].get(u'白酒', 0)
            result['alcoholic']['red'] += i['alcoholic'].get(u'红酒', 0)
        return result


class ReportLifeHabits(Resource):
    def get(self, watch_id):
        try:
            habit_rpt_obj = db.doctor_rpt_habit.find_ont({
                'watch_id': watch_id,
                'date': request.data['date']
            })
        except KeyError, e:
            return {'code': 4002, 'msg': e.message}
        result = {}
        if habit_rpt_obj is not None:
            result = {
                'date': habit_rpt_obj.get('date'),
                'watch_id': habit_rpt_obj.get('watch_id'),
                'diet_info': habit_rpt_obj.get('diet_info'),
                'smoke_num': habit_rpt_obj.get('smoke'),
                'drink_total': habit_rpt_obj.get('drink'),
                'high_fiber': request.data.get('high_fiber'), # 高膳食纤维 ({'status': '', 'advise': '', 'score': ''})
                'cereal': request.data.get('cereal'), # 谷类食物
                'food_collocation': request.data.get('food_collocation'), # 食物搭配合理
                'energy_intake': request.data.get('energy_intake'), # 能量摄入
                'meat': request.data.get('meat'), # 肉类
                'vegetable': request.data.get('vegetable'), # 蔬菜类
                'food_types': request.data.get('food_types'), # 食物种类丰富
                'smoke': request.data.get('smoke'), # 吸烟
                'drink': request.data.get('drink'), # 喝酒
                'health_score': habit_rpt_obj.get('health_score'),
                'life_advise': habit_rpt_obj.get('life_advise')
            }
        return {'code': E_SUCCESS, 'result': result}

    def post(self, watch_id):
        # 查询膳食记录
        query = {'maketime': {'$gte': float(request.data['start_time']), '$lte': float(request.data['end_time'])},
                 'watch_id': watch_id}
        date_group_mode = {'m': {'$month': '$time'}, 'd': {'$dayOfMonth': '$time'},
                           'type': '$type', 'name': '$name'}
        cursor = db.diet.aggregate([
            {'$match': query},
            {'$project': {
                'time': {'$add': [{'$multiply': [1000, {'$add': ['$maketime', 28800]}]}, era]},
                'name': '$food_name',
                'type': '$type',
                'n': '$food_value',
                'c': '$calorie'
            }},
            {'$group': {
                '_id': date_group_mode,
                'n': {'$sum': '$n'},
                'c': {'$sum': '$c'}
            }}
        ])
        data = {}
        for i in cursor:
            day = str(i['_id']['m']) + '-' + str(i['_id']['d'])
            ty = i['_id']['type']
            na = i['_id']['name']
            try:
                daily_data = data[day]
            except KeyError:
                daily_data = {'breakfast': {}, 'lunch': {}, 'dinner': {}, 'calorie': 0}
                data[day] = daily_data
            monment = daily_data[ty]
            monment[na] = i['n']
        diet_info = []
        for k, v in data.items():
            i = v
            i['maketime'] = k
            diet_info.append(i)
        # 获取吸烟,喝酒数量
        smoke_drink_data = {'smoke_num': 0, 'alcoholic': {'beer': 0, 'red': 0, 'wine': 0}}
        cursor = db.habit.find({'maketime': {'$gte': float(request.data['start_time']), '$lte': float(request.data['end_time'])},
                       'watch_id': watch_id})
        for i in cursor:
            smoke_drink_data['smoke_num'] += i.get('cigarette', 0)
            smoke_drink_data['alcoholic']['beer'] += i['alcoholic'].get(u'啤酒', 0)
            smoke_drink_data['alcoholic']['wine'] += i['alcoholic'].get(u'白酒', 0)
            smoke_drink_data['alcoholic']['red'] += i['alcoholic'].get(u'红酒', 0)
        # 获取各项评分
        inserts = {
            'date': request.data.get('date'), # 报告日期
            'watch_id': watch_id, # watch_id
            'diet_info': diet_info, # 膳食记录
            'smoke_num': smoke_drink_data['smoke_num'], # 吸烟数量
            'drink_total': smoke_drink_data, # 喝酒量
            'high_fiber': request.data.get('high_fiber'), # 高膳食纤维 ({'status': '', 'advise': '', 'score': ''})
            'cereal': request.data.get('cereal'), # 谷类食物
            'food_collocation': request.data.get('food_collocation'), # 食物搭配合理
            'energy_intake': request.data.get('energy_intake'), # 能量摄入
            'meat': request.data.get('meat'), # 肉类
            'vegetable': request.data.get('vegetable'), # 蔬菜类
            'food_types': request.data.get('food_types'), # 食物种类丰富
            'smoke': request.data.get('smoke'), # 吸烟
            'drink': request.data.get('drink'), # 喝酒
            'health_score': request.data.get('health_score'), # 健康总分
            'life_advise': request.data.get('life_advise'), # 生活建议
        }

        db.doctor_rpt_habit.insert(inserts)


def __mount__():
    api.add_resource(ReportLifeHabit,'/report/<objectid:watch_id>/habit')
数据库文档示例

doctor_rpt_habit 医生报告-生活习惯

    date                    :[str]   # 报告日期('2017-03'年月)
    watch_id                :[str]   # watch_id
    diet_info               :[
        {
            food_type       :[str]   # 食物类型
            food_amount     :[int]   # 食物量
            calorie         :[int]   # 卡路里消耗
        }...
    ]
    smoke                   :[int]   # 吸烟数量
    drink                   :[
        {
            beer/wine/red   :[str]   # 酒类型-量
        }
    ]
    high_fiber              :[list]  # 高膳食纤维 
        ({'status': '', 'advise': '', 'score': ''})
    cereal                  :[list]  # 谷类食物
    food_collocation        :[list]  # 食物搭配合理
    energy_intake           :[list]  # 能量摄入
    meat                    :[list]  # 肉类
    vegetable               :[list]  # 蔬菜类
    food_types              :[list]  # 食物种类丰富
    smoke                   :[list]  # 吸烟
    drink                   :[list]  # 喝酒
    health_score            :[int]   # 总得分
    life_advise             :[str]   # 生活饮食建议
接口文档示例

添加生活习惯报告

url: /report/[watch_id]/habit

method: POST

header:

'session'                   : <str> <need> //用户session

params:

'date'                      : <str>报告日期(2017-03)
'high_fiber'                : <obj>高膳食纤维
    {'status': '', 'advise': '', 'score': ''}
'cereal'                    : <obj>谷类食物
'food_collocation'          : <obj>食物搭配合理
'energy_intake'             : <obj>能量摄入
'meat'                      : <obj>肉类
'vegetable'                 : <obj>蔬菜类
'food_types'                : <obj>食物种类丰富
'smoke'                     : <obj>吸烟
'drink'                     : <obj>喝酒
'health_score'              : <int>健康总分
'life_advise'               : <str>生活建议

result:

'code'                      : <int>             

获取生活习惯报告

url: /report/[watch_id]/habit

method: GET

header:

'session'                   : <str> <need> //用户session

params:

'date'                      : <str> 报告日期(2017-03)

result:

{
    code                    : <int>
    result                  :[ <list>
         [  
            {
                'breakfast'     :{'food_name': 'value'}
                'lunch'         :午餐:{食物名称:食物量}
                'dinner'        :
                'calorie'       : 卡路里
                'maketime'      : 日期(月-日)
            }...
        ], 
        {
            'alcoholic'         : {"beer":0,"red":0,"wine":0}喝酒量
            'smoke_num'         : <int> 吸烟量
        },
        health_assess           :[
            {
            name                :<str>    项目名称
            status              :<str>    状态
            advise              :<str>    建议
            num                 :<int>    得分
            }...
        ],
        health_score            :<int.    总得分
        life_advise             :<str>    生活饮食建议
    ]
}
Web页面需求
生活习惯.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,597评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,577评论 18 399
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,457评论 25 707
  • 工具名称用途区别备注 theos、iosOpenDev生成dylib insert_dylib、optool、yo...
    XX开发从开始到放弃阅读 4,369评论 0 6
  • 生活总是圆了缺,缺了又圆。娟在两年前成了妈妈,生了一个粉可爱的小女娃,看到她在空间里晒娃娃的照片,总让人忍不住想去...
    一盏灯阅读 576评论 1 49