From e383743627f94e837c18111318c8261391029c03 Mon Sep 17 00:00:00 2001 From: 王 垚 <1402714037@qq.com> Date: 星期五, 26 二月 2021 13:44:03 +0800 Subject: [PATCH] 日计划用料清单下推直接调拨单 关联关系以及反写 代码上传 测试通过 --- src/BLL/Demo.BillView/Demo.BillView.csproj | 3 src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB2.cs | 273 +++++++++++++++++++++++++++ src/BLL/Demo.BillView/PRD/Pro_ZJDBFSH.cs | 67 ++++++ src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB.cs | 71 +++++-- src/BLL/Demo.BillView/PRD/Pro_MaterialRequisitionAuditDayPlan.cs | 65 +++++- src/BLL/Demo.BillView/PRD/Pro_ZJDBSH.cs | 66 ++++++ 6 files changed, 510 insertions(+), 35 deletions(-) diff --git a/src/BLL/Demo.BillView/Demo.BillView.csproj b/src/BLL/Demo.BillView/Demo.BillView.csproj index 5196cd6..559b555 100644 --- a/src/BLL/Demo.BillView/Demo.BillView.csproj +++ b/src/BLL/Demo.BillView/Demo.BillView.csproj @@ -220,6 +220,9 @@ <Compile Include="PRD\ProCompleteAnalysisMateriel.cs" /> <Compile Include="PRD\ProCompleteAnalysisDetails.cs" /> <Compile Include="PRD\Pro_DayPlanCheckSelectMenu.cs" /> + <Compile Include="PRD\Pro_ZJDBSH.cs" /> + <Compile Include="PRD\Pro_ZJDBFSH.cs" /> + <Compile Include="PRD\Pro_DayPlanPushZJDB2.cs" /> <Compile Include="PRD\Pro_DayPlanSelectMenu.cs" /> <Compile Include="PRD\Pro_DayPlanPushZJDB.cs" /> <Compile Include="PRD\Pro_MaterialRequisitionAuditDayPlan.cs" /> diff --git a/src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB.cs b/src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB.cs index fcccd16..9320029 100644 --- a/src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB.cs +++ b/src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB.cs @@ -16,13 +16,13 @@ namespace Demo.DynamicForm.PRD { /// <summary> - /// 鎻掍欢绀轰緥锛氬紩鍏ラ攢鍞嚭搴撳崟锛屽缓绔嬩笌閿�鍞鍗曠殑鍏宠仈 + /// 鏃ヨ鍒掔敤鏂欐竻鍗曚笅鎺ㄥ悗锛屽缓绔嬬洿鎺ヨ皟鎷ㄥ崟涓庢棩璁″垝鐢ㄦ枡娓呭崟鍏宠仈鍏崇郴 /// </summary> /// <remarks> /// 瑕佹眰锛� /// 1. 闇�瑕佸紩鍏ュ崟鎹綋鐨勬簮鍗曠被鍨嬨�佹簮鍗曠紪鍙峰瓧娈� - /// 2. 鏈彃浠舵寕鍦ㄩ攢鍞嚭搴撳崟鐨勪繚瀛樻搷浣滀笂 - /// 鍑哄簱鍏宠仈閿�鍞鍗� + /// 2. 鏈彃浠舵寕鍦ㄧ洿鎺ヨ皟鎷ㄥ崟鐨勪繚瀛樻搷浣滀笂 + /// 鐩存帴璋冩嫧鍗曞叧鑱旀棩璁″垝鐢ㄦ枡娓呭崟 /// </remarks> [Description("鏃ヨ鍒掔敤鏂欐竻鍗曚笅鎺ㄥ悗锛屽缓绔嬬洿鎺ヨ皟鎷ㄥ崟涓庣敓浜х敤鏂欐竻鍗曞叧鑱斿叧绯�")] [HotUpdate] @@ -42,6 +42,7 @@ e.FieldKeys.Add("FBaseJoinQty"); } private const string POFormId = "PRD_PPBOM"; + public List<string> FentryIdList = new List<string>(); public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e) { base.BeforeExecuteOperationTransaction(e); @@ -57,15 +58,18 @@ as DynamicObjectCollection; foreach (var entryRow in entryRows) { + //鐢熶骇鐢ㄦ枡娓呭崟涓虹┖鏃� + if (Convert.ToString(entryRow["FDayPlanBillNo"]) == "") + continue; string srcFormId = ""; string srcSrcBillNo = ""; string FPPBOMFENTRYID = ""; try { srcFormId = "PRD_PPBOM"; - srcSrcBillNo = entryRow["FPPBOMBILLNO"].ToString(); - string FPPBOMFID = entryRow["FPPOMFID"].ToString(); - FPPBOMFENTRYID = entryRow["FPPBOMFENTRYID"].ToString(); + srcSrcBillNo = entryRow["FPPBOMBILLNO"]?.ToString(); + string FPPBOMFID = entryRow["FPPOMFID"]?.ToString(); + FPPBOMFENTRYID = entryRow["FPPBOMFENTRYID"]?.ToString(); } catch (Exception) { @@ -101,10 +105,11 @@ as DynamicObjectCollection; foreach (var entryRow in entryRows) { + string srcFormId = "PRD_PPBOM"; - string srcSrcBillNo = entryRow["FPPBOMBILLNO"].ToString(); - string FPPBOMFID = entryRow["FPPOMFID"].ToString(); - string FPPBOMFENTRYID = entryRow["FPPBOMFENTRYID"].ToString(); + string srcSrcBillNo = entryRow["FPPBOMBILLNO"]?.ToString(); + string FPPBOMFID = entryRow["FPPOMFID"]?.ToString(); + string FPPBOMFENTRYID = entryRow["FPPBOMFENTRYID"]?.ToString(); if (string.IsNullOrWhiteSpace(srcFormId) || string.IsNullOrWhiteSpace(srcSrcBillNo) @@ -123,6 +128,10 @@ bool Ret = SourceVerification(Convert.ToString(entryRow["Id"])); if (!Ret) continue; + //璁板綍婧愬崟ID 鐢ㄤ簬鏇存柊 + if (!FentryIdList.Contains(entryRow["Id"]?.ToString())) + FentryIdList.Add(entryRow["Id"]?.ToString()); + DynamicObjectCollection linkRows = linkEntry.DynamicProperty.GetValue(entryRow) as DynamicObjectCollection; DynamicObject linkRow = new DynamicObject(linkEntry.DynamicObjectType); @@ -137,20 +146,42 @@ dbService.AutoSetPrimaryKey(this.Context, allNewLinkRows.ToArray(), linkEntry.DynamicObjectType); } - - public override void EndOperationTransaction(EndOperationTransactionArgs e) + /// <summary> + /// 淇濆瓨鎿嶄綔鍏宠仈鍏崇郴鍐欏叆瀹屾垚鍚� 鏇存敼婧愬崟淇℃伅 + /// </summary> + /// <param name="e"></param> + public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) { - base.EndOperationTransaction(e); - string sql = @"/*dialect*/ + base.AfterExecuteOperationTransaction(e); + //鏇存敼LK琛ㄤ俊鎭� 浠ュ強 婧愬崟鍏宠仈淇℃伅 + List<string> sqlList = new List<string>(); + string sql = ""; + if (FentryIdList.Count > 0) + { + string FentryId = string.Join(",", FentryIdList.ToArray()); + sql = string.Format(@"/*dialect*/ update a set FBASEQTY = FQTY from T_STK_STKTRANSFERINENTRY_LK a join T_STK_STKTRANSFERINENTRY b on a.FENTRYID = b.FENTRYID - where a.FSTABLENAME = 'T_PRD_PPBOMENTRY' and a.FBASEQTY = 0"; - DBServiceHelper.Execute(Context, sql); + where + --a.FSTABLENAME = 'T_PRD_PPBOMENTRY' and + a.FENTRYID in ({0})", FentryId); + sqlList.Add(sql); + sql = string.Format(@"/*dialect*/update T_STK_STKTRANSFERINENTRY_R + set FSrcBillTypeId = 'PRD_PPBOM',FSRCBILLNO=b.FPPBOMBILLNO + ,FTRANSRESERVELINK=1 + from T_STK_STKTRANSFERINENTRY_R a + join T_STK_STKTRANSFERINENTRY b on a.FENTRYID=b.FENTRYID + where a.FENTRYID in({0})", FentryId); + sqlList.Add(sql); + DBServiceHelper.ExecuteBatch(Context, sqlList); + } + } + /// <summary> - /// 鍔犺浇鐩稿叧鐨勯攢鍞鍗曟暟鎹� + /// 鍔犺浇鐩稿叧鐨勭敓浜х敤鏂欐竻鍗曚俊鎭� /// </summary> /// <param name="poBillNos"></param> /// <returns></returns> @@ -159,7 +190,7 @@ IViewService viewService = ServiceHelper.GetService<IViewService>(); string formId = "PRD_PPBOM"; - // 鎸囧畾闇�瑕佸姞杞界殑閿�鍞鍗曞瓧娈� + // 鎸囧畾闇�瑕佸姞杞界殑鐢ㄦ枡娓呭崟瀛楁 List<SelectorItemInfo> fields = new List<SelectorItemInfo>(); fields.Add(new SelectorItemInfo("FID")); // 鍗曟嵁涓婚敭 fields.Add(new SelectorItemInfo("FTreeEntity_FEntryID")); // 鍗曟嵁浣撲富閿� @@ -179,7 +210,7 @@ return objs; } /// <summary> - /// 鎶婇攢鍞鍗曞崟鎹綋琛屾瀯寤轰负瀛楀吀锛欴ictionary(鍗曟嵁缂栧彿, Dictionary(鐗╂枡缂栫爜, 婧愬崟琛�)); + /// 鎶婄敤鏂欐竻鍗曞崟鎹綋琛屾瀯寤轰负瀛楀吀锛欴ictionary(鍗曟嵁缂栧彿, Dictionary(鐗╂枡缂栫爜, 婧愬崟琛�)); /// </summary> /// <param name="poObjs"></param> /// <returns></returns> @@ -204,7 +235,7 @@ return dctAllBills; } /// <summary> - /// 鑾峰彇閿�鍞鍗曞叧鑱斾富瀹炰綋琛ㄦ牸缂栫爜 + /// 鑾峰彇鐢ㄦ枡娓呭崟鍏宠仈涓诲疄浣撹〃鏍肩紪鐮� /// </summary> /// <returns></returns> private string GetPOEntryTableNumber() @@ -242,7 +273,7 @@ /// <returns></returns> public bool SourceVerification(string FTID) { - string sql = $" select count(*) from T_BF_INSTANCEENTRY where FSTABLENAME= 'T_PRD_PPBOMENTRY' and FTID = '{FTID}'"; + string sql = $" select count(*) from T_BF_INSTANCEENTRY where FSTABLENAME= 'T_PRD_PPBOMENTRY' and FTTABLENAME = 'T_STK_STKTRANSFERINENTRY' and FTID = '{FTID}'"; int count = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0); if (count == 0) return true; diff --git a/src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB2.cs b/src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB2.cs new file mode 100644 index 0000000..14eaf46 --- /dev/null +++ b/src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB2.cs @@ -0,0 +1,273 @@ +锘縰sing System; +using System.Collections.Generic; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.Contracts; +using Kingdee.BOS.App; +using Kingdee.BOS.Core.Metadata.FieldElement; +using System.ComponentModel; +using Kingdee.BOS.ServiceHelper; +using Kingdee.K3.SCM.App; +using System.Data; + +namespace Demo.DynamicForm.PRD +{ + /// <summary> + /// 鎻掍欢绀轰緥锛氬紩鍏ラ攢鍞嚭搴撳崟锛屽缓绔嬩笌閿�鍞鍗曠殑鍏宠仈 + /// </summary> + /// <remarks> + /// 瑕佹眰锛� + /// 1. 闇�瑕佸紩鍏ュ崟鎹綋鐨勬簮鍗曠被鍨嬨�佹簮鍗曠紪鍙峰瓧娈� + /// 2. 鏈彃浠舵寕鍦ㄩ攢鍞嚭搴撳崟鐨勬彁浜ゆ搷浣滀笂 + /// 鍑哄簱鍏宠仈閿�鍞鍗� + /// 鏆傛椂涓嶄娇鐢� + /// </remarks> + [Description("鏃ヨ鍒掔敤鏂欐竻鍗曚笅鎺ㄥ悗锛屽缓绔嬬洿鎺ヨ皟鎷ㄥ崟涓庢棩璁″垝鐢ㄦ枡娓呭崟鍏宠仈鍏崇郴")] + [HotUpdate] + public class Pro_DayPlanPushZJDB2 : AbstractOperationServicePlugIn + { + public override void OnPreparePropertys(PreparePropertysEventArgs e) + { + base.OnPreparePropertys(e); + e.FieldKeys.Add("FSrcBillType"); + e.FieldKeys.Add("FSrcBillNo"); + e.FieldKeys.Add("FID"); + e.FieldKeys.Add("FTreeEntity_FEntryID"); + e.FieldKeys.Add("FBillNo"); + e.FieldKeys.Add("FBFLowId"); + e.FieldKeys.Add("FMaterialId"); + e.FieldKeys.Add("FBaseUnitQty"); + e.FieldKeys.Add("FBaseJoinQty"); + e.FieldKeys.Add("FDayPlanBillNo"); + } + private const string POFormId = "Paez_Sc_DayPlanPPBomBill"; + public List<string> FentryIdList = new List<string>(); + public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e) + { + base.BeforeExecuteOperationTransaction(e); + HashSet<string> poBillNos = new HashSet<string>(); + Entity entity = this.BusinessInfo.GetEntity("FBillEntry");//鑾峰彇鏄庣粏淇℃伅 + Entity linkEntry = this.BusinessInfo.GetEntity("FBillEntry_Link"); + Field fldSrcFormId = this.BusinessInfo.GetField("FSrcBillType"); + Field fldSrcBillNo = this.BusinessInfo.GetField("FSrcBillNo"); + // 瀵瑰崟鎹綋杩涜寰幆锛屽彇鍏宠仈鐨勬簮鍗曠紪鍙� + foreach (var billObj in e.SelectedRows) + { + DynamicObjectCollection entryRows = entity.DynamicProperty.GetValue(billObj.DataEntity) + as DynamicObjectCollection; + foreach (var entryRow in entryRows) + { + string srcFormId = ""; + string srcSrcBillNo = ""; + string FPPBOMFENTRYID = ""; + try + { + srcFormId = "Sc_DayPlanPPBomBillSub"; + srcSrcBillNo = entryRow["FDayPlanBillNo"]?.ToString(); + //string FPPBOMFID = entryRow["FDayPlanFid"]?.ToString(); + //FPPBOMFENTRYID = entryRow["FDayPlanFentryId"]?.ToString(); + } + catch (Exception) + { + } + if (string.IsNullOrWhiteSpace(srcFormId) + || string.IsNullOrWhiteSpace(srcSrcBillNo) + ) + {// 婧愬崟涓嶆槸閲囪喘璁㈠崟锛岀暐杩� + continue; + } + // 婧愬崟缂栧彿宸茬粡鐧昏锛屼笉鍐嶉噸澶嶈褰曪紝鐣ヨ繃 + if (poBillNos.Contains(srcSrcBillNo)) continue; + // Link宸茬粡璁板綍浜嗘簮鍗曚俊鎭紝鐣ヨ繃 + //DynamicObjectCollection linkRows = linkEntry.DynamicProperty.GetValue(entryRow) + // as DynamicObjectCollection; + //if (linkRows.Count > 0) continue; + bool Ret = SourceVerification(Convert.ToString(entryRow["Id"])); + if (!Ret) continue; + + poBillNos.Add(srcSrcBillNo); + } + } + if (poBillNos.Count == 0) return; + DynamicObject[] poObjs = this.LoadPurchaseOrder(poBillNos); + if (poObjs == null || poObjs.Length == 0) return; + Dictionary<string, Dictionary<string, DynamicObject>> dctAllBills = this.BuildDictionary(poObjs); + string srcTableNumber = this.GetPOEntryTableNumber(); + List<DynamicObject> allNewLinkRows = new List<DynamicObject>(); + // 寰幆鍗曟嵁浣擄紝涓哄崟鎹綋锛屽缓绔嬭捣婧愬崟鍏宠仈淇℃伅锛� + foreach (var billObj in e.SelectedRows) + { + DynamicObjectCollection entryRows = entity.DynamicProperty.GetValue(billObj.DataEntity) + as DynamicObjectCollection; + foreach (var entryRow in entryRows) + { + + string srcFormId = "Sc_DayPlanPPBomBillSub"; + string srcSrcBillNo = entryRow["FDayPlanBillNo"]?.ToString(); + //string FPPBOMFID = entryRow["FDayPlanFid"]?.ToString(); + //string FPPBOMFENTRYID = entryRow["FDayPlanFentryId"]?.ToString(); + + if (string.IsNullOrWhiteSpace(srcFormId) + || string.IsNullOrWhiteSpace(srcSrcBillNo) + ) + {// 婧愬崟涓嶆槸閿�鍞鍗曪紝鐣ヨ繃 + continue; + } + Dictionary<string, DynamicObject> dctOneBill = null; + if (dctAllBills.TryGetValue(srcSrcBillNo, out dctOneBill) == false) continue; + DynamicObject materialObj = entryRow["MaterialId"] as DynamicObject; + if (materialObj == null) continue; + string materialNumber = Convert.ToString(materialObj["number"]); + DynamicObject srcRow = null; + if (dctOneBill.TryGetValue(materialNumber, out srcRow) == false) continue; + // Link宸茬粡璁板綍浜嗘簮鍗曚俊鎭紝鐣ヨ繃 + bool Ret = SourceVerification(Convert.ToString(entryRow["Id"])); + if (!Ret) continue; + + //璁板綍婧愬崟ID 鐢ㄤ簬鏇存柊 + if (!FentryIdList.Contains(entryRow["Id"]?.ToString())) + FentryIdList.Add(entryRow["Id"]?.ToString()); + + DynamicObjectCollection linkRows = linkEntry.DynamicProperty.GetValue(entryRow) + as DynamicObjectCollection; + + DynamicObject linkRow = new DynamicObject(linkEntry.DynamicObjectType); + linkRow["STableName"] = srcTableNumber; + this.FillLinkRow(srcRow, entryRow, linkRow); + linkRows.Add(linkRow); + allNewLinkRows.Add(linkRow); + } + } + // 涓烘柊寤虹殑婧愬崟鍏宠仈淇℃伅锛岃缃唴鐮� + IDBService dbService = ServiceHelper.GetService<IDBService>(); + dbService.AutoSetPrimaryKey(this.Context, allNewLinkRows.ToArray(), linkEntry.DynamicObjectType); + } + + // public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) + // { + // base.AfterExecuteOperationTransaction(e); + // string FentryId = string.Join(",", FentryIdList.ToArray()); + // List<string> sqlList = new List<string>(); + // string sql = string.Format(@"/*dialect*/ + // update a set FBASEQTY = FQTY + // from T_STK_STKTRANSFERINENTRY_LK a + // join T_STK_STKTRANSFERINENTRY b on a.FENTRYID = b.FENTRYID + // where + // --a.FSTABLENAME = 'T_PRD_PPBOMENTRY' and + // a.FENTRYID in ({0})", FentryId); + // sqlList.Add(sql); + // sql = string.Format(@"/*dialect*/update T_STK_STKTRANSFERINENTRY_R + //set FSrcBillTypeId = 'PRD_PPBOM',FSRCBILLNO=b.FPPBOMBILLNO + //,FTRANSRESERVELINK=1 + //from T_STK_STKTRANSFERINENTRY_R a + //join T_STK_STKTRANSFERINENTRY b on a.FENTRYID=b.FENTRYID + //where a.FENTRYID in({0})", FentryId); + // sqlList.Add(sql); + // DBServiceHelper.ExecuteBatch(Context, sqlList); + // //DBServiceHelper.Execute(Context, sql); + // } + + + /// <summary> + /// 鍔犺浇鐩稿叧鐨勯攢鍞鍗曟暟鎹� + /// </summary> + /// <param name="poBillNos"></param> + /// <returns></returns> + private DynamicObject[] LoadPurchaseOrder(HashSet<string> poBillNos) + { + IViewService viewService = ServiceHelper.GetService<IViewService>(); + string formId = "Paez_Sc_DayPlanPPBomBill"; + + // 鎸囧畾闇�瑕佸姞杞界殑閿�鍞鍗曞瓧娈� + List<SelectorItemInfo> fields = new List<SelectorItemInfo>(); + fields.Add(new SelectorItemInfo("FID")); // 鍗曟嵁涓婚敭 + fields.Add(new SelectorItemInfo("FEntity_FEntryID")); // 鍗曟嵁浣撲富閿� + fields.Add(new SelectorItemInfo("FBillNo")); // 鍗曟嵁缂栧彿 + fields.Add(new SelectorItemInfo("FBFLowId")); // 涓氬姟娴佺▼ + fields.Add(new SelectorItemInfo("FHMaterSubID")); // 鐗╂枡 + fields.Add(new SelectorItemInfo("FHQtyMust"));//搴斿彂鏁伴噺 + fields.Add(new SelectorItemInfo("FSelTranslateQty"));//璋冩嫧鏁伴噺 + fields.Add(new SelectorItemInfo("FBFLOWID")); // + + // 鎸囧畾杩囨护鏉′欢 + string filter = string.Format(" FBillNo IN ('{0}') ", string.Join("','", poBillNos)); + OQLFilter ofilter = OQLFilter.CreateHeadEntityFilter(filter); + var objs = viewService.Load(this.Context, formId, fields, ofilter); + return objs; + } + /// <summary> + /// 鎶婃棩璁″垝鐢ㄦ枡娓呭崟 鍗曟嵁浣撹鏋勫缓涓哄瓧鍏革細Dictionary(鍗曟嵁缂栧彿, Dictionary(鐗╂枡缂栫爜, 婧愬崟琛�)); + /// </summary> + /// <param name="poObjs"></param> + /// <returns></returns> + private Dictionary<string, Dictionary<string, DynamicObject>> BuildDictionary(DynamicObject[] poObjs) + { + Dictionary<string, Dictionary<string, DynamicObject>> dctAllBills = + new Dictionary<string, Dictionary<string, DynamicObject>>(); + foreach (var poObj in poObjs) + { + string billNo = Convert.ToString(poObj["BillNo"]); + Dictionary<string, DynamicObject> dctOneBill = new Dictionary<string, DynamicObject>(); + DynamicObjectCollection entryRows = poObj["FEntity"] as DynamicObjectCollection; + foreach (var entryRow in entryRows) + { + DynamicObject materialObj = entryRow["FHMaterSubID"] as DynamicObject; + if (materialObj == null) continue; + string materialNumber = Convert.ToString(materialObj["number"]); + dctOneBill[materialNumber] = entryRow; + } + dctAllBills.Add(billNo, dctOneBill); + } + return dctAllBills; + } + /// <summary> + /// 鑾峰彇閿�鍞鍗曞叧鑱斾富瀹炰綋琛ㄦ牸缂栫爜 + /// </summary> + /// <returns></returns> + private string GetPOEntryTableNumber() + { + IBusinessFlowService bfMetaService = ServiceHelper.GetService<IBusinessFlowService>(); + var tableDefine = bfMetaService.LoadTableDefine(this.Context, POFormId, "FEntity"); + return tableDefine.TableNumber; + } + /// <summary> + /// 濉啓婧愬崟淇℃伅 + /// </summary> + /// <param name="srcRow">婧愬崟琛�</param> + /// <param name="toRow">鐩爣鍗曡</param> + /// <param name="linkRow">鍏宠仈琛�</param> + private void FillLinkRow(DynamicObject srcRow, DynamicObject toRow, DynamicObject linkRow) + { + ////鍓╀綑璋冩嫧鏁伴噺 + //decimal remainQty = DBServiceHelper.ExecuteScalar<decimal>(Context, $"select FMustQty -isnull(FSELTRANSLATEQTY,0) from T_PRD_PPBOMENTRY t1 left join T_PRD_PPBOMENTRY_Q t2 on t1.FENTRYID = t2.FENTRYID where t1.FENTRYID={toRow["FPPBOMFENTRYID"]?.ToString()}", 0); + DataTable dt = DBServiceHelper.ExecuteDataSet(Context, $"select * from T_STK_STKTRANSFERINENTRY where FENTRYID={toRow[0]}").Tables[0]; + linkRow["FlowId"] = ""; + linkRow["FlowLineId"] = 0; + linkRow["RuleId"] = "DayPlanPPBomBill-STK_TransferDirect"; + linkRow["SBillId"] = dt.Rows[0]["FDAYPLANFID"].ToString(); + linkRow["SId"] = dt.Rows[0]["FDAYPLANFENTRYID"].ToString(); + // 鍘熷鎼哄甫閲� + linkRow["BaseQtyOld"] = Convert.ToDecimal(dt.Rows[0]["FBASEQTY"]);//鍓╀綑璋冩嫧鏁伴噺 + linkRow["BaseQty"] = Convert.ToDecimal(dt.Rows[0]["FBASEQTY"]); //鏈闇�瑕佽皟鎷ㄦ暟閲� + } + + /// <summary> + /// 楠岃瘉鏄惁鐢熸垚杩囩敓浜х敤鏂欐竻鍗曞搴旂殑婧愬崟 + /// </summary> + /// <returns></returns> + public bool SourceVerification(string FTID) + { + string sql = $" select count(*) from T_BF_INSTANCEENTRY where FSTABLENAME= 'T_PRD_PPBOMENTRY' and FTTABLENAME = 'Sc_DayPlanPPBomBillSub' and FTID = '{FTID}'"; + int count = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0); + if (count == 0) + return true; + else + return false; + } + + } +} diff --git a/src/BLL/Demo.BillView/PRD/Pro_MaterialRequisitionAuditDayPlan.cs b/src/BLL/Demo.BillView/PRD/Pro_MaterialRequisitionAuditDayPlan.cs index 96dcb69..9688acf 100644 --- a/src/BLL/Demo.BillView/PRD/Pro_MaterialRequisitionAuditDayPlan.cs +++ b/src/BLL/Demo.BillView/PRD/Pro_MaterialRequisitionAuditDayPlan.cs @@ -42,6 +42,8 @@ e.FieldKeys.Add("FBaseJoinQty"); } private const string POFormId = "PRD_PPBOM"; + public List<string> FentryIdList = new List<string>(); + public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e) { base.BeforeExecuteOperationTransaction(e); @@ -59,12 +61,12 @@ { string srcFormId = ""; string srcSrcBillNo = ""; + string FPPBOMFENTRYID = ""; try { srcFormId = "PRD_PPBOM"; - srcSrcBillNo = fldSrcBillNo.DynamicProperty.GetValue<string>(entryRow); - srcSrcBillNo = DBServiceHelper.ExecuteScalar<string>(Context, $" select distinct FPPBOMBILLNO from T_PRD_PICKMTRLDATA where FSRCBILLNO = '{srcSrcBillNo}' ", srcSrcBillNo); - + srcSrcBillNo = entryRow["PPBOMBILLNO"].ToString(); + FPPBOMFENTRYID = entryRow["PPBomEntryId"].ToString(); } catch (Exception) { @@ -100,10 +102,13 @@ as DynamicObjectCollection; foreach (var entryRow in entryRows) { - string srcSrcBillNo = fldSrcBillNo.DynamicProperty.GetValue<string>(entryRow); - string srcFormId = "PRD_PPBOM"; - srcSrcBillNo = DBServiceHelper.ExecuteScalar<string>(Context, $" select distinct FPPBOMBILLNO from T_PRD_PICKMTRLDATA where FSRCBILLNO = '{srcSrcBillNo}' ", srcSrcBillNo); + string srcFormId = ""; + string srcSrcBillNo = ""; + string FPPBOMFENTRYID = ""; + srcFormId = "PRD_PPBOM"; + srcSrcBillNo = entryRow["PPBOMBILLNO"].ToString(); + FPPBOMFENTRYID = entryRow["PPBomEntryId"].ToString(); if (string.IsNullOrWhiteSpace(srcFormId) || string.IsNullOrWhiteSpace(srcSrcBillNo) @@ -122,21 +127,50 @@ bool Ret = SourceVerification(Convert.ToString(entryRow["Id"])); if (!Ret) continue; + //璁板綍婧愬崟ID 鐢ㄤ簬鏇存柊 + if (!FentryIdList.Contains(entryRow["Id"]?.ToString())) + FentryIdList.Add(entryRow["Id"]?.ToString()); + DynamicObjectCollection linkRows = linkEntry.DynamicProperty.GetValue(entryRow) as DynamicObjectCollection; - linkRows.Clear(); + //linkRows.Clear(); DynamicObject linkRow = new DynamicObject(linkEntry.DynamicObjectType); linkRow["STableName"] = srcTableNumber; this.FillLinkRow(srcRow, entryRow, linkRow); linkRows.Add(linkRow); allNewLinkRows.Add(linkRow); } - } + } // 涓烘柊寤虹殑婧愬崟鍏宠仈淇℃伅锛岃缃唴鐮� IDBService dbService = ServiceHelper.GetService<IDBService>(); dbService.AutoSetPrimaryKey(this.Context, allNewLinkRows.ToArray(), linkEntry.DynamicObjectType); } - + /// <summary> + /// 鏂板鎿嶄綔鍚� sql鏇存柊鏁伴噺 浠ュ強 婧愬崟淇℃伅琛� + /// </summary> + /// <param name="e"></param> + public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) + { + base.AfterExecuteOperationTransaction(e); + string FentryId = string.Join(",", FentryIdList.ToArray()); + List<string> sqlList = new List<string>(); + string sql = string.Format(@"/*dialect*/ + update a set FBASEACTUALQTY = b.FBASEACTUALQTY + from T_PRD_PICKMTRLDATA_LK a + join T_PRD_PICKMTRLDATA b on a.FENTRYID = b.FENTRYID + where a.FSTABLENAME = 'T_PRD_PPBOMENTRY' and a.FENTRYID in ({0})", FentryId); + sqlList.Add(sql); + sql = string.Format(@"/*dialect*/ + update T_PRD_PICKMTRLDATA set + FSrcBillType = 'PRD_PPBOM', + FSRCENTRYID=FPPBomEntryId, + FSrcBillNo=FPPBOMBILLNO + where FENTRYID in ({0}) + ", FentryId); + sqlList.Add(sql); + DBServiceHelper.ExecuteBatch(Context, sqlList); + //DBServiceHelper.Execute(Context, sql); + } /// <summary> /// 鍔犺浇鐩稿叧鐨勯攢鍞鍗曟暟鎹� /// </summary> @@ -208,16 +242,17 @@ /// <param name="linkRow">鍏宠仈琛�</param> private void FillLinkRow(DynamicObject srcRow, DynamicObject toRow, DynamicObject linkRow) { + //鍓╀綑棰嗘枡鏁伴噺 + decimal remainQty = DBServiceHelper.ExecuteScalar<decimal>(Context, $"select FMustQty -isnull(FSelPickedQty,0) from T_PRD_PPBOMENTRY t1 left join T_PRD_PPBOMENTRY_Q t2 on t1.FENTRYID = t2.FENTRYID where t1.FENTRYID={toRow["PPBomEntryId"]?.ToString()}", 0); linkRow["FlowId"] = srcRow["BFLowId_Id"]; linkRow["FlowLineId"] = 0; linkRow["RuleId"] = "PRD_PPBOM2PICKMTRL_NORMAL"; linkRow["SBillId"] = ((DynamicObject)srcRow.Parent)[0]; + linkRow["STableId"] = ((DynamicObject)srcRow.Parent)[0]; linkRow["SId"] = srcRow[0]; - // 鍘熷鎼哄甫閲� - decimal baseUnitQty = Convert.ToDecimal(srcRow["BaseNeedQty"]);//鐢ㄦ枡娓呭崟鍗曚綅鏁伴噺 - decimal joinUnitQty = Convert.ToDecimal(srcRow["BasePickedQty"]);//鐢ㄦ枡娓呭崟鍗曚綅棰嗘枡鏁伴噺 - linkRow["BaseActualQtyOld"] = baseUnitQty - joinUnitQty; - linkRow["BaseActualQty"] = toRow["BASEACTUALQTY"]; //鍩烘湰鍗曚綅瀹炲彂鏁伴噺 + linkRow["BaseActualQtyOld"] = remainQty; + linkRow["BaseActualQty"] = toRow["ACTUALQTY"]; //鍩烘湰鍗曚綅瀹炲彂鏁伴噺 + } /// <summary> @@ -226,7 +261,7 @@ /// <returns></returns> public bool SourceVerification(string FTID) { - string sql = $" select count(*) from T_BF_INSTANCEENTRY where FSTABLENAME= 'T_PRD_PPBOMENTRY' and FTID = '{FTID}'"; + string sql = $" select count(*) from T_BF_INSTANCEENTRY where FSTABLENAME= 'T_PRD_PPBOMENTRY' and FTTABLENAME = 'T_PRD_PICKMTRLDATA' and FTID = '{FTID}'"; int count = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0); if (count == 0) return true; diff --git a/src/BLL/Demo.BillView/PRD/Pro_ZJDBFSH.cs b/src/BLL/Demo.BillView/PRD/Pro_ZJDBFSH.cs new file mode 100644 index 0000000..83ee091 --- /dev/null +++ b/src/BLL/Demo.BillView/PRD/Pro_ZJDBFSH.cs @@ -0,0 +1,67 @@ +锘縰sing System; +using System.Collections.Generic; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.Contracts; +using Kingdee.BOS.App; +using Kingdee.BOS.Core.Metadata.FieldElement; +using System.ComponentModel; +using Kingdee.BOS.ServiceHelper; +using Kingdee.K3.SCM.App; + +namespace Demo.DynamicForm.PRD +{ + + [Description("[鐩存帴璋冩嫧鍗�-鍙嶅鏍竇鎸夐挳鍔熻兘]")] + [HotUpdate] + public class Pro_ZJDBFSH : AbstractOperationServicePlugIn + { + public override void OnPreparePropertys(PreparePropertysEventArgs e) + { + base.OnPreparePropertys(e); + e.FieldKeys.Add("FSrcBillType"); + e.FieldKeys.Add("FSrcBillNo"); + e.FieldKeys.Add("FID"); + e.FieldKeys.Add("FTreeEntity_FEntryID"); + e.FieldKeys.Add("FBillNo"); + e.FieldKeys.Add("FBFLowId"); + e.FieldKeys.Add("FMaterialId"); + e.FieldKeys.Add("FBaseUnitQty"); + e.FieldKeys.Add("FBaseJoinQty"); + e.FieldKeys.Add("FDayPlanBillNo"); + e.FieldKeys.Add("FDayPlanFentryId"); + } + /// <summary> + ///鍙嶅鏍� 鍙嶆洿鏂版棩璁″垝鐢ㄦ枡娓呭崟璋冩嫧鏁伴噺 + /// </summary> + /// <param name="e"></param> + public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) + { + base.AfterExecuteOperationTransaction(e); + List<string> sqlList = new List<string>(); + string sql = ""; + //淇濆瓨鏃舵洿鏂扮敓浜х敤鏂欐竻鍗曡〃鏄庣粏璋冩嫧鏁伴噺 + Entity entity = this.BusinessInfo.GetEntity("FBillEntry");//鑾峰彇鏄庣粏淇℃伅 + foreach (var billObj in e.SelectedRows) + { + DynamicObjectCollection entryRows = entity.DynamicProperty.GetValue(billObj.DataEntity) + as DynamicObjectCollection; + foreach (var entryRow in entryRows) + { + //鐢熶骇鐢ㄦ枡娓呭崟涓虹┖鏃� + if (Convert.ToString(entryRow["FDayPlanBillNo"]) == "") + continue; + string fentryId = entryRow["FDayPlanFentryId"].ToString(); + decimal FBaseQty = Convert.ToDecimal(entryRow["BaseQty"]); + sql = string.Format($"/*dialect*/update Sc_DayPlanPPBomBillSub set FTranslateQty -= {FBaseQty} where FEntryID = { fentryId} "); + sqlList.Add(sql); + } + } + DBServiceHelper.ExecuteBatch(Context, sqlList); + } + } +} diff --git a/src/BLL/Demo.BillView/PRD/Pro_ZJDBSH.cs b/src/BLL/Demo.BillView/PRD/Pro_ZJDBSH.cs new file mode 100644 index 0000000..a5cbd51 --- /dev/null +++ b/src/BLL/Demo.BillView/PRD/Pro_ZJDBSH.cs @@ -0,0 +1,66 @@ +锘縰sing System; +using System.Collections.Generic; +using Kingdee.BOS.Util; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Core.Metadata.EntityElement; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.Contracts; +using Kingdee.BOS.App; +using Kingdee.BOS.Core.Metadata.FieldElement; +using System.ComponentModel; +using Kingdee.BOS.ServiceHelper; +using Kingdee.K3.SCM.App; + +namespace Demo.DynamicForm.PRD +{ + + [Description("[鐩存帴璋冩嫧鍗�-瀹℃牳]鎸夐挳鍔熻兘]")] + [HotUpdate] + public class Pro_ZJDBSH : AbstractOperationServicePlugIn + { + public override void OnPreparePropertys(PreparePropertysEventArgs e) + { + base.OnPreparePropertys(e); + e.FieldKeys.Add("FSrcBillType"); + e.FieldKeys.Add("FSrcBillNo"); + e.FieldKeys.Add("FID"); + e.FieldKeys.Add("FTreeEntity_FEntryID"); + e.FieldKeys.Add("FBillNo"); + e.FieldKeys.Add("FBFLowId"); + e.FieldKeys.Add("FMaterialId"); + e.FieldKeys.Add("FBaseUnitQty"); + e.FieldKeys.Add("FBaseJoinQty"); + e.FieldKeys.Add("FDayPlanBillNo"); + e.FieldKeys.Add("FDayPlanFentryId"); + } + /// <summary> + ///鍙嶅鏍� 鍙嶆洿鏂版棩璁″垝鐢ㄦ枡娓呭崟璋冩嫧鏁伴噺 + /// </summary> + /// <param name="e"></param> + public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) + { + base.AfterExecuteOperationTransaction(e); + List<string> sqlList = new List<string>(); + string sql = ""; + //瀹℃牳鏃舵洿鏂扮敓浜х敤鏂欐竻鍗曡〃鏄庣粏璋冩嫧鏁伴噺 + Entity entity = this.BusinessInfo.GetEntity("FBillEntry");//鑾峰彇鏄庣粏淇℃伅 + foreach (var billObj in e.SelectedRows) + { + DynamicObjectCollection entryRows = entity.DynamicProperty.GetValue(billObj.DataEntity) + as DynamicObjectCollection; + foreach (var entryRow in entryRows) + { + //鐢熶骇鐢ㄦ枡娓呭崟涓虹┖鏃� + if (Convert.ToString(entryRow["FDayPlanBillNo"]) == "") + continue; + string fentryId = entryRow["FDayPlanFentryId"].ToString(); + sql = string.Format($"/*dialect*/update Sc_DayPlanPPBomBillSub set FTranslateQty = (select sum(FBaseQty) from T_STK_STKTRANSFERINENTRY where FDayPlanFentryId = { fentryId})where FEntryID = { fentryId} "); + sqlList.Add(sql); + } + } + DBServiceHelper.ExecuteBatch(Context, sqlList); + } + } +} -- Gitblit v1.9.1