| | |
| | | base.BarItemClick(e); |
| | | try |
| | | { |
| | | //LogService.Write("生产计划平台按钮:" + e.BarItemKey.ToUpper().ToString()); |
| | | if (e.BarItemKey.ToUpper() == "BTEXPORT") |
| | | { |
| | | ExportExcel(); |
| | |
| | | if (e.BarItemKey.ToUpper() == "TB_TONGBU") |
| | | { |
| | | TongBu(); |
| | | } |
| | | |
| | | //提料计划重算 |
| | | if (e.BarItemKey.ToUpper() == "TB_EXTRACTIONTL") |
| | | { |
| | | ExtractionTLPLAN(); |
| | | } |
| | | //要料计划重算 |
| | | if (e.BarItemKey.ToUpper() == "TB_EXTRACTIONYL") |
| | | { |
| | | ExtractionYLPLAN(); |
| | | } |
| | | //日计划用料清单 |
| | | if (e.BarItemKey.ToUpper() == "TB_DAYPLANBOM") |
| | |
| | | JOIN T_BAS_BILLTYPE_L B ON A.FBILLTYPEID =B.FBILLTYPEID |
| | | where FBILLFORMID in ('PRD_MO','SUB_SUBREQORDER') AND b.FLOCALEID = 2052)t4 on t1.FBILLTYPE =t4.FBILLTYPEID |
| | | WHERE T1.FBILLNO = '{2}' AND T2.FMATERIALID = '{3}' AND T2.FSEQ = '{4}'", FTempName, FTempNameEntry, Convert.ToString(current["FSCOrderNo"]), Convert.ToString(current["FMatrailId_Id"]), Convert.ToString(current["FSRCBILLENTRYSEQ"])); |
| | | //LogService.Write(sql); |
| | | DataTable dt = new DataTable(); |
| | | dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; |
| | | if (dt.Rows.Count == 0) |
| | |
| | | List<string> sqlList = new List<string>(); |
| | | DataTable insertDT = new DataTable(); |
| | | insertDT.TableName = "JIT_MOMaterReadysBill"; |
| | | insertDT.Columns.Add("FID", typeof(long)); |
| | | //insertDT.Columns.Add("FID", typeof(long)); |
| | | //insertDT.Columns.Add("FBILLNO", typeof(string)); |
| | | insertDT.Columns.Add("FDOCUMENTSTATUS", typeof(string)); |
| | | insertDT.Columns.Add("FHMAINICMOINTERIDR", typeof(long)); |
| | |
| | | foreach (var item in completeAnalysisTempModel) |
| | | { |
| | | DataRow dr = insertDT.NewRow(); |
| | | dr["FID"] = maxFid + jdtmmm; |
| | | //dr["FID"] = maxFid + jdtmmm; |
| | | //dr["FBILLNO"] = ""; |
| | | dr["FDOCUMENTSTATUS"] = "A"; |
| | | dr["FHMAINICMOINTERIDR"] = item.FHMainICMOInterIDr; |
| | |
| | | DBServiceHelper.BulkInserts(this.Context, string.Empty, string.Empty, insertDT); |
| | | LogService.Write("批量插入到数据库用时:" + sw.Elapsed); |
| | | //执行完成后 更新日计划工单状态 |
| | | DBServiceHelper.Execute(Context, @" |
| | | /*dialect*/update Sc_WorkBillSortBillSub set FComplete = '未齐套' where FEntryID IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBill where isnull(FCOMPLETE,'未齐套') ='未齐套') and FID IN (" + fDayPlanFids + ") "); |
| | | DBServiceHelper.Execute(Context, @" |
| | | /*dialect*/update Sc_WorkBillSortBillSub set FComplete = '齐套' where FEntryID NOT IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBill where isnull(FCOMPLETE,'未齐套') ='未齐套') and FID IN (" + fDayPlanFids + ") "); |
| | | // DBServiceHelper.Execute(Context, @" |
| | | ///*dialect*/update Sc_WorkBillSortBillSub set FComplete = '未齐套' where FEntryID IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBill where isnull(FCOMPLETE,'未齐套') ='未齐套') and FID IN (" + fDayPlanFids + ") "); |
| | | // DBServiceHelper.Execute(Context, @" |
| | | ///*dialect*/update Sc_WorkBillSortBillSub set FComplete = '齐套' where FEntryID NOT IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBill where isnull(FCOMPLETE,'未齐套') ='未齐套') and FID IN (" + fDayPlanFids + ") "); |
| | | //释放齐套操作 避免多人同时进行齐套分析 |
| | | DBServiceHelper.Execute(Context, $"/*dialect*/ update T_PRD_QTFX set FSTATUS = 0 where FPRDORGID ={fPrdOrgId} and FSTATUS = 1 "); |
| | | sw.Stop();//结束计时 |
| | |
| | | List<string> sqlList = new List<string>(); |
| | | DataTable insertDT = new DataTable(); |
| | | insertDT.TableName = "JIT_MOMaterReadysBillXn"; |
| | | insertDT.Columns.Add("FID", typeof(long)); |
| | | //insertDT.Columns.Add("FID", typeof(long)); |
| | | //insertDT.Columns.Add("FBILLNO", typeof(string)); |
| | | insertDT.Columns.Add("FDOCUMENTSTATUS", typeof(string)); |
| | | insertDT.Columns.Add("FHMAINICMOINTERIDR", typeof(long)); |
| | |
| | | foreach (var item in completeAnalysisTempModel) |
| | | { |
| | | DataRow dr = insertDT.NewRow(); |
| | | dr["FID"] = maxFid + jdtmmm; |
| | | //dr["FID"] = maxFid + jdtmmm; |
| | | //dr["FBILLNO"] = ""; |
| | | dr["FDOCUMENTSTATUS"] = "A"; |
| | | dr["FHMAINICMOINTERIDR"] = item.FHMainICMOInterIDr; |
| | |
| | | else |
| | | { |
| | | this.View.ShowMessage("请勾选数据"); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 提料计划进度条 |
| | | /// </summary> |
| | | [Obsolete] |
| | | private void ExtractionTLPLAN() |
| | | { |
| | | // 显示一个进度显示界面:显示一个不停滚动的模拟进度 |
| | | // bUseTruePro参数:是否显示真实的进度。 |
| | | // bUseTruePro = false : |
| | | // 显示一个不停滚动的模拟进度,与实际处理进度没有关联。 |
| | | // 此方案优点:实际处理代码无需计算进度 |
| | | // 此方案缺点:进度不准确,且进度页面不会自动关闭。 |
| | | // bUseTruePro = true: 进度界面显示真实进度 |
| | | // 此方案优点:进度真实 |
| | | // 此方案缺点:需要在处理代码中,不断的更新真实进度,更新语句 |
| | | // this.View.Session["ProcessRateValue"] = 100; |
| | | // 特别说明,当进度更新到100时,进度界面会自动关闭 |
| | | // 本案例选用此方案 |
| | | var processForm = this.View.ShowProcessForm( |
| | | new Action<FormResult>(t => { }), |
| | | true, |
| | | "正在生成,请稍候..."); |
| | | |
| | | // 开启一个异步线程,处理引入功能 |
| | | // using Kingdee.BOS.KDThread; |
| | | MainWorker.QuequeTask(() => |
| | | { |
| | | var resuult = ""; |
| | | try |
| | | { |
| | | // 需要捕获错误,以确保处理结束时,关闭进度滚动界面 |
| | | // 引入功能实际处理函数 |
| | | resuult = this.ExtractionTL(); |
| | | } |
| | | finally |
| | | { |
| | | // 确保标记进度已经到达100% |
| | | this.View.Session["ProcessRateValue"] = 100; |
| | | // 引入完毕,关闭进度显示页面 |
| | | var processView = this.View.GetView(processForm.PageId); |
| | | if (processView != null) |
| | | { |
| | | processView.Close(); |
| | | this.View.SendDynamicFormAction(processView); |
| | | } |
| | | this.View.ShowMessage(resuult); |
| | | } |
| | | }, |
| | | (t) => { }); |
| | | } |
| | | /// <summary> |
| | | /// 提料计划 |
| | | /// </summary> |
| | | public string ExtractionTL() |
| | | { |
| | | try |
| | | { |
| | | var fProWorkShopId = (this.Model.GetValue("FProWorkShopId") as DynamicObject)?["Id"].ToString(); |
| | | var fPrdOrgId = (this.Model.GetValue("FPRDOrgId") as DynamicObject)?["Id"].ToString(); |
| | | if (String.IsNullOrEmpty(fProWorkShopId) || String.IsNullOrEmpty(fPrdOrgId)) |
| | | { |
| | | return "请选择组织生产车间"; |
| | | } |
| | | LogService.Write($"车间:{fProWorkShopId},组织:{fPrdOrgId}"); |
| | | Stopwatch sw = new Stopwatch(); |
| | | sw.Start();//开始计时 |
| | | //提料计划预处理 清理提料计划单数据 更新采购订单提料计划数量 |
| | | string sql = string.Format($"/*dialect*/exec PRD_TLPLANYCL '{fProWorkShopId}','{fPrdOrgId}'"); |
| | | DBServiceHelper.Execute(Context, sql); |
| | | //采购订单数据 (剩余收料数量) |
| | | sql = @" |
| | | /*dialect*/ |
| | | select t1.FID,t1.FBillNo,t2.FENTRYID,t1.FSUPPLIERID,t3.fnumber,t2.FMATERIALID,(t4.FREMAINRECEIVEQTY-t2.FPODemandPlanCount)FQTY |
| | | ,FPurchaseOrgId FStockOrgId,t5.FNUMBER FORGNumber,FCloseStatus,FMRPCLOSESTATUS |
| | | ,'' FXQD,t1.FCREATORID,t8.FName ,t1.FDate,tD.FDeliveryDate,'' F_QIMB_NOTE,t2.FNOTE, |
| | | isnull((select top 1 FLEADTIME + FLEADTTIME2 from T_PRD_TLPlanConfig a |
| | | join T_PRD_TLPlanConfigEntry b on a.FID =b.FID |
| | | where a.FORGID = t1.FPurchaseOrgId and b.FSUPPLIERID = t1.FSUPPLIERID), 0)FFIXLEADTIME |
| | | from t_PUR_POOrder t1 |
| | | join t_PUR_POOrderEntry t2 on t1.FID = t2.FID |
| | | join t_BD_Supplier t3 on t1.FSUPPLIERID = t3.FSUPPLIERID |
| | | join T_PUR_POORDERENTRY_R t4 on t2.FENTRYID = t4.FENTRYID |
| | | join T_PUR_POORDERENTRY_D tD on t2.FENTRYID = tD.FENTRYID |
| | | join T_ORG_Organizations t5 on t1.FPurchaseOrgId = t5.FORGID |
| | | join T_SEC_user t8 on t1.FCREATORID = t8.FuserId |
| | | where t4.FREMAINRECEIVEQTY-t2.FPODemandPlanCount>0 |
| | | and FCloseStatus in('A') and FMRPCLOSESTATUS in('A') |
| | | and t1.FBillTypeID in('83d822ca3e374b4ab01e5dd46a0062bd','6d01d059713d42a28bb976c90a121142') |
| | | "; |
| | | LogService.Write("查询采购订单数据用时:" + sw.Elapsed); |
| | | List<PurchaseInventory> PurchaseInventory = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<PurchaseInventory>(); |
| | | ////LogHelper.Info("[提料计划准备阶段]可用采购订单数据sql:" + sql); |
| | | sql = string.Format(@" |
| | | /*dialect*/ |
| | | SELECT T1.FID,FHMASTERDATE,T1.FENTRYID,t2.FHSeOrderBillNo as FXQD,T1.FBILLNO, FNEEDQTY,0 as FFIXLEADTIME |
| | | ,FMAXPOQTY,0 as FMINPOQTY,0 as FJITMATERIALGROUP,0 as FJITMATERIELDEMAND,0 as FJITSAFESTOCK,T1.FMATERIALID,T6.FNUMBER,NEEDQTY, FSTOCKORGID ,FERPCLSID |
| | | FROM ( |
| | | SELECT FHICMOINTERID FID,FHICMOENTRYID FENTRYID,FPLANDATE FHMASTERDATE,FLACKCOUNT NEEDQTY,FHMATERID FMATERIALID,FHSTOCKORGID FSTOCKORGID,FPRDBILLNO FBILLNO,FSUMPLANCOUNT FNEEDQTY FROM JIT_MOMATERREADYSBILL A |
| | | RIGHT JOIN (SELECT MAX(FID)FID FROM JIT_MOMATERREADYSBILL GROUP BY FHICMOENTRYID,FHMATERID) B ON A.FID = B.FID |
| | | )T1 |
| | | JOIN Sc_WorkBillSortBillMain T2 ON T1.FID = T2.FID |
| | | JOIN T_BD_MATERIAL T6 ON T1.FMATERIALID = T6.FMATERIALID |
| | | JOIN T_BD_MATERIALBASE T4 ON T1.FMATERIALID = T4.FMATERIALID |
| | | JOIN T_BD_MATERIALPLAN T5 ON T1.FMATERIALID = T5.FMATERIALID |
| | | AND FERPCLSID IN ('1','3') |
| | | AND T1.NEEDQTY>0 |
| | | AND T1.FENTRYID NOT IN (SELECT DISTINCT FHSOURCEENTRYID FROM CG_PODEMANDPLANBILLSUB) |
| | | AND T2.FHPRDORGID='{0}' |
| | | AND T2.FHWORKSHOPID = '{1}' |
| | | ORDER BY FHMASTERDATE |
| | | ", fPrdOrgId, fProWorkShopId); |
| | | ////LogHelper.Info("[提料计划准备阶段]需要提料数据sql:" + sql); |
| | | DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql); |
| | | List<DayPlanPpbom> DayPlanPpbom = ds.ToModelList<DayPlanPpbom>(); |
| | | //物料+库存组织分类 |
| | | var MaterialIDList = DayPlanPpbom.GroupBy(p => new { p.FMATERIALID, p.FStockOrgId }).Select(x => new PODemandPlanTemp { FMATERIALID = x.Key.FMATERIALID, FStockOrgId = x.Key.FStockOrgId }).ToList(); |
| | | //var _MaterialIDList = MaterialIDList.Where(p => p.FMATERIALID == "163165").ToList(); |
| | | //提料计划数据集临时存储集合 |
| | | List<PODemandPlanTemp> PODemandPlanTemp = new List<PODemandPlanTemp>(); |
| | | //sql集合 更新采购订单占用的提料计划数量 |
| | | List<string> sqlList = new List<string>(); |
| | | //MaterialIDList = new List<string> { "105773" }; |
| | | int i = 1;//用于进度条加载 |
| | | foreach (var item in MaterialIDList) |
| | | { |
| | | this.View.Session["ProcessRateValue"] = Convert.ToInt32((Convert.ToDecimal(80) / MaterialIDList.Count) * i); |
| | | //当前物料没有采购订单时 直接跳出 |
| | | List<PurchaseInventory> _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).OrderBy(x => x.FENTRYID).ToList(); |
| | | if (_PurchaseInventory.Count == 0) |
| | | { |
| | | LogHelper.Info("[提料计划开始]当前物料无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId); |
| | | continue; |
| | | } |
| | | //当前物料和库存组织对应的需进行提料计划的数据 |
| | | List<DayPlanPpbom> _DayPlanPpbom = DayPlanPpbom.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId).ToList(); |
| | | //decimal FMINPOQTY = _DayPlanPpbom.FirstOrDefault().FMINPOQTY;//最小起订量 |
| | | //double FFIXLEADTIME = _DayPlanPpbom.FirstOrDefault().FFIXLEADTIME;//提前期 |
| | | //string FJITmaterialGroup = _DayPlanPpbom.FirstOrDefault().FJITmaterialGroup;//jit物料分类 |
| | | //string FJITMaterielDemand = _DayPlanPpbom.FirstOrDefault().FJITMaterielDemand; //JIT物料需求供货周期 |
| | | //string FJITSafeStock = _DayPlanPpbom.FirstOrDefault().FJITSafeStock; //JIT安全库存 |
| | | decimal NeedQty = 0; |
| | | //DateTime DATE = _DayPlanPpbom.FirstOrDefault().FHMASTERDATE;//第一个订货起始日期 |
| | | //记录在最小采购量需求下的日计划明细FentyrID |
| | | List<int> FEntryIdList = new List<int>(); |
| | | foreach (var _item in _DayPlanPpbom) |
| | | { |
| | | _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).OrderBy(x => x.FENTRYID).ToList(); |
| | | if (_PurchaseInventory.Count == 0) |
| | | { |
| | | LogHelper.Info("[提料计划开始]生产订单号:" + item.FBILLNO + ",当前物料明细无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId); |
| | | break; |
| | | } |
| | | FEntryIdList.Add(_item.FENTRYID); |
| | | NeedQty += _item.NeedQty; |
| | | //增加一个销售订单号匹配的逻辑 优先循环 |
| | | var PurchaseInventoryElse = _PurchaseInventory.Where(x => x.FXQD != _item.FXQD).OrderBy(x => x.FENTRYID).ToList(); |
| | | foreach (var Purchase in PurchaseInventoryElse) |
| | | { |
| | | double _FFIXLEADTIME = Purchase.FFIXLEADTIME;//提前期 |
| | | DateTime _DATE = Convert.ToDateTime(_item.FHMASTERDATE).AddDays(-_FFIXLEADTIME); |
| | | ////LogHelper.Info("采购订单号测试:" + Purchase.FBillNo); |
| | | ////LogHelper.Info("物料:" + Purchase.FMATERIALID + ",采购订单数量:" + Purchase.FQTY); |
| | | if (Purchase.FQTY >= NeedQty) |
| | | { |
| | | foreach (int id in FEntryIdList) |
| | | { |
| | | var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault(); |
| | | PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp |
| | | { |
| | | FID = DayPlanPpbomls.FID, |
| | | FHMASTERDATE = _DATE, |
| | | FQty = DayPlanPpbomls.NeedQty, |
| | | FBILLNO = DayPlanPpbomls.FBILLNO, |
| | | FENTRYID = DayPlanPpbomls.FENTRYID, |
| | | FMATERIALID = DayPlanPpbomls.FMATERIALID, |
| | | FNumber = DayPlanPpbomls.FNumber, |
| | | OLDDATE = DayPlanPpbomls.FHMASTERDATE, |
| | | FFIXLEADTIME = _FFIXLEADTIME, |
| | | FErpClsID = DayPlanPpbomls.FErpClsID, |
| | | |
| | | PurchseFID = Purchase.FID, |
| | | PurchseFentryID = Purchase.FENTRYID, |
| | | FSUPPLIERID = Purchase.FSUPPLIERID, |
| | | PurchseFNUMBER = Purchase.FNUMBER, |
| | | PurchseFBillNo = Purchase.FBillNo, |
| | | PurchseFqty = Purchase.FQTY, |
| | | FStockOrgId = Purchase.FStockOrgId, //采购组织 |
| | | FORGNumber = Purchase.FORGNumber, |
| | | |
| | | FXQD = Purchase.FXQD, |
| | | FCREATORID = Purchase.FCREATORID, |
| | | FName = Purchase.FName, |
| | | FDate = Purchase.FDate, |
| | | FDeliveryDate = Purchase.FDeliveryDate, |
| | | F_QIMB_NOTE = Purchase.F_QIMB_NOTE, |
| | | FNOTE = Purchase.FNOTE |
| | | }); |
| | | //扣除日计划明细已被分配的数量 |
| | | DayPlanPpbomls.NeedQty = 0; |
| | | } |
| | | FEntryIdList.Clear(); |
| | | //更新采购订单 |
| | | sqlList.Add($"/*dialect*/ update t_PUR_POOrderEntry set FPODemandPlanCount =isnull(FPODemandPlanCount,0)+ '{NeedQty}' where FENTRYID = {Purchase.FENTRYID}"); |
| | | //扣除当前行对应采购订单数量 |
| | | var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault(); |
| | | ls.FQTY -= NeedQty; |
| | | break; |
| | | } |
| | | else |
| | | { |
| | | //更新总需求数量 |
| | | NeedQty = NeedQty - Purchase.FQTY; |
| | | //采购订单数量 |
| | | decimal _NeedQty = Purchase.FQTY; |
| | | List<int> mmm = new List<int>(); |
| | | foreach (int id in FEntryIdList) |
| | | { |
| | | var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault(); |
| | | decimal Qty = DayPlanPpbomls.NeedQty;//订单数量 |
| | | //if (Qty == 0) |
| | | // //LogHelper.Info("订单数量为0"); |
| | | if (Qty > _NeedQty) |
| | | Qty = _NeedQty; //订单数量>采购订单数量 取采购订单 |
| | | |
| | | //if (_NeedQty == 0) |
| | | // //LogHelper.Info("订单数量为0"); |
| | | |
| | | _NeedQty = _NeedQty - Qty; |
| | | PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp |
| | | { |
| | | FID = DayPlanPpbomls.FID, |
| | | FHMASTERDATE = _DATE, |
| | | FQty = Qty, |
| | | FBILLNO = DayPlanPpbomls.FBILLNO, |
| | | FENTRYID = DayPlanPpbomls.FENTRYID, |
| | | FMATERIALID = DayPlanPpbomls.FMATERIALID, |
| | | FNumber = DayPlanPpbomls.FNumber, |
| | | OLDDATE = DayPlanPpbomls.FHMASTERDATE, |
| | | FFIXLEADTIME = _FFIXLEADTIME, |
| | | FErpClsID = DayPlanPpbomls.FErpClsID, |
| | | |
| | | PurchseFID = Purchase.FID, |
| | | PurchseFentryID = Purchase.FENTRYID, |
| | | FSUPPLIERID = Purchase.FSUPPLIERID, |
| | | PurchseFNUMBER = Purchase.FNUMBER, |
| | | PurchseFBillNo = Purchase.FBillNo, |
| | | PurchseFqty = Purchase.FQTY, |
| | | FStockOrgId = Purchase.FStockOrgId, //采购组织 |
| | | FORGNumber = Purchase.FORGNumber, |
| | | |
| | | FXQD = Purchase.FXQD, |
| | | FCREATORID = Purchase.FCREATORID, |
| | | FName = Purchase.FName, |
| | | FDate = Purchase.FDate, |
| | | FDeliveryDate = Purchase.FDeliveryDate, |
| | | F_QIMB_NOTE = Purchase.F_QIMB_NOTE, |
| | | FNOTE = Purchase.FNOTE |
| | | }); |
| | | //更新计划数量(剩余需要排的) 继续去计算下一个采购订单 |
| | | DayPlanPpbomls.NeedQty -= Qty; |
| | | //更新采购订单 |
| | | sqlList.Add($"/*dialect*/ update t_PUR_POOrderEntry set FPODemandPlanCount = isnull(FPODemandPlanCount,0)+ '{Qty}' where FENTRYID = {Purchase.FENTRYID}"); |
| | | //更新Model |
| | | var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault(); |
| | | ls.FQTY -= Qty; |
| | | if (_NeedQty <= 0) |
| | | { |
| | | foreach (var mm in mmm) |
| | | { |
| | | FEntryIdList.Remove(mm); |
| | | } |
| | | break; |
| | | } |
| | | mmm.Add(id); |
| | | } |
| | | //foreach (var mm in mmm) |
| | | //{ |
| | | // FEntryIdList.Remove(mm); |
| | | //} |
| | | } |
| | | } |
| | | if (NeedQty > 0) |
| | | { |
| | | LogHelper.Info("[提料计划开始]生产订单号:" + item.FBILLNO + ",当前物料:" + item.FMATERIALID + "需求数量:" + _item.NeedQty + " ,占用采购订单后数量剩余:" + NeedQty); |
| | | } |
| | | NeedQty = 0; |
| | | } |
| | | i++; |
| | | } |
| | | var PODemandPlanList = PODemandPlanTemp.GroupBy(p => new { p.PurchseFNUMBER, p.FHMASTERDATE }).Select(x => new PODemandPlanTemp { PurchseFNUMBER = x.Key.PurchseFNUMBER, FHMASTERDATE = x.Key.FHMASTERDATE }).ToList(); |
| | | LogService.Write("提料计划,数据准备完成,保存到Model实体 用时:" + sw.Elapsed + "总行数:" + PODemandPlanTemp.Count); |
| | | //LogHelper.Info($"提料计划,数据准备完成,保存到Model实体,总行数:{PODemandPlanTemp.Count}"); |
| | | int tlmmm = 1; |
| | | JArray FinalyResult = new JArray(); |
| | | foreach (var item in PODemandPlanList) |
| | | { |
| | | this.View.Session["ProcessRateValue"] = 80 + Convert.ToInt32((Convert.ToDecimal(20) / PODemandPlanList.Count) * tlmmm); |
| | | DateTime date = item.FHMASTERDATE; |
| | | string PurchseFNUMBER = item.PurchseFNUMBER; |
| | | JObject model = new JObject(); |
| | | model.Add("FHDate", date); |
| | | model.Add("FSettleCurrId", new JObject() { ["Fnumber"] = "PRE001" }); |
| | | model.Add("FSupplierID", new JObject() { ["Fnumber"] = PurchseFNUMBER }); |
| | | |
| | | JArray Fentity = new JArray(); |
| | | List<PODemandPlanTemp> _PODemandPlanList = PODemandPlanTemp.Where(x => x.FHMASTERDATE == date && x.PurchseFNUMBER == PurchseFNUMBER).ToList(); |
| | | LogHelper.Info("测试listmodel:" + _PODemandPlanList[0].FORGNumber.ToString()); |
| | | foreach (var _item in _PODemandPlanList) |
| | | { |
| | | if (!model.ToString().Contains("FHPURCHASEORGID")) |
| | | model.Add("FHPURCHASEORGID", new JObject() { ["Fnumber"] = _item.FORGNumber }); |
| | | JObject FentityModel = new JObject(); |
| | | FentityModel.Add("FHMaterID", new JObject() { ["Fnumber"] = _item.FNumber });//物料 |
| | | FentityModel.Add("FHQty", _item.FQty);//数量 |
| | | FentityModel.Add("FHSourceInterID", _item.FID);//日计划工单FID |
| | | FentityModel.Add("FHSourceEntryID", _item.FENTRYID);//日计划工单FENTRYID |
| | | FentityModel.Add("FHSourceBillNo", _item.FBILLNO);//日计划工单单号 |
| | | FentityModel.Add("FHSourceBillType", "");//日计划工单类型 |
| | | FentityModel.Add("FDayPlanDate", _item.OLDDATE);//日计划工单类型 |
| | | FentityModel.Add("FHRelationQty", _item.PurchseFqty);//关联数量 |
| | | FentityModel.Add("FFIXLEADTIME", _item.FFIXLEADTIME);//提前期 |
| | | FentityModel.Add("FPURCHASEORGID", new JObject() { ["Fnumber"] = _item.FORGNumber });//采购组织 |
| | | FentityModel.Add("FHPOOrderInterID", _item.PurchseFID);// 采购订单内码:FHPOOrderInterID |
| | | FentityModel.Add("FHPOOrderEntryID", _item.PurchseFentryID); //采购订单子内码:FHPOOrderEntryID |
| | | FentityModel.Add("FHPOOrderBillNo", _item.PurchseFBillNo); //采购订单号:FHPOOrderBillNo |
| | | FentityModel.Add("FERPCLSID", _item.FErpClsID); //发料方式 |
| | | FentityModel.Add("FUnitID", new JObject() { ["Fnumber"] = "Pcs" }); //发料方式 |
| | | |
| | | FentityModel.Add("FSalOrderNo", _item.FXQD); //需求单号 |
| | | FentityModel.Add("FCgddCreaterId", new JObject() { ["FUserID"] = _item.FCREATORID }); //采购员 |
| | | FentityModel.Add("FCgDate", _item.FDate); //采购订单单据日期 |
| | | FentityModel.Add("FCgDeliveryDate", _item.FDeliveryDate); //采购订单交货日期 |
| | | FentityModel.Add("F_QIMB_NOTE", _item.F_QIMB_NOTE); //采购订单摘要 |
| | | FentityModel.Add("FNOTE", _item.FNOTE); //采购订单表体备注 |
| | | |
| | | Fentity.Add(FentityModel); |
| | | } |
| | | model.Add("FEntity", Fentity); |
| | | FinalyResult.Add(model); |
| | | if ((tlmmm >= 20 || tlmmm == PODemandPlanList.Count) && (tlmmm % 20 == 0 || tlmmm == PODemandPlanList.Count)) |
| | | { |
| | | //LogHelper.Info("提料计划新增批量执行,记录循环的当前条数" + tlmmm); |
| | | JObject jsonRoot = new JObject() |
| | | { |
| | | ["Creator"] = "", |
| | | ["NeedUpDateFields"] = new JArray(), |
| | | ["NeedReturnFields"] = new JArray(), |
| | | ["IsDeleteEntry"] = "false", |
| | | ["SubSystemId"] = "", |
| | | ["IsVerifyBaseDataField"] = "false", |
| | | ["Model"] = FinalyResult |
| | | }; |
| | | LogService.Write(jsonRoot.ToString()); |
| | | CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); |
| | | var result = cloudClient.BatchSave("paez_PODemandPlan", jsonRoot.ToString()); |
| | | JObject saveObj = JObject.Parse(result); |
| | | string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); |
| | | if (saveIsSuc != "TRUE") |
| | | { |
| | | this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString()); |
| | | } |
| | | FinalyResult = new JArray(); |
| | | } |
| | | tlmmm++; |
| | | } |
| | | LogService.Write("调用webapi 用时:" + sw.Elapsed + "总行数:" + PODemandPlanTemp.Count); |
| | | sw.Stop();//结束计时 |
| | | DBServiceHelper.ExecuteBatch(Context, sqlList); |
| | | return "操作成功"; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogService.Write("提料计划跳出:" + ex.Message.ToString()); |
| | | return ex.Message.ToString(); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 要料计划进度条 |
| | | /// </summary> |
| | | [Obsolete] |
| | | private void ExtractionYLPLAN() |
| | | { |
| | | // 显示一个进度显示界面:显示一个不停滚动的模拟进度 |
| | | // bUseTruePro参数:是否显示真实的进度。 |
| | | // bUseTruePro = false : |
| | | // 显示一个不停滚动的模拟进度,与实际处理进度没有关联。 |
| | | // 此方案优点:实际处理代码无需计算进度 |
| | | // 此方案缺点:进度不准确,且进度页面不会自动关闭。 |
| | | // bUseTruePro = true: 进度界面显示真实进度 |
| | | // 此方案优点:进度真实 |
| | | // 此方案缺点:需要在处理代码中,不断的更新真实进度,更新语句 |
| | | // this.View.Session["ProcessRateValue"] = 100; |
| | | // 特别说明,当进度更新到100时,进度界面会自动关闭 |
| | | // 本案例选用此方案 |
| | | var processForm = this.View.ShowProcessForm( |
| | | new Action<FormResult>(t => { }), |
| | | true, |
| | | "正在生成,请稍候..."); |
| | | |
| | | // 开启一个异步线程,处理引入功能 |
| | | // using Kingdee.BOS.KDThread; |
| | | MainWorker.QuequeTask(() => |
| | | { |
| | | var resuult = ""; |
| | | try |
| | | { |
| | | // 需要捕获错误,以确保处理结束时,关闭进度滚动界面 |
| | | // 引入功能实际处理函数 |
| | | resuult = this.ExtractionYL(); |
| | | } |
| | | finally |
| | | { |
| | | // 确保标记进度已经到达100% |
| | | this.View.Session["ProcessRateValue"] = 100; |
| | | // 引入完毕,关闭进度显示页面 |
| | | var processView = this.View.GetView(processForm.PageId); |
| | | if (processView != null) |
| | | { |
| | | processView.Close(); |
| | | this.View.SendDynamicFormAction(processView); |
| | | } |
| | | this.View.ShowMessage(resuult); |
| | | } |
| | | }, |
| | | (t) => { }); |
| | | } |
| | | /// <summary> |
| | | /// 要料计划 |
| | | /// </summary> |
| | | public string ExtractionYL() |
| | | { |
| | | try |
| | | { |
| | | Stopwatch sw = new Stopwatch(); |
| | | sw.Start();//开始计时 |
| | | |
| | | var fProWorkShopId = (this.Model.GetValue("FProWorkShopId") as DynamicObject)?["Id"].ToString(); |
| | | var fPrdOrgId = (this.Model.GetValue("FPRDOrgId") as DynamicObject)?["Id"].ToString(); |
| | | if (String.IsNullOrEmpty(fProWorkShopId) || String.IsNullOrEmpty(fPrdOrgId)) |
| | | { |
| | | //this.View.ShowErrMessage("请选择组织和生生产车间"); |
| | | return "请选择组织和生生产车间"; |
| | | } |
| | | string sql = string.Format($"/*dialect*/exec PRD_YLPLANYCL '{fProWorkShopId}','{fPrdOrgId}'"); |
| | | DBServiceHelper.Execute(Context, sql); |
| | | //生产订单数据(取生产订单未入库数量) |
| | | sql = @" |
| | | /*DIALECT*/ |
| | | SELECT T1.FID,T1.FBILLNO,T2.FENTRYID,T2.FWORKSHOPID AS FSUPPLIERID,T3.FNUMBER,T2.FMATERIALID,(TQ.FNOSTOCKINQTY-T2.FPODEMANDPLANCOUNT)FQTY |
| | | ,T1.FPRDORGID FSTOCKORGID,T5.FNUMBER FORGNUMBER,'' FXQD,T1.FCREATORID,T8.FNAME ,T1.FDATE,'' AS F_QIMB_NOTE,'' AS FNOTE,0 AS FFIXLEADTIME |
| | | FROM T_PRD_MO T1 |
| | | JOIN T_PRD_MOENTRY T2 ON T1.FID = T2.FID |
| | | JOIN T_PRD_MOENTRY_Q TQ ON T2.FENTRYID = TQ.FENTRYID |
| | | JOIN T_BD_DEPARTMENT T3 ON T2.FWORKSHOPID = T3.FDEPTID |
| | | JOIN T_ORG_ORGANIZATIONS T5 ON T1.FPRDORGID = T5.FORGID |
| | | JOIN T_SEC_USER T8 ON T1.FCREATORID = T8.FUSERID |
| | | WHERE TQ.FNOSTOCKINQTY-T2.FPODEMANDPLANCOUNT>0 |
| | | |
| | | "; |
| | | List<PurchaseInventory> PurchaseInventory = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<PurchaseInventory>(); |
| | | sql = string.Format(@" |
| | | /*dialect*/ |
| | | SELECT T1.FID,FHMASTERDATE,T1.FENTRYID,t2.FHSeOrderBillNo as FXQD,T1.FBILLNO, FNEEDQTY,0 as FFIXLEADTIME |
| | | ,FMAXPOQTY,0 as FMINPOQTY,0 as FJITMATERIALGROUP,0 as FJITMATERIELDEMAND,0 as FJITSAFESTOCK,T1.FMATERIALID,T6.FNUMBER,NEEDQTY, FSTOCKORGID ,FERPCLSID |
| | | FROM ( |
| | | SELECT FHICMOINTERID FID,FHICMOENTRYID FENTRYID,FPLANDATE FHMASTERDATE,FLACKCOUNT NEEDQTY,FHMATERID FMATERIALID,FHSTOCKORGID FSTOCKORGID,FPRDBILLNO FBILLNO,FSUMPLANCOUNT FNEEDQTY FROM JIT_MOMATERREADYSBILL A |
| | | RIGHT JOIN (SELECT MAX(FID)FID FROM JIT_MOMATERREADYSBILL GROUP BY FHICMOENTRYID,FHMATERID) B ON A.FID = B.FID |
| | | )T1 |
| | | JOIN Sc_WorkBillSortBillMain T2 ON T1.FID = T2.FID |
| | | JOIN T_BD_MATERIAL T6 ON T1.FMATERIALID = T6.FMATERIALID |
| | | JOIN T_BD_MATERIALBASE T4 ON T1.FMATERIALID = T4.FMATERIALID |
| | | JOIN T_BD_MATERIALPLAN T5 ON T1.FMATERIALID = T5.FMATERIALID |
| | | where FERPCLSID IN ('2') |
| | | AND T1.NEEDQTY>0 |
| | | AND T1.FENTRYID NOT IN (SELECT DISTINCT FHSOURCEENTRYID FROM t_Prd_ProductPlanEntry) |
| | | AND T2.FHPRDORGID='{0}' |
| | | AND T2.FHWORKSHOPID = '{1}' |
| | | ORDER BY FHMASTERDATE |
| | | ", fPrdOrgId, fProWorkShopId); |
| | | DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql); |
| | | List<DayPlanPpbom> DayPlanPpbom = ds.ToModelList<DayPlanPpbom>(); |
| | | //物料+库存组织分类 |
| | | var MaterialIDList = DayPlanPpbom.GroupBy(p => new { p.FMATERIALID, p.FStockOrgId }).Select(x => new PODemandPlanTemp { FMATERIALID = x.Key.FMATERIALID, FStockOrgId = x.Key.FStockOrgId }).ToList(); |
| | | var _MaterialIDList = MaterialIDList.Where(p => p.FMATERIALID == "163165").ToList(); |
| | | ////LogService.Write("[提料计划准备阶段]总物料行数" + MaterialIDList.Count); |
| | | //提料计划数据集临时存储集合 |
| | | List<PODemandPlanTemp> PODemandPlanTemp = new List<PODemandPlanTemp>(); |
| | | //sql集合 更新采购订单占用的提料计划数量 |
| | | List<string> sqlList = new List<string>(); |
| | | //MaterialIDList = new List<string> { "105773" }; |
| | | int i = 1;//用于进度条加载 |
| | | foreach (var item in MaterialIDList) |
| | | { |
| | | this.View.Session["ProcessRateValue"] = Convert.ToInt32((Convert.ToDecimal(80) / MaterialIDList.Count) * i); |
| | | //当前物料没有采购订单时 直接跳出 |
| | | List<PurchaseInventory> _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).OrderBy(x => x.FENTRYID).ToList(); |
| | | if (_PurchaseInventory.Count == 0) |
| | | { |
| | | LogService.Write($"物料:{ item.FMATERIALID},需求单号:{item.FXQD},生产订单号:{item.FBILLNO},日计划工单FID:{item.FID}...未找到对应生产订单信息"); |
| | | continue; |
| | | } |
| | | ////LogService.Write(item.FMATERIALID.ToString()); |
| | | //当前物料和库存组织对应的需进行提料计划的数据 |
| | | List<DayPlanPpbom> _DayPlanPpbom = DayPlanPpbom.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId).ToList(); |
| | | //decimal FMINPOQTY = _DayPlanPpbom.FirstOrDefault().FMINPOQTY;//最小起订量 |
| | | //double FFIXLEADTIME = _DayPlanPpbom.FirstOrDefault().FFIXLEADTIME;//提前期 |
| | | //string FJITmaterialGroup = _DayPlanPpbom.FirstOrDefault().FJITmaterialGroup;//jit物料分类 |
| | | //string FJITMaterielDemand = _DayPlanPpbom.FirstOrDefault().FJITMaterielDemand; //JIT物料需求供货周期 |
| | | //string FJITSafeStock = _DayPlanPpbom.FirstOrDefault().FJITSafeStock; //JIT安全库存 |
| | | decimal NeedQty = 0; |
| | | //DateTime DATE = _DayPlanPpbom.FirstOrDefault().FHMASTERDATE;//第一个订货起始日期 |
| | | //记录在最小采购量需求下的日计划明细FentyrID |
| | | List<int> FEntryIdList = new List<int>(); |
| | | foreach (var _item in _DayPlanPpbom) |
| | | { |
| | | var PurchaseInventory_scdd = _PurchaseInventory.Where(x => x.FQTY > 0).OrderBy(x => x.FENTRYID).ToList(); |
| | | if (PurchaseInventory_scdd.Count == 0) |
| | | { |
| | | LogService.Write($"物料:{ _item.FMATERIALID},需求单号:{item.FXQD},生产订单号:{_item.FBILLNO},日计划工单FID:{_item.FID}...生产订单数量已被占用完"); |
| | | break; |
| | | } |
| | | FEntryIdList.Add(_item.FENTRYID); |
| | | NeedQty += _item.NeedQty; |
| | | //增加一个销售订单号匹配的逻辑 优先循环 |
| | | if (PurchaseInventory_scdd.Count > 0) |
| | | { |
| | | foreach (var Purchase in PurchaseInventory_scdd) |
| | | { |
| | | double _FFIXLEADTIME = Purchase.FFIXLEADTIME;//提前期 |
| | | DateTime _DATE = Convert.ToDateTime(_item.FHMASTERDATE).AddDays(-_FFIXLEADTIME); |
| | | ////LogService.Write("采购订单号测试:" + Purchase.FBillNo); |
| | | ////LogService.Write("物料:" + Purchase.FMATERIALID + ",采购订单数量:" + Purchase.FQTY); |
| | | if (Purchase.FQTY >= NeedQty) |
| | | { |
| | | foreach (int id in FEntryIdList) |
| | | { |
| | | var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault(); |
| | | PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp |
| | | { |
| | | FID = DayPlanPpbomls.FID, |
| | | FHMASTERDATE = _DATE, |
| | | FQty = DayPlanPpbomls.NeedQty, |
| | | FBILLNO = DayPlanPpbomls.FBILLNO, |
| | | FENTRYID = DayPlanPpbomls.FENTRYID, |
| | | FMATERIALID = DayPlanPpbomls.FMATERIALID, |
| | | FNumber = DayPlanPpbomls.FNumber, |
| | | OLDDATE = DayPlanPpbomls.FHMASTERDATE, |
| | | FFIXLEADTIME = _FFIXLEADTIME, |
| | | FErpClsID = DayPlanPpbomls.FErpClsID, |
| | | |
| | | PurchseFID = Purchase.FID, |
| | | PurchseFentryID = Purchase.FENTRYID, |
| | | FSUPPLIERID = Purchase.FSUPPLIERID, |
| | | PurchseFNUMBER = Purchase.FNUMBER, |
| | | PurchseFBillNo = Purchase.FBillNo, |
| | | PurchseFqty = Purchase.FQTY, |
| | | FStockOrgId = Purchase.FStockOrgId, //采购组织 |
| | | FORGNumber = Purchase.FORGNumber, |
| | | |
| | | FXQD = Purchase.FXQD, |
| | | FCREATORID = Purchase.FCREATORID, |
| | | FName = Purchase.FName, |
| | | FDate = Purchase.FDate, |
| | | //FDeliveryDate = Purchase.FDeliveryDate, |
| | | F_QIMB_NOTE = Purchase.F_QIMB_NOTE, |
| | | FNOTE = Purchase.FNOTE |
| | | }); |
| | | //扣除日计划明细已被分配的数量 |
| | | DayPlanPpbomls.NeedQty = 0; |
| | | } |
| | | FEntryIdList.Clear(); |
| | | //更新采购订单 |
| | | sqlList.Add($"/*dialect*/ update T_PRD_MOEntry set FPODemandPlanCount =isnull(FPODemandPlanCount,0)+ '{NeedQty}' where FENTRYID = {Purchase.FENTRYID}"); |
| | | //扣除当前行对应采购订单数量 |
| | | var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault(); |
| | | ls.FQTY -= NeedQty; |
| | | break; |
| | | } |
| | | else |
| | | { |
| | | //更新总需求数量 |
| | | NeedQty = NeedQty - Purchase.FQTY; |
| | | //采购订单数量 |
| | | decimal _NeedQty = Purchase.FQTY; |
| | | List<int> mmm = new List<int>(); |
| | | foreach (int id in FEntryIdList) |
| | | { |
| | | var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault(); |
| | | decimal Qty = DayPlanPpbomls.NeedQty;//订单数量 |
| | | //if (Qty == 0) |
| | | // //LogService.Write("订单数量为0"); |
| | | if (Qty > _NeedQty) |
| | | Qty = _NeedQty; //订单数量>采购订单数量 取采购订单 |
| | | |
| | | //if (_NeedQty == 0) |
| | | // //LogService.Write("订单数量为0"); |
| | | |
| | | _NeedQty = _NeedQty - Qty; |
| | | PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp |
| | | { |
| | | FID = DayPlanPpbomls.FID, |
| | | FHMASTERDATE = _DATE, |
| | | FQty = Qty, |
| | | FBILLNO = DayPlanPpbomls.FBILLNO, |
| | | FENTRYID = DayPlanPpbomls.FENTRYID, |
| | | FMATERIALID = DayPlanPpbomls.FMATERIALID, |
| | | FNumber = DayPlanPpbomls.FNumber, |
| | | OLDDATE = DayPlanPpbomls.FHMASTERDATE, |
| | | FFIXLEADTIME = _FFIXLEADTIME, |
| | | FErpClsID = DayPlanPpbomls.FErpClsID, |
| | | |
| | | PurchseFID = Purchase.FID, |
| | | PurchseFentryID = Purchase.FENTRYID, |
| | | FSUPPLIERID = Purchase.FSUPPLIERID, |
| | | PurchseFNUMBER = Purchase.FNUMBER, |
| | | PurchseFBillNo = Purchase.FBillNo, |
| | | PurchseFqty = Purchase.FQTY, |
| | | FStockOrgId = Purchase.FStockOrgId, //采购组织 |
| | | FORGNumber = Purchase.FORGNumber, |
| | | |
| | | FXQD = Purchase.FXQD, |
| | | FCREATORID = Purchase.FCREATORID, |
| | | FName = Purchase.FName, |
| | | FDate = Purchase.FDate, |
| | | //FDeliveryDate = Purchase.FDeliveryDate, |
| | | F_QIMB_NOTE = Purchase.F_QIMB_NOTE, |
| | | FNOTE = Purchase.FNOTE |
| | | }); |
| | | //更新计划数量(剩余需要排的) 继续去计算下一个采购订单 |
| | | DayPlanPpbomls.NeedQty -= Qty; |
| | | //更新采购订单 |
| | | sqlList.Add($"/*dialect*/ update T_PRD_MOEntry set FPODemandPlanCount = isnull(FPODemandPlanCount,0)+ '{Qty}' where FENTRYID = {Purchase.FENTRYID}"); |
| | | //更新Model |
| | | var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault(); |
| | | ls.FQTY -= Qty; |
| | | if (_NeedQty <= 0) |
| | | { |
| | | foreach (var mm in mmm) |
| | | { |
| | | FEntryIdList.Remove(mm); |
| | | } |
| | | break; |
| | | } |
| | | mmm.Add(id); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | //if (NeedQty > 0) |
| | | //{ |
| | | // LogService.Write("[要料计划]生产订单号:" + item.FBILLNO + ",当前物料:" + item.FMATERIALID + ",需求数量:" + _item.NeedQty + " ,占用采购订单后数量剩余:" + NeedQty); |
| | | //} |
| | | NeedQty = 0; |
| | | } |
| | | i++; |
| | | } |
| | | var PODemandPlanList = PODemandPlanTemp.GroupBy(p => new { p.PurchseFNUMBER, p.FHMASTERDATE }).Select(x => new PODemandPlanTemp { PurchseFNUMBER = x.Key.PurchseFNUMBER, FHMASTERDATE = x.Key.FHMASTERDATE }).ToList(); |
| | | int tlmmm = 1; |
| | | JArray FinalyResult = new JArray(); |
| | | foreach (var item in PODemandPlanList) |
| | | { |
| | | this.View.Session["ProcessRateValue"] = 80 + Convert.ToInt32((Convert.ToDecimal(20) / PODemandPlanList.Count) * tlmmm); |
| | | DateTime date = item.FHMASTERDATE; |
| | | string PurchseFNUMBER = item.PurchseFNUMBER; |
| | | JObject model = new JObject(); |
| | | model.Add("FHDate", date); |
| | | model.Add("FSettleCurrId", new JObject() { ["Fnumber"] = "PRE001" }); |
| | | model.Add("FSupplierID", new JObject() { ["Fnumber"] = PurchseFNUMBER }); |
| | | |
| | | JArray Fentity = new JArray(); |
| | | List<PODemandPlanTemp> _PODemandPlanList = PODemandPlanTemp.Where(x => x.FHMASTERDATE == date && x.PurchseFNUMBER == PurchseFNUMBER).ToList(); |
| | | foreach (var _item in _PODemandPlanList) |
| | | { |
| | | if (!model.ToString().Contains("FHPURCHASEORGID")) |
| | | model.Add("FHPURCHASEORGID", new JObject() { ["Fnumber"] = _item.FORGNumber }); |
| | | JObject FentityModel = new JObject(); |
| | | FentityModel.Add("FHMaterID", new JObject() { ["Fnumber"] = _item.FNumber });//物料 |
| | | FentityModel.Add("FHQty", _item.FQty);//数量 |
| | | FentityModel.Add("FHSourceInterID", _item.FID);//日计划工单FID |
| | | FentityModel.Add("FHSourceEntryID", _item.FENTRYID);//日计划工单FENTRYID |
| | | FentityModel.Add("FHSourceBillNo", _item.FBILLNO);//日计划工单单号 |
| | | FentityModel.Add("FHSourceBillType", "");//日计划工单类型 |
| | | FentityModel.Add("FDayPlanDate", _item.OLDDATE);//日计划工单类型 |
| | | FentityModel.Add("FHRelationQty", _item.PurchseFqty);//关联数量 |
| | | FentityModel.Add("FFIXLEADTIME", _item.FFIXLEADTIME);//提前期 |
| | | FentityModel.Add("FPURCHASEORGID", new JObject() { ["Fnumber"] = _item.FORGNumber });//采购组织 |
| | | FentityModel.Add("FHPOOrderInterID", _item.PurchseFID);// 采购订单内码:FHPOOrderInterID |
| | | FentityModel.Add("FHPOOrderEntryID", _item.PurchseFentryID); //采购订单子内码:FHPOOrderEntryID |
| | | FentityModel.Add("FHPOOrderBillNo", _item.PurchseFBillNo); //采购订单号:FHPOOrderBillNo |
| | | FentityModel.Add("FERPCLSID", _item.FErpClsID); //发料方式 |
| | | FentityModel.Add("FUnitID", new JObject() { ["Fnumber"] = "Pcs" }); //发料方式 |
| | | |
| | | FentityModel.Add("FSalOrderNo", _item.FXQD); //需求单号 |
| | | FentityModel.Add("FCgddCreaterId", new JObject() { ["FUserID"] = _item.FCREATORID }); //采购员 |
| | | FentityModel.Add("FCgDate", _item.FDate); //采购订单单据日期 |
| | | //FentityModel.Add("FCgDeliveryDate", _item.FDeliveryDate); //采购订单交货日期 |
| | | FentityModel.Add("F_QIMB_NOTE", _item.F_QIMB_NOTE); //采购订单摘要 |
| | | FentityModel.Add("FNOTE", _item.FNOTE); //采购订单表体备注 |
| | | |
| | | Fentity.Add(FentityModel); |
| | | } |
| | | model.Add("FEntity", Fentity); |
| | | FinalyResult.Add(model); |
| | | if ((tlmmm >= 20 || tlmmm == PODemandPlanList.Count) && (tlmmm % 20 == 0 || tlmmm == PODemandPlanList.Count)) |
| | | { |
| | | JObject jsonRoot = new JObject() |
| | | { |
| | | ["Creator"] = "", |
| | | ["NeedUpDateFields"] = new JArray(), |
| | | ["NeedReturnFields"] = new JArray(), |
| | | ["IsDeleteEntry"] = "false", |
| | | ["SubSystemId"] = "", |
| | | ["IsVerifyBaseDataField"] = "false", |
| | | ["Model"] = FinalyResult |
| | | }; |
| | | CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); |
| | | var result = cloudClient.BatchSave("bsv_ProductPlan", jsonRoot.ToString()); |
| | | JObject saveObj = JObject.Parse(result); |
| | | string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); |
| | | if (saveIsSuc != "TRUE") |
| | | { |
| | | this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString()); |
| | | } |
| | | FinalyResult = new JArray(); |
| | | } |
| | | tlmmm++; |
| | | } |
| | | sw.Stop();//结束计时 |
| | | LogService.Write("要料计划执行完成 调用webapi 用时:" + sw.Elapsed + "总行数:" + PODemandPlanTemp.Count); |
| | | DBServiceHelper.ExecuteBatch(Context, sqlList); |
| | | return "操作成功"; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogService.Write(ex.Message.ToString()); |
| | | return ex.Message.ToString(); |
| | | } |
| | | } |
| | | } |