using Assets.Scripts.Apis; using Assets.Scripts.Apis.Models; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Assets.Scenes.Ride.Scripts.Model { public class RecorderDataModel { //private readonly MapWorkoutService service = new MapWorkoutService(); public t_user CurrentUser { get; set; } /// /// 所属人ID /// public int BelongUserId { get { return 10688;//CurrentUser.Id; } } /// /// 记录是否完毕 /// public bool IsCompleted { get; set; } /// /// 是否需要计算排名 /// public bool IsNeedRanking { get; set; } /// /// 骑行记录索引(用于中断骑行,继续骑行) /// public int ContinueIndex { get; set; } /// /// 骑行状态 /// public CyclingStateEnum CyclingState { get; set; } /// /// 赛事Id /// public int Competitionid { get; set; } /// /// 当前已经骑行的距离(表示用户现在在的距离,并不是实际骑的距离) /// public double EndDistance { get; set; } /// /// 上次骑行的距离 /// public double PreDistance { get; set; } /// /// 继续骑行记录标志 /// public string ContinueMark { get; set; } /// /// 厂商Id /// public int ManufacturerId { get; set; } public int? AntModelId { get; set; } /// /// 骑行数据 /// public List RiderDatas = new List(); /// /// 当前路线 /// public Route CurrentRoute { get; set; } /// /// 骑行记录Id /// //public string RecordId { get; private set; } /// /// 设备号 /// public string DeviceNumber { get; set; } /// /// 当前给骑行台发送数据的模式 /// public SendDataMode SendDataMode { get; set; } /// /// 临时使用的坡度 /// public double SlopeGrade { get; set; } /// /// 临时使用的海拔 /// public double Elevation { get; set; } /// /// 当前路书开始的距离 /// public double CurrentRouteStartDistance { get; set; } public DateTime StartTime { get; set; } /// /// 是否已经保存成功 /// public bool Saved { get; set; } public int GlobalCyclingId { get; set; } /// /// 保存数据 /// /// /// public JsonResult SaveData(CyclingModel cyclingModel, SelectParamModel selectParam, string imageName = "") { if (RiderDatas.Count <= 0) { return new JsonResult { result = true }; } string newFileName = Guid.NewGuid().ToString(); int FTP = Helper.GetFtp(); double NP = Helper.GetNP(RiderDatas); //强度 double IF = NP / FTP; //训练量 double TSS = (RiderDatas.Count * NP * IF) / (FTP * 3600) * 100; var averagePower = Helper.AveragePower(RiderDatas); MapInterruptRecordApi service = new MapInterruptRecordApi(); //AntManufacturer manufacturer = service.GetAntManufacturer(ManufacturerId); var recordId = Guid.NewGuid().ToString(); var ticks = RiderDatas.Last().Ticks; var interruptRecord = new MapInterruptRecord { Id = recordId, RouteId = CurrentRoute.RouteInstance.Id, RouteName = CurrentRoute.RouteInstance.Name, TotalDistance = CurrentRoute.RouteInstance.Distance, UserId = 10688,//BelongUserId, RecordFileName = newFileName + ".txt", Ftp = FTP,//FTP设置 IF = Math.Round(IF, 2), Kj = RiderDatas.Sum(a => a._Power) / 1000,//消耗 Tss = Math.Round(TSS, 2), EndDistance = EndDistance, IsCompleted = IsCompleted, //TrainingTime = TimeHelper.FormatSeconds(RiderDatas.Last().Ticks),//训练时间 NormalizedPower = Math.Floor(NP),//标准化功率 AveragePower = averagePower,//平均功率 MaxPower = RiderDatas.Max(a => a._Power),//最大功率 WeightKg = Math.Round(averagePower / 65, 2), Weight = 65, //PubCommData.CurrentUser.Weight, BicycleWeight =7, //PubCommData.CurrentUser.BicycleWeight, ContinueMark = ContinueMark, ContinueIndex = ContinueIndex, IsDelete = false, MapCompetitionId = Competitionid, ManufacturerName = "TODO",//manufacturer == null ? "" : manufacturer.Name, DeviceNumber = DeviceNumber, IsRanking = IsNeedRanking, CurrentRouteStartDistance = CurrentRouteStartDistance, ManufacturerId = ManufacturerId, AntModelId = AntModelId, StartTime = StartTime, CreateTime = StartTime.AddSeconds(ticks), Ticks = ticks, Mode = cyclingModel.ToString(), //Param = Newtonsoft.Json.JsonConvert.SerializeObject(selectParam), //GlobalCyclingId = selectParam.GlobalCyclingId }; //var range = new MapSpeedRange().GetSpeedRange(RiderDatas, CurrentRoute.RouteInstance.Distance); interruptRecord.SpeedRange = null; //JsonConvert.SerializeObject(range); double process = Math.Round((EndDistance - interruptRecord.CurrentRouteStartDistance) / CurrentRoute.RouteInstance.Distance, 2); interruptRecord.Progress = process > 1 ? 1 : process; var cadences = RiderDatas.Where(a => a._Cadence.HasValue && a._Cadence.Value > 0); if (cadences.Any()) { interruptRecord.AverageCadence = Math.Round(cadences.Average(a => a._Cadence.GetValueOrDefault(0))); } interruptRecord.MaxCadence = Math.Round(RiderDatas.Max(a => a._Cadence.GetValueOrDefault(0))); interruptRecord.AverageHeartRate = Math.Round(RiderDatas.Average(a => a._HeartRate.GetValueOrDefault(0))); interruptRecord.MaxHeartRate = RiderDatas.Max(a => a._HeartRate.GetValueOrDefault(0)); //service.CreateRecordCyclingData(interruptRecord); var path = Helper.GetDataDire("MapWorkoutRecords"); var fname = path + "/" + newFileName + ".txt"; var files = new List(); using (var fs = new FileInfo(fname).OpenWrite()) { var stream = new StreamWriter(fs); stream.BaseStream.Seek(0, SeekOrigin.End); foreach (var item in RiderDatas) { stream.Write(item.Write() + "\r\n"); } stream.Flush(); stream.Close(); files.Add(fname); } #region 截图 if (!string.IsNullOrEmpty(imageName)) { files.Add(imageName); } #endregion var result = service.Add(interruptRecord, files); return new JsonResult { result = result.result, errMsg = result.errMsg, data = result.data }; } } }