using Nirvana.Common;
using Nirvana.Common.ApiBase;
using Nirvana.Data;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using YBDevice.Entity;
namespace YBDevice.NApi.DBServices
{
///
/// 用户测量处理
///
public partial class ResultApp : BaseApp
{
///
/// 增加测量记录,用于蓝牙传输
///
///
///
public async Task MeasureAsync(MeasureSubmitModel model)
{
if (model.height <= 0)
{
return new ResultInfo(ResultState.FAIL, "身高不可小于0");
}
if (string.IsNullOrEmpty(model.weight))
{
return new ResultInfo(ResultState.FAIL, "体重不可小于0");
}
if (string.IsNullOrEmpty(model.ecode))
{
return new ResultInfo(ResultState.FAIL, "设备码不可为空");
}
if (model.familyid <= 0)
{
return new ResultInfo(ResultState.FAIL, "请先选择家庭成员");
}
using (var dbClient = ReadDbContext.GetInstance())
{
//检查家庭成员是否存在
if (!await dbClient.Queryable().AnyAsync(x => x.Id == model.familyid))
{
return new ResultInfo(ResultState.FAIL, "家庭成员未找到");
}
//检查设备是否存在
if (!await dbClient.Queryable().AnyAsync(x => x.Ecode == model.ecode))
{
return new ResultInfo(ResultState.FAIL, "设备未找到");
}
var wg = model.weight.ToUpper();
if (wg.Contains("LB"))
{
wg = (wg.Replace("LB", "").ToDouble() * 0.4536).ToString();
}
else if (wg.Contains("JIN"))
{
wg = (wg.Replace("JIN", "").ToDouble() / 2.0).ToString();
}
else if (wg.Contains("ST")) //英石
{
wg = (wg.Replace("ST", "").ToDouble() *6.35).ToString();
}
else
{
wg = wg.Replace("KG", "");
}
decimal weight = wg.ToDecimal();
var family = await dbClient.Queryable().FirstAsync(x => x.Id == model.familyid);
//计算结果
var result = BodyFatHelper.CalcBodyFat(weight.ToDouble(), model.height, family.Age, model.imp.ToInt(), family.Sex);
//年龄月份
var month = family.Birthday.ToMonth();
//增加记录
await dbClient.Ado.UseStoredProcedure().ExecuteCommandAsync("proc_insertresult", new
{
sex = family.Sex,
age = family.Age,
month = month,
height = model.height,
weight = weight,
imp = model.imp,
ecode = model.ecode,
familyid = model.familyid,
userid = authInfo.UserId,
fat_r = result.fat_r,
muscle = result.muscle,
water = result.water,
bone = result.bone,
kcal = result.kcal,
fat_w = result.fat_w,
visceral = result.visceral,
protein = result.protein,
bodyage = result.bodyage,
bmi = result.bmi,
cmi = result.cmi,
sfr = result.sfr,
muscleval = result.muscleval,
proteinval = result.proteinval,
lbm = result.lbm,
body = result.bodylevel,
fatlevel = result.fatLevel
});
return new ResultInfo(ResultState.SUCCESS, "测量成果");
}
}
///
/// 手动增加测量记录
///
///
///
public async Task InsertMeasureAsync(UserMeasureSubmitModel model)
{
if (model.weight <= 0)
{
return new ResultInfo(ResultState.FAIL, "体重不可小于0");
}
if (model.familyid <= 0)
{
return new ResultInfo(ResultState.FAIL, "请先选择家庭成员");
}
using (var dbClient = ReadDbContext.GetInstance())
{
//检查家庭成员是否存在
if (!await dbClient.Queryable().AnyAsync(x => x.Id == model.familyid))
{
return new ResultInfo(ResultState.FAIL, "家庭成员未找到");
}
var family = await dbClient.Queryable().FirstAsync(x => x.Id == model.familyid);
//计算结果
var result = BodyFatHelper.CalcBodyFat(model.weight.ToDouble(), family.Height.ToDouble(), family.Age, 0, family.Sex);
//年龄月份
var month = family.Birthday.ToMonth();
//增加记录
await dbClient.Ado.UseStoredProcedure().ExecuteCommandAsync("proc_insertresult", new
{
sex = family.Sex,
age = family.Age,
month = month,
height = model.Height <= 0 ? family.Height : model.Height,
weight = model.weight,
imp = 0,
ecode = "YB0001",//所有手动添加的记录都默认为此设置
familyid = model.familyid,
userid = authInfo.UserId,
fat_r = result.fat_r,
muscle = result.muscle,
water = result.water,
bone = result.bone,
kcal = result.kcal,
fat_w = result.fat_w,
visceral = result.visceral,
protein = result.protein,
bodyage = result.bodyage,
bmi = result.bmi,
cmi = result.cmi,
sfr = result.sfr,
muscleval = result.muscleval,
proteinval = result.proteinval,
lbm = result.lbm,
body = result.bodylevel,
fatlevel = result.fatLevel,
createtime = model.time.ToDate(),
sourcetype = 2 //1-蓝牙传输,2-手动记录
});
return new ResultInfo(ResultState.SUCCESS, "记录成功");
}
}
///
/// 获取历史记录
///
/// 查询参数
///
public async Task> GetHistoryListAsync(ParamQuery param)
{
using (var dbClient = ReadDbContext.GetInstance())
{
int familyid = param.keyword.ToInt();
var tempquery = dbClient.Queryable().Where(x => x.FamilyId == familyid);
RefAsync totalnum = 0;
var query = await tempquery.OrderBy(x => x.createtime, OrderByType.Desc)
.Select(x=>new MeasureHisList {
bmi=x.bmi,
body=x.body,
bodyage=x.bodyage,
bone=x.bone,
cmi=x.cmi,
createtime=SqlFunc.ToString(x.createtime),
fatlevel=x.fatlevel,
fat_r=x.fat_r,
fat_w=x.fat_w,
Height=x.Height,
kcal=x.kcal,
lbm=x.lbm,
muscle=x.muscle,
muscleval=x.muscleval,
protein=x.protein,
proteinval=x.proteinval,
sfr=x.sfr,
visceral=x.visceral,
water=x.water,
weight=x.Weight,
Age=SqlFunc.ToString(x.Age),
Month=x.Month
})
.Mapper((it, cache) => {
it.createtime = it.createtime.ToYearDateTime();
it.Age = it.Month.TomAge();
})
.ToPageListAsync(param.page, param.pagesize, totalnum);
return new PageParms
{
page = param.page,
Items = query,
totalnum = totalnum,
limit = param.pagesize
};
}
}
///
/// 手动添加的历史记录
///
///
///
public async Task> GetAddListAsync(ParamQuery param)
{
using (var dbClient = ReadDbContext.GetInstance())
{
var tempquery = dbClient.Queryable();
RefAsync totalnum = 0;
if (!string.IsNullOrEmpty(param.keyword))
{
var familyid = param.keyword.ToInt();
tempquery = tempquery.Where(x => x.FamilyId == familyid);
}
else
{
tempquery = tempquery.Where(x => x.UserId == authInfo.UserId);
}
var query = await tempquery.OrderBy(x => x.CreateTime, OrderByType.Desc)
.Select(x => new AddResultList
{
CreateTime = SqlFunc.ToString(x.CreateTime),
Height = x.Height,
Weight = x.Weight,
Id = x.Id,
ResultTime = SqlFunc.ToString(x.ResultTime)
})
.Mapper((it, cache) =>
{
it.CreateTime = it.CreateTime.ToYearDateTime();
it.ResultTime = it.ResultTime.ToYearDate();
})
.ToPageListAsync(param.page, param.pagesize, totalnum);
return new PageParms
{
page = param.page,
Items = query,
totalnum = totalnum,
limit = param.pagesize
};
}
}
///
/// 删除手动添加的记录
///
///
///
public async Task DeleteAddResultAsync(int id)
{
using (var dbClient = ReadDbContext.GetInstance())
{
var data = await dbClient.Queryable().FirstAsync(x => x.Id == id);
if (data == null)
{
return new ResultInfo(ResultState.FAIL, "记录未找到");
}
await dbClient.Deleteable().Where(x => x.Id == id).ExecuteCommandAsync();
//删除关联的记录
await dbClient.Deleteable().Where(x => x.ResultId == data.ResultId).ExecuteCommandAsync();
await dbClient.Deleteable().Where(x => x.ResultId == data.ResultId).ExecuteCommandAsync();
return new ResultInfo(ResultState.SUCCESS, "删除成功");
}
}
}
}