MeiRiYiCheng_1_old/YBDevice.Api/DBServices/UserApp.cs

324 lines
19 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Nirvana.Common;
using Nirvana.Common.ApiBase;
using Nirvana.Data;
using Senparc.Weixin.WxOpen.Containers;
using Senparc.Weixin.WxOpen.Helpers;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using YBDevice.Entity;
namespace YBDevice.Api.DBServices
{
/// <summary>
/// 注册用户管理
/// </summary>
public partial class UserApp : BaseApp
{
/// <summary>
/// 获取用户个人资料
/// </summary>
/// <returns></returns>
public async Task<ResultInfo> GetUserInfoAsync()
{
using (var dbClient = ReadDbContext.GetInstance())
{
var user = await dbClient.Queryable<YB_RegUser>().Where(x => x.Id == authInfo.UserId).FirstAsync();
var family = await dbClient.Queryable<YB_Family>().Where(x => x.UserId == user.Id).OrderBy(x => x.LastHeartTime, OrderByType.Desc).FirstAsync();
var target = await dbClient.Queryable<YB_FamilyTarget>().FirstAsync(x => x.familyid == family.Id);
var data = new UserInfoModel
{
headimg = user.Headimg,
sex = user.Gender,
nickname = user.Name,
isbindphone = string.IsNullOrEmpty(user.Phone) ? false : true,
age = family.Age,
familyid = family.Id,
height = family.Height,
targetweight = target != null ? target.weight : 0,
targettime = target != null ? target.time.ToString("yyyy-MM-dd") : "",
weight = family.Weight,
lasthearttime = family.LastHeartTime.HasValue ? family.LastHeartTime.Value.ToString("yyyy-MM-dd") : ""
};
return new ResultInfo(ResultState.SUCCESS, "success", data);
}
}
/// <summary>
/// 解密手机号
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public async Task<ResultInfo> DecryptPhoneAsync(WxOpenDecryptSubmitModel model)
{
using (var dbClient = ReadDbContext.GetInstance())
{
var sessionBag = await SessionContainer.GetSessionAsync(model.sessionId);
if (sessionBag == null)
{
return new ResultInfo(ResultState.FAIL, "sessionId未找到");
}
var phone = EncryptHelper.DecryptPhoneNumber(model.sessionId, model.encryptedData, model.iv);
//更新当前用户的手机号
await dbClient.Updateable<YB_RegUser>().SetColumns(x => new YB_RegUser
{
Phone = phone.purePhoneNumber
}).Where(x => x.Id == authInfo.UserId).ExecuteCommandAsync();
return new ResultInfo(ResultState.SUCCESS, "手机号绑定成功");
}
}
/// <summary>
/// 获取用户测量数据
/// </summary>
/// <returns></returns>
public async Task<ResultInfo> GetMeasureInfoAsync(UserMeasureInfoModel model)
{
if (model.height <= 0)
{
return new ResultInfo(ResultState.FAIL, "身高不可小于0");
}
if (model.age <= 0)
{
return new ResultInfo(ResultState.FAIL, "年龄不可小于0");
}
using (var dbClient = ReadDbContext.GetInstance())
{
//获取此家庭成员的体重信息
var family = await dbClient.Queryable<YB_Family>().Where(x => x.Id == model.familyid).FirstAsync();
if (family == null)
{
return new ResultInfo(ResultState.FAIL, "家庭成员未找到");
}
if (!await dbClient.Queryable<YB_Measure>().AnyAsync(x => x.FamilyId == family.Id))
{
return new ResultInfo(ResultState.FAIL, "此家庭成员还未分配测量记录");
}
var result = await dbClient.Queryable<YB_ResultExt>().Where(x => SqlFunc.Subqueryable<YB_Measure>().Where(e => e.ResultId == x.ResultId && e.FamilyId == family.Id).Any())
.OrderBy(x => x.CreateTime, OrderByType.Desc)
.FirstAsync();
var data = BodyFatHelper.CalcBodyFat(family.Weight.ToDouble(), model.height, model.age, result.Imp.ToInt(), model.sex);
var returndata = new UserMeasureInfo
{
bmi = data.bmi,
bmiLevel = data.bmiLevel,
body = data.body,
bodyage = data.bodyage,
bodyageLevel = data.bodyageLevel,
bodylevel = data.bodylevel,
bone = data.bone,
boneLevel = data.boneLevel,
cmi = data.cmi,
fatLevel = data.fatLevel,
fatlevel = data.fatlevel,
fat_r = data.fat_r,
fat_rLevel = data.fat_rLevel,
fat_w = data.fat_w,
fat_wLevel = data.fat_wLevel,
kcal = data.kcal,
kcalLevel = data.kcalLevel,
lbm = data.lbm,
muscle = data.muscle,
muscleLevel = data.muscleLevel,
muscleval = data.muscleval,
musulevalLevel = data.musulevalLevel,
protein = data.protein,
proteinLevel = data.proteinLevel,
proteinval = data.proteinval,
proteinvalLevel = data.proteinvalLevel,
sfr = data.sfr,
sfrLevel = data.sfrLevel,
standardbmi = data.standardbmi,
standardbody = data.standardbody,
standardbodyage = data.standardbodyage,
standardbone = data.standardbone,
standardfatlevel = data.standardfatlevel,
standardfat_r = data.standardfat_r,
standardfat_w = data.standardfat_w,
standardkcal = data.standardkcal,
standardlbm = data.standardlbm,
standardmuscle = data.standardmuscle,
standardmuscleval = data.standardmuscleval,
standardprotein = data.standardprotein,
standardproteinval = data.standardproteinval,
standardsfr = data.standardsfr,
standardviscera = data.standardviscera,
standardwater = data.standardwater,
standardWeight = data.standardWeight,
visceral = data.visceral,
visceralLevel = data.visceralLevel,
water = data.water,
waterLevel = data.waterLevel
};
//获取每项的历史值
var dataset = await dbClient.Ado.UseStoredProcedure().GetDataSetAllAsync("proc_getmeasureitem_page", new
{
pagesize = model.pagesize,
pagenum = model.pagenum,
familyid = model.familyid
});
if (dataset.Tables.Count == 0)
{
returndata.list = new List<MeasureInfoItem>();
}
else
{
//BMI标准,最大值,最小值,标准范围
var listcnt = DataTableListHelper.ToList<MeasureModels>(dataset.Tables[0]);
var listday = DataTableListHelper.ToList<MeasureModels>(dataset.Tables[1]);
List<MeasureInfoItem> info = new List<MeasureInfoItem>();
List<string> mlist = new List<string> { "bmi", "fat_r", "muscle", "water", "bone", "kcal", "fat_w", "visceral", "protein", "bodyage","sfr","body",
"muscleval","proteinval","lbm","fatlevel" };
//最近的上上次测量结果
var lastresult = await dbClient.Queryable<YB_ResultExt>().Where(x => SqlFunc.Subqueryable<YB_Measure>().Where(e => e.ResultId == x.ResultId && e.FamilyId == family.Id).Any() && x.ResultId != result.ResultId)
.OrderBy(x => x.CreateTime, OrderByType.Desc)
.FirstAsync();
if (lastresult != null)
{
var mresult = await dbClient.Queryable<YB_Measure>().Where(x => x.ResultId == lastresult.ResultId).FirstAsync();
var levelresult = BodyFatHelper.CalcBodyFat(lastresult.Weight.ToDouble(), mresult.Height, mresult.Age, lastresult.Imp.ToInt(), mresult.Sex);
//判定时sex为0-女1-男,所以这里进行转换
model.sex = model.sex == 2 ? 0 : 1;
mlist.ForEach(x =>
{
var m = new MeasureInfoItem()
{
name = x
};
if (x == "bmi")
{
m.list = listcnt.Select(e => new MeasureHisItem { value = e.bmi.ToString(), time = e.timestamp }).ToList();
m.daylist = listday.Select(e => new MeasureHisItem { value = e.bmi.ToString(), time = e.timestamp }).ToList();
m.slist = BodyFatHelper.bmi_value(model.sex, model.age);
m.value = levelresult.bmi;
m.lastvalue = data.bmi - m.value;
}
else if (x == "fat_r")
{
m.list = listcnt.Select(e => new MeasureHisItem { value = e.fat_r.ToString(), time = e.timestamp }).ToList();
m.daylist = listday.Select(e => new MeasureHisItem { value = e.fat_r.ToString(), time = e.timestamp }).ToList();
m.slist = BodyFatHelper.fa_r_value(model.sex, model.age);
m.value = levelresult.fat_r;
m.lastvalue = data.fat_r - m.value;
}
else if (x == "muscle")
{
m.list = listcnt.Select(e => new MeasureHisItem { value = e.muscle.ToString(), time = e.timestamp }).ToList();
m.daylist = listday.Select(e => new MeasureHisItem { value = e.muscle.ToString(), time = e.timestamp }).ToList();
m.slist = BodyFatHelper.muscle_value(model.sex, model.age);
m.value = levelresult.muscle;
m.lastvalue = data.muscle - m.value;
}
else if (x == "water")
{
m.list = listcnt.Select(e => new MeasureHisItem { value = e.water.ToString(), time = e.timestamp }).ToList();
m.daylist = listday.Select(e => new MeasureHisItem { value = e.water.ToString(), time = e.timestamp }).ToList();
m.slist = BodyFatHelper.water_value(model.sex, model.age);
m.value = levelresult.water;
m.lastvalue = data.water - m.value;
}
else if (x == "bone")
{
m.list = listcnt.Select(e => new MeasureHisItem { value = e.bone.ToString(), time = e.timestamp }).ToList();
m.daylist = listday.Select(e => new MeasureHisItem { value = e.bone.ToString(), time = e.timestamp }).ToList();
m.slist = BodyFatHelper.bone_value(model.sex, model.age, lastresult.Weight);
m.value = levelresult.bone;
m.lastvalue = data.bone - m.value;
}
else if (x == "kcal")
{
m.list = listcnt.Select(e => new MeasureHisItem { value = e.kcal.ToString(), time = e.timestamp }).ToList();
m.daylist = listday.Select(e => new MeasureHisItem { value = e.kcal.ToString(), time = e.timestamp }).ToList();
m.slist = BodyFatHelper.kcal_value(model.sex, model.age, lastresult.Weight);
m.value = levelresult.kcal;
m.lastvalue = data.kcal - m.value;
}
else if (x == "fat_w")
{
m.list = listcnt.Select(e => new MeasureHisItem { value = e.fat_w.ToString(), time = e.timestamp }).ToList();
m.daylist = listday.Select(e => new MeasureHisItem { value = e.fat_w.ToString(), time = e.timestamp }).ToList();
m.value = levelresult.fat_w;
m.lastvalue = data.fat_w - m.value;
}
else if (x == "visceral")
{
m.list = listcnt.Select(e => new MeasureHisItem { value = e.visceral.ToString(), time = e.timestamp }).ToList();
m.daylist = listday.Select(e => new MeasureHisItem { value = e.visceral.ToString(), time = e.timestamp }).ToList();
m.slist = BodyFatHelper.visceral_value(model.sex, model.age);
m.value = levelresult.visceral;
m.lastvalue = data.visceral - m.value;
}
else if (x == "protein")
{
m.list = listcnt.Select(e => new MeasureHisItem { value = e.protein.ToString(), time = e.timestamp }).ToList();
m.daylist = listday.Select(e => new MeasureHisItem { value = e.protein.ToString(), time = e.timestamp }).ToList();
m.slist = BodyFatHelper.protein_value(model.sex, model.age);
m.value = levelresult.protein;
m.lastvalue = data.protein - m.value;
}
else if (x == "bodyage")
{
m.list = listcnt.Select(e => new MeasureHisItem { value = e.bodyage.ToString(), time = e.timestamp }).ToList();
m.daylist = listday.Select(e => new MeasureHisItem { value = e.bodyage.ToString(), time = e.timestamp }).ToList();
m.value = levelresult.bodyage;
m.lastvalue = data.bodyage - m.value;
}
else if (x == "sfr")
{
m.list = listcnt.Select(e => new MeasureHisItem { value = e.sfr.ToString(), time = e.timestamp }).ToList();
m.daylist = listday.Select(e => new MeasureHisItem { value = e.sfr.ToString(), time = e.timestamp }).ToList();
m.slist = BodyFatHelper.sfr_value(model.sex, model.age);
m.value = levelresult.sfr;
m.lastvalue = data.sfr - m.value;
}
else if (x == "body")
{
m.list = listcnt
.Select(e => new MeasureHisItem { value = e.body, time = e.timestamp })
.ToList();
m.daylist = listday.Select(e => new MeasureHisItem { value = e.body, time = e.timestamp }).ToList();
m.value = 0;
m.lastvalue = 0;
}
else if (x == "muscleval")
{
m.list = listcnt.Select(e => new MeasureHisItem { value = e.muscleval.ToString(), time = e.timestamp }).ToList();
m.daylist = listday.Select(e => new MeasureHisItem { value = e.muscleval.ToString(), time = e.timestamp }).ToList();
m.value = levelresult.muscleval;
m.lastvalue = data.muscleval - m.value;
}
else if (x == "proteinval")
{
m.list = listcnt.Select(e => new MeasureHisItem { value = e.proteinval.ToString(), time = e.timestamp }).ToList();
m.daylist = listday.Select(e => new MeasureHisItem { value = e.proteinval.ToString(), time = e.timestamp }).ToList();
m.value = levelresult.proteinval;
m.lastvalue = data.proteinval - m.value;
}
else if (x == "lbm")
{
m.list = listcnt.Select(e => new MeasureHisItem { value = e.lbm.ToString(), time = e.timestamp }).ToList();
m.daylist = listday.Select(e => new MeasureHisItem { value = e.lbm.ToString(), time = e.timestamp }).ToList();
m.value = levelresult.lbm;
m.lastvalue = data.lbm - m.value;
}
else if (x == "fatlevel")
{
m.list = listcnt
.Select(e => new MeasureHisItem { value = BodyFatHelper.fatlevel(e.fatlevel.ToDouble()), time = e.timestamp }).ToList();
m.daylist = listday.Select(e => new MeasureHisItem { value = BodyFatHelper.fatlevel(e.fatlevel.ToDouble()), time = e.timestamp }).ToList();
m.value = levelresult.fatlevel;
m.lastvalue = data.fatlevel - m.value;
}
info.Add(m);
});
returndata.list = info;
}
}
return new ResultInfo(ResultState.SUCCESS, "success", returndata);
}
}
}
}