MeiRiYiCheng_1_old/YBDevice.NApi/Application/UserInfo/UserService.cs

1353 lines
64 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 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, "初始体重设置成功");
}
}
}