using Demo.Model.Model; using Demo.Model.Model.PODemandPlan; using K3Cloud.Extend.Utils; using Kingdee.BOS.App.Data; using Kingdee.BOS.Core; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.Const; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.JSON; using Kingdee.BOS.KDThread; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.ServiceHelper.FileServer; using Kingdee.BOS.Util; using Newtonsoft.Json.Linq; using NPOI.HSSF.UserModel; using NPOI.SS.Formula.Functions; using NPOI.SS.UserModel; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.IO; using System.Linq; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Web; using System.Windows.Documents; using ZD.Cloud.Logger; using ZD.Cloud.WebApi; using ZD.Share.Common; namespace Demo.DynamicForm.PRD { [Description("生产计划平台按钮功能")] [HotUpdate] public class Pro_WorkBillPlatform : AbstractDynamicFormPlugIn { string _OutServicePath = ""; string PathName = "日计划导入模板.xlsx"; List ListInventory;//库存明细 List ListInventoryByStockOrgId;//物料总库存 public override void BarItemClick(BarItemClickEventArgs e) { base.BarItemClick(e); try { if (e.BarItemKey.ToUpper() == "BTEXPORT") { ExportExcel(); //this.View.ShowMessage("测试啦"); string path = PathUtils.GetServerPath(KeyConst.TEMPFILEPATH, PathName); DynamicFormShowParameter dynamicForm = new DynamicFormShowParameter(); dynamicForm.FormId = "BOS_FileDownLoad"; dynamicForm.OpenStyle.ShowType = ShowType.Modal; dynamicForm.CustomParams.Add("IsExportData", "true"); dynamicForm.CustomParams.Add("url", path); this.View.ShowForm(dynamicForm); //ShowDownload(); } if (e.BarItemKey.ToUpper() == "TBSEARCH") { SearchList222(); } if (e.BarItemKey.ToUpper() == "TBLOCK") { Lock(); } //解锁 if (e.BarItemKey.ToUpper() == "TBRELIEVELOCK") { RelieveLock(); } if (e.BarItemKey.ToUpper() == "BTNSAVE") { Save(); } if (e.BarItemKey.ToUpper() == "TBCOMPLETE") { CompleteSetAnalysis(); //COMPLETEMAIN(); // COMPLETE(); } //提料计划 if (e.BarItemKey.ToUpper() == "TBEXTRACTION") { Extraction3(); } } catch (Exception ex) { this.View.ShowErrMessage(ex.Message.ToString()); } } public override void EntryBarItemClick(BarItemClickEventArgs e) { base.EntryBarItemClick(e); if (e.BarItemKey.ToUpper() == "TBEDIT") { SearchListEdit(); } } /// /// 行双击 跳出齐套分析明细列表 /// /// public override void EntityRowDoubleClick(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.EntityRowClickEventArgs e) { var m = e.Row; var n = e.Key; base.EntityRowClick(e); DynamicFormShowParameter formPa = new DynamicFormShowParameter(); formPa.FormId = "paez_CompleteAnalysisDetail"; /* jsonModel.Add("FHMainICMOInterID", FMainInterID);//主生产订单主内码 jsonModel.Add("FHMainICMOEntryID", FMainEntryID);//主生产订单子内码 jsonModel.Add("FHICMOInterID", FDayPlanWorkID);//日计划订单主内码 current["FMatrailId_Id"].ToString(), current["FHMainSourceInterID"].ToString(), current["FHMainSourceEntryID"].ToString(), current["FDayPlanWorkID"].ToString()) */ formPa.CustomParams.Add("FHMainICMOInterID", Convert.ToString(this.View.Model.GetValue("FHMainSourceInterID", e.Row).ToString())); formPa.CustomParams.Add("FHMainICMOEntryID", Convert.ToString(this.View.Model.GetValue("FHMainSourceEntryID", e.Row).ToString())); formPa.CustomParams.Add("FHICMOInterID", Convert.ToString(this.View.Model.GetValue("FDayPlanWorkID", e.Row).ToString())); formPa.CustomParams.Add("FMatrailId_Id", Convert.ToString((this.View.Model.GetValue("FMatrailId", e.Row) as DynamicObject)["Id"].ToString())); this.View.ShowForm(formPa); } /// /// 导出数据到Excel /// public void ExportExcel() { string[] Title = new string[] {"销售订单号", "生产订单号", "生产组织", "生产车间", "生产资源", "产品代码", "产品名称", "规格型号", "计量单位", "批次号","销售订单数量","生产订单数量","总齐套数量","交货日期","订单等级","T0","T1","T2","T3","T4","T5","T6","T7", "T8","T9","T10","T11","T12","T13","T14","T15","T16","T17", "T18","T19","T20","T21","T22","T23","T24","T25","T26","T27","T28","T29", "T30","T31","T32","T33","T34","T35","T36","T37","T38","T39","T40","T41","T42", "T43","T44","T45","T46","T47","T48","T49","T50","T51","T52","T53","T54","T55","T56","T57","T58","T59","T60"}; string sheetname = "日计划导入模板.xlsx"; string file = ""; file = @"D:\办公\K3Cloud\WebSite\TempfilePath\" + sheetname; //@"D:\办公\K3Cloud\WebSite\"; //通过Directory类的CreateDirectory方法创建。 string activeDir = AppDomain.CurrentDomain.BaseDirectory; string newPath = System.IO.Path.Combine(activeDir, "TempfilePath"); System.IO.Directory.CreateDirectory(newPath); file = newPath + "\\" + sheetname; //Server.MapPath("/"); DataTable dt = null; HSSFWorkbook xssfworkbook = new HSSFWorkbook();//建立Excel2003对象 HSSFSheet sheet = (HSSFSheet)xssfworkbook.CreateSheet(sheetname);//新建一个名称为sheetname的工作簿 //设置基本样式 ICellStyle style = xssfworkbook.CreateCellStyle(); style.WrapText = true; IFont font = xssfworkbook.CreateFont(); font.FontHeightInPoints = 9; font.FontName = "Arial"; style.SetFont(font); //设置统计样式 ICellStyle style1 = xssfworkbook.CreateCellStyle(); style1.WrapText = true; IFont font1 = xssfworkbook.CreateFont(); font1.FontHeightInPoints = 9; font1.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold; font1.FontName = "Arial"; style1.SetFont(font1); //设置大类样式 ICellStyle style2 = xssfworkbook.CreateCellStyle(); style2.WrapText = true; //style2.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.Gold.Index; //style2.FillPattern = FillPattern.SolidForeground; IFont font2 = xssfworkbook.CreateFont(); font2.FontHeightInPoints = 9; font2.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold; font2.FontName = "Arial"; style2.SetFont(font2); //设置列名 HSSFRow row = (HSSFRow)sheet.CreateRow(0); for (int i = 0; i < Title.Length; i++) { ICell cell = (ICell)row.CreateCell(i); var rowName = Title[i]; cell.SetCellValue(rowName); cell.CellStyle = style; } //单元格赋值 //列宽自适应,只对英文和数字有效 for (int i = 0; i <= Title.Length; i++) { sheet.AutoSizeColumn(i); } using (System.IO.Stream stream = System.IO.File.OpenWrite(file)) { xssfworkbook.Write(stream); stream.Close(); _OutServicePath = file; } } private string _fileId = string.Empty; /// /// 弹出下载提示窗,下载文件至客户端本地。 /// public void ShowDownload() { _fileId = "2000avbbb"; string url = FileServerHelper.GetAppSiteOuterNetUrl(this.Context, HttpContext.Current.Request); //fileId文件编码可由 T_BAS_ATTACHMENT 附件明细表查得,此处直接拿上面上传文件的编码来做示例。 string fileurl = string.Format("{0}FileUpLoadServices/download.aspx?fileId={1}&token={2}", url, _fileId, this.Context.UserToken); JSONObject jObject = new JSONObject(); jObject.Put("url", HttpUtility.UrlEncode(fileurl)); jObject.Put("title", "文件下载"); jObject.Put("desc", "请点击打开附件:"); jObject.Put("urltitle", "这是文件名"); this.View.AddAction(JSAction.openUrlWindow, new JSONArray { jObject }); } /// /// 锁定 /// public void Lock() { int day = Convert.ToInt32(this.Model.GetValue("FLockDays")); string sqlwhere = " and 1=1"; string FSalOrder = Convert.ToString((this.Model.GetValue("FSalOrder"))); if (string.IsNullOrEmpty(FSalOrder)) { } else sqlwhere += $" and FHSeOrderBillNo='{FSalOrder}'"; //获取单据体信息 Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); //单据体信息转换为列表集合 DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity); List sqlList = new List(); string sql; foreach (var item in entityDataObjoct) { sql = $"/*dialect*/update t1 set t1.FHLockedSub=1 from Sc_WorkBillSortBillSub t1 join Sc_WorkBillSortBillMain t2 on t1.FID = t2.FID where FHMASTERDATE between DATEADD(day,-1,getdate()) and DATEADD(day,{day - 1},getdate()) and t1.FID = { Convert.ToString(item["FDayPlanWorkID"])} "; //sql = $"/*dialect*/update Sc_WorkBillSortBillSub set FHLockedSub=1 where FEntryID in (select TOP({day}) FEntryID from Sc_WorkBillSortBillSub where FHLOCKEDSUB = 0 AND FID = { Convert.ToString(item["FDayPlanWorkID"])} AND DATEDIFF(DAY, GETDATE(), FHMASTERDATE) >= 0 ORDER BY FEntryID) "; sqlList.Add(sql); } int result = DBServiceHelper.ExecuteBatch(Context, sqlList); if (result > 0) { SearchList222(); this.View.ShowMessage("操作成功"); } else this.View.ShowMessage("操作失败,联系管理员!"); } /// /// 解锁 /// public void RelieveLock() { int day = Convert.ToInt32(this.Model.GetValue("FLockDays")); string sqlwhere = " and 1=1"; string FSalOrder = Convert.ToString((this.Model.GetValue("FSalOrder"))); if (string.IsNullOrEmpty(FSalOrder)) { } else sqlwhere += $" and FHSeOrderBillNo='{FSalOrder}'"; //获取单据体信息 Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); //单据体信息转换为列表集合 DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity); List sqlList = new List(); string sql; foreach (var item in entityDataObjoct) { sql = $"/*dialect*/update t1 set t1.FHLockedSub=0 from Sc_WorkBillSortBillSub t1 join Sc_WorkBillSortBillMain t2 on t1.FID = t2.FID where FHMASTERDATE between DATEADD(day,-1,getdate()) and DATEADD(day,{day - 1},getdate()) and t1.FID = { Convert.ToString(item["FDayPlanWorkID"])} "; //sql = $"/*dialect*/update Sc_WorkBillSortBillSub set FHLockedSub=1 where FEntryID in (select TOP({day}) FEntryID from Sc_WorkBillSortBillSub where FHLOCKEDSUB = 0 AND FID = { Convert.ToString(item["FDayPlanWorkID"])} AND DATEDIFF(DAY, GETDATE(), FHMASTERDATE) >= 0 ORDER BY FEntryID) "; sqlList.Add(sql); } int result = DBServiceHelper.ExecuteBatch(Context, sqlList); if (result > 0) { SearchList222(); this.View.ShowMessage("操作成功"); } else this.View.ShowMessage("操作失败,联系管理员!"); } /// /// 保存功能 /// public void Save() { List sqlList = new List(); string sql; //获取单据体信息 Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); //单据体信息转换为列表集合 DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity); DateTime date = DateTime.Now; string _result = ""; foreach (DynamicObject current in entityDataObjoct) { if (Convert.ToInt32(current["FNoScheduled"]) < 0) _result += "序号:" + Convert.ToString(current["SEQ"]) + ",日计划总数量超出生产订单数量"; } if (_result != "") { this.View.ShowErrMessage(_result); return; } foreach (DynamicObject current in entityDataObjoct) { sql = $"/*dialect*/ update Sc_WorkBillSortBillMain set FOrderQuantity={current["FOrderQuantity"]},FDayPlanQuantity={current["FDayPlanQuantity"]},FNoScheduled={current["FNoScheduled"]} where FID = {current["FDayPlanWorkID"]}"; sqlList.Add(sql); DateTime FBzDate = Convert.ToDateTime(Convert.ToDateTime(current["FBzDate"])); DateTime end = Convert.ToDateTime(Convert.ToDateTime(current["FBzDate"]).AddDays(60).ToShortDateString());//最大日期 for (int i = 0; i <= 60; i++) { DateTime start = Convert.ToDateTime(date.AddDays(i).ToShortDateString()); TimeSpan getDay = end.Subtract(start); //编制日期+61天>date.AddDays(i).ToShortDateString() continue if (getDay.Days < 0) break; sql = $"/*dialect*/update t1 set FHQTY='{Convert.ToString(current["FT" + "" + i + ""])}' from Sc_WorkBillSortBillSub t1 join " + $" Sc_WorkBillSortBillMain t2 on t1.FID = t2.FID where FHMASTERDATE='{date.AddDays(i).ToShortDateString()}' and t2.FID='{Convert.ToString(current["FDayPlanWorkID"])}'"; sqlList.Add(sql); } } int result = DBServiceHelper.ExecuteBatch(Context, sqlList); if (result > 0) { this.View.ShowMessage("操作成功"); SearchList222(); } else this.View.ShowMessage("操作失败,联系管理员!"); } /// /// 齐套分析 /// /// private void COMPLETE() { // 显示一个进度显示界面:显示一个不停滚动的模拟进度 // bUseTruePro参数:是否显示真实的进度。 // bUseTruePro = false : // 显示一个不停滚动的模拟进度,与实际处理进度没有关联。 // 此方案优点:实际处理代码无需计算进度 // 此方案缺点:进度不准确,且进度页面不会自动关闭。 // bUseTruePro = true: 进度界面显示真实进度 // 此方案优点:进度真实 // 此方案缺点:需要在处理代码中,不断的更新真实进度,更新语句 // this.View.Session["ProcessRateValue"] = 100; // 特别说明,当进度更新到100时,进度界面会自动关闭 // 本案例选用此方案 var processForm = this.View.ShowProcessForm( new Action(t => { }), true, "正在生成,请稍候..."); // 开启一个异步线程,处理引入功能 // using Kingdee.BOS.KDThread; MainWorker.QuequeTask(() => { try { // 需要捕获错误,以确保处理结束时,关闭进度滚动界面 // 引入功能实际处理函数 this.COMPLETEMAIN(); } finally { // 确保标记进度已经到达100% this.View.Session["ProcessRateValue"] = 100; // 引入完毕,关闭进度显示页面 var processView = this.View.GetView(processForm.PageId); if (processView != null) { processView.Close(); this.View.SendDynamicFormAction(processView); } } }, (t) => { }); } public void COMPLETEMAIN() { //获取当前即时库存 按照物料+货主+库存 展现 DataSet ds = DBServiceHelper.ExecuteDataSet(Context, @" /*dialect*/ select DISTINCT (a.FBASEQTY- ISNULL(FHUseQty,0)) as FBASEQTY,a.FMATERIALID,a.FStockOrgId,a.FOwnerId from T_STK_Inventory a left join ( select FHMaterID,FHUseQty,FHStockOrgID,FOwnerId from JIT_MOMaterReadysBill where FIdentificat = 2 ) b on a.FMATERIALID=b.FHMaterID and a.FStockOrgId=b.FHStockOrgID and a.FOwnerId = b.FOwnerId order by FBASEQTY"); ListInventory = ds.ToModelList(); ds = DBServiceHelper.ExecuteDataSet(Context, @" /*dialect*/ select sum(FBASEQTY)FBASEQTY,FMATERIALID,FStockOrgId from ( select DISTINCT (a.FBASEQTY- ISNULL(FHUseQty,0)) as FBASEQTY,a.FMATERIALID,a.FStockOrgId,a.FOwnerId from T_STK_Inventory a left join ( select FHMaterID,FHUseQty,FHStockOrgID,FOwnerId from JIT_MOMaterReadysBill where FIdentificat = 2 ) b on a.FMATERIALID=b.FHMaterID and a.FStockOrgId=b.FHStockOrgID and a.FOwnerId = b.FOwnerId ) TT group by FMATERIALID, FStockOrgId "); ListInventoryByStockOrgId = ds.ToModelList(); //获取单据体信息 Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); //单据体信息转换为列表集合 DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity); EntryGrid grid = this.View.GetControl("FEntity"); if (entityDataObjoct.Count > 0) { int m = 0; //删除齐套数量 foreach (DynamicObject current in entityDataObjoct) { //FDayPlanWorkID日计划工单ID去删除现有的齐套分析数据 DBServiceHelper.Execute(Context, "/*dialect*/delete JIT_MOMaterReadysBill where FHICMOInterID = '" + current["FDayPlanWorkID"].ToString() + "'"); } foreach (DynamicObject current in entityDataObjoct) { //计划总数量 decimal SumPlan = 0; for (int i = 0; i <= 60; i++) { SumPlan += Convert.ToDecimal(current["FT" + "" + i + ""]); } double Sum = 100; Sum = Convert.ToDouble(SumGetComplete(current["FMatrailId_Id"].ToString(), current["FHMainSourceInterID"].ToString(), current["FHMainSourceEntryID"].ToString(), current["FDayPlanWorkID"].ToString(), SumPlan, current["FORGID_Id"].ToString())); this.View.Model.SetValue("FCompleteSetCount", Sum, m); this.View.UpdateView("FCompleteSetCount"); //保存齐套数 DBServiceHelper.Execute(Context, "/*dialect*/ update Sc_WorkBillSortBillMain set FCompleteCount='" + Sum + "',FDayPlanQuantity='" + SumPlan + "' where FID=" + current["FDayPlanWorkID"].ToString()); for (int i = 0; i <= 60; i++) { this.View.GetFieldEditor("FT" + i.ToString(), m).Enabled = false; //单据体行锁定字段 Sum = Sum - Convert.ToDouble(current["FT" + "" + i + ""]); if (Sum >= 0) { grid.SetForecolor("FT" + "" + i + "", "#00FF00", m); } else { grid.SetForecolor("FT" + "" + i + "", "#FF0000", m); } } m++; //grid = this.View.GetControl[EntryGrid]("FSaleOrderEntry")#需要设置的单据体标识Key //grid.SetRowBackcolor("#FFFF00", 0)#设置整行背景颜色 //grid.SetForecolor("FMaterialName", "#FF0000", 0)#需要设置字段标识Key[/code] // grid.SetBackcolor("FT" + "" + i + "", "#FF0000", m); //this.View.Session["ProcessRateValue"] = Convert.ToInt32(this.View.Session["ProcessRateValue"]) + Convert.ToInt32(1 / entityDataObjoct.Count * 90); } } else { this.View.ShowMessage("请先加载数据!"); } } /// /// 计算最大齐套数量 /// /// 物料Number /// 生产订单主码 /// 生产订单子码 /// 日计划工单FID /// 计划总数量 /// 库存组织 /// public string SumGetComplete(string FMATERIALID, string FMainInterID, string FMainEntryID, string FDayPlanWorkID, decimal SumPlan, string FStockOrgId) { //FDayPlanWorkID日计划工单ID去删除现有的齐套分析数据 DBServiceHelper.Execute(Context, "/*dialect*/delete JIT_MOMaterReadysBill where FHICMOInterID = '" + FDayPlanWorkID + "'"); #region 数据库直接算出所以需要数据字段 /* --生产用料清单列表 SELECT T1.FID,T1.FBillNo,T1.FMOBillNO,T1.FMOEntrySeq,T1.FMoId,T1.FMaterialID,T1.FQty, T2.FMATERIALID FMATERIALID2,T4.FNumber,T2.FNeedQty,t3.FBASEQTY,convert(decimal(18,3),FNeedQty/t1.FQty)UnitDosage, floor(t3.FBASEQTY/convert(decimal(18,3),FNeedQty/t1.FQty)) SumGetComplete FROM T_PRD_PPBOM T1 LEFT JOIN (select FID,MAX(FENTRYID)FENTRYID,SUM(FNeedQty)FNeedQty,FMATERIALID from T_PRD_PPBOMENTRY where FMoId='100007' group by FMATERIALID,FID ) T2 on T1.FID=t2.FID LEFT JOIN T_STK_Inventory T3 on t2.FMATERIALID = t3.FMATERIALID LEFT JOIN T_BD_MATERIAL T4 on T2.FMATERIALID=T4.FMATERIALID where t1.FMoId='100007' and T1.FMaterialID='105771' */ #endregion string sql = string.Format(@" /*dialect*/ --生产用料清单列表 SELECT T1.FID,T1.FBillNo,T1.FMOBillNO,T1.FMOEntrySeq,T1.FMoId,T1.FMaterialID,T1.FQty, T2.FMATERIALID FMATERIALID2,T4.FNumber,T2.FNeedQty --,isnull(t3.FBASEQTY,0)FBASEQTY FROM T_PRD_PPBOM T1 LEFT JOIN (select FID,MAX(FENTRYID)FENTRYID,SUM(FNeedQty)FNeedQty,FMATERIALID from T_PRD_PPBOMENTRY where FMoId='{0}' group by FMATERIALID,FID ) T2 on T1.FID=t2.FID --LEFT JOIN T_STK_Inventory T3 on t2.FMATERIALID = t3.FMATERIALID LEFT JOIN T_BD_MATERIAL T4 on T2.FMATERIALID=T4.FMATERIALID where t1.FMoId='{0}' and T1.FMaterialID='{1}' ", FMainInterID, FMATERIALID); DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql); var PpbomList = ds.ToModelList(); //当前最大齐套数 下层需求数量/父级需求数量=单位用料 //var SumGetComplete = Math.Floor(PpbomList.Min(t => t.FBASEQTY / (t.FNeedQty / t.FQty))); //最大齐套数 decimal SumGetComplete; List list = new List(); foreach (var t in PpbomList) { var ls = ListInventoryByStockOrgId.Where(c => c.FMATERIALID == t.FMATERIALID2 && c.FStockOrgId == FStockOrgId).FirstOrDefault(); if (ls == null) { list.Add(0); continue; } SumGetComplete = Math.Floor(ls.FBASEQTY / (t.FNeedQty / t.FQty)); list.Add(SumGetComplete); } //没有物料的库存信息 SumGetComplete = list.Min(); if (SumGetComplete > SumPlan)//系统可生产最大齐套数大于计划需求量时,取计划 SumGetComplete = SumPlan; foreach (var item in PpbomList) { decimal jskc = 0; var ls = ListInventoryByStockOrgId.Where(c => c.FMATERIALID == item.FMATERIALID2 && c.FStockOrgId == FStockOrgId).FirstOrDefault(); if (ls != null) jskc = ls.FBASEQTY; /* 及时库存数量 = 系统现有库存 可用数量 = 及时库存数量 数量字段 = 齐套量 * 单位用料 */ decimal UnitDosage = item.FNeedQty / item.FQty;//单位用量 decimal xhsl = SumGetComplete * (UnitDosage);///消耗数量 JObject _jsonRoot = new JObject(); _jsonRoot.Add("Creator", ""); _jsonRoot.Add("NeedUpDateFields", new JArray()); _jsonRoot.Add("NeedReturnFields", new JArray()); _jsonRoot.Add("IsDeleteEntry", "true"); _jsonRoot.Add("SubSystemId", ""); _jsonRoot.Add("IsVerifyBaseDataField", ""); JObject _jsonModel = new JObject(); _jsonModel.Add("FHMainICMOInterIDr", FMainInterID);//主生产订单主内码 _jsonModel.Add("FHMainICMOEntryID", FMainEntryID);//主生产订单主内码 _jsonModel.Add("FHICMOInterID", FDayPlanWorkID);//日计划订单主内码 JObject _HMaterID = new JObject(); _HMaterID.Add("FNumber", item.FNumber); _jsonModel.Add("FHMaterID", _HMaterID);//FHMaterID 物料 _jsonModel.Add("FHStockQty", Convert.ToDecimal(jskc));//及时库存数量 _jsonModel.Add("FHUseQty", Convert.ToDecimal(xhsl));//数量 _jsonModel.Add("FHLeftQty", Convert.ToDecimal(jskc));//可用数量 _jsonModel.Add("FUnitDosage", Convert.ToDecimal(UnitDosage));//单位用量 . _jsonModel.Add("FSumPlanCount", Convert.ToDecimal(SumPlan));//FSumPlanCount 计划总数量 _jsonModel.Add("FCompleteCount", Convert.ToDecimal(SumGetComplete));//FCompleteCount 齐套数量 _jsonModel.Add("FPRDBILLNO", item.FMOBillNO);//FPRDBILLNO 工单编号 _jsonModel.Add("FIdentificat", "1");//标识 _jsonRoot.Add("Model", _jsonModel); CloudClient _cloudClient = new CloudClient("http://erp-windows002/K3Cloud/"); var _result = _cloudClient.Save("paez_CompleteAnalysisTemp", _jsonRoot.ToString()); JObject _saveObj = JObject.Parse(_result); string _saveIsSuc = _saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); if (_saveIsSuc != "TRUE") { this.View.ShowMessage("操作失败,联系管理员!"); } //扣除总库存的数量 if (ls != null) ls.FBASEQTY -= xhsl; List _ListInventory = ListInventory.Where(c => c.FMATERIALID == item.FMATERIALID2 && c.FStockOrgId == FStockOrgId && c.FBASEQTY > 0).ToList(); foreach (var Inventory in _ListInventory) { //扣除库存数量 // Inventory.FBASEQTY; if (xhsl <= 0) break; // var _ls = ListInventory.Where(c => c.FMATERIALID == item.FMATERIALID2).DefaultIfEmpty(); JObject jsonRoot = new JObject(); jsonRoot.Add("Creator", ""); jsonRoot.Add("NeedUpDateFields", new JArray()); jsonRoot.Add("NeedReturnFields", new JArray()); jsonRoot.Add("IsDeleteEntry", "true"); jsonRoot.Add("SubSystemId", ""); jsonRoot.Add("IsVerifyBaseDataField", ""); JObject jsonModel = new JObject(); jsonModel.Add("FHMainICMOInterIDr", FMainInterID);//主生产订单主内码 jsonModel.Add("FHMainICMOEntryID", FMainEntryID);//主生产订单主内码 jsonModel.Add("FHICMOInterID", FDayPlanWorkID);//日计划订单主内码 JObject HMaterID = new JObject(); HMaterID.Add("FNumber", item.FNumber); jsonModel.Add("FHMaterID", HMaterID);//FHMaterID 物料 DataTable dt = DBServiceHelper.ExecuteDataSet(Context, @" select FNUMBER from T_ORG_Organizations where FORGID='" + FStockOrgId + "'").Tables[0]; JObject FHStockOrgID = new JObject(); FHStockOrgID.Add("FNumber", dt.Rows[0]["FNUMBER"].ToString()); jsonModel.Add("FHStockOrgID", FHStockOrgID);//FHStockOrgID 库存组织 jsonModel.Add("FOwnerTypeId", "BD_OwnerOrg");//FHStockOrgID 货主类型 dt = DBServiceHelper.ExecuteDataSet(Context, @" select FNUMBER from T_ORG_Organizations where FORGID='" + Inventory.FOwnerId + "'").Tables[0]; JObject FOwnerId = new JObject(); FOwnerId.Add("FNumber", dt.Rows[0]["FNUMBER"].ToString()); jsonModel.Add("FOwnerId", FOwnerId);//FOwnerId 货主 jsonModel.Add("FHStockQty", Convert.ToDecimal(Inventory.FBASEQTY));//及时库存数量 jsonModel.Add("FHUseQty", Convert.ToDecimal(xhsl > Inventory.FBASEQTY ? Inventory.FBASEQTY : xhsl));//数量 jsonModel.Add("FHLeftQty", Convert.ToDecimal(Inventory.FBASEQTY));//可用数量 jsonModel.Add("FUnitDosage", Convert.ToDecimal(UnitDosage));//单位用量 . jsonModel.Add("FSumPlanCount", Convert.ToDecimal(SumPlan));//FSumPlanCount 计划总数量 jsonModel.Add("FCompleteCount", Convert.ToDecimal(SumGetComplete));//FCompleteCount 齐套数量 jsonModel.Add("FPRDBILLNO", item.FMOBillNO);//FPRDBILLNO 工单编号 jsonModel.Add("FIdentificat", "2");//标识 jsonRoot.Add("Model", jsonModel); CloudClient cloudClient = new CloudClient("http://erp-windows002/K3Cloud/"); var result = cloudClient.Save("paez_CompleteAnalysisTemp", jsonRoot.ToString()); JObject saveObj = JObject.Parse(result); string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); if (saveIsSuc != "TRUE") { this.View.ShowMessage("操作失败,联系管理员!"); } if (xhsl >= Inventory.FBASEQTY) { xhsl = xhsl - Inventory.FBASEQTY; Inventory.FBASEQTY = 0; } else { Inventory.FBASEQTY -= xhsl; xhsl = 0; } } } return SumGetComplete.ToString(); } /// /// 齐套分析 /// public void CompleteSetAnalysis() { try { Stopwatch sw = new Stopwatch(); sw.Start();//开始计时 //清空齐套临时表 DBServiceHelper.Execute(Context, "/*dialect*/ delete JIT_MOMaterReadysBill "); //获取当前即时库存 按照物料+库存组织+货主+库存数量 DataSet ds = DBServiceHelper.ExecuteDataSet(Context, @" /*dialect*/ select isnull(a.FBASEQTY,0)-ISNULL(b.FHUseQty,0) FBASEQTY,T1.FStockOrgId,T1.FMATERIALID,a.FOWNERID,c.FNUMBER from ( select a.FHPRDORGID FStockOrgId,T2.FMATERIALID from SC_WORKBILLSORTBILLMAIN a join SC_WORKBILLSORTBILLSub b on a.FID = b.FID join T_PRD_PPBOM T1 on a.FPRDMOMAINID = t1.FMoId and a.FPRDMOENTYID = t1.FMOENTRYID LEFT JOIN(select FID,FMATERIALID from T_PRD_PPBOMENTRY group by FMATERIALID,FID) T2 on T1.FID = t2.FID group by a.FHPRDORGID,T2.FMATERIALID ) T1 LEFT JOIN T_STK_Inventory a on T1.FStockOrgId = a.FStockOrgId and T1.FMATERIALID =a.FMATERIALID LEFT JOIN JIT_MOMaterReadysBill B ON T1.FStockOrgId = b.FHSTOCKORGID and T1.FMATERIALID =b.FHMATERID and a.FOwnerId = b.FOwnerId LEFT join T_ORG_Organizations c on a.FOWNERID = c.FORGID --where isnull(a.FBASEQTY,0)-ISNULL(b.FHUseQty,0)>0 and T1.FMATERIALID in (105842, --105843) "); ListInventory = ds.ToModelList(); //总库存 物料+库存组织+库存数量 ds = DBServiceHelper.ExecuteDataSet(Context, @" /*dialect*/ select sum(isnull(a.FBASEQTY,0)-ISNULL(b.FHUseQty,0))FBASEQTY,T1.FStockOrgId,T1.FMATERIALID from ( select a.FHPRDORGID FStockOrgId,T2.FMATERIALID from SC_WORKBILLSORTBILLMAIN a join SC_WORKBILLSORTBILLSub b on a.FID = b.FID join T_PRD_PPBOM T1 on a.FPRDMOMAINID = t1.FMoId and a.FPRDMOENTYID = t1.FMOENTRYID LEFT JOIN(select FID,FMATERIALID from T_PRD_PPBOMENTRY group by FMATERIALID,FID) T2 on T1.FID = t2.FID group by a.FHPRDORGID,T2.FMATERIALID ) T1 LEFT JOIN T_STK_Inventory a on T1.FStockOrgId = a.FStockOrgId and T1.FMATERIALID =a.FMATERIALID LEFT JOIN JIT_MOMaterReadysBill B ON T1.FStockOrgId = b.FHSTOCKORGID and T1.FMATERIALID =b.FHMATERID --where T1.FMATERIALID in (105842, --105843) group by T1.FStockOrgId,T1.FMATERIALID "); ListInventoryByStockOrgId = ds.ToModelList(); //需要齐套分析的数据 string sql = @" /*dialect*/ select a.FPRDMOMAINID,a.FPRDMOENTYID,a.FID,b.FEntryID,a.FHPRDORGID FStockOrgId,t5.FNUMBER as OrgFnumber,a.FHOrderLev,b.FHQTY,b.FHMASTERDATE,T1.FBillNo,T1.FMOBillNO,T1.FMOEntrySeq,T1.FMoId,T1.FMaterialID,T1.FQty, T2.FMATERIALID FMATERIALID2, T4.FNumber,T2.FNeedQty,FNeedQty/FQty dwyl,FHQTY*(FNeedQty/FQty) PlanCount from SC_WORKBILLSORTBILLMAIN a join SC_WORKBILLSORTBILLSub b on a.FID = b.FID join T_PRD_PPBOM T1 on a.FPRDMOMAINID = t1.FMoId and a.FPRDMOENTYID = t1.FMOENTRYID LEFT JOIN(select FID, MAX(FENTRYID) FENTRYID, SUM(FNeedQty) FNeedQty, FMATERIALID from T_PRD_PPBOMENTRY group by FMATERIALID, FID ) T2 on T1.FID = t2.FID --LEFT JOIN T_STK_Inventory T3 on t2.FMATERIALID = t3.FMATERIALID JOIN T_BD_MATERIAL T4 on T2.FMATERIALID = T4.FMATERIALID JOIN T_ORG_Organizations t5 on a.FHPRDORGID = t5.FORGID --where FPRDMOMAINID = 100010 --where t4.FMATERIALID in (105842, --105843) ORDER BY b.FHMASTERDATE,a.FHOrderLev "; ds = DBServiceHelper.ExecuteDataSet(Context, sql); List BomList = ds.ToModelList(); //日计划+生产订单子表编码ID var DatePlanList = BomList.GroupBy(p => new { p.FHMASTERDATE, p.FPRDMOENTYID }).Select(x => new PRD_PPBOM { FHMASTERDATE = x.Key.FHMASTERDATE, FPRDMOENTYID = x.Key.FPRDMOENTYID }).ToList(); //CompleteAnalysisTempModel 用于存储临时需要插入数据 List completeAnalysisTempModel = new List(); foreach (var item in DatePlanList) { //筛选出当日计划数据 var _BomList = BomList.Where(x => x.FHMASTERDATE == item.FHMASTERDATE && x.FPRDMOENTYID == item.FPRDMOENTYID).ToList(); foreach (var _item in _BomList) { //该日计划物料需要数 decimal need = _item.PlanCount; //实际总库存 decimal sjkc = 0; var sjkcList = ListInventoryByStockOrgId.Where(x => x.FMATERIALID == _item.FMATERIALID2 && x.FStockOrgId == _item.FStockOrgId).FirstOrDefault(); sjkc = sjkcList.FBASEQTY; //真正需要取计算的数量(拆分货主) //货主匹配 List _ListInventory = ListInventory.Where(c => c.FMATERIALID == _item.FMATERIALID2 && c.FStockOrgId == _item.FStockOrgId && c.FBASEQTY > 0).ToList(); if (_ListInventory.Count > 0) { foreach (var Inventory in _ListInventory) { if (need == 0) break; decimal fCompleteCount = need >= Inventory.FBASEQTY ? Inventory.FBASEQTY : need;//齐套数量 decimal _fLackCount = _item.PlanCount - fCompleteCount;//缺料数量 completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel { FHMainICMOInterIDr = _item.FPRDMOMAINID, FHMainICMOEntryID = _item.FPRDMOENTYID, FHICMOInterID = _item.FID.ToString(), FHICMOEntryID = _item.FEntryID.ToString(), FHMaterID = _item.FNumber, FHStockOrgID = _item.OrgFnumber, FHPRDORGID = _item.OrgFnumber, FPRDBillNo = _item.FMOBillNO, FOwnerTypeId = "BD_OwnerOrg", FOwnerId = Inventory.Fnumber, FUnitDosage = _item.dwyl.ToString(),//单位用量 FSumPlanCount = _item.PlanCount.ToString(),//计划总数量 FCompleteCount = fCompleteCount, //齐套数量 FLackCount = _fLackCount,//缺料数量 FHStockQty = sjkcList.FBASEQTY,//即时库存 FHLeftQty = sjkcList.FBASEQTY,//可用数量 FComPlete = _fLackCount > 0 ? "未齐套" : "齐套", FPlanDate = item.FHMASTERDATE // 日计划日期 }); //扣减总库存数量 sjkcList.FBASEQTY = sjkc >= fCompleteCount ? sjkc - fCompleteCount : 0; //扣减消耗库存 Inventory.FBASEQTY = Inventory.FBASEQTY - fCompleteCount; //剩余日计划需求数量 need = need >= Inventory.FBASEQTY ? need - Inventory.FBASEQTY : 0; } } else { completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel { FHMainICMOInterIDr = _item.FPRDMOMAINID, FHMainICMOEntryID = _item.FPRDMOENTYID, FHICMOInterID = _item.FID.ToString(), FHICMOEntryID = _item.FEntryID.ToString(), FHMaterID = _item.FNumber, FHStockOrgID = _item.OrgFnumber, FHPRDORGID = _item.OrgFnumber, FPRDBillNo = _item.FMOBillNO, FOwnerTypeId = "BD_OwnerOrg", FUnitDosage = _item.dwyl.ToString(),//单位用量 FSumPlanCount = _item.PlanCount.ToString(),//计划总数量 FCompleteCount = 0, //齐套数量 FLackCount = _item.PlanCount,//缺料数量 FHStockQty = 0,//即时库存 FHLeftQty = 0,//可用数量 FComPlete = "未齐套", FPlanDate = item.FHMASTERDATE // 日计划日期 }); } } } foreach (var item in completeAnalysisTempModel) { JObject jsonRoot = new JObject(); jsonRoot.Add("Creator", ""); jsonRoot.Add("NeedUpDateFields", new JArray()); jsonRoot.Add("NeedReturnFields", new JArray()); jsonRoot.Add("IsDeleteEntry", "true"); jsonRoot.Add("SubSystemId", ""); jsonRoot.Add("IsVerifyBaseDataField", ""); JObject jsonModel = new JObject(); jsonModel.Add("FHMainICMOInterIDr", item.FHMainICMOInterIDr); jsonModel.Add("FHMainICMOEntryID", item.FHMainICMOEntryID); jsonModel.Add("FHICMOInterID", item.FHICMOInterID); jsonModel.Add("FHICMOEntryID", item.FHICMOEntryID); jsonModel.Add("FHMaterID", new JObject() { ["FNUMBER"] = item.FHMaterID }); jsonModel.Add("FHUseQty", item.FHUseQty); jsonModel.Add("FHStockOrgID", new JObject() { ["FNUMBER"] = item.FHStockOrgID }); jsonModel.Add("FHStockQty", item.FHStockQty); jsonModel.Add("FHLeftQty", item.FHLeftQty); jsonModel.Add("FHPRDORGID", new JObject() { ["FNUMBER"] = item.FHStockOrgID }); jsonModel.Add("FUnitDosage", item.FUnitDosage); jsonModel.Add("FSumPlanCount", item.FSumPlanCount); jsonModel.Add("FCompleteCount", item.FCompleteCount); jsonModel.Add("FPRDBillNo", item.FPRDBillNo); jsonModel.Add("FOwnerTypeId", item.FOwnerTypeId); jsonModel.Add("FComPlete", item.FComPlete); jsonModel.Add("FLackCount", item.FLackCount); jsonModel.Add("FPlanDate", item.FPlanDate); if (item.FOwnerId != null) jsonModel.Add("FOwnerId", new JObject() { ["FNUMBER"] = item.FOwnerId }); jsonRoot.Add("Model", jsonModel); CloudClient cloudClient = new CloudClient("http://localhost/K3Cloud/"); var result = cloudClient.Save("paez_CompleteAnalysisTemp", jsonRoot.ToString()); JObject saveObj = JObject.Parse(result); string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); if (saveIsSuc != "TRUE") { LogHelper.Error(jsonRoot.ToString()); } } //执行完成后 更新日计划工单状态 DBServiceHelper.Execute(Context, @" /*dialect*/update Sc_WorkBillSortBillSub set FComplete = '未齐套' where FEntryID IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBill where isnull(FCOMPLETE,'未齐套') ='未齐套') "); sw.Stop();//结束计时 LogHelper.Info("运行总时长:" + sw.Elapsed); } catch (Exception ex) { LogHelper.Error(ex.Message.ToString()); } } /// /// 查询 /// public void SearchList222() { string sqlwhere = " where 1=1"; if ((this.Model.GetValue("FProWorkShopId") as DynamicObject) != null) { string FProWorkShopId = (this.Model.GetValue("FProWorkShopId") as DynamicObject)["Id"].ToString(); if (!string.IsNullOrEmpty(FProWorkShopId)) sqlwhere += $" and FHWorkShopID='{FProWorkShopId}'"; } //销售订单号 string FSalOrder = Convert.ToString((this.Model.GetValue("FSalOrder"))); if (string.IsNullOrEmpty(FSalOrder)) { } else sqlwhere += $" and FHSeOrderBillNo='{FSalOrder}'"; //生产订单号 string FScOrderMainNo = Convert.ToString((this.Model.GetValue("FScOrderMainNo"))); if (string.IsNullOrEmpty(FScOrderMainNo)) { } else sqlwhere += $" and FSCORDERNO='{FScOrderMainNo}'"; //物料 if ((this.Model.GetValue("FMatralId") as DynamicObject) != null) { string FMatralId = (this.Model.GetValue("FMatralId") as DynamicObject)["Number"].ToString(); if (!string.IsNullOrEmpty(FMatralId)) sqlwhere += $" and t3.FNumber='{FMatralId}'"; } //编制日期 string FPreparatDate = Convert.ToString((this.Model.GetValue("FPreparatDate"))); if (!string.IsNullOrEmpty(FPreparatDate)) sqlwhere += $" and FPreparatDate='{FPreparatDate}'"; try { string sql = @"/*dialect*/select t1.* from Sc_WorkBillSortBillMain t1 left join T_BD_MATERIAL t3 on t1.FHMaterID=t3.FMATERIALID " + sqlwhere; DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; DateTime DateNow = DateTime.Now;//获取当前日期 this.Model.DeleteEntryData("FEntity"); EntryGrid grid = this.View.GetControl("FEntity"); for (int i = 0; i < dt.Rows.Count; i++) { this.Model.CreateNewEntryRow("FEntity"); this.Model.SetValue("FSEQ", i + 1, i);//序号 this.Model.SetValue("FCompleteSetCount", "", i);//总齐套数量 this.Model.SetValue("FProOrderCount", dt.Rows[i]["FHOrderNeedQty"].ToString(), i);//生产订单数量 this.Model.SetValue("FSalOrderCount", dt.Rows[i]["FHSeOrderBillNo"].ToString(), i);//销售订单数量 this.Model.SetValue("FBatch", dt.Rows[i]["FBatch"].ToString(), i);//批次号 this.Model.SetValue("FUnit", dt.Rows[i]["FHUnitID"].ToString(), i);//计量单位 this.Model.SetValue("FORGID", dt.Rows[i]["FHPRDORGID"].ToString(), i);//生产组织 this.Model.SetValue("FMatrailId", dt.Rows[i]["FHMaterID"].ToString(), i);//产品代码 this.Model.SetValue("FDeliverydate", dt.Rows[i]["FHOrderCommitDate"].ToString(), i);//交货日期 this.Model.SetValue("FOrderLevel", dt.Rows[i]["FHOrderLev"].ToString(), i);//订单等级 this.Model.SetValue("FSCOrderNo", dt.Rows[i]["FSCOrderNo"].ToString(), i);//生产订单号 this.Model.SetValue("FSalOrderNo", dt.Rows[i]["FHSEORDERBILLNO"].ToString(), i);//销售订单号 this.Model.SetValue("FBzDate", dt.Rows[i]["FPreparatDate"].ToString(), i);//编制日期 this.Model.SetValue("FProOrderCount", dt.Rows[i]["FHOrderNeedQty"].ToString(), i);//生产订单数量 this.Model.SetValue("FHMainSourceInterID", dt.Rows[i]["FPRDMOMAINID"].ToString(), i);//源单主内码FHMainSourceInterID this.Model.SetValue("FHMainSourceEntryID", dt.Rows[i]["FPRDMOENTYID"].ToString(), i);//源单子内码FHMainSourceEntryID this.Model.SetValue("FDayPlanWorkID", dt.Rows[i]["FID"].ToString(), i);//日计划工单FID this.Model.SetValue("FResourcesId", dt.Rows[i]["FHSourceID"].ToString(), i);//生产资源 this.Model.SetValue("FProductWorkShopId", dt.Rows[i]["FHWorkShopID"].ToString(), i);//生产车间 this.Model.SetValue("FCompleteSetCount", dt.Rows[i]["FCompleteCount"].ToString(), i);//齐套数量 this.Model.SetValue("FOrderQuantity", dt.Rows[i]["FOrderQuantity"].ToString(), i);//生产订单数量 this.Model.SetValue("FDayPlanQuantity", dt.Rows[i]["FDayPlanQuantity"].ToString(), i);//日计划数量 this.Model.SetValue("FNoScheduled", dt.Rows[i]["FNoScheduled"].ToString(), i);//未排数量 sql = @"/*dialect*/SELECT * FROM Sc_WorkBillSortBillSub WHERE DATEDIFF(D,GETDATE(),FHMASTERDATE)>=0 and FID=" + dt.Rows[i]["FID"].ToString(); DataTable _dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; foreach (DataRow dr in _dt.Rows) { /* this.Model.SetValue(dr["FColumn"].ToString(), dr["FHQTY"].ToString(), i);//日计划工单FID if (dr["FHLockedSub"].ToString() == "1") this.View.GetFieldEditor(dr["FColumn"].ToString(), i).Enabled = false; //单据体行锁定字段 */ DateTime start = Convert.ToDateTime(DateNow.ToShortDateString()); DateTime end = Convert.ToDateTime(Convert.ToDateTime(dr["FHMASTERDATE"]).ToShortDateString()); TimeSpan getDay = end.Subtract(start); if (getDay.Days > 60) continue; this.Model.SetValue("FT" + getDay.Days.ToString(), dr["FHQTY"].ToString(), i);//日计划工单FID if (dr["FHLockedSub"].ToString() == "1") this.View.GetFieldEditor("FT" + getDay.Days.ToString(), i).Enabled = false; //单据体行锁定字段 } this.View.InvokeFieldUpdateService("FMatrailId", i);//调用数量值更新 } this.View.UpdateView(); for (int j = 0; j < dt.Rows.Count; j++) { sql = @"/*dialect*/SELECT * FROM Sc_WorkBillSortBillSub WHERE DATEDIFF(D,GETDATE(),FHMASTERDATE)>=0 and FID=" + dt.Rows[j]["FID"].ToString(); DataTable _dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; foreach (DataRow dr in _dt.Rows) { DateTime start = Convert.ToDateTime(DateNow.ToShortDateString()); DateTime end = Convert.ToDateTime(Convert.ToDateTime(dr["FHMASTERDATE"]).ToShortDateString()); TimeSpan getDay = end.Subtract(start); if (getDay.Days > 60) continue; if (dr["FHLockedSub"].ToString() == "1") this.View.GetFieldEditor("FT" + getDay.Days.ToString(), j).Enabled = false; //单据体行锁定字段 if (dr["FCOMPLETE"].ToString() == "未齐套") { this.View.GetFieldEditor("FT" + getDay.Days.ToString(), j).Enabled = false; //单据体行锁定字段 grid.SetForecolor("FT" + "" + getDay.Days.ToString() + "", "#FF0000", j); } else { this.View.GetFieldEditor("FT" + getDay.Days.ToString(), j).Enabled = false; //单据体行锁定字段 grid.SetForecolor("FT" + "" + getDay.Days.ToString() + "", "#00FF00", j); } } } for (int m = 0; m <= 60; m++) { this.View.GetControl("FT" + "" + m + "").Text = DateNow.AddDays(m).ToShortDateString(); } } catch (Exception ex) { this.View.ShowErrMessage(ex.Message.ToString()); } } /// /// 编辑 /// public void SearchListEdit() { string sqlwhere = " where 1=1"; if ((this.Model.GetValue("FProWorkShopId") as DynamicObject) != null) { string FProWorkShopId = (this.Model.GetValue("FProWorkShopId") as DynamicObject)["Id"].ToString(); if (!string.IsNullOrEmpty(FProWorkShopId)) sqlwhere += $" and FHWorkShopID='{FProWorkShopId}'"; } //销售订单号 string FSalOrder = Convert.ToString((this.Model.GetValue("FSalOrder"))); if (string.IsNullOrEmpty(FSalOrder)) { } else sqlwhere += $" and FHSeOrderBillNo='{FSalOrder}'"; //生产订单号 string FScOrderMainNo = Convert.ToString((this.Model.GetValue("FScOrderMainNo"))); if (string.IsNullOrEmpty(FScOrderMainNo)) { } else sqlwhere += $" and FSCORDERNO='{FScOrderMainNo}'"; //物料 if ((this.Model.GetValue("FMatralId") as DynamicObject) != null) { string FMatralId = (this.Model.GetValue("FMatralId") as DynamicObject)["Number"].ToString(); if (!string.IsNullOrEmpty(FMatralId)) sqlwhere += $" and t3.FNumber='{FMatralId}'"; } //编制日期 string FPreparatDate = Convert.ToString((this.Model.GetValue("FPreparatDate"))); if (!string.IsNullOrEmpty(FPreparatDate)) sqlwhere += $" and FPreparatDate='{FPreparatDate}'"; try { string sql = @"/*dialect*/select t1.* from Sc_WorkBillSortBillMain t1 left join T_BD_MATERIAL t3 on t1.FHMaterID=t3.FMATERIALID " + sqlwhere; DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; DateTime DateNow = DateTime.Now;//获取当前日期 this.Model.DeleteEntryData("FEntity"); EntryGrid grid = this.View.GetControl("FEntity"); for (int i = 0; i < dt.Rows.Count; i++) { this.Model.CreateNewEntryRow("FEntity"); this.Model.SetValue("FSEQ", i + 1, i);//序号 this.Model.SetValue("FCompleteSetCount", "", i);//总齐套数量 this.Model.SetValue("FProOrderCount", dt.Rows[i]["FHOrderNeedQty"].ToString(), i);//生产订单数量 this.Model.SetValue("FSalOrderCount", dt.Rows[i]["FHSeOrderBillNo"].ToString(), i);//销售订单数量 this.Model.SetValue("FBatch", dt.Rows[i]["FBatch"].ToString(), i);//批次号 this.Model.SetValue("FUnit", dt.Rows[i]["FHUnitID"].ToString(), i);//计量单位 this.Model.SetValue("FORGID", dt.Rows[i]["FHPRDORGID"].ToString(), i);//生产组织 this.Model.SetValue("FMatrailId", dt.Rows[i]["FHMaterID"].ToString(), i);//产品代码 this.Model.SetValue("FDeliverydate", dt.Rows[i]["FHOrderCommitDate"].ToString(), i);//交货日期 this.Model.SetValue("FOrderLevel", dt.Rows[i]["FHOrderLev"].ToString(), i);//订单等级 this.Model.SetValue("FSCOrderNo", dt.Rows[i]["FSCOrderNo"].ToString(), i);//生产订单号 this.Model.SetValue("FSalOrderNo", dt.Rows[i]["FHSEORDERBILLNO"].ToString(), i);//销售订单号 this.Model.SetValue("FBzDate", dt.Rows[i]["FPreparatDate"].ToString(), i);//编制日期 this.Model.SetValue("FProOrderCount", dt.Rows[i]["FHOrderNeedQty"].ToString(), i);//生产订单数量 this.Model.SetValue("FHMainSourceInterID", dt.Rows[i]["FPRDMOMAINID"].ToString(), i);//源单主内码FHMainSourceInterID this.Model.SetValue("FHMainSourceEntryID", dt.Rows[i]["FPRDMOENTYID"].ToString(), i);//源单子内码FHMainSourceEntryID this.Model.SetValue("FDayPlanWorkID", dt.Rows[i]["FID"].ToString(), i);//日计划工单FID this.Model.SetValue("FResourcesId", dt.Rows[i]["FHSourceID"].ToString(), i);//生产资源 this.Model.SetValue("FProductWorkShopId", dt.Rows[i]["FHWorkShopID"].ToString(), i);//生产车间 this.Model.SetValue("FCompleteSetCount", dt.Rows[i]["FCompleteCount"].ToString(), i);//齐套数量 this.Model.SetValue("FOrderQuantity", dt.Rows[i]["FOrderQuantity"].ToString(), i);//生产订单数量 this.Model.SetValue("FDayPlanQuantity", dt.Rows[i]["FDayPlanQuantity"].ToString(), i);//日计划数量 this.Model.SetValue("FNoScheduled", dt.Rows[i]["FNoScheduled"].ToString(), i);//未排数量 sql = @"/*dialect*/SELECT * FROM Sc_WorkBillSortBillSub WHERE DATEDIFF(D,GETDATE(),FHMASTERDATE)>=0 and FID=" + dt.Rows[i]["FID"].ToString(); DataTable _dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; foreach (DataRow dr in _dt.Rows) { DateTime start = Convert.ToDateTime(DateNow.ToShortDateString()); DateTime end = Convert.ToDateTime(Convert.ToDateTime(dr["FHMASTERDATE"]).ToShortDateString()); TimeSpan getDay = end.Subtract(start); if (getDay.Days > 60) continue; this.Model.SetValue("FT" + getDay.Days.ToString(), dr["FHQTY"].ToString(), i);//日计划工单FID if (dr["FHLockedSub"].ToString() == "1") this.View.GetFieldEditor("FT" + getDay.Days.ToString(), i).Enabled = false; //单据体行锁定字段 } this.View.InvokeFieldUpdateService("FMatrailId", i);//调用数量值更新 } this.View.UpdateView(); for (int j = 0; j < dt.Rows.Count; j++) { sql = @"/*dialect*/SELECT * FROM Sc_WorkBillSortBillSub WHERE DATEDIFF(D,GETDATE(),FHMASTERDATE)>=0 and FID=" + dt.Rows[j]["FID"].ToString(); DataTable _dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; foreach (DataRow dr in _dt.Rows) { DateTime start = Convert.ToDateTime(DateNow.ToShortDateString()); DateTime end = Convert.ToDateTime(Convert.ToDateTime(dr["FHMASTERDATE"]).ToShortDateString()); TimeSpan getDay = end.Subtract(start); if (getDay.Days > 60) continue; if (dr["FHLockedSub"].ToString() == "1") this.View.GetFieldEditor("FT" + getDay.Days.ToString(), j).Enabled = false; //单据体行锁定字段 } } for (int m = 0; m <= 60; m++) { this.View.GetControl("FT" + "" + m + "").Text = DateNow.AddDays(m).ToShortDateString(); } } catch (Exception ex) { this.View.ShowErrMessage(ex.Message.ToString()); } } /// /// 提料计划 /// public void Extraction3() { //获取单据体信息 Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); //单据体信息转换为列表集合 DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity); EntryGrid grid = this.View.GetControl("FEntity"); string FDayPlanWorkID = "";//日工单ID if (entityDataObjoct.Count == 0) { this.View.ShowMessage("请先加载数据!"); return; } else { foreach (DynamicObject current in entityDataObjoct) { FDayPlanWorkID += Convert.ToString(current["FDayPlanWorkID"]) + ","; } } FDayPlanWorkID = FDayPlanWorkID.Substring(0, FDayPlanWorkID.Length - 1); //提料计划预处理 清理提料计划单数据 更新采购订单提料计划数量 string sql = string.Format(@" /*dialect*/ exec [提料计划预处理] '{0}' ", FDayPlanWorkID.Replace(",", "-")); DBServiceHelper.Execute(Context, sql); //采购订单数据 sql = @" /*dialect*/ select t1.FID,t1.FBillNo,t2.FENTRYID,t1.FSUPPLIERID,t3.fnumber,t2.FMATERIALID,(t2.FQTY-t2.FPODemandPlanCount)FQTY,FPurchaseOrgId FStockOrgId,t5.FNUMBER FORGNumber,FSTOCKINQTY,FReceiveQty,FCloseStatus,FMRPCLOSESTATUS 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_ORG_Organizations t5 on t1.FPurchaseOrgId = t5.FORGID where t2.FQTY-t2.FPODemandPlanCount>0 and FCloseStatus in('A') and FMRPCLOSESTATUS in('A') "; List PurchaseInventory = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList(); LogHelper.Info("采购订单数据" + sql); sql = string.Format(@" /*dialect*/ SELECT T1.FID,FHMATERID,FHMASTERDATE,FHQTY,FCOMPLETECOUNT,FPRDMOMAINID,T2.FENTRYID,T1.FBILLNO, FNeedQty,t5.FFIXLEADTIME,t5.FMAXPOQTY,t5.FMINPOQTY,t3.FMATERIALID,t6.FNumber,FHQTY*FNeedQty NeedQty,FHPRDORGID FStockOrgId FROM SC_WORKBILLSORTBILLMAIN T1 JOIN SC_WORKBILLSORTBILLSUB T2 ON T1.FID=T2.FID LEFT JOIN(SELECT T1.FID,max(t2.FMATERIALID)FMATERIALIDMAIN, max(t2.FMoId)FMoId,MAX(FENTRYID) FENTRYID, SUM(convert(decimal(18, 2), FBASENUMERATOR / FBASEDENOMINATOR))FNeedQty, T1.FMATERIALID from T_PRD_PPBOMENTRY T1 JOIN T_PRD_PPBOM T2 on t1.FID = t2.FID group by T1.FMATERIALID, T1.FID) T3 on T1.FPRDMOMAINID = t3.FMoId and T1.FHMATERID = t3.FMATERIALIDMAIN JOIN T_BD_MATERIAL T6 ON T3.FMATERIALID = T6.FMATERIALID join t_BD_MaterialBase t4 on t3.FMATERIALID = t4.FMATERIALID join t_BD_MaterialPlan t5 on t3.FMATERIALID = t5.FMATERIALID WHERE DATEDIFF(D,GETDATE(),FHMASTERDATE) >=0 AND FDayPlanQuantity>FCOMPLETECOUNT AND FERPCLSID=1 AND T2.FENTRYID not in (select distinct FHSOURCEENTRYID from CG_PODEMANDPLANBILLSUB where FHSOURCEINTERID IN ({0})) AND T1.FID in ({0}) order by FHMASTERDATE ", FDayPlanWorkID); LogHelper.Info("提料数据" + sql); DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql); List DayPlanPpbom = ds.ToModelList(); //所有物料的库存 ds = DBServiceHelper.ExecuteDataSet(Context, @" /*dialect*/ select sum(FBASEQTY)FBASEQTY,FMATERIALID,FStockOrgId from T_STK_Inventory group by FMATERIALID, FStockOrgId "); ListInventoryByStockOrgId = ds.ToModelList(); List deleteList = new List(); foreach (var item in DayPlanPpbom) { string FmaterialID = item.FMATERIALID; string FStockOrgId = item.FStockOrgId.ToString(); decimal NeedQty = item.NeedQty; var kcList = ListInventoryByStockOrgId.Where(c => c.FMATERIALID == FmaterialID && c.FStockOrgId == FStockOrgId && c.FBASEQTY > 0).FirstOrDefault(); if (kcList != null) { if (kcList.FBASEQTY >= NeedQty) { deleteList.Add(new PODemandPlanTemp { FENTRYID = item.FENTRYID, FMATERIALID = item.FMATERIALID }); kcList.FBASEQTY = kcList.FBASEQTY - NeedQty; } else { item.NeedQty -= kcList.FBASEQTY; kcList.FBASEQTY = 0; } } } foreach (var item in deleteList) { DayPlanPpbom.RemoveAll(p => p.FENTRYID == item.FENTRYID && p.FMATERIALID == item.FMATERIALID); } sql = @"select T1.FID,FDayPlanQuantity,FCOMPLETECOUNT,t2.FHQTY, FHPRDORGID FStockOrgId from SC_WORKBILLSORTBILLMAIN T1 JOIN SC_WORKBILLSORTBILLSUB T2 ON T1.FID=T2.FID WHERE DATEDIFF(D,GETDATE(),FHMASTERDATE) >=0 AND FDayPlanQuantity>FCOMPLETECOUNT AND T1.FID in (" + FDayPlanWorkID + ")"; DataSet Complete = DBServiceHelper.ExecuteDataSet(Context, sql); List CompleteList = ds.ToModelList(); #region /* //FID集合 var FIDList = CompleteList.Select(x => x.FID).Distinct().ToList(); foreach (var item in FIDList) { var _CompleteList = CompleteList.Where(p => p.FID == item).ToList(); decimal FComplete = _CompleteList.FirstOrDefault().FCOMPLETECOUNT; if (FComplete == 0) continue; foreach (var _item in _CompleteList) { FComplete = FComplete - _item.FHQTY; if (FComplete >= 0) { DayPlanPpbom.RemoveAll(p => p.FENTRYID == _item.FENTRYID); } else { DayPlanPpbom.FindAll(p => p.FENTRYID == _item.FENTRYID).ForEach(x => { x.NeedQty = -(x.FNeedQty * FComplete); }); break; } } } */ #endregion //获取当前即时库存 DataSet JSKCds = DBServiceHelper.ExecuteDataSet(Context, " /*dialect*/ select DISTINCT FBASEQTY,FMATERIALID,FStockOrgId,FOwnerId from T_STK_Inventory"); var InventoryList = ds.ToModelList(); //物料集合 由物料去分组 // List MaterialIDList = DayPlanPpbom.Select(x => x.FMATERIALID).Distinct().ToList(); 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 == "105773").ToList(); LogHelper.Info("物料行数" + MaterialIDList.Count); //提料计划数据集临时存储集合 List PODemandPlanTemp = new List(); //sql集合 更新采购订单占用的提料计划数量 List sqlList = new List(); //MaterialIDList = new List { "105773" }; foreach (var item in MaterialIDList) { LogHelper.Info(item.FMATERIALID.ToString()); List _DayPlanPpbom = DayPlanPpbom.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId).ToList(); decimal FMINPOQTY = _DayPlanPpbom.FirstOrDefault().FMINPOQTY;//最小起订量 double FFIXLEADTIME = _DayPlanPpbom.FirstOrDefault().FFIXLEADTIME;//提前期 decimal NeedQty = 0; DateTime DATE = _DayPlanPpbom.FirstOrDefault().FHMASTERDATE; int i = 1; //记录在最小采购量需求下的日计划明细FentyrID List FEntryIdList = new List(); foreach (var _item in _DayPlanPpbom) { if (NeedQty == 0) DATE = Convert.ToDateTime(_item.FHMASTERDATE).AddDays(-FFIXLEADTIME); FEntryIdList.Add(_item.FENTRYID); NeedQty += _item.NeedQty; if (NeedQty >= FMINPOQTY) { List _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).ToList(); if (_PurchaseInventory.Count == 0) { NeedQty = 0; break; } foreach (var Purchase in _PurchaseInventory) { LogHelper.Info("Purchase"); LogHelper.Info("物料:" + Purchase.FMATERIALID + ",数量:" + Purchase.FQTY); if (Purchase.FQTY >= NeedQty) { List mmm = new List(); foreach (int id in FEntryIdList) { mmm.Add(id); 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, PurchseFID = Purchase.FID, PurchseFentryID = Purchase.FENTRYID, FSUPPLIERID = Purchase.FSUPPLIERID, PurchseFNUMBER = Purchase.FNUMBER, PurchseFBillNo = Purchase.FBillNo, PurchseFqty = Purchase.FQTY, FStockOrgId = Purchase.FStockOrgId, //采购组织 FORGNumber = Purchase.FORGNumber }); //扣除日计划明细已被分配的数量 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 mmm = new List(); foreach (int id in FEntryIdList) { var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault(); decimal Qty = DayPlanPpbomls.NeedQty; if (Qty > _NeedQty) Qty = _NeedQty; _NeedQty = _NeedQty - DayPlanPpbomls.NeedQty; 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, PurchseFID = Purchase.FID, PurchseFentryID = Purchase.FENTRYID, FSUPPLIERID = Purchase.FSUPPLIERID, PurchseFNUMBER = Purchase.FNUMBER, PurchseFBillNo = Purchase.FBillNo, PurchseFqty = Purchase.FQTY, FStockOrgId = Purchase.FStockOrgId, //采购组织 FORGNumber = Purchase.FORGNumber }); 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); } } } NeedQty = 0; } #region 剩下不足时按最小采购批次生成 //剩下不足时按最小采购批次生成 //else if (i == _DayPlanPpbom.Count && NeedQty > 0) //{ // NeedQty = FMINPOQTY; // List _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).ToList(); // if (_PurchaseInventory.Count == 0) // { // NeedQty = 0; // break; // } // foreach (var Purchase in _PurchaseInventory) // { // if (Purchase.FQTY >= NeedQty) // { // List mmm = new List(); // foreach (int id in FEntryIdList) // { // mmm.Add(id); // 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, // PurchseFID = Purchase.FID, // PurchseFentryID = Purchase.FENTRYID, // FSUPPLIERID = Purchase.FSUPPLIERID, // PurchseFNUMBER = Purchase.FNUMBER, // PurchseFBillNo = Purchase.FBillNo, // PurchseFqty = Purchase.FQTY // }); // //扣除日计划明细已被分配的数量 // 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 mmm = new List(); // foreach (int id in FEntryIdList) // { // var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault(); // decimal Qty = DayPlanPpbomls.NeedQty; // if (Qty > _NeedQty) // Qty = _NeedQty; // _NeedQty = _NeedQty - DayPlanPpbomls.NeedQty; // 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, // PurchseFID = Purchase.FID, // PurchseFentryID = Purchase.FENTRYID, // FSUPPLIERID = Purchase.FSUPPLIERID, // PurchseFNUMBER = Purchase.FNUMBER, // PurchseFBillNo = Purchase.FBillNo, // PurchseFqty = Purchase.FQTY // }); // 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); // } // } // } // NeedQty = 0; //} #endregion i++; } } 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(); foreach (var item in PODemandPlanList) { DateTime date = item.FHMASTERDATE; string PurchseFNUMBER = item.PurchseFNUMBER; JObject model = new JObject(); model.Add("FHDate", date); model.Add("FHRemark", "生产订单号:" + "测试呢呢"); model.Add("FSupplierID", new JObject() { ["Fnumber"] = PurchseFNUMBER }); JArray Fentity = new JArray(); List _PODemandPlanList = PODemandPlanTemp.Where(x => x.FHMASTERDATE == date && x.PurchseFNUMBER == PurchseFNUMBER).ToList(); foreach (var _item in _PODemandPlanList) { JObject FentityModel = new JObject(); FentityModel.Add("FHPURCHASEORGID", new JObject() { ["Fnumber"] = _item.FORGNumber });//采购组织 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 Fentity.Add(FentityModel); } model.Add("FEntity", Fentity); JObject jsonRoot = new JObject() { ["Creator"] = "", ["NeedUpDateFields"] = new JArray(), ["NeedReturnFields"] = new JArray(), ["IsDeleteEntry"] = "false", ["SubSystemId"] = "", ["IsVerifyBaseDataField"] = "false", ["Model"] = model }; CloudClient cloudClient = new CloudClient("http://erp-windows002/K3Cloud/"); var result = cloudClient.Save("paez_PODemandPlan", jsonRoot.ToString()); JObject saveObj = JObject.Parse(result); string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); LogHelper.Info("最后"); LogHelper.Info(jsonRoot.ToString()); if (saveIsSuc == "TRUE") { } else { LogHelper.Error(saveIsSuc); } } DBServiceHelper.ExecuteBatch(Context, sqlList); this.View.ShowMessage("操作成功"); // var PODemandPlanList22 = PODemandPlanTemp.GroupBy(p => new {p.FSUPPLIERID, p.FHMASTERDATE }).ToList(); } } }