实际工期:项目实际开始时间到实际结束时间的小时数/每周第一个工作日单日工作时长小时。
超时时长:通过任务计划结束时间和当时间(若任务完成按任务实际结束时间)和工作日历。计算这两段时间之间的工作时长的小时数作为超时时长的取数逻辑。
超时时长: 通过ProjectManager.Instance.GetProjectExtended(ctx, cal, prjObj, false)获得
ctx:PLM上下文
cal:日历对象,通过ProjectManager.Instance.GetCalendar(ctx, prjObj)获得
prjObj:项目对象 通过DomainObjectManager.InstanceByObjectId(ctx, ObjectId).Get(ctx,ObjectId:项目对象Id); 获得
ObjectId:项目对象Id
计划工期: 通过 Math.Round(planDur / durTime, 2)获得
planDur:通过ProjectManager.Instance.GetDuration(ctx, prjObj, cal, dt_PlannedST, dt_PlannedED, timeType) 获得
dt_PlannedST:计划开始时间
dt_PlannedED:计划结束时间
timeType = "小时"
durTimes:一天的工作小时数,先获取工作日历里默认第一天的工作时段(可以理解为上午四小时,下午四小时两个时段)
cal.WeekDays.Where(x => x.DayWorking).FirstOrDefault().WorkingTimes,循环把 WorkingTimes 每项的Duration相加获得durTimes
实际工期:通过 Math.Round(actDur / durTime, 2)
actDur : 通过ProjectManager.Instance.GetDuration(ctx,prjObj, cal, dt_StartTime, dt_EndTime, timeType);
dt_StartTime:实际开始时间
dt_EndTime:实际结束时间 项目基准进度:通过lostDuration / planDur获得
lostDuration:通过ProjectManager.Instance.GetDuration(ctx, prjObj, cal, dt_PlannedST, DateTime.Now, timeType);获得
planDur:通过 ProjectManager.Instance.GetDuration(ctx, prjObj, cal, dt_PlannedST, dt_PlannedED, timeType);获得
项目基准进度:通过lostDuration / planDur获得
lostDuration:通过ProjectManager.Instance.GetDuration(ctx, prjObj, cal, dt_PlannedST, DateTime.Now, timeType);获得
planDur:通过 ProjectManager.Instance.GetDuration(ctx, prjObj, cal, dt_PlannedST, dt_PlannedED, timeType);获得
推荐阅读