Ejemplo n.º 1
0
 /// <summary>
 /// 指定班互换
 /// </summary>
 protected void SwapSpecificTermIsNeedSeat()
 {
     //在申请方上新增回复方的班
     Applier.CreateTermWithSeat(Replier.Term, Applier.Term.Seat);
     //在回复方上新增申请方的班
     Replier.CreateTermWithSeat(Applier.Term, Replier.Term.Seat);
 }
Ejemplo n.º 2
0
        /// <summary>
        /// 离线代换班
        /// </summary>
        public void SwapingForSubEvent(Pair <Guid> agentPair, Pair <long> assignmentPair)
        {
            _attendanceRepository.Clear();
            Applier.Term = _attendanceRepository.Get <Term>(assignmentPair.Applier);
            Replier.Term = _attendanceRepository.Get <Term>(assignmentPair.Replier);
            var dateA = new DateRange(Applier.Term.Start, Applier.Term.End);
            var dateB = new DateRange(Replier.Term.Start, Replier.Term.End);

            _attendanceRepository.Clear();
            //初始化班表信息
            Applier.InitializeTimeBox(agentPair.Applier, dateA);
            Replier.InitializeTimeBox(agentPair.Replier, dateB);
            Applier.InitializeSwapingForSubEvent(new Pair <DateRange>(dateA, dateB), assignmentPair.Applier);
            Replier.InitializeSwapingForSubEvent(new Pair <DateRange>(dateB, dateA), assignmentPair.Replier);
            //验证
            ValidateTermGapHasMatched();
            //保存日志
            SaveLog();
            //删除班
            DeleteTerm();
            //交换班表
            SwapSpecificTermIsNeedSeat();
            //验证交换信息
            VaildateSwapMessage();
        }
Ejemplo n.º 3
0
 /// <summary>
 /// 时段代换班
 /// </summary>
 public void SwapingForDateRange(Pair <Guid> agentPair, Pair <DateRange> dateRange, bool isLaborRule)
 {
     ReSet();
     _attendanceRepository.Clear();
     Applier.SwapingDate = Replier.SwapingDate = dateRange.Applier.GetSwapingDate(dateRange.Applier, dateRange.Replier);
     Initialize(agentPair, isLaborRule);
     Applier.InitializeSwapingForDateRange(Applier.SwapingDate);
     Replier.InitializeSwapingForDateRange(Replier.SwapingDate);
     //删除请假
     DeleteTerms(new Pair <IList <Term> >(Applier.AbsentEvents, Replier.AbsentEvents));
     //删除班表
     DeleteTerms(new Pair <IList <Term> >(Applier.TempTerms, Replier.TempTerms));
     if (dateRange.Applier == dateRange.Replier)
     {
         Applier.DealWithDateRange(Replier, dateRange.Applier);
         Replier.DealWithDateRange(Applier, dateRange.Replier);
     }
     else
     {
         Applier.DealWithDateRange(Replier, dateRange);
         Replier.DealWithDateRange(Applier, new Pair <DateRange>(dateRange.Replier, dateRange.Applier));
     }
     //验证交换信息
     VaildateSwapMessage();
 }
Ejemplo n.º 4
0
        protected IReplyContext Reply(IMessageChannel channel, IUser user)
        {
            var rContext = Replier.Reply(channel, user);

            rContext.OnSend += OnMessageSent;
            return(rContext);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 基本代换班
        /// </summary>
        public void SwapingForTerm(Pair <Guid> agentPair, Pair <long?> assignmentPair, bool isLaborRule)
        {
            ReSet();
            _attendanceRepository.Clear();
            GetSwapingDate(assignmentPair);
            Initialize(agentPair, isLaborRule);

            Applier.InitializeSwapingForTerm(assignmentPair.Applier);
            Replier.InitializeSwapingForTerm(assignmentPair.Replier);
            if (Applier.Term != null)
            {
                Replier.TimeOff = Replier.TimeBox.SpecificTerm <TimeOff>().CollideTerms(Applier.Term).FirstOrDefault();
            }
            if (Replier.Term != null)
            {
                Applier.TimeOff = Applier.TimeBox.SpecificTerm <TimeOff>().CollideTerms(Replier.Term).FirstOrDefault();
            }
            //删除班
            DeleteTerm();
            //设置TimeOff
            SetTimeOff();
            //交换班表
            SwapSpecificTerm();
            SwapSpecificSubEvents();
            //验证交换信息
            VaildateSwapMessage();
        }
Ejemplo n.º 6
0
        private void Receiver_ReceiveTextMessage(TextMessage message, Replier replier)
        {
            if (!message.Content.IsUrl())
            {
                replier.ReplyText("不要发这些没用的,有本事发个淘宝的商品链接试试");
                return;
            }

            var items = AlimamaClientFactory.Instance.SearchItems(message.Content);

            if (items.Count == 0)
            {
                replier.ReplyText("没有找到此商品的优惠链接");
                return;
            }


            var item     = items.First();
            var adzones  = AlimamaClientFactory.Instance.GetAdzones(item.auctionId);
            var adzone   = adzones.webAdzones.FirstOrDefault();
            var adzoneId = adzone.id;
            var siteId   = adzone.sub.FirstOrDefault().id;
            var urlInfo  = AlimamaClientFactory.Instance.CreatePromotUrl(items[0].auctionId, siteId, adzoneId);

            string msg = string.Format("{0}\r\n{1}\r\n\r\n原价:{2}元\r\n优惠券:{3}\r\n券后价:{4}\r\n\r\n{5}\r\n【长按复制本条信息,然后打开手机淘宝领券下单即可】",
                                       item.title,
                                       urlInfo.couponLinkTaoToken ?? urlInfo.taoToken,
                                       item.zkPrice,
                                       item.couponInfo,
                                       item.zkPrice - item.couponAmount,
                                       urlInfo.couponShortLinkUrl ?? urlInfo.shortLinkUrl
                                       );

            replier.ReplyText(msg);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 多日代换班
        /// </summary>
        public void SwapingForMultiDay(Pair <Guid> agentPair, DateRange dateRange, bool isLaborRule)
        {
            ReSet();
            _attendanceRepository.Clear();
            Applier.SwapingDate = Replier.SwapingDate = dateRange;
            Initialize(agentPair, isLaborRule);

            Applier.InitializeSwapingForMultiDay();
            Replier.InitializeSwapingForMultiDay();
            //是否存在TimeOff
            ValidateHasTimeOff();
            //是否存在AbsentEvent
            ValidateHasAbsentEvent();
            //是否存在锁
            ValidateHasLocked();
            //删除班表
            DeleteTerms(new Pair <IList <Term> >(Applier.CurrentTerms, Replier.CurrentTerms));
            //删除DayOff
            DeleteTerms(new Pair <IList <Term> >(Applier.DayOffs, Replier.DayOffs));
            //交换班表
            SwapTerms(new Pair <IList <Term> >(Applier.CurrentTerms, Replier.CurrentTerms));
            SwapTerms(new Pair <IList <Term> >(Applier.LevelOnes, Replier.LevelOnes));
            SwapTerms(new Pair <IList <Term> >(Applier.LevelTwos, Replier.LevelTwos));
            SwapTerms(new Pair <IList <Term> >(Applier.LevelThrees, Replier.LevelThrees));
            //验证交换信息
            VaildateSwapMessage();
        }
Ejemplo n.º 8
0
        protected Dictionary <Guid, Dictionary <string, bool> > SetValidates()
        {
            var results = new Dictionary <Guid, Dictionary <string, bool> >
            {
                { Applier.TimeBox.Id, Applier.SetValidate() },
                { Replier.TimeBox.Id, Replier.SetValidate() }
            };

            return(results);
        }
Ejemplo n.º 9
0
        private void Do(Replier who, Action <T> action)
        {
            action(who.Item);

            lock (locker)
            {
                who.isAvail = true;
                avails.Enqueue(who.index);
            }
        }
Ejemplo n.º 10
0
 protected void DeleteTerms(Pair <IList <Term> > terms)
 {
     foreach (var assignment in terms.Applier)
     {
         Applier.DeleteTerm(assignment);
     }
     foreach (var assignment in terms.Replier)
     {
         Replier.DeleteTerm(assignment);
     }
 }
Ejemplo n.º 11
0
 protected void CreateTerms(Pair <IList <Term> > terms)
 {
     foreach (var item in terms.Applier)
     {
         Applier.CreateTerm(item);
     }
     foreach (var item in terms.Replier)
     {
         Replier.CreateTerm(item);
     }
 }
Ejemplo n.º 12
0
        public RecordingsPresenter(Recordings view, Subscribe subscribe, ModelFactory modelFactory, AppStorage appStorage)
        {
            _view       = view;
            _subscribe  = subscribe;
            _appStorage = appStorage;

            recorder = new UserActionsRecorder(_subscribe, modelFactory);
            replier  = new Replier();

            Init();
        }
Ejemplo n.º 13
0
 public void SaveLogs()
 {
     foreach (var assignment in Applier.CurrentTerms)
     {
         Applier.SaveLog(assignment);
     }
     foreach (var assignment in Replier.CurrentTerms)
     {
         Replier.SaveLog(assignment);
     }
 }
Ejemplo n.º 14
0
        public virtual bool Do(Action <T> action)
        {
            Replier who = Get();

            if (who != null)
            {
                Do(who, action);
                return(true);
            }
            return(false);
        }
Ejemplo n.º 15
0
        /// <summary>
        /// 获取劳动政策
        /// </summary>
        public Pair <Attendance> GetLaborRule()
        {
            Applier.GetLaborRule();
            Replier.GetLaborRule();
            var results = new Pair <Attendance>
            {
                Applier = Applier.Agent.LaborRule,
                Replier = Replier.Agent.LaborRule
            };

            return(results);
        }
Ejemplo n.º 16
0
 protected void SwapTerms(Pair <Term> term)
 {
     if (term.Replier != null)
     {
         //在申请方上新增回复方的班
         Applier.CreateTerm(term.Replier);
     }
     if (term.Applier != null)
     {
         //在回复方上新增申请方的班
         Replier.CreateTerm(term.Applier);
     }
 }
Ejemplo n.º 17
0
        public string Submit()
        {
            var session = ServiceLocator.Current.GetInstance <ISessionFactory>().GetCurrentSession();

            if (Applier.Message.Length == 0 && Replier.Message.Length == 0)
            {
                Applier.Submit();
                Replier.Submit();
                return(LanguageReader.GetValue("Shifts_BoxPairSwap_Success"));
            }
            session.Transaction.Rollback();
            return(WithMessage());
        }
Ejemplo n.º 18
0
        public virtual Task DoAsync(Action <T> action)
        => Task.Run(() =>
        {
            Replier who = null;
            while (who == null)
            {
                who = Get();
                if (who == null)
                {
                    Thread.Sleep(10);
                }
            }

            Do(who, action);
        });
Ejemplo n.º 19
0
        public virtual void Add(T item)
        {
            lock (locker)
            {
                var who = new Replier
                {
                    index   = list.Count,
                    Item    = item,
                    isAvail = true
                };

                list.Add(who);
                avails.Enqueue(who.index);
            }
        }
Ejemplo n.º 20
0
        private Replier Get()
        {
            Replier who = null;

            lock (locker)
            {
                if (Avail > 0)
                {
                    who         = list[avails.Dequeue()];
                    who.isAvail = false;
                }
            }

            return(who);
        }
Ejemplo n.º 21
0
 private void StartReplyTimer()
 {
     Task.Run(async() =>
     {
         await Task.Delay(DelayMessageMs);
         lock (InstanceCommandLock)
         {
             if (!HasReplied)
             {
                 AwaitMessage = Replier.Reply(Channel, Author)
                                .WithMessage(DelayMessage)
                                .SendAsync(true).Result;
             }
         }
     }).DontWait();
 }
Ejemplo n.º 22
0
        /// <summary>
        /// 离线代换班验证
        /// </summary>
        public Dictionary <Guid, Dictionary <string, bool> > SwapingForSubEventValidate(Pair <Guid> agentPair, Pair <long> subEventPair)
        {
            _attendanceRepository.Clear();
            Applier.Term = _attendanceRepository.Get <Term>(subEventPair.Applier);
            Replier.Term = _attendanceRepository.Get <Term>(subEventPair.Replier);
            var dateA = new DateRange(Applier.Term.Start, Applier.Term.End);
            var dateB = new DateRange(Replier.Term.Start, Replier.Term.End);

            _attendanceRepository.Clear();
            //初始化班表信息
            Applier.InitializeTimeBox(agentPair.Applier, dateA);
            Replier.InitializeTimeBox(agentPair.Replier, dateB);
            Applier.InitializeSwapingForSubEvent(new Pair <DateRange>(dateA, dateB), subEventPair.Applier);
            Replier.InitializeSwapingForSubEvent(new Pair <DateRange>(dateB, dateA), subEventPair.Replier);
            Applier.IsNeedSeat = Replier.IsNeedSeat = Applier.Term.IsNeedSeat != Replier.Term.IsNeedSeat;
            return(SetValidates());
        }
Ejemplo n.º 23
0
 private void Receiver_SubscribeEvent(ScanEventArgs eventArgs, Replier replier)
 {
     if (string.IsNullOrEmpty(eventArgs.EventKey))
     {
         replier.ReplyText("终于等到你,还好我没放弃!\r\n在深圳购买演出票记得上趣票哦!!!");
     }
     else
     {
         replier.ReplyNews(new Replier.NewsContent
         {
             Title       = "“创作随你”德国红点设计大展暨万象天地创作纪念展",
             PicUrl      = "http://imgcdn.qupiaowang.com:9007//TicketPic/20170904/20170904173449578_B64354B5918146DBB8447009A7927B7E_-591542336.jpg",
             Url         = "wechat.qupiaowang.com/infor/show-5814.html",
             Description = "设计届的奥斯卡,世界三大设计奖项之首,红点跨界合作商业中心,17年获奖作品首次亮相中国"
         });
     }
 }
Ejemplo n.º 24
0
        /// <summary>
        /// 时段代换班验证
        /// </summary>
        public Dictionary <Guid, Dictionary <string, bool> > SwapingForDateRangeValidate(Pair <Guid> agentPair, Pair <DateRange> dateRange)
        {
            ReSet();
            _attendanceRepository.Clear();
            Applier.SwapingDate = Replier.SwapingDate = dateRange.Applier.GetSwapingDate(dateRange.Applier, dateRange.Replier);
            Initialize(agentPair, false);
            Applier.InitializeSwapingForDateRange(Applier.SwapingDate);
            Replier.InitializeSwapingForDateRange(Replier.SwapingDate);

            if (dateRange.Applier == dateRange.Replier)
            {
                if (Replier.NotSubEventAndGap(dateRange.Applier))
                {
                    Applier.HasExchanged = true;
                }
                if (Applier.NotSubEventAndGap(dateRange.Replier))
                {
                    Replier.HasExchanged = true;
                }
            }
            else
            {
                //获取切割时间
                var cutDateRange  = DateRange.Cut(dateRange.Applier, dateRange.Replier);
                var applierRegion = cutDateRange.Where(t => t.Item2 == RegionType.Applier).Select(o => o.Item1);
                var replierRegion = cutDateRange.Where(t => t.Item2 == RegionType.Replier).Select(o => o.Item1);
                foreach (var range in applierRegion)
                {
                    if (Replier.NotSubEventAndGap(range))
                    {
                        Applier.HasExchanged = true;
                        break;
                    }
                }
                foreach (var range in replierRegion)
                {
                    if (Applier.NotSubEventAndGap(range))
                    {
                        Replier.HasExchanged = true;
                        break;
                    }
                }
            }
            return(SetValidates());
        }
Ejemplo n.º 25
0
        protected void SwapSpecificSubEvents()
        {
            if (Replier.Term != null)
            {
                //在回复方上面有事件的情况下,也要同时新增。
                foreach (var item in Replier.SubEvents)
                {
                    Applier.CreateTerm(item);
                }
            }

            if (Applier.Term != null)
            {
                //在申请方上面有事件的情况下,也要同时新增。
                foreach (var item in Applier.SubEvents)
                {
                    Replier.CreateTerm(item);
                }
            }
        }
Ejemplo n.º 26
0
 private void Initialize(Pair <Guid> agentPair, bool isLaborRule)
 {
     if (isLaborRule)
     {
         Applier.InitializeAttendance(agentPair.Applier);
         Replier.InitializeAttendance(agentPair.Replier);
     }
     else
     {
         Applier.ScheduleDate = Applier.SwapingDate;
         Replier.ScheduleDate = Replier.SwapingDate;
     }
     Applier.InitializeTimeBox(agentPair.Applier);
     Replier.InitializeTimeBox(agentPair.Replier);
     if (isLaborRule)
     {
         Applier.GetQLaborRule();
         Replier.GetQLaborRule();
     }
 }
Ejemplo n.º 27
0
        /// <summary>
        /// 基本代换班验证
        /// </summary>
        public Dictionary <Guid, Dictionary <string, bool> > SwapingForTermValidate(Pair <Guid> agentPair, Pair <long?> assignmentPair, Pair <DateRange> dateRange)
        {
            _attendanceRepository.Clear();
            //初始化并做单一验证
            Applier.InitializeTimeBox(agentPair.Applier, dateRange.Applier);
            Replier.InitializeTimeBox(agentPair.Replier, dateRange.Replier);

            Applier.InitializeSwapingForTerm(assignmentPair.Applier);
            Replier.InitializeSwapingForTerm(assignmentPair.Replier);
            //验证是否重叠
            if (assignmentPair.Applier.HasValue)
            {
                Applier.HasExchanged = Replier.TimeBox.CollideTerms(dateRange.Applier).Where(o => o.Level == 0).Where(o => assignmentPair.Replier.HasValue ? o.Id != assignmentPair.Replier:true).Any();
            }
            if (assignmentPair.Replier.HasValue)
            {
                Replier.HasExchanged = Applier.TimeBox.CollideTerms(dateRange.Replier).Where(o => o.Level == 0).Where(o => assignmentPair.Applier.HasValue ? o.Id != assignmentPair.Applier : true).Any();
            }
            //验证换完之后TimeOff移至后一天,验证后一天是否重复
            return(SetValidates());
        }
Ejemplo n.º 28
0
 protected IModifyContext Modify(IUserMessage message, IUser user)
 => Replier.Modify(message, user);
Ejemplo n.º 29
0
 private void ReSet()
 {
     Applier.ReSet();
     Replier.ReSet();
 }
Ejemplo n.º 30
0
 public void SaveLog()
 {
     Applier.SaveLog(Applier.Term);
     Replier.SaveLog(Replier.Term);
 }