Beispiel #1
0
        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);
        }
Beispiel #2
0
 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);
     }
 }
Beispiel #3
0
        // 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());
        }
Beispiel #4
0
        /// <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();
        }
Beispiel #6
0
            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);
        }
Beispiel #8
0
 /// <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
     });
 }
Beispiel #9
0
        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);
        }
Beispiel #10
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"));
        }
Beispiel #11
0
        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();
        }
Beispiel #12
0
        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);
        }
Beispiel #13
0
        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);
        }
Beispiel #14
0
        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);
        }
Beispiel #15
0
        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);
        }
Beispiel #16
0
        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);
        }
Beispiel #17
0
        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);
        }
Beispiel #18
0
    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;
        }
    }
Beispiel #19
0
        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;
            }
        }
Beispiel #20
0
        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);
            }
        }
Beispiel #21
0
    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;
            }
        }
    }
Beispiel #22
0
        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;
                }
            }
        }
Beispiel #24
0
        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;
            }
        }
Beispiel #25
0
        /// <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);
            }
        }
Beispiel #26
0
        /// <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);
            }
        }
Beispiel #27
0
        /// <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);
                }
            }
        }
Beispiel #28
0
        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;
        }
Beispiel #29
0
        /// <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());
        }
Beispiel #30
0
        /// <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);
                    }
                }
            }
        }