zoukankan      html  css  js  c++  java
  • echart睡眠后台代码,

    //睡眠时间-add/2021/3/2
    case "sleep":

    //1判断是天睡眠还是时间区间睡眠
    //2:睡眠开始>睡眠结束{开始=时间-1天,结束=今天},睡眠开始<睡眠结束{开始=时间,结束=今天}
    //3:0~5翻滚次数=深度睡眠,5~10次翻滚次数=浅度睡眠,>10=清醒;
    //4:合计深度睡眠时间,合计浅度睡眠时间,合计清醒时间
    //5:根据翻滚次数来显示不同的颜色(标记睡眠质量)
    //6:统计时间和睡眠时间如何实现同步???
    //7:barCategoryGap属性使用,option属性加载

    //1周睡眠,把开始时间,结束时间,转换为星期,存list时间保存
    //2周睡眠,把周睡眠数据的时间==list时间,对比,存在,则取出,存入深睡字典,浅水字典,清醒字典
    //3周睡眠数据时间!=list时间,list.add(list时间,0);


    string D_SleepBegin = "";
    string D_SleepEnd = "";
    mdl.wd_device device2 = new bll.wd_device().GetModel(deviceID);
    if (device2 != null)
    {

    D_SleepBegin = device2.D_SleepBegin;
    D_SleepEnd = device2.D_SleepEnd;
    }
    int deepRate = 0;
    int lightRate = 0;
    int wakeRate = 0;
    int.TryParse(ProUtil.deepRate, out deepRate);//深睡翻滚频率
    int.TryParse(ProUtil.lightRate, out lightRate);//浅睡翻滚频率
    int.TryParse(ProUtil.wakeRate, out wakeRate);//清醒翻滚频率
    string beginTime1 = "";
    string EndTime1 = "";
    int checkBegin = D_SleepBegin != "" ? Convert.ToInt32(D_SleepBegin.Substring(0, 2)) : 0;
    int checkEnd = D_SleepEnd != "" ? Convert.ToInt32(D_SleepEnd.Substring(0, 2)) : 0;
    string sleep1 = D_SleepBegin != "" ? D_SleepBegin.Substring(0, 2) + ":" + D_SleepBegin.Substring(2, 2) : "23:00";
    string sleep2 = D_SleepEnd != "" ? D_SleepEnd.Substring(0, 2) + ":" + D_SleepEnd.Substring(2, 2) : "7:00";
    if (context.Request["sleepType"].ToString() == "day")
    {

    #region 日睡眠统计
    if (checkBegin > checkEnd)
    {

    beginTime1 = Convert.ToDateTime(endTime).AddDays(-1).ToString("yyyy-MM-dd") + " " + sleep1;
    EndTime1 = Convert.ToDateTime(endTime).ToString("yyyy-MM-dd") + " " + sleep2;
    }
    else
    {
    beginTime1 = Convert.ToDateTime(endTime).ToString("yyyy-MM-dd") + " " + sleep1;
    EndTime1 = Convert.ToDateTime(endTime).ToString("yyyy-MM-dd") + " " + sleep2;
    }
    string sleepStr = string.Format(@"select DATE_FORMAT(S_MeasureEndTime,'%H:00') hours,sum(S_RollCount) count from wd_sport where
    S_MeasureEndTime>='{0}' and S_MeasureEndTime<'{1}' and L_DID={2} and S_state=0 group by hours order by hours", beginTime1, EndTime1, deviceID);
    DataSet ds2 = T9.DBUtility.DbHelperMySQL.Query(sleepStr);
    DataTable dt2 = ds2.Tables[0];
    int rowCount2 = dt2.Rows.Count;
    List<string> listTime = new List<string>();

    if (rowCount2 > 0)
    {


    #region 记录一天的小时时间
    for (int i = 0; i < rowCount2; i++)
    {
    listTime.Add(dt2.Rows[i]["hours"].ToString());
    }
    #endregion


    #region 计算小时睡眠时长
    int DeepHour = 0;//深度睡眠时间
    int lightHour = 0;//浅度睡眠时间
    int wakeHour = 0;//清醒时间
    for (int i = 0; i < rowCount2; i++)
    {
    int S_RollCount = Convert.ToInt32(dt2.Rows[i]["count"].ToString());
    if (S_RollCount >= 0 && S_RollCount <= deepRate)
    {
    DeepHour = DeepHour + 1;
    }
    else if (S_RollCount >= lightRate && S_RollCount < wakeRate)
    {
    lightHour = lightHour + 1;
    }
    else if (S_RollCount >= wakeRate)
    {
    wakeHour = wakeHour + 1;
    }
    }
    #endregion


    #region 组合list对象
    sleepdayDetail[] Data = new sleepdayDetail[rowCount2];
    for (int i = 0; i < rowCount2; i++)
    {
    int S_RollCount = Convert.ToInt32(dt2.Rows[i]["count"].ToString());
    if (S_RollCount >= 0 && S_RollCount <= deepRate)
    {
    //深度睡眠
    itemStyle itemStyle1 = new itemStyle();
    itemStyle1.color = "#0c5290";
    Data[i] = new sleepdayDetail() { value = new string[2] { dt2.Rows[i]["hours"].ToString(), DeepHour.ToString() } };
    Data[i].itemStyle = itemStyle1;
    }
    else if (S_RollCount >= lightRate && S_RollCount < wakeRate)
    {
    //浅度睡眠
    itemStyle itemStyle2 = new itemStyle();
    itemStyle2.color = "#4da9f2";
    Data[i] = new sleepdayDetail() { value = new string[2] { dt2.Rows[i]["hours"].ToString(), lightHour.ToString() } };
    Data[i].itemStyle = itemStyle2;
    }
    else if (S_RollCount >= wakeRate)
    {
    //清醒
    itemStyle itemStyle3 = new itemStyle();
    itemStyle3.color = "#fe027b";
    Data[i] = new sleepdayDetail() { value = new string[2] { dt2.Rows[i]["hours"].ToString(), wakeHour.ToString() } };
    Data[i].itemStyle = itemStyle3;
    }

    }
    #endregion

    datas.Add(new ChartDetail()
    {
    sleeptimes = listTime.ToArray(),
    sleepdata = Data,
    type = "bar",
    });


    result.sleepDeep = DeepHour;
    result.sleepLight = lightHour;
    result.sleepWake = wakeHour;
    result.Return = true;
    result.Data = datas;
    }
    else
    {
    result.Return = false;
    }
    #endregion

    }
    else if (context.Request["sleepType"].ToString() == "week")
    {

    //a:前台传开始时间和结束时间
    //b:从设备中查询出开始睡眠和结束时间时间
    //c:开始睡眠>结束睡眠;时间>23点,时间+1天

    #region 变量定义
    List<string> listTime = new List<string>();
    List<int> listdata1 = new List<int>();
    List<int> listdata2 = new List<int>();
    List<int> listdata3 = new List<int>();
    Dictionary<string, int> dicDeep = new Dictionary<string, int>();//深睡字典
    Dictionary<string, int> dicLigth = new Dictionary<string, int>();//浅水字典
    Dictionary<string, int> dicWake = new Dictionary<string, int>();//清醒字典
    #endregion

    #region 返回周数据
    DataTable dtweek = null;
    int rowCountweek = 0;
    LoadSql(deviceID, ref dtweek, ref rowCountweek, checkBegin, checkEnd, beginTime, endTime, sleep1, sleep2);

    #endregion

    #region 日期转换为星期几
    var days = (endTime - beginTime).Days + 1;
    for (int j = 0; j < days; j++)
    {
    string year = beginTime.AddDays(j).ToString("yyyy");
    string month = beginTime.AddDays(j).ToString("MM");
    string day = beginTime.AddDays(j).ToString("dd");
    string time1 = ProUtil.CaculateWeekDay(Convert.ToInt32(year), Convert.ToInt32(month), Convert.ToInt32(day));
    listTime.Add(time1);
    }

    #endregion

    if (rowCountweek > 0)
    {
    result = LoadWeekJson(true, listTime, dtweek, dicDeep, dicLigth, dicWake, listdata1, listdata2, listdata3, deepRate, lightRate, wakeRate);
    }
    else
    {
    result = LoadWeekJson(false, listTime, dtweek, dicDeep, dicLigth, dicWake, listdata1, listdata2, listdata3, deepRate, lightRate, wakeRate);
    }
    }

    break;

    #region 执行周睡眠语句返回dataTable
    /// <summary>
    /// 执行周睡眠语句返回dataTable
    /// </summary>
    /// <param name="deviceID"></param>
    /// <param name="dtweek"></param>
    /// <param name="rowCountweek"></param>
    /// <param name="checkBegin"></param>
    /// <param name="checkEnd"></param>
    /// <param name="beginTime"></param>
    /// <param name="endTime"></param>
    /// <param name="sleep1"></param>
    /// <param name="sleep2"></param>
    public void LoadSql(int deviceID, ref DataTable dtweek, ref int rowCountweek, int checkBegin, int checkEnd, DateTime beginTime, DateTime endTime, string sleep1, string sleep2)
    {

    #region 周睡眠统计语句
    string beginTime1 = "";
    string EndTime1 = "";
    string sqlstr = "";
    if (checkBegin > checkEnd)
    {
    beginTime1 = Convert.ToDateTime(beginTime).AddDays(-1).ToString("yyyy-MM-dd") + " " + sleep1;
    EndTime1 = Convert.ToDateTime(endTime).ToString("yyyy-MM-dd") + " " + sleep2;
    sqlstr = string.Format(@"SELECT strhour,SUM(S_RollCount) S_RollCount,SUBSTRING(strhour,1,8) strday,S_MeasureEndTime AS ttt,
    (CASE WHEN CONVERT(DATE_FORMAT(S_MeasureEndTime,'%H'), UNSIGNED INTEGER)>=23 THEN
    DATE_FORMAT(DATE_ADD(S_MeasureEndTime,INTERVAL 1 DAY),'%Y-%m-%d')
    ELSE S_MeasureEndTime

    END) S_MeasureEndTime

    FROM
    (
    SELECT *,DATE_FORMAT(S_MeasureEndTime,'%Y%m%d%H') AS strhour FROM wd_sport
    WHERE L_DID={0} AND S_state=0 AND S_MeasureEndTime>='{1}' AND S_MeasureEndTime<'{2}'
    AND
    (
    ({3}<=CONVERT(DATE_FORMAT(S_MeasureEndTime,'%H'), UNSIGNED INTEGER))
    OR
    (CONVERT(DATE_FORMAT(S_MeasureEndTime,'%H'), UNSIGNED INTEGER)>=0 AND CONVERT(DATE_FORMAT(S_MeasureEndTime,'%H'), UNSIGNED INTEGER)<{4})
    )
    ) tblhours
    GROUP BY strhour; ", deviceID, beginTime1, EndTime1, checkBegin, checkEnd);


    }
    else
    {

    beginTime1 = Convert.ToDateTime(beginTime).ToString("yyyy-MM-dd") + " " + sleep1;
    EndTime1 = Convert.ToDateTime(endTime).ToString("yyyy-MM-dd") + " " + sleep2;
    sqlstr = string.Format(@"SELECT strhour,SUM(S_RollCount) S_RollCount,SUBSTRING(strhour,1,8) strday,S_MeasureEndTime
    FROM
    (
    SELECT *,DATE_FORMAT(S_MeasureEndTime,'%Y%m%d%H') AS strhour FROM wd_sport
    WHERE L_DID={0} AND S_state=0 AND S_MeasureEndTime>='{1}' AND S_MeasureEndTime<'{2}'
    AND
    (

    (CONVERT(DATE_FORMAT(S_MeasureEndTime,'%H'), UNSIGNED INTEGER)>={3} AND CONVERT(DATE_FORMAT(S_MeasureEndTime,'%H'), UNSIGNED INTEGER)<={4})
    )
    ) tblhours

    GROUP BY strhour; ", deviceID, beginTime1, EndTime1, checkBegin, checkEnd);

    }

    DataSet dsweeksleep = T9.DBUtility.DbHelperMySQL.Query(sqlstr);
    dtweek = dsweeksleep.Tables[0];
    rowCountweek = dtweek.Rows.Count;

    #endregion

    }
    #endregion


    #region 加载周睡眠json
    /// <summary>
    /// 加载周睡眠json
    /// </summary>
    /// <param name="listTime"></param>
    /// <param name="dtweek"></param>
    /// <param name="dicDeep"></param>
    /// <param name="dicLigth"></param>
    /// <param name="dicWake"></param>
    /// <param name="listdata1"></param>
    /// <param name="listdata2"></param>
    /// <param name="listdata3"></param>
    /// <param name="deepRate"></param>
    /// <param name="lightRate"></param>
    /// <param name="wakeRate"></param>
    /// <param name="deepdata"></param>
    /// <param name="ligthdata"></param>
    /// <param name="wakedata"></param>
    public ChartBack LoadWeekJson(
    bool IsData,
    List<string> listTime,
    DataTable dtweek,
    Dictionary<string, int> dicDeep,
    Dictionary<string, int> dicLigth,
    Dictionary<string, int> dicWake,
    List<int> listdata1,
    List<int> listdata2,
    List<int> listdata3,
    int deepRate = 0,
    int lightRate = 0,
    int wakeRate = 0)
    {

    ChartBack result = new ChartBack();
    sleepweekDetail deepdata = new sleepweekDetail();
    sleepweekDetail ligthdata = new sleepweekDetail();
    sleepweekDetail wakedata = new sleepweekDetail();
    List<sleepweekDetail> listWeek = new List<sleepweekDetail>();
    #region 返回的list数据对象
    InitSleepData(listTime, dtweek, dicDeep, dicLigth, dicWake, ref listdata1, ref listdata2, ref listdata3, deepRate, lightRate, wakeRate);
    deepdata = new sleepweekDetail();
    deepdata.name = "深睡";
    deepdata.stack = "状态";
    deepdata.type = "bar";
    deepdata.barWidth = "40";
    itemStyle itemstyle = new itemStyle();
    itemstyle.color = "#0c5290";
    deepdata.itemStyle = itemstyle;
    string strArray = string.Join(",", listdata1);
    int[] str1 = Array.ConvertAll<string, int>(strArray.Split(','), s => int.Parse(s));
    deepdata.data = str1;
    listWeek.Add(deepdata);

    ligthdata = new sleepweekDetail();
    ligthdata.name = "浅睡";
    ligthdata.stack = "状态";
    ligthdata.type = "bar";
    itemStyle itemstyle2 = new itemStyle();
    itemstyle2.color = "#4da9f2";
    ligthdata.itemStyle = itemstyle2;

    string strArray2 = string.Join(",", listdata2);
    int[] str2 = Array.ConvertAll<string, int>(strArray2.Split(','), s => int.Parse(s));
    ligthdata.data = str2;
    listWeek.Add(ligthdata);
    wakedata = new sleepweekDetail();

    itemStyle itemstyle3 = new itemStyle();
    itemstyle3.color = "#fe027b";
    wakedata.itemStyle = itemstyle3;
    wakedata.name = "清醒";
    wakedata.stack = "状态";
    wakedata.type = "bar";

    string strArray3 = string.Join(",", listdata3);
    int[] str3 = Array.ConvertAll<string, int>(strArray3.Split(','), s => int.Parse(s));
    wakedata.data = str3;
    listWeek.Add(wakedata);
    result.sleepweekDetail = listWeek;
    result.listtime = listTime;
    if (IsData)
    {
    result.Return = true;
    }
    else
    {
    result.Return = false;
    }
    #endregion


    return result;

    }

    #endregion


    #region 计算睡眠数据add/2021/3/4
    /// <summary>
    /// 计算睡眠数据add/2021/3/4
    /// </summary>
    /// <param name="listTime">时间集合</param>
    /// <param name="dtweek">周数据</param>
    /// <param name="dicDeep">深睡字典数据</param>
    /// <param name="dicLigth">浅睡字典数据</param>
    /// <param name="dicWake">清醒字典数据</param>
    /// <param name="listdata1">深睡数据</param>
    /// <param name="listdata2">浅睡数据</param>
    /// <param name="listdata3">清醒数据</param>
    /// <param name="deepRate">深睡频率</param>
    /// <param name="lightRate">浅睡频率</param>
    /// <param name="wakeRate">清醒频率</param>
    public void InitSleepData(
    List<string> listTime,
    DataTable dtweek,
    Dictionary<string, int> dicDeep,
    Dictionary<string, int> dicLigth,
    Dictionary<string, int> dicWake, ref List<int> listdata1, ref List<int> listdata2, ref List<int> listdata3, int deepRate, int lightRate, int wakeRate
    )
    {

    int deepHour = 0;
    int lightHour = 0;
    int wakeHour = 0;
    foreach (var strtime in listTime)
    {

    if (dtweek.Rows.Count > 0)
    {
    for (int i = 0; i < dtweek.Rows.Count; i++)
    {
    int S_RollCount = Convert.ToInt32(dtweek.Rows[i]["S_RollCount"].ToString());
    string checktime = Convert.ToDateTime(dtweek.Rows[i]["S_MeasureEndTime"]).ToString("yyyy-MM-dd");
    #region 睡眠类型
    string year = Convert.ToDateTime(dtweek.Rows[i]["S_MeasureEndTime"]).ToString("yyyy");
    string month = Convert.ToDateTime(dtweek.Rows[i]["S_MeasureEndTime"]).ToString("MM");
    string day = Convert.ToDateTime(dtweek.Rows[i]["S_MeasureEndTime"]).ToString("dd");
    string time1 = ProUtil.CaculateWeekDay(Convert.ToInt32(year), Convert.ToInt32(month), Convert.ToInt32(day));

    if (strtime == time1)
    {

    #region 睡眠翻滚次数统计
    if (S_RollCount >= 0 && S_RollCount <= deepRate)
    {
    if (dtweek.Rows[i]["S_RollCount"] != null && dtweek.Rows[i]["S_RollCount"].ToString() != "")
    {
    if (!dicDeep.ContainsKey(time1))
    {
    dicDeep.Add(time1, deepHour + 1);
    }
    else
    {
    int deepOld = 0;
    dicDeep.TryGetValue(time1, out deepOld);
    dicDeep[time1] = deepOld + 1;
    }
    }
    else
    {

    if (!dicDeep.ContainsKey(time1))
    {
    dicDeep.Add(time1, 0);
    }
    }
    }
    else if (S_RollCount >= lightRate && S_RollCount < wakeRate)
    {
    if (dtweek.Rows[i]["S_RollCount"] != null && dtweek.Rows[i]["S_RollCount"].ToString() != "")
    {
    if (!dicLigth.ContainsKey(time1))
    {
    dicLigth.Add(time1, lightHour + 1);
    }
    else
    {
    int deepOld = 0;
    dicLigth.TryGetValue(time1, out deepOld);
    dicLigth[time1] = deepOld + 1;

    }
    }
    else
    {
    if (!dicLigth.ContainsKey(time1))
    {
    dicLigth.Add(time1, 0);
    }

    }
    }

    else if (S_RollCount >= wakeRate)
    {
    if (dtweek.Rows[i]["S_RollCount"] != null && dtweek.Rows[i]["S_RollCount"].ToString() != "")
    {
    if (!dicWake.ContainsKey(time1))
    {
    dicWake.Add(time1, wakeHour + 1);
    }
    else
    {
    int deepOld = 0;
    dicWake.TryGetValue(time1, out deepOld);
    dicWake[time1] = deepOld + 1;
    }
    }
    else
    {
    if (!dicWake.ContainsKey(time1))
    {
    dicWake.Add(time1, 0);
    }
    }
    }
    #endregion
    }
    else
    {


    #region 没有数据加0
    if (!dicDeep.ContainsKey(strtime))
    {
    dicDeep.Add(strtime, 0);
    }
    if (!dicLigth.ContainsKey(strtime))
    {
    dicLigth.Add(strtime, 0);
    }
    if (!dicWake.ContainsKey(strtime))
    {
    dicWake.Add(strtime, 0);
    }
    #endregion
    }
    #endregion

    }
    }
    else
    {


    #region 无数据也加默认为0的值
    if (!dicDeep.ContainsKey(strtime))
    {
    dicDeep.Add(strtime, 0);
    }
    if (!dicLigth.ContainsKey(strtime))
    {
    dicLigth.Add(strtime, 0);
    }
    if (!dicWake.ContainsKey(strtime))
    {
    dicWake.Add(strtime, 0);
    }
    #endregion

    }
    }
    foreach (var item1 in dicDeep)
    {
    listdata1.Add(item1.Value);
    }
    foreach (var item2 in dicLigth)
    {
    listdata2.Add(item2.Value);
    }
    foreach (var item3 in dicWake)
    {
    listdata3.Add(item3.Value);
    }
    }
    #endregion


    [Serializable]
    public class ChartBack
    {
    public bool Return { get; set; }
    public List<ChartDetail> Data { get; set; }
    public List<ChartYaxis> Yaxis { get; set; }
    public markLine[] markLine { get; set; }

    public markLineTiwen[] markLineTiwen { get; set; }//add/2021/1/5
    public int min { get; set; }
    public int max { get; set; }
    public string maxTime { get; set; }
    public string minTime { get; set; }
    public int avg { get; set; }


    //add/2021/1/5---体温相关参数
    public decimal tiwenMin { get; set; }

    public decimal tiwenMax { get; set; }

    public decimal tiwenAvg { get; set; }


    //add/2021/3/2---睡眠相关参数,sleepDeep深度,sleepLight浅睡,sleepWake清醒

    public List<sleepweekDetail> sleepweekDetail { get; set; }

    public List<string> listtime { get; set; }
    public decimal sleepDeep { get; set; }

    public decimal sleepLight { get; set; }

    public decimal sleepWake { get; set; }
    }
    // 画线
    public class markLine
    {
    public bool silent { get; set; }
    public LineDetail[] data { get; set; }
    }
    //add/2021/1/5
    public class markLineTiwen
    {
    public bool silent { get; set; }
    public LineDetailTiwen[] data { get; set; }
    }
    //画线 每一条的值
    public class LineDetail
    {
    public int yAxis { get; set; }
    public string name { get; set; }
    }

    //画线 每一条的值//add/2021/1/5
    public class LineDetailTiwen
    {
    public decimal yAxis { get; set; }
    public string name { get; set; }
    }
    //每个点数据
    public class dataDetail
    {
    public string[] value;
    }

    //每个点天睡眠数据
    public class sleepdayDetail
    {
    public string[] value;
    public itemStyle itemStyle { get; set; }//测试测试
    }

    //测试/2021/3/2
    public class sleepDetail
    {
    public string value { get; set; }
    public string Hours { get; set; }
    public itemStyle itemStyle { get; set; }
    }

    //测试/2021/3/2
    public class sleepweekDetail
    {
    public string name { get; set; }
    public string type { get; set; }
    public string stack { get; set; }
    public string barWidth { get; set; }
    public int[] data { get; set; }
    public itemStyle itemStyle { get; set; }
    }

    //测试/2021/3/2
    public class itemStyle
    {
    public string color { get; set; }

    }


    //ecahrt 数据
    public class ChartDetail
    {
    public string name { get; set; }
    public string type { get; set; }
    public bool smooth { get; set; }
    public dataDetail[] data { get; set; }
    public int yAxisIndex { get; set; }
    public string[] color { get; set; }
    //测试/2021/3/2
    public sleepdayDetail[] sleepdata { get; set; }
    public sleepweekDetail[] sleepweekdata { get; set; }
    public string barCategoryGap { get; set; }
    public string[] sleeptimes { get; set; }
    }

    //echart y轴线 值样式
    public class axisLabel
    {
    public string formatter { get; set; }
    }
    //echart y轴线
    public class ChartYaxis
    {
    public string type { get; set; }
    public string name { get; set; }
    public int min { get; set; }
    public int max { get; set; }
    public string position { get; set; }
    public int offset { get; set; }
    public axisLabel axisLabel { get; set; }
    }

    #endregion

  • 相关阅读:
    JDK的KEYTOOL的应用,以及签署文件的应用(原创)
    2017年Android SDK下载安装及配置教程(附带原文地址)
    C# 使用 MemoryStream 将数据写入内存
    iOS7下隐藏status bar的详细研究
    如何布局包含Image和Title的UIButton
    自定义iOS7导航栏背景,标题和返回按钮文字颜色
    UIRefreshControl自动刷新
    SDWebImage缓存图片的机制(转)
    iOS6的旋屏控制技巧
    IOS开发之----NSDictionary,JSON和XML互相转换
  • 原文地址:https://www.cnblogs.com/wugh8726254/p/14491548.html
Copyright © 2011-2022 走看看