示例#1
0
        /// <summary>
        /// 处理老数据 : 2020.3月份及以前的。
        /// 确保在3月之前开始的任务,得到拆分。
        /// 4月开始,任务会通过禅道保证在当月开始及结束。
        /// </summary>
        List <Task> SplitTaskFinishedBefore20200331(List <Task> tsks)
        {
            if (Wd.Year >= 2020 && Wd.Mon > 3)
            {
                return(tsks);
            }

            foreach (var T in tsks)
            {
                if (!T.Inf.IsFinished)
                {
                    //TODO
                    //没有完成的,需要向后拆:
                    //3月的任务已经全部结束掉了,或者拆了新阶段。所以只需要向前拆。
                    //2月及以前的就不管了。
                    continue;
                }
                if (T.Res.FinishedPhs.Year >= 2020 && T.Res.FinishedPhs.Month > 3)
                {
                    continue;
                }

                bool StartFinishInSameMonth = (T.Res.StartedPhs.Month == T.Res.FinishedPhs.Month && T.Res.StartedPhs.Year == T.Res.FinishedPhs.Year);
                if (StartFinishInSameMonth)
                {
                    continue;
                }

                //3月之前开始的,当时没有拆分任务,那么按 当前完成度,照完时间占比,拆分一下
                var TotalDaySpent  = Wd.CountWDays(T.Res.StartedPhs, T.Res.FinishedPhs);
                var SpentThisMonth = Wd.CountWDays(Wd.Day1, T.Res.FinishedPhs);
                var PctgInM        = (float)SpentThisMonth / TotalDaySpent;

                T.Phs.LastId     = 1;
                T.Phs.LstCompDeg = T.Phs.CompDeg - (uint)(PctgInM * 100f);
                T.Res.StartedPhs = Wd.Day1;
            }
            return(tsks);
        }