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.Body.BodyFatHelper; using YBDevice.CommonService; using YBDevice.CommonService.DevTypeInfo; using YBDevice.Entity; namespace YBDevice.NApi.Application.UserInfo { /// /// 用户信息 /// public class UserService : BaseService, IUserService, ITransient { private readonly ISqlSugarRepository repository; private readonly SqlSugarClient dbClient; private readonly IFamilyService _familyService; private readonly IBodyFatHelperService _bodyFatHelperService; private readonly ICapPublisher _capBus; private readonly IDeviceTypeService _deviceTypeService; /// /// 构造 /// /// /// /// /// /// public UserService(ISqlSugarRepository sqlSugarRepository, IFamilyService familyServices, IBodyFatHelperService bodyFatHelperService, ICapPublisher capPublisher, IDeviceTypeService deviceTypeService) { repository = sqlSugarRepository; dbClient = repository.Context; _familyService = familyServices; _bodyFatHelperService = bodyFatHelperService; _capBus = capPublisher; _deviceTypeService = deviceTypeService; } /// /// 解密手机号 /// /// /// public async Task 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().SetColumns(x => new YB_RegUser { Phone = phone.purePhoneNumber }).Where(x => x.Id == authInfo.UserId).ExecuteCommandAsync(); return new ResultInfo(ResultState.SUCCESS, "手机号绑定成功"); } /// /// 获取用户测量数据 /// /// public async Task GetMeasureInfoAsync(UserMeasureInfoModel model) { //获取此家庭成员的体重信息 var family = await dbClient.Queryable().Where(x => x.Id == model.familyid).FirstAsync(); if (family == null) { return new ResultInfo(ResultState.FAIL, "家庭成员未找到"); } int age = model.birthday.ToAge(); //更新家庭成员信息 await dbClient.Updateable().SetColumns(x => new YB_Family { Height = model.height, Age = age, Sex = model.sex, Birthday = model.birthday, Type = _familyService.GetType(model.birthday) }).Where(x => x.Id == model.familyid).ExecuteCommandAsync(); var tempquery = dbClient.Queryable().Where(x => x.FamilyId == family.Id && x.Status == 1); //设备类型列表 List devtypes = await _deviceTypeService.GetDevTypesAsync(model.devtype); tempquery = tempquery.Where(x => devtypes.Contains(x.DevType)); if (!await tempquery.Clone().AnyAsync()) { return new ResultInfo(ResultState.NORESULT, "未找到测量数据"); } var familyrealdata = await dbClient.Queryable() .Where(x => x.FamilyId == model.familyid && x.DevType == model.devtype) .Select(x => new YB_FamilyRealData { LastHeight = x.LastHeight, LastResultHeightTime = x.LastResultHeightTime }) .FirstAsync() ; //如果此设备类型还未有记录 if (familyrealdata == null) { var otherdata = await dbClient.Queryable() .Where(x => x.FamilyId == model.familyid && devtypes.Contains(x.DevType)) .Select(x => new YB_FamilyRealData { LastHeight = x.LastHeight, LastResultHeightTime = x.LastResultHeightTime }) .FirstAsync() ; familyrealdata = new YB_FamilyRealData { DevType = model.devtype, CreateTime = DateTime.Now, FamilyId = model.familyid, FirstHeight = otherdata != null ? otherdata.FirstHeight : 0, FirstResultTime = otherdata != null ? otherdata.FirstResultTime : null, FirstWeight = otherdata != null ? otherdata.FirstWeight : 0, HalfYearHeight = otherdata != null ? otherdata.HalfYearHeight : 0, HalfYearHeightTime = otherdata != null ? otherdata.HalfYearHeightTime : null, LastHeight = otherdata != null ? otherdata.LastHeight : 0, LastResultHeightTime = otherdata != null ? otherdata.LastResultHeightTime : null, LastResultId = otherdata != null ? otherdata.LastResultId : null, LastResultTime = otherdata != null ? otherdata.LastResultTime : null, LastTimeHeight = otherdata != null ? otherdata.LastTimeHeight : 0, LastTimeWeight = otherdata != null ? otherdata.LastTimeWeight : 0, LastWeight = otherdata != null ? otherdata.LastWeight : 0, MonthHeight = otherdata != null ? otherdata.MonthHeight : 0, MonthWeight = otherdata != null ? otherdata.MonthWeight : 0, TodayCount = otherdata != null ? otherdata.TodayCount : 0, TotalCount = otherdata != null ? otherdata.TotalCount : 0, UserId = authInfo.UserId, YearHeight = otherdata != null ? otherdata.YearHeight : 0, YearHeightTime = otherdata != null ? otherdata.YearHeightTime : null, Id = IDGen.NextID() }; await dbClient.Insertable(familyrealdata).ExecuteCommandAsync(); } bool IsUpdateData = false;//是否更新数据 if (familyrealdata != null && familyrealdata.LastHeight != model.height) { IsUpdateData = true; } if (IsUpdateData) { //更新实时数据和儿童模式的曲线 await _capBus.PublishAsync("result.service.updateuserheightdata", new UpdateUserHeightDataS2SDto { familyid = model.familyid, DevType = model.devtype, Height = model.height, LastResultHeightTime = familyrealdata.LastResultHeightTime, LastHeight = familyrealdata.LastHeight, HalfYearHeight = familyrealdata.HalfYearHeight, YearHeight = familyrealdata.YearHeight }); } var userresult = await tempquery.Clone() .OrderBy(x => x.CreateTime, OrderByType.Desc) .FirstAsync(); var result = await dbClient.Queryable().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); if (IsUpdateData) { #region 更新测量结果 int month = model.birthday.ToMonth(); await dbClient.Updateable().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().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 = (GenderType)measureresult.Sex, IsCalc = model.IsCalc }; data = _bodyFatHelperService.CalcBodyFat(calcdto); if (familyrealdata == null) { DateTime nowtime = DateTime.Now; bool nowmonth = measureresult.createtime.Year == nowtime.Year && measureresult.createtime.Month == nowtime.Month; var insertdata = new YB_FamilyRealData { FamilyId = model.familyid, FirstHeight = measureresult.Height, FirstResultTime = measureresult.createtime, DevType = model.devtype, CreateTime = measureresult.createtime, FirstWeight = measureresult.Weight, Id = IDGen.NextID(), LastHeight = model.height, LastResultTime = measureresult.createtime, LastTimeHeight = 0, LastTimeWeight = 0, LastWeight = measureresult.Weight, TodayCount = measureresult.createtime.Date == nowtime.Date ? 1 : 0, TotalCount = measureresult.createtime.Date == nowtime.Date ? 1 : 0, UserId = family.UserId, MonthHeight = nowmonth ? model.height : 0, MonthWeight = nowmonth ? measureresult.Weight : 0, LastResultHeightTime = measureresult.createtime }; await dbClient.Insertable(insertdata).ExecuteCommandAsync(); } } 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(); } else { //BMI标准,最大值,最小值,标准范围 var listcnt = DataTableListHelper.ToList(dataset.Tables[0]); var listday = DataTableListHelper.ToList(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().Where(x => x.Id == lastresult.Id).FirstAsync(); if (mresult != null) { var res = await dbClient.Queryable() .Select(x => new YB_nResult { Imp = x.Imp }) .FirstAsync(x => x.Id == lastresult.Id); int imp = res != null ? res.Imp.ToInt() : 0; levelresult = _bodyFatHelperService.CalcBodyFat(mresult.Weight.ToDouble(), mresult.Height.ToDouble(), mresult.Age, imp, (GenderType)mresult.Sex); } } returndata.list = HisList(model.sex, listcnt, listday, age, data, levelresult, result.Weight); } return new ResultInfo(ResultState.SUCCESS, "success", returndata); } /// /// 历史记录分类 /// /// 性别,1-男,2-女 /// 按次列表 /// 按天列表 /// 年龄 /// 当前测量数据 /// 上次测量数据 /// 重量 /// private List HisList(GenderType sex, List listcnt, List listday, int age, UserMeasureModel data, UserMeasureModel levelresult, decimal weight) { List info = new List(); List mlist = new List { "bmi", "fat_r", "muscle", "water", "bone", "kcal", "fat_w", "visceral", "protein", "bodyage","sfr","sfrval","body", "muscleval","proteinval","lbm","fatlevel","weight"}; 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; m.Color = _bodyFatHelperService.GetLevelColor(data.bmiLevel); } 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; m.Color = _bodyFatHelperService.GetLevelColor(data.fat_rLevel); } 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; m.Color = _bodyFatHelperService.GetLevelColor(data.muscleLevel); } 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; m.Color = _bodyFatHelperService.GetLevelColor(data.waterLevel); } 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; m.Color = _bodyFatHelperService.GetLevelColor(data.boneLevel); } 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; m.Color = _bodyFatHelperService.GetLevelColor(data.kcalLevel); } 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; m.Color = _bodyFatHelperService.GetLevelColor(data.fat_rLevel); } 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; m.Color = _bodyFatHelperService.GetLevelColor(data.visceralLevel); } 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; m.Color = _bodyFatHelperService.GetLevelColor(data.proteinLevel); } 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; m.Color = _bodyFatHelperService.GetLevelColor(data.sfrLevel); } else if (x == "sfrval") { m.list = listcnt.Select(e => new MeasureHisItem { value = e.sfrval.ToString(), time = e.timestamp.ToYearDate() }).ToList(); m.daylist = listday.Select(e => new MeasureHisItem { value = e.sfrval.ToString(), time = e.timestamp.ToYearDate() }).ToList(); m.slist = _bodyFatHelperService.sfrval_value(sex, age, weight); m.value = data.sfrval; m.lastvalue = m.value - levelresult.sfrval; m.Color = _bodyFatHelperService.GetLevelColor(data.sfrLevel); } 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; m.Color = _bodyFatHelperService.GetLevelColor(data.muscleLevel); } 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; m.Color = _bodyFatHelperService.GetLevelColor(data.proteinvalLevel); } 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; } /// /// 历史记录分类 /// /// 性别,1-男,2-女 /// 年龄 /// 重量 /// 当前测量数据 /// public List HisList(GenderType sex, int age, decimal weight, UserMeasureModel data) { List listcnt = new List(); List listday = new List(); UserMeasureModel levelresult = new UserMeasureModel(); return HisList(sex, listcnt, listday, age, data, levelresult, weight); } /// /// 获取用户个人资料 /// /// 家庭成员ID /// 设备类型 /// public async Task GetUserInfoAsync(int familyid = 0, int devtype = 0) { var user = await dbClient.Queryable().Where(x => x.Id == authInfo.UserId).FirstAsync(); YB_Family family = new YB_Family(); if (familyid > 0) { family = await dbClient.Queryable().Where(x => x.Id == familyid && x.UserId == user.Id && x.Status != StatusType.Delete).FirstAsync(); } //试着获取一个最新的 if (family == null || family.Id <= 0) { //如果是H018则查找默认家庭成员 if (devtype == 2) { family = await dbClient.Queryable().Where(x => x.UserId == user.Id && x.IsSelf == 1).FirstAsync(); } else { family = await dbClient.Queryable().Where(x => x.UserId == user.Id && x.Status != StatusType.Delete).OrderBy(x => x.LastHeartTime, OrderByType.Desc).FirstAsync(); } } var target = await dbClient.Queryable().FirstAsync(x => x.familyid == family.Id); decimal standweight = _bodyFatHelperService.CalcStandWeight(family.Height, family.Sex); var familydata = await dbClient.Queryable() .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, LastHeight = x.LastHeight }) .FirstAsync() ; //如果未找到,则查询同类型的 if (familydata == null) { var devtypes = await _deviceTypeService.GetDevTypesAsync(devtype); familydata = await dbClient.Queryable() .Where(x => x.FamilyId == family.Id && devtypes.Contains(x.DevType)) .Select(x => new YB_FamilyData { FirstResultTime = x.FirstResultTime, TotalCount = x.TotalCount, FirstWeight = x.FirstWeight, LastWeight = x.LastWeight, LastTimeHeight = x.LastTimeHeight, LastHeight = x.LastHeight }) .FirstAsync() ; } int day = 0; if (familydata != null && familydata.FirstResultTime.HasValue) { day = (DateTime.Now.Date - familydata.FirstResultTime.Value.Date).TotalDays.ToInt(); } decimal height = (familydata != null && familydata.LastHeight > 0) ? familydata.LastHeight : family.Height; decimal weight = (familydata != null && familydata.LastWeight > 0) ? familydata.LastWeight.ToDecimal() : 0; var data = new UserInfoModel { headimg = !string.IsNullOrEmpty(family.HeadImg) ? family.HeadImg : DefaultService.HeadImg(family.Sex, family.Type), sex = family.Sex, nickname = family.Name, isbindphone = string.IsNullOrEmpty(user.Phone) ? false : true, age = family.Age, familyid = family.Id, height = height, targetweight = target != null ? target.weight : 0, targettime = target != null ? target.time.ToYearDate() : "-- --", weight = weight.ToDecimal(1), 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.ToDecimal(1) : 0, TotalWeight = familydata != null ? (familydata.LastWeight == 0 ? 0 : (familydata.FirstWeight - familydata.LastWeight).ToDecimal(1)) : 0, LastWeight = familydata != null ? familydata.LastTimeWeight.ToDecimal(1) : 0, StandWeight = standweight < 0 ? 0 : standweight.ToDecimal(1), Day = day, FirstResultTime = familydata != null ? familydata.FirstResultTime : null, Type = family.Type, BMI = _bodyFatHelperService.CalcBMi(height, weight), MAge = family.Birthday.TomAge() }; return new ResultInfo(ResultState.SUCCESS, "success", data); } /// /// 提交意见 /// /// /// public async Task 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(model).ExecuteCommandAsync(); return new ResultInfo(ResultState.SUCCESS, "感谢您的反馈"); } /// /// 解密微信运动 /// /// /// /// /// public async Task 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 step = null; long topstep = 0; long topsteptime = 0; bool ischange = false; var reldata = await dbClient.Queryable().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().Where(x => SqlFunc.DateIsSame(x.CreateTime, step.CreateTime, DateType.Day) && x.UserId == authInfo.UserId).FirstAsync(); if (olddata != null) { await dbClient.Updateable() .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().AnyAsync(x => x.UserId == authInfo.UserId)) { await dbClient.Insertable(step).ExecuteCommandAsync(); } else { await dbClient.Insertable(list).ExecuteCommandAsync(); } } if (ischange) { await dbClient.Updateable().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; } /// /// 获取八电极测量数据 /// /// /// public async Task GetBodyMeasureInfoAsync(UserBodyMeasureInfoModel model) { //获取此家庭成员的体重信息 var family = await dbClient.Queryable().Where(x => x.Id == model.familyid).FirstAsync(); if (family == null) { return new ResultInfo(ResultState.FAIL, "家庭成员未找到"); } int age = model.birthday.ToAge(); YB_nResult result = null; Guid fansid = Guid.Empty; int isfirst = 0;//认领状态,0-未认领,1-已认领 List devtypes = await _deviceTypeService.GetDevTypesAsync(model.devtype); if (!string.IsNullOrEmpty(model.fansid) && Guid.TryParse(model.fansid, out fansid)) { //更新关联用户 await dbClient.Updateable().SetColumns(x => new YB_RegUser { FansId = fansid }).Where(x => x.Id == authInfo.UserId).ExecuteCommandAsync(); //更新最新的记录为当前用户 var lastresult = await dbClient.Queryable() .Where(x => x.FansId == fansid && x.DevType == 2 && x.Status == 1) .OrderBy(x => x.CreateTime, OrderByType.Desc) .FirstAsync(); if (lastresult != null) { result = await dbClient.Queryable().FirstAsync(x => x.Id == lastresult.Id); } } else if(model.familyid > 0) { var userresult = await dbClient.Queryable().Where(x => devtypes.Contains(x.DevType) && x.FamilyId == model.familyid && x.Status == 1) .OrderBy(x => x.CreateTime, OrderByType.Desc) .FirstAsync(); if (userresult != null) { result = await dbClient.Queryable().FirstAsync(x => x.Id == userresult.Id); isfirst = 1; } } else { var userresult = await dbClient.Queryable().Where(x => devtypes.Contains(x.DevType) && x.UserId == authInfo.UserId && x.Status == 1) .OrderBy(x => x.CreateTime, OrderByType.Desc) .FirstAsync(); if (userresult != null) { result = await dbClient.Queryable().FirstAsync(x => x.Id == userresult.Id); isfirst = 1; } } decimal height = model.height; //更新家庭成员信息 //如果未认领 if (isfirst == 0 && result != null) { height = result.Height; await dbClient.Updateable().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().FirstAsync(x => x.FamilyId == model.familyid); if (familydata != null) { decimal lasttimeheight = familydata.LastHeight - height; decimal lasttimeweight = familydata.LastWeight - result.Weight; await dbClient.Updateable().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().AnyAsync(x => x.FamilyId == model.familyid && x.DevType == model.devtype && !SqlFunc.HasValue(x.FirstResultTime))) { await dbClient.Updateable().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 && devtypes.Contains(x.DevType)).ExecuteCommandAsync(); } else if (await dbClient.Queryable().AnyAsync(x => x.FamilyId == model.familyid && x.DevType == model.devtype)) { await dbClient.Updateable().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 && devtypes.Contains(x.DevType)).ExecuteCommandAsync(); } else { var realdata = new YB_FamilyRealData { FamilyId = model.familyid, FirstHeight = height, FirstResultTime = result.CreateTime, DevType = model.devtype, 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 = authInfo.UserId }; await dbClient.Insertable(realdata).ExecuteCommandAsync(); } //更新yb_nuserresult await dbClient.Updateable().SetColumns(x => new YB_nUserResult { UserId = authInfo.UserId, FamilyId = model.familyid }).Where(x => x.Id == result.Id).ExecuteCommandAsync(); } else { await dbClient.Updateable().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, "测量结果计算失败"); } data.Id = result.Id; 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().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.body, 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().SetColumns(x => new YB_nMeasureResult { Age = family.Age, sfr = data.sfr, Sex = family.Sex, bmi = data.bmi, body = data.body, 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(); //更新实时数据和儿童模式的曲线 var familyrealdata = await dbClient.Queryable().FirstAsync(x => x.FamilyId == model.familyid && x.DevType == model.devtype); if (familyrealdata != null && familyrealdata.LastHeight != height) { await _capBus.PublishAsync("result.service.updateuserheightdata", new UpdateUserHeightDataS2SDto { familyid = model.familyid, DevType = model.devtype, Height = height, LastResultHeightTime = familyrealdata.LastResultHeightTime, LastHeight = familyrealdata.LastHeight, HalfYearHeight = familyrealdata.HalfYearHeight, YearHeight = familyrealdata.YearHeight }); } } if (!await dbClient.Queryable().AnyAsync(x => x.Id == result.Id)) { await dbClient.Insertable(new YB_nBodyMeasure { Id = result.Id, LevelJson = leveljson }).ExecuteCommandAsync(); } else { await dbClient.Updateable().SetColumns(x => new YB_nBodyMeasure { LevelJson = leveljson }).Where(x => x.Id == result.Id).ExecuteCommandAsync(); } #endregion var returndata = data.Adapt(); var currentdata = data.Adapt(); var list = HisList(model.sex, age, result.Weight, currentdata); if (list != null) { list.Add(new MeasureInfoItem { name = "skeletalmuscle", slist = _bodyFatHelperService.skeletalmusclekg_val(model.sex, age, returndata.SkeletalMuscle), Color = _bodyFatHelperService.GetLevelColor(returndata.SkeletalMuscleLevel) }); } returndata.list = list; return new ResultInfo(ResultState.SUCCESS, "success", returndata); } /// /// 获取趋势信息 /// /// /// public async Task 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 list = new List(); foreach (DataRow row in table.Rows) { list.Add(new TrandS2CDto { id = row["resultid"].ToString(), bmi = row["bmi"].ToDecimal(1), createtime = row["timestamp"].ToString().ToYearDate(), fat_r = row["fat_r"].ToDecimal(1), muscle = row["muscle"].ToDecimal(1), weight = row["weight"].ToDecimal(1), time = row["timestamp"].ToDate(), height = row["height"].ToDecimal() }); } return new ResultInfo(ResultState.SUCCESS, "success", list); } /// /// 获取八电极趋势信息 /// /// /// public async Task GetBodyTrendListAsync(BodyQueryTrandDto bodyQueryTrandDto) { return await GetTrendListAsync(bodyQueryTrandDto); } /// /// 检查用户是否存在 /// /// /// public async Task IsExistUserAsync(int userid) { return await dbClient.Queryable().AnyAsync(x => x.Id == userid && x.Status == StatusType.Enabled); } /// /// 设备激活 /// /// public async Task ActiveAsync(string sn, string code) { if (string.IsNullOrEmpty(code)) { return new ResultInfo(ResultState.FAIL, "请先扫描产品码"); } sn = sn.ToStrNoEmpty(); code = code.ToStrNoEmpty(); //记录日志 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().Where(x => x.DeviceCode == code).FirstAsync(); if (productdev == null) { return new ResultInfo(ResultState.FAIL, "未找到出货记录,请联系客服人员"); } var product = await dbClient.Queryable().FirstAsync(x => x.Id == productdev.OrderId); if (product == null) { return new ResultInfo(ResultState.FAIL, "未找到出货记录,请联系客服人员"); } //检查此sn是否已存在,如果不存在则进行注册,否则继续下一步 var equ = await dbClient.Queryable().FirstAsync(x => x.FacCode == code); if (equ == null) { return new ResultInfo(ResultState.FAIL, "设备未找到,请联系客服人员"); } //检查此设备是否已激活 if (!string.IsNullOrEmpty(equ.Ecode) && equ.Status == DeviceStatus.Run) { return new ResultInfo(ResultState.FAIL, "设备已运行,重复激活"); } if (equ.Status == (int)DeviceStatus.Stop) { return new ResultInfo(ResultState.FAIL, "设备已停止运行"); } //检查此sn是否已存在 if (await dbClient.Queryable().AnyAsync(x => x.Ecode == sn && x.FacCode != code)) { return new ResultInfo(ResultState.FAIL, "设备编号匹配失败"); } //激活设备 await dbClient.Updateable().SetColumns(x => new YB_Device { ActiveTime = DateTime.Now, Status = 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 = DeviceAllocType.ACTIVE }; await dbClient.Insertable(allocdata).ExecuteCommandAsync(); //更新统计 int todaydevactivecnt = await dbClient.Queryable().Where(x => x.BusinessId == product.BusinessId && SqlFunc.DateIsSame(x.LastHeartTime, DateTime.Now)).CountAsync(); int devcnt = await dbClient.Queryable().Where(x => x.BusinessId == product.BusinessId).CountAsync(); int businesscnt = await dbClient.Queryable().Where(x => x.ParentId == product.BusinessId).CountAsync(); if (!await dbClient.Queryable().AnyAsync(x => x.BusinessId == product.BusinessId)) { await dbClient.Insertable(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().SetColumns(x => new YB_BusinessRealData { DevCount = devcnt, TodayDevCount = todaydevactivecnt, BusinessCount = businesscnt }).Where(x => x.BusinessId == product.BusinessId).ExecuteCommandAsync(); } return new ResultInfo(ResultState.SUCCESS, "设备激活成功"); } /// /// 退出登录 /// /// /// public async Task OutLogin(string sessionId) { var sessionBag = await SessionContainer.GetSessionAsync(sessionId); if (sessionBag == null) { return new ResultInfo(ResultState.FAIL, "sessionId未找到"); } //更新 await dbClient.Updateable().SetColumns(x => new YB_UserWX { IsOutLogin = 0 }).Where(x => x.openid == sessionBag.OpenId).ExecuteCommandAsync(); await SessionContainer.RemoveFromCacheAsync(sessionBag.OpenId); return new ResultInfo(ResultState.SUCCESS, "退出登录成功"); } /// /// 获取用户使用过的设备类型列表 /// /// 小程序appid /// public async Task GetDevTypeListAsync(string appid) { var newlist = new List(); var AppData = await dbClient.Queryable().Where(x => x.Status == StatusType.Enabled && x.AppId == appid).FirstAsync(); if (AppData != null) { var ids = AppData.DevType.Split(",").ToList(); var list = await dbClient.Queryable() .Where(x => x.UserId == authInfo.UserId) .OrderBy(x => x.CreateTime, OrderByType.Desc) .Select(x => x.DevType) .ToListAsync(); var types = await dbClient.Queryable().ToListAsync(); // var InIds = new List(); types.ForEach(x => { //List newids = x.Content.Split(",").ToList(); //bool IsExist = false; //for(var i = 0; i < InIds.Count; i++) //{ // if (newids.Contains(InIds[i])){ // IsExist = true; // break; // } //} if (ids.Contains($"{x.Code}") && list.Contains(x.Code) // && !IsExist ) { newlist.Add(new YB_DeviceTypeExt { Name = x.ExtName, HeadImg = x.HeadImg, Id = x.Code }); // InIds.Add($"{x.Code}"); } }); } var returnlist = newlist.Adapt>(); return new ResultInfo(ResultState.SUCCESS, "success", returnlist); } /// /// 添加设备类型 /// /// /// public async Task AddDevTypeAsync(int devtype) { //更新合计数据并添加用户设备类型 await _capBus.PublishAsync("reguser.service.insertreguserdevtype", new RegUserDevTypeS2SDto { DevType = devtype, UserId = authInfo.UserId }); return new ResultInfo(ResultState.SUCCESS, "类型添加成功"); } /// /// 修改初始体重 /// /// /// public async Task SubmitFirstWeight(UserFirstWeightC2SDto data) { List devtypes = await _deviceTypeService.GetDevTypesAsync(data.DevType); if (!await dbClient.Queryable().AnyAsync(x => x.FamilyId == data.FamilyId && x.DevType == data.DevType)) { var familydata = await dbClient.Queryable().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().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, "初始体重设置成功"); } } }