1
duhe
2023-07-11 560cbe48b5c63634ff351477e00c885c4e162f92
WebAPI/Controllers/SCGL/Èռƻ®¹ÜÀí/JIT_DayPlanPlatFormBillController.cs
@@ -776,8 +776,11 @@
                //取应发数量 FMustQty ä¸è¦å–值需求数量FNeedQty é¢†æ–™æ•°æ®
                string LLsql = string.Format(@"exec h_p_jit_PPBOMList '{0}'", fDayPlanFids);
                List<DayPlanPickedModel> DayPlanPickedModel = new List<DayPlanPickedModel>();
                LogService.Write("LLsql:" + LLsql);
                ds = oCN.RunProcReturn(LLsql, "SC_WORKBILLSORTBILLMAIN");
                LogService.Write(JsonConvert.SerializeObject(ds));
                DayPlanPickedModel = ds.ToModelList<DayPlanPickedModel>();
                LogService.Write(JsonConvert.SerializeObject(DayPlanPickedModel));
                //CompleteAnalysisTempModel ç”¨äºŽå­˜å‚¨ä¸´æ—¶éœ€è¦æ’入数据
                List<CompleteAnalysisTempModel> completeAnalysisTempModel = new List<CompleteAnalysisTempModel>();
                //创建字典 ç”¨äºŽå‚¨å­˜ç‰©æ–™ + å ç”¨æ•°é‡
@@ -786,8 +789,11 @@
                LogService.Write($"齐套分析,数据准备阶段,用时" + sw.Elapsed + "总需要循环的bom数量:" + DatePlanList.Count);
                //第一个循环 æ—¥è®¡åˆ’工单明细 ä¸€å¤©+一个工单 ä¸€ä¸ªå¾ªçޝ
                int o = 0;
                foreach (var item in DatePlanList)
                {
                    o++;
                    LogService.Write("循环:" + o);
                    //日计划用料清单明细 æ¯ä¸€å¤©çš„实际用料情况
                    var _BomList = BomList.Where(x => x.HMasterDate == item.HMasterDate && x.HICMOEntryID_Sec == item.HICMOEntryID_Sec).ToList();
                    //每一个物料进行库存计算
@@ -823,8 +829,9 @@
                        decimal planNeed = _item.PlanCount; //不参与计算 ç”¨äºŽè®°å½•
                        decimal need = _item.PlanCount;//参与计算
                        decimal FOccupyPickedCount = 0;//占用领料单数量
                        //找到领用数量
                                                       //找到领用数量
                        var _DayPlanPickedModel = DayPlanPickedModel.Where(c => c.FPRDMOENTYID == _item.HICMOEntryID_Sec && c.FMATERIALID == _item.FMATERIALID2).FirstOrDefault();
                        if (_DayPlanPickedModel.FRemainPickedQty >= need)
                        {
                            //领料数量满足了当前这个需求量 ç›´æŽ¥é½å¥— ä¸éœ€è¦åŽ»å ç”¨ä»“åº“
@@ -855,19 +862,24 @@
                            });
                            //扣除剩余可用领料数量
                            _DayPlanPickedModel.FRemainPickedQty -= need;
                            LogService.Write($"h" + need);
                            //循环下一个物料
                            continue;
                        }
                        else
                        {
                            LogService.Write($"kxs" + need);
                            need -= _DayPlanPickedModel.FRemainPickedQty; //剩余需求数量
                            LogService.Write($"i1" + need);
                            FOccupyPickedCount = _DayPlanPickedModel.FRemainPickedQty;
                            _DayPlanPickedModel.FRemainPickedQty = 0;
                            LogService.Write($"i" + need);
                        }
                        if (_pRD_WorkHouseCompar.Count > 0)
                        {
                            //缺料数量 éœ€æ±‚数量 - å®žé™…库存  >0 ? ä¸€ä¸ªç‰©æ–™ä¸ç®¡å ç”¨å¤šå°‘条 åº“å­˜+货主 æ•°æ® ç¼ºæ–™æ•°é‡æ˜¯åŒä¸€ä¸ªæ•°é‡
                            decimal _fLackCount = need > jskcQty ? (need - jskcQty) : 0;
                            LogService.Write($"j" + _fLackCount);
                            //LogHelper.Info("组织:" + _item.FStockOrgId + " ,及时库存" + jskcQty);
                            //总库存为0了 ç›´æŽ¥ç»™å‡º ç¼ºæ–™æ•°é‡
                            if (jskcQty == 0)
@@ -900,6 +912,8 @@
                                //终止该物料计算 è¿›å…¥ä¸‹ä¸€ä¸ª
                                continue;
                            }
                            LogService.Write($"k" + 2);
                            foreach (var WorkHouse in _pRD_WorkHouseCompar)
                            {
                                //库存数据匹配
@@ -1574,7 +1588,9 @@
                List<PODemandPlanTemp> PODemandPlanTemp = new List<PODemandPlanTemp>();
                //sql集合 æ›´æ–°é‡‡è´­è®¢å•占用的提料计划数量
                List<string> sqlList = new List<string>();
                string Error = "运算失败!";
                LogService.Write("1");
                string Error = "";
                foreach (var item in MaterialIDList)
                {
                    //当前物料没有采购订单时 ç›´æŽ¥è·³å‡º
@@ -1584,6 +1600,9 @@
                        Error+="[提料计划开始]当前物料无采购信息:" + item.FNumber + " åº“存组织:" + item.FStockOrgName + "      ";
                        continue;
                    }
                    LogService.Write("1.1");
                    ////LogHelper.Info(item.FMATERIALID.ToString());
                    //当前物料和库存组织对应的需进行提料计划的数据    
                    List<DayPlanPpbom> _DayPlanPpbom = DayPlanPpbom.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId).ToList();
@@ -1597,6 +1616,9 @@
                    DateTime DATE = _DayPlanPpbom.FirstOrDefault().FHMASTERDATE;//第一个订货起始日期
                    int i = 0;
                    //记录在最小采购量需求下的日计划明细FentyrID
                    LogService.Write("1.2");
                    List<int> FEntryIdList = new List<int>();
                    foreach (var _item in _DayPlanPpbom)
                    {
@@ -1607,13 +1629,25 @@
                            break;
                        }
                        LogService.Write("1.2.1");
                        if (NeedQty == 0)
                        {
                            DATE = Convert.ToDateTime(_item.FHMASTERDATE).AddDays(-FFIXLEADTIME);
                        }
                        FEntryIdList.Add(_item.FENTRYID);
                        NeedQty += _item.NeedQty;
                        if ((FJITmaterialGroup == "总量控制规格类" || FJITmaterialGroup == "订单专用个性类") && FEntryIdList.Count < Convert.ToInt32(FJITMaterielDemand) && i < _DayPlanPpbom.Count) //订单专用个性类
                        //LogService.Write(FJITmaterialGroup);
                        //LogService.Write(FEntryIdList.Count);
                        //LogService.Write(Convert.ToDouble(FJITMaterielDemand));
                        //LogService.Write(_DayPlanPpbom.Count);
                        //LogService.Write(i);
                        if ((FJITmaterialGroup == "总量控制规格类" || FJITmaterialGroup == "订单专用个性类") && FEntryIdList.Count < Convert.ToDouble(FJITMaterielDemand) && i < _DayPlanPpbom.Count) //订单专用个性类
                        {
                            continue;
                        }
                        LogService.Write("1.2.2");
                        foreach (var Purchase in _PurchaseInventory)
                        {
@@ -1657,6 +1691,9 @@
                                    //扣除日计划明细已被分配的数量
                                    DayPlanPpbomls.NeedQty = 0;
                                }
                                LogService.Write("1.2.3");
                                FEntryIdList.Clear();
                                //更新采购订单
                                //sqlList.Add($"/*dialect*/ update t_PUR_POOrderEntry set FPODemandPlanCount  =isnull(FPODemandPlanCount,0)+  '{NeedQty}' where FENTRYID = {Purchase.FENTRYID}");
@@ -1733,17 +1770,22 @@
                                }
                            }
                        }
                        LogService.Write("1.2.4");
                        NeedQty = 0;
                    }
                }
                //var PODemandPlanList222 = PODemandPlanTemp.GroupBy(p => new PODemandPlanTemp { PurchseFNUMBER = p.PurchseFNUMBER, FHMASTERDATE = p.FHMASTERDATE }).Select(x => new PODemandPlanTemp { PurchseFNUMBER = x.Key.PurchseFNUMBER, FHMASTERDATE = x.Key.FHMASTERDATE }).ToList();
                var PODemandPlanList = PODemandPlanTemp.GroupBy(p => new { p.PurchseFNUMBER, p.FHMASTERDATE }).Select(x => new PODemandPlanTemp { PurchseFNUMBER = x.Key.PurchseFNUMBER, FHMASTERDATE = x.Key.FHMASTERDATE }).ToList();
                //LogHelper.Info($"提料计划,数据准备完成,保存到Model实体,总行数:{PODemandPlanTemp.Count}");
                int tlmmm = 0;
                JArray FinalyResult = new JArray();
                LogService.Write("2");
                foreach (var item in PODemandPlanList)
                {
                    tlmmm++;
@@ -1915,12 +1957,22 @@
                    //    tlmmm++;
                }
                if (tlmmm == PODemandPlanList.Count && tlmmm != 0)
                LogService.Write("3");
                if (Error != "")
                {
                    oCN.Commit();
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "运算成功!" + Error;
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                else if (tlmmm == PODemandPlanList.Count && tlmmm != 0)
                {
                    oCN.Commit();
                    objJsonResult.code = "1";
                    objJsonResult.count = 1;
                    objJsonResult.Message = "运算成功!";
                    objJsonResult.Message = "运算成功!" + Error;
                    objJsonResult.data = null;
                    return objJsonResult;
                }
@@ -1929,7 +1981,7 @@
                    oCN.RollBack();//事务回滚
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = Error;
                    objJsonResult.Message = "运算失败!" + Error;
                    objJsonResult.data = null;
                    return objJsonResult;
                }
@@ -1938,11 +1990,11 @@
                //////LogHelper.Info("提料计划执行完成,运行总时长:" + sw.Elapsed);
                //DBServiceHelper.ExecuteBatch(Context, sqlList);
                objJsonResult.code = "1";
                objJsonResult.count = 1;
                objJsonResult.Message = "提料运算成功!";
                objJsonResult.data = null;
                return objJsonResult;
                //objJsonResult.code = "1";
                //objJsonResult.count = 1;
                //objJsonResult.Message = "提料运算成功!";
                //objJsonResult.data = null;
                //return objJsonResult;
            }
            catch (Exception e)
            {