private List <PointItem> GetPointsItemsFromRepo(ILocalizationPointRepository repository) { var repoPoints = repository.GetAllPoints(); var result = new List <PointItem>(); foreach (var point in repoPoints) { string pointID; if (point.StaticScore == 0) { pointID = point.PointId.ToString(); } else { List <long?> childIds = repository.GetByParentId((long)point.PointId).Select(x => x.PointId).ToList(); string childIdsString = ""; childIds.ForEach(x => childIdsString += $"{x.ToString()}, "); childIdsString = childIdsString.Substring(0, childIdsString.Length - 2); pointID = $"{point.PointId.ToString()}: {childIdsString}"; } PointItem pointItem = new PointItem() { BackgroundColor = point.StaticScore == 0 ? "LightBlue" : "LightCoral", Name = pointID, Location = new Location(point.Point.Coordinates.Latitude, point.Point.Coordinates.Longitude) }; result.Add(pointItem); } return(result); }
private void Next_Click(object sender, EventArgs e) { if (this.listBoxPoints.SelectedIndex == this.listBoxPoints.Items.Count - 1) { MessageBox.Show("已经到最后一步了!"); return; } else if (this.listBoxPoints.SelectedIndex > this.listBoxPoints.Items.Count - 1) { MessageBox.Show("未选中轨迹点!"); return; } else { this.listBoxPoints.SelectedIndex += 1; PointItem curItem = this.listBoxPoints.Items[this.listBoxPoints.SelectedIndex] as PointItem; this.tbPointX.Text = curItem.Point.X.ToString(); this.tbPointY.Text = curItem.Point.Y.ToString(); if (curItem.Type == PointType.Arc) { this.rdoArc.Checked = true; } else { this.rdoLine.Checked = true; } if (!tbPointX.IsValid || !tbPointY.IsValid) { return; } Machine.Instance.Robot.MoveSafeZ(); Machine.Instance.Robot.ManualMovePosXY(origin.X + tbPointX.Value, origin.Y + tbPointY.Value); } }
// POST: api/PointList/ public IHttpActionResult PostPointList([FromBody] JObject jObject) { dynamic jobject = jObject; var pointItemId = (int)jobject.pointItemId; string userId = User.Identity.GetUserId(); string userName = User.Identity.GetUserName(); PointItem result = context.PointItems.SingleOrDefault(c => c.Id == pointItemId); var value = new PointList { UserId = userId, UserName = userName, PointItemId = result.Id, PointItemName = result.Name, Points = result.Points, Remark = "", DateAdded = DateTime.Now }; context.PointLists.Add(value); context.SaveChanges(); //管理者情報の取得 var mailContext = context.Users .Join(context.UserRoles, a => a.Id, b => b.UserId, (a, b) => new { a.UserName, a.Email, b.RoleId }) .Join(context.Roles, ab => ab.RoleId, d => d.Id, (ab, c) => new { ab.UserName, ab.Email, c.Name }) .Where(d => d.Name == "CanManagePointItem") .FirstOrDefault(); //SendGridのメール配信呼び出し SendEmail sendEmail = new SendEmail(); var mailResult = sendEmail.CallSendGridApi(userName, mailContext.UserName, mailContext.Email); return(Ok()); }
/// <summary> /// 采纳满意回答 /// </summary> /// <remarks> /// 1.如果问题有悬赏则悬赏分值转移到回答者的帐户(如有交易税,需要扣除),通过EventModule实现 /// 2.除了悬赏分的交易,回答被采纳,回答者还会获得新产生的积分,通过EventModule实现 /// 3.注意需要发送通知给问题的关注者,通过EventModule实现 /// 4.需要触发的事件:SetBestAnswer的OnAfter /// </remarks> /// <param name="question">问题实体</param> /// <param name="answer">回答实体</param> public void SetBestAnswer(AskQuestion question, AskAnswer answer) { if (!answer.IsBest) { answer.IsBest = true; //调用Service中的Update方法,以触发相应的事件,但是不更新审核状态 this.UpdateAnswer(answer, false); //todo:jiangshl,改为EventModule处理 //处理威望 OwnerDataService ownerDataService = new OwnerDataService(TenantTypeIds.Instance().User()); //用户获得威望值 PointService pointService = new PointService(); //提问者获取威望值 PointItem questionPointItem = pointService.GetPointItem(PointItemKeys.Instance().Ask_AcceptedAnswer()); ownerDataService.Change(question.UserId, OwnerDataKeys.Instance().UserAskReputation(), questionPointItem.ReputationPoints); //回答者获得威望 PointItem AnswerPointItem = pointService.GetPointItem(PointItemKeys.Instance().Ask_AnswerWereAccepted()); ownerDataService.Change(answer.UserId, OwnerDataKeys.Instance().UserAskReputation(), AnswerPointItem.ReputationPoints); //用户计数 ownerDataService.Change(answer.UserId, OwnerDataKeys.Instance().AnswerAcceptCount(), 1); } }
// DELETE: api/PointItem/5 public void Delete(int id) { PointItem value = context.PointItems.SingleOrDefault(c => c.Id == id); context.PointItems.Remove(value); context.SaveChanges(); }
public object Clone() { PointItem result = this.MemberwiseClone() as PointItem; result.Point = this.Point.Clone() as PointD; return(result); }
public JsonResult GetHinhTron(string databaseName, string tableName, string lat, string lng, string banKinh) { if (Session["admin"] == null) { return(Json(new { code = -1 })); } if (string.IsNullOrEmpty(databaseName) || string.IsNullOrEmpty(tableName) || string.IsNullOrEmpty(lat) || string.IsNullOrEmpty(lng) || string.IsNullOrEmpty(banKinh)) { return(Json(new { code = -2 })); } if (lat.Contains(',') || lng.Contains(',') || banKinh.Contains(',')) { Debug.WriteLine("Loi dấu , "); return(Json(new { code = -101 })); } double Lat = 0; double Lng = 0; double BanKinh = 0; try { Lat = double.Parse(lat); Lng = double.Parse(lng); BanKinh = double.Parse(banKinh); } catch (Exception ex) { Debug.WriteLine("Loi: " + ex.Message); return(Json(new { code = -101 })); } if (BanKinh == 0) { BanKinh = 0.00001; } loginData = (LoginData)Session["admin"]; PointItem point = new PointItem(Lat, Lng); List <TreeLite> listItem = treeFunc.getHinhTron(loginData, databaseName, tableName, point, BanKinh); var jsonResult = Json(new { lat = lat, lng = lng, data = listItem }); jsonResult.MaxJsonLength = int.MaxValue; return(jsonResult); }
/// <summary> /// 积分项目转化为Model /// </summary> public static PointItemEditModel AsEditModel(this PointItem pointItem) { return(new PointItemEditModel { ItemKey = pointItem.ItemKey, ItemName = pointItem.ItemName, TradePoints = pointItem.TradePoints, ReputationPoints = pointItem.ReputationPoints, ExperiencePoints = pointItem.ExperiencePoints }); }
public void DistanceBetweenPoints_SamePoint_ReturnsTrue() { // Arrange PointItem point = new PointItem(10, 10, 0); double result; // Act result = point.DistanceBetweenPoints(point); // Assert Assert.AreEqual(result, 0); }
public ActionResult Insert(PointItem model) { var value = new PointItem { Name = model.Name, Points = model.Points }; context.PointItems.Add(value); context.SaveChanges(); return(RedirectToAction("Index", "PointItem")); }
private void tsiPointDown_Click(object sender, EventArgs e) { int index = this.listBoxPoints.SelectedIndex; if (index == this.listBoxPoints.Items.Count - 1) { return; } PointItem temp = this.SymbolPoints[index + 1] as PointItem; this.SymbolPoints[index + 1] = this.SymbolPoints[index]; this.SymbolPoints[index] = temp; RefreshListBoxPoints(); }
public void DistanceBetweenPoints_KnownDistance_ReturnsTrue() { // Arrange PointItem point = new PointItem(10, 10, 0); PointItem point1 = new PointItem(0, 0, 0); double result; double knownDistance = 1568520.55679858; // Act result = point.DistanceBetweenPoints(point1); // Assert Assert.AreEqual(knownDistance, result, 0.00000001); }
public void DistanceBetweenPoints_FlipPoints_ReturnsTrue() { // Arrange PointItem point = new PointItem(10, 10, 0); PointItem point1 = new PointItem(0, 0, 0); double result; double result1; // Act result = point.DistanceBetweenPoints(point1); result1 = point1.DistanceBetweenPoints(point); // Assert Assert.AreEqual(result, result1); }
public void DistanceToEllipseTangent_PerpendicularTangentNegative1Gradient_ReturnsTrue() { // Arrange PointItem point = new PointItem(10, 10, 0); double gradient = -1; bool perpendicular = true; double result; double expected = 188.24981085; // Act result = point.DistanceToEllipseTangent(perpendicular, gradient); // Assert Assert.AreEqual(expected, result, 0.00000001); }
public void DistanceToEllipseTangent_PerpendicularTangent0Gradient_ReturnsTrue() { // Arrange PointItem point = new PointItem(10, 10, 0); double gradient = 0; bool perpendicular = true; double result; double expected = 140; // Act result = point.DistanceToEllipseTangent(perpendicular, gradient); // Assert Assert.AreEqual(expected, result); }
public void DistanceToEllipseTangent_BaseTangentInfGradient_ReturnsTrue() { // Arrange PointItem point = new PointItem(10, 10, 0); double gradient = double.PositiveInfinity; bool perpendicular = false; double result; double expected = 265; // Act result = point.DistanceToEllipseTangent(perpendicular, gradient); // Assert Assert.AreEqual(expected, result); }
public void DistanceToEllipseTangent_BaseTangent1Gradient_ReturnsTrue() { // Arrange PointItem point = new PointItem(10, 10, 0); double gradient = 1; bool perpendicular = false; double result; double expected = 202.39194648; // Act result = point.DistanceToEllipseTangent(perpendicular, gradient); // Assert Assert.AreEqual(expected, result, 0.00000001); }
public void SortePoint(List <PointItem> points) { for (int i = 0; i < points.Count; i++) { PointItem t = points[i]; int j = i; while ((j > 0) && (points[j - 1].data.currentTime > t.data.currentTime)) { points[j] = points[j - 1]; --j; } points[j] = t; } }
private void LoadPoints2ListBox() { listBoxPoints.Items.Clear(); this.SymbolPoints.Clear(); int SymbolsCount = this.SymbolLinesCache.Count; if (SymbolsCount < 1) { return; } PointItem pointItem = new PointItem(this.SymbolLinesCache[0].symbolPoints[0], (PointType)((int)(this.SymbolLinesCache[0].symbolType))); pointItem.ModifyEnable = this.SymbolLinesCache[0].needOffset[0]; this.SymbolPoints.Add(pointItem); listBoxPoints.Items.Add(pointItem); for (int i = 0; i < SymbolsCount; i++) { if (this.SymbolLinesCache[i].symbolType == SymbolType.Arc) { PointItem arcMiddle = new PointItem(this.SymbolLinesCache[i].symbolPoints[1], PointType.Arc); arcMiddle.ModifyEnable = this.SymbolLinesCache[i].needOffset[1]; this.SymbolPoints.Add(arcMiddle); listBoxPoints.Items.Add(arcMiddle); PointItem arcEnd = new PointItem(this.SymbolLinesCache[i].symbolPoints[2], PointType.Arc); arcEnd.ModifyEnable = this.SymbolLinesCache[i].needOffset[2]; this.SymbolPoints.Add(arcEnd); listBoxPoints.Items.Add(arcEnd); } else { PointItem lineEnd = new PointItem(this.SymbolLinesCache[i].symbolPoints[1], PointType.Line); lineEnd.ModifyEnable = this.SymbolLinesCache[i].needOffset[1]; this.SymbolPoints.Add(lineEnd); listBoxPoints.Items.Add(lineEnd); } } this.SymbolLinesCache.Clear(); this.btnCreateSymbols_Click(this, null); for (int i = 0; i < this.symbolLinesCmdLine.Symbols.Count; i++) { this.SymbolLinesCache[i].MHCount = this.symbolLinesCmdLine.Symbols[i].MHCount; this.SymbolLinesCache[i].transitionR = this.symbolLinesCmdLine.Symbols[i].transitionR; this.SymbolLinesCache[i] = this.symbolLinesCmdLine.Symbols[i].Clone() as SymbolLine; } }
private void CalculatePointItemBasemOnCalculatedPoints(IEnumerable <Point> points, PixelsCaclulator parametrizedPixelsCaclulator) { Coordinates GetCalculatedPixels(Point vs) { var coor = parametrizedPixelsCaclulator.CalculatePixel(vs.ListOfVariables[0], vs.ListOfVariables[1]); coor.X -= _calculatedPointSize / 2; // change the coordinates to put pixel in the center of the point coor.Y -= _calculatedPointSize / 2; return(coor); } void ConnectPointWithLine(PointItem A, PointItem B) { var CoorA = new Coordinates(A.Coordinates.X + _calculatedPointSize / 2, A.Coordinates.Y + _calculatedPointSize / 2); var CoorB = new Coordinates(B.Coordinates.X + _calculatedPointSize / 2, B.Coordinates.Y + _calculatedPointSize / 2); var lineItem = new LineItem(CoorA, CoorB); LinesConnectingPoints.Add(lineItem); } if (points == null || points.Count() == 0) { return; } var point = points.ElementAt(0); var coordinates = GetCalculatedPixels(point); var PointItem = new PointItem(coordinates, point, _calculatedPointSize); PointItems.Add(PointItem); for (int i = 1; i < points.Count(); i++) { point = points.ElementAt(i); coordinates = GetCalculatedPixels(point); PointItem = new PointItem(coordinates, point, _calculatedPointSize); PointItems.Add(PointItem); ConnectPointWithLine(PointItems.ElementAt(i - 1), PointItem); } }
void Start() { points = new PointItem[16, 16]; gird = GameObject.FindGameObjectWithTag("Gird"); for (int i = 0; i < 16; i++) { for (int j = 0; j < 16; j++) { Vector3 position = new Vector3(-7.5f + Mathf.Floor(j), 7.5f - Mathf.Floor(i), 0f); GameObject goo = Instantiate(go, position, Quaternion.identity); goo.transform.SetParent(gird.transform); PointItem p = goo.transform.GetComponent <PointItem>(); p.X = j; p.Y = i; points[j, i] = p; } } }
public async void Create(double imageSize, double range, int step, double CentrumX = 0, double CentrumY = 0) { _eventAggregator.GetEvent <CreateCounterLineInfoEvent>().Publish(true); // Counterine is Creatng BitmapSize = imageSize; var pixelsCaclulator = new PixelsCaclulator(imageSize, imageSize, range, step, CentrumX, CentrumY); PointItems.Clear(); LinesConnectingPoints.Clear(); var centralCoordinate = pixelsCaclulator.CalculatePixel(CentrumX, CentrumY); CentralPoint = new PointItem(centralCoordinate, new Point(CentrumX, CentrumY), _calculatedPointSize); var pixels = await GetPixelsTask(pixelsCaclulator); Bitmap = BitmapCreator.CreateBitmap(pixels); _eventAggregator.GetEvent <CreateCounterLineInfoEvent>().Publish(false); // Counterine is not Creatng CalculatePointItemBasemOnCalculatedPoints(CalculatedPoints, pixelsCaclulator); }
private void ShowTrackingPoints(Lap lap) { if (!DisplayOptions.ShowTrackpoints) { return; } var counter = 0; foreach (var node in lap.TrackingPoints) { if (node.Position == null) { continue; } counter++; if (counter % 2 == 0) { continue; } var pointItem = new PointItem { Location = node.Position.ToLocation(), Name = node.ToString() }; switch (node.DistanceConnection.NearestWay.Difficulty) { case "intermediate": MapItems.IntermediatePoints.Add(pointItem); break; case "easy": MapItems.EasyPoints.Add(pointItem); break; case "advanced": MapItems.AdvancedPoints.Add(pointItem); break; } } }
private void ListBoxPoints_SelectedIndexChanged(object sender, EventArgs e) { if (!isMouseDown) { return; } if (this.listBoxPoints.SelectedIndex == -1 || this.listBoxPoints.SelectedIndex > this.listBoxPoints.Items.Count - 1) { return; } PointItem curItem = this.listBoxPoints.Items[this.listBoxPoints.SelectedIndex] as PointItem; this.tbPointX.Text = curItem.Point.X.ToString(); this.tbPointY.Text = curItem.Point.Y.ToString(); if (curItem.Type == PointType.Arc) { this.rdoArc.Checked = true; } else { this.rdoLine.Checked = true; } if (curItem.ModifyEnable) { this.chkModifyEnable.Checked = true; } else { this.chkModifyEnable.Checked = false; } this.isMouseDown = false; this.listBoxLines.SelectedItems.Clear(); if (curItem.TraceIndex < this.listBoxLines.Items.Count) { this.listBoxLines.SelectedIndex = curItem.TraceIndex; } }
/// <summary> /// 回答审核状态变更事件 /// </summary> private void AskAnswerAuditEventModule_After(AskAnswer answer, AuditEventArgs eventArgs) { bool?auditDirection = auditService.ResolveAuditDirection(eventArgs.OldAuditStatus, eventArgs.NewAuditStatus); //审核状态发生变化时处理积分 string pointItemKey = string.Empty; string eventOperationType = string.Empty; if (auditDirection == true) //加积分 { pointItemKey = PointItemKeys.Instance().Ask_CreateAnswer(); if (eventArgs.OldAuditStatus == null) { eventOperationType = EventOperationType.Instance().Create(); } else { eventOperationType = EventOperationType.Instance().Approved(); } } else if (auditDirection == false) //减积分 { pointItemKey = PointItemKeys.Instance().Ask_DeleteAnswer(); if (eventArgs.NewAuditStatus == null) { eventOperationType = EventOperationType.Instance().Delete(); } else { eventOperationType = EventOperationType.Instance().Disapproved(); } } if (!string.IsNullOrEmpty(pointItemKey)) { AskQuestion question = answer.Question; string description = string.Format(ResourceAccessor.GetString("PointRecord_Pattern_" + eventOperationType), "回答", HtmlUtility.TrimHtml(answer.Body, 10)); pointService.GenerateByRole(answer.UserId, pointItemKey, description, eventOperationType == EventOperationType.Instance().Create() || eventOperationType == EventOperationType.Instance().Delete()); //记录用户的威望 PointItem pointItem = pointService.GetPointItem(pointItemKey); ownerDataService.Change(answer.UserId, OwnerDataKeys.Instance().UserAskReputation(), pointItem.ReputationPoints); } //审核状态发生变化时生成动态 if (auditDirection == true) { AskQuestion question = answer.Question; //创建回答的动态[关注回答者的粉丝可以看到该回答] Activity activityOfFollower = Activity.New(); activityOfFollower.ActivityItemKey = ActivityItemKeys.Instance().CreateAskAnswer(); activityOfFollower.ApplicationId = AskConfig.Instance().ApplicationId; //判断是否有图片、音频、视频 AttachmentService attachmentService = new AttachmentService(TenantTypeIds.Instance().AskAnswer()); IEnumerable <Attachment> attachments = attachmentService.GetsByAssociateId(answer.AnswerId); if (attachments != null && attachments.Any(n => n.MediaType == MediaType.Image)) { activityOfFollower.HasImage = true; } activityOfFollower.IsOriginalThread = true; activityOfFollower.IsPrivate = false; activityOfFollower.TenantTypeId = TenantTypeIds.Instance().AskAnswer(); activityOfFollower.SourceId = answer.AnswerId; activityOfFollower.UserId = answer.UserId; activityOfFollower.ReferenceId = answer.QuestionId; activityOfFollower.ReferenceTenantTypeId = TenantTypeIds.Instance().AskQuestion(); activityOfFollower.OwnerId = answer.UserId; activityOfFollower.OwnerName = answer.Author; activityOfFollower.OwnerType = ActivityOwnerTypes.Instance().User(); activityService.Generate(activityOfFollower, true); //创建回答的动态[关注该问题的用户可以看到该回答] Activity activityOfQuestionSubscriber = Activity.New(); activityOfQuestionSubscriber.ActivityItemKey = ActivityItemKeys.Instance().CreateAskAnswer(); activityOfQuestionSubscriber.ApplicationId = AskConfig.Instance().ApplicationId; activityOfQuestionSubscriber.HasImage = activityOfFollower.HasImage; activityOfQuestionSubscriber.IsOriginalThread = true; activityOfQuestionSubscriber.IsPrivate = false; activityOfQuestionSubscriber.TenantTypeId = TenantTypeIds.Instance().AskAnswer(); activityOfQuestionSubscriber.SourceId = answer.AnswerId; activityOfQuestionSubscriber.UserId = answer.UserId; activityOfQuestionSubscriber.ReferenceId = answer.QuestionId; activityOfQuestionSubscriber.ReferenceTenantTypeId = TenantTypeIds.Instance().AskQuestion(); activityOfQuestionSubscriber.OwnerId = question.QuestionId; activityOfQuestionSubscriber.OwnerName = question.Subject; activityOfQuestionSubscriber.OwnerType = ActivityOwnerTypes.Instance().AskQuestion(); activityService.Generate(activityOfQuestionSubscriber, false); } else if (auditDirection == false) { activityService.DeleteSource(TenantTypeIds.Instance().AskAnswer(), answer.AnswerId); } }
/// <summary> /// 问题增删改等触发的事件 /// </summary> private void AskQuestionEventModule_After(AskQuestion question, CommonEventArgs eventArgs) { if (eventArgs.EventOperationType == EventOperationType.Instance().Create()) { //冻结用户的积分 if (question.AddedReward > 0) { userService.FreezeTradePoints(question.UserId, question.AddedReward); } //向定向提问的目标用户发送通知 if (question.AskUserId > 0) { Notice notice = Notice.New(); notice.UserId = question.AskUserId; notice.ApplicationId = AskConfig.Instance().ApplicationId; notice.TypeId = NoticeTypeIds.Instance().Hint(); notice.LeadingActor = question.Author; notice.LeadingActorUrl = SiteUrls.FullUrl(SiteUrls.Instance().AskUser(UserIdToUserNameDictionary.GetUserName(question.UserId))); notice.RelativeObjectName = HtmlUtility.TrimHtml(question.Subject, 64); notice.RelativeObjectUrl = SiteUrls.FullUrl(SiteUrls.Instance().AskQuestionDetail(question.QuestionId)); notice.TemplateName = NoticeTemplateNames.Instance().AskUser(); noticeService.Create(notice); } //自动关注(提问者自动关注[订阅]该问题) if (!subscribeService.IsSubscribed(question.QuestionId, question.UserId)) { subscribeService.Subscribe(question.QuestionId, question.UserId); //问题关注数计数,用于“可能感兴趣的问题”关联表查询 countService.ChangeCount(CountTypes.Instance().QuestionFollowerCount(), question.QuestionId, question.UserId, 1, false); } } else if (eventArgs.EventOperationType == EventOperationType.Instance().Delete()) { //已解决问题的积分不返还,未解决/已取消的问题应该解除冻结积分 if (question.Reward > 0 && question.Status != QuestionStatus.Resolved) { userService.UnfreezeTradePoints(question.UserId, question.Reward); } //删除所有用户对该问题的关注(订阅) IEnumerable <long> userIds = subscribeService.GetUserIdsOfObject(question.QuestionId); foreach (var userId in userIds) { subscribeService.CancelSubscribe(question.QuestionId, userId); } } else if (eventArgs.EventOperationType == EventOperationType.Instance().Update()) { //冻结用户的积分 if (question.AddedReward != 0) { userService.FreezeTradePoints(question.UserId, question.AddedReward); } if (question.Status == QuestionStatus.Canceled) { subscribeService.CancelSubscribe(question.QuestionId, question.UserId); int pageSize = 100; for (int i = 1; i <= question.AnswerCount; i = i + pageSize) { PagingDataSet <AskAnswer> answers = askService.GetAnswersByQuestionId(question.QuestionId, SortBy_AskAnswer.DateCreated_Desc, pageSize, i); foreach (AskAnswer answer in answers) { subscribeService.CancelSubscribe(question.QuestionId, answer.UserId); } } } } //加精时处理积分和威望并产生通知 else if (eventArgs.EventOperationType == EventOperationType.Instance().SetEssential()) { string pointItemKey = PointItemKeys.Instance().EssentialContent(); string description = string.Format(ResourceAccessor.GetString("PointRecord_Pattern_" + eventArgs.EventOperationType), "问题", question.Subject); pointService.GenerateByRole(question.UserId, pointItemKey, description); if (question.UserId > 0) { Notice notice = Notice.New(); notice.UserId = question.UserId; notice.ApplicationId = AskConfig.Instance().ApplicationId; notice.TypeId = NoticeTypeIds.Instance().Hint(); notice.LeadingActor = question.Author; notice.LeadingActorUrl = SiteUrls.FullUrl(SiteUrls.Instance().AskUser(UserIdToUserNameDictionary.GetUserName(question.UserId))); notice.RelativeObjectName = HtmlUtility.TrimHtml(question.Subject, 64); notice.RelativeObjectUrl = SiteUrls.FullUrl(SiteUrls.Instance().AskQuestionDetail(question.QuestionId)); notice.TemplateName = NoticeTemplateNames.Instance().ManagerSetEssential(); noticeService.Create(notice); } //记录用户的威望 PointItem pointItem = pointService.GetPointItem(pointItemKey); ownerDataService.Change(question.UserId, OwnerDataKeys.Instance().UserAskReputation(), pointItem.ReputationPoints); } }
/// <summary> /// 回答被赞同的相关事件处理 /// </summary> private void AskAnswerSupportEventModule_After(long objectId, SupportOpposeEventArgs eventArgs) { if (eventArgs.TenantTypeId == TenantTypeIds.Instance().AskAnswer()) { //如果不是第一次顶踩,则不处理 if (!eventArgs.FirstTime) { return; } if (eventArgs.EventOperationType == EventOperationType.Instance().Support()) { AskAnswer answer = askService.GetAnswer(objectId); AskQuestion question = answer.Question; //创建顶回答的动态[关注回答者的粉丝可以看到该顶信息] Activity activityOfFollower = Activity.New(); activityOfFollower.ActivityItemKey = ActivityItemKeys.Instance().SupportAskAnswer(); activityOfFollower.ApplicationId = AskConfig.Instance().ApplicationId; activityOfFollower.IsOriginalThread = true; activityOfFollower.IsPrivate = false; activityOfFollower.TenantTypeId = TenantTypeIds.Instance().AskAnswer(); activityOfFollower.SourceId = answer.AnswerId; activityOfFollower.UserId = eventArgs.UserId; activityOfFollower.ReferenceId = answer.AnswerId; activityOfFollower.ReferenceTenantTypeId = TenantTypeIds.Instance().AskAnswer(); activityOfFollower.OwnerId = eventArgs.UserId; activityOfFollower.OwnerName = userService.GetFullUser(eventArgs.UserId).DisplayName; activityOfFollower.OwnerType = ActivityOwnerTypes.Instance().User(); activityService.Generate(activityOfFollower, true); //创建顶回答的动态[关注该问题的用户可以看到该顶信息] Activity activityOfQuestionSubscriber = Activity.New(); activityOfQuestionSubscriber.ActivityItemKey = ActivityItemKeys.Instance().SupportAskAnswer(); activityOfQuestionSubscriber.ApplicationId = AskConfig.Instance().ApplicationId; activityOfQuestionSubscriber.IsOriginalThread = true; activityOfQuestionSubscriber.IsPrivate = false; activityOfQuestionSubscriber.TenantTypeId = TenantTypeIds.Instance().AskAnswer(); activityOfQuestionSubscriber.SourceId = answer.AnswerId; activityOfQuestionSubscriber.UserId = eventArgs.UserId; activityOfQuestionSubscriber.ReferenceId = answer.AnswerId; activityOfQuestionSubscriber.ReferenceTenantTypeId = TenantTypeIds.Instance().AskAnswer(); activityOfQuestionSubscriber.OwnerId = question.QuestionId; activityOfQuestionSubscriber.OwnerName = question.Subject; activityOfQuestionSubscriber.OwnerType = ActivityOwnerTypes.Instance().AskQuestion(); activityService.Generate(activityOfQuestionSubscriber, false); //处理积分和威望 string pointItemKey = PointItemKeys.Instance().Ask_BeSupported(); //回答收到赞同时产生积分 string eventOperationType = EventOperationType.Instance().Support(); string description = string.Format(ResourceAccessor.GetString("PointRecord_Pattern_" + eventOperationType), "回答", question.Subject); pointService.GenerateByRole(answer.UserId, pointItemKey, description); //记录用户的威望 PointItem pointItem = pointService.GetPointItem(pointItemKey); ownerDataService.Change(answer.UserId, OwnerDataKeys.Instance().UserAskReputation(), pointItem.ReputationPoints); //赞同者自动关注问题 if (!subscribeService.IsSubscribed(question.QuestionId, eventArgs.UserId)) { subscribeService.Subscribe(question.QuestionId, eventArgs.UserId); //问题关注数计数,用于“可能感兴趣的问题”关联表查询 countService.ChangeCount(CountTypes.Instance().QuestionFollowerCount(), question.QuestionId, question.UserId, 1, false); } //增加赞同的用户计数 ownerDataService.Change(answer.UserId, OwnerDataKeys.Instance().AnswerSupportCount(), 1); } else if (eventArgs.EventOperationType == EventOperationType.Instance().Oppose()) { AskAnswer answer = askService.GetAnswer(objectId); AskQuestion question = answer.Question; //处理积分和威望 string pointItemKey = PointItemKeys.Instance().Ask_BeOpposed(); //回答收到反对时产生积分 string eventOperationType = EventOperationType.Instance().Oppose(); string description = string.Format(ResourceAccessor.GetString("PointRecord_Pattern_" + eventOperationType), "回答", question.Subject); pointService.GenerateByRole(answer.UserId, pointItemKey, description); //记录用户的威望 PointItem pointItem = pointService.GetPointItem(pointItemKey); ownerDataService.Change(answer.UserId, OwnerDataKeys.Instance().UserAskReputation(), pointItem.ReputationPoints); //反对者自动关注问题 if (!subscribeService.IsSubscribed(question.QuestionId, eventArgs.UserId)) { subscribeService.Subscribe(answer.QuestionId, eventArgs.UserId); //问题关注数计数,用于“可能感兴趣的问题”关联表查询 countService.ChangeCount(CountTypes.Instance().QuestionFollowerCount(), question.QuestionId, question.UserId, 1, false); } //增加反对的用户计数 ownerDataService.Change(answer.UserId, OwnerDataKeys.Instance().AnswerOpposeCount(), 1); } } }
private void btnAdd_Click(object sender, EventArgs e) { PointD p = this.pattern.SystemRel(tbPointX.Value, tbPointY.Value); int index = this.listBoxPoints.SelectedIndex; if (this.SymbolPoints.Count > 0) { if (index > -1 && index < this.SymbolPoints.Count - 1 && this.SymbolPoints.Count > 1) { VectorD delta1 = p - this.SymbolPoints[index].Point; if (delta1.Length < 0.002) { MessageBox.Show("拾取点位与上一点位重合,请确认坐标"); return; } VectorD delta2 = p - this.SymbolPoints[index + 1].Point; if (delta2.Length < 0.002) { MessageBox.Show("拾取点位与下一点位重合,请确认坐标"); return; } } else { VectorD delta1 = p - this.SymbolPoints.Last().Point; if (delta1.Length < 0.002) { MessageBox.Show("拾取点位与上一点位重合,请确认坐标"); return; } } } PointItem point = new PointItem(p); if (rdoArc.Checked) { point.Type = PointType.Arc; } else { point.Type = PointType.Line; } if (chkModifyEnable.Checked) { point.ModifyEnable = true; } else { point.ModifyEnable = false; } if (index == this.SymbolPoints.Count - 1 || index == -1) { this.SymbolPoints.Add(point); } else { this.SymbolPoints.Insert(index + 1, point); } this.RefreshListBoxPoints(); this.listBoxPoints.SelectedIndex = index + 1; }
/// <summary> /// Convex Hull Graham algorithm. /// </summary> /// <param name="points"></param> /// <param name="epsilon"></param> /// <returns></returns> public static int[] GetFromPoints(IList <Vector2> points, double epsilon) { List <PointItem> list = new List <PointItem>(points.Count); for (int nPoint = 0; nPoint < points.Count; nPoint++) { Vector2 point = points[nPoint]; //const double epsilon = .001; bool skip = false; for (int nPointItem = 0; nPointItem < list.Count; nPointItem++) { PointItem listItem = list[nPointItem]; if (listItem.point.Equals(ref point, epsilon)) { skip = true; break; } } if (skip) { continue; } PointItem pointItem = new PointItem(); pointItem.sourceIndex = nPoint; pointItem.point = points[nPoint]; list.Add(pointItem); } if (list.Count < 3) { int[] array = new int[points.Count]; for (int n = 0; n < array.Length; n++) { array[n] = n; } return(array); } //!!!!merge sort CollectionUtility.SelectionSort(list, delegate(PointItem item1, PointItem item2) { Vector2 i1 = item1.point; Vector2 i2 = item2.point; if (i1.X < i2.X || i1.X == i2.X && i1.Y < i2.Y) { return(1); } else { return(-1); } }); PointItem p1 = list[0]; PointItem p2 = list[list.Count - 1]; List <PointItem> up = new List <PointItem>(points.Count); List <PointItem> down = new List <PointItem>(points.Count); up.Add(p1); down.Add(p1); for (int i = 1; i < list.Count; ++i) { if (i == list.Count - 1 || cw(p1.point, list[i].point, p2.point)) { while (up.Count >= 2 && !cw(up[up.Count - 2].point, up[up.Count - 1].point, list[i].point)) { up.RemoveAt(up.Count - 1); } up.Add(list[i]); } if (i == list.Count - 1 || ccw(p1.point, list[i].point, p2.point)) { while (down.Count >= 2 && !ccw(down[down.Count - 2].point, down[down.Count - 1].point, list[i].point)) { down.RemoveAt(down.Count - 1); } down.Add(list[i]); } } List <int> result = new List <int>(points.Count); for (int i = 0; i < up.Count; i++) { result.Add(up[i].sourceIndex); } for (int i = down.Count - 2; i > 0; i--) { result.Add(down[i].sourceIndex); } return(result.ToArray()); }
/// <summary> /// 回答增删改等触发的事件 /// </summary> private void AskAnswerEventModule_After(AskAnswer answer, CommonEventArgs eventArgs) { if (eventArgs.EventOperationType == EventOperationType.Instance().Create()) { //向关注该问题的用户发送通知 IEnumerable <long> userIds = subscribeService.GetUserIdsOfObject(answer.QuestionId); AskQuestion question = answer.Question; foreach (var userId in userIds) { //通知的对象排除掉自己 if (userId == answer.UserId) { continue; } Notice notice = Notice.New(); notice.UserId = userId; notice.ApplicationId = AskConfig.Instance().ApplicationId; notice.TypeId = NoticeTypeIds.Instance().Reply(); notice.LeadingActor = answer.Author; notice.LeadingActorUrl = SiteUrls.FullUrl(SiteUrls.Instance().AskUser(UserIdToUserNameDictionary.GetUserName(answer.UserId))); notice.RelativeObjectName = HtmlUtility.TrimHtml(question.Subject, 64); notice.RelativeObjectUrl = SiteUrls.FullUrl(SiteUrls.Instance().AskQuestionDetail(question.QuestionId)); notice.TemplateName = NoticeTemplateNames.Instance().NewAnswer(); noticeService.Create(notice); } //自动关注(回答者自动关注[订阅]该问题) if (!subscribeService.IsSubscribed(question.QuestionId, answer.UserId)) { subscribeService.Subscribe(question.QuestionId, answer.UserId); //问题关注数计数,用于“可能感兴趣的问题”关联表查询 countService.ChangeCount(CountTypes.Instance().QuestionFollowerCount(), question.QuestionId, question.UserId, 1, false); } } else if (eventArgs.EventOperationType == EventOperationType.Instance().Delete()) { //删除回答者对问题的关注 subscribeService.CancelSubscribe(answer.QuestionId, answer.UserId); } else if (eventArgs.EventOperationType == EventOperationType.Instance().Update()) { AskQuestion question = new AskService().GetQuestion(answer.QuestionId); if (answer.IsBest && question.Status == QuestionStatus.Resolved && !question.IsTrated) { //如果问题有悬赏则悬赏分值转移到回答者的帐户(如有交易税,需要扣除) if (question.Reward > 0) { pointService.Trade(question.UserId, answer.UserId, question.Reward, string.Format(Resource.PointRecord_Pattern_QuestionReward, question.Subject), false); } askService.SetTradeStatus(question, true); //处理采纳回答相关的积分和威望 string pointItemKey_AcceptedAnswer = PointItemKeys.Instance().Ask_AcceptedAnswer(); //采纳回答时产生积分 string description_AcceptedAnswer = string.Format(Resource.PointRecord_Pattern_AcceptedAnswer, question.Subject); pointService.GenerateByRole(question.UserId, pointItemKey_AcceptedAnswer, description_AcceptedAnswer); //记录用户的威望 PointItem pointItem_AcceptedAnswer = pointService.GetPointItem(pointItemKey_AcceptedAnswer); ownerDataService.Change(question.UserId, OwnerDataKeys.Instance().UserAskReputation(), pointItem_AcceptedAnswer.ReputationPoints); //处理回答被采纳相关的积分和威望 string pointItemKey_AnswerWereAccepted = PointItemKeys.Instance().Ask_AnswerWereAccepted(); //回答被采纳时产生积分 string description_AnswerWereAccepted = string.Format(Resource.PointRecord_Pattern_AnswerWereAccepted, question.Subject); pointService.GenerateByRole(answer.UserId, pointItemKey_AnswerWereAccepted, description_AnswerWereAccepted); //记录用户的威望 PointItem pointItem_AnswerWereAccepted = pointService.GetPointItem(pointItemKey_AnswerWereAccepted); ownerDataService.Change(answer.UserId, OwnerDataKeys.Instance().UserAskReputation(), pointItem_AnswerWereAccepted.ReputationPoints); //向关注该问题的用户发送通知 IEnumerable <long> userIds = subscribeService.GetUserIdsOfObject(answer.QuestionId); foreach (var userId in userIds) { //通知的对象排除掉自己 if (userId == question.UserId) { continue; } Notice notice = Notice.New(); notice.UserId = userId; notice.ApplicationId = AskConfig.Instance().ApplicationId; notice.TypeId = NoticeTypeIds.Instance().Hint(); notice.LeadingActor = question.Author; notice.LeadingActorUrl = SiteUrls.FullUrl(SiteUrls.Instance().AskUser(UserIdToUserNameDictionary.GetUserName(question.UserId))); notice.RelativeObjectName = HtmlUtility.TrimHtml(question.Subject, 64); notice.RelativeObjectUrl = SiteUrls.FullUrl(SiteUrls.Instance().AskQuestionDetail(question.QuestionId)); notice.TemplateName = NoticeTemplateNames.Instance().SetBestAnswer(); noticeService.Create(notice); } } } }