| | |
| | | using Demo.Model.Model; |
| | | 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.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 System.Data; |
| | | using System.Diagnostics; |
| | | using System.Linq; |
| | | using System.Threading; |
| | | using System.Web; |
| | | using ZD.Cloud.Logger; |
| | | using ZD.Cloud.WebApi; |
| | |
| | | { |
| | | COMPLETE(); |
| | | } |
| | | //齐套分析 |
| | | if (e.BarItemKey.ToUpper() == "TBCOMPLETEBOM") |
| | | { |
| | | COMPLETEBOM(); |
| | | } |
| | | //tbXnqt虚拟齐套 |
| | | if (e.BarItemKey.ToUpper() == "TBXNQT") |
| | | { |
| | |
| | | { |
| | | this.View.ShowMessage("操作成功!"); |
| | | } |
| | | } |
| | | //选单 |
| | | if (e.BarItemKey.ToUpper() == "TBSELECTMENU") |
| | | { |
| | | SelectMenu(); |
| | | } |
| | | //预留 |
| | | if (e.BarItemKey.ToUpper() == "TBRESERVE") |
| | |
| | | } |
| | | else |
| | | { |
| | | var type = this.View.Model.GetValue("FQTTYPE"); |
| | | if(type =="标准Bom") |
| | | formPa.CustomParams.Add("tempName", "JIT_MOMaterReadysBomBill"); |
| | | //齐套分析明细列表跳转 |
| | | formPa.FormId = "paez_CompleteAnalysisDetail"; |
| | | formPa.CustomParams.Add("FHICMOInterID", Convert.ToString(this.View.Model.GetValue("FDayPlanWorkID", e.Row).ToString())); |
| | |
| | | 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); |
| | | //if (result > 0) |
| | | //{ |
| | | //锁定后生成日计划用料清单 及 提料计划 |
| | | DayPlanPPBomBillBatch(); |
| | | Extraction(); |
| | | SearchList(); |
| | | this.View.ShowMessage("操作成功"); |
| | | //} |
| | | //else |
| | | // this.View.ShowMessage("操作失败,联系管理员!"); |
| | | DayPlanPPBomBill(); |
| | | } |
| | | /// <summary> |
| | | /// 解锁 |
| | |
| | | //单据体信息转换为列表集合 |
| | | DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity); |
| | | List<string> sqlList = new List<string>(); |
| | | string sql; |
| | | foreach (var item in entityDataObjoct) |
| | | { |
| | | sql = $"/*dialect*/update t1 set t1.FHLockedSub=0 from Sc_WorkBillSortBillSub t1 join Sc_WorkBillSortBillMain t2 on t1.FID = t2.FID where FHMASTERDATE between DATEADD(day,-1,getdate()) and DATEADD(day,{day - 1},getdate()) and t1.FID = { Convert.ToString(item["FDayPlanWorkID"])} "; |
| | | sqlList.Add(sql); |
| | | } |
| | | 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("操作成功"); |
| | | |
| | |
| | | } |
| | | foreach (DynamicObject current in entityDataObjoct) |
| | | { |
| | | 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"])); |
| | | 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"])); |
| | | sql = $" /*dialect*/ select FEntryID, FHMASTERDATE from SC_WORKBILLSORTBILLSub where FID={Convert.ToString(current["FDayPlanWorkID"])} "; |
| | | List<DayPlanModel> dayPlanModel = new List<DayPlanModel>(); |
| | | dayPlanModel = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<DayPlanModel>(); |
| | | JArray Entry = new JArray(); |
| | | for (int i = 0; i <= 60; i++) |
| | | if (Convert.ToInt32(current["FDayPlanWorkID"]) > 0) |
| | | { |
| | | if (Convert.ToString(current["FT" + "" + i + ""]) == "" || Convert.ToString(current["FT" + "" + i + ""]) == "0") |
| | | continue; |
| | | JObject jsonFPOOrderEntry = new JObject(); |
| | | jsonFPOOrderEntry.Add("FHMasterDate", date.AddDays(i).ToShortDateString()); ;//主日期 |
| | | jsonFPOOrderEntry.Add("FHQty ", Convert.ToString(current["FT" + "" + i + ""])); ;//日计划数量 |
| | | List<DayPlanModel> _dayPlanModel = dayPlanModel.Where(x => x.FHMASTERDATE == date.AddDays(i)).ToList(); |
| | | if (_dayPlanModel.Count > 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"])); |
| | | 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"])); |
| | | sql = $" /*dialect*/ select FEntryID, FHMASTERDATE from SC_WORKBILLSORTBILLSub where FID={Convert.ToString(current["FDayPlanWorkID"])} "; |
| | | List<DayPlanModel> dayPlanModel = new List<DayPlanModel>(); |
| | | dayPlanModel = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<DayPlanModel>(); |
| | | JArray Entry = new JArray(); |
| | | for (int i = 0; i <= 60; i++) |
| | | { |
| | | jsonFPOOrderEntry.Add("FEntryID", _dayPlanModel.FirstOrDefault().FEntryID); ;//序号 |
| | | if (Convert.ToString(current["FT" + "" + i + ""]) == "" || Convert.ToString(current["FT" + "" + i + ""]) == "0") |
| | | continue; |
| | | JObject jsonFPOOrderEntry = new JObject(); |
| | | jsonFPOOrderEntry.Add("FHMasterDate", date.AddDays(i).ToShortDateString()); ;//主日期 |
| | | jsonFPOOrderEntry.Add("FHQty ", Convert.ToString(current["FT" + "" + i + ""])); ;//日计划数量 |
| | | List<DayPlanModel> _dayPlanModel = dayPlanModel.Where(x => x.FHMASTERDATE == date.AddDays(i)).ToList(); |
| | | if (_dayPlanModel.Count > 0) |
| | | { |
| | | jsonFPOOrderEntry.Add("FEntryID", _dayPlanModel.FirstOrDefault().FEntryID); ;//序号 |
| | | } |
| | | Entry.Add(jsonFPOOrderEntry); |
| | | } |
| | | 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("生产计划平台保存失败:" + jsonRoot.ToString()); |
| | | this.View.ShowMessage("数据储存失败!请联系管理员!"); |
| | | } |
| | | } |
| | | 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") |
| | | else |
| | | { |
| | | LogHelper.Error("生产计划平台保存失败:" + jsonRoot.ToString()); |
| | | this.View.ShowMessage("数据储存失败!请联系管理员!"); |
| | | //根据生产订单号和物料查询是否存在明细 +生产订单明细行号 |
| | | sql = string.Format(@" |
| | | /*dialect*/ |
| | | SELECT t4.FNAME as FMoFBillType,T1.FBILLNO,T2.*,t3.FNUMBER as FUnitNumber,tBom.FNUMBER as FBomNumber FROM T_PRD_MO T1 |
| | | LEFT JOIN T_PRD_MOENTRY 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='PRD_MO' AND FNAME<>'生產訂單')t4 on t1.FBILLTYPE =t4.FBILLTYPEID |
| | | WHERE T1.FBILLNO = '{0}' AND T2.FMATERIALID = '{1}' AND T2.FSEQ = '{2}'", 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(); |
| | | } |
| | | |
| | | //选单数据 做新增 |
| | | 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", date.ToString());//编制日期 |
| | | jsonModel.Add("FMoFBillType", FMoFBillType);// |
| | | 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("FBatch", current["FBatch"].ToString());//批次 |
| | | 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"])); ;//未排数量 |
| | | 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(); |
| | | for (int i = 0; i <= 60; i++) |
| | | { |
| | | if (Convert.ToString(current["FT" + "" + i + ""]) == "" || Convert.ToString(current["FT" + "" + i + ""]) == "0") |
| | | continue; |
| | | JObject jsonFPOOrderEntry = new JObject(); |
| | | 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); |
| | | 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("生产计划平台保存失败:" + jsonRoot.ToString()); |
| | | this.View.ShowMessage("数据储存失败!请联系管理员!"); |
| | | } |
| | | if (saveIsSuc == "TRUE") |
| | | { |
| | | string FDayPlanBillNo = saveObj["Result"]["Number"].ToString(); |
| | | string FDayPlanID = saveObj["Result"]["Id"].ToString(); |
| | | this.Model.SetValue("FDayPlanBillNo", FDayPlanBillNo, Convert.ToInt32(current["SEQ"]) - 1);// |
| | | this.Model.SetValue("FDayPlanID", FDayPlanID, Convert.ToInt32(current["SEQ"]) - 1);// |
| | | } |
| | | } |
| | | } |
| | | |
| | | this.View.ShowMessage("操作成功"); |
| | | SearchList(); |
| | | } |
| | |
| | | // using Kingdee.BOS.KDThread; |
| | | MainWorker.QuequeTask(() => |
| | | { |
| | | var resuult = ""; |
| | | try |
| | | { |
| | | // 需要捕获错误,以确保处理结束时,关闭进度滚动界面 |
| | | // 引入功能实际处理函数 |
| | | this.CompleteSetAnalysisBySQL(); |
| | | resuult = this.CompleteSetAnalysisByDataTable(); |
| | | } |
| | | finally |
| | | { |
| | |
| | | { |
| | | 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<FormResult>(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) => { }); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 齐套分析 |
| | | /// </summary> |
| | |
| | | { |
| | | Stopwatch sw = new Stopwatch(); |
| | | sw.Start();//开始计时 |
| | | //清空齐套临时表 |
| | | //清空齐套临时表 |
| | | DBServiceHelper.Execute(Context, "/*dialect*/ delete JIT_MOMaterReadysBill "); |
| | | //更新状态 |
| | | DBServiceHelper.Execute(Context, "/*dialect*/ update Sc_WorkBillSortBillsub set FCOMPLETE='' "); |
| | |
| | | delete z_JIT_MOMaterReadysBill |
| | | ", 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); |
| | | this.View.Session["ProcessRateValue"] = Convert.ToInt32((Convert.ToDecimal(80) / completeAnalysisTempModel.Count) * jdtmmm); |
| | | jdtmmm++; |
| | | } |
| | | DBServiceHelper.ExecuteBatch(Context, sqlList); |
| | |
| | | |
| | | } |
| | | } |
| | | //生产用料清单 齐套分析 |
| | | public string CompleteSetAnalysisByDataTable() |
| | | { |
| | | LogHelper.Info("齐套分析sql模式开始准备数据:"); |
| | | string sql = ""; |
| | | try |
| | | { |
| | | Stopwatch sw = new Stopwatch(); |
| | | sw.Start();//开始计时 |
| | | int maxFid = DBServiceHelper.ExecuteScalar<int>(Context, "select max(FID)FID FROM JIT_MOMaterReadysBill", 0); |
| | | //清空齐套临时表 |
| | | DBServiceHelper.Execute(Context, "/*dialect*/ delete JIT_MOMaterReadysBill "); |
| | | //更新状态 |
| | | 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_MOMaterReadysBill B ON T1.FStockOrgId = b.FHSTOCKORGID and T1.FMATERIALID =b.FHMATERID and a.FOwnerId = b.FOwnerId |
| | | LEFT join T_ORG_Organizations c on a.FOWNERID = c.FORGID |
| | | join t_BD_Stock d on a.FSTOCKID =d.FSTOCKID |
| | | where d.FAvailableComplete<>0 |
| | | --where T1.FMATERIALID in (105773) |
| | | "); |
| | | ListInventory = ds.ToModelList<PRD_Inventory>(); |
| | | //总库存 物料+库存组织+库存数量 |
| | | 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 |
| | | 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<PRD_Inventory>(); |
| | | //需要齐套分析的数据 |
| | | 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<PRD_PPBOM> BomList = ds.ToModelList<PRD_PPBOM>(); |
| | | //日计划+生产订单子表编码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> completeAnalysisTempModel = new List<CompleteAnalysisTempModel>(); |
| | | int i = 1; |
| | | //创建字典 用于储存物料 + 占用数量 |
| | | Dictionary<string, decimal> occupyDic = new Dictionary<string, decimal>(); |
| | | LogHelper.Info("齐套分析准备数据完成:" + sw.Elapsed); |
| | | 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<PRD_Inventory> _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.ToString(),//单位用量 |
| | | FSumPlanCount = _item.PlanCount.ToString(),//计划总数量 |
| | | 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.ToString(),//单位用量 |
| | | FSumPlanCount = _item.PlanCount.ToString(),//计划总数量 |
| | | 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<string> sqlList = new List<string>(); |
| | | 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)); |
| | | int jdtmmm = 1; |
| | | 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"] = "BD_OwnerOrg"; |
| | | //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; |
| | | insertDT.Rows.Add(dr); |
| | | //Thread.Sleep(6000); |
| | | this.View.Session["ProcessRateValue"] = Convert.ToInt32((Convert.ToDecimal(80) / completeAnalysisTempModel.Count) * jdtmmm); |
| | | jdtmmm++; |
| | | } |
| | | insertDT.EndLoadData(); // 灌入数据结束 |
| | | // 批量插入到数据库 |
| | | DBServiceHelper.BulkInserts(this.Context, string.Empty, string.Empty, insertDT); |
| | | //DBServiceHelper.ExecuteBatch(Context, sqlList); |
| | | //执行完成后 更新日计划工单状态 |
| | | DBServiceHelper.Execute(Context, @" |
| | | /*dialect*/update Sc_WorkBillSortBillSub set FComplete = '未齐套' where FEntryID IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBill where isnull(FCOMPLETE,'未齐套') ='未齐套') |
| | | "); |
| | | DBServiceHelper.Execute(Context, @" |
| | | /*dialect*/update Sc_WorkBillSortBillSub set FComplete = '齐套' where FEntryID NOT IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBill where isnull(FCOMPLETE,'未齐套') ='未齐套') |
| | | "); |
| | | sw.Stop();//结束计时 |
| | | LogHelper.Info("齐套分析运行总时长:" + sw.Elapsed); |
| | | return "操作成功"; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Error("齐套分析跳出:" + ex.Message.ToString()); |
| | | return "操作失败," + ex.Message.ToString(); |
| | | |
| | | } |
| | | } |
| | | //物料用料清单 齐套分析 |
| | | public string CompleteSetAnalysisByDataTableBom() |
| | | { |
| | | LogHelper.Info("齐套分析(bom)sql模式开始准备数据:"); |
| | | string sql = ""; |
| | | try |
| | | { |
| | | Stopwatch sw = new Stopwatch(); |
| | | sw.Start();//开始计时 |
| | | int maxFid = DBServiceHelper.ExecuteScalar<int>(Context, "select max(FID)FID FROM JIT_MOMaterReadysBomBill", 0); |
| | | //清空齐套临时表 |
| | | DBServiceHelper.Execute(Context, "/*dialect*/ delete JIT_MOMaterReadysBomBill "); |
| | | //更新状态 |
| | | DBServiceHelper.Execute(Context, "/*dialect*/ update Sc_WorkBillSortBillsub set FCOMPLETEBOM='' "); |
| | | //获取当前即时库存 按照物料+库存组织+货主+库存数量 |
| | | 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_MOMaterReadysBomBill 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<PRD_Inventory>(); |
| | | //总库存 物料+库存组织+库存数量 |
| | | 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_MOMaterReadysBomBill 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<PRD_Inventory>(); |
| | | //需要齐套分析(bom)的数据 |
| | | sql = @" |
| | | /*dialect*/ |
| | | select a.FPRDMOMAINID,a.FPRDMOENTYID,a.FID,b.FEntryID,a.FHPRDORGID FStockOrgId,t5.FNUMBER as OrgFnumber,a.FHOrderLev,b.FHQTY,b.FHMASTERDATE, a.FSCORDERNO as FMOBillNO, |
| | | T2.FMATERIALID FMATERIALID2, T4.FNumber,t2.FNUMERATOR/t2.FDENOMINATOR dwyl,(FHQTY-ISNULL(FProductNum,0))*(t2.FNUMERATOR/t2.FDENOMINATOR ) 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 T_ENG_BOMCHILD T2 on a.FBOMID = 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<PRD_PPBOM> BomList = ds.ToModelList<PRD_PPBOM>(); |
| | | //日计划+生产订单子表编码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> completeAnalysisTempModel = new List<CompleteAnalysisTempModel>(); |
| | | int i = 1; |
| | | //创建字典 用于储存物料 + 占用数量 |
| | | Dictionary<string, decimal> occupyDic = new Dictionary<string, decimal>(); |
| | | LogHelper.Info("齐套分析(bom)准备数据完成:" + sw.Elapsed); |
| | | 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<PRD_Inventory> _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.ToString(),//单位用量 |
| | | FSumPlanCount = _item.PlanCount.ToString(),//计划总数量 |
| | | 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.ToString(),//单位用量 |
| | | FSumPlanCount = _item.PlanCount.ToString(),//计划总数量 |
| | | 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($"齐套分析(bom),数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed); |
| | | List<string> sqlList = new List<string>(); |
| | | DataTable insertDT = new DataTable(); |
| | | insertDT.TableName = "JIT_MOMaterReadysBomBill"; |
| | | 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)); |
| | | int jdtmmm = 1; |
| | | 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"] = "BD_OwnerOrg"; |
| | | //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; |
| | | insertDT.Rows.Add(dr); |
| | | //Thread.Sleep(6000); |
| | | this.View.Session["ProcessRateValue"] = Convert.ToInt32((Convert.ToDecimal(80) / completeAnalysisTempModel.Count) * jdtmmm); |
| | | jdtmmm++; |
| | | } |
| | | insertDT.EndLoadData(); // 灌入数据结束 |
| | | // 批量插入到数据库 |
| | | DBServiceHelper.BulkInserts(this.Context, string.Empty, string.Empty, insertDT); |
| | | //DBServiceHelper.ExecuteBatch(Context, sqlList); |
| | | //执行完成后 更新日计划工单状态 |
| | | DBServiceHelper.Execute(Context, @" |
| | | /*dialect*/update Sc_WorkBillSortBillSub set FCompletebom = '未齐套' where FEntryID IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBomBill where isnull(FCOMPLETE,'未齐套') ='未齐套') |
| | | "); |
| | | DBServiceHelper.Execute(Context, @" |
| | | /*dialect*/update Sc_WorkBillSortBillSub set FCompletebom = '齐套' where FEntryID NOT IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBomBill where isnull(FCOMPLETE,'未齐套') ='未齐套') |
| | | "); |
| | | sw.Stop();//结束计时 |
| | | LogHelper.Info("齐套分析(bom)运行总时长:" + sw.Elapsed); |
| | | return "操作成功"; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Error("齐套分析(bom)跳出:" + ex.Message.ToString()); |
| | | return "操作失败," + ex.Message.ToString(); |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 虚拟齐套 |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 日计划用料清单生成 |
| | | /// 日计划用料清单进度条 |
| | | /// </summary> |
| | | public void DayPlanPPBomBillBatch() |
| | | private void DayPlanPPBomBill() |
| | | { |
| | | // 显示一个进度显示界面:显示一个不停滚动的模拟进度 |
| | | // bUseTruePro参数:是否显示真实的进度。 |
| | | // bUseTruePro = false : |
| | | // 显示一个不停滚动的模拟进度,与实际处理进度没有关联。 |
| | | // 此方案优点:实际处理代码无需计算进度 |
| | | // 此方案缺点:进度不准确,且进度页面不会自动关闭。 |
| | | // bUseTruePro = true: 进度界面显示真实进度 |
| | | // 此方案优点:进度真实 |
| | | // 此方案缺点:需要在处理代码中,不断的更新真实进度,更新语句 |
| | | // this.View.Session["ProcessRateValue"] = 100; |
| | | // 特别说明,当进度更新到100时,进度界面会自动关闭 |
| | | // 本案例选用此方案 |
| | | var processForm = this.View.ShowProcessForm( |
| | | new Action<FormResult>(t => { }), |
| | | true, |
| | | "正在生成,请稍候..."); |
| | | |
| | | // 开启一个异步线程,处理引入功能 |
| | | // using Kingdee.BOS.KDThread; |
| | | MainWorker.QuequeTask(() => |
| | | { |
| | | var 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("操作成功"); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 日计划用料清单生成 |
| | | /// </summary> |
| | | public string DayPlanPPBomBillBatch() |
| | | { |
| | | //LogService.WriteAsync(entrys); |
| | | //查找到的同批项次 |
| | | int day = Convert.ToInt32(this.Model.GetValue("FLockDays")); |
| | | 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)); |
| | | string sqlWhere = " 1=1 "; |
| | | string FDayPlanWorkID = ""; |
| | | string zxSql = ""; |
| | | List<string> zxSqlList = new List<string>(); |
| | | if (filterResult.Count() > 0) |
| | | { |
| | | foreach (var filter in filterResult) |
| | | { |
| | | FDayPlanWorkID += filter["FDayPlanWorkID"].ToString() + ","; |
| | | zxSqlList.Add(string.Format(@"/*dialect*/ |
| | | INSERT INTO Z_SC_TLPLANZXJH (COLUMN1) VALUES ('{0}') |
| | | SELECT * FROM Z_SC_TLPLANZXJH |
| | | INSERT INTO SC_TLPLANZXJH(FID, FDAYPLANID, FCREATEDATE) SELECT *, GETDATE() FROM Z_SC_TLPLANZXJH |
| | | DELETE FROM Z_SC_TLPLANZXJH |
| | | SELECT * FROM SC_TLPLANZXJH", filter["FDayPlanWorkID"])); |
| | | } |
| | | FDayPlanWorkID = FDayPlanWorkID.TrimEnd(','); |
| | | sqlWhere += $"AND t2.FID IN ({FDayPlanWorkID})"; |
| | | } |
| | | DBServiceHelper.ExecuteBatch(Context, zxSqlList); |
| | | Stopwatch sw = new Stopwatch(); |
| | | sw.Start();//开始计时 |
| | | |
| | | LogHelper.Info("生成日计划用料清单准备数据"); |
| | | //锁定的日计划不生成 |
| | | try |
| | | { |
| | | string sql = string.Format(@" |
| | | /*dialect*/ |
| | | select t1.FID,t1.FSEQ FDayPlanFSEQ,t1.FEntryID,T2.FBILLNO AS FDayPlanFBILLNO,t3.FMATERIALID,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, |
| | | string sql = string.Format(@"/*dialect*/ |
| | | 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,torg.FNUMBER as FORGNUMBER,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 |
| | |
| | | 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 t1.FEntryID not in |
| | | WHERE |
| | | t1.FHMASTERDATE between DATEADD(day,-1,getdate()) and DATEADD(day,{{1} - 1},getdate()) |
| | | and t1.FEntryID not in |
| | | ( |
| | | select distinct FDAYPLANFID from Sc_DayPlanPPBomBillMain where FID IN ( |
| | | select distinct FDAYPLANFID from T_PRD_PICKMTRLDATA) |
| | | select distinct FDAYPLANFID from Sc_DayPlanPPBomBillMain where FID IN |
| | | ( |
| | | --领料单 |
| | | select distinct FDAYPLANFID from T_PRD_PICKMTRLDATA |
| | | union all |
| | | --日计划用料清单变更单 |
| | | select distinct FDAYPLANID from Sc_DayPlanPPBomBillSubBG |
| | | ) |
| | | ) |
| | | AND {0} |
| | | -- and T4.FMustQty>0 |
| | | -- ( |
| | | -- select FDayPlanFID FROM Sc_DayPlanPPBomBillMain WHERE FID IN ( select distinct FID from Sc_DayPlanPPBomBillSub WHERE FTranslateQty >0 or FPickedQty >0) |
| | | -- ) |
| | | " |
| | | ); |
| | | ", |
| | | sqlWhere, day); |
| | | LogHelper.Info("生成日计划用料清单准备数据sql:" + sql); |
| | | DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql); |
| | | DataTable dt = ds.Tables[0]; |
| | |
| | | FWORKSHOPID = dr["FWORKSHOPID"].ToString(), |
| | | FReplaceGroup = dr["FReplaceGroup"].ToString(), |
| | | FUseRate = dr["FUseRate"].ToString(), |
| | | FIsTDL = dr["FIsTDL"].ToString() |
| | | FIsTDL = dr["FIsTDL"].ToString(), |
| | | FMoSeq = dr["FMoSeq"].ToString(), |
| | | }); |
| | | } |
| | | LogHelper.Info($"日计划用料清单,数据准备完成,保存到Model实体,总行数:{DayPlanMaterial.Count},耗时:" + sw.Elapsed); |
| | | var fidList = DayPlanMaterial.Select(x => x.FEntryID).Distinct().ToList(); |
| | | int i = 1; |
| | | int jdtmmm = 1; |
| | | JArray Fentity = new JArray(); |
| | | foreach (var item in fidList) |
| | | { |
| | |
| | | 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);// |
| | |
| | | ["IsDeleteEntry"] = "true", |
| | | ["SubSystemId"] = "", |
| | | ["IsVerifyBaseDataField"] = "false", |
| | | ["IsAutoSubmitAndAudit"] = true,//自动调用提交和审核功能 |
| | | ["Model"] = Fentity |
| | | }; |
| | | CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); |
| | |
| | | } |
| | | if (saveIsSuc != "TRUE") |
| | | { |
| | | LogHelper.Error("日计划用料清单列表生成失败:" + jsonRoot.ToString()); |
| | | this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString()); |
| | | //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()); |
| | | } |
| | | } |
| | | |
| | |
| | | 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 |
| | | 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 |
| | |
| | | { |
| | | 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 == 0) |
| | | // LogHelper.Info("订单数量为0"); |
| | | if (Qty > _NeedQty) |
| | | Qty = _NeedQty; //订单数量>采购订单数量 取采购订单 |
| | | |
| | |
| | | FentityModel.Add("FHPOOrderEntryID", _item.PurchseFentryID); //采购订单子内码:FHPOOrderEntryID |
| | | FentityModel.Add("FHPOOrderBillNo", _item.PurchseFBillNo); //采购订单号:FHPOOrderBillNo |
| | | FentityModel.Add("FERPCLSID", _item.FErpClsID); //发料方式 |
| | | //FentityModel.Add("FSEQ", FSEQ); //发料方式 |
| | | //FentityModel.Add("FSEQ", FSEQ); //发料方式 |
| | | FentityModel.Add("FUnitID", new JObject() { ["Fnumber"] = "Pcs" }); //发料方式 |
| | | |
| | | Fentity.Add(FentityModel); |
| | |
| | | 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.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(); |
| | |
| | | this.View.ShowErrMessage(ex.Message.ToString()); |
| | | } |
| | | } |
| | | |
| | | public void SelectMenu() |
| | | { |
| | | //获取单据体信息 |
| | | Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity"); |
| | | //单据体信息转换为列表集合 |
| | | DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity); |
| | | int Fseq = entityDataObjoct.Count(); |
| | | |
| | | string pageId = Guid.NewGuid().ToString(); |
| | | ListShowParameter showParameter = new ListShowParameter(); |
| | | showParameter.FormId = "PRD_MO"; |
| | | showParameter.PageId = pageId; |
| | | showParameter.UseOrgId = this.Context.CurrentOrganizationInfo.ID; |
| | | showParameter.IsLookUp = true; |
| | | this.View.ShowForm(showParameter); |
| | | |
| | | this.View.ShowForm(showParameter, delegate (FormResult result) |
| | | { |
| | | object returnData = result.ReturnData; |
| | | if (returnData is ListSelectedRowCollection) |
| | | { |
| | | ListSelectedRowCollection listSelectedRowCollection = returnData as ListSelectedRowCollection; |
| | | if (listSelectedRowCollection != null) |
| | | { |
| | | foreach (var listSelectedRow in listSelectedRowCollection) |
| | | { |
| | | string sql = $"select DATEDIFF(d,FPlanStartDate,getdate())days from T_PRD_MOENTRY where FENTRYID = {listSelectedRow.DataRow["t1_FENTRYID"].ToString()}"; |
| | | int day = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0); |
| | | this.Model.CreateNewEntryRow("FEntity"); |
| | | this.View.Model.SetItemValueByNumber("FORGID", "100", 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("FFUnit", listSelectedRow.DataRow["FUnitId_Id"].ToString(), Fseq); |
| | | this.View.Model.SetValue("FOrderQuantity", listSelectedRow.DataRow["FQty"].ToString(), Fseq); |
| | | this.View.Model.SetValue("FProductWorkShopId", listSelectedRow.DataRow["FWorkShopID_Id"].ToString(), Fseq); |
| | | this.View.Model.SetValue("FOrderLevel", "3", Fseq); |
| | | this.View.Model.SetValue("FT" + day.ToString(), listSelectedRow.DataRow["FQty"].ToString(), Fseq); |
| | | Fseq++; |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | } |
| | | |