1353 lines
64 KiB
C#
1353 lines
64 KiB
C#
using DotNetCore.CAP;
|
||
using Furion.DependencyInjection;
|
||
using Furion.DistributedIDGenerator;
|
||
using Mapster;
|
||
using Nirvana.Common;
|
||
using Nirvana.Common.ApiBase;
|
||
using Senparc.Weixin.WxOpen.Containers;
|
||
using Senparc.Weixin.WxOpen.Helpers;
|
||
using SqlSugar;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Data;
|
||
using System.Linq;
|
||
using System.Threading.Tasks;
|
||
using YBDevice.CommonService.BodyFatHelper;
|
||
using YBDevice.CommonService.DevTypeInfo;
|
||
using YBDevice.Entity;
|
||
|
||
namespace YBDevice.NApi.Application.UserInfo
|
||
{
|
||
public class UserService : BaseService, IUserService, ITransient
|
||
{
|
||
private readonly ISqlSugarRepository<YB_WifiBind> repository;
|
||
private readonly SqlSugarClient dbClient;
|
||
private readonly IFamilyService _familyService;
|
||
private readonly IBodyFatHelperService _bodyFatHelperService;
|
||
private readonly ICapPublisher _capBus;
|
||
private readonly IDeviceTypeService _deviceTypeService;
|
||
public UserService(ISqlSugarRepository<YB_WifiBind> sqlSugarRepository, IFamilyService familyServices, IBodyFatHelperService bodyFatHelperService, ICapPublisher capPublisher, IDeviceTypeService deviceTypeService)
|
||
|
||
{
|
||
repository = sqlSugarRepository;
|
||
dbClient = repository.Context;
|
||
_familyService = familyServices;
|
||
_bodyFatHelperService = bodyFatHelperService;
|
||
_capBus = capPublisher;
|
||
_deviceTypeService = deviceTypeService;
|
||
}
|
||
/// <summary>
|
||
/// 解密手机号
|
||
/// </summary>
|
||
/// <param name="model"></param>
|
||
/// <returns></returns>
|
||
public async Task<ResultInfo> DecryptPhoneAsync(WxOpenDecryptSubmitModel model)
|
||
{
|
||
var sessionBag = await SessionContainer.GetSessionAsync(model.sessionId);
|
||
if (sessionBag == null)
|
||
{
|
||
return new ResultInfo(ResultState.FAIL, "sessionId未找到");
|
||
}
|
||
var phone = EncryptHelper.DecryptPhoneNumberBySessionKey(sessionBag.SessionKey, 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)
|
||
{
|
||
//获取此家庭成员的体重信息
|
||
var family = await dbClient.Queryable<YB_Family>().Where(x => x.Id == model.familyid).FirstAsync();
|
||
if (family == null)
|
||
{
|
||
return new ResultInfo(ResultState.FAIL, "家庭成员未找到");
|
||
}
|
||
int age = model.birthday.ToAge();
|
||
if (age > 100)
|
||
{
|
||
return new ResultInfo(ResultState.FAIL, "年龄过大");
|
||
}
|
||
//更新家庭成员信息
|
||
await dbClient.Updateable<YB_Family>().SetColumns(x => new YB_Family
|
||
{
|
||
Height = model.height,
|
||
Age = age,
|
||
Sex = model.sex,
|
||
Birthday = model.birthday
|
||
}).Where(x => x.Id == model.familyid).ExecuteCommandAsync();
|
||
//设备类型列表
|
||
var tempquery = dbClient.Queryable<YB_nUserResult>().Where(x => x.FamilyId == family.Id);
|
||
List<int> devtypes = new List<int>();
|
||
if (model.devtype > 0)
|
||
{
|
||
devtypes = await _deviceTypeService.GetDevTypesAsync(model.devtype);
|
||
tempquery = tempquery.Where(x => devtypes.Contains(x.DevType));
|
||
}
|
||
if (!await tempquery.Clone().AnyAsync())
|
||
{
|
||
#region 如果没有测量记录,则加载演示数据
|
||
//var ysfamily = new YSFamily();
|
||
//var ysdata = BodyFatHelper.CalcBodyFat(ysfamily.ADWeight.ToDouble(), ysfamily.ADHeight.ToDouble(),ysfamily.ADAge, ysfamily.imp, ysfamily.Sex);
|
||
//List<MeasureModels> yslistcnt = new List<MeasureModels>();
|
||
//double testheight= ysfamily.ADHeight.ToDouble();
|
||
//double testweight = ysfamily.ADWeight.ToDouble();
|
||
//var testdata = new UserMeasureModel();
|
||
//List<MeasureModels> yslistday = new List<MeasureModels>();
|
||
//for (var i = 1; i <= 10; i++)
|
||
//{
|
||
// testdata= BodyFatHelper.CalcBodyFat(testweight, testheight,ysfamily.ADAge, ysfamily.imp, ysfamily.Sex);
|
||
// var tmpdata = new MeasureModels
|
||
// {
|
||
// fat_r = testdata.fat_r,
|
||
// muscle = testdata.muscle,
|
||
// water = testdata.water,
|
||
// bone = testdata.bone,
|
||
// kcal = testdata.kcal,
|
||
// fat_w = testdata.fat_w,
|
||
// visceral = testdata.visceral,
|
||
// protein = testdata.protein,
|
||
// bodyage = testdata.bodyage,
|
||
// bmi = testdata.bmi,
|
||
// sfr = testdata.sfr,
|
||
// muscleval = testdata.muscleval,
|
||
// proteinval = testdata.proteinval,
|
||
// lbm = testdata.lbm,
|
||
// body = testdata.body,
|
||
// fatlevlval = testdata.fatlevlval,
|
||
// weight = testweight.ToDecimal(),
|
||
// timestamp = DateTime.Now.AddDays(-i).ToString()
|
||
// };
|
||
// yslistcnt.Add(tmpdata);
|
||
// yslistday.Add(tmpdata);
|
||
// testweight -= 1;
|
||
// testheight -= 1;
|
||
//}
|
||
//double lheight = (ysfamily.ADHeight - 2).ToDouble();
|
||
//var yslevelresult = BodyFatHelper.CalcBodyFat(65, lheight, ysfamily.ADAge, ysfamily.imp, ysfamily.Sex);
|
||
//var yslist = HisList(ysfamily.Sex, yslistcnt, yslistday, ysfamily.ADAge, ysdata, yslevelresult, ysfamily.ADWeight);
|
||
//#endregion
|
||
//return new ResultInfo(ResultState.SUCCESS, "success", new UserMeasureInfo
|
||
//{
|
||
// IsTest = true,
|
||
// bmi = ysdata.bmi,
|
||
// sfr = ysdata.sfr,
|
||
// sfrLevel = ysdata.sfrLevel,
|
||
// standardbmi = ysdata.standardbmi,
|
||
// standardbody = ysdata.standardbody,
|
||
// standardbodyage = ysdata.standardbodyage,
|
||
// standardbone = ysdata.standardbone,
|
||
// standardfatlevel = ysdata.standardfatlevel,
|
||
// standardfat_r = ysdata.standardfat_r,
|
||
// standardfat_w = ysdata.standardfat_w,
|
||
// standardkcal = ysdata.standardkcal,
|
||
// standardlbm = ysdata.standardlbm,
|
||
// standardmuscle = ysdata.standardmuscle,
|
||
// standardmuscleval = ysdata.standardmuscleval,
|
||
// standardprotein = ysdata.standardprotein,
|
||
// standardproteinval = ysdata.standardproteinval,
|
||
// standardsfr = ysdata.standardsfr,
|
||
// standardviscera = ysdata.standardviscera,
|
||
// standardwater = ysdata.standardwater,
|
||
// standardWeight = ysdata.standardWeight,
|
||
// bmiLevel = ysdata.bmiLevel,
|
||
// body = ysdata.body,
|
||
// bodyage = ysdata.bodyage,
|
||
// bodyageLevel = ysdata.bodyageLevel,
|
||
// bodylevel = ysdata.bodylevel,
|
||
// bone = ysdata.bone,
|
||
// boneLevel = ysdata.boneLevel,
|
||
// cmi = ysdata.cmi,
|
||
// fatLevel = ysdata.fatLevel,
|
||
// fatlevlval = ysdata.fatlevlval,
|
||
// fat_r = ysdata.fat_r,
|
||
// fat_rLevel = ysdata.fat_rLevel,
|
||
// fat_w = ysdata.fat_w,
|
||
// fat_wLevel = ysdata.fat_wLevel,
|
||
// Height =ysfamily.ADHeight,
|
||
// kcal = ysdata.kcal,
|
||
// kcalLevel = ysdata.kcalLevel,
|
||
// lbm = ysdata.lbm,
|
||
// muscle = ysdata.muscle,
|
||
// muscleLevel = ysdata.muscleLevel,
|
||
// muscleval = ysdata.muscleval,
|
||
// musulevalLevel = ysdata.musulevalLevel,
|
||
// protein = ysdata.protein,
|
||
// proteinLevel = ysdata.proteinLevel,
|
||
// proteinval = ysdata.proteinval,
|
||
// proteinvalLevel = ysdata.proteinvalLevel,
|
||
// visceral = ysdata.visceral,
|
||
// visceralLevel = ysdata.visceralLevel,
|
||
// water = ysdata.water,
|
||
// waterLevel = ysdata.waterLevel,
|
||
// Weight = ysfamily.ADWeight,
|
||
// list = yslist
|
||
//});
|
||
#endregion
|
||
return new ResultInfo(ResultState.NORESULT, "未找到测量数据");
|
||
}
|
||
var userresult = await tempquery.Clone()
|
||
.OrderBy(x => x.CreateTime, OrderByType.Desc)
|
||
.FirstAsync();
|
||
var result = await dbClient.Queryable<YB_nResult>().FirstAsync(x => x.Id == userresult.Id);
|
||
UserMeasureModel data = new UserMeasureModel();
|
||
if (model.IsCalc == 0)
|
||
{
|
||
data = _bodyFatHelperService.CalcBodyFat(result.Weight.ToDouble(), model.height.ToDouble(), age, result.Imp.ToInt(), model.sex);
|
||
#region 更新测量结果
|
||
int month = model.birthday.ToMonth();
|
||
await dbClient.Updateable<YB_nMeasureResult>().SetColumns(x => new YB_nMeasureResult
|
||
{
|
||
Height = model.height,
|
||
Sex = family.Sex,
|
||
Age = family.Age,
|
||
fat_r = data.fat_r,
|
||
muscle = data.muscle,
|
||
water = data.water,
|
||
bone = data.bone,
|
||
kcal = data.kcal,
|
||
fat_w = data.fat_w,
|
||
visceral = data.visceral,
|
||
protein = data.protein,
|
||
bodyage = data.bodyage,
|
||
bmi = data.bmi,
|
||
cmi = data.cmi,
|
||
sfr = data.cmi,
|
||
muscleval = data.muscleval,
|
||
proteinval = data.proteinval,
|
||
lbm = data.lbm,
|
||
body = data.bodylevel,
|
||
fatlevel = data.fatLevel,
|
||
Month = month
|
||
}).Where(x => x.Id == result.Id).ExecuteCommandAsync();
|
||
#endregion
|
||
}
|
||
else
|
||
{
|
||
var measureresult = await dbClient.Queryable<YB_nMeasureResult>().FirstAsync(x => x.Id == result.Id);
|
||
MeasureCalcDto calcdto = new MeasureCalcDto
|
||
{
|
||
weight = measureresult.Weight.ToString(),
|
||
imp = result.Imp,
|
||
height = model.height,
|
||
ecode = "",
|
||
familyid = model.familyid,
|
||
bodyage = measureresult.bodyage,
|
||
fat_r = measureresult.fat_r,
|
||
muscle = measureresult.muscle,
|
||
water = measureresult.water,
|
||
bone = measureresult.bone,
|
||
kcal = measureresult.kcal,
|
||
visceral = measureresult.visceral,
|
||
protein = measureresult.protein,
|
||
bmi = measureresult.bmi,
|
||
sfr = measureresult.sfr,
|
||
fatlevlval = measureresult.fatlevel,
|
||
StandardWeight = 0,
|
||
fat_w = measureresult.fat_w,
|
||
lbm = measureresult.lbm,
|
||
muscleval = measureresult.muscleval,
|
||
proteinval = measureresult.proteinval,
|
||
age = measureresult.Age,
|
||
sex = measureresult.Sex,
|
||
IsCalc = model.IsCalc
|
||
};
|
||
data = _bodyFatHelperService.CalcBodyFat(calcdto);
|
||
}
|
||
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,
|
||
fatlevlval = data.fatlevlval,
|
||
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,
|
||
Height = model.height,
|
||
Weight = result.Weight
|
||
};
|
||
//获取每项的历史值
|
||
var starttime = DateTime.Now.AddMonths(-1).Date;
|
||
var endtime = DateTime.Now.AddDays(1).Date;
|
||
var dataset = await dbClient.Ado.UseStoredProcedure().GetDataSetAllAsync("proc_getmeasureitem_page", new
|
||
{
|
||
pagesize = model.pagesize,
|
||
pagenum = model.pagenum,
|
||
familyid = model.familyid,
|
||
type = model.devtype,
|
||
starttime = starttime,
|
||
endtime = endtime
|
||
});
|
||
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]);
|
||
//最近的上上次测量结果
|
||
var lastresult = await tempquery.Clone().Where(x => x.Id != result.Id)
|
||
.OrderBy(x => x.CreateTime, OrderByType.Desc)
|
||
.FirstAsync();
|
||
UserMeasureModel levelresult = new UserMeasureModel();
|
||
if (lastresult != null)
|
||
{
|
||
var mresult = await dbClient.Queryable<YB_nMeasureResult>().Where(x => x.Id == lastresult.Id).FirstAsync();
|
||
var res = await dbClient.Queryable<YB_nResult>().FirstAsync(x => x.Id == lastresult.Id);
|
||
levelresult = _bodyFatHelperService.CalcBodyFat(mresult.Weight.ToDouble(), mresult.Height.ToDouble(), mresult.Age, res.Imp.ToInt(), mresult.Sex);
|
||
}
|
||
returndata.list = HisList(model.sex, listcnt, listday, age, data, levelresult, result.Weight);
|
||
}
|
||
return new ResultInfo(ResultState.SUCCESS, "success", returndata);
|
||
}
|
||
/// <summary>
|
||
/// 历史记录分类
|
||
/// </summary>
|
||
/// <param name="sex"></param>
|
||
/// <param name="listcnt"></param>
|
||
/// <param name="listday"></param>
|
||
/// <param name="age"></param>
|
||
/// <param name="data"></param>
|
||
/// <param name="levelresult"></param>
|
||
/// <param name="weight"></param>
|
||
/// <returns></returns>
|
||
private List<MeasureInfoItem> HisList(int sex, List<MeasureModels> listcnt, List<MeasureModels> listday, int age, UserMeasureModel data, UserMeasureModel levelresult, decimal weight)
|
||
{
|
||
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","weight" };
|
||
//判定时sex为0-女,1-男,所以这里进行转换
|
||
sex = 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.ToYearDate() }).ToList();
|
||
m.daylist = listday.Select(e => new MeasureHisItem { value = e.bmi.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.slist = _bodyFatHelperService.bmi_value(sex, age);
|
||
m.value = data.bmi;
|
||
m.lastvalue = m.value - levelresult.bmi;
|
||
}
|
||
else if (x == "fat_r")
|
||
{
|
||
m.list = listcnt.Select(e => new MeasureHisItem { value = e.fat_r.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.daylist = listday.Select(e => new MeasureHisItem { value = e.fat_r.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.slist = _bodyFatHelperService.fa_r_value(sex, age);
|
||
m.value = data.fat_r;
|
||
m.lastvalue = m.value - levelresult.fat_r;
|
||
}
|
||
else if (x == "muscle")
|
||
{
|
||
m.list = listcnt.Select(e => new MeasureHisItem { value = e.muscle.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.daylist = listday.Select(e => new MeasureHisItem { value = e.muscle.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.slist = _bodyFatHelperService.muscle_value(sex, age);
|
||
m.value = data.muscle;
|
||
m.lastvalue = m.value - levelresult.muscle;
|
||
}
|
||
else if (x == "water")
|
||
{
|
||
m.list = listcnt.Select(e => new MeasureHisItem { value = e.water.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.daylist = listday.Select(e => new MeasureHisItem { value = e.water.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.slist = _bodyFatHelperService.water_value(sex, age);
|
||
m.value = data.water;
|
||
m.lastvalue = m.value - levelresult.water;
|
||
}
|
||
else if (x == "bone")
|
||
{
|
||
m.list = listcnt.Select(e => new MeasureHisItem { value = e.bone.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.daylist = listday.Select(e => new MeasureHisItem { value = e.bone.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.slist = _bodyFatHelperService.bone_value(sex, age, weight);
|
||
m.value = data.bone;
|
||
m.lastvalue = m.value - levelresult.bone;
|
||
}
|
||
else if (x == "kcal")
|
||
{
|
||
m.list = listcnt.Select(e => new MeasureHisItem { value = e.kcal.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.daylist = listday.Select(e => new MeasureHisItem { value = e.kcal.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.slist = _bodyFatHelperService.kcal_value(sex, age, weight);
|
||
m.value = data.kcal;
|
||
m.lastvalue = m.value - levelresult.kcal;
|
||
}
|
||
else if (x == "fat_w")
|
||
{
|
||
m.list = listcnt.Select(e => new MeasureHisItem { value = e.fat_w.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.daylist = listday.Select(e => new MeasureHisItem { value = e.fat_w.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.value = data.fat_w;
|
||
m.slist = _bodyFatHelperService.fat_w_value(sex, age, weight);
|
||
m.lastvalue = m.value - levelresult.fat_w;
|
||
}
|
||
else if (x == "visceral")
|
||
{
|
||
m.list = listcnt.Select(e => new MeasureHisItem { value = e.visceral.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.daylist = listday.Select(e => new MeasureHisItem { value = e.visceral.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.slist = _bodyFatHelperService.visceral_value(sex, age);
|
||
m.value = data.visceral;
|
||
m.lastvalue = m.value - levelresult.visceral;
|
||
}
|
||
else if (x == "protein")
|
||
{
|
||
m.list = listcnt.Select(e => new MeasureHisItem { value = e.protein.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.daylist = listday.Select(e => new MeasureHisItem { value = e.protein.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.slist = _bodyFatHelperService.protein_value(sex, age);
|
||
m.value = data.protein;
|
||
m.lastvalue = m.value - levelresult.protein;
|
||
}
|
||
else if (x == "bodyage")
|
||
{
|
||
m.list = listcnt.Select(e => new MeasureHisItem { value = e.bodyage.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.daylist = listday.Select(e => new MeasureHisItem { value = e.bodyage.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.value = data.bodyage;
|
||
m.lastvalue = m.value - levelresult.bodyage;
|
||
}
|
||
else if (x == "sfr")
|
||
{
|
||
m.list = listcnt.Select(e => new MeasureHisItem { value = e.sfr.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.daylist = listday.Select(e => new MeasureHisItem { value = e.sfr.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.slist = _bodyFatHelperService.sfr_value(sex, age);
|
||
m.value = data.sfr;
|
||
m.lastvalue = m.value - levelresult.sfr;
|
||
}
|
||
else if (x == "body")
|
||
{
|
||
m.list = listcnt
|
||
.Select(e => new MeasureHisItem { value = e.body, time = e.timestamp.ToYearDate() })
|
||
.ToList();
|
||
m.daylist = listday.Select(e => new MeasureHisItem { value = e.body, time = e.timestamp.ToYearDate() }).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.ToYearDate() }).ToList();
|
||
m.daylist = listday.Select(e => new MeasureHisItem { value = e.muscleval.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.slist = _bodyFatHelperService.muscleval_value(sex, age, weight);
|
||
m.value = data.muscleval;
|
||
m.lastvalue = m.value - levelresult.muscleval;
|
||
}
|
||
else if (x == "proteinval")
|
||
{
|
||
m.list = listcnt.Select(e => new MeasureHisItem { value = e.proteinval.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.daylist = listday.Select(e => new MeasureHisItem { value = e.proteinval.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.slist = _bodyFatHelperService.proteinval_value(sex, age, weight);
|
||
m.value = data.proteinval;
|
||
m.lastvalue = m.value - levelresult.proteinval;
|
||
}
|
||
else if (x == "lbm")
|
||
{
|
||
m.list = listcnt.Select(e => new MeasureHisItem { value = e.lbm.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.daylist = listday.Select(e => new MeasureHisItem { value = e.lbm.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.value = data.lbm;
|
||
m.lastvalue = m.value - levelresult.lbm; ;
|
||
}
|
||
else if (x == "fatlevel")
|
||
{
|
||
m.list = listcnt
|
||
.Select(e => new MeasureHisItem { value = _bodyFatHelperService.fatlevel(e.fatlevlval.ToDouble()), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.daylist = listday.Select(e => new MeasureHisItem { value = _bodyFatHelperService.fatlevel(e.fatlevlval.ToDouble()), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.value = 0;
|
||
m.lastvalue = 0;
|
||
}
|
||
else if (x == "weight")
|
||
{
|
||
m.list = listcnt
|
||
.Select(e => new MeasureHisItem { value = e.weight.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.daylist = listday.Select(e => new MeasureHisItem { value = e.weight.ToString(), time = e.timestamp.ToYearDate() }).ToList();
|
||
m.value = data.weight;
|
||
m.lastvalue = m.value - levelresult.weight;
|
||
}
|
||
info.Add(m);
|
||
});
|
||
return info;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取用户个人资料
|
||
/// </summary>
|
||
/// <param name="familyid">家庭成员ID</param>
|
||
/// <param name="devtype">设备类型</param>
|
||
/// <returns></returns>
|
||
public async Task<ResultInfo> GetUserInfoAsync(int familyid = 0, int devtype = 0)
|
||
{
|
||
var user = await dbClient.Queryable<YB_RegUser>().Where(x => x.Id == authInfo.UserId).FirstAsync();
|
||
YB_Family family = new YB_Family();
|
||
if (familyid > 0)
|
||
{
|
||
family = await dbClient.Queryable<YB_Family>().Where(x => x.Id == familyid && x.UserId == user.Id && x.Type == 1 && x.Status != -1).FirstAsync();
|
||
}
|
||
//试着获取一个最新的
|
||
if (family == null || family.Id <= 0)
|
||
{
|
||
family = await dbClient.Queryable<YB_Family>().Where(x => x.UserId == user.Id && x.Status != -1 && x.Type == 1).OrderBy(x => x.LastHeartTime, OrderByType.Desc).FirstAsync();
|
||
}
|
||
var target = await dbClient.Queryable<YB_FamilyTarget>().FirstAsync(x => x.familyid == family.Id);
|
||
decimal standweight = _bodyFatHelperService.standweight(family.Height.ToInt(), family.Sex).ToDecimal(2);
|
||
YB_FamilyData familydata = null;
|
||
if (devtype > 0)
|
||
{
|
||
familydata = await dbClient.Queryable<YB_FamilyRealData>()
|
||
.Where(x => x.FamilyId == family.Id && x.DevType == devtype)
|
||
.Select(x => new YB_FamilyData
|
||
{
|
||
FirstResultTime = x.FirstResultTime,
|
||
TotalCount = x.TotalCount,
|
||
FirstWeight = x.FirstWeight,
|
||
LastWeight = x.LastWeight,
|
||
LastTimeHeight = x.LastTimeHeight
|
||
})
|
||
.FirstAsync()
|
||
;
|
||
}
|
||
else
|
||
{
|
||
familydata = await dbClient.Queryable<YB_FamilyData>().FirstAsync(x => x.FamilyId == family.Id);
|
||
}
|
||
|
||
int day = 0;
|
||
if (familydata != null && familydata.FirstResultTime.HasValue)
|
||
{
|
||
day = (DateTime.Now.Date - familydata.FirstResultTime.Value.Date).TotalDays.ToInt();
|
||
}
|
||
var data = new UserInfoModel
|
||
{
|
||
headimg = !string.IsNullOrEmpty(family.HeadImg) ? family.HeadImg : _familyService.HeadImg(family.Sex, family.Type),
|
||
sex = family.Sex,
|
||
nickname = family.Name,
|
||
isbindphone = string.IsNullOrEmpty(user.Headimg) ? false : true,
|
||
age = family.Age,
|
||
familyid = family.Id,
|
||
height = family.Height,
|
||
targetweight = target != null ? target.weight : 0,
|
||
targettime = target != null ? target.time.ToYearDate() : "-- --",
|
||
weight = family.Weight,
|
||
lasthearttime = family.LastHeartTime.HasValue ? family.LastHeartTime.Value.ToYearDate() : "-- --",
|
||
Birthday = family.Birthday.ToString("yyyy-MM-dd"),
|
||
Cnt = familydata != null ? familydata.TotalCount : 0,
|
||
FirstWeight = familydata != null ? familydata.FirstWeight : 0,
|
||
TotalWeight = familydata != null ? (familydata.LastWeight == 0?0:(familydata.FirstWeight - familydata.LastWeight)) : 0,
|
||
LastWeight = familydata != null ? familydata.LastTimeWeight : 0,
|
||
StandWeight = standweight < 0 ? 0 : standweight,
|
||
Day = day,
|
||
FirstResultTime = familydata !=null?familydata.FirstResultTime:DateTime.Now
|
||
};
|
||
return new ResultInfo(ResultState.SUCCESS, "success", data);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 提交意见
|
||
/// </summary>
|
||
/// <param name="model"></param>
|
||
/// <returns></returns>
|
||
public async Task<ResultInfo> SubmitAdviceAsync(YB_Advice model)
|
||
{
|
||
if (!Validate.IsValidMobile(model.Phone))
|
||
{
|
||
return new ResultInfo(ResultState.FAIL, "手机号格式不正确");
|
||
}
|
||
if (string.IsNullOrEmpty(model.Content))
|
||
{
|
||
return new ResultInfo(ResultState.SUCCESS, "内容不可为空");
|
||
}
|
||
if (model.Content.Length > 500)
|
||
{
|
||
return new ResultInfo(ResultState.FAIL, "内容不可超过500字");
|
||
}
|
||
model.CreateTime = DateTime.Now;
|
||
await dbClient.Insertable<YB_Advice>(model).ExecuteCommandAsync();
|
||
return new ResultInfo(ResultState.SUCCESS, "感谢您的反馈");
|
||
}
|
||
|
||
/// <summary>
|
||
/// 解密微信运动
|
||
/// </summary>
|
||
/// <param name="sessionId"></param>
|
||
/// <param name="encryptedData"></param>
|
||
/// <param name="iv"></param>
|
||
/// <returns></returns>
|
||
public async Task<WXRunListModel> DecodeWxRunBySessionIdAsync(string sessionId, string encryptedData, string iv)
|
||
{
|
||
var sessionBag = await SessionContainer.GetSessionAsync(sessionId);
|
||
if (sessionBag == null)
|
||
{
|
||
return null;
|
||
}
|
||
var rundata = Senparc.Weixin.WxOpen.Helpers.EncryptHelper.DecryptRunData(sessionId, encryptedData, iv);
|
||
if (rundata != null && rundata.stepInfoList.Count > 0)
|
||
{
|
||
//第一次保存30天的,第二次就更新当天的。
|
||
var list = new List<YB_WXRun>();
|
||
YB_WXRun step = null;
|
||
long topstep = 0;
|
||
long topsteptime = 0;
|
||
bool ischange = false;
|
||
var reldata = await dbClient.Queryable<YB_UserRealData>().Where(x => x.UserId == authInfo.UserId).FirstAsync();
|
||
if (reldata != null)
|
||
{
|
||
topstep = reldata.TopStep;
|
||
topsteptime = reldata.TopStepTime;
|
||
}
|
||
rundata.stepInfoList.ForEach(x =>
|
||
{
|
||
var data = new YB_WXRun
|
||
{
|
||
Step = x.step,
|
||
CreateTime = x.timestamp.ToDatetimeFromTimeStamp(),
|
||
TimeStamp = x.timestamp,
|
||
UserId = authInfo.UserId
|
||
};
|
||
list.Add(data);
|
||
if (data.CreateTime.Date.Equals(DateTime.Now.Date))
|
||
{
|
||
step = data;
|
||
}
|
||
if (data.Step > topstep)
|
||
{
|
||
topstep = data.Step;
|
||
topsteptime = data.TimeStamp;
|
||
ischange = true;
|
||
}
|
||
});
|
||
var olddata = await dbClient.Queryable<YB_WXRun>().Where(x => SqlFunc.DateIsSame(x.CreateTime, step.CreateTime, DateType.Day) && x.UserId == authInfo.UserId).FirstAsync();
|
||
if (olddata != null)
|
||
{
|
||
await dbClient.Updateable<YB_WXRun>()
|
||
.SetColumns(x => new YB_WXRun
|
||
{
|
||
Step = step.Step,
|
||
CreateTime = step.CreateTime,
|
||
TimeStamp = step.TimeStamp
|
||
})
|
||
.Where(x => x.Id == olddata.Id)
|
||
.ExecuteCommandAsync();
|
||
}
|
||
else
|
||
{
|
||
if (await dbClient.Queryable<YB_WXRun>().AnyAsync(x => x.UserId == authInfo.UserId))
|
||
{
|
||
await dbClient.Insertable<YB_WXRun>(step).ExecuteCommandAsync();
|
||
}
|
||
else
|
||
{
|
||
await dbClient.Insertable<YB_WXRun>(list).ExecuteCommandAsync();
|
||
}
|
||
}
|
||
if (ischange)
|
||
{
|
||
await dbClient.Updateable<YB_UserRealData>().SetColumns(x => new YB_UserRealData
|
||
{
|
||
TopStep = topstep,
|
||
TopStepTime = topsteptime
|
||
}).Where(x => x.UserId == authInfo.UserId).ExecuteCommandAsync();
|
||
}
|
||
var returndata = new WXRunListModel
|
||
{
|
||
stepInfoList = list.OrderByDescending(x => x.TimeStamp)
|
||
.Take(7)
|
||
.Select(x => new WXRunItemModel
|
||
{
|
||
createtime = x.CreateTime.ToYearDate(),
|
||
Step = x.Step
|
||
})
|
||
.ToList(),
|
||
TodayStep = step.Step,
|
||
TopStep = topstep,
|
||
TopStepTime = topsteptime,
|
||
TopStepDateTime = topsteptime.ToDatetimeFromTimeStamp().ToYearDate()
|
||
};
|
||
returndata.TotalStep = returndata.stepInfoList.Sum(x => x.Step);
|
||
return returndata;
|
||
}
|
||
return null;
|
||
}
|
||
/// <summary>
|
||
/// 获取八电极测量数据
|
||
/// </summary>
|
||
/// <param name="model"></param>
|
||
/// <returns></returns>
|
||
public async Task<ResultInfo> GetBodyMeasureInfoAsync(UserBodyMeasureInfoModel model)
|
||
{
|
||
//获取此家庭成员的体重信息
|
||
var family = await dbClient.Queryable<YB_Family>().Where(x => x.Id == model.familyid).FirstAsync();
|
||
if (family == null)
|
||
{
|
||
return new ResultInfo(ResultState.FAIL, "家庭成员未找到");
|
||
}
|
||
int age = model.birthday.ToAge();
|
||
if (age > 100)
|
||
{
|
||
return new ResultInfo(ResultState.FAIL, "年龄过大");
|
||
}
|
||
YB_nResult result = null;
|
||
Guid fansid = Guid.Empty;
|
||
int isfirst = 0;//认领状态,0-未认领,1-已认领
|
||
if (!string.IsNullOrEmpty(model.fansid) && Guid.TryParse(model.fansid, out fansid))
|
||
{
|
||
//更新关联用户
|
||
await dbClient.Updateable<YB_RegUser>().SetColumns(x => new YB_RegUser
|
||
{
|
||
FansId = fansid
|
||
}).Where(x => x.Id == authInfo.UserId).ExecuteCommandAsync();
|
||
|
||
//更新最新的记录为当前用户
|
||
var lastresult = await dbClient.Queryable<YB_nUserResult>()
|
||
.Where(x => x.FansId == fansid && x.DevType == 2)
|
||
.OrderBy(x => x.CreateTime, OrderByType.Desc)
|
||
.FirstAsync();
|
||
if (lastresult != null)
|
||
{
|
||
result = await dbClient.Queryable<YB_nResult>().FirstAsync(x => x.Id == lastresult.Id);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var userresult = await dbClient.Queryable<YB_nUserResult>().Where(x => x.DevType == 2 && x.UserId == authInfo.UserId)
|
||
.OrderBy(x => x.CreateTime, OrderByType.Desc)
|
||
.FirstAsync();
|
||
if (userresult != null)
|
||
{
|
||
result = await dbClient.Queryable<YB_nResult>().FirstAsync(x => x.Id == userresult.Id);
|
||
isfirst = 1;
|
||
}
|
||
}
|
||
decimal height = model.height;
|
||
//更新家庭成员信息
|
||
//如果未认领
|
||
if (isfirst == 0 && result != null)
|
||
{
|
||
height = result.Height;
|
||
await dbClient.Updateable<YB_Family>().SetColumns(x => new YB_Family
|
||
{
|
||
Height = height,
|
||
Age = age,
|
||
Sex = model.sex,
|
||
Birthday = model.birthday,
|
||
LastHeartTime = result.CreateTime,
|
||
Weight = result.Weight
|
||
}).Where(x => x.Id == model.familyid).ExecuteCommandAsync();
|
||
//更新家庭成员数据
|
||
var familydata = await dbClient.Queryable<YB_FamilyData>().FirstAsync(x => x.FamilyId == model.familyid);
|
||
if (familydata != null)
|
||
{
|
||
decimal lasttimeheight = familydata.LastHeight - height;
|
||
decimal lasttimeweight = familydata.LastWeight - result.Weight;
|
||
await dbClient.Updateable<YB_FamilyData>().SetColumns(x => new YB_FamilyData
|
||
{
|
||
LastWeight = result.Weight,
|
||
LastResultTime = result.CreateTime,
|
||
LastHeight = height,
|
||
LastTimeHeight = lasttimeheight,
|
||
LastTimeWeight = lasttimeweight,
|
||
TodayCount = x.TodayCount + 1,
|
||
TotalCount = x.TotalCount + 1
|
||
}).Where(x => x.FamilyId == model.familyid).ExecuteCommandAsync();
|
||
}
|
||
if (await dbClient.Queryable<YB_FamilyRealData>().AnyAsync(x => x.FamilyId == model.familyid && x.DevType == 2 && !SqlFunc.HasValue(x.FirstResultTime)))
|
||
{
|
||
await dbClient.Updateable<YB_FamilyRealData>().SetColumns(x => new YB_FamilyRealData
|
||
{
|
||
LastHeight = height,
|
||
LastResultTime = result.CreateTime,
|
||
LastTimeHeight = x.LastHeight - height,
|
||
LastTimeWeight = x.LastWeight - result.Weight,
|
||
TodayCount = x.TodayCount + 1,
|
||
TotalCount = x.TotalCount + 1,
|
||
LastWeight = result.Weight,
|
||
FirstResultTime = result.CreateTime,
|
||
FirstHeight = height,
|
||
FirstWeight = result.Weight
|
||
})
|
||
.Where(x => x.FamilyId == model.familyid && x.DevType == 2).ExecuteCommandAsync();
|
||
}
|
||
else if (await dbClient.Queryable<YB_FamilyRealData>().AnyAsync(x => x.FamilyId == model.familyid && x.DevType == 2))
|
||
{
|
||
await dbClient.Updateable<YB_FamilyRealData>().SetColumns(x => new YB_FamilyRealData
|
||
{
|
||
LastHeight = height,
|
||
LastResultTime = result.CreateTime,
|
||
LastTimeHeight = x.LastHeight - height,
|
||
LastTimeWeight = x.LastWeight - result.Weight,
|
||
TodayCount = x.TodayCount + 1,
|
||
TotalCount = x.TotalCount + 1,
|
||
LastWeight = result.Weight
|
||
})
|
||
.Where(x => x.FamilyId == model.familyid && x.DevType == 2).ExecuteCommandAsync();
|
||
}
|
||
else
|
||
{
|
||
var realdata = new YB_FamilyRealData
|
||
{
|
||
FamilyId = model.familyid,
|
||
FirstHeight = height,
|
||
FirstResultTime = result.CreateTime,
|
||
DevType = 2,
|
||
CreateTime = DateTime.Now,
|
||
FirstWeight = result.Weight,
|
||
Id = IDGen.NextID(),
|
||
LastHeight = height,
|
||
LastResultTime = result.CreateTime,
|
||
LastTimeHeight = 0,
|
||
LastTimeWeight = 0,
|
||
LastWeight = result.Weight,
|
||
TodayCount = 1,
|
||
TotalCount = 1,
|
||
UserId = family.UserId
|
||
};
|
||
await dbClient.Insertable(realdata).ExecuteCommandAsync();
|
||
}
|
||
//更新yb_nuserresult
|
||
await dbClient.Updateable<YB_nUserResult>().SetColumns(x => new YB_nUserResult
|
||
{
|
||
UserId = authInfo.UserId,
|
||
FamilyId = family.Id
|
||
}).Where(x => x.Id == result.Id).ExecuteCommandAsync();
|
||
}
|
||
else
|
||
{
|
||
await dbClient.Updateable<YB_Family>().SetColumns(x => new YB_Family
|
||
{
|
||
Height = height,
|
||
Age = age,
|
||
Sex = model.sex,
|
||
Birthday = model.birthday
|
||
}).Where(x => x.Id == model.familyid).ExecuteCommandAsync();
|
||
}
|
||
if (result == null)
|
||
{
|
||
return new ResultInfo(ResultState.NORESULT, "未找到测量数据,请重新测量");
|
||
}
|
||
var data = await _bodyFatHelperService.CalcBody120FatAsync(result.Weight, height, age, model.sex, result.LeftArmImp, result.RightArmImp, result.LeftLegImp, result.RightLegImp, result.Imp);
|
||
if (data == null)
|
||
{
|
||
return new ResultInfo(ResultState.NORESULT, "测量结果计算失败");
|
||
}
|
||
var leveljson = new MeasureLevelDto
|
||
{
|
||
bmiLevel = data.bmiLevel,
|
||
sfrLevel = data.sfrLevel,
|
||
SkeletalMuscleLevel = data.SkeletalMuscleLevel,
|
||
bodyageLevel = data.bodyageLevel,
|
||
bodylevel = data.bodylevel,
|
||
boneLevel = data.boneLevel,
|
||
fatLevel = data.fatLevel,
|
||
fat_rLevel = data.fat_rLevel,
|
||
fat_wLevel = data.fat_wLevel,
|
||
kcalLevel = data.kcalLevel,
|
||
muscleLevel = data.muscleLevel,
|
||
musulevalLevel = data.musulevalLevel,
|
||
proteinLevel = data.proteinLevel,
|
||
proteinvalLevel = data.proteinvalLevel,
|
||
visceralLevel = data.visceralLevel,
|
||
waterLevel = data.waterLevel
|
||
}.ToJson();
|
||
#region 更新测量结果
|
||
int month = model.birthday.ToMonth();
|
||
if (!await dbClient.Queryable<YB_nMeasureResult>().AnyAsync(x => x.Id == result.Id))
|
||
{
|
||
await dbClient.Insertable(new YB_nMeasureResult
|
||
{
|
||
Id = result.Id,
|
||
DevType = result.DevType,
|
||
Age = family.Age,
|
||
sfr = data.sfr,
|
||
Sex = family.Sex,
|
||
bmi = data.bmi,
|
||
body = data.bodylevel,
|
||
bodyage = data.bodyage,
|
||
bone = data.bone,
|
||
cmi = data.cmi,
|
||
createtime = DateTime.Now,
|
||
fatlevel = data.fatLevel,
|
||
fat_r = data.fat_r,
|
||
fat_w = data.fat_w,
|
||
Height = result.Height,
|
||
kcal = data.kcal,
|
||
lbm = data.lbm,
|
||
Month = month,
|
||
muscle = data.muscle,
|
||
muscleval = data.muscleval,
|
||
protein = data.protein,
|
||
proteinval = data.proteinval,
|
||
visceral = data.visceral,
|
||
water = data.water,
|
||
Weight = result.Weight,
|
||
BodyFat = data.bodyfatraterunk,
|
||
SfrVal = data.sfrval,
|
||
SkeletalMuscle = data.SkeletalMuscle,
|
||
BodyFatVal = data.bodyfatkgtrunk,
|
||
LeftFootFat = data.bodyfatrateleftleg,
|
||
BodyMuscle = data.muscleratetrunk,
|
||
BodyMuscleVal = data.musclekgtrunk,
|
||
IdealWeight = data.idealweight,
|
||
LeftFootFatVal = data.bodyfatkgleftleg,
|
||
LeftFootMuscle = data.musclerateleftleg,
|
||
LeftFootMuscleVal = data.musclekgleftleg,
|
||
LeftHandFat = data.bodyfatrateleftarm,
|
||
LeftHandFatVal = data.bodyfatkgleftarm,
|
||
LeftHandMuscle = data.musclerateleftarm,
|
||
LeftHandMuscleVal = data.musclekgleftarm,
|
||
RightFootFat = data.bodyfatraterightleg,
|
||
RightFootFatVal = data.bodyfatkgrightleg,
|
||
RightFootMuscle = data.muscleraterightleg,
|
||
RightFootMuscleVal = data.musclekgrightleg,
|
||
RightHandFat = data.bodyfatraterightarm,
|
||
RightHandFatVal = data.bodyfatkgrightarm,
|
||
RightHandMuscle = data.muscleraterightarm,
|
||
RightHandMuscleVal = data.musclekgrightarm
|
||
}).ExecuteCommandAsync();
|
||
}
|
||
else
|
||
{
|
||
//更新记录
|
||
await dbClient.Updateable<YB_nMeasureResult>().SetColumns(x => new YB_nMeasureResult
|
||
{
|
||
Age = family.Age,
|
||
sfr = data.sfr,
|
||
Sex = family.Sex,
|
||
bmi = data.bmi,
|
||
body = data.bodylevel,
|
||
bodyage = data.bodyage,
|
||
bone = data.bone,
|
||
cmi = data.cmi,
|
||
fatlevel = data.fatLevel,
|
||
fat_r = data.fat_r,
|
||
fat_w = data.fat_w,
|
||
Height = height,
|
||
kcal = data.kcal,
|
||
lbm = data.lbm,
|
||
Month = month,
|
||
muscle = data.muscle,
|
||
muscleval = data.muscleval,
|
||
protein = data.protein,
|
||
proteinval = data.proteinval,
|
||
visceral = data.visceral,
|
||
water = data.water,
|
||
BodyFat = data.bodyfatraterunk,
|
||
SfrVal = data.sfrval,
|
||
SkeletalMuscle = data.SkeletalMuscle,
|
||
BodyFatVal = data.bodyfatkgtrunk,
|
||
LeftFootFat = data.bodyfatrateleftleg,
|
||
BodyMuscle = data.muscleratetrunk,
|
||
BodyMuscleVal = data.musclekgtrunk,
|
||
IdealWeight = data.idealweight,
|
||
LeftFootFatVal = data.bodyfatkgleftleg,
|
||
LeftFootMuscle = data.musclerateleftleg,
|
||
LeftFootMuscleVal = data.musclekgleftleg,
|
||
LeftHandFat = data.bodyfatrateleftarm,
|
||
LeftHandFatVal = data.bodyfatkgleftarm,
|
||
LeftHandMuscle = data.musclerateleftarm,
|
||
LeftHandMuscleVal = data.musclekgleftarm,
|
||
RightFootFat = data.bodyfatraterightleg,
|
||
RightFootFatVal = data.bodyfatkgrightleg,
|
||
RightFootMuscle = data.muscleraterightleg,
|
||
RightFootMuscleVal = data.musclekgrightleg,
|
||
RightHandFat = data.bodyfatraterightarm,
|
||
RightHandFatVal = data.bodyfatkgrightarm,
|
||
RightHandMuscle = data.muscleraterightarm,
|
||
RightHandMuscleVal = data.musclekgrightarm
|
||
}).Where(x => x.Id == result.Id).ExecuteCommandAsync();
|
||
}
|
||
if (!await dbClient.Queryable<YB_nBodyMeasure>().AnyAsync(x => x.Id == result.Id))
|
||
{
|
||
await dbClient.Insertable(new YB_nBodyMeasure
|
||
{
|
||
Id = result.Id,
|
||
LevelJson = leveljson
|
||
}).ExecuteCommandAsync();
|
||
}
|
||
else
|
||
{
|
||
await dbClient.Updateable<YB_nBodyMeasure>().SetColumns(x => new YB_nBodyMeasure
|
||
{
|
||
LevelJson = leveljson
|
||
}).Where(x => x.Id == result.Id).ExecuteCommandAsync();
|
||
}
|
||
#endregion
|
||
return new ResultInfo(ResultState.SUCCESS, "success", data);
|
||
}
|
||
/// <summary>
|
||
/// 获取趋势信息
|
||
/// </summary>
|
||
/// <param name="bodyQueryTrandDto"></param>
|
||
/// <returns></returns>
|
||
public async Task<ResultInfo> GetTrendListAsync(BodyQueryTrandDto bodyQueryTrandDto)
|
||
{
|
||
if (!bodyQueryTrandDto.starttime.HasValue)
|
||
{
|
||
bodyQueryTrandDto.starttime = DateTime.Now.AddDays(-7).Date;
|
||
}
|
||
if (!bodyQueryTrandDto.endtime.HasValue)
|
||
{
|
||
bodyQueryTrandDto.endtime = DateTime.Now.AddDays(1).Date;
|
||
}
|
||
else
|
||
{
|
||
bodyQueryTrandDto.endtime = bodyQueryTrandDto.endtime.Value.AddDays(1).Date;
|
||
}
|
||
//获取每项的历史值
|
||
var table = await dbClient.Ado.UseStoredProcedure().GetDataTableAsync("proc_getmeasureitem_page", new
|
||
{
|
||
familyid = bodyQueryTrandDto.familyid,
|
||
type = bodyQueryTrandDto.DevType,
|
||
starttime = bodyQueryTrandDto.starttime.Value,
|
||
endtime = bodyQueryTrandDto.endtime.Value,
|
||
stype = 1, //按次
|
||
nopage=0 //不分页
|
||
});
|
||
if (table == null)
|
||
{
|
||
return new ResultInfo(ResultState.FAIL, "未找到测量记录");
|
||
}
|
||
List<TrandS2CDto> list = new List<TrandS2CDto>();
|
||
foreach (DataRow row in table.Rows)
|
||
{
|
||
list.Add(new TrandS2CDto
|
||
{
|
||
id = row["resultid"].ToString(),
|
||
bmi = row["bmi"].ToDecimal(),
|
||
createtime = row["timestamp"].ToString().ToYearDate(),
|
||
fat_r = row["fat_r"].ToDecimal(),
|
||
muscle = row["muscle"].ToDecimal(),
|
||
weight = row["weight"].ToDecimal(),
|
||
time = row["timestamp"].ToDate()
|
||
});
|
||
}
|
||
return new ResultInfo(ResultState.SUCCESS, "success", list);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取八电极趋势信息
|
||
/// </summary>
|
||
/// <param name="bodyQueryTrandDto"></param>
|
||
/// <returns></returns>
|
||
public async Task<ResultInfo> GetBodyTrendListAsync(BodyQueryTrandDto bodyQueryTrandDto)
|
||
{
|
||
if (!bodyQueryTrandDto.starttime.HasValue)
|
||
{
|
||
bodyQueryTrandDto.starttime = DateTime.Now.AddDays(-7).Date;
|
||
}
|
||
if (!bodyQueryTrandDto.endtime.HasValue)
|
||
{
|
||
bodyQueryTrandDto.endtime = DateTime.Now.AddDays(1).Date;
|
||
}
|
||
else
|
||
{
|
||
bodyQueryTrandDto.endtime = bodyQueryTrandDto.endtime.Value.AddDays(1).Date;
|
||
}
|
||
//获取每项的历史值
|
||
var table = await dbClient.Ado.UseStoredProcedure().GetDataTableAsync("proc_getmeasureitem_page", new
|
||
{
|
||
familyid = bodyQueryTrandDto.familyid,
|
||
type = 2,
|
||
starttime = bodyQueryTrandDto.starttime.Value,
|
||
endtime = bodyQueryTrandDto.endtime.Value
|
||
});
|
||
if (table == null)
|
||
{
|
||
return new ResultInfo(ResultState.FAIL, "未找到测量记录");
|
||
}
|
||
List<BodyTrandDto> list = new List<BodyTrandDto>();
|
||
foreach (DataRow row in table.Rows)
|
||
{
|
||
list.Add(new BodyTrandDto
|
||
{
|
||
bmi = row["bmi"].ToDecimal(),
|
||
createtime = row["createtime"].ToString().ToYearDate(),
|
||
fat_r = row["fat_r"].ToDecimal(),
|
||
height = row["height"].ToDecimal(),
|
||
muscle = row["muscle"].ToDecimal(),
|
||
weight = row["weight"].ToDecimal()
|
||
});
|
||
}
|
||
return new ResultInfo(ResultState.SUCCESS, "success", list);
|
||
}
|
||
/// <summary>
|
||
/// 检查用户是否存在
|
||
/// </summary>
|
||
/// <param name="userid"></param>
|
||
/// <returns></returns>
|
||
public async Task<bool> IsExistUserAsync(int userid)
|
||
{
|
||
return await dbClient.Queryable<YB_RegUser>().AnyAsync(x => x.Id == userid && x.Status == 1);
|
||
}
|
||
/// <summary>
|
||
/// 设备激活
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public async Task<ResultInfo> ActiveAsync(string sn, string code)
|
||
{
|
||
//记录日志
|
||
if (code.ToLower().StartsWith("http"))
|
||
{
|
||
var arr = code.Split('?');
|
||
if (arr.Length != 2)
|
||
{
|
||
return new ResultInfo(ResultState.FAIL, "请扫描产品背后二维码");
|
||
}
|
||
arr = arr[1].Split('=');
|
||
if (arr.Length != 2)
|
||
{
|
||
return new ResultInfo(ResultState.FAIL, "请扫描产品背后二维码");
|
||
}
|
||
code = arr[1];
|
||
}
|
||
if (sn.ToLower().StartsWith("http://ybapi.ybhdmob.com/body/get"))
|
||
{
|
||
var arr = sn.Split('&');
|
||
if (arr.Length != 3)
|
||
{
|
||
return new ResultInfo(ResultState.FAIL, "请扫码测量二维码");
|
||
}
|
||
var newarr = arr[1].Split('=');
|
||
if (newarr.Length != 2)
|
||
{
|
||
return new ResultInfo(ResultState.FAIL, "请扫码测量二维码");
|
||
}
|
||
sn = newarr[1];
|
||
}
|
||
//检查是否存在发货记录
|
||
var productdev = await dbClient.Queryable<YB_OutProductDev>().Where(x => x.DeviceCode == code).FirstAsync();
|
||
if (productdev == null)
|
||
{
|
||
return new ResultInfo(ResultState.FAIL, "未找到出货记录,请联系客服人员");
|
||
}
|
||
var product = await dbClient.Queryable<YB_OutProduct>().FirstAsync(x => x.Id == productdev.OrderId);
|
||
if (product == null)
|
||
{
|
||
return new ResultInfo(ResultState.FAIL, "未找到出货记录,请联系客服人员");
|
||
}
|
||
//检查此sn是否已存在,如果不存在则进行注册,否则继续下一步
|
||
var equ = await dbClient.Queryable<YB_Device>().FirstAsync(x => x.FacCode == code);
|
||
if (equ == null)
|
||
{
|
||
return new ResultInfo(ResultState.FAIL, "设备未找到,请联系客服人员");
|
||
}
|
||
//检查此设备是否已激活
|
||
if (equ.Status == (int)DeviceStatus.Run)
|
||
{
|
||
return new ResultInfo(ResultState.FAIL, "设备已运行,重复激活");
|
||
}
|
||
if (equ.Status == (int)DeviceStatus.Stop)
|
||
{
|
||
return new ResultInfo(ResultState.FAIL, "设备已停止运行");
|
||
}
|
||
//检查此sn是否已存在
|
||
if (await dbClient.Queryable<YB_Device>().AnyAsync(x => x.Ecode == sn && x.FacCode != code))
|
||
{
|
||
return new ResultInfo(ResultState.FAIL, "设备编号匹配失败");
|
||
}
|
||
//激活设备
|
||
await dbClient.Updateable<YB_Device>().SetColumns(x => new YB_Device
|
||
{
|
||
ActiveTime = DateTime.Now,
|
||
Status = (int)DeviceStatus.Run,
|
||
BusinessId = product.BusinessId,
|
||
Ecode = sn
|
||
}).Where(x => x.FacCode == code).ExecuteCommandAsync();
|
||
|
||
//记录分配记录
|
||
var allocdata = new YB_DeviceAlloc
|
||
{
|
||
Id = IDGen.NextID(),
|
||
CreateTime = DateTime.Now,
|
||
EquId = equ.Id,
|
||
FromBusinessId = product.BusinessId,
|
||
ToBusinessId = 0,
|
||
Type = (int)DeviceAllocType.ACTIVE
|
||
};
|
||
await dbClient.Insertable(allocdata).ExecuteCommandAsync();
|
||
//更新统计
|
||
int todaydevactivecnt = await dbClient.Queryable<YB_Device>().Where(x => x.BusinessId == product.BusinessId && SqlFunc.DateIsSame(x.LastHeartTime, DateTime.Now)).CountAsync();
|
||
int devcnt = await dbClient.Queryable<YB_Device>().Where(x => x.BusinessId == product.BusinessId).CountAsync();
|
||
int businesscnt = await dbClient.Queryable<YB_Business>().Where(x => x.ParentId == product.BusinessId).CountAsync();
|
||
if (!await dbClient.Queryable<YB_BusinessRealData>().AnyAsync(x => x.BusinessId == product.BusinessId))
|
||
{
|
||
await dbClient.Insertable<YB_BusinessRealData>(new YB_BusinessRealData
|
||
{
|
||
BusinessId = product.BusinessId,
|
||
Balance = 0,
|
||
BusinessCount = businesscnt,
|
||
CreateTime = DateTime.Now,
|
||
DevCount = devcnt,
|
||
TodayIncome = 0,
|
||
TodayResultCnt = 0,
|
||
TotalIncome = 0,
|
||
TotalResultCnt = 0,
|
||
TotalTxAmount = 0,
|
||
TodayDevCount = todaydevactivecnt,
|
||
TotalRealCnt = 0,
|
||
TodayRealCnt = 0
|
||
}).ExecuteCommandAsync();
|
||
}
|
||
else
|
||
{
|
||
await dbClient.Updateable<YB_BusinessRealData>().SetColumns(x => new YB_BusinessRealData
|
||
{
|
||
DevCount = devcnt,
|
||
TodayDevCount = todaydevactivecnt,
|
||
BusinessCount = businesscnt
|
||
}).Where(x => x.BusinessId == product.BusinessId).ExecuteCommandAsync();
|
||
}
|
||
return new ResultInfo(ResultState.SUCCESS, "设备激活成功");
|
||
}
|
||
/// <summary>
|
||
/// 退出登录
|
||
/// </summary>
|
||
/// <param name="sessionId"></param>
|
||
/// <returns></returns>
|
||
public async Task<ResultInfo> OutLogin(string sessionId)
|
||
{
|
||
var sessionBag = await SessionContainer.GetSessionAsync(sessionId);
|
||
if (sessionBag == null)
|
||
{
|
||
return new ResultInfo(ResultState.FAIL, "sessionId未找到");
|
||
}
|
||
await SessionContainer.RemoveFromCacheAsync(sessionBag.OpenId);
|
||
await dbClient.Deleteable<YB_UserWX>().Where(x => x.openid == sessionBag.OpenId).ExecuteCommandAsync();
|
||
return new ResultInfo(ResultState.SUCCESS, "退出登录成功");
|
||
}
|
||
/// <summary>
|
||
/// 获取用户使用过的设备类型列表
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public async Task<ResultInfo> GetDevTypeListAsync()
|
||
{
|
||
var list = await dbClient.Queryable<YB_UserEqu>()
|
||
.Where(x => x.UserId == authInfo.UserId)
|
||
.OrderBy(x => x.CreateTime, OrderByType.Desc)
|
||
.Select(x => x.DevType)
|
||
.ToListAsync();
|
||
var conflist = await dbClient
|
||
.Queryable<YB_DeviceTypeExt>()
|
||
.Where(x => list.Contains(x.Id) && x.Status == 1)
|
||
.ToListAsync();
|
||
var newlist = new List<YB_DeviceTypeExt>();
|
||
List<int> ids = new List<int>();
|
||
conflist.ForEach(x =>
|
||
{
|
||
if (!ids.Contains(x.Id) && !ids.Contains(x.RId))
|
||
{
|
||
newlist.Add(new YB_DeviceTypeExt
|
||
{
|
||
Name = x.Name,
|
||
HeadImg = x.HeadImg,
|
||
Id = x.Id
|
||
});
|
||
ids.Add(x.Id);
|
||
}
|
||
});
|
||
var returnlist = newlist.Adapt<List<UserDevTypeS2CDto>>();
|
||
return new ResultInfo(ResultState.SUCCESS, "success", returnlist);
|
||
}
|
||
/// <summary>
|
||
/// 添加设备类型
|
||
/// </summary>
|
||
/// <param name="devtype"></param>
|
||
/// <returns></returns>
|
||
public async Task<ResultInfo> AddDevTypeAsync(int devtype)
|
||
{
|
||
//更新合计数据并添加用户设备类型
|
||
await _capBus.PublishAsync("reguser.service.insertreguserdevtype", new RegUserDevTypeS2SDto
|
||
{
|
||
DevType = devtype,
|
||
UserId = authInfo.UserId
|
||
});
|
||
return new ResultInfo(ResultState.SUCCESS, "类型添加成功");
|
||
}
|
||
/// <summary>
|
||
/// 修改初始体重
|
||
/// </summary>
|
||
/// <param name="data"></param>
|
||
/// <returns></returns>
|
||
public async Task<ResultInfo> SubmitFirstWeight(UserFirstWeightC2SDto data)
|
||
{
|
||
List<int> devtypes = await _deviceTypeService.GetDevTypesAsync(data.DevType);
|
||
if (!await dbClient.Queryable<YB_FamilyRealData>().AnyAsync(x => x.FamilyId == data.FamilyId && x.DevType == data.DevType))
|
||
{
|
||
var familydata = await dbClient.Queryable<YB_FamilyData>().FirstAsync(x => x.FamilyId == data.FamilyId);
|
||
var insertdata = new YB_FamilyRealData
|
||
{
|
||
FirstHeight = familydata !=null?familydata.FirstHeight:0,
|
||
FirstResultTime = data.Time,
|
||
FirstWeight = data.Weight,
|
||
CreateTime = DateTime.Now,
|
||
DevType = data.DevType,
|
||
FamilyId = data.FamilyId,
|
||
Id = IDGen.NextID(),
|
||
LastHeight = familydata !=null?familydata.LastHeight:0,
|
||
LastResultTime = null,
|
||
LastTimeHeight = 0,
|
||
LastTimeWeight = 0,
|
||
LastWeight = 0,
|
||
TodayCount = 0,
|
||
TotalCount = 0,
|
||
UserId = authInfo.UserId
|
||
};
|
||
await dbClient.Insertable(insertdata).ExecuteCommandAsync();
|
||
}
|
||
else
|
||
{
|
||
await dbClient.Updateable<YB_FamilyRealData>().SetColumns(x => new YB_FamilyRealData
|
||
{
|
||
FirstResultTime = data.Time,
|
||
FirstWeight = data.Weight
|
||
}).Where(x => x.FamilyId == data.FamilyId && devtypes.Contains(x.DevType)).ExecuteCommandAsync();
|
||
}
|
||
return new ResultInfo(ResultState.SUCCESS, "初始体重设置成功");
|
||
}
|
||
}
|
||
}
|