src/BLL/Demo.BillView/Demo.BillView.csproj
@@ -46,6 +46,9 @@ <SpecificVersion>False</SpecificVersion> <HintPath>C:\Users\14027\Desktop\最新版bin文件3.16\Kingdee.BOS.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.App"> <HintPath>..\..\..\..\..\办公\K3Cloud\WebSite\bin\Kingdee.BOS.App.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.App.Core, Version=7.6.2003.9, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>C:\Users\14027\Desktop\最新版bin文件3.16\Kingdee.BOS.App.Core.dll</HintPath> @@ -219,13 +222,16 @@ <Compile Include="PRD\ProTardinessDetails.cs" /> <Compile Include="PRD\ProCompleteAnalysisMateriel.cs" /> <Compile Include="PRD\ProCompleteAnalysisDetails.cs" /> <Compile Include="PRD\Pro_DayPlan.cs" /> <Compile Include="PRD\Pro_DayPlanCheckSelectMenu.cs" /> <Compile Include="PRD\Pro_DayPlanPushSCHB.cs" /> <Compile Include="PRD\Pro_PPBomSubmit.cs" /> <Compile Include="PRD\Pro_SCHBFSH.cs" /> <Compile Include="PRD\Pro_SCLLFSH.cs" /> <Compile Include="PRD\Pro_SCHBSH.cs" /> <Compile Include="PRD\Pro_SCLLSH.cs" /> <Compile Include="PRD\Pro_RjhylqdDatachange.cs" /> <Compile Include="PRD\Pro_PPBomSave.cs" /> <Compile Include="PRD\Pro_WorkBillPlatformXNQT.cs" /> <Compile Include="PRD\Pro_ShowParameter.cs" /> <Compile Include="PRD\Pro_ZJDBSH.cs" /> src/BLL/Demo.BillView/PRD/Pro_DayPlan.cs
New file @@ -0,0 +1,150 @@ using Kingdee.BOS; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel; using Kingdee.BOS.Core.List; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Util; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Demo.BillView.PRD { [Description("[日计划工单] 表单插件"), HotUpdate] public class Pro_DayPlan : AbstractBillPlugIn { public override void BarItemClick(BarItemClickEventArgs e) { base.BarItemClick(e); try { if (e.BarItemKey.ToUpper() == "TBDAYPLANMENU") { string pageId = Guid.NewGuid().ToString(); ListShowParameter showParameter = new ListShowParameter(); showParameter.FormId = "Paez_Sc_WorkBillAutoSortBill"; 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) { DynamicObjectDataRow datarow = (DynamicObjectDataRow)listSelectedRowCollection[0].DataRow; this.View.Model.SetValue("FMATERIALID", datarow.DynamicObject["FHMaterID_Id"].ToString()); this.View.Model.SetValue("FPROORDERNO", datarow.DynamicObject["FSCOrderNo"].ToString()); this.View.Model.SetValue("FQty", datarow.DynamicObject["FHOrderNeedQty"].ToString()); this.View.Model.SetValue("FDayPlanFID", datarow.DynamicObject["FID"].ToString()); this.View.Model.SetValue("FDayPlanFentryID", datarow.DynamicObject["t1_FENTRYID"].ToString()); this.View.Model.SetValue("FSourceBillNo", datarow.DynamicObject["FBillNo"].ToString()); this.View.Model.SetValue("FSourceBillType", datarow.DynamicObject["FBillTypeID"].ToString()); } } }); } } catch (Exception ex) { this.View.ShowErrMessage(ex.Message.ToString()); } } public override void EntryBarItemClick(BarItemClickEventArgs e) { base.EntryBarItemClick(e); if (e.BarItemKey.ToUpper() == "TBROWCLOSE") { int[] selectedIndexsR = this.View.GetControl<EntryGrid>("FEntity").GetSelectedRows(); //单据体数据 Array.Sort(selectedIndexsR); DynamicObjectCollection selectedRowsDy = this.Model.DataObject["FEntity"] as DynamicObjectCollection; //选中行数据 DynamicObject selectedRow; StringBuilder result = new StringBuilder(); List<string> sqlList = new List<string>(); foreach (var item in selectedIndexsR) { selectedRow = selectedRowsDy[item]; string sql = string.Format(@" /*dialect*/ select isnull(c.FRealQty,0)FRealQty from Sc_WorkBillSortBillSub a left join T_PRD_MORPTENTRY b on a.FEntryID = b.FDAYPLANFID left join T_PRD_INSTOCKENTRY c on b.FENTRYID = c.FSrcEntryId where a.FEntryID in ({0})", selectedRow["Id"]); decimal FRealQty = DBServiceHelper.ExecuteScalar<decimal>(Context, sql, 0); if (FRealQty == 0) { result.Append($"分录行:{selectedRow["Seq"]},日计划明细未下推生成生产入库单\r\n"); continue; } sql = string.Format(@" /*dialect*/ select count(*)res from Sc_WorkBillSortBillSub a left join Sc_DayPlanPPBomBillMain b on a.FEntryID = b.FDayPlanFID left join Sc_DayPlanPPBomBillSub c on b.FID = c.FID where a.FEntryID in ({0}) and FISSUETYPE in (1, 2) and FDwyl * {1} < FPickedQty", selectedRow["Id"], FRealQty); decimal Count = DBServiceHelper.ExecuteScalar<decimal>(Context, sql, 0); if (Count > 0) { result.Append($"分录行:{selectedRow["Seq"]},下游领料单的已领料数小于入库的标准用量\r\n"); continue; } sql = string.Format(@" /*dialect*/ update Sc_WorkBillSortBillSub set FInStockCount = {0}, FNotInStockCount = FHQty - {0}, FHEntryCloseDate = getdate(), FHCloseTypeSub = 1 where FEntryID={1}", FRealQty, selectedRow["Id"]); sqlList.Add(sql); } DBServiceHelper.ExecuteBatch(Context, sqlList); this.View.Refresh(); if (string.IsNullOrEmpty(result.ToString())) this.View.ShowMessage("操作成功"); else this.View.ShowErrMessage(result.ToString()); } else if (e.BarItemKey.ToUpper() == "TBROWCANCELCLOSE") { int[] selectedIndexsR = this.View.GetControl<EntryGrid>("FEntity").GetSelectedRows(); //单据体数据 Array.Sort(selectedIndexsR); DynamicObjectCollection selectedRowsDy = this.Model.DataObject["FEntity"] as DynamicObjectCollection; //选中行数据 DynamicObject selectedRow; List<string> sqlList = new List<string>(); foreach (var item in selectedIndexsR) { selectedRow = selectedRowsDy[item]; string sql = string.Format(@" /*dialect*/ update Sc_WorkBillSortBillSub set FInStockCount = 0, FNotInStockCount =0, FHEntryCloseDate = null, FHCloseTypeSub = 0 where FEntryID={0}", selectedRow["Id"]); sqlList.Add(sql); } DBServiceHelper.ExecuteBatch(Context, sqlList); this.View.Refresh(); this.View.ShowMessage("操作成功"); } } } } src/BLL/Demo.BillView/PRD/Pro_DayPlanPushSCHB.cs
@@ -145,7 +145,7 @@ } } // 为新建的源单关联信息,设置内码 IDBService dbService = ServiceHelper.GetService<IDBService>(); IDBService dbService =Kingdee.K3.SCM.App.ServiceHelper.GetService<IDBService>(); dbService.AutoSetPrimaryKey(this.Context, allNewLinkRows.ToArray(), linkEntry.DynamicObjectType); } @@ -188,7 +188,7 @@ /// <returns></returns> private DynamicObject[] LoadPurchaseOrder(HashSet<string> poBillNos) { IViewService viewService = ServiceHelper.GetService<IViewService>(); IViewService viewService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IViewService>(); string formId = "PRD_MO"; // 指定需要加载的用料清单字段 @@ -238,7 +238,7 @@ /// <returns></returns> private string GetPOEntryTableNumber() { IBusinessFlowService bfMetaService = ServiceHelper.GetService<IBusinessFlowService>(); IBusinessFlowService bfMetaService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IBusinessFlowService>(); var tableDefine = bfMetaService.LoadTableDefine(this.Context, POFormId, "FTreeEntity"); return tableDefine.TableNumber; } src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB.cs
@@ -141,7 +141,7 @@ } } // 为新建的源单关联信息,设置内码 IDBService dbService = ServiceHelper.GetService<IDBService>(); IDBService dbService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IDBService>(); dbService.AutoSetPrimaryKey(this.Context, allNewLinkRows.ToArray(), linkEntry.DynamicObjectType); } @@ -186,7 +186,7 @@ /// <returns></returns> private DynamicObject[] LoadPurchaseOrder(HashSet<string> poBillNos) { IViewService viewService = ServiceHelper.GetService<IViewService>(); IViewService viewService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IViewService>(); string formId = "PRD_PPBOM"; // 指定需要加载的用料清单字段 @@ -239,7 +239,7 @@ /// <returns></returns> private string GetPOEntryTableNumber() { IBusinessFlowService bfMetaService = ServiceHelper.GetService<IBusinessFlowService>(); IBusinessFlowService bfMetaService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IBusinessFlowService>(); var tableDefine = bfMetaService.LoadTableDefine(this.Context, POFormId, "FEntity"); return tableDefine.TableNumber; } src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB2.cs
@@ -143,7 +143,7 @@ } } // 为新建的源单关联信息,设置内码 IDBService dbService = ServiceHelper.GetService<IDBService>(); IDBService dbService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IDBService>(); dbService.AutoSetPrimaryKey(this.Context, allNewLinkRows.ToArray(), linkEntry.DynamicObjectType); } @@ -179,7 +179,7 @@ /// <returns></returns> private DynamicObject[] LoadPurchaseOrder(HashSet<string> poBillNos) { IViewService viewService = ServiceHelper.GetService<IViewService>(); IViewService viewService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IViewService>(); string formId = "Paez_Sc_DayPlanPPBomBill"; // 指定需要加载的销售订单字段 @@ -230,7 +230,7 @@ /// <returns></returns> private string GetPOEntryTableNumber() { IBusinessFlowService bfMetaService = ServiceHelper.GetService<IBusinessFlowService>(); IBusinessFlowService bfMetaService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IBusinessFlowService>(); var tableDefine = bfMetaService.LoadTableDefine(this.Context, POFormId, "FEntity"); return tableDefine.TableNumber; } src/BLL/Demo.BillView/PRD/Pro_MaterialRequisitionAuditDayPlan.cs
@@ -145,7 +145,7 @@ } } // 为新建的源单关联信息,设置内码 IDBService dbService = ServiceHelper.GetService<IDBService>(); IDBService dbService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IDBService>(); dbService.AutoSetPrimaryKey(this.Context, allNewLinkRows.ToArray(), linkEntry.DynamicObjectType); } /// <summary> @@ -185,7 +185,7 @@ /// <returns></returns> private DynamicObject[] LoadPurchaseOrder(HashSet<string> poBillNos) { IViewService viewService = ServiceHelper.GetService<IViewService>(); IViewService viewService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IViewService>(); string formId = "PRD_PPBOM"; // 指定需要加载的销售订单字段 @@ -237,7 +237,7 @@ /// <returns></returns> private string GetPOEntryTableNumber() { IBusinessFlowService bfMetaService = ServiceHelper.GetService<IBusinessFlowService>(); IBusinessFlowService bfMetaService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IBusinessFlowService>(); var tableDefine = bfMetaService.LoadTableDefine(this.Context, POFormId, "FEntity"); return tableDefine.TableNumber; } src/BLL/Demo.BillView/PRD/Pro_PPBomSave.cs
New file @@ -0,0 +1,266 @@ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using Kingdee.BOS.Core.Bill; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using Newtonsoft.Json.Linq; using ZD.Cloud.Logger; using ZD.Cloud.WebApi; using Demo.Model.Model; using System.Diagnostics; using System.Linq; using Kingdee.BOS.Core.Bill.PlugIn.Args; namespace Demo.BillView.PRD { /// <summary> /// 生产用料清单保存 刷新日计划用料清单数据 /// </summary> [Description("生产用料清单保存表单插件")] [Kingdee.BOS.Util.HotUpdate] public class Pro_PPBomSave : AbstractBillPlugIn { CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); public override void AfterSave(AfterSaveEventArgs e) { base.AfterSave(e); try { string a; string sql = ""; //var FID = this.View.Model.GetPKValue(); var fBillNo = this.View.Model.GetValue("FBILLNO"); Stopwatch sw = new Stopwatch(); sw.Start();//开始计时 LogHelper.Info("生成日计划用料清单准备数据"); //锁定的日计划不生成 try { //变更 先去删除调整过的数据 sql = $"/*dialect*/ exec deleteDayPlanPpbomBillSub '{fBillNo}'"; DBServiceHelper.Execute(Context, sql); 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,t4.FNumerator,t4.FDenominator,convert(decimal(18,2),(t4.FNumerator/t4.FDenominator) *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,t4.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,Tc.FIssueType,t4.FMaterialType,t12.FEntryID as FDayPlanPpbomFEntryId 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 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 Sc_DayPlanPPBomBillSub t12 on t9.FID=t12.FID and T4.FENTRYID=t12.FHPPBomEntryID LEFT join T_ORG_Organizations t10 on t2.FHPRDORGID = t10.FORGID LEFT join T_ENG_WORKCENTER t11 on t2.FHSOURCEID = t11.FID WHERE T4.FMustQty>0 and T3.FBILLNO='{0}' ", fBillNo); LogHelper.Info("生成日计划用料清单准备数据sql:" + sql); DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql); DataTable dt = ds.Tables[0]; List<DayPlanMaterial> DayPlanMaterial = new List<DayPlanMaterial>(); if (dt.Rows.Count > 0) { foreach (DataRow dr in dt.Rows) { 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(), FDayPlanPpbomFEntryId = dr["FDayPlanPpbomFEntryId"].ToString(), }); } LogHelper.Info($"日计划用料清单,数据准备完成,保存到Model实体,总行数:{DayPlanMaterial.Count},耗时:" + sw.Elapsed); var fidList = DayPlanMaterial.Select(x => x.FEntryID).Distinct().ToList(); int i = 1; JArray Fentity = new JArray(); foreach (var item in fidList) { var _DayPlanMaterial = DayPlanMaterial.Where(x => x.FEntryID == item).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(); 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("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);// if (!string.IsNullOrEmpty(_item.FDayPlanPpbomFEntryId)) ModelEnty.Add("FEntryId", _item.FDayPlanPpbomFEntryId);// Entry.Add(ModelEnty); } 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(), ["SubSystemId"] = "", ["IsVerifyBaseDataField"] = "false", ["IsDeleteEntry"] = "false", ["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<List<Dictionary<string, string>>>(Success); List<string> ls = new List<string>(); 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); //JArray array = JArray.Parse(m); //for (int mm = 0; mm < array.Count; mm++) //{ // JObject b = JObject.Parse(array[mm].ToString()); // var id = b["ID"].ToString(); //} } if (saveIsSuc != "TRUE") { LogHelper.Error("日计划用料清单列表生成失败:" + jsonRoot.ToString()); this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString()); } Fentity = new JArray(); } i++; } } sw.Stop();//结束计时 LogHelper.Info("生成日计划用料清单运行总时长:" + sw.Elapsed); } catch (Exception ex) { LogHelper.Error("日计划用料清单+" + ex.Message.ToString()); } } catch (Exception ex) { throw ex; } } public override void BeforeSave(BeforeSaveEventArgs e) { base.BeforeSave(e); var fBillNo = this.View.Model.GetValue("FBILLNO"); string sql = string.Format(@" /*dialect*/ select T9.FBILLNO,t12.FSEQ,t4.FMATERIALID,t6.FNUMBER ,convert(decimal(18,2),(t4.FNumerator/t4.FDenominator) *t1.FHQTY) FQty ,FPickedQty 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 JOIN T_BD_MATERIAL T6 ON T4.FMATERIALID=T6.FMATERIALID LEFT JOIN Sc_DayPlanPPBomBillMain T9 ON T1.FEntryID=T9.FDayPlanFID LEFT join Sc_DayPlanPPBomBillSub t12 on t9.FID=t12.FID and T4.FENTRYID=t12.FHPPBomEntryID WHERE T4.FMustQty>0 and T3.FBILLNO='{0}' and convert(decimal(18,2),(t4.FNumerator/t4.FDenominator) *t1.FHQTY)< t12.FPickedQty", fBillNo); DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; string result = "保存失败,修改后将要更新的日计划用料清单数据低于领料或调拨数量"; if (dt.Rows.Count > 0) { foreach (DataRow dr in dt.Rows) { result += $"日计划用料清单单号:{dr["FBILLNO"].ToString()},分录行号:{dr["FSEQ"]}对应的物料编码{dr["FNUMBER"]}"; } this.View.ShowErrMessage(result); } } } } src/BLL/Demo.BillView/PRD/Pro_PPBomSubmit.cs
New file @@ -0,0 +1,292 @@ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using Kingdee.BOS.Core.Bill; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using Newtonsoft.Json.Linq; using ZD.Cloud.Logger; using ZD.Cloud.WebApi; using Demo.Model.Model; using System.Diagnostics; using System.Linq; using Kingdee.BOS.Core.Bill.PlugIn.Args; using Kingdee.BOS.Core.DynamicForm.PlugIn; namespace Demo.BillView.PRD { /// <summary> /// 生产用料清单提交 刷新日计划用料清单数据 /// </summary> [Description("生产用料清单提交服务插件")] [Kingdee.BOS.Util.HotUpdate] public class Pro_PPBomSubmit : AbstractOperationServicePlugIn { CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); Dictionary<string, string> dictionary = new Dictionary<string, string>(); public override void OnPrepareOperationServiceOption(OnPrepareOperationServiceEventArgs e) { base.OnPrepareOperationServiceOption(e); //为了在BeginOperationTransaction里检查数据抛出异常时 //只回滚当前单据的事务,这里设置为不支持批量事务,这样BOS会 //循环为每一张单据创建事务调用操作 e.SupportTransaction = true; e.SurportBatchTransaction = false; } public override void OnPreparePropertys(PreparePropertysEventArgs e) { base.OnPreparePropertys(e); e.FieldKeys.Add("FID"); e.FieldKeys.Add("FBillNo"); } public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) { base.AfterExecuteOperationTransaction(e); try { string sql = ""; var fBillNo = ""; foreach (var select in e.SelectedRows) { fBillNo = select["Billno"].ToString(); if (dictionary.ContainsKey(fBillNo)) continue; //变更 先去删除调整过的数据 sql = $"/*dialect*/ exec deleteDayPlanPpbomBillSub '{fBillNo}'"; DBServiceHelper.Execute(Context, sql); 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,t4.FNumerator,t4.FDenominator,convert(decimal(18,2),(t4.FNumerator/t4.FDenominator) *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,t4.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,Tc.FIssueType,t4.FMaterialType,t12.FEntryID as FDayPlanPpbomFEntryId 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 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 Sc_DayPlanPPBomBillSub t12 on t9.FID=t12.FID and T4.FENTRYID=t12.FHPPBomEntryID LEFT join T_ORG_Organizations t10 on t2.FHPRDORGID = t10.FORGID LEFT join T_ENG_WORKCENTER t11 on t2.FHSOURCEID = t11.FID WHERE T4.FMustQty>0 and T3.FBILLNO='{0}' ", fBillNo); LogHelper.Info("生成日计划用料清单准备数据sql:" + sql); DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql); DataTable dt = ds.Tables[0]; List<DayPlanMaterial> DayPlanMaterial = new List<DayPlanMaterial>(); if (dt.Rows.Count > 0) { foreach (DataRow dr in dt.Rows) { 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(), FDayPlanPpbomFEntryId = dr["FDayPlanPpbomFEntryId"].ToString(), }); } var fidList = DayPlanMaterial.Select(x => x.FEntryID).Distinct().ToList(); int i = 1; JArray Fentity = new JArray(); foreach (var item in fidList) { var _DayPlanMaterial = DayPlanMaterial.Where(x => x.FEntryID == item).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(); 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("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);// if (!string.IsNullOrEmpty(_item.FDayPlanPpbomFEntryId)) ModelEnty.Add("FEntryId", _item.FDayPlanPpbomFEntryId);// Entry.Add(ModelEnty); } model.Add("FEntity", Entry); Fentity.Add(model); if ((i >= 20 || i == fidList.Count) && (i % 20 == 0 || i == fidList.Count)) { JObject jsonRoot = new JObject() { ["Creator"] = "", ["NeedUpDateFields"] = new JArray(), ["NeedReturnFields"] = new JArray(), ["SubSystemId"] = "", ["IsVerifyBaseDataField"] = "false", ["IsDeleteEntry"] = "false", ["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<List<Dictionary<string, string>>>(Success); List<string> ls = new List<string>(); 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()); //this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString()); } Fentity = new JArray(); } i++; } } } foreach (var item in dictionary) { ResultMessage.dataError(this.OperationResult.OperateResult, item.Key, item.Value); } } catch (Exception ex) { LogHelper.Error("日计划用料清单列表生成失败:" + ex.Message.ToString()); } } public override void BeginOperationTransaction(BeginOperationTransactionArgs e) { base.BeginOperationTransaction(e); try { var fBillNo = ""; var sql = ""; string result = "保存失败,提交后将要更新的日计划用料清单数量少于领料或调拨数量,"; foreach (var select in e.DataEntitys) { fBillNo = select["Billno"].ToString(); sql = string.Format(@" /*dialect*/ select T9.FBILLNO,t12.FSEQ,t4.FMATERIALID,t6.FNUMBER ,convert(decimal(18,2),(t4.FNumerator/t4.FDenominator) *t1.FHQTY) FQty ,FPickedQty 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 JOIN T_BD_MATERIAL T6 ON T4.FMATERIALID=T6.FMATERIALID LEFT JOIN Sc_DayPlanPPBomBillMain T9 ON T1.FEntryID=T9.FDayPlanFID LEFT join Sc_DayPlanPPBomBillSub t12 on t9.FID=t12.FID and T4.FENTRYID=t12.FHPPBomEntryID WHERE T4.FMustQty>0 and T3.FBILLNO='{0}' and convert(decimal(18,2),(t4.FNumerator/t4.FDenominator) *t1.FHQTY)< t12.FPickedQty", fBillNo); DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; if (dt.Rows.Count > 0) { e.CancelOperation = true; foreach (DataRow dr in dt.Rows) { result += $"日计划用料清单单号:{dr["FBILLNO"].ToString()},分录行号:{dr["FSEQ"]},物料编码{dr["FNUMBER"]}"; } dictionary.Add(fBillNo, result); } } } catch (Exception ex) { LogHelper.Error("日计划用料清单列表生成失败:" + ex.Message.ToString()); } } public static class ResultMessage {/// <summary> /// 修改提示信息 /// </summary> /// <param name="operateResult"></param> /// <param name="billno"></param> public static void dataError(OperateResultCollection operateResult, string billno, string message) { OperateResult operate = operateResult.Where(n => n.Number == billno).First(); operate.Message = message; operate.SuccessStatus = false; operate.MessageType = MessageType.FatalError; } } } } src/BLL/Demo.BillView/PRD/Pro_SCLLSH.cs
@@ -34,6 +34,7 @@ e.FieldKeys.Add("FBaseJoinQty"); e.FieldKeys.Add("FDayPlanBillNo"); e.FieldKeys.Add("FDayPlanFentryId"); e.FieldKeys.Add("FBaseActualQty"); } /// <summary> ///反审核 反更新日计划用料清单领料数量 @@ -52,12 +53,11 @@ 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 FPickedQty = (select sum(FBaseActualQty) from T_PRD_PICKMTRLDATA where FDayPlanFentryId = {fentryId})where FEntryID = {fentryId} "); LogHelper.Info("领料单的日计划用料清单ID:" + fentryId); if (fentryId == "0") continue; sql = string.Format($"/*dialect*/update Sc_DayPlanPPBomBillSub set FPickedQty = FPickedQty + {Convert.ToDecimal(entryRow["BaseActualQty"])} where FEntryID = {fentryId} "); //LogHelper.Info("领料单的日计划用料清单ID:" + fentryId); sqlList.Add(sql); } } src/BLL/Demo.BillView/PRD/Pro_TlPush.cs
@@ -138,7 +138,7 @@ ["IsDeleteEntry"] = "false", ["SubSystemId"] = "", ["IsVerifyBaseDataField"] = "false", // ["IsAutoSubmitAndAudit"] = true,//自动调用提交和审核功能 // ["IsAutoSubmitAndAudit"] = true,//自动调用提交和审核功能 ["Model"] = model }; src/BLL/Demo.BillView/PRD/Pro_TlPushAudit.cs
@@ -124,7 +124,7 @@ } } // 为新建的源单关联信息,设置内码 IDBService dbService = ServiceHelper.GetService<IDBService>(); IDBService dbService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IDBService>(); dbService.AutoSetPrimaryKey(this.Context, allNewLinkRows.ToArray(), linkEntry.DynamicObjectType); } @@ -135,7 +135,7 @@ /// <returns></returns> private DynamicObject[] LoadPurchaseOrder(HashSet<string> poBillNos) { IViewService viewService = ServiceHelper.GetService<IViewService>(); IViewService viewService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IViewService>(); string formId = "paez_PODemandPlan"; // 指定需要加载的销售订单字段 @@ -185,7 +185,7 @@ /// <returns></returns> private string GetPOEntryTableNumber() { IBusinessFlowService bfMetaService = ServiceHelper.GetService<IBusinessFlowService>(); IBusinessFlowService bfMetaService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IBusinessFlowService>(); var tableDefine = bfMetaService.LoadTableDefine(this.Context, POFormId, "FEntity"); return tableDefine.TableNumber; } src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatform.cs
@@ -1037,7 +1037,6 @@ { Stopwatch sw = new Stopwatch(); sw.Start();//开始计时 LogHelper.Info("齐套分析开始准备数据:" + sw.Elapsed); //清空齐套临时表 DBServiceHelper.Execute(Context, "/*dialect*/ delete JIT_MOMaterReadysBill "); //更新状态 @@ -1109,9 +1108,9 @@ 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) @@ -1127,7 +1126,6 @@ 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;//齐套数量 @@ -1848,7 +1846,7 @@ 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),(FNumerator/FDenominator) *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 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 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 @@ -1862,10 +1860,16 @@ 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 WHERE t1.FHQTY>0 and t9.FID not in( select distinct FID from Sc_DayPlanPPBomBillSub WHERE FTranslateQty >0 or FPickedQty >0 ) left join T_BD_DEPARTMENT td on t3.FWORKSHOPID=td.FDEPTID WHERE t1.FEntryID not in ( select distinct FDAYPLANFID from Sc_DayPlanPPBomBillMain where FID IN ( select distinct FDAYPLANFID from T_PRD_PICKMTRLDATA) ) and T4.FMustQty>0 -- ( -- select FDayPlanFID FROM Sc_DayPlanPPBomBillMain WHERE FID IN ( select distinct FID from Sc_DayPlanPPBomBillSub WHERE FTranslateQty >0 or FPickedQty >0) -- ) " ); LogHelper.Info("生成日计划用料清单准备数据sql:" + sql); @@ -1909,7 +1913,8 @@ FIssueType = dr["FIssueType"].ToString(), FMaterialType = dr["FMaterialType"].ToString(), FDayPlanFSEQ = dr["FDayPlanFSEQ"].ToString(), FDayPlanFBILLNO = dr["FDayPlanFBILLNO"].ToString() FDayPlanFBILLNO = dr["FDayPlanFBILLNO"].ToString(), FWORKSHOPID = dr["FWORKSHOPID"].ToString() }); } LogHelper.Info($"日计划用料清单,数据准备完成,保存到Model实体,总行数:{DayPlanMaterial.Count},耗时:" + sw.Elapsed); @@ -1959,7 +1964,8 @@ ModelEnty.Add("FMOID", _item.FMOID);// ModelEnty.Add("FISSUETYPE", _item.FIssueType);// ModelEnty.Add("FMaterialType", _item.FMaterialType);// // ModelEnty.Add("FSEQ", FSEQ);// ModelEnty.Add("FWORKSHOPID", new JObject() { ["Fnumber"] = _item.FWORKSHOPID });// Entry.Add(ModelEnty); FSEQ++; @@ -1997,13 +2003,7 @@ 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); //JArray array = JArray.Parse(m); //for (int mm = 0; mm < array.Count; mm++) //{ // JObject b = JObject.Parse(array[mm].ToString()); // var id = b["ID"].ToString(); //} } if (saveIsSuc != "TRUE") { @@ -2137,7 +2137,7 @@ _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); //LogHelper.Info("[提料计划开始]当前物料明细无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId); break; } @@ -2161,7 +2161,7 @@ //{ foreach (var Purchase in _PurchaseInventory) { LogHelper.Info("采购订单号测试:" + Purchase.FBillNo); //LogHelper.Info("采购订单号测试:" + Purchase.FBillNo); //LogHelper.Info("物料:" + Purchase.FMATERIALID + ",采购订单数量:" + Purchase.FQTY); if (Purchase.FQTY >= NeedQty) { src/BLL/Demo.BillView/PRD/Pro_ZJDBSH.cs
@@ -12,10 +12,15 @@ using System.ComponentModel; using Kingdee.BOS.ServiceHelper; using Kingdee.K3.SCM.App; using System.Diagnostics; using ZD.Cloud.Logger; using System.Data; using Kingdee.BOS; using Kingdee.BOS.App.Data; namespace Demo.DynamicForm.PRD { [Description("[直接调拨单-审核]按钮功能]")] [HotUpdate] public class Pro_ZJDBSH : AbstractOperationServicePlugIn @@ -34,9 +39,41 @@ e.FieldKeys.Add("FBaseJoinQty"); e.FieldKeys.Add("FDayPlanBillNo"); e.FieldKeys.Add("FDayPlanFentryId"); e.FieldKeys.Add("FBaseQty"); } ///// <summary> /////反审核 反更新日计划用料清单调拨数量 ///// </summary> ///// <param name="e"></param> //public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) //{ // base.AfterExecuteOperationTransaction(e); // Stopwatch sw = new Stopwatch(); // sw.Start();//开始计时 // 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 + = {Convert.ToDecimal(entryRow["FBaseQty"])} where FEntryID = { fentryId} "); // sqlList.Add(sql); // } // } // DBServiceHelper.ExecuteBatch(Context, sqlList); // sw.Stop();//结束计时 // LogHelper.Info("生成日计划用料清单运行总时长:" + sw.Elapsed); //} /// <summary> ///反审核 反更新日计划用料清单调拨数量 ///反审核 反更新日计划用料清单调拨数量 /// </summary> /// <param name="e"></param> public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) @@ -44,23 +81,54 @@ 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} "); //if (fentryId == "0") // continue; sql = string.Format($"/*dialect*/update Sc_DayPlanPPBomBillSub set FTranslateQty = FTranslateQty+{Convert.ToDecimal(entryRow["BaseQty"])} where FEntryID = { fentryId} "); sqlList.Add(sql); } } DBServiceHelper.ExecuteBatch(Context, sqlList); } private void BatchUpdate() { // 定义一个DataTable:存储待更新的数据 DataTable dt = new DataTable(); dt.TableName = "JD_t_Cust_Entry100001"; var idCol = dt.Columns.Add("FID"); idCol.DataType = typeof(long); var billNoCol = dt.Columns.Add("FBillNo"); billNoCol.DataType = typeof(string); // 灌入测试数据 dt.BeginLoadData(); // 执行此方法,可以提升灌入数据性能 for (int i = 1; i <= 10; i++) { dt.LoadDataRow(new object[] { i, i.ToString() }, true); } dt.EndLoadData(); // 灌入数据结束 // 准备批量更新服务参数 // tableName : 待更新的物理表格名 // dt : 待更新的数据 BatchSqlParam batchUpdateParam = new BatchSqlParam("JD_t_Cust_Entry100001", dt); // 设置匹配字段:即DataTable中的数据,与物理表格以那个字段进行匹配 // 匹配字段可以添加多个 // columnName: DataTable中的列名 // fieldName : 物料表格中匹配的字段名 batchUpdateParam.AddWhereExpression("FID", KDDbType.Int64, "FID"); // 设置待更新的字段 // columnName: DataTable中的列名 // fieldName : 对应的物料表格字段名 batchUpdateParam.AddSetExpression("FBillNo", KDDbType.String, "FBillNo"); // 执行批量更新 DBUtils.BatchUpdate(this.Context, batchUpdateParam); } } } src/BLL/Demo.BillView/PRD/SAL_SaleOrderSplitBill.cs
New file @@ -0,0 +1,840 @@ using Demo.Common.Untility; using Demo.Model.Log; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Util; using Kingdee.BOS.WebApi.Client; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using ZD.Cloud.Logger; using ZD.Cloud.WebApi; namespace Demo.OperationService.SCM.SAL_SaleOrder { [HotUpdate] [Description("销售订单审核拆单")] public class SAL_SaleOrderSplitBill : AbstractOperationServicePlugIn { private void CreateQkForm(AfterExecuteOperationTransaction e) { var client = KingdeeClient.ApiLogin(Context); foreach (var data in e.DataEntitys) { var billNo = data.GetValue<string>("BillNo"); LogService.WriteAsync("SAL_SaleOrderSplitBill=>"+billNo); if (data.GetValue<bool>("FIsSplitBill") || data.GetValue<string>("RedBule") == "1") continue; //LogService.WriteAsync($"BillNo={billNo},FIsSplitBill={data.GetValue<bool>("FIsSplitBill")},FISLAST={data.GetValue<bool>("FISLAST")},RedBule={data.GetValue<string>("RedBule")}"); var id = data.GetValue<int>("Id"); //如果单据已经是_A,在审核时候直接跳过执行 if (billNo.EndsWith("_A")) continue; var sql = $"Exec V_FilterSaleOrder @id={id}"; var table = DBServiceHelper.ExecuteDataSet(this.Context, sql).Tables[0]; LogService.WriteAsync(table); if (table.Rows.Count == 0) continue; string sql3 = $"select top 1 F_YQN_ZDR,FNOTE from T_SAL_ORDER WHERE FID={id}"; var table3 = DBServiceHelper.ExecuteDataSet(this.Context, sql3).Tables[0]; var model = new { FBillTypeID = new { FNUMBER = Context.DBId == "5ffd9795291fb7" ? "XSDD01_SYS" : "XSDD101_SYS" }, FDate = DateTime.Now, FSaleOrgId = new { FNumber = "100" }, FCustId = new { FNumber = "AR07000000022" }, FReceiveId = new { FNumber = "AR07000000022" }, FSaleGroupId = new { FNumber = "100002" }, FSalerId = new { FNumber = "D080190016" }, //FLinkPhone= "13757508209", FSettleId = new { FNumber = "AR07000000022" }, FChargeId = new { FNumber = "AR07000000022" }, F_zzzz_Assistant = new { FNumber = "087" }, FPAYCUSTOMER = new { FNUMBER = "AR07000000022" }, FISGUARANTEE = true, FBillNo = $"{billNo}_A", F_YQN_ZDR = table3.Rows.Count == 0 ? string.Empty : table3.Rows[0][0],//制单人 FNOTE = table3.Rows.Count == 0 ? string.Empty : table3.Rows[0][1],//整单摘要 FSaleOrderEntry = table.AsEnumerable().Select(row => new { FSUBMATERIALNUMBER = new { FNumber = Context.DBId == "5ffd9795291fb7" ? "CSCS0001" : "F9900000000" }, FRowType = "Standard", FDeliveryDate = DateTime.Now, FStockOrgId = new { FNumber = "100" }, FSettleOrgIds = new { FNumber = "100" }, FSupplyOrgId = new { FNumber = "100" }, FOwnerTypeId = "BD_OwnerOrg", FOwnerId = new { FNumber = "100" }, FReserveType = "1", FOUTLMTUNIT = "SAL", FMaterialId = new { FNumber = row["MaterialNo"] }, F_YQN_DYXH = "CS001", FSOSTOCKID = new { FNumber = row["FStockNo"] }, FLot = new { FNumber = row["LotNo"] }, FLOT_TEXT=row["FLotName"], FQty = row["Qty"] }) }; LogService.WriteAsync(model); var restlt = client.Save("SAL_SaleOrder", JsonConvert.SerializeObject(new { Model = model })); LogService.WriteAsync(restlt); var response = JsonConvert.DeserializeObject<KingdeeResponse2>(restlt); if (response.Result.ResponseStatus.IsSuccess) { var ids = JsonConvert.SerializeObject(new { Ids = response.Result.ResponseStatus.SuccessEntitys[0].Id }); LogService.WriteAsync(ids); var r = client.Submit("SAL_SaleOrder", ids); LogService.WriteAsync(r); r = client.Audit("SAL_SaleOrder", ids); } foreach (var item in this.OperationResult.OperateResult) { if (item.PKValue?.ToString() == id.ToString()) { item.Message += response.Result.ResponseStatus.IsSuccess ? $"生成墙咔领料单据{billNo}_A" : $"{billNo}生成强卡领料单据失败:{JsonConvert.SerializeObject(response.Result.ResponseStatus.Errors.Select(x => x.Message + ";"))}"; } } } } public override void OnPreparePropertys(PreparePropertysEventArgs e) { base.OnPreparePropertys(e); #region 字段信息加载 e.FieldKeys.Add("FOrderEntryPlan"); e.FieldKeys.Add("FIsSplitBill"); e.FieldKeys.Add("FOverOrgTransDirect"); e.FieldKeys.Add("FExchangeTypeId"); e.FieldKeys.Add("FIsIncludedTax"); e.FieldKeys.Add("FSettleModeId"); e.FieldKeys.Add("FIsPriceExcludeTax"); e.FieldKeys.Add("FRecConditionId"); e.FieldKeys.Add("FSettleCurrId"); e.FieldKeys.Add("FIsSplitBill"); e.FieldKeys.Add("F_zzzz_CheckBox2"); e.FieldKeys.Add("F_zzzz_Text7"); e.FieldKeys.Add("FCollectionTime"); e.FieldKeys.Add("F_zzzz_Assistant"); e.FieldKeys.Add("FDifferenceAmount"); e.FieldKeys.Add("F_zzzz_Text8"); e.FieldKeys.Add("FLCLSituation"); e.FieldKeys.Add("FCustInvioce"); e.FieldKeys.Add("FPAYCUSTOMER"); e.FieldKeys.Add("FWEBANKACCOUNT"); e.FieldKeys.Add("FHEADLOCID"); e.FieldKeys.Add("FIsMobile"); e.FieldKeys.Add("FNote"); e.FieldKeys.Add("FISINIT"); e.FieldKeys.Add("FChargeId"); e.FieldKeys.Add("FReceiveContact"); e.FieldKeys.Add("FSettleId"); e.FieldKeys.Add("FReceiveAddress"); e.FieldKeys.Add("FLinkPhone"); e.FieldKeys.Add("FSalerId"); e.FieldKeys.Add("FSaleGroupId"); e.FieldKeys.Add("FSaleDeptId"); e.FieldKeys.Add("FReceiveId"); e.FieldKeys.Add("FCOLLECTBALANCEAMOUNT"); e.FieldKeys.Add("FCustId"); e.FieldKeys.Add("FSaleOrgId"); e.FieldKeys.Add("FDate"); e.FieldKeys.Add("FBillTypeID"); e.FieldKeys.Add("FRowType"); e.FieldKeys.Add("FMaterialId"); e.FieldKeys.Add("FSUBMATERIALNUMBER"); e.FieldKeys.Add("FMapId"); e.FieldKeys.Add("FUnitID"); e.FieldKeys.Add("FQty"); e.FieldKeys.Add("FPrice"); e.FieldKeys.Add("FTaxPrice"); e.FieldKeys.Add("F_zzzz_Decimal4"); e.FieldKeys.Add("FLot"); e.FieldKeys.Add("FIsFree"); e.FieldKeys.Add("FEntryTaxRate"); e.FieldKeys.Add("FDeliveryDate"); e.FieldKeys.Add("FStockOrgId"); e.FieldKeys.Add("FSettleOrgIds"); e.FieldKeys.Add("FSupplyOrgId"); e.FieldKeys.Add("FOwnerTypeId"); e.FieldKeys.Add("FOwnerId"); e.FieldKeys.Add("FEntryNote"); e.FieldKeys.Add("FReserveType"); e.FieldKeys.Add("F_zzzz_Text9"); e.FieldKeys.Add("FPriceBaseQty"); e.FieldKeys.Add("FStockUnitID"); e.FieldKeys.Add("FStockQty"); e.FieldKeys.Add("FStockBaseQty"); e.FieldKeys.Add("FOUTLMTUNIT"); e.FieldKeys.Add("FOutLmtUnitID"); e.FieldKeys.Add("FISMRP"); e.FieldKeys.Add("FLOCKSTOCK"); e.FieldKeys.Add("F_zzzz_Combo1"); e.FieldKeys.Add("F_zzzz_CheckBox"); e.FieldKeys.Add("F_zzzz_Text"); e.FieldKeys.Add("F_zzzz_Assistant2"); e.FieldKeys.Add("F_zzzz_Decimal7"); e.FieldKeys.Add("F_zzzz_Decimal8"); e.FieldKeys.Add("FSpecialOffer"); e.FieldKeys.Add("FMESScheduling"); e.FieldKeys.Add("FMESScheduling"); e.FieldKeys.Add("FIsUnsalablePrd"); e.FieldKeys.Add("FPlanProdDate"); e.FieldKeys.Add("FQitao"); e.FieldKeys.Add("FOrderEntryPlan"); e.FieldKeys.Add("FDetailLocId"); e.FieldKeys.Add("FDetailLocAddress"); e.FieldKeys.Add("FPlanDate"); e.FieldKeys.Add("FTransportLeadTime"); e.FieldKeys.Add("FPlanQty"); e.FieldKeys.Add("FCOLLECTIONNO"); e.FieldKeys.Add("FOtherARBillNo"); e.FieldKeys.Add("F_YQN_ZDR"); e.FieldKeys.Add("FCreatorId"); e.FieldKeys.Add("FISGuarantee"); e.FieldKeys.Add("F_zzzz_DDBZ"); e.FieldKeys.Add("F_YQN_CSHDDBH"); e.FieldKeys.Add("FCreatorId"); e.FieldKeys.Add("FModifierId"); e.FieldKeys.Add("F_YQN_DYXH"); e.FieldKeys.Add("F_YQN_GYS"); e.FieldKeys.Add("F_YQN_CGY1"); e.FieldKeys.Add("FFIRSTPRINTTIME"); e.FieldKeys.Add("F_ZZZZ_PRINTTIMES"); e.FieldKeys.Add("F_zzzz_PrintDateTime"); e.FieldKeys.Add("FFirstTime"); e.FieldKeys.Add("FLastTime"); e.FieldKeys.Add("FPrintCount"); e.FieldKeys.Add("FIsNeedCheck"); e.FieldKeys.Add("FISCASHSALE"); e.FieldKeys.Add("F_ZZZZ_QIAO"); e.FieldKeys.Add("F_ZZZZ_OEM"); e.FieldKeys.Add("FPushPrdPlan"); e.FieldKeys.Add("FLotTxt"); e.FieldKeys.Add("F_zzzz_Decimal"); e.FieldKeys.Add("F_zzzz_Decimal1"); e.FieldKeys.Add("F_zzzz_Assistant3"); e.FieldKeys.Add("F_zzzz_Assistant4"); e.FieldKeys.Add("F_zzzz_Assistant6"); e.FieldKeys.Add("F_zzzz_Assistant7"); e.FieldKeys.Add("F_zzzz_Assistant8"); e.FieldKeys.Add("F_zzzz_Assistant9"); e.FieldKeys.Add("FLossParam"); e.FieldKeys.Add("F_zzzz_Decimal5"); e.FieldKeys.Add("F_zzzz_Text1"); e.FieldKeys.Add("F_zzzz_Assistant1"); e.FieldKeys.Add("FSOStockId"); e.FieldKeys.Add("F_zzzz_FLBZ"); e.FieldKeys.Add("F_zzzz_WBBZ"); e.FieldKeys.Add("FISLAST"); e.FieldKeys.Add("F_zzzz_CQFS"); e.FieldKeys.Add("F_zzzz_MLKD"); e.FieldKeys.Add("F_zzzz_BGD"); e.FieldKeys.Add("F_zzzz_BKD"); e.FieldKeys.Add("F_zzzz_DDSL"); e.FieldKeys.Add("F_CUT_TIME"); e.FieldKeys.Add("F_BZ_TIME"); e.FieldKeys.Add("F_loss_backup"); e.FieldKeys.Add("FIsCustomerProvide"); e.FieldKeys.Add("FISREFRESHLOT"); e.FieldKeys.Add("F_zzzz_WBBZ1"); e.FieldKeys.Add("FSaleQty"); e.FieldKeys.Add("FTotalAmount"); e.FieldKeys.Add("FLotEmptyDate"); e.FieldKeys.Add("FSaleOutLot"); e.FieldKeys.Add("FIsClose"); e.FieldKeys.Add("FIsStatistics"); e.FieldKeys.Add("F_zzzz_CheckBox1"); e.FieldKeys.Add("F_zzzz_Text3"); e.FieldKeys.Add("F_zzzz_Text4"); e.FieldKeys.Add("F_zzzz_Text5"); e.FieldKeys.Add("F_zzzz_Text10"); e.FieldKeys.Add("F_zzzz_Text11"); e.FieldKeys.Add("F_zzzz_Integer"); e.FieldKeys.Add("FParentDateTime"); e.FieldKeys.Add("FChildrenDatetime"); e.FieldKeys.Add("FSplitSBillNo"); e.FieldKeys.Add("FIsNeedAllSend"); e.FieldKeys.Add("F_XSDD_PGBZ"); e.FieldKeys.Add("F_XSDD_PGSJ"); #endregion } public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) { base.AfterExecuteOperationTransaction(e); CreateQkForm(e); var srcDatas = e.SelectedRows; //// 使用webapi引用组件Kingdee.BOS.WebApi.Client.dll,进行单据处理 //K3CloudApiClient client = new K3CloudApiClient("http://localhost/k3Cloud/"); ////var loginResult = client.ValidateLogin("5fe40ecc0b7bf2", "Administrator", "888888", 2052);//本地环境 //var loginResult = client.ValidateLogin("5f56ea565892f4", "Administrator", "ycy123", 2052);//正式环境 //var resultType = JObject.Parse(loginResult)["LoginResultType"].Value<int>(); ////登录结果类型等于1,代表登录成功 //if (resultType == 1) //{ CloudClient client = new CloudClient("http://localhost/k3Cloud/"); WriteLog.SAL_SaleOrderSplitBill("订单审核拆单", "API登录成功"); Dictionary<string, string> dictionary = new Dictionary<string, string>(); foreach (var srcData in srcDatas) { //string billno = srcData["BillNo"].ToString();//单据编号 //string UnAuditResult = client.UnAudit("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":['" + billno + "'],\"Ids\":\"\",\"InterationFlags\":\"\",\"NetworkCtrl\":\"\"}"); //JObject UnAuditResultObj = JObject.Parse(UnAuditResult); //if (UnAuditResultObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() == "TRUE") //{ // string DeleteResult = client.Delete("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":['" + billno + "'],\"Ids\":\"\",\"NetworkCtrl\":\"\"}"); //} bool curr = false; string idlist = string.Empty;//暂存单据集合 string savejsonlist = string.Empty;//暂存单据保存JSON string billno = srcData["BillNo"].ToString();//单据编号 bool IsSplitBill = bool.Parse(srcData["FIsSplitBill"].ToString());//是否拆单 if (IsSplitBill) { try { WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "符合拆单条件:" + billno); string sql = $@"/*dialect*/SELECT B.FQitao FROM dbo.T_SAL_ORDER A(NOLOCK) JOIN dbo.T_SAL_ORDERENTRY B(NOLOCK) ON B.FID = A.FID WHERE A.FBILLNO='{billno}' GROUP BY B.FQitao"; DataTable data = DBServiceHelper.ExecuteDataSet(this.Context, sql).Tables[0]; //拆单 for (int i = 0; i < data.Rows.Count; i++) { WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "进入拆单循环"); #region 拼接表头 string SplitBillNo = billno + "-" + (i + 1);//拆单单号 StringBuilder sJson = new StringBuilder(); sJson.Append("{"); sJson.Append("\"NeedUpDateFields\": [],"); sJson.Append("\"NeedReturnFields\": [],"); sJson.Append("\"IsDeleteEntry\": \"true\","); sJson.Append("\"SubSystemId\": \"\","); sJson.Append("\"IsVerifyBaseDataField\": \"true\","); sJson.Append("\"IsEntryBatchFill\": \"true\","); sJson.Append("\"ValidateFlag\": \"true\","); sJson.Append("\"NumberSearch\": \"true\","); sJson.Append("\"InterationFlags\": \"\","); sJson.Append("\"Model\": {"); sJson.Append("\"FID\": 0,"); sJson.Append("\"FBillTypeID\": {\"FNUMBER\": \"" + ((srcData["BillTypeID"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FDate\": \"" + (srcData["Date"]?.ToString() ?? "") + "\","); sJson.Append("\"FSaleOrgId\": {\"FNumber\": \"" + ((srcData["SaleOrgId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FCustId\": {\"FNumber\": \"" + ((srcData["CustId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FBillNo\": \"" + SplitBillNo + "\","); sJson.Append("\"FCOLLECTBALANCEAMOUNT\": " + (srcData["COLLECTBALANCEAMOUNT"]?.ToString() ?? "0") + ","); sJson.Append("\"FReceiveId\": {\"FNumber\": \"" + ((srcData["ReceiveId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FSaleDeptId\": {\"FNumber\": \"" + ((srcData["SaleDeptId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FSaleGroupId\": {\"FNumber\": \"" + ((srcData["SaleGroupId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FSalerId\": {\"FNumber\": \"" + ((srcData["SalerId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FSettleId\": {\"FNumber\": \"" + ((srcData["SettleId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FReceiveContact\": {\"FNumber\": \"" + ((srcData["ReceiveContact"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FChargeId\": {\"FNumber\": \"" + ((srcData["ChargeId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FISINIT\": \"" + (srcData["ISINIT"]?.ToString() ?? "False") + "\","); sJson.Append("\"FISGuarantee\": \"" + (srcData["ISGuarantee"]?.ToString() ?? "false") + "\","); if ((srcData["F_YQN_ZDR"]?.ToString() ?? "") == "") { sJson.Append("\"F_YQN_ZDR\": \"" + ((srcData["CreatorId"] as DynamicObject)?["Name"].ToString() ?? "") + "\","); } else { sJson.Append("\"F_YQN_ZDR\": \"" + (srcData["F_YQN_ZDR"]?.ToString() ?? "") + "\","); } sJson.Append("\"FISCASHSALE\": \"" + (srcData["ISCASHSALE"]?.ToString() ?? "false") + "\","); sJson.Append("\"FIsNeedCheck\": \"True\","); sJson.Append("\"FISLAST\": \"False\","); sJson.Append("\"FFIRSTPRINTTIME\": \"" + (srcData["FFIRSTPRINTTIME"]?.ToString() ?? "") + "\","); sJson.Append("\"F_zzzz_PrintDateTime\": \"" + (srcData["F_zzzz_PrintDateTime"]?.ToString() ?? "") + "\","); sJson.Append("\"F_ZZZZ_PRINTTIMES\": " + (srcData["F_ZZZZ_PRINTTIMES"]?.ToString() ?? "0") + ","); sJson.Append("\"FFirstTime\": \"" + (srcData["FFirstTime"]?.ToString() ?? "") + "\","); sJson.Append("\"FLastTime\": \"" + (srcData["FLastTime"]?.ToString() ?? "") + "\","); sJson.Append("\"FPrintCount\": " + (srcData["FPrintCount"]?.ToString() ?? "0") + ","); sJson.Append("\"F_YQN_CSHDDBH\": \"" + (srcData["F_YQN_CSHDDBH"]?.ToString() ?? "") + "\","); sJson.Append("\"FCOLLECTIONNO\": \"" + (srcData["COLLECTIONNO"]?.ToString() ?? "") + "\","); sJson.Append("\"FOtherARBillNo\": \"" + (srcData["OtherARBillNo"]?.ToString() ?? "") + "\","); sJson.Append("\"FNote\": \"" + (srcData["Note"]?.ToString() ?? "") + "\","); sJson.Append("\"FIsMobile\": \"" + (srcData["IsMobile"]?.ToString() ?? "false") + "\","); sJson.Append("\"FHEADLOCID\": {\"FNUMBER\": \"" + ((srcData["HEADLOCID"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FWEBANKACCOUNT\": {\"FNUMBER\": \"" + ((srcData["WEBANKACCOUNT"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FPAYCUSTOMER\": {\"FNUMBER\": \"" + ((srcData["PAYCUSTOMER"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FCustInvioce\": {\"FNUMBER\": \"" + ((srcData["CustInvioce"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FLCLSituation\": \"" + (srcData["LCLSituation"]?.ToString() ?? "") + "\","); sJson.Append("\"F_zzzz_Text8\": \"" + (srcData["F_zzzz_Text8"]?.ToString() ?? "") + "\","); //sJson.Append("\"FDifferenceAmount\": " + (srcData["FDifferenceAmount"]?.ToString() ?? "0") + ","); sJson.Append("\"FCollectionTime\": \"" + (srcData["CollectionTime"]?.ToString() ?? "") + "\","); sJson.Append("\"F_zzzz_CheckBox2\": \"" + (srcData["F_zzzz_CheckBox2"]?.ToString() ?? "") + "\","); sJson.Append("\"FIsSplitBill\": \"false\","); sJson.Append("\"F_zzzz_Assistant\": {\"FNumber\": \"" + ((srcData["F_zzzz_Assistant"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},"); sJson.Append("\"FLinkPhone\": \"" + (srcData["FLinkPhone"]?.ToString() ?? "") + "\","); sJson.Append("\"FReceiveAddress\": \"" + (srcData["ReceiveAddress"]?.ToString() ?? "") + "\","); sJson.Append("\"F_zzzz_Text7\": \"" + (srcData["F_zzzz_Text7"]?.ToString() ?? "") + "\","); sJson.Append("\"FCreatorId\": {\"FUserID\": " + (srcData["CreatorId_Id"]?.ToString() ?? "0") + "},"); sJson.Append("\"FModifierId\": {\"FUserID\": " + (srcData["ModifierId_Id"]?.ToString() ?? "0") + "},"); sJson.Append("\"F_zzzz_FLBZ\": \"" + (srcData["F_zzzz_FLBZ"]?.ToString() ?? "") + "\","); sJson.Append("\"F_zzzz_WBBZ\": \"" + (srcData["F_zzzz_WBBZ"]?.ToString() ?? "") + "\","); sJson.Append("\"FIsStatistics\": \"True\","); string no = billno; string bno = string.Empty; if ((no.IndexOf("_") == -1 ? 99999 : no.IndexOf("_")) > (no.IndexOf("-") == -1 ? 99999 : no.IndexOf("-"))) { bno = no.Substring(0, no.IndexOf("-")); } else if ((no.IndexOf("_") == -1 ? 99999 : no.IndexOf("_")) < (no.IndexOf("-") == -1 ? 99999 : no.IndexOf("-"))) { bno = no.Substring(0, no.IndexOf("_")); } else if ((no.IndexOf("_") == -1 ? 99999 : no.IndexOf("_")) == (no.IndexOf("-") == -1 ? 99999 : no.IndexOf("-"))) { bno = no; } sJson.Append("\"FSplitSBillNo\": \""+ bno + "\","); sJson.Append("\"FIsNeedAllSend\": \"" + (srcData["FIsNeedAllSend"]?.ToString() ?? "false") + "\","); sJson.Append("\"F_zzzz_CheckBox1\": \"" + (srcData["F_zzzz_CheckBox1"]?.ToString() ?? "false") + "\","); sJson.Append("\"FIsCustomerProvide\": \"" + (srcData["FIsCustomerProvide"]?.ToString() ?? "false") + "\","); DynamicObjectCollection SaleDataFinance = srcData["SaleOrderFinance"] as DynamicObjectCollection;//财务明细 sJson.Append("\"FSaleOrderFinance\":"); sJson.Append("{"); sJson.Append("\"FSettleCurrId\": {\"FNumber\": \"" + ((SaleDataFinance[0]["SettleCurrId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FRecConditionId\": {\"FNumber\": \"" + ((SaleDataFinance[0]["RecConditionId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FIsPriceExcludeTax\": \"" + (SaleDataFinance[0]["IsPriceExcludeTax"]?.ToString() ?? "false") + "\","); sJson.Append("\"FSettleModeId\": {\"FNumber\": \"" + ((SaleDataFinance[0]["SettleModeId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FIsIncludedTax\": \"" + (SaleDataFinance[0]["IsIncludedTax"]?.ToString() ?? "false") + "\","); sJson.Append("\"FExchangeTypeId\": {\"FNumber\": \"" + ((SaleDataFinance[0]["ExchangeTypeId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FOverOrgTransDirect\": \"" + (SaleDataFinance[0]["OverOrgTransDirect"]?.ToString() ?? "false") + "\""); sJson.Append("},"); sJson.Append("\"FSaleOrderEntry\": ["); #endregion WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "表头JSON处理完"); //拆明细 DynamicObjectCollection SaleData = srcData["SaleOrderEntry"] as DynamicObjectCollection;//订单明细 string sqldtl = $@"/*dialect*/SELECT B.FSEQ FROM dbo.T_SAL_ORDER A(NOLOCK) JOIN dbo.T_SAL_ORDERENTRY B(NOLOCK) ON B.FID = A.FID WHERE A.FBILLNO='{billno}' AND B.FQitao='{data.Rows[i]["FQitao"]}'"; WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "表体拼接sql执行语句:" + sqldtl); DataTable datadtl = DBServiceHelper.ExecuteDataSet(this.Context, sqldtl).Tables[0]; for (int j = 0; j < datadtl.Rows.Count; j++) { WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "表体循环开始"); int fseq = int.Parse(datadtl.Rows[j]["FSEQ"].ToString()); sJson.Append("{"); sJson.Append("\"FRowType\": \"" + (SaleData[fseq - 1]["RowType"]?.ToString() ?? "") + "\","); sJson.Append("\"FMapId\": {\"FName\": \"" + ((SaleData[fseq - 1]["MapId"] as DynamicObject)?["Name"].ToString() ?? "") + "\"},"); //sJson.Append("\"FSUBMATERIALNUMBER\": {\"FName\": \"" + ((SaleData[fseq - 1]["SUBMATERIALNUMBER"] as DynamicObject)?["Name"].ToString() ?? "") + "\"},"); sJson.Append("\"FSUBMATERIALNUMBER\": {\"FNUMBER\": \"" + ((SaleData[fseq - 1]["SUBMATERIALNUMBER"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); //sJson.Append("\"FMaterialId\": {\"FName\": \"" + ((SaleData[fseq - 1]["MaterialId"] as DynamicObject)?["Name"].ToString() ?? "") + "\"},"); sJson.Append("\"FMaterialId\": {\"FNUMBER\": \"" + ((SaleData[fseq - 1]["MaterialId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FUnitID\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["UnitID"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); //sJson.Append("\"FPrice\": " + (SaleData[fseq - 1]["Price"]?.ToString() ?? "0") + ","); sJson.Append("\"F_zzzz_Decimal4\": " + (SaleData[fseq - 1]["F_zzzz_Decimal4"]?.ToString() ?? "0") + ","); sJson.Append("\"FIsFree\": \"" + (SaleData[fseq - 1]["IsFree"]?.ToString() ?? "false") + "\","); sJson.Append("\"FEntryTaxRate\": " + (SaleData[fseq - 1]["TaxRate"]?.ToString() ?? "0") + ","); sJson.Append("\"FDeliveryDate\": \"" + (SaleData[fseq - 1]["DeliveryDate"]?.ToString() ?? "") + "\","); sJson.Append("\"FStockOrgId\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["StockOrgId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FSettleOrgIds\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["SettleOrgId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FSupplyOrgId\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["SupplyOrgId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FOwnerTypeId\": \"" + (SaleData[fseq - 1]["OwnerTypeId"]?.ToString() ?? "") + "\","); sJson.Append("\"FOwnerId\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["OwnerId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FReserveType\": \"" + (SaleData[fseq - 1]["ReserveType"]?.ToString() ?? "") + "\","); sJson.Append("\"F_zzzz_Text9\": \" " + (SaleData[fseq - 1]["F_zzzz_Text9"]?.ToString() ?? "") + "\","); sJson.Append("\"FPriceBaseQty\": " + (SaleData[fseq - 1]["PriceBaseQty"]?.ToString() ?? "0") + ","); sJson.Append("\"FStockUnitID\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["StockUnitID"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FStockQty\": " + (SaleData[fseq - 1]["StockQty"]?.ToString() ?? "0") + ","); sJson.Append("\"FStockBaseQty\": " + (SaleData[fseq - 1]["StockBaseQty"]?.ToString() ?? "0") + ","); sJson.Append("\"F_zzzz_DDBZ\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["F_zzzz_DDBZ"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},"); sJson.Append("\"FOUTLMTUNIT\": \"" + (SaleData[fseq - 1]["OUTLMTUNIT"]?.ToString() ?? "") + "\","); sJson.Append("\"FOutLmtUnitID\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["OutLmtUnitID"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FISMRP\": \"" + (SaleData[fseq - 1]["FISMRP"]?.ToString() ?? "false") + "\","); sJson.Append("\"FLOCKSTOCK\": \"" + (SaleData[fseq - 1]["LOCKSTOCK"]?.ToString() ?? "false") + "\","); sJson.Append("\"F_zzzz_CheckBox\": \"" + (SaleData[fseq - 1]["F_zzzz_CheckBox"]?.ToString() ?? "false") + "\","); sJson.Append("\"FPushPrdPlan\": \"" + (SaleData[fseq - 1]["FPushPrdPlan"]?.ToString() ?? "false") + "\","); //sJson.Append("\"F_zzzz_CheckBox1\": \"" + (SaleData[fseq - 1]["F_zzzz_CheckBox1"]?.ToString() ?? "false") + "\","); //sJson.Append("\"F_zzzz_Combo7\": \"" + (SaleData[fseq - 1]["F_zzzz_Combo7"]?.ToString() ?? "") + "\","); sJson.Append("\"F_zzzz_BKD\": " + (SaleData[fseq - 1]["F_zzzz_BKD"]?.ToString() ?? "0") + ","); sJson.Append("\"F_zzzz_BGD\": " + (SaleData[fseq - 1]["F_zzzz_BGD"]?.ToString() ?? "0") + ","); sJson.Append("\"F_zzzz_MLKD\": " + (SaleData[fseq - 1]["F_zzzz_MLKD"]?.ToString() ?? "0") + ","); sJson.Append("\"F_zzzz_CQFS\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["F_zzzz_CQFS"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},"); sJson.Append("\"F_zzzz_DDSL\": " + (SaleData[fseq - 1]["F_zzzz_DDSL"]?.ToString() ?? "0") + ","); sJson.Append("\"F_ZZZZ_OEM\": \"" + (SaleData[fseq - 1]["F_ZZZZ_OEM"]?.ToString() ?? "") + "\","); sJson.Append("\"F_ZZZZ_QIAO\": \"" + (SaleData[fseq - 1]["F_ZZZZ_QIAO"]?.ToString() ?? "") + "\","); sJson.Append("\"F_YQN_DYXH\": \"" + (SaleData[fseq - 1]["F_YQN_DYXH"]?.ToString() ?? "") + "\","); sJson.Append("\"F_YQN_GYS\": \"" + (SaleData[fseq - 1]["F_YQN_GYS"]?.ToString() ?? "") + "\","); sJson.Append("\"F_YQN_CGY1\": \"" + (SaleData[fseq - 1]["F_YQN_CGY1"]?.ToString() ?? "") + "\","); sJson.Append("\"F_zzzz_Text\": \"" + (SaleData[fseq - 1]["F_zzzz_Text"]?.ToString() ?? "") + "\","); sJson.Append("\"F_zzzz_Assistant2\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["F_zzzz_Assistant2"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},"); sJson.Append("\"F_zzzz_Decimal7\": " + (SaleData[fseq - 1]["F_zzzz_Decimal7"]?.ToString() ?? "0") + ","); sJson.Append("\"F_zzzz_Decimal8\": " + (SaleData[fseq - 1]["F_zzzz_Decimal8"]?.ToString() ?? "0") + ","); sJson.Append("\"FSpecialOffer\": \"" + (SaleData[fseq - 1]["SpecialOffer"]?.ToString() ?? "false") + "\","); sJson.Append("\"FIsClose\": \"" + (SaleData[fseq - 1]["FIsClose"]?.ToString() ?? "A") + "\","); sJson.Append("\"FMESScheduling\": \"" + (SaleData[fseq - 1]["FMESScheduling"]?.ToString() ?? "false") + "\","); sJson.Append("\"FIsUnsalablePrd\": \"" + (SaleData[fseq - 1]["IsUnsalablePrd"]?.ToString() ?? "false") + "\","); sJson.Append("\"FPlanProdDate\": \"" + (SaleData[fseq - 1]["PlanProdDate"]?.ToString() ?? "") + "\","); sJson.Append("\"FISREFRESHLOT\": \"" + (SaleData[fseq - 1]["FISREFRESHLOT"]?.ToString() ?? "false") + "\","); sJson.Append("\"F_zzzz_Assistant3\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["F_zzzz_Assistant3"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},"); sJson.Append("\"F_zzzz_Assistant4\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["F_zzzz_Assistant4"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},"); sJson.Append("\"F_zzzz_Assistant6\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["F_zzzz_Assistant6"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},"); sJson.Append("\"F_zzzz_Assistant7\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["F_zzzz_Assistant7"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},"); sJson.Append("\"F_zzzz_Assistant8\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["F_zzzz_Assistant8"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},"); sJson.Append("\"F_zzzz_Assistant9\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["F_zzzz_Assistant9"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},"); sJson.Append("\"F_zzzz_Assistant1\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["F_zzzz_Assistant1"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},"); sJson.Append("\"F_zzzz_Decimal\": " + (SaleData[fseq - 1]["F_zzzz_Decimal"]?.ToString() ?? "0") + ","); sJson.Append("\"F_zzzz_Decimal1\": " + (SaleData[fseq - 1]["F_zzzz_Decimal1"]?.ToString() ?? "0") + ","); sJson.Append("\"F_zzzz_Decimal5\": " + (SaleData[fseq - 1]["F_zzzz_Decimal5"]?.ToString() ?? "0") + ","); sJson.Append("\"F_XSDD_PGBZ\": \"" + (SaleData[fseq - 1]["F_XSDD_PGBZ"]?.ToString() ?? "") + "\","); sJson.Append("\"F_XSDD_PGSJ\": \"" + (SaleData[fseq - 1]["F_XSDD_PGSJ"]?.ToString() ?? "") + "\","); sJson.Append("\"F_zzzz_Text1\": \"" + (SaleData[fseq - 1]["F_zzzz_Text1"]?.ToString() ?? "") + "\","); sJson.Append("\"F_zzzz_WBBZ1\": \"" + (SaleData[fseq - 1]["F_zzzz_WBBZ1"]?.ToString() ?? "") + "\","); sJson.Append("\"FSaleQty\": " + (SaleData[fseq - 1]["FSaleQty"]?.ToString() ?? "0") + ","); sJson.Append("\"FTotalAmount\": " + (SaleData[fseq - 1]["FTotalAmount"]?.ToString() ?? "0") + ","); sJson.Append("\"FLossParam\": " + (SaleData[fseq - 1]["LossParam"]?.ToString() ?? "0") + ","); sJson.Append("\"FEntryNote\": \"" + (SaleData[fseq - 1]["Note"]?.ToString() ?? "") + "\","); sJson.Append("\"F_BZ_TIME\": \"" + (SaleData[fseq - 1]["F_BZ_TIME"]?.ToString() ?? "") + "\","); sJson.Append("\"F_CUT_TIME\": \"" + (SaleData[fseq - 1]["F_CUT_TIME"]?.ToString() ?? "") + "\","); sJson.Append("\"F_loss_backup\": " + (SaleData[fseq - 1]["F_loss_backup"]?.ToString() ?? "0") + ","); sJson.Append("\"FSOStockId\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["SOStockId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); //sJson.Append("\"FQitao\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["FQitao"] as DynamicObject)?["FNumber"].ToString() ?? "") + "\"},"); sJson.Append("\"FQty\": " + (SaleData[fseq - 1]["Qty"]?.ToString() ?? "0") + ","); sJson.Append("\"FLot\": {\"FNumber\": \"" + ((SaleData[fseq - 1]["Lot"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); sJson.Append("\"FTaxPrice\": " + (SaleData[fseq - 1]["TaxPrice"]?.ToString() ?? "0") + ","); sJson.Append("\"FLotEmptyDate\": \"" + (SaleData[fseq - 1]["FLotEmptyDate"]?.ToString() ?? "") + "\","); sJson.Append("\"FSaleOutLot\": \"" + (SaleData[fseq - 1]["FSaleOutLot"]?.ToString() ?? "") + "\","); sJson.Append("\"F_zzzz_Text3\": \"" + (SaleData[fseq - 1]["F_zzzz_Text3"]?.ToString() ?? "") + "\","); sJson.Append("\"F_zzzz_Text4\": \"" + (SaleData[fseq - 1]["F_zzzz_Text4"]?.ToString() ?? "") + "\","); sJson.Append("\"F_zzzz_Text5\": \"" + (SaleData[fseq - 1]["F_zzzz_Text5"]?.ToString() ?? "") + "\","); sJson.Append("\"F_zzzz_Text10\": \"" + (SaleData[fseq - 1]["F_zzzz_Text10"]?.ToString() ?? "") + "\","); sJson.Append("\"F_zzzz_Text11\": \"" + (SaleData[fseq - 1]["F_zzzz_Text11"]?.ToString() ?? "") + "\","); sJson.Append("\"F_zzzz_Integer\": \"" + (SaleData[fseq - 1]["F_zzzz_Integer"]?.ToString() ?? "0") + "\","); sJson.Append("\"FParentDateTime\": \"" + (SaleData[fseq - 1]["FParentDateTime"]?.ToString() ?? "") + "\","); sJson.Append("\"FChildrenDatetime\": \"" + (SaleData[fseq - 1]["FChildrenDatetime"]?.ToString() ?? "") + "\","); sJson.Append("\"FLotTxt\": \"" + (SaleData[fseq - 1]["FLotTxt"]?.ToString() ?? "0") + "\""); //sJson.Append("\"FLotTxt\": \"" + (SaleData[fseq - 1]["FLotTxt"]?.ToString() ?? "0") + "\","); //报错未查出原因,暂拿掉交货明细表体20210302 //DynamicObjectCollection SaleDataPlan = SaleData[fseq - 1]["OrderEntryPlan"] as DynamicObjectCollection; //sJson.Append("\"FOrderEntryPlan\": [{"); //sJson.Append("\"FDetailLocId\": {\"FNumber\": \"" + ((SaleDataPlan[0]["DetailLocId"] as DynamicObject)?["Number"].ToString() ?? "") + "\"},"); //sJson.Append("\"FDetailLocAddress\": \"" + (SaleDataPlan[0]["DetailLocAddress"]?.ToString() ?? "") + "\","); //sJson.Append("\"FPlanDate\": \"" + (SaleDataPlan[0]["PlanDate"]?.ToString() ?? "") + "\","); //sJson.Append("\"FTransportLeadTime\": " + (SaleDataPlan[0]["TransportLeadTime"]?.ToString() ?? "") + ","); //sJson.Append("\"FPlanQty\": " + (SaleDataPlan[0]["PlanQty"]?.ToString() ?? "0") + "}]"); sJson.Append("}"); if (j != datadtl.Rows.Count - 1) { sJson.Append(","); } WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "表体循环结束"); } sJson.Append("]"); //sJson.Append("\"FSaleOrderPlan\": ["); //sJson.Append("{"); //sJson.Append("\"FNeedRecAdvance\": " + SaleData[fseq - 1]["RowType"].ToString() + ","); //sJson.Append("\"FRecAdvanceRate\": " + SaleData[fseq - 1]["RowType"].ToString() + ","); //sJson.Append("\"FRecAdvanceAmount\": " + SaleData[fseq - 1]["RowType"].ToString() + ","); //sJson.Append("\"FIsOutStockByRecamount\": " + SaleData[fseq - 1]["RowType"].ToString() + ""); //sJson.Append("}"); //sJson.Append("]"); sJson.Append("}"); sJson.Append("}"); WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "表体JSON处理结束,单据JSON:" + sJson.ToString()); JObject aa = JObject.Parse(JObject.Parse(sJson.ToString())["Model"].ToString()); savejsonlist += aa.ToString() + ","; #region 第一版 ////暂存处理 //string DraftResult = client.Draft("SAL_SaleOrder", sJson.ToString()); //WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "表体JSON处理结束,暂存结果:" + DraftResult); //JObject DraftResultObj = JObject.Parse(DraftResult); //if (DraftResultObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() == "TRUE") //{ // JObject aa = JObject.Parse(JObject.Parse(sJson.ToString())["Model"].ToString()); // aa["FID"] = DraftResultObj["Result"]["Id"].ToString(); // savejsonlist += aa.ToString() + ","; // idlist += DraftResultObj["Result"]["Id"].ToString() + ","; // //LogHelper.Info("订单审核拆单json:"+ aa.ToString()); //} //else//暂存失败则删除当前单据拆出来的所有暂存单据,并且跳出当前拆单单据,进行下一个拆单处理 //{ // idlist = idlist.Substring(0, idlist.Length - 1); // string deletemessage = client.Delete("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":[],\"Ids\":\"" + idlist + "\",\"NetworkCtrl\":\"\"}"); // WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "暂存失败,删除原订单拆单结果:" + deletemessage); // dictionary.Add(billno, DraftResultObj["Result"]["ResponseStatus"]["Errors"].ToString()); // curr = true; // break; //} #endregion } string successNo = string.Empty; savejsonlist = savejsonlist.Substring(0, savejsonlist.Length - 1); WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "批量保存JSON:" + "{\"NumberSearch\":\"true\",\"ValidateFlag\":\"true\",\"IsDeleteEntry\":\"true\",\"IsEntryBatchFill\":\"true\",\"NeedUpDateFields\":[],\"NeedReturnFields\":[],\"SubSystemId\":\"\",\"InterationFlags\":\"\",\"Model\":[" + savejsonlist.Replace("\r", "").Replace("\n", "") + "],\"BatchCount\":" + data.Rows.Count.ToString() + "}"); string message = client.BatchSave("SAL_SaleOrder", "{\"NumberSearch\":\"true\",\"ValidateFlag\":\"true\",\"IsDeleteEntry\":\"true\",\"IsEntryBatchFill\":\"true\",\"NeedUpDateFields\":[],\"NeedReturnFields\":[],\"SubSystemId\":\"\",\"InterationFlags\":\"\",\"Model\":[" + savejsonlist.Replace("\r", "").Replace("\n", "") + "],\"BatchCount\":" + data.Rows.Count.ToString() + "}"); WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "批量保存结果:" + message); JObject messageObj = JObject.Parse(message); for (int i = 0; i < messageObj["Result"]["ResponseStatus"]["SuccessEntitys"].ToList().Count; i++) { successNo += messageObj["Result"]["ResponseStatus"]["SuccessEntitys"][i]["Id"].ToString() + ","; } if (successNo.Length > 0) { successNo = successNo.Substring(0, successNo.Length - 1); } if (messageObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() == "TRUE") { string UnAuditResult = client.UnAudit("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":['" + billno + "'],\"Ids\":\"\",\"InterationFlags\":\"\",\"NetworkCtrl\":\"\"}"); WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "反审核结果:" + UnAuditResult); JObject UnAuditResultObj = JObject.Parse(UnAuditResult); if (UnAuditResultObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() == "TRUE") { WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "删除原单开始时间:" + DateTime.Now.ToString()); string DeleteResult = client.Delete("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":['" + billno + "'],\"Ids\":\"\",\"NetworkCtrl\":\"\"}"); WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "删除原单结束时间" + DateTime.Now.ToString()); WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "删除结果:" + DeleteResult); JObject DeleteResultObj = JObject.Parse(DeleteResult); if (DeleteResultObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() == "TRUE") { sql = $@"/*dialect*/UPDATE A SET A.FIsStatistics=0 FROM dbo.T_SAL_ORDER A WHERE A.FID IN ({successNo})"; int rows = DBServiceHelper.Execute(this.Context, sql); WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "更新是否统计结果:" + rows); WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "批量提交开始时间" + DateTime.Now.ToString()); string mes = client.Submit("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":[],\"Ids\":\"" + successNo + "\",\"SelectedPostId\":0,\"NetworkCtrl\":\"\"}"); WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "批量提交结束时间" + DateTime.Now.ToString()); WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "批量提交结果:" + mes); WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "批量审核开始时间" + DateTime.Now.ToString()); string mess = client.Audit("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":[],\"Ids\":\"" + successNo + "\",\"InterationFlags\":\"\",\"NetworkCtrl\":\"\"}"); WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "批量审核结束时间" + DateTime.Now.ToString()); WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "批量审核结果:" + mess); //dictionary.Add(billno, "拆单成功!"); } else { if (successNo.Length > 0) { string deletestr = client.Delete("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":[],\"Ids\":\"" + successNo + "\",\"NetworkCtrl\":\"\"}"); WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "原单删除失败--拆单成功的单据删除结果:" + deletestr); dictionary.Add(billno, "拆单失败,详细原因:原单删除失败!"); } } } else { if (successNo.Length > 0) { string unaduitstr = client.Delete("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":[],\"Ids\":\"" + successNo + "\",\"NetworkCtrl\":\"\"}"); WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "原单反审核失败--拆单成功的单据删除结果:" + unaduitstr); dictionary.Add(billno, "拆单失败,详细原因:原单反审核失败!"); } } } else { if (successNo.Length > 0) { string spiltstr = client.Delete("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":[],\"Ids\":\"" + successNo + "\",\"NetworkCtrl\":\"\"}"); WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "原单拆单失败--拆单成功的单据删除结果:" + spiltstr); dictionary.Add(billno, "拆单失败,详细原因:原单拆单失败!"); } } #region 第一版 //if (curr) //{ // string UnAuditResult = client.UnAudit("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":['" + billno + "'],\"Ids\":\"\",\"InterationFlags\":\"\",\"NetworkCtrl\":\"\"}"); // WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "拆单暂存失败,进行原单反审核:" + UnAuditResult); //} //else //{ // savejsonlist = savejsonlist.Substring(0, savejsonlist.Length - 1); // idlist = idlist.Substring(0, idlist.Length - 1); // WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "JSON:" + savejsonlist); // //拆单暂存完后删除原单据,在对暂存单据进行保存 // string UnAuditResult = client.UnAudit("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":['" + billno + "'],\"Ids\":\"\",\"InterationFlags\":\"\",\"NetworkCtrl\":\"\"}"); // WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "反审核结果:" + UnAuditResult); // JObject UnAuditResultObj = JObject.Parse(UnAuditResult); // if (UnAuditResultObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() == "TRUE") // { // string DeleteResult = client.Delete("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":['" + billno + "'],\"Ids\":\"\",\"NetworkCtrl\":\"\"}"); // WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "删除结果:" + DeleteResult); // JObject DeleteResultObj = JObject.Parse(DeleteResult); // if (DeleteResultObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() == "TRUE") // { // string message = client.BatchSave("SAL_SaleOrder", "{\"NumberSearch\":\"true\",\"ValidateFlag\":\"true\",\"IsDeleteEntry\":\"true\",\"IsEntryBatchFill\":\"true\",\"NeedUpDateFields\":[],\"NeedReturnFields\":[],\"SubSystemId\":\"\",\"InterationFlags\":\"\",\"Model\":[" + savejsonlist.Replace("\r", "").Replace("\n", "") + "],\"BatchCount\":" + data.Rows.Count.ToString() + "}"); // WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "批量保存结果:" + message); // JObject messageObj = JObject.Parse(message); // if (messageObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() == "TRUE") // { // string str = $@"/*dialect*/UPDATE A // SET A.FLOT=A.FLotTxt,A.FLOT_TEXT=ISNULL(C.FNAME,'') // FROM dbo.T_SAL_ORDERENTRY A(NOLOCK) // JOIN dbo.T_SAL_ORDER B(NOLOCK) ON B.FID = A.FID // JOIN T_BD_LOTMASTER_L C(NOLOCK) ON C.FLOTID=A.FLotTxt // WHERE B.FBILLNO LIKE '%{billno}%'"; // DBServiceHelper.Execute(this.Context, str); // string mes = client.Submit("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":[],\"Ids\":\"" + idlist + "\",\"SelectedPostId\":0,\"NetworkCtrl\":\"\"}"); // WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "批量提交结果:" + mes); // string mess = client.Audit("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":[],\"Ids\":\"" + idlist + "\",\"InterationFlags\":\"\",\"NetworkCtrl\":\"\"}"); // WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "批量审核结果:" + mess); // //dictionary.Add(billno, messageObj["Result"]["ResponseStatus"]["SuccessEntitys"].ToString()); // } // else // { // dictionary.Add(billno, messageObj["Result"]["ResponseStatus"]["Errors"].ToString()); // } // } // else // { // client.Delete("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":[],\"Ids\":\"" + idlist + "\",\"NetworkCtrl\":\"\"}"); // } // } // else // { // client.Delete("SAL_SaleOrder", "{\"CreateOrgId\":0,\"Numbers\":[],\"Ids\":\"" + idlist + "\",\"NetworkCtrl\":\"\"}"); // } //} #endregion } catch (Exception ex) { WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "异常信息:" + JsonConvert.SerializeObject(ex)); throw new Exception(ex.Message); } } WriteLog.SAL_SaleOrderSplitBill("订单审核拆单:" + billno, "截止时间:" + DateTime.Now.ToString()); } //对拆单结果进行提示 foreach (var item in dictionary) { ResultMessage.dataError(this.OperationResult.OperateResult, item.Key, "拆单信息:" + item.Value); } //} //else //{ // throw new Exception("金蝶API登录失败!详细原因:1.检查密码是否调整,调整请联系金蝶开发人员。2.请检查网络状况!"); //} } public static class ResultMessage {/// <summary> /// 修改提示信息 /// </summary> /// <param name="operateResult"></param> /// <param name="billno"></param> /// <param name="message"></param> public static void dataError(OperateResultCollection operateResult, string billno, string message) { OperateResult operate = operateResult.Where(n => n.Number == billno).First(); operate.Message = message; operate.SuccessStatus = false; operate.MessageType = MessageType.Normal; } } } } src/Model/Demo.Model/Model/DayPlanMaterial.cs
@@ -110,5 +110,13 @@ /// </summary> public string FDayPlanFBILLNO { get; set; } /// <summary> /// FDayPlanPpbomFEntryId /// 日计划用料清单FentryID /// </summary> public string FDayPlanPpbomFEntryId { get; set; } public string FWORKSHOPID { get; set; } } }