新版本四報告

新版本四報告接口文檔抵栈,接口代碼,數(shù)據(jù)庫定義文檔已經(jīng)完成。

生活習(xí)慣報告
接口代碼示例:
# -*- 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)
        # 獲取吸煙,喝酒數(shù)量
        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'], # 吸煙數(shù)量
            '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')
數(shù)據(jù)庫文檔示例

doctor_rpt_habit 醫(yī)生報告-生活習(xí)慣

    date                    :[str]   # 報告日期('2017-03'年月)
    watch_id                :[str]   # watch_id
    diet_info               :[
        {
            food_type       :[str]   # 食物類型
            food_amount     :[int]   # 食物量
            calorie         :[int]   # 卡路里消耗
        }...
    ]
    smoke                   :[int]   # 吸煙數(shù)量
    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]   # 生活飲食建議
接口文檔示例

添加生活習(xí)慣報告

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>             

獲取生活習(xí)慣報告

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>    狀態(tài)
            advise              :<str>    建議
            num                 :<int>    得分
            }...
        ],
        health_score            :<int.    總得分
        life_advise             :<str>    生活飲食建議
    ]
}
Web頁面需求
生活習(xí)慣.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末诲锹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子涉馅,更是在濱河造成了極大的恐慌归园,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稚矿,死亡現(xiàn)場離奇詭異庸诱,居然都是意外死亡,警方通過查閱死者的電腦和手機晤揣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門桥爽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人昧识,你說我怎么就攤上這事钠四。” “怎么了跪楞?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵缀去,是天一觀的道長。 經(jīng)常有香客問我甸祭,道長缕碎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任池户,我火速辦了婚禮咏雌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘煞檩。我一直安慰自己处嫌,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布斟湃。 她就那樣靜靜地躺著熏迹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凝赛。 梳的紋絲不亂的頭發(fā)上注暗,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天坛缕,我揣著相機與錄音,去河邊找鬼捆昏。 笑死赚楚,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的骗卜。 我是一名探鬼主播宠页,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼寇仓!你這毒婦竟也來了举户?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤遍烦,失蹤者是張志新(化名)和其女友劉穎俭嘁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體服猪,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡供填,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了罢猪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片近她。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖坡脐,靈堂內(nèi)的尸體忽然破棺而出泄私,到底是詐尸還是另有隱情,我是刑警寧澤备闲,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布晌端,位于F島的核電站,受9級特大地震影響恬砂,放射性物質(zhì)發(fā)生泄漏咧纠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一泻骤、第九天 我趴在偏房一處隱蔽的房頂上張望漆羔。 院中可真熱鬧,春花似錦狱掂、人聲如沸演痒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸟顺。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間讯嫂,已是汗流浹背蹦锋。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留欧芽,地道東北人莉掂。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像千扔,于是被迫代替她去往敵國和親憎妙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理曲楚,服務(wù)發(fā)現(xiàn)尚氛,斷路器,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法洞渤,類相關(guān)的語法,內(nèi)部類的語法属瓣,繼承相關(guān)的語法载迄,異常的語法,線程的語...
    子非魚_t_閱讀 31,623評論 18 399
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,081評論 25 707
  • 工具名稱用途區(qū)別備注 theos抡蛙、iosOpenDev生成dylib insert_dylib护昧、optool、yo...
    XX開發(fā)從開始到放棄閱讀 4,435評論 0 6
  • 生活總是圓了缺粗截,缺了又圓惋耙。娟在兩年前成了媽媽,生了一個粉可愛的小女娃熊昌,看到她在空間里曬娃娃的照片绽榛,總讓人忍不住想去...
    一盞燈閱讀 579評論 1 49