using Demo.BillView.PRD; using Demo.Model.Model; using Demo.Model.Model.PODemandPlan; using K3Cloud.Extend.Utils; using Kingdee.BOS.Core; using Kingdee.BOS.Core.Bill; using Kingdee.BOS.Core.CommonFilter; 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.List; 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 Kingdee.K3.Core.SCM.STK; using Kingdee.K3.SCM.ServiceHelper; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using NPOI.SS.UserModel; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.Threading; using System.Web; using ZD.Cloud.Logger; using ZD.Cloud.WebApi; using ZD.Share.Common; using NPOI.XSSF.UserModel; using NPOI.SS.UserModel; namespace Demo.BillView.PRD { [Description("生产计划平台按钮功能")] [HotUpdate] public class Pro_WorkBillPlatform : AbstractDynamicFormPlugIn { string _OutServicePath = ""; string PathName = "日计划导入模板.xlsx"; List ListInventory;//库存明细 List ListInventoryByStockOrgId;//物料总库存 private bool isSearched = false; /// /// 页面初始化 渲染界面 将T0-T60更改为日期显示 /// /// public override void OnInitialize(InitializeEventArgs e) { base.OnInitialize(e); DateTime DateNow = DateTime.Now; for (int m = 0; m <= 30; m++) { this.View.GetControl("FT" + "" + m + "").ControlAppearance.TextColor = "#FFFF00"; this.View.GetControl("FT" + "" + m + "").Text = DateNow.AddDays(m).ToShortDateString(); } this.View.SendDynamicFormAction(View); } public override void DataChanged(DataChangedEventArgs e) { if (!isSearched) return; base.DataChanged(e); var columns = new List() { "", "" }; for (int i = 0; i < 100; i++) { columns.Add("FT" + i.ToString()); } var model = this.View.Model; if (columns.Contains(e.Field.Key) || e.Field.Key == "FCDQuantity") { var sum = columns.Select(x => Convert.ToDouble(model.GetValue(x, e.Row))).Sum();//日计划总和 var scOrderCount = Convert.ToDouble(model.GetValue("FOrderQuantity", e.Row));//生产订单数量 var cdOrderCount = Convert.ToDouble(model.GetValue("FCDQuantity", e.Row));//拆单数量 var FCXStockInQty = Convert.ToDouble(model.GetValue("FCXStockInQty", e.Row));//产线入库数量 var FQTYLS = Convert.ToDouble(model.GetValue("FQTYLS", e.Row));//历史 this.View.Model.SetValue("FDayPlanQuantity", sum, e.Row);//日计划总数量 this.View.Model.SetValue("FNoScheduled", cdOrderCount - sum - FQTYLS, e.Row);//未排数量 = 拆单 - 历史 - 日计划 //this.View.Model.SetValue("FKpQty", cdOrderCount - sum - FCXStockInQty, e.Row);//可排数量 = 拆单数量 - 日计划 - 产线入库数量 var scOrderNo = model.GetValue("FSCOrderNo", e.Row).ToString(); var scOrderFentrySeqNo = model.GetValue("FSRCBILLENTRYSEQ", e.Row).ToString(); Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); //单据体信息转换为列表集合 DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity); // var groups = entityDataObjoct.Where(x => Convert.ToString(x["FSCOrderNo"]) == scOrderNo && Convert.ToString(x["FSRCBILLENTRYSEQ"]) == scOrderFentrySeqNo).ToList();//生产资源分组(计算优先级) DynamicObjectCollection groups = entityDataObjoct.Clone(); groups.Clear(); entityDataObjoct.Where(x => Convert.ToString(x["FSCOrderNo"]) == scOrderNo && Convert.ToString(x["FSRCBILLENTRYSEQ"]) == scOrderFentrySeqNo).ToList().ForEach(x => groups.Add(x)); var fsumDayPlanCount = groups.Select(x => Convert.ToDecimal(x["FDayPlanQuantity"])).Sum();//日计划总量 foreach (var group in groups) { this.View.Model.SetValue("FKpQty", Convert.ToDecimal(scOrderCount) - fsumDayPlanCount, Convert.ToInt32(group["SEQ"]) - 1);//拆单数量 - 日计划 - 产线入库数量 } } } public override void BarItemClick(BarItemClickEventArgs e) { //this.View.ShowMessage(e.BarItemKey.ToUpper().ToString()); base.BarItemClick(e); try { if (e.BarItemKey.ToUpper() == "BTEXPORT") { ExportExcel(); 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); } //删除 if (e.BarItemKey.ToUpper() == "BTNDELETE") { this.View.ShowMessage("确定删除?", MessageBoxOptions.YesNo, new Action((result) => { if (result == MessageBoxResult.Yes) { DayPlanDelete(); } }) ); } //提交 if (e.BarItemKey.ToUpper() == "BTNSUBMIT") { DayPlanSubmit(); } //审核 if (e.BarItemKey.ToUpper() == "BTNADUIT") { DayPlanAduit(); } if (e.BarItemKey.ToUpper() == "TBSEARCH") { isSearched = false; SearchList(); isSearched = true; } if (e.BarItemKey.ToUpper() == "TBLOCK") { Lock(); } //解锁 if (e.BarItemKey.ToUpper() == "TBRELIEVELOCK") { RelieveLock(); } //保存 if (e.BarItemKey.ToUpper() == "BTNSAVE") { Save(); } //齐套分析 if (e.BarItemKey.ToUpper() == "TBCOMPLETE") { COMPLETE(); SearchList(); } //齐套分析 if (e.BarItemKey.ToUpper() == "TBCOMPLETEBOM") { COMPLETEBOM(); } //tbXnqt虚拟齐套 if (e.BarItemKey.ToUpper() == "TBXNQT") { Xnqt(); } //tb_CKXNQT 查看虚拟齐套 if (e.BarItemKey.ToUpper() == "TB_CKXNQT") { XnqtLook(); } //数据重算 if (e.BarItemKey.ToUpper() == "TBEXTRACTION") { return; try { DayPlanPPBomBillBatch(); Extraction(); } catch (Exception ex) { this.View.ShowErrMessage(ex.Message.ToString()); } finally { this.View.ShowMessage("操作成功!"); } } //选单 if (e.BarItemKey.ToUpper().Contains("TBSELECTMENU")) { SelectMenu(e.BarItemKey.ToString()); } //预留 if (e.BarItemKey.ToUpper() == "TBRESERVE") { Reserve(); } //释放 if (e.BarItemKey.ToUpper() == "TBRELEASE") { Release(); } //下达 if (e.BarItemKey.ToUpper() == "TB_RELEASE") { ReleaseForLMes(); } //同步 if (e.BarItemKey.ToUpper() == "TB_TONGBU") { TongBu(); } //日计划用料清单 if (e.BarItemKey.ToUpper() == "TB_DAYPLANBOM") { DayPlanPPBomBill(); } } catch (Exception ex) { this.View.ShowErrMessage(ex.Message.ToString()); } } public override void EntryBarItemClick(BarItemClickEventArgs e) { base.EntryBarItemClick(e); if (e.BarItemKey.ToUpper() == "TBEDIT") { isSearched = false; SearchListEdit(); isSearched = true; } if (e.BarItemKey.ToUpper() == "TBROWCOPY") { RowCopy(); } } /// /// button按钮点击事件 /// /// public override void ButtonClick(ButtonClickEventArgs e) { base.ButtonClick(e); if (e.Key.ToUpper() == "FTBXNQT") { try { List sqlList = new List(); string sql = $"truncate table Sc_WorkBillMainXnqt"; sqlList.Add(sql); sql = $"truncate table Sc_WorkBillSubXnqt"; sqlList.Add(sql); string columnName = DBServiceHelper.ExecuteScalar(Context, "/*dialect*/ select stuff((select ',' + name from syscolumns Where id = object_Id('Sc_WorkBillMainXnqt') for xml path('')),1,1,'') as name ", ""); sql = $"insert into Sc_WorkBillMainXnqt({columnName}) select {columnName} from Sc_WorkBillSortBillMain"; //LogHelper.Info("测试1:" + sql); sqlList.Add(sql); columnName = DBServiceHelper.ExecuteScalar(Context, "/*dialect*/ select stuff((select ',' + name from syscolumns Where id = object_Id('Sc_WorkBillSubXnqt') for xml path('')),1,1,'') as name ", ""); sql = $"insert into Sc_WorkBillSubXnqt({columnName}) select {columnName} from Sc_WorkBillSortBillSub"; //LogHelper.Info("测试1:" + sql); sqlList.Add(sql); sql = $"update Sc_WorkBillSubXnqt set FComplete=''"; sqlList.Add(sql); DBServiceHelper.ExecuteBatch(Context, sqlList); } catch (Exception ex) { this.View.ShowErrMessage(ex.Message); return; } this.View.ShowMessage("操作成功"); } } /// /// 行双击 跳出齐套分析明细列表 /// /// public override void EntityRowDoubleClick(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.EntityRowClickEventArgs e) { base.EntityRowClick(e); DynamicFormShowParameter formPa = new DynamicFormShowParameter(); if (Convert.ToInt32(this.View.Model.GetValue("FDayPlanWorkID", e.Row)) == 0) return; if (e.ColKey == "FDELAYLNUM") { //生产计划平台拖期明细跳转 formPa.FormId = "paez_TardinessDetails"; formPa.CustomParams.Add("FID", Convert.ToString(this.View.Model.GetValue("FDayPlanWorkID", e.Row).ToString())); this.View.ShowForm(formPa); } else if (e.ColKey == "FQTYLS") { //生产计划平台 string pageId = Guid.NewGuid().ToString(); BillShowParameter showParameter = new BillShowParameter(); showParameter.FormId = "Paez_Sc_WorkBillAutoSortBill"; showParameter.OpenStyle.ShowType = ShowType.MainNewTabPage; showParameter.PageId = pageId; showParameter.Status = OperationStatus.EDIT; // 传入需要修改的日计划工单内码, showParameter.PKey = Convert.ToString(this.View.Model.GetValue("FDayPlanWorkID", e.Row).ToString()); this.View.ShowForm(showParameter); } else { var type = this.View.Model.GetValue("FQTTYPE").ToString(); if (type == "收料通知单") formPa.CustomParams.Add("tempName", "JIT_MOMaterReadysBillXn"); //齐套分析明细列表跳转 formPa.FormId = "paez_CompleteAnalysisDetail"; formPa.CustomParams.Add("FHICMOInterID", Convert.ToString(this.View.Model.GetValue("FDayPlanWorkID", e.Row).ToString())); this.View.ShowForm(formPa); } } /// /// 查看虚拟齐套 /// public void XnqtLook() { var _key = this.View.Model.GetEntryCurrentRowIndex("FEntity"); if (_key < 0) { this.View.ShowErrMessage("请选择需要查看的单据行!"); return; } DynamicFormShowParameter formPa = new DynamicFormShowParameter(); //齐套分析明细列表跳转 formPa.FormId = "paez_CompleteAnalysisDetail"; formPa.CustomParams.Add("FHICMOInterID", Convert.ToString(this.View.Model.GetValue("FDayPlanWorkID", _key).ToString())); formPa.CustomParams.Add("tempName", "JIT_MOMaterReadysBillXn"); this.View.ShowForm(formPa); } /// /// 导出数据到Excel /// public void ExportExcel() { List Title = new List { "组织编码*", "销售订单号*", "销售订单明细行号*", "生产车间编码*", "生产资源编码*", "优先级", "员工编码", "物料编码*", "物料名称", "规格型号", "计量单位", "批次号", "销售订单数量", "生产订单数量", "总齐套数量" }; /* ,"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" */ DateTime date = DateTime.Now; for (int i = 0; i < 61; i++) { Title.Add(date.AddDays(i).ToString("yyyy-MM-dd")); } string sheetname = "日计划"; 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 + "\\" + PathName; //Server.MapPath("/"); DataTable dt = null; XSSFWorkbook xssfworkbook = new XSSFWorkbook();//创建xlsx XSSFSheet sheet = (XSSFSheet)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); //设置列名 XSSFRow row = (XSSFRow)sheet.CreateRow(0); for (int i = 0; i < Title.Count; i++) { ICell cell = (ICell)row.CreateCell(i); var rowName = Title[i]; cell.SetCellValue(rowName); cell.CellStyle = style; } //单元格赋值 //列宽自适应,只对英文和数字有效 for (int i = 0; i <= Title.Count; 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")); List sqlList = new List(); string 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())"; sqlList.Add(sql); int result = DBServiceHelper.ExecuteBatch(Context, sqlList); DayPlanPPBomBill(); } /// /// 解锁 /// public void RelieveLock() { int day = Convert.ToInt32(this.Model.GetValue("FLockDays")); //获取单据体信息 Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); //单据体信息转换为列表集合 DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity); List sqlList = new List(); string 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())"; DBServiceHelper.Execute(Context, 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"])} "; // sqlList.Add(sql); //} SearchList(); this.View.ShowMessage("操作成功"); } /// /// 保存功能 /// public void Save() { try { EntryGrid grid = this.View.GetControl("FEntity"); List fseqList = new List();//用于记录 保存失败的行号 渲染颜色 string errResult = string.Empty; List sqlList = new List(); string sql; //获取单据体信息 Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); //单据体信息转换为列表集合 DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity); DynamicObjectCollection filterResult = entityDataObjoct.Clone(); filterResult.Clear(); entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"])).ToList().ForEach(x => filterResult.Add(x)); if (filterResult.Count == 0) { this.View.ShowMessage("请选择需要保存的数据"); return; } #region 原验证方式 //生产订单数量改为未入库数量 //var prd_DayPlanSave = filterResult.Select(x => new PRD_DayPlanSave { FSCOrderNo = Convert.ToString(x["FSCOrderNo"]), FSrcbillEntrySeq = Convert.ToString(x["FSRCBILLENTRYSEQ"]), FHSourceID = Convert.ToInt32(x["FResourcesId_Id"]), FCDQuantity = Convert.ToDecimal(x["FCDQuantity"]), FOrderQuantity = Convert.ToDecimal(x["FOrderQuantity"]), FNoStockInQty = Convert.ToDecimal(x["FNoStockInQty"]), FDayPlanQuantity = Convert.ToDecimal(x["FDayPlanQuantity"]), FKpQty = Convert.ToDecimal(x["FKpQty"]) }).ToList(); //判断生产订单是否有重复生产资源 //foreach (var item in prd_DayPlanSave) //{ //if (item.FHSourceID == 0) //{ // this.View.ShowMessage("生产订单号:" + item.FSCOrderNo + ",生产订单明细行号:" + item.FSrcbillEntrySeq + ",生产资源不能为空"); // return; //} //if (prd_DayPlanSave.Where(x => x.FSCOrderNo == item.FSCOrderNo && x.FSrcbillEntrySeq == item.FSrcbillEntrySeq && x.FHSourceID == item.FHSourceID).ToList().Count > 1) //{ // this.View.ShowMessage("生产订单号:" + item.FSCOrderNo + ",生产订单明细行号:" + item.FSrcbillEntrySeq + ",生产资源:" + item.FHSourceID + "信息重复"); // return; //} //if (item.FKpQty < 0) //{ // this.View.ShowMessage("生产订单号:" + item.FSCOrderNo + ",生产订单明细行号:" + item.FSrcbillEntrySeq + ",可排数量:" + item.FKpQty + "小于0,日计划排产数超出未生产数量"); // return; //} //if (item.FKpQty > 0) //{ // this.View.ShowMessage("生产订单号:" + item.FSCOrderNo + ",生产订单明细行号:" + item.FSrcbillEntrySeq + ",可排数量:" + item.FKpQty + ",需要全部排产"); // return; //} //} //拆单数量 不能 超过 生产订单总数 (有一种情况 日计划工单已有500拆单数量 但没有显示在当前生产计划平台上面 可能会超出生产订单总数量 2022-2-23 ) //var _prd_DayPlanSave = prd_DayPlanSave.GroupBy(x => new { x.FSCOrderNo, x.FSrcbillEntrySeq }).Select(y => new PRD_DayPlanSave { FSCOrderNo = y.Key.FSCOrderNo, FSrcbillEntrySeq = y.Key.FSrcbillEntrySeq, FOrderQuantity = y.First().FOrderQuantity, FCDQuantity = y.Sum(s => s.FCDQuantity) }); //foreach (var item in _prd_DayPlanSave) //{ // if (item.FOrderQuantity < item.FCDQuantity) // { // this.View.ShowMessage("生产订单号:" + item.FSCOrderNo + ",拆单总数量:" + item.FCDQuantity.ToString() + ",超出生产订单总数:" + item.FOrderQuantity.ToString()); // return; // } //} #endregion DateTime date = Convert.ToDateTime(DateTime.Now.ToString("d")); foreach (DynamicObject current in filterResult) { if (Convert.ToString(current["FT0"]) == "" || Convert.ToString(current["FT0"]) == "0") continue; if (Convert.ToDecimal(current["FKpQty"]) < 0) { errResult += "生产订单号:" + current["FSCOrderNo"] + ",生产订单明细行号:" + current["FSRCBILLENTRYSEQ"] + ",可排数量:" + current["FKpQty"] + "小于0,日计划排产数超出未生产数量" + "\r\n"; fseqList.Add(Convert.ToInt32(current["SEQ"])); continue; } int _FDayPlanWorkID = Convert.ToInt32(current["FDayPlanWorkID"]); if (_FDayPlanWorkID > 0) { JObject jsonRoot = new JObject(); jsonRoot.Add("Creator", ""); jsonRoot.Add("NeedUpDateFields", new JArray()); jsonRoot.Add("NeedReturnFields", new JArray()); jsonRoot.Add("IsDeleteEntry", "false"); jsonRoot.Add("SubSystemId", ""); jsonRoot.Add("IsVerifyBaseDataField", ""); JObject jsonModel = new JObject(); jsonModel.Add("FID", Convert.ToString(current["FDayPlanWorkID"])); if (Convert.ToString(current["FResourcesId_Id"]) != "0") { JObject jsonFProductWorkShopId = new JObject(); jsonFProductWorkShopId.Add("FNumber", (current["FResourcesId"] as DynamicObject)["Number"].ToString()); jsonModel.Add("FHSourceID", jsonFProductWorkShopId);//FHSourceID 生产车间 } jsonModel.Add("FPriority", Convert.ToString(current["FPriority"])); jsonModel.Add("FOrderQuantity", Convert.ToString(current["FOrderQuantity"])); jsonModel.Add("FDayPlanQuantity", Convert.ToDecimal(current["FDayPlanQuantity"]) + Convert.ToDecimal(current["FQTYLS"])); jsonModel.Add("FNoScheduled", Convert.ToString(current["FNoScheduled"])); jsonModel.Add("FCDQuantity", Convert.ToString(current["FCDQuantity"]));//拆单数量 jsonModel.Add("FHOrderLev", Convert.ToString(current["FOrderLevel"]));//订单等级 //jsonModel.Add("FHMaker ", new JObject() { ["FUserID"] = Context.UserId }); //创建人 jsonModel.Add("FHUpDater ", new JObject() { ["FUserID"] = Context.UserId }); //修改人 string FSCOrderNo = Convert.ToString(current["FSCOrderNo"]);//生产订单号FSCOrderNo string FSRCBILLENTRYSEQ = Convert.ToString(current["FSRCBILLENTRYSEQ"]);//生产订单明细行号 sql = string.Format(@" /*dialect*/ select FEntryID, FHMASTERDATE,FSpreadBillNo from SC_WORKBILLSORTBILLSub t1 join SC_WORKBILLSORTBILLMain t2 on t1.FID =t2.FID where t1.FID = '{0}' order by FEntryID" , _FDayPlanWorkID); List dayPlanModel = new List(); dayPlanModel = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList(); List deleteSqlList = new List(); JArray Entry = new JArray(); for (int i = 0; i <= 0; i++) { JObject jsonFPOOrderEntry = new JObject(); List _dayPlanModel = dayPlanModel.Where(x => x.FHMASTERDATE == date.AddDays(i)).ToList(); if (_dayPlanModel.Count > 0 && Convert.ToString(current["FT" + "" + i + ""]) == "0") { deleteSqlList.Add($"delete SC_WORKBILLSORTBILLSub where FEntryID = {_dayPlanModel.FirstOrDefault().FEntryID}"); continue; } else if (Convert.ToString(current["FT" + "" + i + ""]) == "0") continue; else if (_dayPlanModel.Count > 0) jsonFPOOrderEntry.Add("FEntryID", _dayPlanModel.FirstOrDefault().FEntryID); jsonFPOOrderEntry.Add("FHMasterDate", date.AddDays(i).ToShortDateString()); ;//主日期 jsonFPOOrderEntry.Add("FHQty ", Convert.ToString(current["FT" + "" + i + ""])); ;//日计划数量 Entry.Add(jsonFPOOrderEntry); } jsonModel.Add("FEntity", Entry); jsonRoot.Add("Model", jsonModel); //保存前删除日计划数量 DBServiceHelper.ExecuteBatch(Context, deleteSqlList); CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); var result = cloudClient.Save("Paez_Sc_WorkBillAutoSortBill", jsonRoot.ToString()); JObject saveObj = JObject.Parse(result); string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); if (saveIsSuc != "TRUE") { errResult += $"序号:{current["SEQ"]}," + saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString() + "\r\n"; fseqList.Add(Convert.ToInt32(current["SEQ"])); continue; } } else { string FOrderType = Convert.ToString(current["FOrderType"]) ?? ""; string FTempName = "T_PRD_MO"; string FTempNameEntry = "T_PRD_MOENTRY"; if (FOrderType == "委外订单") { FTempName = "T_SUB_REQORDER"; FTempNameEntry = "T_SUB_REQORDERENTRY"; } ///查询生产订单数据 sql = string.Format(@" /*dialect*/ SELECT t4.FNAME as FMoFBillType,T1.FBILLNO,T2.*,t3.FNUMBER as FUnitNumber,tBom.FNUMBER as FBomNumber FROM {0} T1 LEFT JOIN {1} T2 ON T1.FID = T2.FID LEFT JOIN T_ENG_BOM tBom on t2.FBOMID = tBom.FID join T_BD_UNIT t3 on t2.FUNITID=t3.FUNITID join ( select A.FBILLTYPEID,B.FNAME from T_BAS_BILLTYPE A 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"])); DataTable dt = new DataTable(); dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; if (dt.Rows.Count == 0) continue; string FID = "";//FID 源单主内码 string FENTRYID = "";//FENTRYID 源单子内码 string FLOT = "";//FLOT 批次 string FQTY = "";//FQTY 生产订单数量 string FBILLNO = "";//FBILLNO 原单号 string FHUnitID = "";//单位 string FPlanBeginDate = "";//开始日期 string FPlanEndDate = "";//结束日期 string FMoFBillType = "";// string FBomNumber = "";//Bom 版本 if (dt.Rows.Count > 0) { FID = dt.Rows[0]["FID"].ToString(); FENTRYID = dt.Rows[0]["FENTRYID"].ToString(); FLOT = dt.Rows[0]["FLOT"].ToString(); FQTY = dt.Rows[0]["FQTY"].ToString(); FBILLNO = dt.Rows[0]["FBILLNO"].ToString(); FHUnitID = dt.Rows[0]["FUnitNumber"].ToString(); FPlanBeginDate = dt.Rows[0]["FPlanStartDate"].ToString(); FPlanEndDate = dt.Rows[0]["FPlanFinishDate"].ToString(); FMoFBillType = dt.Rows[0]["FMoFBillType"].ToString(); FBomNumber = dt.Rows[0]["FBomNumber"].ToString(); } string FSCOrderNo = Convert.ToString(current["FSCOrderNo"]);//生产订单号FSCOrderNo string FSRCBILLENTRYSEQ = Convert.ToString(current["FSRCBILLENTRYSEQ"]);//生产订单明细行号 sql = string.Format(@" /*dialect*/ select FEntryID, FHMASTERDATE,FSpreadBillNo from SC_WORKBILLSORTBILLSub t1 join SC_WORKBILLSORTBILLMain t2 on t1.FID =t2.FID where t2.FSRCBILLENTRYSEQ='{0}' and t2.FSCOrderNo ='{1}' order by FEntryID" , FSRCBILLENTRYSEQ, FSCOrderNo); List dayPlanModel = new List(); dayPlanModel = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList(); var fSpreadBillNo = 0; if (dayPlanModel.Count > 0) { var fSpreadBillNoSplit = dayPlanModel.LastOrDefault().FSpreadBillNo.Split('-'); fSpreadBillNo = Convert.ToInt32(fSpreadBillNoSplit[fSpreadBillNoSplit.Length - 1]); } var fnallySpreadBillNo = ""; for (int i = 1; i < 100; i++) { fnallySpreadBillNo = $"{FSCOrderNo}-{FSRCBILLENTRYSEQ}-{fSpreadBillNo + i}"; string yzsql = $"select FID from T_PRD_MO where FBILLNO = '{fnallySpreadBillNo}'"; var yzfid = DBServiceHelper.ExecuteScalar(Context, yzsql, 0); if (yzfid == 0) break; } //选单数据 做新增 JObject jsonRoot = new JObject(); jsonRoot.Add("Creator", ""); jsonRoot.Add("NeedUpDateFields", new JArray()); jsonRoot.Add("NeedReturnFields", new JArray()); jsonRoot.Add("IsDeleteEntry", "false"); jsonRoot.Add("SubSystemId", ""); jsonRoot.Add("IsVerifyBaseDataField", ""); JObject jsonModel = new JObject(); jsonModel.Add("FPreparatDate", Convert.ToString(current["FBzDate"]));//编制日期(改为预计开工日期) jsonModel.Add("FMoFBillType", FMoFBillType);// jsonModel.Add("FOrderType", FOrderType);// jsonModel.Add("FSRCBILLENTRYSEQ", Convert.ToString(current["FSRCBILLENTRYSEQ"]));//生产订单明细行号 jsonModel.Add("FSCOrderNo", Convert.ToString(current["FSCOrderNo"])); //生产订单号FSCOrderNo jsonModel.Add("FHSeOrderBillNo", Convert.ToString(current["FSalOrderNo"]));//销售订单号 jsonModel.Add("FHOrderLev", current["FOrderLevel"].ToString());//订单等级 jsonModel.Add("FHOrderQty", Convert.ToString(current["FSalOrderCount"]));//销售订单数量 jsonModel.Add("FHOrderCommitDate", Convert.ToString(current["FDeliveryDate"]));//交货期HOrderCommitDate jsonModel.Add("FHUnitID", new JObject() { ["Fnumber"] = FHUnitID });//单位 jsonModel.Add("FBOMID", new JObject() { ["Fnumber"] = FBomNumber });//BOM版本 jsonModel.Add("FHPlanBeginDate", FPlanBeginDate);//计划开始日期 jsonModel.Add("FHPlanEndDate", FPlanEndDate);//计划完工日期 jsonModel.Add("FPriority", Convert.ToString(current["FPriority"]));//优先级 jsonModel.Add("FBatch", FLOT);//批次 jsonModel.Add("FHOrderNeedQty", FQTY);// 订单需求数量 jsonModel.Add("FPrdBillNo", FBILLNO); ;//源单编号 jsonModel.Add("FPRDMOMAINID", FID); ;//源单主内码 jsonModel.Add("FPRDMOENTYID", FENTRYID); ;//源单子内码 jsonModel.Add("FMoFID", FID); ;//源单主内码 jsonModel.Add("FMoFentryId", FENTRYID); ;//源单子内码 jsonModel.Add("FOrderQuantity", Convert.ToString(current["FOrderQuantity"])); ;//生产订单数量 jsonModel.Add("FDayPlanQuantity", Convert.ToString(current["FDayPlanQuantity"])); ;//日计划数量 jsonModel.Add("FNoScheduled", Convert.ToString(current["FNoScheduled"])); ;//未排数量 jsonModel.Add("FCDQuantity", Convert.ToString(current["FCDQuantity"]));//拆单数量 jsonModel.Add("FHMaker", new JObject() { ["FUserID"] = Context.UserId }); //创建人 jsonModel.Add("FHUpDater", new JObject() { ["FUserID"] = Context.UserId }); //修改人 JObject jsonFHMaterID = new JObject(); jsonFHMaterID.Add("FNumber", (current["FMatrailId"] as DynamicObject)["Number"].ToString()); jsonModel.Add("FHMaterID", jsonFHMaterID);//FHMaterID 物料 if (Convert.ToString(current["FORGID_Id"]) != "0") { JObject jsonFHPRDORGID = new JObject(); jsonFHPRDORGID.Add("FNumber", (current["FORGID"] as DynamicObject)["Number"].ToString()); jsonModel.Add("FHPRDORGID", jsonFHPRDORGID);//FHMaterID 生产组织 } if (Convert.ToString(current["FResourcesId_Id"]) != "0") { JObject jsonFProductWorkShopId = new JObject(); jsonFProductWorkShopId.Add("FNumber", (current["FResourcesId"] as DynamicObject)["Number"].ToString()); jsonModel.Add("FHSourceID", jsonFProductWorkShopId);//FHSourceID 生产车间 } if (Convert.ToString(current["FProductWorkShopId_Id"]) != "0") { JObject jsonFResourcesId = new JObject(); jsonFResourcesId.Add("FNumber", (current["FProductWorkShopId"] as DynamicObject)["Number"].ToString()); jsonModel.Add("FHWorkShopID", jsonFResourcesId);//FHWorkShopID 生产资源 } JArray Entry = new JArray(); if (Convert.ToString(current["FT0"]) == "" || Convert.ToString(current["FT0"]) == "0") continue; JObject jsonFPOOrderEntry = new JObject(); jsonFPOOrderEntry.Add("FHMasterDate", date.AddDays(0).ToShortDateString()); ;//主日期 jsonFPOOrderEntry.Add("FHQty ", Convert.ToString(current["FT0"])); ;//日计划数量 jsonFPOOrderEntry.Add("FSpreadBillNo", fnallySpreadBillNo); //流传单号 生产订单号+生产订单明细行号+序号mo0001-1-1 Entry.Add(jsonFPOOrderEntry); jsonModel.Add("FEntity", Entry); jsonRoot.Add("Model", jsonModel); CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); var result = cloudClient.Save("Paez_Sc_WorkBillAutoSortBill", jsonRoot.ToString()); JObject saveObj = JObject.Parse(result); string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); if (saveIsSuc != "TRUE") { //LogHelper.Error("生产计划平台新增保存失败:" + saveObj.ToString()); errResult += $"序号:{current["SEQ"]}," + saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString() + "\r\n"; fseqList.Add(Convert.ToInt32(current["SEQ"])); continue; } if (saveIsSuc == "TRUE") { string FDayPlanBillNo = saveObj["Result"]["Number"].ToString(); string FDayPlanID = saveObj["Result"]["Id"].ToString(); this.Model.SetValue("FDayPlanWorkID", FDayPlanID, Convert.ToInt32(current["SEQ"]) - 1);// this.View.UpdateView(); } } } if (fseqList.Count > 0) { foreach (var item in fseqList) { grid.SetRowBackcolor("#71FF98CB", item - 1); } this.View.ShowErrMessage(errResult); return; } this.View.ShowMessage("操作成功"); //SearchList(); } catch (Exception ex) { this.View.ShowErrMessage(ex.Message.ToString()); } } /// /// 齐套分析 /// /// [Obsolete] 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(() => { var resuult = ""; try { // 需要捕获错误,以确保处理结束时,关闭进度滚动界面 // 引入功能实际处理函数 resuult = this.CompleteSetAnalysisByDataTable(); } 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) => { }); } private void COMPLETEBOM() { // 显示一个进度显示界面:显示一个不停滚动的模拟进度 // 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(() => { var resuult = ""; try { // 需要捕获错误,以确保处理结束时,关闭进度滚动界面 // 引入功能实际处理函数 resuult = this.CompleteSetAnalysisByDataTableBom(); } 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) => { }); } //生产用料清单 齐套分析 public string CompleteSetAnalysisByDataTable() { LogHelper.Info("齐套分析sql模式开始准备数据:"); string sql = ""; try { Stopwatch sw = new Stopwatch(); var fPrdOrgId = (this.Model.GetValue("FPRDOrgId") as DynamicObject)?["Id"].ToString(); string fProWorkShopId = ""; DynamicObjectCollection entryOp = this.View.Model.GetValue("F_bsv_MulBase") as DynamicObjectCollection; if (entryOp.Count == 1) { List pkValueList = entryOp.Select(p => p["F_bsv_MulBase_Id"].ToString()).Distinct().ToList(); fProWorkShopId = string.Join(",", pkValueList); } if (String.IsNullOrEmpty(fProWorkShopId) || String.IsNullOrEmpty(fPrdOrgId)) { return "请选择组织和单个生产车间"; } List BomList = new List(); string procSql = $"exec proc_jit_qtfx {fPrdOrgId},{fProWorkShopId},{Context.UserId}"; LogService.Write(procSql); DataSet _ds = DBServiceHelper.ExecuteDataSet(Context, procSql); DataTable resulTable = _ds.Tables[0]; if (resulTable.Rows[0][0].ToString().Contains("失败")) return resulTable.Rows[0][0].ToString(); else BomList = _ds.ToModelList(); string fDayPlanFids = ""; if (BomList.Count == 0) { return "没有需要进行齐套分析的数据"; } else { List _BomList = BomList.Select(x => x.FID.ToString()).Distinct().ToList(); fDayPlanFids = string.Join(",", _BomList); } sw.Start();//开始计时 //获取当前即时库存 库存数量+库存组织+物料+货主+仓库 sql = "/*dialect*/ exec proc_jit_SelectInventory 'PPBOM'"; DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql); ListInventory = ds.ToModelList(); //车间 仓库对照列表 ds = DBServiceHelper.ExecuteDataSet(Context, @" /*dialect*/ SELECT DISTINCT T1.FORGID,FWORKSHOPID,FSTOCKID FROM T_PRD_WORKHOUSECOMPAR T1 JOIN T_PRD_WORKHOUSECOMPARENTRY T2 ON T1.FID=T2.FID "); List pRD_WorkHouseCompar = ds.ToModelList(); int i = 1;//用于进度条的加载 //日计划+生产订单子表编码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(); string LLsql = string.Format(@" /*dialect*/ select a.FCXStockInQty,FPRDMOENTYID,FNeedQty/FQty dwyl,FPickedQty,T2.FMATERIALID, case when FPickedQty - a.FCXStockInQty *(FNeedQty/FQty) < 0 then 0 else FPickedQty - a.FCXStockInQty *(FNeedQty/FQty) end as FRemainPickedQty from ( select distinct 0 as FCXStockInQty,FPRDMOENTYID from SC_WORKBILLSORTBILLMAIN a union all select distinct 0 as FCXStockInQty,FMOENTRYID from SC_WORKBILLSORTBILLMAIN a where FMOENTRYID>0 ) a join T_PRD_PPBOM T1 on a.FPRDMOENTYID = t1.FMOENTRYID LEFT JOIN T_PRD_PPBOMENTRY t2 on T1.FID = T2.FID LEFT JOIN T_PRD_PPBOMENTRY_Q t3 on t2.FENTRYID = T3.FENTRYID ", fDayPlanFids); List DayPlanPickedModel = new List(); ds = DBServiceHelper.ExecuteDataSet(Context, LLsql); DayPlanPickedModel = ds.ToModelList(); //CompleteAnalysisTempModel 用于存储临时需要插入数据 List completeAnalysisTempModel = new List(); //创建字典 用于储存物料 + 占用数量 Dictionary occupyDic = new Dictionary(); LogService.Write($"齐套分析,数据准备阶段,用时" + sw.Elapsed + "总行数:" + DatePlanList.Count); //第一个循环 日计划工单明细 一天+一个工单 一个循环 foreach (var item in DatePlanList) { this.View.Session["ProcessRateValue"] = Convert.ToInt32((Convert.ToDecimal(75) / DatePlanList.Count) * i); //日计划用料清单明细 每一天的实际用料情况 var _BomList = BomList.Where(x => x.FHMASTERDATE == item.FHMASTERDATE && x.FPRDMOENTYID == item.FPRDMOENTYID).ToList(); //每一个物料进行库存计算 foreach (var _item in _BomList) { //车间仓库 对照表 每个日计划同属一个车间 A,B var _pRD_WorkHouseCompar = pRD_WorkHouseCompar.Where(c => /*c.FORGID == _item.FStockOrgId &&*/ c.FWORKSHOPID == _item.FHWorkShopID).ToList(); decimal jskcQty = 0;//用于计算 decimal jskcQty2 = 0;//用于计算当时那个计算节点的即时库存 //计算当前这几个仓库总的库存量 if (_pRD_WorkHouseCompar.Count > 0) { foreach (var _WorkHouse in _pRD_WorkHouseCompar) { //库存数据匹配 List _ListInventory = ListInventory.Where(c => c.FNumber == _item.FNumber/* && c.FStockOrgId == _item.FStockOrgId*/ && c.FBASEQTY > 0 && c.FSTOCKID == _WorkHouse.FSTOCKID).ToList(); if (_ListInventory.Count > 0) { foreach (var Inventory in _ListInventory) { jskcQty += Inventory.FBASEQTY; } } } } //找出物料被其它订单占用数量 decimal occupyMaterial = 0; if (occupyDic.ContainsKey(_item.FHWorkShopID + _item.FMATERIALID2)) { occupyMaterial = occupyDic[_item.FHWorkShopID + _item.FMATERIALID2]; } //虚拟日计划用料清单 需求数量 decimal planNeed = _item.PlanCount; //不参与计算 用于记录 decimal need = _item.PlanCount;//参与计算 decimal FOccupyPickedCount = 0;//占用领料单数量 //找到领用数量 var _DayPlanPickedModel = DayPlanPickedModel.Where(c => c.FPRDMOENTYID == _item.FPRDMOENTYID && c.FMATERIALID == _item.FMATERIALID2).FirstOrDefault(); if (_DayPlanPickedModel != null) { if (_DayPlanPickedModel.FRemainPickedQty >= need) { //领料数量满足了当前这个需求量 直接齐套 不需要去占用仓库 completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel { FHMainICMOInterIDr = _item.FPRDMOMAINID, FHMainICMOEntryID = _item.FPRDMOENTYID, FHICMOInterID = _item.FID.ToString(), FHICMOEntryID = _item.FEntryID.ToString(), FHMaterID = _item.FMATERIALID2, FErpClsID = _item.FErpClsID, FHStockOrgID = _item.FStockOrgId, FHPRDORGID = _item.FStockOrgId, FPRDBillNo = _item.FMOBillNO, FOwnerTypeId = "", FUnitDosage = _item.dwyl,//单位用量 FSumPlanCount = planNeed,//计划总数量 FCompleteCount1 = planNeed, //齐套数量 FLackCount = 0,//缺料数量 FHStockQty = jskcQty2,//即时库存 FHLeftQty = jskcQty,//可用数量 FOccupyCount = occupyMaterial,//占用数量 FOccupyPickedCount = planNeed,//占用领料数量 FComPlete = "齐套", FPlanDate = item.FHMASTERDATE, // 日计划日期 FWorkShop = _item.FHWorkShopID //车间 }); //扣除剩余可用领料数量 _DayPlanPickedModel.FRemainPickedQty -= need; //循环下一个物料 continue; } else { need -= _DayPlanPickedModel.FRemainPickedQty; //剩余需求数量 FOccupyPickedCount = _DayPlanPickedModel.FRemainPickedQty; _DayPlanPickedModel.FRemainPickedQty = 0; } } if (_pRD_WorkHouseCompar.Count > 0) { //缺料数量 需求数量 - 实际库存 >0 ? 一个物料不管占用多少条 库存+货主 数据 缺料数量是同一个数量 decimal _fLackCount = need > jskcQty ? (need - jskcQty) : 0; //LogHelper.Info("组织:" + _item.FStockOrgId + " ,及时库存" + jskcQty); //总库存为0了 直接给出 缺料数量 if (jskcQty == 0) { completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel { FHMainICMOInterIDr = _item.FPRDMOMAINID, FHMainICMOEntryID = _item.FPRDMOENTYID, FHICMOInterID = _item.FID.ToString(), FHICMOEntryID = _item.FEntryID.ToString(), FHMaterID = _item.FMATERIALID2, FErpClsID = _item.FErpClsID, FHStockOrgID = _item.FStockOrgId, FHPRDORGID = _item.FStockOrgId, FPRDBillNo = _item.FMOBillNO, FOwnerTypeId = "", FUnitDosage = _item.dwyl,//单位用量 FSumPlanCount = planNeed,//计划总数量 FCompleteCount1 = FOccupyPickedCount, //齐套数量 FLackCount = need,//缺料数量 FHStockQty = jskcQty2,//即时库存 FHLeftQty = jskcQty,//可用数量 FOccupyCount = occupyMaterial,//占用数量 FOccupyPickedCount = FOccupyPickedCount,//占用领料数量 FComPlete = "未齐套", FPlanDate = item.FHMASTERDATE, // 日计划日期 FWorkShop = _item.FHWorkShopID //车间 }); //终止该物料计算 进入下一个 continue; } foreach (var WorkHouse in _pRD_WorkHouseCompar) { //库存数据匹配 List _ListInventory = ListInventory.Where(c => c.FNumber == _item.FNumber /*&& c.FStockOrgId == _item.FStockOrgId*/ && c.FBASEQTY > 0 && c.FSTOCKID == WorkHouse.FSTOCKID).ToList(); //需求数量 占用完后可以跳出车间仓库循环 if (need == 0) break; if (_ListInventory.Count > 0) { foreach (var Inventory in _ListInventory) { if (need == 0) break; //齐套数量 decimal fCompleteCount = need >= Inventory.FBASEQTY ? Inventory.FBASEQTY : need; if (!occupyDic.ContainsKey(_item.FHWorkShopID + _item.FMATERIALID2)) { occupyDic.Add(_item.FHWorkShopID + _item.FMATERIALID2, fCompleteCount); } else { occupyMaterial = occupyDic[_item.FHWorkShopID + _item.FMATERIALID2]; occupyDic[_item.FHWorkShopID + _item.FMATERIALID2] = occupyMaterial + fCompleteCount; } completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel { FHMainICMOInterIDr = _item.FPRDMOMAINID, FHMainICMOEntryID = _item.FPRDMOENTYID, FHICMOInterID = _item.FID.ToString(), FHICMOEntryID = _item.FEntryID.ToString(), FHMaterID = _item.FMATERIALID2, FHStockOrgID = _item.FStockOrgId, FHPRDORGID = _item.FStockOrgId, FErpClsID = _item.FErpClsID, FPRDBillNo = _item.FMOBillNO, FOwnerTypeId = Inventory.FOwnerTypeId, FOwnerId = Inventory.FOwnerId, FUnitDosage = _item.dwyl,//单位用量 FSumPlanCount = planNeed,//计划总数量 FCompleteCount1 = fCompleteCount + FOccupyPickedCount, //齐套数量 FLackCount = _fLackCount,//缺料数量 FHStockQty = jskcQty2,//即时库存 FHLeftQty = jskcQty,//可用数量 FOccupyCount = occupyMaterial,//占用数量 FOccupyPickedCount = FOccupyPickedCount,//领料占用数量 FComPlete = jskcQty >= need ? "齐套" : "未齐套", FPlanDate = item.FHMASTERDATE, // 日计划日期 FStock = Inventory.FSTOCKID,//仓库 FWorkShop = _item.FHWorkShopID, //车间 FLot = Inventory.FLot }); //扣减总库存数量 jskcQty = jskcQty >= fCompleteCount ? jskcQty - fCompleteCount : 0; //剩余日计划需求数量 need = need >= Inventory.FBASEQTY ? need - Inventory.FBASEQTY : 0; //扣减消耗库存 Inventory.FBASEQTY = Inventory.FBASEQTY - fCompleteCount; } } } } //没有车间仓库数据 即没有可用库存 为未齐套 else { if (occupyDic.ContainsKey(_item.FHWorkShopID + _item.FMATERIALID2)) { occupyMaterial = occupyDic[_item.FHWorkShopID + _item.FMATERIALID2]; } completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel { FHMainICMOInterIDr = _item.FPRDMOMAINID, FHMainICMOEntryID = _item.FPRDMOENTYID, FHICMOInterID = _item.FID.ToString(), FHICMOEntryID = _item.FEntryID.ToString(), FHMaterID = _item.FMATERIALID2, FErpClsID = _item.FErpClsID, FHStockOrgID = _item.FStockOrgId, FHPRDORGID = _item.FStockOrgId, FPRDBillNo = _item.FMOBillNO, FOwnerTypeId = "", FUnitDosage = _item.dwyl,//单位用量 FSumPlanCount = planNeed,//计划总数量 FCompleteCount1 = planNeed - need, //齐套数量 FLackCount = need,//缺料数量 FHStockQty = jskcQty2,//即时库存 FHLeftQty = jskcQty,//可用数量 FOccupyCount = occupyMaterial,//占用数量 FOccupyPickedCount = FOccupyPickedCount,//占用领料数量 FComPlete = "未齐套", FPlanDate = item.FHMASTERDATE, // 日计划日期 FWorkShop = _item.FHWorkShopID //车间 }); } } //Thread.Sleep(6000); i++; } LogService.Write($"齐套分析,数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed); List sqlList = new List(); DataTable insertDT = new DataTable(); insertDT.TableName = "JIT_MOMaterReadysBill"; //insertDT.Columns.Add("FID", typeof(long)); //insertDT.Columns.Add("FBILLNO", typeof(string)); insertDT.Columns.Add("FDOCUMENTSTATUS", typeof(string)); insertDT.Columns.Add("FHMAINICMOINTERIDR", typeof(long)); insertDT.Columns.Add("FHMAINICMOENTRYID", typeof(long)); insertDT.Columns.Add("FHICMOINTERID", typeof(long)); insertDT.Columns.Add("FHICMOENTRYID", typeof(long)); insertDT.Columns.Add("FHMATERID", typeof(long)); insertDT.Columns.Add("FHSTOCKORGID", typeof(long)); insertDT.Columns.Add("FHSTOCKQTY", typeof(decimal)); insertDT.Columns.Add("FHLEFTQTY", typeof(decimal)); insertDT.Columns.Add("FHPRDORGID", typeof(long)); insertDT.Columns.Add("FUNITDOSAGE", typeof(decimal)); insertDT.Columns.Add("FSUMPLANCOUNT", typeof(decimal)); insertDT.Columns.Add("FPRDBILLNO", typeof(string)); insertDT.Columns.Add("FOWNERID", typeof(long)); insertDT.Columns.Add("FOWNERTYPEID", typeof(string)); //insertDT.Columns.Add("FIDENTIFICAT", typeof(long)); insertDT.Columns.Add("FPLANDATE", typeof(DateTime)); insertDT.Columns.Add("FCOMPLETE", typeof(string)); insertDT.Columns.Add("FLACKCOUNT", typeof(decimal)); insertDT.Columns.Add("FOCCUPYCOUNT", typeof(decimal)); insertDT.Columns.Add("FCOMPLETECOUNT1", typeof(decimal)); insertDT.Columns.Add("FERPCLSID", typeof(string)); insertDT.Columns.Add("FWORKSHOPID", typeof(long)); insertDT.Columns.Add("FSTOCKID", typeof(long)); insertDT.Columns.Add("FOCCUPYPICKEDCOUNT", typeof(decimal)); insertDT.Columns.Add("FLOT", typeof(long)); int jdtmmm = 1; int maxFid = DBServiceHelper.ExecuteScalar(Context, "select max(FID)FID FROM JIT_MOMaterReadysBill", 0); foreach (var item in completeAnalysisTempModel) { DataRow dr = insertDT.NewRow(); //dr["FID"] = maxFid + jdtmmm; //dr["FBILLNO"] = ""; dr["FDOCUMENTSTATUS"] = "A"; dr["FHMAINICMOINTERIDR"] = item.FHMainICMOInterIDr; dr["FHMAINICMOENTRYID"] = item.FHMainICMOEntryID; dr["FHICMOINTERID"] = item.FHICMOInterID; dr["FHICMOENTRYID"] = item.FHICMOEntryID; dr["FHMATERID"] = item.FHMaterID; dr["FHSTOCKORGID"] = item.FHStockOrgID; dr["FHSTOCKQTY"] = item.FHStockQty; dr["FHLEFTQTY"] = item.FHLeftQty; dr["FHPRDORGID"] = item.FHPRDORGID; dr["FUNITDOSAGE"] = item.FUnitDosage; dr["FSUMPLANCOUNT"] = item.FSumPlanCount; dr["FPRDBILLNO"] = item.FPRDBillNo; dr["FOWNERID"] = item.FOwnerId == null ? "0" : item.FOwnerId; dr["FOWNERTYPEID"] = item.FOwnerTypeId; //dr["FIDENTIFICAT"] = ""; dr["FPLANDATE"] = item.FPlanDate.ToString("yyyy-MM-dd"); dr["FCOMPLETE"] = item.FComPlete; dr["FLACKCOUNT"] = item.FLackCount; dr["FOCCUPYCOUNT"] = item.FOccupyCount; dr["FCOMPLETECOUNT1"] = item.FCompleteCount1; dr["FERPCLSID"] = item.FErpClsID; dr["FWORKSHOPID"] = item.FWorkShop == null ? "0" : item.FWorkShop; dr["FSTOCKID"] = item.FStock == null ? "0" : item.FStock; dr["FOCCUPYPICKEDCOUNT"] = item.FOccupyPickedCount; dr["FLOT"] = item.FLot == null ? "0" : item.FLot; insertDT.Rows.Add(dr); this.View.Session["ProcessRateValue"] = 75 + Convert.ToInt32((Convert.ToDecimal(23) / completeAnalysisTempModel.Count) * jdtmmm); jdtmmm++; } //灌入数据结束 insertDT.EndLoadData(); //批量插入到数据库 string deletesql = $"delete from JIT_MOMaterReadysBill where FHICMOINTERID in ({fDayPlanFids}) "; DBServiceHelper.Execute(Context, deletesql); 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 T_PRD_QTFX set FSTATUS = 0 where FPRDORGID ={fPrdOrgId} and FSTATUS = 1 "); sw.Stop();//结束计时 LogService.Write("齐套分析运行总时长:" + sw.Elapsed); return "操作成功"; } catch (Exception ex) { DBServiceHelper.Execute(Context, $"/*dialect*/ update T_PRD_QTFX set FSTATUS = 0 where FUSERID ={Context.UserId} and FSTATUS = 1 "); LogService.Write("操作失败:" + ex.Message.ToString() + ex.StackTrace); return "操作失败," + ex.Message.ToString(); } } //收料通知单 齐套分析 public string CompleteSetAnalysisByDataTableBom() { LogHelper.Info("齐套分析sql模式开始准备数据:"); string sql = ""; try { Stopwatch sw = new Stopwatch(); var fPrdOrgId = (this.Model.GetValue("FPRDOrgId") as DynamicObject)?["Id"].ToString(); string fProWorkShopId = ""; DynamicObjectCollection entryOp = this.View.Model.GetValue("F_bsv_MulBase") as DynamicObjectCollection; if (entryOp.Count == 1) { List pkValueList = entryOp.Select(p => p["F_bsv_MulBase_Id"].ToString()).Distinct().ToList(); fProWorkShopId = string.Join(",", pkValueList); } if (String.IsNullOrEmpty(fProWorkShopId) || String.IsNullOrEmpty(fPrdOrgId)) { return "请选择组织和单个生产车间"; } List BomList = new List(); string procSql = $"exec proc_jit_qtfx {fPrdOrgId},{fProWorkShopId},{Context.UserId}"; DataSet _ds = DBServiceHelper.ExecuteDataSet(Context, procSql); DataTable resulTable = _ds.Tables[0]; if (resulTable.Rows[0][0].ToString().Contains("失败")) return resulTable.Rows[0][0].ToString(); else BomList = _ds.ToModelList(); string fDayPlanFids = ""; if (BomList.Count == 0) { return "没有需要进行齐套分析的数据"; } else { List _BomList = BomList.Select(x => x.FID.ToString()).Distinct().ToList(); fDayPlanFids = string.Join(",", _BomList); } sw.Start();//开始计时 //获取当前即时库存 库存数量+库存组织+物料+货主+仓库 sql = "/*dialect*/ exec proc_jit_SelectInventory 'BOM'"; DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql); ListInventory = ds.ToModelList(); //车间 仓库对照列表 ds = DBServiceHelper.ExecuteDataSet(Context, @" /*dialect*/ SELECT DISTINCT T1.FORGID,FWORKSHOPID,FSTOCKID FROM T_PRD_WORKHOUSECOMPAR T1 JOIN T_PRD_WORKHOUSECOMPARENTRY T2 ON T1.FID=T2.FID "); List pRD_WorkHouseCompar = ds.ToModelList(); int i = 1;//用于进度条的加载 //日计划+生产订单子表编码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(); string LLsql = string.Format(@" /*dialect*/ select a.FCXStockInQty,FPRDMOENTYID,FNeedQty/FQty dwyl,FPickedQty,T2.FMATERIALID, case when FPickedQty - a.FCXStockInQty *(FNeedQty/FQty) < 0 then 0 else FPickedQty - a.FCXStockInQty *(FNeedQty/FQty) end as FRemainPickedQty from ( select sum(FCXStockInQty)FCXStockInQty,FPRDMOENTYID from SC_WORKBILLSORTBILLMAIN a group by FPRDMOENTYID ) a join T_PRD_PPBOM T1 on a.FPRDMOENTYID = t1.FMOENTRYID LEFT JOIN T_PRD_PPBOMENTRY t2 on T1.FID = T2.FID LEFT JOIN T_PRD_PPBOMENTRY_Q t3 on t2.FENTRYID = T3.FENTRYID ", fDayPlanFids); List DayPlanPickedModel = new List(); ds = DBServiceHelper.ExecuteDataSet(Context, LLsql); DayPlanPickedModel = ds.ToModelList(); //CompleteAnalysisTempModel 用于存储临时需要插入数据 List completeAnalysisTempModel = new List(); //创建字典 用于储存物料 + 占用数量 Dictionary occupyDic = new Dictionary(); LogService.Write($"齐套分析,数据准备阶段,用时" + sw.Elapsed + "总行数:" + BomList.Count); //第一个循环 日计划工单明细 一天+一个工单 一个循环 foreach (var item in DatePlanList) { this.View.Session["ProcessRateValue"] = Convert.ToInt32((Convert.ToDecimal(75) / DatePlanList.Count) * i); //日计划用料清单明细 每一天的实际用料情况 var _BomList = BomList.Where(x => x.FHMASTERDATE == item.FHMASTERDATE && x.FPRDMOENTYID == item.FPRDMOENTYID).ToList(); //每一个物料进行库存计算 foreach (var _item in _BomList) { //车间仓库 对照表 每个日计划同属一个车间 A,B var _pRD_WorkHouseCompar = pRD_WorkHouseCompar.Where(c => /*c.FORGID == _item.FStockOrgId &&*/ c.FWORKSHOPID == _item.FHWorkShopID).ToList(); decimal jskcQty = 0;//用于计算 decimal jskcQty2 = 0;//用于计算当时那个计算节点的即时库存 //计算当前这几个仓库总的库存量 if (_pRD_WorkHouseCompar.Count > 0) { foreach (var _WorkHouse in _pRD_WorkHouseCompar) { //库存数据匹配 List _ListInventory = ListInventory.Where(c => c.FNumber == _item.FNumber/* && c.FStockOrgId == _item.FStockOrgId*/ && c.FBASEQTY > 0 && c.FSTOCKID == _WorkHouse.FSTOCKID).ToList(); if (_ListInventory.Count > 0) { foreach (var Inventory in _ListInventory) { jskcQty += Inventory.FBASEQTY; } } } } //找出物料被其它订单占用数量 decimal occupyMaterial = 0; if (occupyDic.ContainsKey(_item.FHWorkShopID + _item.FMATERIALID2)) { occupyMaterial = occupyDic[_item.FHWorkShopID + _item.FMATERIALID2]; } //虚拟日计划用料清单 需求数量 decimal planNeed = _item.PlanCount; //不参与计算 用于记录 decimal need = _item.PlanCount;//参与计算 decimal FOccupyPickedCount = 0;//占用领料单数量 //找到领用数量 var _DayPlanPickedModel = DayPlanPickedModel.Where(c => c.FPRDMOENTYID == _item.FPRDMOENTYID && c.FMATERIALID == _item.FMATERIALID2).FirstOrDefault(); if (_DayPlanPickedModel.FRemainPickedQty >= need) { //领料数量满足了当前这个需求量 直接齐套 不需要去占用仓库 completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel { FHMainICMOInterIDr = _item.FPRDMOMAINID, FHMainICMOEntryID = _item.FPRDMOENTYID, FHICMOInterID = _item.FID.ToString(), FHICMOEntryID = _item.FEntryID.ToString(), FHMaterID = _item.FMATERIALID2, FErpClsID = _item.FErpClsID, FHStockOrgID = _item.FStockOrgId, FHPRDORGID = _item.FStockOrgId, FPRDBillNo = _item.FMOBillNO, FOwnerTypeId = "", FUnitDosage = _item.dwyl,//单位用量 FSumPlanCount = planNeed,//计划总数量 FCompleteCount1 = planNeed, //齐套数量 FLackCount = 0,//缺料数量 FHStockQty = jskcQty2,//即时库存 FHLeftQty = jskcQty,//可用数量 FOccupyCount = occupyMaterial,//占用数量 FOccupyPickedCount = planNeed,//占用领料数量 FComPlete = "齐套", FPlanDate = item.FHMASTERDATE, // 日计划日期 FWorkShop = _item.FHWorkShopID //车间 }); //扣除剩余可用领料数量 _DayPlanPickedModel.FRemainPickedQty -= need; //循环下一个物料 continue; } else { need -= _DayPlanPickedModel.FRemainPickedQty; //剩余需求数量 FOccupyPickedCount = _DayPlanPickedModel.FRemainPickedQty; _DayPlanPickedModel.FRemainPickedQty = 0; } if (_pRD_WorkHouseCompar.Count > 0) { //缺料数量 需求数量 - 实际库存 >0 ? 一个物料不管占用多少条 库存+货主 数据 缺料数量是同一个数量 decimal _fLackCount = need > jskcQty ? (need - jskcQty) : 0; //LogHelper.Info("组织:" + _item.FStockOrgId + " ,及时库存" + jskcQty); //总库存为0了 直接给出 缺料数量 if (jskcQty == 0) { completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel { FHMainICMOInterIDr = _item.FPRDMOMAINID, FHMainICMOEntryID = _item.FPRDMOENTYID, FHICMOInterID = _item.FID.ToString(), FHICMOEntryID = _item.FEntryID.ToString(), FHMaterID = _item.FMATERIALID2, FErpClsID = _item.FErpClsID, FHStockOrgID = _item.FStockOrgId, FHPRDORGID = _item.FStockOrgId, FPRDBillNo = _item.FMOBillNO, FOwnerTypeId = "", FUnitDosage = _item.dwyl,//单位用量 FSumPlanCount = planNeed,//计划总数量 FCompleteCount1 = FOccupyPickedCount, //齐套数量 FLackCount = need,//缺料数量 FHStockQty = jskcQty2,//即时库存 FHLeftQty = jskcQty,//可用数量 FOccupyCount = occupyMaterial,//占用数量 FOccupyPickedCount = FOccupyPickedCount,//占用领料数量 FComPlete = "未齐套", FPlanDate = item.FHMASTERDATE, // 日计划日期 FWorkShop = _item.FHWorkShopID //车间 }); //终止该物料计算 进入下一个 continue; } foreach (var WorkHouse in _pRD_WorkHouseCompar) { //库存数据匹配 List _ListInventory = ListInventory.Where(c => c.FNumber == _item.FNumber /*&& c.FStockOrgId == _item.FStockOrgId*/ && c.FBASEQTY > 0 && c.FSTOCKID == WorkHouse.FSTOCKID).ToList(); //需求数量 占用完后可以跳出车间仓库循环 if (need == 0) break; if (_ListInventory.Count > 0) { foreach (var Inventory in _ListInventory) { if (need == 0) break; //齐套数量 decimal fCompleteCount = need >= Inventory.FBASEQTY ? Inventory.FBASEQTY : need; if (!occupyDic.ContainsKey(_item.FHWorkShopID + _item.FMATERIALID2)) { occupyDic.Add(_item.FHWorkShopID + _item.FMATERIALID2, fCompleteCount); } else { occupyMaterial = occupyDic[_item.FHWorkShopID + _item.FMATERIALID2]; occupyDic[_item.FHWorkShopID + _item.FMATERIALID2] = occupyMaterial + fCompleteCount; } completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel { FHMainICMOInterIDr = _item.FPRDMOMAINID, FHMainICMOEntryID = _item.FPRDMOENTYID, FHICMOInterID = _item.FID.ToString(), FHICMOEntryID = _item.FEntryID.ToString(), FHMaterID = _item.FMATERIALID2, FHStockOrgID = _item.FStockOrgId, FHPRDORGID = _item.FStockOrgId, FErpClsID = _item.FErpClsID, FPRDBillNo = _item.FMOBillNO, FOwnerTypeId = Inventory.FOwnerTypeId, FOwnerId = Inventory.FOwnerId, FUnitDosage = _item.dwyl,//单位用量 FSumPlanCount = planNeed,//计划总数量 FCompleteCount1 = fCompleteCount + FOccupyPickedCount, //齐套数量 FLackCount = _fLackCount,//缺料数量 FHStockQty = jskcQty2,//即时库存 FHLeftQty = jskcQty,//可用数量 FOccupyCount = occupyMaterial,//占用数量 FOccupyPickedCount = FOccupyPickedCount,//领料占用数量 FComPlete = jskcQty >= need ? "齐套" : "未齐套", FPlanDate = item.FHMASTERDATE, // 日计划日期 FStock = Inventory.FSTOCKID,//仓库 FWorkShop = _item.FHWorkShopID, //车间 FBILLNO = Inventory.FBILLNO, FLot = Inventory.FLot }); //扣减总库存数量 jskcQty = jskcQty >= fCompleteCount ? jskcQty - fCompleteCount : 0; //剩余日计划需求数量 need = need >= Inventory.FBASEQTY ? need - Inventory.FBASEQTY : 0; //扣减消耗库存 Inventory.FBASEQTY = Inventory.FBASEQTY - fCompleteCount; } } } } //没有车间仓库数据 既没有可用库存 为未齐套 else { if (occupyDic.ContainsKey(_item.FHWorkShopID + _item.FMATERIALID2)) { occupyMaterial = occupyDic[_item.FHWorkShopID + _item.FMATERIALID2]; } completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel { FHMainICMOInterIDr = _item.FPRDMOMAINID, FHMainICMOEntryID = _item.FPRDMOENTYID, FHICMOInterID = _item.FID.ToString(), FHICMOEntryID = _item.FEntryID.ToString(), FHMaterID = _item.FMATERIALID2, FErpClsID = _item.FErpClsID, FHStockOrgID = _item.FStockOrgId, FHPRDORGID = _item.FStockOrgId, FPRDBillNo = _item.FMOBillNO, FOwnerTypeId = "", FUnitDosage = _item.dwyl,//单位用量 FSumPlanCount = planNeed,//计划总数量 FCompleteCount1 = planNeed - need, //齐套数量 FLackCount = need,//缺料数量 FHStockQty = jskcQty2,//即时库存 FHLeftQty = jskcQty,//可用数量 FOccupyCount = occupyMaterial,//占用数量 FOccupyPickedCount = FOccupyPickedCount,//占用领料数量 FComPlete = "未齐套", FPlanDate = item.FHMASTERDATE, // 日计划日期 FWorkShop = _item.FHWorkShopID //车间 }); } } //Thread.Sleep(6000); i++; } LogService.Write($"齐套分析,数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed); List sqlList = new List(); DataTable insertDT = new DataTable(); insertDT.TableName = "JIT_MOMaterReadysBillXn"; //insertDT.Columns.Add("FID", typeof(long)); //insertDT.Columns.Add("FBILLNO", typeof(string)); insertDT.Columns.Add("FDOCUMENTSTATUS", typeof(string)); insertDT.Columns.Add("FHMAINICMOINTERIDR", typeof(long)); insertDT.Columns.Add("FHMAINICMOENTRYID", typeof(long)); insertDT.Columns.Add("FHICMOINTERID", typeof(long)); insertDT.Columns.Add("FHICMOENTRYID", typeof(long)); insertDT.Columns.Add("FHMATERID", typeof(long)); insertDT.Columns.Add("FHSTOCKORGID", typeof(long)); insertDT.Columns.Add("FHSTOCKQTY", typeof(decimal)); insertDT.Columns.Add("FHLEFTQTY", typeof(decimal)); insertDT.Columns.Add("FHPRDORGID", typeof(long)); insertDT.Columns.Add("FUNITDOSAGE", typeof(decimal)); insertDT.Columns.Add("FSUMPLANCOUNT", typeof(decimal)); insertDT.Columns.Add("FPRDBILLNO", typeof(string)); insertDT.Columns.Add("FOWNERID", typeof(long)); insertDT.Columns.Add("FOWNERTYPEID", typeof(string)); //insertDT.Columns.Add("FIDENTIFICAT", typeof(long)); insertDT.Columns.Add("FPLANDATE", typeof(DateTime)); insertDT.Columns.Add("FCOMPLETE", typeof(string)); insertDT.Columns.Add("FLACKCOUNT", typeof(decimal)); insertDT.Columns.Add("FOCCUPYCOUNT", typeof(decimal)); insertDT.Columns.Add("FCOMPLETECOUNT1", typeof(decimal)); insertDT.Columns.Add("FERPCLSID", typeof(string)); insertDT.Columns.Add("FWORKSHOPID", typeof(long)); insertDT.Columns.Add("FSTOCKID", typeof(long)); insertDT.Columns.Add("FOCCUPYPICKEDCOUNT", typeof(decimal)); insertDT.Columns.Add("FRECIEVEBILLNO", typeof(string)); insertDT.Columns.Add("FLOT", typeof(long)); int jdtmmm = 1; int maxFid = DBServiceHelper.ExecuteScalar(Context, "select max(FID)FID FROM JIT_MOMaterReadysBillXn", 0); foreach (var item in completeAnalysisTempModel) { DataRow dr = insertDT.NewRow(); //dr["FID"] = maxFid + jdtmmm; //dr["FBILLNO"] = ""; dr["FDOCUMENTSTATUS"] = "A"; dr["FHMAINICMOINTERIDR"] = item.FHMainICMOInterIDr; dr["FHMAINICMOENTRYID"] = item.FHMainICMOEntryID; dr["FHICMOINTERID"] = item.FHICMOInterID; dr["FHICMOENTRYID"] = item.FHICMOEntryID; dr["FHMATERID"] = item.FHMaterID; dr["FHSTOCKORGID"] = item.FHStockOrgID; dr["FHSTOCKQTY"] = item.FHStockQty; dr["FHLEFTQTY"] = item.FHLeftQty; dr["FHPRDORGID"] = item.FHPRDORGID; dr["FUNITDOSAGE"] = item.FUnitDosage; dr["FSUMPLANCOUNT"] = item.FSumPlanCount; dr["FPRDBILLNO"] = item.FPRDBillNo; dr["FOWNERID"] = item.FOwnerId == null ? "0" : item.FOwnerId; dr["FOWNERTYPEID"] = item.FOwnerTypeId; //dr["FIDENTIFICAT"] = ""; dr["FPLANDATE"] = item.FPlanDate.ToString("yyyy-MM-dd"); dr["FCOMPLETE"] = item.FComPlete; dr["FLACKCOUNT"] = item.FLackCount; dr["FOCCUPYCOUNT"] = item.FOccupyCount; dr["FCOMPLETECOUNT1"] = item.FCompleteCount1; dr["FERPCLSID"] = item.FErpClsID; dr["FWORKSHOPID"] = item.FWorkShop == null ? "0" : item.FWorkShop; dr["FSTOCKID"] = item.FStock == null ? "0" : item.FStock; dr["FOCCUPYPICKEDCOUNT"] = item.FOccupyPickedCount; dr["FRECIEVEBILLNO"] = item.FBILLNO == null ? "" : item.FBILLNO; dr["FLOT"] = item.FLot == null ? "0" : item.FLot; insertDT.Rows.Add(dr); this.View.Session["ProcessRateValue"] = 75 + Convert.ToInt32((Convert.ToDecimal(23) / completeAnalysisTempModel.Count) * jdtmmm); jdtmmm++; } insertDT.EndLoadData(); // 灌入数据结束 // 批量插入到数据库 string deletesql = $"delete from JIT_MOMaterReadysBillXn where FHICMOINTERID in ({fDayPlanFids}) "; DBServiceHelper.Execute(Context, deletesql); 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 T_PRD_QTFX set FSTATUS = 0 where FPRDORGID ={fPrdOrgId} and FSTATUS = 1 "); sw.Stop();//结束计时 LogService.Write("齐套分析运行总时长:" + sw.Elapsed); return "操作成功"; } catch (Exception ex) { LogService.Write("操作失败:" + ex.Message.ToString()); return "操作失败," + ex.Message.ToString(); } } /// /// 虚拟齐套 /// public void Xnqt() { //LogHelper.Info("虚拟齐套分析sql模式开始准备数据:"); string sql = ""; try { //Stopwatch sw = new Stopwatch(); //sw.Start();//开始计时 ////LogHelper.Info("虚拟齐套分析开始准备数据:" + sw.Elapsed); //清空齐套临时表 DBServiceHelper.Execute(Context, "/*dialect*/ delete JIT_MOMaterReadysBillXn "); ////更新状态 //DBServiceHelper.Execute(Context, "/*dialect*/ update Sc_WorkBillSortBillsub set FCOMPLETE='' "); //获取当前即时库存 按照物料+库存组织+货主+库存数量 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_MOMaterReadysBillXn 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 join t_BD_Stock d on a.FSTOCKID =d.FSTOCKID where d.FAvailableComplete<>0 --where T1.FMATERIALID in (105773) "); 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_MOMaterReadysBillXn B ON T1.FStockOrgId = b.FHSTOCKORGID and T1.FMATERIALID =b.FHMATERID join t_BD_Stock d on a.FSTOCKID =d.FSTOCKID where d.FAvailableComplete<>0 --where T1.FMATERIALID in (105773) group by T1.FStockOrgId,T1.FMATERIALID "); ListInventoryByStockOrgId = ds.ToModelList(); //需要虚拟齐套分析的数据 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-ISNULL(FProductNum,0))*(FNeedQty/FQty) PlanCount,TBase.FErpClsID 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_BD_MaterialBase TBase on T2.FMATERIALID = TBase.FMATERIALID JOIN T_ORG_Organizations t5 on a.FHPRDORGID = t5.FORGID --条件为今天往后的日计划 + 今天之前未关闭的日计划 where (FHEntryCloseDate is null and DATEDIFF(D,GETDATE(),FHMASTERDATE)<0)or DATEDIFF(D,GETDATE(),FHMASTERDATE)>=0 and b.FHQTY>0 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(); int i = 1; //创建字典 用于储存物料 + 占用数量 Dictionary occupyDic = new Dictionary(); 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; var sjkcList = ListInventoryByStockOrgId.Where(x => x.FMATERIALID == _item.FMATERIALID2 && x.FStockOrgId == _item.FStockOrgId).FirstOrDefault(); //真正需要取计算的数量(拆分货主) //货主匹配 List _ListInventory = ListInventory.Where(c => c.FMATERIALID == _item.FMATERIALID2 && c.FStockOrgId == _item.FStockOrgId && c.FBASEQTY > 0).ToList(); if (_ListInventory.Count > 0) { decimal _fLackCount = _item.PlanCount > sjkcList.FBASEQTY ? (_item.PlanCount - sjkcList.FBASEQTY) : 0;//缺料数量 foreach (var Inventory in _ListInventory) { if (need == 0) break; decimal fCompleteCount = need >= Inventory.FBASEQTY ? Inventory.FBASEQTY : need;//齐套数量 decimal occupyMaterial = 0; if (!occupyDic.ContainsKey(_item.FMATERIALID2)) { occupyDic.Add(_item.FMATERIALID2, fCompleteCount); } else { occupyMaterial = occupyDic[_item.FMATERIALID2]; occupyDic[_item.FMATERIALID2] = occupyMaterial + fCompleteCount; } completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel { FHMainICMOInterIDr = _item.FPRDMOMAINID, FHMainICMOEntryID = _item.FPRDMOENTYID, FHICMOInterID = _item.FID.ToString(), FHICMOEntryID = _item.FEntryID.ToString(), FHMaterID = _item.FMATERIALID2, FHStockOrgID = _item.FStockOrgId, FHPRDORGID = _item.FStockOrgId, FErpClsID = _item.FErpClsID, FPRDBillNo = _item.FMOBillNO, FOwnerTypeId = "BD_OwnerOrg", FOwnerId = Inventory.FOwnerId, FUnitDosage = _item.dwyl,//单位用量 FSumPlanCount = _item.PlanCount,//计划总数量 FCompleteCount1 = fCompleteCount, //齐套数量 FLackCount = _fLackCount,//缺料数量 FHStockQty = sjkcList.FBASEQTY,//即时库存 FHLeftQty = Inventory.FBASEQTY,//可用数量 FOccupyCount = occupyMaterial,//占用数量 /* 2021 1.26 更改为need FComPlete = sjkcList.FBASEQTY >= _item.PlanCount ? "齐套" : "未齐套", */ FComPlete = sjkcList.FBASEQTY >= need ? "齐套" : "未齐套", FPlanDate = item.FHMASTERDATE // 日计划日期 }); //扣减总库存数量 sjkcList.FBASEQTY = sjkcList.FBASEQTY >= fCompleteCount ? sjkcList.FBASEQTY - fCompleteCount : 0; //剩余日计划需求数量 need = need >= Inventory.FBASEQTY ? need - Inventory.FBASEQTY : 0; //扣减消耗库存 Inventory.FBASEQTY = Inventory.FBASEQTY - fCompleteCount; } } else { decimal occupyMaterial = 0; if (occupyDic.ContainsKey(_item.FMATERIALID2)) { occupyMaterial = occupyDic[_item.FMATERIALID2]; } completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel { FHMainICMOInterIDr = _item.FPRDMOMAINID, FHMainICMOEntryID = _item.FPRDMOENTYID, FHICMOInterID = _item.FID.ToString(), FHICMOEntryID = _item.FEntryID.ToString(), FHMaterID = _item.FMATERIALID2, FErpClsID = _item.FErpClsID, FHStockOrgID = _item.FStockOrgId, FHPRDORGID = _item.FStockOrgId, FPRDBillNo = _item.FMOBillNO, FOwnerTypeId = "BD_OwnerOrg", FUnitDosage = _item.dwyl,//单位用量 FSumPlanCount = _item.PlanCount,//计划总数量 FCompleteCount1 = 0, //齐套数量 FLackCount = _item.PlanCount,//缺料数量 FHStockQty = 0,//即时库存 FHLeftQty = 0,//可用数量 FOccupyCount = occupyMaterial,//占用数量 FComPlete = "未齐套", FPlanDate = item.FHMASTERDATE // 日计划日期 }); } } //Thread.Sleep(100); // this.View.Session["ProcessRateValue"] = Convert.ToInt32((Convert.ToDecimal(40) / DatePlanList.Count) * i); i++; } ////LogHelper.Info($"虚拟齐套分析,数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed); List sqlList = new List(); int jdtmmm = 1; foreach (var item in completeAnalysisTempModel) { sql = string.Format(@" /*dialect*/ delete z_JIT_MOMaterReadysBillXn insert into z_JIT_MOMaterReadysBillXn (column1) values('') insert into JIT_MOMaterReadysBillXn (FID, FBILLNO, FDOCUMENTSTATUS, FHMAINICMOINTERIDR, FHMAINICMOENTRYID, FHICMOINTERID, FHICMOENTRYID, FHMATERID, FHSTOCKORGID, FHSTOCKQTY, FHLEFTQTY, FHPRDORGID, FUNITDOSAGE, FSUMPLANCOUNT, FPRDBILLNO, FOWNERID, FOWNERTYPEID, FIDENTIFICAT, FPLANDATE, FCOMPLETE, FLACKCOUNT, FOCCUPYCOUNT, FCOMPLETECOUNT1,FErpClsID) select id, '', 'A', '{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}', '{10}', '{11}', '{12}', 'BD_OwnerOrg', '','{13}','{14}','{15}','{16}','{17}',{18} from z_JIT_MOMaterReadysBillXn delete z_JIT_MOMaterReadysBillXn ", item.FHMainICMOInterIDr, item.FHMainICMOEntryID, item.FHICMOInterID, item.FHICMOEntryID, item.FHMaterID, item.FHStockOrgID, item.FHStockQty, item.FHLeftQty, item.FHPRDORGID, item.FUnitDosage, item.FSumPlanCount, item.FPRDBillNo, item.FOwnerId == null ? "0" : item.FOwnerId, item.FPlanDate.ToString("yyyy-MM-dd"), item.FComPlete, item.FLackCount, item.FOccupyCount, item.FCompleteCount1, item.FErpClsID); sqlList.Add(sql); //this.View.Session["ProcessRateValue"] = Convert.ToInt32((Convert.ToDecimal(98) / completeAnalysisTempModel.Count) * jdtmmm); jdtmmm++; } DBServiceHelper.ExecuteBatch(Context, sqlList); // //执行完成后 更新日计划工单状态 // DBServiceHelper.Execute(Context, @" ///*dialect*/update Sc_WorkBillSortBillSub set FComplete = '未齐套' where FEntryID IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBillXn where isnull(FCOMPLETE,'未齐套') ='未齐套') //"); // DBServiceHelper.Execute(Context, @" ///*dialect*/update Sc_WorkBillSortBillSub set FComplete = '齐套' where FEntryID NOT IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBillXn where isnull(FCOMPLETE,'未齐套') ='未齐套') //"); //sw.Stop();//结束计时 ////LogHelper.Info("虚拟齐套分析运行总时长:" + sw.Elapsed); } catch (Exception ex) { this.View.ShowErrMessage("异常:" + ex.Message.ToString()); //LogHelper.Error("虚拟齐套分析跳出:" + ex.Message.ToString()); } finally { this.View.ShowMessage("执行完成!"); } } /// /// 查询 /// public void SearchList() { Stopwatch sw = new Stopwatch(); sw.Start();//开始计时 this.Model.DeleteEntryData("FEntity"); string sqlwhere = " and 1=1"; var fPrdOrgId = (this.Model.GetValue("FPRDOrgId") as DynamicObject)?["Id"].ToString(); if (!string.IsNullOrEmpty(fPrdOrgId)) sqlwhere += $" and FHPRDORGID in ({fPrdOrgId})"; else { this.View.ShowMessage("请选择生产订单组织"); return; } DynamicObjectCollection entryOp = this.View.Model.GetValue("F_bsv_MulBase") as DynamicObjectCollection; if (entryOp.Count > 0) { //string[] pkValues = entryOp.Select(p => p["F_bsv_MulBase_Id"].ToString()).Distinct().ToArray(); //var aa = string.Join(",", pkValues); List pkValueList = entryOp.Select(p => p["F_bsv_MulBase_Id"].ToString()).Distinct().ToList(); sqlwhere += $" and FHWorkShopID in ({string.Join(",", pkValueList)})"; } else { this.View.ShowMessage("请选择生产车间"); return; } //物料代码 string FMaterialNumber = Convert.ToString((this.Model.GetValue("FMaterialNumber"))); if (!string.IsNullOrEmpty(FMaterialNumber)) sqlwhere += $" and t3.FNumber like ''%{FMaterialNumber}%''"; //销售订单号 string FSalOrder = Convert.ToString((this.Model.GetValue("FSalOrder"))); if (!string.IsNullOrEmpty(FSalOrder)) sqlwhere += $" and FHSeOrderBillNo like ''%{FSalOrder}%''"; //生产订单号 string FScOrderMainNo = Convert.ToString((this.Model.GetValue("FScOrderMainNo"))); if (!string.IsNullOrEmpty(FScOrderMainNo)) sqlwhere += $" and FSCORDERNO like ''%{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 FBeginPreparatDate = Convert.ToString((this.Model.GetValue("FBrginPreparatDate"))); if (!string.IsNullOrEmpty(FBeginPreparatDate)) sqlwhere += $" and FPreparatDate>=''{FBeginPreparatDate}''"; //编制日期 string FEndPreparatDate = Convert.ToString((this.Model.GetValue("FEndPreparatDate"))); if (!string.IsNullOrEmpty(FEndPreparatDate)) sqlwhere += $" and FPreparatDate<=''{FEndPreparatDate}''"; //发货起始时间,发货截止时间 string FBeginDeliveryDate = Convert.ToString((this.Model.GetValue("FBeginDeliveryDate"))); if (!string.IsNullOrEmpty(FBeginDeliveryDate)) sqlwhere += $" and TD.FPlanDeliveryDate>=''{FBeginDeliveryDate}''"; //发货起始时间,发货截止时间 string FEndDeliveryDate = Convert.ToString((this.Model.GetValue("FEndDeliveryDate"))); if (!string.IsNullOrEmpty(FEndDeliveryDate)) sqlwhere += $" and TD.FPlanDeliveryDate<=''{FEndDeliveryDate}''"; try { string sql = $"/*dialect*/exec proc_jit_WorkBillPlatformDayPlanSelect '{sqlwhere}' "; DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; if (dt.Rows.Count == 0) { this.View.ShowMessage("无有效数据"); return; } DateTime DateNow = DateTime.Now;//获取当前日期 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("FMOFBILLTYPE", Convert.ToString(dt.Rows[i]["FMOFBILLTYPE"]), i);//生产订单单据类型 this.Model.SetValue("FOrderType", Convert.ToString(dt.Rows[i]["FOrderType"]), i);//订单类型 this.Model.SetValue("FStatus", Convert.ToString(dt.Rows[i]["FStatus"]), i);//订单状态 //this.Model.SetValue("F_bsv_Text", Convert.ToString(dt.Rows[i]["F_DY"]) + Convert.ToString(dt.Rows[i]["F_GL"]) + Convert.ToString(dt.Rows[i]["F_DB"]), i);//电压/功率/底板 this.Model.SetValue("FCompleteSetCount", "", i);//总齐套数量 this.Model.SetValue("FPriority", Convert.ToString(dt.Rows[i]["FPriority"]), i);//优先级 this.Model.SetValue("FProOrderCount", dt.Rows[i]["FHOrderNeedQty"].ToString(), i);//生产订单数量 this.Model.SetValue("FNoStockInQty", dt.Rows[i]["FNoStockInQty"].ToString(), i);//未入库数量 this.Model.SetValue("FCXStockInQty", dt.Rows[i]["FCXStockInQty"].ToString(), i);//产线入库数量 this.Model.SetValue("FSRCBILLENTRYSEQ", dt.Rows[i]["FSRCBILLENTRYSEQ"].ToString(), i);// this.Model.SetValue("FSalOrderCount", dt.Rows[i]["FHOrderQty"].ToString(), i);//销售订单数量 this.Model.SetValue("FBatch", dt.Rows[i]["FBatch"].ToString(), i);//批次号 this.Model.SetValue("FUnit", dt.Rows[i]["FUnitId"].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("FPlanFinishDate", dt.Rows[i]["FPlanFinishDate"].ToString(), i);//计划完工日期 this.Model.SetValue("F_TEZV_Base", dt.Rows[i]["F_TEZV_Base"].ToString(), i);//包装标识 this.Model.SetValue("F_bsv_WYID", dt.Rows[i]["F_bsv_WYID"].ToString(), i);//唯一ID this.Model.SetValue("FOrderLevel", dt.Rows[i]["FHOrderLev"].ToString(), i);//订单等级 this.Model.SetValue("FSCOrderNo", dt.Rows[i]["FSCOrderNo"].ToString(), i);//生产订单号 this.Model.SetValue("F_bsv_Integer", dt.Rows[i]["F_bsv_Integer"].ToString(), i);//计划周数 this.Model.SetValue("FSalOrderNo", dt.Rows[i]["FHSEORDERBILLNO"].ToString(), i);//销售订单号 this.Model.SetValue("F_TEZV_Text6", dt.Rows[i]["F_TEZV_Text6"].ToString(), i);//源单客户代码 this.Model.SetValue("FCustId", dt.Rows[i]["FCustId"].ToString(), i);//客户 this.Model.SetValue("FPlanDeliveryDate", dt.Rows[i]["FPlanDeliveryDate"].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("FCDQuantity", dt.Rows[i]["FCDQuantity"].ToString(), i);//拆单数量 this.Model.SetValue("FDayPlanQuantity", Convert.ToDecimal(dt.Rows[i]["FDAYPLANQUANTITY"]) - Convert.ToDecimal(dt.Rows[i]["FQTYLS"]), i);//日计划数量 this.Model.SetValue("FQTYLS", dt.Rows[i]["FQTYLS"].ToString(), i);//历史遗留 this.Model.SetValue("FNoScheduled", dt.Rows[i]["FNoScheduled"].ToString(), i);//未排数量 this.Model.SetValue("FKpQty", Convert.ToDecimal(dt.Rows[i]["FDayPlanRemainQty"]), i);//可排数量 this.Model.SetValue("FDelaylnUM", dt.Rows[i]["FNotProductNum"].ToString(), i);//拖期数量 this.Model.SetValue("FCompleteCount", dt.Rows[i]["FJITCompleteCount"].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 > 30) 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("FCDQuantity", i);//GetControl } 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 > 30) 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 if (dr["FCOMPLETE"].ToString() == "齐套") { this.View.GetFieldEditor("FT" + getDay.Days.ToString(), j).Enabled = false; //单据体行锁定字段 grid.SetForecolor("FT" + "" + getDay.Days.ToString() + "", "#00FF00", j); } } } for (int m = 0; m <= 30; m++) { this.View.GetControl("FT" + "" + m + "").Text = DateNow.AddDays(m).ToShortDateString(); } // LogService.Write("生产计划平台绑定数据用时:" + sw.Elapsed + "行数:" + dt.Rows.Count); sw.Stop();//结束计时 } catch (Exception ex) { this.View.ShowErrMessage(ex.Message.ToString()); } } /// /// 编辑 /// public void SearchListEdit() { string sqlwhere = " and 1=1"; var fPrdOrgId = (this.Model.GetValue("FPRDOrgId") as DynamicObject)?["Id"].ToString(); if (!string.IsNullOrEmpty(fPrdOrgId)) sqlwhere += $" and FHPRDORGID in ({fPrdOrgId})"; else { this.View.ShowMessage("请选择生产订单组织"); return; } DynamicObjectCollection entryOp = this.View.Model.GetValue("F_bsv_MulBase") as DynamicObjectCollection; if (entryOp.Count > 0) { //string[] pkValues = entryOp.Select(p => p["F_bsv_MulBase_Id"].ToString()).Distinct().ToArray(); //var aa = string.Join(",", pkValues); List pkValueList = entryOp.Select(p => p["F_bsv_MulBase_Id"].ToString()).Distinct().ToList(); sqlwhere += $" and FHWorkShopID in ({string.Join(",", pkValueList)})"; } else { this.View.ShowMessage("请选择生产车间"); return; } //物料代码 string FMaterialNumber = Convert.ToString((this.Model.GetValue("FMaterialNumber"))); if (!string.IsNullOrEmpty(FMaterialNumber)) sqlwhere += $" and t3.FNumber like ''%{FMaterialNumber}%''"; //销售订单号 string FSalOrder = Convert.ToString((this.Model.GetValue("FSalOrder"))); if (!string.IsNullOrEmpty(FSalOrder)) sqlwhere += $" and FHSeOrderBillNo like ''%{FSalOrder}%''"; //生产订单号 string FScOrderMainNo = Convert.ToString((this.Model.GetValue("FScOrderMainNo"))); if (!string.IsNullOrEmpty(FScOrderMainNo)) sqlwhere += $" and FSCORDERNO like ''%{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 FBeginPreparatDate = Convert.ToString((this.Model.GetValue("FBrginPreparatDate"))); if (!string.IsNullOrEmpty(FBeginPreparatDate)) sqlwhere += $" and FPreparatDate>=''{FBeginPreparatDate}''"; //编制日期 string FEndPreparatDate = Convert.ToString((this.Model.GetValue("FEndPreparatDate"))); if (!string.IsNullOrEmpty(FEndPreparatDate)) sqlwhere += $" and FPreparatDate<=''{FEndPreparatDate}''"; //发货起始时间,发货截止时间 string FBeginDeliveryDate = Convert.ToString((this.Model.GetValue("FBeginDeliveryDate"))); if (!string.IsNullOrEmpty(FBeginDeliveryDate)) sqlwhere += $" and TD.FPlanDeliveryDate>=''{FBeginDeliveryDate}''"; //发货起始时间,发货截止时间 string FEndDeliveryDate = Convert.ToString((this.Model.GetValue("FEndDeliveryDate"))); if (!string.IsNullOrEmpty(FEndDeliveryDate)) sqlwhere += $" and TD.FPlanDeliveryDate<=''{FEndDeliveryDate}''"; try { string sql = $"/*dialect*/exec proc_jit_WorkBillPlatformDayPlanSelect '{sqlwhere}' "; LogService.Write("生产计划平台查询sql:" + sql); DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; if (dt.Rows.Count == 0) { this.View.ShowMessage("无有效数据"); return; } 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("FMOFBILLTYPE", Convert.ToString(dt.Rows[i]["FMOFBILLTYPE"]), i);//生产订单单据类型 this.Model.SetValue("FOrderType", Convert.ToString(dt.Rows[i]["FOrderType"]), i);//订单类型 this.Model.SetValue("FStatus", Convert.ToString(dt.Rows[i]["FStatus"]), i);//订单状态 this.Model.SetValue("FCompleteSetCount", "", i);//总齐套数量 this.Model.SetValue("FPriority", Convert.ToString(dt.Rows[i]["FPriority"]), i);//优先级 this.Model.SetValue("FProOrderCount", dt.Rows[i]["FHOrderNeedQty"].ToString(), i);//生产订单数量 this.Model.SetValue("FNoStockInQty", dt.Rows[i]["FNoStockInQty"].ToString(), i);//未入库数量 this.Model.SetValue("FSRCBILLENTRYSEQ", dt.Rows[i]["FSRCBILLENTRYSEQ"].ToString(), i);// this.Model.SetValue("FSalOrderCount", dt.Rows[i]["FHOrderQty"].ToString(), i);//销售订单数量 this.Model.SetValue("FBatch", dt.Rows[i]["FBatch"].ToString(), i);//批次号 this.Model.SetValue("FUnit", dt.Rows[i]["FUnitId"].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("FPlanFinishDate", dt.Rows[i]["FPlanFinishDate"].ToString(), i);//计划完工日期 this.Model.SetValue("F_TEZV_Base", dt.Rows[i]["F_TEZV_Base"].ToString(), i);//包装标识 this.Model.SetValue("F_bsv_WYID", dt.Rows[i]["F_bsv_WYID"].ToString(), i);//唯一ID this.Model.SetValue("FOrderLevel", dt.Rows[i]["FHOrderLev"].ToString(), i);//订单等级 this.Model.SetValue("FSCOrderNo", dt.Rows[i]["FSCOrderNo"].ToString(), i);//生产订单号 this.Model.SetValue("F_bsv_Integer", dt.Rows[i]["F_bsv_Integer"].ToString(), i);//计划周数 this.Model.SetValue("FSalOrderNo", dt.Rows[i]["FHSEORDERBILLNO"].ToString(), i);//销售订单号 this.Model.SetValue("F_TEZV_Text6", dt.Rows[i]["F_TEZV_Text6"].ToString(), i);//源单客户代码 this.Model.SetValue("FCustId", dt.Rows[i]["FCustId"].ToString(), i);//客户 this.Model.SetValue("FPlanDeliveryDate", dt.Rows[i]["FPlanDeliveryDate"].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", Convert.ToDecimal(dt.Rows[i]["FDayPlanQuantity"]) - Convert.ToDecimal(dt.Rows[i]["FQTYLS"]), i);//日计划数量 this.Model.SetValue("FQTYLS", dt.Rows[i]["FQTYLS"].ToString(), i);//历史遗留 this.Model.SetValue("FNoScheduled", dt.Rows[i]["FNoScheduled"].ToString(), i);//未排数量 this.Model.SetValue("FKpQty", Convert.ToDecimal(dt.Rows[i]["FDayPlanRemainQty"]), i);//可排数量 this.Model.SetValue("FCDQuantity", dt.Rows[i]["FCDQuantity"].ToString(), i);//拆单数量 this.Model.SetValue("FDelaylnUM", dt.Rows[i]["FNotProductNum"].ToString(), i);//拖期数量 this.Model.SetValue("FCompleteCount", dt.Rows[i]["FJITCompleteCount"].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 > 30) 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 > 30) continue; if (dr["FHLockedSub"].ToString() == "1") this.View.GetFieldEditor("FT" + getDay.Days.ToString(), j).Enabled = false; //单据体行锁定字段 } } for (int m = 0; m <= 30; m++) { this.View.GetControl("FT" + "" + m + "").Text = DateNow.AddDays(m).ToShortDateString(); } } catch (Exception ex) { this.View.ShowErrMessage(ex.Message.ToString()); } } /// /// 日计划用料清单进度条 /// [Obsolete] private void DayPlanPPBomBill() { // 显示一个进度显示界面:显示一个不停滚动的模拟进度 // 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(() => { var result = "操作成功"; try { // 需要捕获错误,以确保处理结束时,关闭进度滚动界面 // 引入功能实际处理函数 result = this.DayPlanPPBomBillBatch(); } 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(result); } }, (t) => { }); //this.View.ShowMessage("操作成功"); } /// /// 日计划用料清单生成 /// public string DayPlanPPBomBillBatch() { //查找到的同批项次 int day = Convert.ToInt32(this.Model.GetValue("FLockDays")); try { string sql = string.Format(@"/*dialect*/ SELECT * FROM ( select t1.FID,t1.FSEQ FDayPlanFSEQ,t1.FEntryID,T2.FBILLNO AS FDayPlanFBILLNO,t3.FMATERIALID,t3.FMOEntrySeq as FMoSeq,T5.FNUMBER,t1.FHMASTERDATE,t1.FHQTY,t4.FMATERIALID FMATERIALID2,T6.FNUMBER FNUMBER2,T7.FNUMBER FUNITNUMBER,FNumerator,FDenominator,convert(decimal(18,2),(t4.FMustQty/T3.FQTY) *t1.FHQTY) FHQtyMust,T4.FUnitID,t8.FNUMBER FUNITNUMBER2,T3.FID FPPBOM,T4.FENTRYID FPPBOMENTRYID,isnull(T9.FBillNo,'')FBillNo,t10.FNUMBER FORGNUMBER,t11.FNUMBER FHSOURCENUMBER,FSCRAPRATE,FFIXSCRAPQTY,T9.FID AS DayPlanFID,t2.FSCORDERNO, t3.FMOENTRYID,t3.FBILLNO FPPBOMBILLNO,T4.FSEQ,tc.FOWNERTYPEID,tc.FOWNERID,tc.FEntrustPickOrgId,t3.FMOID,FIssueType,FMaterialType,td.FNUMBER as FWORKSHOPID,t4.FReplaceGroup,isnull(ttt.FrowCount,0)FIsTDL,t4.FUseRate FROM Sc_WorkBillSortBillSub t1 JOIN Sc_WorkBillSortBillMAIN t2 on t1.FID = t2.FID JOIN T_PRD_PPBOM T3 on T2.FPRDMOMAINID=t3.FMOID AND T2.FPRDMOENTYID=T3.FMOENTRYID JOIN T_PRD_PPBOMENTRY T4 ON T3.FID=T4.FID left join ( select FREPLACEGROUP,COUNT(*) FrowCount,FID from T_PRD_PPBOMENTRY GROUP BY FREPLACEGROUP,FID having count(*) >1 ) ttt on t4.FID = ttt.FID and t4.FREPLACEGROUP =ttt.FREPLACEGROUP JOIN T_PRD_PPBOMENTRY_C Tc ON T4.FENTRYID=Tc.FENTRYID join T_ORG_Organizations torg ON tc.FOWNERID = torg.FORGID JOIN T_BD_MATERIAL T5 ON T3.FMATERIALID=T5.FMATERIALID JOIN T_BD_MATERIAL T6 ON T4.FMATERIALID=T6.FMATERIALID LEFT JOIN T_BD_UNIT T7 ON T3.FUNITID = T7.FUNITID LEFT JOIN T_BD_UNIT T8 ON T4.FUNITID = T8.FUNITID LEFT JOIN Sc_DayPlanPPBomBillMain T9 ON T1.FEntryID=T9.FDayPlanFID LEFT join T_ORG_Organizations t10 on t2.FHPRDORGID = t10.FORGID LEFT join T_ENG_WORKCENTER t11 on t2.FHSOURCEID = t11.FID left join T_BD_DEPARTMENT td on t3.FWORKSHOPID=td.FDEPTID WHERE t2.FORDERTYPE = '生产订单' ) tt ", day); DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql); DataTable dt = ds.Tables[0]; List DayPlanMaterial = new List(); int jdt = 1; if (dt.Rows.Count > 0) { foreach (DataRow dr in dt.Rows) { this.View.Session["ProcessRateValue"] = Convert.ToInt32((Convert.ToDecimal(75) / dt.Rows.Count) * jdt); DayPlanMaterial.Add(new Demo.Model.Model.DayPlanMaterial { FID = dr["DayPlanFID"].ToString(), FEntryID = dr["FEntryID"].ToString(), FHDate = DateTime.Now.ToString(), FOrgId = dr["FORGNUMBER"].ToString(), FHMaterID = dr["FNUMBER"].ToString(), FHWorkDate = dr["FHMASTERDATE"].ToString(), FHQty = dr["FHQTY"].ToString(), FHUnitID = dr["FUNITNUMBER"].ToString(), FDayPlanFID = dr["FEntryID"].ToString(), FHMaterSubID = dr["FNUMBER2"].ToString(), FHUnitSubID = dr["FUNITNUMBER2"].ToString(), FHQtyMust = dr["FHQtyMust"].ToString(), FHQtySub = dr["FHQtyMust"].ToString(), FHPPBomInterID = dr["FPPBOM"].ToString(), FHPPBomEntryID = dr["FPPBOMENTRYID"].ToString(), FHSourceID = dr["FHSOURCENUMBER"].ToString(), FNumerator = dr["FNumerator"].ToString(), FDenominator = dr["FDenominator"].ToString(), FFIXSCRAPQTY = dr["FFIXSCRAPQTY"].ToString(), FHQtyScrap = dr["FSCRAPRATE"].ToString(), FMOBILLNO = dr["FSCORDERNO"].ToString(), FMOENTRYID = dr["FMOENTRYID"].ToString(), FPPBOMBILLNO = dr["FPPBOMBILLNO"].ToString(), FPPBOMFSEQ = dr["FSEQ"].ToString(), FOwnerTypeId = dr["FOWNERTYPEID"].ToString(), FOwnerID = dr["FORGNUMBER"].ToString(), FEntrustPickOrgId = dr["FORGNUMBER"].ToString(), FMOID = dr["FMOID"].ToString(), FIssueType = dr["FIssueType"].ToString(), FMaterialType = dr["FMaterialType"].ToString(), FDayPlanFSEQ = dr["FDayPlanFSEQ"].ToString(), FDayPlanFBILLNO = dr["FDayPlanFBILLNO"].ToString(), FWORKSHOPID = dr["FWORKSHOPID"].ToString(), FReplaceGroup = dr["FReplaceGroup"].ToString(), FUseRate = dr["FUseRate"].ToString(), FIsTDL = dr["FIsTDL"].ToString(), FMoSeq = dr["FMoSeq"].ToString(), }); } LogService.Write($"日计划用料清单,数据准备完成,保存到Model实体,总行数:{DayPlanMaterial.Count},耗时:"); var fidList = DayPlanMaterial.Select(x => x.FEntryID).Distinct().ToList(); int i = 1; int jdtmmm = 1; JArray Fentity = new JArray(); foreach (var item in fidList) { this.View.Session["ProcessRateValue"] = 75 + Convert.ToInt32((Convert.ToDecimal(23) / dt.Rows.Count) * jdtmmm); var _DayPlanMaterial = DayPlanMaterial.Where(x => x.FEntryID == item).OrderBy(x => Convert.ToInt32(x.FReplaceGroup)).ToList(); JObject model = new JObject(); if (!string.IsNullOrEmpty(_DayPlanMaterial[0].FID)) model.Add("FID", _DayPlanMaterial[0].FID); model.Add("FHDate", DateTime.Now); model.Add("FOrgId", new JObject() { ["Fnumber"] = _DayPlanMaterial[0].FOrgId });//发料组织 model.Add("FHMaterID", new JObject() { ["Fnumber"] = _DayPlanMaterial[0].FHMaterID });//物料 model.Add("FHWorkDate", _DayPlanMaterial[0].FHWorkDate);//日工单日期 FHWorkDate model.Add("FHQty", _DayPlanMaterial[0].FHQty);//主产品数量:FHQty model.Add("FHUnitID", new JObject() { ["Fnumber"] = _DayPlanMaterial[0].FHUnitID });//单位:FHUnitID model.Add("FDayPlanFID", _DayPlanMaterial[0].FDayPlanFID);//日计划工单内码 model.Add("FDayPlanFSEQ", _DayPlanMaterial[0].FDayPlanFSEQ);//日计划工单明细行号 model.Add("FDayPlanFBillNo", _DayPlanMaterial[0].FDayPlanFBILLNO);//日计划工单单据编号 JArray Entry = new JArray(); int FSEQ = 1; foreach (var _item in _DayPlanMaterial) { JObject ModelEnty = new JObject(); ModelEnty.Add("FHMaterSubID", new JObject() { ["Fnumber"] = _item.FHMaterSubID });//子物料FHMaterSubID ModelEnty.Add("FHUnitSubID", new JObject() { ["Fnumber"] = _item.FHUnitSubID });//单位FHUnitSubID ModelEnty.Add("FHQtyMust", _item.FHQtyMust);//应发数量FHQtyMust ModelEnty.Add("FHQtySub", _item.FHQtySub);//数量FHQtySub ModelEnty.Add("FHPPBomInterID", _item.FHPPBomInterID);//用料清单主内码FHPPBomInterID ModelEnty.Add("FHPPBomEntryID", _item.FHPPBomEntryID);//用料清单子内码FHPPBomEntryID ModelEnty.Add("FHSourceID", new JObject() { ["Fnumber"] = _item.FHSourceID });//生产资源FHSourceID ModelEnty.Add("FNumerator", _item.FNumerator);//分母 ModelEnty.Add("FDenominator", _item.FDenominator);//分子 ModelEnty.Add("FDwyl", Convert.ToDecimal(_item.FNumerator) / Convert.ToDecimal(_item.FDenominator));//单位用料 ModelEnty.Add("FFIXSCRAPQTY", _item.FFIXSCRAPQTY);//固定损耗 ModelEnty.Add("FHQtyScrap", _item.FHQtyScrap);//变动损耗率% ModelEnty.Add("FMOBILLNO", _item.FMOBILLNO);// ModelEnty.Add("FMOENTRYIDINT", _item.FMOENTRYID);// ModelEnty.Add("FMoSeq", _item.FMoSeq);// ModelEnty.Add("FPPBOMBILLNO", _item.FPPBOMBILLNO);// ModelEnty.Add("FPPBOMFSEQINT", _item.FPPBOMFSEQ);// ModelEnty.Add("FOwnerTypeId", _item.FOwnerTypeId);// ModelEnty.Add("FOwnerID", new JObject() { ["Fnumber"] = _item.FOwnerID });// ModelEnty.Add("FEntrustPickOrgId", new JObject() { ["Fnumber"] = _item.FEntrustPickOrgId });// ModelEnty.Add("FMOID", _item.FMOID);// ModelEnty.Add("FISSUETYPE", _item.FIssueType);// ModelEnty.Add("FMaterialType", _item.FMaterialType);// ModelEnty.Add("FWORKSHOPID", new JObject() { ["Fnumber"] = _item.FWORKSHOPID });// ModelEnty.Add("FReplaceGroup", _item.FReplaceGroup);// ModelEnty.Add("FUseRate", _item.FUseRate);// ModelEnty.Add("FIsTDL", Convert.ToInt32(_item.FIsTDL) > 0 ? 1 : 0);// Entry.Add(ModelEnty); FSEQ++; } model.Add("FEntity", Entry); Fentity.Add(model); if ((i >= 20 || i == fidList.Count) && (i % 20 == 0 || i == fidList.Count)) { //LogHelper.Info("日计划用料清单批量执行,记录循环的当前条数" + i); JObject jsonRoot = new JObject() { ["Creator"] = "", ["NeedUpDateFields"] = new JArray(), ["NeedReturnFields"] = new JArray(), ["IsDeleteEntry"] = "true", ["SubSystemId"] = "", ["IsVerifyBaseDataField"] = "false", //["IsAutoSubmitAndAudit"] = true,//自动调用提交和审核功能 ["Model"] = Fentity }; CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); var result = cloudClient.BatchSave("Paez_Sc_DayPlanPPBomBill", jsonRoot.ToString()); JObject saveObj = JObject.Parse(result); string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); if (saveIsSuc == "TRUE") { var Success = saveObj["Result"]["ResponseStatus"]["SuccessEntitys"].ToString().TrimStart('{').TrimEnd('}'); var allList = Newtonsoft.Json.JsonConvert.DeserializeObject>>(Success); List ls = new List(); foreach (var it in allList) { it.TryGetValue("Id", out string value); ls.Add(value); } var resultAA = String.Join(",", ls.ToArray()); string resSql = string.Format(@"/*dialect*/ update Sc_WorkBillSortBillSub set Sc_WorkBillSortBillSub.FDAYPLANPPBOMBILLNO = Sc_DayPlanPPBomBillMain.FBILLNO from Sc_WorkBillSortBillSub join Sc_DayPlanPPBomBillMain on Sc_WorkBillSortBillSub.FEntryID = Sc_DayPlanPPBomBillMain.FDayPlanFID where Sc_DayPlanPPBomBillMain.FID in ({0})", resultAA); DBServiceHelper.Execute(Context, resSql); } if (saveIsSuc != "TRUE") { LogHelper.Error("日计划用料清单列表生成失败:" + jsonRoot.ToString()); //LogHelper.Error(saveObj.ToString()); return "操作失败," + saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString(); //this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString()); } Fentity = new JArray(); } i++; this.View.Session["ProcessRateValue"] = Convert.ToInt32((Convert.ToDecimal(80) / fidList.Count) * jdtmmm); //Thread.Sleep(6000); jdtmmm++; } } //sw.Stop();//结束计时 ////LogHelper.Info("生成日计划用料清单运行总时长:" + sw.Elapsed); return "操作成功"; } catch (Exception ex) { LogHelper.Error("日计划用料清单+" + ex.Message.ToString()); return "操作失败," + ex.Message.ToString(); //this.View.ShowErrMessage(ex.Message.ToString()); } } /// /// 提料计划 /// public void Extraction() { //LogHelper.Info("[提料计划准备阶段]:测试测试测试测试测试测试测试测试"); try { //Stopwatch sw = new Stopwatch(); //sw.Start();//开始计时 string sql = string.Format(@"/*dialect*/ select distinct FHICMOINTERID FID from JIT_MOMaterReadysBill "); DataTable fidDt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; string FDayPlanWorkID = ""; foreach (DataRow dr in fidDt.Rows) { FDayPlanWorkID += Convert.ToString(dr["FID"]) + ","; } FDayPlanWorkID = FDayPlanWorkID.Substring(0, FDayPlanWorkID.Length - 1); //提料计划预处理 清理提料计划单数据 更新采购订单提料计划数量 sql = string.Format(@" /*dialect*/ exec [提料计划预处理] '{0}' ", FDayPlanWorkID.Replace(",", "-")); DBServiceHelper.Execute(Context, sql); //LogHelper.Info("[提料计划准备阶段]提料计划预处理sql:" + 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') and t1.FBillTypeID in('83d822ca3e374b4ab01e5dd46a0062bd','6d01d059713d42a28bb976c90a121142') "; List PurchaseInventory = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList(); //LogHelper.Info("[提料计划准备阶段]可用采购订单数据sql:" + sql); sql = string.Format(@" /*dialect*/ SELECT T1.FID,FHMATERID,FHMASTERDATE,FHQTY,FCOMPLETECOUNT,FPRDMOMAINID,T2.FENTRYID,T1.FBILLNO, FNeedQty,(FLeadtime+FLeadTtime2)FFIXLEADTIME,t5.FMAXPOQTY,FJITBatch FMINPOQTY,FJITMATERIALGROUP,FJITMaterielDemand,FJITSafeStock,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 FComplete ='未齐套' 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); sql = string.Format(@" /*dialect*/ SELECT T1.FID,FHMASTERDATE,t1.FEntryID,T1.FBILLNO, FNeedQty,(FLeadtime+FLeadTtime2)FFIXLEADTIME,t5.FMAXPOQTY,FJITBatch FMINPOQTY,FJITMATERIALGROUP,FJITMaterielDemand,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 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 DATEDIFF(D,GETDATE(),FHMASTERDATE) >=0 AND FERPCLSID in ('1','3') AND T1.NeedQty>0 AND T1.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:" + sql); DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql); List DayPlanPpbom = ds.ToModelList(); //物料+库存组织分类 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(); //LogHelper.Info("[提料计划准备阶段]总物料行数" + MaterialIDList.Count); //提料计划数据集临时存储集合 List PODemandPlanTemp = new List(); //sql集合 更新采购订单占用的提料计划数量 List sqlList = new List(); //MaterialIDList = new List { "105773" }; foreach (var item in MaterialIDList) { //当前物料没有采购订单时 直接跳出 List _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; } ////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;//提前期 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;//第一个订货起始日期 int i = 0; //记录在最小采购量需求下的日计划明细FentyrID List FEntryIdList = new List(); foreach (var _item in _DayPlanPpbom) { i++; _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); break; } if (NeedQty == 0) DATE = Convert.ToDateTime(_item.FHMASTERDATE).AddDays(-FFIXLEADTIME); FEntryIdList.Add(_item.FENTRYID); NeedQty += _item.NeedQty; ////LogHelper.Info("记录明细id:" + _item.FENTRYID + ""); ////LogHelper.Info("总需求量:" + NeedQty + ""); ////LogHelper.Info("最小起订量:" + FMINPOQTY + ""); if (NeedQty <= FMINPOQTY) { //LogHelper.Info("[提料计划]当前物料明细无采购信息:" + item.FMATERIALID + ",数量:" + NeedQty + ",最小起订量:" + FMINPOQTY + ""); } if ((FJITmaterialGroup == "总量控制规格类" || FJITmaterialGroup == "订单专用个性类") && FEntryIdList.Count < Convert.ToInt32(FJITMaterielDemand) && i < _DayPlanPpbom.Count) //订单专用个性类 continue; //if (NeedQty >= FMINPOQTY) //{ foreach (var Purchase in _PurchaseInventory) { ////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 }); //扣除日计划明细已被分配的数量 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 == 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 }); //更新计划数量(剩余需要排的) 继续去计算下一个采购订单 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 } } var PODemandPlanList222 = PODemandPlanTemp.GroupBy(p => new PODemandPlanTemp { PurchseFNUMBER = p.PurchseFNUMBER, FHMASTERDATE = p.FHMASTERDATE }).Select(x => new PODemandPlanTemp { PurchseFNUMBER = x.Key.PurchseFNUMBER, FHMASTERDATE = x.Key.FHMASTERDATE }).ToList(); var PODemandPlanList = PODemandPlanTemp.GroupBy(p => new { p.PurchseFNUMBER, p.FHMASTERDATE }).Select(x => new PODemandPlanTemp { PurchseFNUMBER = x.Key.PurchseFNUMBER, FHMASTERDATE = x.Key.FHMASTERDATE }).ToList(); ////LogHelper.Info($"提料计划,数据准备完成,保存到Model实体,总行数:{PODemandPlanTemp.Count},耗时:" + sw.Elapsed); int tlmmm = 1; JArray FinalyResult = new JArray(); foreach (var item in PODemandPlanList) { 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 _PODemandPlanList = PODemandPlanTemp.Where(x => x.FHMASTERDATE == date && x.PurchseFNUMBER == PurchseFNUMBER).ToList(); int FSEQ = 1; 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 FentityModel.Add("FERPCLSID", _item.FErpClsID); //发料方式 //FentityModel.Add("FSEQ", FSEQ); //发料方式 FentityModel.Add("FUnitID", new JObject() { ["Fnumber"] = "Pcs" }); //发料方式 Fentity.Add(FentityModel); FSEQ++; } 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 }; 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") { //LogHelper.Error(jsonRoot.ToString()); } FinalyResult = new JArray(); } tlmmm++; } //sw.Stop();//结束计时 ////LogHelper.Info("提料计划执行完成,运行总时长:" + sw.Elapsed); DBServiceHelper.ExecuteBatch(Context, sqlList); } catch (Exception ex) { //LogHelper.Info("提料计划跳出:" + ex.Message.ToString()); } // var PODemandPlanList22 = PODemandPlanTemp.GroupBy(p => new {p.FSUPPLIERID, p.FHMASTERDATE }).ToList(); } /// /// 1.锁库,具体字段根据业务单据决定,‘Inv’表示即时库存,‘FInvDetailID’为即时库存ID /// public void Reserve() { try { decimal ReserveCount = Convert.ToDecimal((this.Model.GetValue("FReservedCount"))); if (ReserveCount == 0) { this.View.ShowMessage("请输入预留数量"); return; } //获取单据体信息 Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); //单据体信息转换为列表集合 DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity); DynamicObjectCollection filterResult = entityDataObjoct.Clone(); filterResult.Clear(); entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"])).ToList().ForEach(x => filterResult.Add(x)); if (filterResult.Count == 0) { this.View.ShowMessage("请选择需要预留的单据!"); return; } //总库存 物料+库存组织+库存数量 DataSet 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 (105773) group by T1.FStockOrgId,T1.FMATERIALID "); ListInventoryByStockOrgId = ds.ToModelList(); foreach (DynamicObject current in entityDataObjoct) { if (Convert.ToString(current["FFOCUS"]) == "False") continue; string sql = string.Format(@" /*dialect*/ --生产用料清单列表 SELECT T1.FID,T1.FBillNo,T1.FMOBillNO,T1.FMOEntrySeq,T1.FMoId,T1.FMaterialID,T1.FQty,FPRDORGID FStockOrgId, T2.FMATERIALID FMATERIALID2,T4.FNumber,T2.FNeedQty,convert(decimal(18,2),FNeedQty/FQty ) as dwyl --,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}' ", current["FHMainSourceInterID"].ToString(), current["FMatrailId_Id"].ToString()); ds = DBServiceHelper.ExecuteDataSet(Context, sql); var PpbomList = ds.ToModelList(); //当前最大齐套数 下层需求数量/父级需求数量=单位用料 //var SumGetComplete = Math.Floor(PpbomList.Min(t => t.FBASEQTY / (t.FNeedQty / t.FQty))); //最大齐套数 var result = (from a in PpbomList join b in ListInventoryByStockOrgId on new { materialId = a.FMATERIALID2, stockOrgId = a.FStockOrgId } equals new { materialId = b.FMATERIALID, stockOrgId = b.FStockOrgId } into g from b in g.DefaultIfEmpty() select new { value = (b?.FBASEQTY / a.dwyl) ?? 0 }).ToList().Min(x => x.value); if (result < ReserveCount) { this.View.ShowErrMessage("当前库存超出可预留最大数:" + result + ""); return; }; //将预留数量分配到日计划工单 sql = string.Format(@"/*dialect*/select FEntryID,FHQTY from Sc_WorkBillSortBillSub where FID='{0}' and isnull(FCOMPLETE,'未齐套')='未齐套'", current["FDayPlanWorkID"].ToString()); DataTable dayPlanDt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; var count = ReserveCount; List sqlList = new List(); if (dayPlanDt.Rows.Count > 0) { foreach (DataRow dr in dayPlanDt.Rows) { if (count > 0) { sql = string.Format("/*dialect*/ update Sc_WorkBillSortBillSub set FReservedCount = {0} where FEntryID = {1}", count >= Convert.ToDecimal(dr["FHQTY"]) ? Convert.ToDecimal(dr["FHQTY"]) : count, dr["FEntryID"].ToString()); sqlList.Add(sql); count = count - Convert.ToDecimal(dr["FHQTY"]); } else break; } DBServiceHelper.ExecuteBatch(Context, sqlList); } sql = string.Format(@"/*dialect*/ --生产用料清单列表 SELECT T1.FID,T1.FBillNo,T2.FENTRYID,T1.FMOBillNO,T1.FMOEntrySeq,T1.FMoId,T1.FMaterialID,T1.FQty,FPRDORGID FStockOrgId, T2.FMATERIALID FMATERIALID2,T4.FNumber,T2.FNeedQty,convert(decimal(18,2),FNeedQty/T1.FQty ) as dwyl, t5.FBASEUNITID,t6.FSTOREUNITID,t7.FID FSTKID,t7.FOwnerID,t7.FOwnerTypeID,t7.FSTOCKID,t7.FBASEQTY --,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 join t_BD_MaterialBase t5 on t4.FMATERIALID = t5.FMATERIALID join t_BD_MaterialStock t6 on t4.FMATERIALID = t6.FMATERIALID join T_STK_INVENTORY t7 on t4.FMATERIALID = t7.FMATERIALID and t1.FPRDORGID=t7.FSTOCKORGID where t1.FMoId='{0}' and T1.FMaterialID='{1}' ", current["FHMainSourceInterID"].ToString(), current["FMatrailId_Id"].ToString()); DataTable skDt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; //锁库 List list = new List(); foreach (DataRow dr in skDt.Rows) { LockStockArgs lockStockArgs = new LockStockArgs(); lockStockArgs.ObjectId = "PRD_PPBOM"; //字段 FDEMANDFORMID = 'PRD_PPBOM' lockStockArgs.BillId = dr["FID"].ToString(); //生产用料清单主表ID lockStockArgs.BillDetailID = dr["FENTRYID"].ToString();//生产用料清单明细表ID lockStockArgs.BillNo = dr["FBillNo"].ToString();//生产用料清单单据号 lockStockArgs.FEntryID = Convert.ToInt32(current["FHMainSourceEntryID"]); ; lockStockArgs.FID = Convert.ToInt32(current["FHMainSourceInterID"]); //生产订单行ID lockStockArgs.BaseQty = decimal.Parse(dr["FBASEQTY"].ToString());//基本单位数量 lockStockArgs.BaseUnitID = int.Parse(dr["FBASEUNITID"].ToString());//基本单位 //lockStockArgs.Lot = Convert.ToString(current["FBatch"]); ;//批次 FBatch lockStockArgs.MaterialID = long.Parse(dr["FMATERIALID2"].ToString()); lockStockArgs.OwnerID = long.Parse(dr["FOwnerID"].ToString()); lockStockArgs.OwnerTypeID = dr["FOwnerTypeID"].ToString(); lockStockArgs.Qty = Convert.ToDecimal(dr["dwyl"].ToString()) * ReserveCount;//数量 lockStockArgs.STOCKID = long.Parse(dr["FSTOCKID"].ToString());//仓库 lockStockArgs.StockOrgID = long.Parse(dr["FStockOrgId"].ToString());//库存组织 lockStockArgs.UnitID = long.Parse(dr["FSTOREUNITID"].ToString());//单位 lockStockArgs.LockBaseQty = Convert.ToDecimal(dr["dwyl"].ToString()) * ReserveCount; lockStockArgs.LockQty = Convert.ToDecimal(dr["dwyl"].ToString()) * ReserveCount;//基本单位数量 lockStockArgs.FInvDetailID = Convert.ToString(dr["FSTKID"].ToString()); list.Add(lockStockArgs); } var sa = StockServiceHelper.SaveLockInfo(Context, list, "Inv", false); sql = @"/*dialect*/ update a set FPARENTFORMID ='PRD_MO', FPARENTINTERID =b.FMOID, FPARENTENTRYID =b.FMOENTRYID, FPARENTBILLNO = b.FMOBILLNO, FSRCFORMID = 'PRD_MO', FSRCINTERID = b.FMOID, FSRCENTRYID = b.FMOENTRYID, FSRCBILLNO = b.FMOBILLNO from T_PLN_RESERVELINK a join T_PRD_PPBOM b on a.FDEMANDINTERID = b.FID where a.FPARENTINTERID = '' and a.FPARENTENTRYID =''"; DBServiceHelper.Execute(Context, sql); this.View.ShowMessage("操作成功!"); } } catch (Exception ex) { //LogHelper.Error(ex.Message.ToString()); this.View.ShowErrMessage(ex.Message.ToString()); } } /// /// 释放 /// public void Release() { try { //获取单据体信息 Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); //单据体信息转换为列表集合 DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity); DynamicObjectCollection filterResult = entityDataObjoct.Clone(); filterResult.Clear(); entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"])).ToList().ForEach(x => filterResult.Add(x)); if (filterResult.Count == 0) { this.View.ShowMessage("请选择需要预留的单据!"); return; } foreach (DynamicObject current in filterResult) { if (Convert.ToString(current["FFOCUS"]) == "False") continue; string sql = string.Format(@"/*dialect*/ update Sc_WorkBillSortBillSub set FReservedCount = 0 where FID='{0}'", current["FDayPlanWorkID"].ToString()); DBServiceHelper.Execute(Context, sql); //删除锁库表(不用更新库存 库存表没有更) sql = string.Format(@"/*dialect*/ delete T_PLN_RESERVELINKENTRY where FID IN (SELECT FID FROM T_PLN_RESERVELINK WHERE FPARENTINTERID='{0}' AND FPARENTENTRYID='{1}') delete T_PLN_RESERVELINK WHERE FPARENTINTERID='{0}' AND FPARENTENTRYID='{1}'", Convert.ToString(current["FHMainSourceInterID"]), Convert.ToString(current["FHMainSourceEntryID"])); } this.View.ShowMessage("操作成功!"); } catch (Exception ex) { //LogHelper.Error(ex.Message.ToString()); this.View.ShowErrMessage(ex.Message.ToString()); } } /// /// 生产计划平台选单 生产订单数据 /// /// public void SelectMenu(string FBarItemKey) { try { //获取单据体信息 Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); //单据体信息转换为列表集合 DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity); int Fseq = entityDataObjoct.Count(); ListShowParameter showParameter = new ListShowParameter(); IRegularFilterParameter filterParameter = new ListRegularFilterParameter(); filterParameter.Filter = string.Format(" FPickMtrlStatus in (1,2) ");//部分领料 或者 未领料 filterParameter.SelectEntitys = new List() { "FTreeEntity" }; string pageId = Guid.NewGuid().ToString(); showParameter.PageId = pageId; showParameter.ListFilterParameter = filterParameter; showParameter.UseOrgId = this.Context.CurrentOrganizationInfo.ID; showParameter.IsLookUp = true; if (FBarItemKey == "tbSelectMenuSC") { showParameter.FormId = "PRD_MO"; this.View.ShowForm(showParameter, delegate (FormResult result) { object returnData = result.ReturnData; if (returnData is ListSelectedRowCollection) { ListSelectedRowCollection listSelectedRowCollection = returnData as ListSelectedRowCollection; //LogHelper.Info("生产计划平台选单 行数" + listSelectedRowCollection.Count().ToString()); if (listSelectedRowCollection != null) { var ret = ""; foreach (var listSelectedRow in listSelectedRowCollection) { //if (entityDataObjoct.Where(x => x["FSRCBILLENTRYSEQ"].ToString() == listSelectedRow.DataRow["t1_FSeq"].ToString() && x["FSCOrderNo"].ToString() == listSelectedRow.DataRow["FBillNo"].ToString()).Count() > 0) //{ // //LogHelper.Info("生产计划平台选单:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号," + listSelectedRow.DataRow["t1_FSeq"].ToString() + ",已选"); // ret += "生产订单号:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号," + listSelectedRow.DataRow["t1_FSeq"].ToString() + ",已选" + "\n"; // continue; //} //string sql = $"select FID from Sc_WorkBillSortBillMain where FDOCUMENTSTATUS NOT IN ('E') and FPRDMOENTYID = {listSelectedRow.DataRow["t1_FENTRYID"].ToString()}"; //int day = DBServiceHelper.ExecuteScalar(Context, sql, 0); //if (day > 0) //{ // ret += "生产订单号:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号:" + listSelectedRow.DataRow["t1_FSeq"].ToString() + ",已存在日计划\n"; // continue; //} ////今天以前的数据是显示不出来的 //sql = $"select DATEDIFF(d,getdate(),FPlanStartDate)days from T_PRD_MOENTRY where FENTRYID = {listSelectedRow.DataRow["t1_FENTRYID"].ToString()}"; //day = DBServiceHelper.ExecuteScalar(Context, sql, 0); //if (day < 0) //{ // ret += "计划开工日期在今天之前,生产订单号:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号:" + listSelectedRow.DataRow["t1_FSeq"].ToString() + "\n"; // continue; string sql = @" SELECT T2.FBILLNO,T2.FPRDORGID,T1.FSEQ,T1.FMATERIALID,TA.FSTATUS,T1.FUNITID,T1.FQTY,T1.FWORKSHOPID,T1.FPLANSTARTDATE ,T1.FSALEORDERNO,T3.FPLANDELIVERYDATE,T3.FQTY AS FSALEORDERQTY,TQ.FNoStockInQty,t5.FSCZY,t6.FORDERLEVEL,t1.FDayPlanRemainQty FROM T_PRD_MOENTRY T1 JOIN T_PRD_MOENTRY_A TA ON T1.FENTRYID =TA.FENTRYID JOIN T_PRD_MOENTRY_Q TQ on t1.FENTRYID = TQ.FENTRYID JOIN T_PRD_MO T2 ON T1.FID =T2.FID LEFT JOIN T_SAL_ORDERENTRY T3 ON T1.FSALEORDERENTRYID =T3.FENTRYID LEFT JOIN T_SAL_ORDER T4 ON T3.FID =T4.FID LEFT JOIN T_BD_MATERIAL T5 ON T1.FMATERIALID =T5.FMATERIALID LEFT JOIN T_BAS_PREBDONE T6 ON T3.F_TEZV_Base =T6.FID WHERE T1.FENTRYID = " + listSelectedRow.DataRow["t1_FENTRYID"].ToString() + " "; DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; if (dt.Rows.Count > 0) { this.Model.CreateNewEntryRow("FEntity"); this.View.Model.SetValue("FOrderType", "生产订单", Fseq); this.View.Model.SetValue("FStatus", dt.Rows[0]["FSTATUS"]?.ToString(), Fseq); this.View.Model.SetValue("FORGID", dt.Rows[0]["FPRDORGID"]?.ToString(), Fseq); this.View.Model.SetValue("FSCOrderNo", dt.Rows[0]["FBILLNO"]?.ToString(), Fseq); this.View.Model.SetValue("FSRCBILLENTRYSEQ", dt.Rows[0]["FSEQ"]?.ToString(), Fseq); this.View.Model.SetValue("FMatrailId", dt.Rows[0]["FMATERIALID"]?.ToString(), Fseq);//2129900005 this.View.Model.SetValue("FUnit", dt.Rows[0]["FUNITID"]?.ToString(), Fseq); this.View.Model.SetValue("FOrderQuantity", dt.Rows[0]["FQTY"]?.ToString(), Fseq); this.View.Model.SetValue("FProductWorkShopId", dt.Rows[0]["FWORKSHOPID"]?.ToString(), Fseq); //this.View.Model.SetValue("FOrderLevel", "3", Fseq); this.View.Model.SetValue("FBzDate", dt.Rows[0]["FPLANSTARTDATE"]?.ToString(), Fseq);//预计开工日期 this.View.Model.SetValue("FBzDate", dt.Rows[0]["FPLANSTARTDATE"]?.ToString(), Fseq);//预计开工日期 this.View.Model.SetValue("FSalOrderNo", dt.Rows[0]["FSALEORDERNO"]?.ToString(), Fseq);//销售订单号 this.View.Model.SetValue("FSalOrderCount", dt.Rows[0]["FSALEORDERQTY"]?.ToString(), Fseq);//销售订单数量 this.View.Model.SetValue("FNoStockInQty", dt.Rows[0]["FNoStockInQty"].ToString(), Fseq);//未入库数量 this.View.Model.SetValue("FDeliveryDate", dt.Rows[0]["FPLANDELIVERYDATE"]?.ToString(), Fseq);//交货日期 this.View.Model.SetValue("FResourcesId", dt.Rows[0]["FSczy"]?.ToString(), Fseq);//生产资源 this.View.Model.SetValue("FT0", dt.Rows[0]["FDayPlanRemainQty"]?.ToString(), Fseq);//剩下可排数量 this.View.Model.SetValue("FCDQuantity", dt.Rows[0]["FQTY"]?.ToString(), Fseq);//拆单数量 默认 生产订单数量 this.View.Model.SetValue("FOrderLevel", dt.Rows[0]["FOrderLevel"].ToString(), Fseq);//订单等级 this.View.Model.SetValue("FKpQty", 0, Fseq);//可排数量 Fseq++; } else { this.View.ShowMessage("联系管理员"); } } if (ret != "") { this.View.ShowMessage(ret); } } } }); } else if (FBarItemKey == "tbSelectMenuWW") { showParameter.FormId = "SUB_SUBREQORDER"; this.View.ShowForm(showParameter, delegate (FormResult result) { object returnData = result.ReturnData; if (returnData is ListSelectedRowCollection) { ListSelectedRowCollection listSelectedRowCollection = returnData as ListSelectedRowCollection; //LogHelper.Info("生产计划平台选单 行数" + listSelectedRowCollection.Count().ToString()); if (listSelectedRowCollection != null) { var ret = ""; foreach (var listSelectedRow in listSelectedRowCollection) { //if (entityDataObjoct.Where(x => x["FSRCBILLENTRYSEQ"].ToString() == listSelectedRow.DataRow["t1_FSeq"].ToString() && x["FSCOrderNo"].ToString() == listSelectedRow.DataRow["FBillNo"].ToString()).Count() > 0) //{ // //LogHelper.Info("生产计划平台选单:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号," + listSelectedRow.DataRow["t1_FSeq"].ToString() + ",已选"); // ret += "委外订单号:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号," + listSelectedRow.DataRow["t1_FSeq"].ToString() + ",已选" + "\n"; // continue; //} //string sql = $"select FID from Sc_WorkBillSortBillMain where FDOCUMENTSTATUS NOT IN ('E') and FPRDMOENTYID = {listSelectedRow.DataRow["t1_FENTRYID"].ToString()}"; //int day = DBServiceHelper.ExecuteScalar(Context, sql, 0); //if (day > 0) //{ // //LogHelper.Info("生产计划平台选单:日期太靠后," + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号, " + listSelectedRow.DataRow["t1_FSeq"].ToString() + ", day= " + day.ToString()); // ret += "委外订单号:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号:" + listSelectedRow.DataRow["t1_FSeq"].ToString() + ",已存在日计划\n"; // continue; //} ////今天以前的数据是显示不出来的 //sql = $"select DATEDIFF(d,getdate(),FPlanStartDate)days from T_SUB_REQORDERENTRY where FENTRYID = {listSelectedRow.DataRow["t1_FENTRYID"].ToString()}"; //day = DBServiceHelper.ExecuteScalar(Context, sql, 0); //if (day < 0) //{ // //LogHelper.Info("生产计划平台选单:日期太靠后," + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号, " + listSelectedRow.DataRow["t1_FSeq"].ToString() + ", day= " + day.ToString()); // ret += "计划开工日期在今天之前,委外订单号:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号:" + listSelectedRow.DataRow["t1_FSeq"].ToString() + "\n"; // continue; //} this.Model.CreateNewEntryRow("FEntity"); this.View.Model.SetItemValueByNumber("FORGID", "100", Fseq); this.View.Model.SetValue("FOrderType", "委外订单", Fseq); this.View.Model.SetValue("FSCOrderNo", listSelectedRow.DataRow["FBillNo"].ToString(), Fseq); this.View.Model.SetValue("FSRCBILLENTRYSEQ", listSelectedRow.DataRow["t1_FSeq"].ToString(), Fseq); this.View.Model.SetValue("FMatrailId", listSelectedRow.DataRow["FMaterialId_Id"].ToString(), Fseq);//2129900005 this.View.Model.SetValue("FUnit", listSelectedRow.DataRow["FUnitId_Id"].ToString(), Fseq); this.View.Model.SetValue("FOrderQuantity", listSelectedRow.DataRow["FQty"].ToString(), Fseq); this.View.Model.SetValue("FProductWorkShopId", 0, Fseq); this.View.Model.SetValue("FOrderLevel", "3", Fseq); //this.View.Model.SetValue("FBzDate", DateTime.Now.AddDays(day).ToShortDateString(), Fseq);//预计开工日期 //this.View.Model.SetValue("FT" + day.ToString(), listSelectedRow.DataRow["FQty"].ToString(), Fseq); Fseq++; } if (ret != "") { this.View.ShowMessage(ret); } } } }); } else if (FBarItemKey == "tbSelectMenuMonth") { showParameter = new ListShowParameter(); showParameter.PageId = pageId; showParameter.FormId = "bsv_Sc_WorkBillAutoSortBillMonth"; showParameter.UseOrgId = this.Context.CurrentOrganizationInfo.ID; showParameter.IsLookUp = true; this.View.ShowForm(showParameter, delegate (FormResult result) { object returnData = result.ReturnData; if (returnData is ListSelectedRowCollection) { ListSelectedRowCollection listSelectedRowCollection = returnData as ListSelectedRowCollection; //LogHelper.Info("生产计划平台选单 行数" + listSelectedRowCollection.Count().ToString()); if (listSelectedRowCollection != null) { var ret = ""; foreach (var listSelectedRow in listSelectedRowCollection) { //if (entityDataObjoct.Where(x => x["FSRCBILLENTRYSEQ"].ToString() == listSelectedRow.DataRow["t1_FSeq"].ToString() && x["FSCOrderNo"].ToString() == listSelectedRow.DataRow["FBillNo"].ToString()).Count() > 0) //{ // //LogHelper.Info("生产计划平台选单:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号," + listSelectedRow.DataRow["t1_FSeq"].ToString() + ",已选"); // ret += "生产订单号:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号," + listSelectedRow.DataRow["t1_FSeq"].ToString() + ",已选" + "\n"; // continue; //} //string sql = $"select FID from Sc_WorkBillSortBillMain where FDOCUMENTSTATUS NOT IN ('E') and FPRDMOENTYID = {listSelectedRow.DataRow["t1_FENTRYID"].ToString()}"; //int day = DBServiceHelper.ExecuteScalar(Context, sql, 0); //if (day > 0) //{ // ret += "生产订单号:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号:" + listSelectedRow.DataRow["t1_FSeq"].ToString() + ",已存在日计划\n"; // continue; //} ////今天以前的数据是显示不出来的 //sql = $"select DATEDIFF(d,getdate(),FPlanStartDate)days from T_PRD_MOENTRY where FENTRYID = {listSelectedRow.DataRow["t1_FENTRYID"].ToString()}"; //day = DBServiceHelper.ExecuteScalar(Context, sql, 0); //if (day < 0) //{ // ret += "计划开工日期在今天之前,生产订单号:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号:" + listSelectedRow.DataRow["t1_FSeq"].ToString() + "\n"; // continue; //} string sql = @"SELECT T2.FBILLNO,T2.FPRDORGID,T1.FSEQ,T1.FMATERIALID,TA.FSTATUS,T1.FUNITID,T1.FQTY,T1.FWORKSHOPID,T1.FPLANSTARTDATE ,T1.FSALEORDERNO,T3.FPLANDELIVERYDATE,T3.FQTY AS FSALEORDERQTY,TQ.FNoStockInQty FROM T_PRD_MOENTRY T1 JOIN T_PRD_MOENTRY_A TA ON T1.FENTRYID =TA.FENTRYID JOIN T_PRD_MOENTRY_Q TQ on t1.FENTRYID = TQ.FENTRYID JOIN T_PRD_MO T2 ON T1.FID =T2.FID LEFT JOIN T_SAL_ORDERENTRY T3 ON T1.FSALEORDERENTRYID =T3.FENTRYID LEFT JOIN T_SAL_ORDER T4 ON T3.FID =T4.FID WHERE T1.FENTRYID = " + listSelectedRow.DataRow["FMoFentryId"].ToString() + " "; DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; if (dt.Rows.Count > 0) { this.Model.CreateNewEntryRow("FEntity"); this.View.Model.SetValue("FOrderType", "生产订单", Fseq); this.View.Model.SetValue("FStatus", dt.Rows[0]["FSTATUS"]?.ToString(), Fseq); this.View.Model.SetValue("FORGID", dt.Rows[0]["FPRDORGID"]?.ToString(), Fseq); this.View.Model.SetValue("FSCOrderNo", dt.Rows[0]["FBILLNO"]?.ToString(), Fseq); this.View.Model.SetValue("FSRCBILLENTRYSEQ", dt.Rows[0]["FSEQ"]?.ToString(), Fseq); this.View.Model.SetValue("FMatrailId", dt.Rows[0]["FMATERIALID"]?.ToString(), Fseq);//2129900005 this.View.Model.SetValue("FUnit", dt.Rows[0]["FUNITID"]?.ToString(), Fseq); this.View.Model.SetValue("FOrderQuantity", dt.Rows[0]["FQTY"]?.ToString(), Fseq); this.View.Model.SetValue("FProductWorkShopId", dt.Rows[0]["FWORKSHOPID"]?.ToString(), Fseq); this.View.Model.SetValue("FOrderLevel", "3", Fseq); this.View.Model.SetValue("FBzDate", dt.Rows[0]["FPLANSTARTDATE"]?.ToString(), Fseq);//预计开工日期 this.View.Model.SetValue("FSalOrderNo", dt.Rows[0]["FSALEORDERNO"]?.ToString(), Fseq);//销售订单号 this.View.Model.SetValue("FSalOrderCount", dt.Rows[0]["FSALEORDERQTY"]?.ToString(), Fseq);//销售订单数量 this.View.Model.SetValue("FNoStockInQty", dt.Rows[0]["FNoStockInQty"].ToString(), Fseq);//未入库数量 this.View.Model.SetValue("FDeliveryDate", dt.Rows[0]["FPLANDELIVERYDATE"]?.ToString(), Fseq);//交货日期 //this.View.Model.SetValue("FT" + day.ToString(), dt.Rows[0]["FQTY"]?.ToString(), Fseq); Fseq++; } else { this.View.ShowMessage("联系管理员"); } } if (ret != "") { this.View.ShowMessage(ret); } } } }); } } catch (Exception ex) { //LogHelper.Error("选单失败:" + ex.Message); } } /// /// 下达 /// public void ReleaseForLMes() { try { //获取单据体信息 Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); //单据体信息转换为列表集合 DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity); DynamicObjectCollection filterResult = entityDataObjoct.Clone(); filterResult.Clear(); entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"])).ToList().ForEach(x => filterResult.Add(x)); if (filterResult.Count == 0) { this.View.ShowMessage("请选择需要操作的数据"); return; } //List _BomList = BomList.Select(x => x.FID.ToString()).Distinct().ToList(); //fDayPlanFids = string.Join(",", _BomList); List fidList = filterResult.Select(x => x["FDayPlanWorkID"].ToString()).Distinct().ToList(); var fDayPlanFids = string.Join(",", fidList); string sql = $"/*DIALECT*/ update Sc_WorkBillSortBillSub set FIsSGXG = 1 where fid in ({fDayPlanFids})"; DBServiceHelper.Execute(Context, sql); this.View.ShowMessage("操作成功"); } catch (Exception e) { this.View.ShowErrMessage("请联系管理员:" + e.Message.ToString()); } } /// /// 同步 /// public void TongBu() { try { //获取单据体信息 Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); //单据体信息转换为列表集合 DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity); DynamicObjectCollection filterResult = entityDataObjoct.Clone(); filterResult.Clear(); entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"])).ToList().ForEach(x => filterResult.Add(x)); if (filterResult.Count == 0) { this.View.ShowMessage("请选择需要操作的数据"); return; } foreach (var item in entityDataObjoct) { this.View.Model.SetValue("FT0", item["FCompleteCount"].ToString(), Convert.ToInt32(item["SEQ"]) - 1); ; } this.View.UpdateView(); this.View.ShowMessage("操作成功"); } catch (Exception e) { this.View.ShowErrMessage("请联系管理员:" + e.Message.ToString()); } } /// /// 日计划删除功能 /// public void DayPlanDelete() { try { //单据体信息转换为列表集合 Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity); DynamicObjectCollection filterResult = entityDataObjoct.Clone(); filterResult.Clear(); List fidList = new List(); List fseqList = new List(); entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"]) && Convert.ToInt32(x["FDayPlanWorkID"]) > 0).ToList().ForEach(x => fidList.Add(x["FDayPlanWorkID"].ToString())); entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"]) && Convert.ToInt32(x["FDayPlanWorkID"]) == 0).ToList().ForEach(x => fseqList.Add(x["SEQ"].ToString())); entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"]) && Convert.ToInt32(x["FDayPlanWorkID"]) == 0).ToList().ForEach(x => filterResult.Add(x)); if (fidList.Count() == 0 && fseqList.Count() == 0) { this.View.ShowMessage("请勾选需要操作的数据"); return; } foreach (var filter in filterResult) { this.View.Model.DeleteEntryRow("FEntity", Convert.ToInt32(filter["SEQ"]) - 1); } if (fidList.Count() > 0) { var FDayPlanWorkID = string.Join(",", fidList); var sJson = new { Numbers = "", Ids = FDayPlanWorkID }; CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); var result = cloudClient.Delete("Paez_Sc_WorkBillAutoSortBill", JsonConvert.SerializeObject(sJson)); JObject saveObj = JObject.Parse(result); string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); if (saveIsSuc != "TRUE") { this.View.ShowErrMessage("操作失败," + saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString()); return; } } SearchList(); } catch (Exception ex) { this.View.ShowErrMessage(ex.Message.ToString()); } } /// /// 日计划提交功能 /// public void DayPlanSubmit() { try { //单据体信息转换为列表集合 Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity); List fidList = new List(); entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"]) && Convert.ToInt32(x["FDayPlanWorkID"]) > 0).ToList().ForEach(x => fidList.Add(x["FDayPlanWorkID"].ToString())); if (fidList.Count() == 0) { this.View.ShowMessage("请勾选需要操作的数据"); return; } var FDayPlanWorkID = string.Join(",", fidList); var sJson = new { Numbers = "", Ids = FDayPlanWorkID }; CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); var result = cloudClient.Submit("Paez_Sc_WorkBillAutoSortBill", JsonConvert.SerializeObject(sJson)); JObject saveObj = JObject.Parse(result); string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); if (saveIsSuc != "TRUE") { this.View.ShowErrMessage("操作失败," + saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString()); return; } SearchList(); } catch (Exception ex) { this.View.ShowErrMessage(ex.Message.ToString()); } } /// /// 日计划审核功能 /// public void DayPlanAduit() { try { //单据体信息转换为列表集合 Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity); List fidList = new List(); entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"]) && Convert.ToInt32(x["FDayPlanWorkID"]) > 0).ToList().ForEach(x => fidList.Add(x["FDayPlanWorkID"].ToString())); if (fidList.Count() == 0) { this.View.ShowMessage("请勾选需要操作的数据"); return; } var FDayPlanWorkID = string.Join(",", fidList); var sJson = new { Numbers = "", Ids = FDayPlanWorkID }; CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); var result = cloudClient.Audit("Paez_Sc_WorkBillAutoSortBill", JsonConvert.SerializeObject(sJson)); JObject saveObj = JObject.Parse(result); string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); if (saveIsSuc != "TRUE") { this.View.ShowErrMessage("操作失败," + saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString()); return; } SearchList(); } catch (Exception ex) { this.View.ShowErrMessage(ex.Message.ToString()); } } /// /// 复制行功能 /// public void RowCopy() { //单据体信息转换为列表集合 Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity); DynamicObjectCollection filterResult = entityDataObjoct.Clone(); filterResult.Clear(); entityDataObjoct.Where(x => Convert.ToBoolean(x["FFOCUS"])).ToList().ForEach(x => filterResult.Add(x)); if (filterResult.Count() > 1) { this.View.ShowErrMessage("请选择单行数据进行复制"); return; } if (filterResult.Count() > 0) { foreach (var item in filterResult) { this.Model.CreateNewEntryRow(entity, Convert.ToInt32(item["SEQ"])); this.View.Model.SetValue("FOrderType", "生产订单", Convert.ToInt32(item["SEQ"])); this.View.Model.SetValue("FStatus", Convert.ToString(item["FStatus"]), Convert.ToInt32(item["SEQ"])); this.View.Model.SetValue("FORGID", Convert.ToString(item["FORGID_Id"]), Convert.ToInt32(item["SEQ"])); this.View.Model.SetValue("FSCOrderNo", Convert.ToString(item["FSCOrderNo"]), Convert.ToInt32(item["SEQ"])); this.View.Model.SetValue("FSRCBILLENTRYSEQ", Convert.ToString(item["FSRCBILLENTRYSEQ"]), Convert.ToInt32(item["SEQ"])); this.View.Model.SetValue("FMatrailId", Convert.ToString(item["FMatrailId_Id"]), Convert.ToInt32(item["SEQ"]));//2129900005 this.View.Model.SetValue("FUnit", Convert.ToString(item["FUnit_Id"]), Convert.ToInt32(item["SEQ"])); this.View.Model.SetValue("FOrderQuantity", Convert.ToString(item["FOrderQuantity"]), Convert.ToInt32(item["SEQ"]));//生产订单数量 this.View.Model.SetValue("FNoStockInQty", Convert.ToString(item["FNoStockInQty"]), Convert.ToInt32(item["SEQ"]));//未入库数量 this.View.Model.SetValue("FProductWorkShopId", Convert.ToString(item["FProductWorkShopId_Id"]), Convert.ToInt32(item["SEQ"])); this.View.Model.SetValue("FOrderLevel", Convert.ToString(item["FOrderLevel"]), Convert.ToInt32(item["SEQ"])); this.View.Model.SetValue("FBzDate", Convert.ToString(item["FBzDate"]), Convert.ToInt32(item["SEQ"]));//预计开工日期 this.View.Model.SetValue("FSalOrderNo", Convert.ToString(item["FSalOrderNo"]), Convert.ToInt32(item["SEQ"]));//销售订单号 this.View.Model.SetValue("FSalOrderCount", Convert.ToString(item["FSalOrderCount"]), Convert.ToInt32(item["SEQ"]));//销售订单数量 this.View.Model.SetValue("FDeliveryDate", Convert.ToString(item["FDeliveryDate"]), Convert.ToInt32(item["SEQ"]));//交货日期 this.View.Model.SetValue("FKpQty", Convert.ToString(item["FKpQty"]), Convert.ToInt32(item["SEQ"]));//可排数量 this.View.Model.SetValue("FResourcesId", Convert.ToString(item["FResourcesId_Id"]), Convert.ToInt32(item["SEQ"]));//生产资源 } } else { this.View.ShowMessage("请勾选数据"); } } } }