heteng преди 2 години
родител
ревизия
636ff7175d

+ 5 - 0
MicroServices/Business/Business.Application.Contracts/Dto/LineScheduledDto.cs

@@ -35,5 +35,10 @@ namespace Business.Dto
         /// 班次
         /// </summary>
         public short Period { get; set; }
+
+        /// <summary>
+        /// UPH
+        /// </summary>
+        public decimal Rate { get; set; }
     }
 }

+ 5 - 0
MicroServices/Business/Business.Application.Contracts/Dto/LineStartDto.cs

@@ -11,6 +11,11 @@ namespace Business.Dto
     /// </summary>
     public class LineStartDto
     {
+        /// <summary>
+        /// 产线主键
+        /// </summary>
+        public int RecID { get; set; }
+
         /// <summary>
         /// 产线
         /// </summary>

+ 114 - 173
MicroServices/Business/Business.Application/ResourceExamineManagement/ProductionScheduleAppService.cs

@@ -113,6 +113,16 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         private List<HolidayMaster> holidays;
 
+        /// <summary>
+        /// 生产线UPH设置
+        /// </summary>
+        private List<ProdLineDetailRunCrew> prodLineDetailRunCrews;
+
+        /// <summary>
+        /// 加班设置
+        /// </summary>
+        private List<ResourceOccupancyTime> resourceOccupancyTimes;
+
         /// <summary>
         /// 工厂id
         /// </summary>
@@ -206,9 +216,9 @@ namespace Business.ResourceExamineManagement
             List<ProdLineDetail> prodLines = _prodLineDetail.Select(p => workOrds.Select(m => m.ItemNum).Contains(p.Part) && p.Domain == domain && p.IsActive);
             List<string> lines = prodLines.Select(p => p.Line).ToList();
             //获取非标准产线人员配置
-            List<ProdLineDetailRunCrew> prodLineDetailRunCrews = _prodLineDetailRunCrew.Select(x => prodLines.Select(p => p.RecID).Contains(x.ProdLineDetailRecID) && x.IsActive && x.Domain == domain).ToList();
+            prodLineDetailRunCrews = _prodLineDetailRunCrew.Select(x => prodLines.Select(p => p.RecID).Contains(x.ProdLineDetailRecID) && x.IsActive && x.Domain == domain).ToList();
             //获取加班设置
-            List<ResourceOccupancyTime> resourceOccupancyTimes = _resourceOccupancyTime.Select(x => prodLines.Select(p => p.Line).Contains(x.Resource) && x.IsActive && x.Domain == domain).ToList();
+            resourceOccupancyTimes = _resourceOccupancyTime.Select(x => prodLines.Select(p => p.Line).Contains(x.Resource) && x.IsActive && x.Domain == domain).ToList();
             //获取生产周期数据
             List<PeriodSequenceDet> dbPeriodSequences = _periodSequenceDet.Select(p => lines.Contains(p.Line) && p.PlanDate >= earlist && p.Domain == domain && p.IsActive);
             //获取当前日期往后的排产记录数据
@@ -239,8 +249,7 @@ namespace Business.ResourceExamineManagement
                 
                 #region 校验
                 //工单工艺多产线关键工序、物料对应的生产线信息:物料,工序对应的生产线、工作日历数据
-                var workOrdRouting = workOrdRoutings.Where(x => x.WorkOrd == item.WorkOrd && x.ParentOp == 0).ToList();
-                if (workOrdRouting.Count == 0)
+                if (curRoutings.Count == 0)
                 {
                     //记录排产异常原因
                     new NLogHelper("ProductionScheduleAppService").WriteLog("DoProductShcedule", "工单<" + item.WorkOrd + ">的工单工艺流程数据维护为空", _currentTenant.Id.ToString());
@@ -286,7 +295,7 @@ namespace Business.ResourceExamineManagement
                 #endregion
 
                 //产线排产
-                LineSchedule(item, curRoutings, curProdLines, periodSequenceDtls, scheduleMasters,allResults);
+                LineSchedule(item, curRoutings, curProdLines, periodSequenceDtls, scheduleMasters, allResults);
 
                 List<ScheduleResultOpMaster> scheduleList = scheduleMasters.Where(s => s.WorkOrd == item.WorkOrd).ToList();
                 if (scheduleList.Any())
@@ -342,7 +351,7 @@ namespace Business.ResourceExamineManagement
                 else
                 {
                     //获取前一产线排产开始时间,通过提前期计算当前产线排产开始时间
-                    lineStart = DealNextStartTime(workOrd,lineStart, workOrdRoutings[i].OP, prodLines, allResults);
+                    lineStart = DealNextStartTime(workOrd, lineStart, workOrdRoutings[i].OP, prodLines, allResults);
                 }
                 //当前产线的工作日历
                 var mLCalendars = calendars.Where(p => p.ProdLine == lineStart.Line || string.IsNullOrEmpty(p.ProdLine)).ToList();
@@ -358,16 +367,16 @@ namespace Business.ResourceExamineManagement
                 while (sumQty < workOrd.QtyOrded)
                 {
                     //获取当天的产能
-                    LineScheduledDto dto = GetScheduledPoint(lineStart.Rate, workStartTime, mLCalendars, mlqtyWorkDtls);
+                    LineScheduledDto dto = GetScheduledPoint(lineStart, workStartTime, mLCalendars, mlqtyWorkDtls);
                     //排产开始时,需要先减去产线准备时间
                     if (sumTimes < lineStart.setupTime)
                     {
                         //判断当天的可用生产时长能满足提前期
-                        if (dto.EffTime >= lineStart.setupTime)
+                        if (dto.EffTime >= lineStart.setupTime - sumTimes)
                         {
                             sumTimes = lineStart.setupTime;
                             //当天剩余产能
-                            decimal sumAmount = dto.ProductQty - Math.Floor(lineStart.Rate * lineStart.setupTime);
+                            decimal sumAmount = dto.ProductQty - Math.Floor(dto.Rate * (lineStart.setupTime - sumTimes));
                             //判断已排产数量+当天的产能是否超过工单数量
                             if (sumQty + sumAmount <= workOrd.QtyOrded)//当天的产能需要全部排产
                             {
@@ -410,7 +419,7 @@ namespace Business.ResourceExamineManagement
                                 //剩余需要排产的数量
                                 decimal residueQty = workOrd.QtyOrded - sumQty;
                                 //剩余数量生产需要时长(分钟)
-                                decimal workTime = Math.Ceiling(residueQty / lineStart.Rate * 60);
+                                decimal workTime = Math.Ceiling(residueQty / dto.Rate * 60);
                                 //获取当天的工作时间段
                                 var curCalendar = mLCalendars.FirstOrDefault(p => !string.IsNullOrEmpty(p.ProdLine) && p.WeekDay == (int)workStartTime.DayOfWeek);
                                 if (curCalendar == null)
@@ -528,7 +537,7 @@ namespace Business.ResourceExamineManagement
                             //剩余需要排产的数量
                             decimal residueQty = workOrd.QtyOrded - sumQty;
                             //剩余数量生产需要时长(分钟)
-                            decimal workTime = Math.Ceiling(residueQty / lineStart.Rate * 60);
+                            decimal workTime = Math.Ceiling(residueQty / dto.Rate * 60);
                             //获取当天的工作时间段
                             var curCalendar = mLCalendars.FirstOrDefault(p => !string.IsNullOrEmpty(p.ProdLine) && p.WeekDay == (int)workStartTime.DayOfWeek);
                             if (curCalendar == null)
@@ -537,64 +546,63 @@ namespace Business.ResourceExamineManagement
                             }
                             List<LineWorkPointDto> workPoints = DealWorkDayToLevels(workStartTime, curCalendar, mlqtyWorkDtls);
                             var curPoint = workPoints.Find(p => p.StartPoint <= workStartTime && workStartTime <= p.EndPoint);
-                            if (curPoint == null)
-                            {
-                                continue;
-                            }
-                            TimeSpan span = curPoint.EndPoint - workStartTime;
-                            //当天工作时间段的有效生产时间
-                            decimal effMins = (decimal)span.TotalMinutes;
-                            DateTime workEndTime = workStartTime;
-                            if (effMins >= workTime)//当前工作时间段即可满足产能
+                            if (curPoint != null)
                             {
-                                workEndTime = workStartTime.AddMinutes((double)workTime);
-                            }
-                            else
-                            {
-                                //获取后续生产时间段
-                                var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).ToList();
-                                //剩余需要工作时长
-                                decimal nextMins = workTime - effMins;
-                                foreach (var p in nextPoints)
+                                TimeSpan span = curPoint.EndPoint - workStartTime;
+                                //当天工作时间段的有效生产时间
+                                decimal effMins = (decimal)span.TotalMinutes;
+                                DateTime workEndTime = workStartTime;
+                                if (effMins >= workTime)//当前工作时间段即可满足产能
+                                {
+                                    workEndTime = workStartTime.AddMinutes((double)workTime);
+                                }
+                                else
                                 {
-                                    if (p.WorkMinutes >= nextMins)
+                                    //获取后续生产时间段
+                                    var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).ToList();
+                                    //剩余需要工作时长
+                                    decimal nextMins = workTime - effMins;
+                                    foreach (var p in nextPoints)
                                     {
-                                        workEndTime = p.StartPoint.AddMinutes((double)nextMins);
-                                        break;
+                                        if (p.WorkMinutes >= nextMins)
+                                        {
+                                            workEndTime = p.StartPoint.AddMinutes((double)nextMins);
+                                            break;
+                                        }
+                                        nextMins -= p.WorkMinutes;
                                     }
-                                    nextMins -= p.WorkMinutes;
                                 }
+                                sumQty = workOrd.QtyOrded;
+                                //记录生产周期
+                                curSequences.Add(new PeriodSequenceDet
+                                {
+                                    Domain = domain,
+                                    Line = lineStart.Line,
+                                    ItemNum = workOrd.ItemNum,
+                                    PlanDate = workStartTime.Date,
+                                    Period = dto.Period,//目前只考虑一班制
+                                    OrdQty = residueQty,
+                                    WorkOrds = workOrd.WorkOrd,
+                                    Op = lineStart.Op,
+                                    IsActive = true,
+                                    Status = "",
+                                    CreateTime = DateTime.Now
+                                });
+                                //记录排产记录
+                                curScheduleRsts.Add(new ScheduleResultOpMaster
+                                {
+                                    Domain = domain,
+                                    WorkOrd = workOrd.WorkOrd,
+                                    Line = lineStart.Line,
+                                    ItemNum = workOrd.ItemNum,
+                                    Op = lineStart.Op,
+                                    WorkDate = workStartTime.Date,
+                                    WorkQty = residueQty,
+                                    WorkStartTime = workStartTime,
+                                    WorkEndTime = workEndTime,
+                                    CreateTime = DateTime.Now
+                                });
                             }
-                            sumQty = workOrd.QtyOrded;
-                            //记录生产周期
-                            curSequences.Add(new PeriodSequenceDet
-                            {
-                                Domain = domain,
-                                Line = lineStart.Line,
-                                ItemNum = workOrd.ItemNum,
-                                PlanDate = workStartTime.Date,
-                                Period = dto.Period,//目前只考虑一班制
-                                OrdQty = residueQty,
-                                WorkOrds = workOrd.WorkOrd,
-                                Op = lineStart.Op,
-                                IsActive = true,
-                                Status = "",
-                                CreateTime = DateTime.Now
-                            });
-                            //记录排产记录
-                            curScheduleRsts.Add(new ScheduleResultOpMaster
-                            {
-                                Domain = domain,
-                                WorkOrd = workOrd.WorkOrd,
-                                Line = lineStart.Line,
-                                ItemNum = workOrd.ItemNum,
-                                Op = lineStart.Op,
-                                WorkDate = workStartTime.Date,
-                                WorkQty = residueQty,
-                                WorkStartTime = workStartTime,
-                                WorkEndTime = workEndTime,
-                                CreateTime = DateTime.Now
-                            });
                         }
                     }
                 }
@@ -607,12 +615,12 @@ namespace Business.ResourceExamineManagement
         /// <summary>
         /// 获取产线当天的开工时间,结束时间,有效工作时长,生产数量
         /// </summary>
-        /// <param name="rate">产线UPH</param>
+        /// <param name="lineStart">排产产线</param>
         /// <param name="startTime">产线排产开始时间</param>
         /// <param name="curCalendars"></param>
         /// <param name="curQtyDtls"></param>
         /// <returns></returns>
-        public LineScheduledDto GetScheduledPoint(decimal rate, DateTime startTime, List<ShopCalendarWorkCtr> curCalendars, List<QualityLineWorkDetail> curQtyDtls)
+        public LineScheduledDto GetScheduledPoint(LineStartDto lineStart, DateTime startTime, List<ShopCalendarWorkCtr> curCalendars, List<QualityLineWorkDetail> curQtyDtls)
         {
             LineScheduledDto scheduledDto = new LineScheduledDto();
             //当天排产开始时间
@@ -641,6 +649,15 @@ namespace Business.ResourceExamineManagement
                 span = item.EndPoint - item.StartPoint;
                 scheduledDto.EffTime += (decimal)span.TotalHours;
             }
+            //判断产线当天有没有加班
+            var curOccupyTimes = resourceOccupancyTimes.Where(p=> p.Resource == lineStart.Line && p.StartTime.GetValueOrDefault().Date == startTime.Date).ToList();
+            scheduledDto.EffTime += curOccupyTimes.Sum(p=> Convert.ToDecimal(p.Ufld1));
+            //判断当前产线的UPH
+            var curRunCrews = prodLineDetailRunCrews.Where(p=>p.ProdLineDetailRecID == lineStart.RecID).ToList();
+            //判断当前日期是否配置了UPH
+            var curLevel = curRunCrews.FirstOrDefault(p => p.StartDate.GetValueOrDefault().Date <= startTime.Date && p.EndDate.GetValueOrDefault().Date >= startTime.Date);
+            decimal rate = curLevel == null ? lineStart.Rate : curLevel.Rate;
+            scheduledDto.Rate = rate;
             //计算当天的产能
             scheduledDto.ProductQty = Math.Floor(scheduledDto.EffTime * rate);
             //计算班次
@@ -668,11 +685,13 @@ namespace Business.ResourceExamineManagement
             var lines = prodLines.Where(p => p.Part == workOrd.ItemNum && p.Op == op).OrderBy(p => p.Sequence).ToList();
             //获取第一条产线排产结束时间
             var schedule = allResults.Where(p => p.Line == lines[0].Line).OrderByDescending(p => p.WorkEndTime).FirstOrDefault();
-            actStart = schedule == null ? actStart : schedule.WorkEndTime;
+            actStart = schedule == null ? actStart : (schedule.WorkEndTime >= actStart ? schedule.WorkEndTime : actStart);
             //计算实际开工时间
-            var curCalendars = calendars.Where(p => p.ProdLine == lines[0].Line).ToList();
+            //产线工作日历:当前产线的工作日历+默认工作日历
+            var curCalendars = calendars.Where(p => p.ProdLine == lines[0].Line || string.IsNullOrEmpty(p.ProdLine)).ToList();
             var curQtyDtls = qualityLines.Where(p=>p.ProdLine == lines[0].Line).ToList();
             actStart = CalcActStartTime(actStart, curCalendars, curQtyDtls);
+            lineStart.RecID = lines[0].RecID;
             lineStart.Line = lines[0].Line;
             lineStart.StartTime = actStart;
             lineStart.setupTime = lines[0].SetupTime;
@@ -681,13 +700,15 @@ namespace Business.ResourceExamineManagement
             for (int i = 1; i < lines.Count; i++)
             {
                 schedule = allResults.Where(p => p.Line == lines[i].Line).OrderByDescending(p => p.WorkEndTime).FirstOrDefault();
-                DateTime StartTime = schedule == null ? actStart : schedule.WorkEndTime;
+                DateTime StartTime = schedule == null ? actStart : (schedule.WorkEndTime >= actStart ? schedule.WorkEndTime : actStart);
                 //计算实际开工时间
-                curCalendars = calendars.Where(p => p.ProdLine == lines[i].Line).ToList();
+                //产线工作日历:当前产线的工作日历+默认工作日历
+                curCalendars = calendars.Where(p => p.ProdLine == lines[i].Line || string.IsNullOrEmpty(p.ProdLine)).ToList();
                 curQtyDtls = qualityLines.Where(p => p.ProdLine == lines[i].Line).ToList();
                 StartTime = CalcActStartTime(StartTime, curCalendars, curQtyDtls);
                 if (StartTime < lineStart.StartTime)
                 {
+                    lineStart.RecID = lines[i].RecID;
                     lineStart.Line = lines[i].Line;
                     lineStart.StartTime = StartTime;
                     lineStart.setupTime = lines[i].SetupTime;
@@ -701,7 +722,7 @@ namespace Business.ResourceExamineManagement
         /// 计算主产线实际排产开始时间
         /// </summary>
         /// <param name="startTime">开始时间</param>
-        /// <param name="curCalendars">当前产线工作日历</param>
+        /// <param name="curCalendars">当前产线工作日历+默认工作日历</param>
         /// <param name="curQtyDtls">当前产线休息记录</param>
         /// <returns></returns>
         public DateTime CalcActStartTime(DateTime startTime, List<ShopCalendarWorkCtr> curCalendars, List<QualityLineWorkDetail> curQtyDtls)
@@ -720,7 +741,12 @@ namespace Business.ResourceExamineManagement
             }
 
             //当天的工作日历
-            var shopCal = curCalendars.Where(p => p.WeekDay == weekDay).First();
+            var shopCal = curCalendars.Where(p => !string.IsNullOrEmpty(p.ProdLine) && p.WeekDay == weekDay).FirstOrDefault();
+            if (shopCal == null)
+            {
+                //产线没有维护当天的工作日历,则取默认工作日历
+                shopCal = curCalendars.Where(p => string.IsNullOrEmpty(p.ProdLine) && p.WeekDay == weekDay).FirstOrDefault();
+            }
             //当前日期的工作时间段
             List<LineWorkPointDto> workPoints = DealWorkDayToLevels(startTime, shopCal, curQtyDtls);
             //计算starttime处于那个工作时间段
@@ -846,6 +872,7 @@ namespace Business.ResourceExamineManagement
             //获取第一条产线排产结束时间
             var schedule = allResults.Where(p => p.Line == lines[0].Line).OrderByDescending(p => p.WorkEndTime).FirstOrDefault();
             DateTime startTime = CalcStartTimeWithSetUpTime(lines[0], lineStart.StartTime, lineStart.setupTime + lines[0].OverlapTime);
+            startDto.RecID = lines[0].RecID;
             startDto.Line = lines[0].Line;
             startDto.setupTime = lines[0].SetupTime;
             startDto.StartTime = schedule == null ? startTime : (startTime < schedule.WorkEndTime ? schedule.WorkEndTime : startTime);
@@ -858,6 +885,7 @@ namespace Business.ResourceExamineManagement
                 startTime = schedule == null ? startTime : (startTime < schedule.WorkEndTime ? schedule.WorkEndTime : startTime);
                 if (startTime < startDto.StartTime)
                 {
+                    startDto.RecID = lines[i].RecID;
                     startDto.Line = lines[i].Line;
                     startDto.setupTime = lines[i].SetupTime;
                     startDto.StartTime = startTime;
@@ -883,7 +911,12 @@ namespace Business.ResourceExamineManagement
             //开始时间是周几
             int weekDay = (int)startTime.DayOfWeek;
             //当天的工作日历
-            var shopCal = calendars.Where(p => p.ProdLine == line.Line && p.WeekDay == weekDay).First();
+            var shopCal = calendars.Where(p => p.ProdLine == line.Line && p.WeekDay == weekDay).FirstOrDefault();
+            if (shopCal == null)
+            {
+                //产线没有维护当天的工作日历,则取默认工作日历
+                shopCal = calendars.Where(p => string.IsNullOrEmpty(p.ProdLine) && p.WeekDay == weekDay).FirstOrDefault();
+            }
             //当前产线的休息时间设置
             var curQtyDtls = qualityLines.Where(p => p.ProdLine == line.Line).ToList();
             //当前日期的工作时间段
@@ -923,10 +956,15 @@ namespace Business.ResourceExamineManagement
             while (flag)
             {
                 //获取下一个工作日
-                nextStartTime = GetNextWorkDay(weekDay, startTime, calendars.Where(p => p.ProdLine == line.Line).ToList());
+                nextStartTime = GetNextWorkDay(weekDay, startTime, calendars.Where(p => p.ProdLine == line.Line || string.IsNullOrEmpty(p.ProdLine)).ToList());
                 weekDay = (int)nextStartTime.DayOfWeek;
                 //获取前一个工作日的工作时间段数据,level顺排
-                workPoints = DealWorkDayToLevels(nextStartTime, calendars.Where(p=>p.ProdLine == line.Line && p.WeekDay == weekDay).First(), curQtyDtls).OrderBy(p => p.Level).ToList();
+                var curCalendar = calendars.Where(p => p.ProdLine == line.Line && p.WeekDay == weekDay).FirstOrDefault();
+                if (curCalendar == null )
+                {
+                    curCalendar = calendars.Where(p => string.IsNullOrEmpty(p.ProdLine) && p.WeekDay == weekDay).FirstOrDefault();
+                }
+                workPoints = DealWorkDayToLevels(nextStartTime, curCalendar, curQtyDtls).OrderBy(p => p.Level).ToList();
                 //当天的工作时长(分钟)
                 decimal sumWorkMins = workPoints.Sum(p => p.WorkMinutes);
                 if (sumWorkMins >= needMinute)//当天可用提前期满足
@@ -957,7 +995,7 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         /// <param name="weekDay">当前周几</param>
         /// <param name="startTime">开始时间</param>
-        /// <param name="curCalendars">当前产线的工作日历</param>
+        /// <param name="curCalendars">当前产线的工作日历+默认工作日历</param>
         /// <returns></returns>
         public DateTime GetNextWorkDay(int weekDay, DateTime startTime, List<ShopCalendarWorkCtr> curCalendars)
         {
@@ -996,44 +1034,6 @@ namespace Business.ResourceExamineManagement
             return rtnData;
         }
 
-        /// <summary>
-        /// 获取上一个工作日开始时间
-        /// </summary>
-        /// <param name="startTime">开始时间</param>
-        /// <param name="curCalendars">当前产线的工作日历</param>
-        /// <returns></returns>
-        public DateTime GetPreWorkDay(DateTime startTime, List<ShopCalendarWorkCtr> curCalendars)
-        {
-            DateTime rtnData = startTime;
-            //前一天
-            DateTime preDate = startTime.Date.AddDays(-1);
-            //前一天是周几
-            int preWeekDay = (int)preDate.DayOfWeek;
-            var calendar = curCalendars.FirstOrDefault(p => p.WeekDay == preWeekDay);
-            string strStart = calendar.ShiftsStart1.ToString("0.00").Replace(".", ":");
-            //判断前一天是否是工作日
-            if (preWeekDay == 0 || preWeekDay == 6)//前一天是周六或者周日,需要判断是否调班,需要加班
-            {
-                if (!holidays.Exists(p => p.Dated.GetValueOrDefault().Date == preDate && p.Ufld1 == "调班"))//前一天是非工作日
-                {
-                    //递归继续找上一个工作日
-                    rtnData = GetPreWorkDay(preDate, curCalendars);
-                    return rtnData;
-                }
-                rtnData = Convert.ToDateTime(preDate.ToString("yyyy-MM-dd") + " " + strStart);
-                return rtnData;
-            }
-            //前一天不是周六周日,需要判断是不是节假日
-            if (holidays.Exists(p => p.Dated.GetValueOrDefault().Date == preDate && p.Ufld1 == "休假"))//是节假日
-            {
-                //递归继续找前一个工作日
-                rtnData = GetPreWorkDay(preDate, curCalendars);
-                return rtnData;
-            }
-            rtnData = Convert.ToDateTime(preDate.ToString("yyyy-MM-dd") + " " + strStart);
-            return rtnData;
-        }
-
         /// <summary>
         /// 处理当前日期的工作时间段
         /// </summary>
@@ -1056,7 +1056,7 @@ namespace Business.ResourceExamineManagement
             string strStart = shopCal.ShiftsStart1.ToString("0.00").Replace(".", ":");
             DateTime dayStartPoint = Convert.ToDateTime(date + " " + strStart);
             //结束时间
-            DateTime dayEndPoint = CalcEndPoint(startTime, shopCal);
+            DateTime dayEndPoint = dayStartPoint.AddHours((double)(shopCal.ShiftsHours1 + shopCal.ShiftsHours2));
             dto.Level = level;
             dto.Line = shopCal.ProdLine;
             dto.WeekDay = weekDay;
@@ -1084,64 +1084,5 @@ namespace Business.ResourceExamineManagement
 
             return workPoints.OrderBy(p => p.Level).ToList();
         }
-
-        /// <summary>
-        /// 计算当前班次结束时间
-        /// </summary>
-        /// <param name="startTime"></param>
-        /// <param name="shopCal"></param>
-        /// <returns></returns>
-        public DateTime CalcEndPoint(DateTime startTime, ShopCalendarWorkCtr shopCal)
-        {
-            //年-月-日
-            string date = startTime.Date.ToString("yyyy-MM-dd");
-            string strStart = "";
-            DateTime dayStartPoint = DateTime.Now;
-            DateTime dayEndPoint = DateTime.Now;
-            if (shopCal.ShiftsStart2 != 0 && shopCal.ShiftsHours2 != 0)//设置了第二班
-            {
-                strStart = shopCal.ShiftsStart2.ToString("0.00").Replace(".", ":");
-                dayStartPoint = Convert.ToDateTime(date + " " + strStart);
-                dayEndPoint = dayStartPoint.AddHours(Convert.ToDouble(shopCal.ShiftsHours2));
-                return dayEndPoint;
-            }
-            strStart = shopCal.ShiftsStart1.ToString("0.00").Replace(".", ":");
-            dayStartPoint = Convert.ToDateTime(date + " " + strStart);
-            dayEndPoint = dayStartPoint.AddHours(Convert.ToDouble(shopCal.ShiftsHours1));
-            return dayEndPoint;
-        }
-
-        /// <summary>
-        /// 计算第一条产线开始时间
-        /// </summary>
-        /// <param name="workOrd">工单</param>
-        /// <param name="op">关键工序</param>
-        /// <param name="prodLines">产线明细</param>
-        /// <param name="scheduleResults">排产结果</param>
-        /// <returns></returns>
-        public LineStartDto CalcLineStart(WorkOrdMaster workOrd, int op, List<ProdLineDetail> prodLines, List<ScheduleResultOpMaster> scheduleResults)
-        {
-            LineStartDto dto = new LineStartDto();
-            //获取工序对应的产线,根据优先级排序
-            var lines = prodLines.Where(p => p.Part == workOrd.ItemNum && p.Op == op).OrderBy(p=>p.Sequence).ToList();
-            //第一条产线:使用工单OrdDate计算开始排产时间,不需要考虑提前期
-            //获取当前产线排产结束时间
-            var schedule = scheduleResults.Where(p => p.Line == lines[0].Line).OrderByDescending(p => p.WorkEndTime).FirstOrDefault();
-            dto.Line = lines[0].Line;
-            dto.Op = op;
-            dto.StartTime = schedule == null ? workOrd.OrdDate.GetValueOrDefault() : (schedule.WorkEndTime <= workOrd.OrdDate ? workOrd.OrdDate.GetValueOrDefault() : schedule.WorkEndTime);
-            //循环其他产线
-            for (int i = 1; i < lines.Count; i++)
-            {
-                schedule = scheduleResults.Where(p => p.Line == lines[i].Line).OrderByDescending(p => p.WorkEndTime).FirstOrDefault();
-                DateTime StartTime = schedule == null ? workOrd.OrdDate.GetValueOrDefault() : (schedule.WorkEndTime <= workOrd.OrdDate ? workOrd.OrdDate.GetValueOrDefault() : schedule.WorkEndTime);
-                if (StartTime < dto.StartTime)
-                {
-                    dto.Line = lines[i].Line;
-                    dto.StartTime = StartTime;
-                }
-            }
-            return dto;
-        }
     }
 }