Просмотр исходного кода

Merge branch 'dev' of http://123.60.180.165:4647/ZZYDOP/DOPCore into dev

Murphy 2 лет назад
Родитель
Сommit
3b7b07df55

+ 32 - 23
MicroServices/Business/Business.Application/ResourceExamineManagement/ProductionScheduleAppService.cs

@@ -525,50 +525,59 @@ namespace Business.ResourceExamineManagement
                         //获取计划日期在当前日期之后且已投产的日计划,将其计划开工日期改为当天
                         List<PeriodSequenceDet> wlSequenceDets = _periodSequenceDet.Select(p => p.Domain == domain  && sczWorkords.Contains(p.WorkOrds) && p.Status.ToUpper() == "W" && p.PlanDate > scheTime.Date).ToList();
                         List<ScheduleResultOpMaster> wlSchedules = new List<ScheduleResultOpMaster>();
+                        //获取当天的日计划
+                        List<PeriodSequenceDet> dtSequenceDets = _periodSequenceDet.Select(p => p.Domain == domain && sczWorkords.Contains(p.WorkOrds) && p.PlanDate == scheTime.Date).ToList();
+                        List<ScheduleResultOpMaster> dtScheduleResults = _scheduleResultOpMaster.Select(p => p.Domain == domain && sczWorkords.Contains(p.WorkOrd) && p.WorkDate == scheTime.Date).ToList();
+                        //需要更新的日计划
+                        List<PeriodSequenceDet> upSequenceDets = new List<PeriodSequenceDet>();
+                        List<ScheduleResultOpMaster> upScheduleResults = new List<ScheduleResultOpMaster>();
                         if (wlSequenceDets.Any())
                         {
                             var wlWorkords = wlSequenceDets.Select(p => p.WorkOrds).ToList();
                             var wlDate = wlSequenceDets.Select(p => p.PlanDate).ToList();
                             var wlOps = wlSequenceDets.Select(p => p.Op).ToList();
-
                             //更新计划日期为当前日期
                             foreach (var wlItem in wlSequenceDets)
                             {
                                 var curSche = _scheduleResultOpMaster.Select(p => p.Domain == domain && p.WorkOrd == wlItem.WorkOrds && p.WorkDate == wlItem.PlanDate && p.Op == wlItem.Op).FirstOrDefault();
                                 if (curSche != null)
                                 {
-                                    wlSchedules.Add(curSche);
+                                    //如果当天有日计划,则只需要更新计划数量
+                                    var cInfo = dtScheduleResults.FirstOrDefault(p => p.WorkOrd == wlItem.WorkOrds && p.WorkDate == scheTime.Date && p.Op == wlItem.Op);
+                                    if (cInfo != null)
+                                    {
+                                        cInfo.WorkQty = cInfo.WorkQty + curSche.WorkQty;
+                                        upScheduleResults.Add(cInfo);
+                                    }
+                                    else {
+                                        string strScheTime = scheTime.Date.ToString("yyyy-MM-dd");
+                                        curSche.WorkDate = scheTime.Date;
+                                        curSche.WorkStartTime = Convert.ToDateTime(curSche.WorkStartTime.ToString("yyyy-MM-dd HH:mm:ss").Replace(curSche.WorkStartTime.ToString("yyyy-MM-dd"), strScheTime));
+                                        curSche.WorkEndTime = Convert.ToDateTime(curSche.WorkEndTime.ToString("yyyy-MM-dd HH:mm:ss").Replace(curSche.WorkEndTime.ToString("yyyy-MM-dd"), strScheTime));
+                                        upScheduleResults.Add(curSche);
+                                    }
                                 }
-                                //更新日期
-                                wlItem.PlanDate = scheTime.Date;
-                                //更新数量
-                                var info = periodSequenceDtls.FirstOrDefault(p=>p.WorkOrds == wlItem.WorkOrds && p.PlanDate == scheTime.Date && p.Op == wlItem.Op);
+                                //如果当天有日计划,则只需要更新状态和计划数量
+                                var info = dtSequenceDets.FirstOrDefault(p=>p.WorkOrds == wlItem.WorkOrds && p.PlanDate == scheTime.Date && p.Op == wlItem.Op);
                                 if (info != null)
                                 {
-                                    wlItem.OrdQty = info.OrdQty;
+                                    info.OrdQty = info.OrdQty + wlItem.OrdQty;
+                                    info.Status = wlItem.Status;
+                                    upSequenceDets.Add(info);
                                 }
-                            }
-                            string strScheTime = scheTime.Date.ToString("yyyy-MM-dd");
-                            foreach (var wlItem in wlSchedules)
-                            {
-                                wlItem.WorkDate = scheTime.Date;
-                                wlItem.WorkStartTime = Convert.ToDateTime(wlItem.WorkStartTime.ToString("yyyy-MM-dd HH:mm:ss").Replace(wlItem.WorkStartTime.ToString("yyyy-MM-dd"), strScheTime));
-                                wlItem.WorkEndTime = Convert.ToDateTime(wlItem.WorkEndTime.ToString("yyyy-MM-dd HH:mm:ss").Replace(wlItem.WorkEndTime.ToString("yyyy-MM-dd"), strScheTime));
-                                //更新数量
-                                var info = scheduleMasters.FirstOrDefault(p => p.WorkOrd == wlItem.WorkOrd && p.WorkDate == scheTime.Date && p.Op == wlItem.Op);
-                                if (info != null)
-                                {
-                                    wlItem.WorkQty = info.WorkQty;
+                                else { //当天没有日计划,则更新计划日期
+                                    wlItem.PlanDate = scheTime.Date;
+                                    upSequenceDets.Add(wlItem);
                                 }
                             }
                             //更新过期日计划的计划开工日期
-                            if (wlSequenceDets.Any())
+                            if (upSequenceDets.Any())
                             {
-                                _periodSequenceDet.Update(wlSequenceDets);
+                                _periodSequenceDet.Update(upSequenceDets);
                             }
-                            if (wlSchedules.Any())
+                            if (upScheduleResults.Any())
                             {
-                                _scheduleResultOpMaster.Update(wlSchedules);
+                                _scheduleResultOpMaster.Update(upScheduleResults);
                             }
                         }
                         //删除当前日期下一天开始的工单排产记录

+ 37 - 0
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -3099,6 +3099,43 @@ namespace Business.ResourceExamineManagement
                     {
                         return "工单信息为"+ morders[0].morder_state + ",不允许下达。";
                     }
+                    var itemMs= _itemMaster.Select(x => x.ItemNum == morders[0].product_code && x.Domain == domain).FirstOrDefault();
+                    if (itemMs == null)
+                    {
+                        return "当前物料未未维护主数据,请先维护物料主数据。";
+                    }
+                    else
+                    {
+                        string msg = "";
+                        if (!string.IsNullOrEmpty(itemMs.PORcptStatus))
+                        {
+                            switch (itemMs.PORcptStatus.ToUpper())
+                            {
+                                case "01":
+                                    msg = "因采购/仓库而被冻结。";
+                                    break;
+                                case "02":
+                                    msg = "因任务清单/BOM而被冻结。";
+                                    break;
+                                case "81":
+                                    msg = "MPN:BOM抬头冻结";
+                                    break;
+                                case "CO":
+                                    msg = "未跑成本-财务冻结";
+                                    break;
+                                case "RS":
+                                    msg = "瑞奇物料冻结";
+                                    break;
+                                default:
+                                    msg = "未知冻结,类型:" + itemMs.PORcptStatus;
+                                    break;
+                            }
+                        }
+                        if (!string.IsNullOrEmpty(msg))
+                        {
+                            return msg;
+                        }
+                    }
                     try
                     {
                         //如果生成领料单,需清理掉当前工单的占用,然后根据领料单的数据,来生成工单的占用

+ 5 - 0
MicroServices/Business/Business.Domain/StructuredDB/MES/IC/ItemMaster.cs

@@ -155,5 +155,10 @@ namespace Business.Domain
         /// 物料类型
         /// </summary>
         public string Drawing { get; set; }
+
+        /// <summary>
+        /// 物料状态
+        /// </summary>
+        public string PORcptStatus { get; set; }
     }
 }