/// <summary> /// 签到 /// </summary> /// <param name="rows"></param> /// <param name="page"></param> /// <param name="longitude"></param> /// <param name="latitude"></param> /// <param name="websiteOwner"></param> /// <param name="total"></param> /// <returns></returns> public bool AddSignInLog(int autoId, string userId, double longitude, double latitude, string websiteOwner, out string errmsg) { errmsg = ""; StringBuilder sbSql = new StringBuilder(); sbSql.AppendFormat(" AutoID={0} and IsDelete=0 ", autoId); if (!string.IsNullOrWhiteSpace(websiteOwner)) { sbSql.AppendFormat(" and WebsiteOwner='{0}' ", websiteOwner); } SignInAddress signInAddress = Get <SignInAddress>(sbSql.ToString()); if (signInAddress == null) { errmsg = "签到地点未找到"; return(false); } signInAddress.Distance = GeolocationHelper.ComputeDistance(longitude, latitude , Convert.ToDouble(signInAddress.Longitude), Convert.ToDouble(signInAddress.Latitude)); SignInLog signInLog = new SignInLog(); signInLog.UserID = userId; signInLog.WebsiteOwner = websiteOwner; signInLog.IP = ZentCloud.Common.MySpider.GetClientIP(); signInLog.CreateDate = DateTime.Now; signInLog.Longitude = longitude.ToString(); signInLog.Latitude = latitude.ToString(); signInLog.AddressId = signInAddress.AutoID; signInLog.Address = signInAddress.Address; signInLog.Distance = signInAddress.Distance; string DistanceString = string.Empty; if (signInAddress.Distance > signInAddress.Range) { signInLog.Status = 0; signInLog.Remark = "签到失败,超出有效距离"; } else { signInLog.Status = 1; signInLog.Remark = "签到成功"; } if (!Add(signInLog)) { errmsg = "签到出错"; return(false); } errmsg = signInLog.Remark; return(signInLog.Status == 1); }
/// <summary> /// 智能签到 /// </summary> /// <param name="rows"></param> /// <param name="page"></param> /// <param name="longitude"></param> /// <param name="latitude"></param> /// <param name="websiteOwner"></param> /// <param name="total"></param> /// <returns></returns> public bool AddSignInLogAuto(string userId, double longitude, double latitude, string websiteOwner, out string errmsg) { errmsg = ""; StringBuilder sbSql = new StringBuilder(); sbSql.AppendFormat(" 1=1 "); if (!string.IsNullOrWhiteSpace(websiteOwner)) { sbSql.AppendFormat(" and WebsiteOwner='{0}' ", websiteOwner); } List <SignInAddress> list = GetList <SignInAddress>(sbSql.ToString()); if (list.Count == 0) { errmsg = "请设置签到地点"; return(false); } for (int i = 0; i < list.Count; i++) { list[i].Distance = GeolocationHelper.ComputeDistance(longitude, latitude , Convert.ToDouble(list[i].Longitude), Convert.ToDouble(list[i].Latitude)); } List <SignInAddress> tempList = list.Where(p => p.Distance <= p.Range).ToList(); SignInLog signInLog = new SignInLog(); SignInAddress nearestAddress = new SignInAddress(); signInLog.UserID = userId; signInLog.WebsiteOwner = websiteOwner; signInLog.IP = ZentCloud.Common.MySpider.GetClientIP(); signInLog.CreateDate = DateTime.Now; signInLog.Longitude = longitude.ToString(); signInLog.Latitude = latitude.ToString(); string distanceString = string.Empty; if (tempList.Count > 0) { nearestAddress = tempList.OrderBy(p => p.Distance).FirstOrDefault(); signInLog.AddressId = nearestAddress.AutoID; signInLog.Address = nearestAddress.Address; signInLog.Distance = nearestAddress.Distance; signInLog.Status = 1; distanceString = nearestAddress.Distance > 1000 ? (nearestAddress.Distance / 1000).ToString("f2") + "千米" : nearestAddress.Distance.ToString("f2") + "米"; signInLog.Remark = "签到成功,距离[" + nearestAddress.Address + "]" + distanceString; } else { nearestAddress = list.OrderBy(p => p.Distance).FirstOrDefault(); signInLog.AddressId = nearestAddress.AutoID; signInLog.Address = nearestAddress.Address; signInLog.Distance = nearestAddress.Distance; signInLog.Status = 0; distanceString = nearestAddress.Distance > 1000 ? (nearestAddress.Distance / 1000).ToString("f2") + "千米" : nearestAddress.Distance.ToString("f2") + "米"; double moreDistance = signInLog.Distance - nearestAddress.Range; string moreDistanceString = string.Empty; moreDistanceString = moreDistance > 1000 ? (moreDistance / 1000).ToString("f2") + "千米" : moreDistance.ToString("f2") + "米"; signInLog.Remark = "签到失败,距离最近签到地址[" + nearestAddress.Address + "]" + distanceString + ",超出有效距离" + moreDistanceString; } if (!Add(signInLog)) { errmsg = "签到出错"; return(false); } errmsg = signInLog.Remark; return(signInLog.Status == 1); }