src/BLL/Demo.BillView/Config/kdapi.config
@@ -4,6 +4,6 @@ <add key="DbId" value="5f9258a311401c"></add> <add key="UserName" value="Administrator"></add> <add key="PassWord" value="888888"></add> <add key="KDApiUrl" value="http://localhost/K3Cloud/"></add> <add key="KDApiUrl" value="http://localhost//k3cloud/"></add> </appSettings> </configuration> src/BLL/Demo.BillView/Demo.BillView.csproj
@@ -42,17 +42,17 @@ <Reference Include="K3Cloud.Extend, Version=0.0.80.5, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.Common.7.2.3\lib\net452\K3Cloud.Extend.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS, Version=7.2.904.6, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Kingdee.BOS, Version=7.6.2003.9, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>C:\Users\14027\Desktop\最新版bin文件\Kingdee.BOS.dll</HintPath> <HintPath>C:\Users\14027\Desktop\最新版bin文件3.16\Kingdee.BOS.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.App.Core, Version=7.2.904.6, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Kingdee.BOS.App.Core, Version=7.6.2003.9, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>C:\Users\14027\Desktop\最新版bin文件\Kingdee.BOS.App.Core.dll</HintPath> <HintPath>C:\Users\14027\Desktop\最新版bin文件3.16\Kingdee.BOS.App.Core.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.Business.PlugIn, Version=7.2.904.6, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Kingdee.BOS.Business.PlugIn, Version=7.6.2003.9, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>C:\Users\14027\Desktop\最新版bin文件\Kingdee.BOS.Business.PlugIn.dll</HintPath> <HintPath>C:\Users\14027\Desktop\最新版bin文件3.16\Kingdee.BOS.Business.PlugIn.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.BusinessEntity, Version=7.2.904.6, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.Common.7.2.3\lib\net452\Kingdee.BOS.BusinessEntity.dll</HintPath> @@ -60,13 +60,13 @@ <Reference Include="Kingdee.BOS.Contracts, Version=7.2.904.6, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.Common.7.2.3\lib\net452\Kingdee.BOS.Contracts.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.Core, Version=7.2.904.6, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Kingdee.BOS.Core, Version=7.6.2003.9, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>C:\Users\14027\Desktop\最新版bin文件\Kingdee.BOS.Core.dll</HintPath> <HintPath>C:\Users\14027\Desktop\最新版bin文件3.16\Kingdee.BOS.Core.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.DataEntity, Version=7.2.904.6, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Kingdee.BOS.DataEntity, Version=7.6.2003.9, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>C:\Users\14027\Desktop\最新版bin文件\Kingdee.BOS.DataEntity.dll</HintPath> <HintPath>C:\Users\14027\Desktop\最新版bin文件3.16\Kingdee.BOS.DataEntity.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.FileConvert.Core, Version=7.2.904.6, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.Common.7.2.3\lib\net452\Kingdee.BOS.FileConvert.Core.dll</HintPath> @@ -95,21 +95,16 @@ <Reference Include="Kingdee.BOS.ServiceFacade.KDServiceFx, Version=7.2.904.6, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.Common.7.2.3\lib\net452\Kingdee.BOS.ServiceFacade.KDServiceFx.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.ServiceHelper, Version=7.2.904.6, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Kingdee.BOS.ServiceHelper, Version=7.5.1800.6, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>C:\Users\14027\Desktop\最新版bin文件\Kingdee.BOS.ServiceHelper.dll</HintPath> <HintPath>C:\Users\14027\Desktop\最新版bin文件3.16\Kingdee.BOS.ServiceHelper.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.Web, Version=7.2.904.6, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.Common.7.2.3\lib\net452\Kingdee.BOS.Web.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.Web.Core, Version=7.5.1658.5, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.Common.7.2.3\lib\net452\Kingdee.BOS.Web.Core.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.WebApi.Client, Version=7.3.1150.7, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.3.2.3\lib\net452\Kingdee.BOS.WebApi.Client.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.WebApi.ServicesStub, Version=7.3.1150.7, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.3.2.3\lib\net452\Kingdee.BOS.WebApi.ServicesStub.dll</HintPath> <Reference Include="Kingdee.BOS.WebApi.Client, Version=7.6.2003.9, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>C:\Users\14027\Desktop\最新版bin文件3.16\Kingdee.BOS.WebApi.Client.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.WinForm.KDS20Lib, Version=7.0.104.1, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.Common.7.2.3\lib\net452\Kingdee.BOS.WinForm.KDS20Lib.dll</HintPath> @@ -141,9 +136,9 @@ <Reference Include="Kingdee.K3.SCM.App.Stock.ServicePlugIn, Version=7.2.904.6, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.Common.7.2.3\lib\net452\Kingdee.K3.SCM.App.Stock.ServicePlugIn.dll</HintPath> </Reference> <Reference Include="Kingdee.K3.SCM.Business.DynamicForm, Version=7.2.904.6, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Kingdee.K3.SCM.Business.DynamicForm, Version=7.6.2003.9, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>C:\Users\14027\Desktop\最新版bin文件\Kingdee.K3.SCM.Business.DynamicForm.dll</HintPath> <HintPath>C:\Users\14027\Desktop\最新版bin文件3.16\Kingdee.K3.SCM.Business.DynamicForm.dll</HintPath> </Reference> <Reference Include="Kingdee.K3.SCM.Common.BusinessEntity, Version=7.2.904.6, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.Common.7.2.3\lib\net452\Kingdee.K3.SCM.Common.BusinessEntity.dll</HintPath> @@ -203,11 +198,9 @@ <Reference Include="ZD.Cloud.Logger, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.Logger.1.1.0\lib\net40\ZD.Cloud.Logger.dll</HintPath> </Reference> <Reference Include="ZD.Cloud.WebApi, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.3.2.3\lib\net452\ZD.Cloud.WebApi.dll</HintPath> </Reference> <Reference Include="ZD.Share, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Share.1.0.0\lib\net452\ZD.Share.dll</HintPath> <SpecificVersion>False</SpecificVersion> <HintPath>C:\Users\14027\Desktop\bin文件\ZD.Share.dll</HintPath> </Reference> </ItemGroup> <ItemGroup> @@ -217,6 +210,7 @@ <Compile Include="PRD\ProTardinessDetails.cs" /> <Compile Include="PRD\ProCompleteAnalysisMateriel.cs" /> <Compile Include="PRD\ProCompleteAnalysisDetails.cs" /> <Compile Include="PRD\Pro_TlPushAudit.cs" /> <Compile Include="PRD\Pro_MaterialRequisitionAuditDayPlan.cs" /> <Compile Include="PRD\Pro_MaterialRequisitionAudit.cs" /> <Compile Include="PRD\Pro_ScDayImport.cs" /> @@ -249,6 +243,10 @@ <Project>{3B5437EE-F19C-4B69-90A4-88866841337B}</Project> <Name>Demo.TimedTaskPlugIn</Name> </ProjectReference> <ProjectReference Include="..\Demo.Utility\Demo.Utility.csproj"> <Project>{0AF059FC-D287-42C4-8835-133C3D96243A}</Project> <Name>Demo.Utility</Name> </ProjectReference> </ItemGroup> <ItemGroup> <WCFMetadata Include="Connected Services\" /> src/BLL/Demo.BillView/PRD/Pro_MaterialRequisitionAuditDayPlan.cs
@@ -24,9 +24,9 @@ /// 2. 本插件挂在销售出库单的保存操作上 /// 出库关联销售订单 /// </remarks> [Description("引入生产领料单,建立与生产订单的关联,日计划用料清单")] [Description("送货计划单插件关联提料计划单")] [HotUpdate] public class Pro_MaterialRequisitionAuditDayPlan : AbstractOperationServicePlugIn public class Pro_TlPushAudit : AbstractOperationServicePlugIn { public override void OnPreparePropertys(PreparePropertysEventArgs e) { @@ -37,17 +37,16 @@ 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("FHQty"); e.FieldKeys.Add("FHMaterID"); } private const string POFormId = "PRD_PPBOM"; private const string POFormId = "paez_PODemandPlan"; public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e) { base.BeforeExecuteOperationTransaction(e); HashSet<string> poBillNos = new HashSet<string>(); Entity entity = this.BusinessInfo.GetEntity("FEntity");//获取明细信息 Entity linkEntry = this.BusinessInfo.GetEntity("FEntity_Link"); Entity entity = this.BusinessInfo.GetEntity("FDetailEntity");//获取明细信息 Entity linkEntry = this.BusinessInfo.GetEntity("FDetailEntity_Link"); Field fldSrcFormId = this.BusinessInfo.GetField("FSrcBillType"); Field fldSrcBillNo = this.BusinessInfo.GetField("FSrcBillNo"); // 对单据体进行循环,取关联的源单编号 @@ -61,9 +60,11 @@ string srcSrcBillNo = ""; 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); srcFormId = "paez_PODemandPlan"; srcSrcBillNo = entryRow["FTLOrderNo"].ToString(); //srcSrcBillNo = entryRow["FTLentryId"].ToString(); //srcSrcBillNo = entryRow["FTLId"].ToString(); //srcSrcBillNo = DBServiceHelper.ExecuteScalar<string>(Context, $" select distinct FPPBOMBILLNO from T_PUR_RECEIVEENTRY_LK where FSRCBILLNO = '{srcSrcBillNo}' ", srcSrcBillNo); } catch (Exception) @@ -100,10 +101,9 @@ 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 srcSrcBillNo = fldSrcBillNo.DynamicProperty.GetValue<string>(entryRow); string srcFormId = "paez_PODemandPlan"; string srcSrcBillNo = entryRow["FTLOrderNo"].ToString(); if (string.IsNullOrWhiteSpace(srcFormId) || string.IsNullOrWhiteSpace(srcSrcBillNo) @@ -145,19 +145,17 @@ private DynamicObject[] LoadPurchaseOrder(HashSet<string> poBillNos) { IViewService viewService = ServiceHelper.GetService<IViewService>(); string formId = "PRD_PPBOM"; string formId = "paez_PODemandPlan"; // 指定需要加载的销售订单字段 List<SelectorItemInfo> fields = new List<SelectorItemInfo>(); fields.Add(new SelectorItemInfo("FID")); // 单据主键 fields.Add(new SelectorItemInfo("FTreeEntity_FEntryID")); // 单据体主键 fields.Add(new SelectorItemInfo("FEntity_FEntryID")); // 单据体主键 fields.Add(new SelectorItemInfo("FBillNo")); // 单据编号 fields.Add(new SelectorItemInfo("FBFLowId")); // 业务流程 fields.Add(new SelectorItemInfo("FMaterialId")); // 物料 fields.Add(new SelectorItemInfo("FMaterialID2")); // 物料 fields.Add(new SelectorItemInfo("FBASENEEDQTY")); // 基本单位数量 fields.Add(new SelectorItemInfo("FBASEPICKEDQTY")); // 基本单位关联数量 fields.Add(new SelectorItemInfo("FBFLOWID")); // //fields.Add(new SelectorItemInfo("FBFLowId")); // 业务流程 fields.Add(new SelectorItemInfo("FHMaterID")); // 物料 fields.Add(new SelectorItemInfo("FHQty")); // 基本单位数量 //fields.Add(new SelectorItemInfo("FBFLOWID")); // // 指定过滤条件 string filter = string.Format(" FBillNo IN ('{0}') ", string.Join("','", poBillNos)); @@ -178,10 +176,10 @@ { string billNo = Convert.ToString(poObj["BillNo"]); Dictionary<string, DynamicObject> dctOneBill = new Dictionary<string, DynamicObject>(); DynamicObjectCollection entryRows = poObj["PPBomEntry"] as DynamicObjectCollection; DynamicObjectCollection entryRows = poObj["FEntity"] as DynamicObjectCollection; foreach (var entryRow in entryRows) { DynamicObject materialObj = entryRow["MaterialId"] as DynamicObject; DynamicObject materialObj = entryRow["FHMaterID"] as DynamicObject; if (materialObj == null) continue; string materialNumber = Convert.ToString(materialObj["number"]); dctOneBill[materialNumber] = entryRow; @@ -208,16 +206,16 @@ /// <param name="linkRow">关联行</param> private void FillLinkRow(DynamicObject srcRow, DynamicObject toRow, DynamicObject linkRow) { linkRow["FlowId"] = srcRow["BFLowId_Id"]; //linkRow["FlowId"] = srcRow["BFLowId_Id"]; linkRow["FlowLineId"] = 0; linkRow["RuleId"] = "PRD_PPBOM2PICKMTRL_NORMAL"; linkRow["RuleId"] = Guid.NewGuid().ToString(); linkRow["SBillId"] = ((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"]; //基本单位实发数量 decimal baseUnitQty = Convert.ToDecimal(srcRow["FHQty"]);//用料清单单位数量 decimal joinUnitQty = Convert.ToDecimal(srcRow["FHQty"]);//用料清单单位领料数量 linkRow["BASEUNITQTY"] = baseUnitQty; linkRow["STOCKBASEQTY"] = baseUnitQty; //基本单位实发数量 } /// <summary> @@ -226,7 +224,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= 'Cg_PODemandPlanBillSub' and FTID = '{FTID}'"; int count = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0); if (count == 0) return true; src/BLL/Demo.BillView/PRD/Pro_ScDayImport.cs
@@ -12,73 +12,37 @@ using System.ComponentModel; using System.Data; using Newtonsoft.Json.Linq; using ZD.Cloud.WebApi; using ZD.Cloud.Logger; using Demo.Model.Model; using ZD.Share.Common; using System.Linq; using Demo.Utility; namespace Demo.BillView.PRD { [Description("生产日计划导入")] [HotUpdate] public class Pro_ScDayImport : AbstractDynamicFormPlugIn { CloudClient cloudClient = new CloudClient("http://localhost/K3Cloud/"); private string fileFullPath = string.Empty; //public override void BarItemClick(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.BarItemClickEventArgs e) //public override void OnLoad(EventArgs e) //{ // base.BarItemClick(e); // if (e.BarItemKey.ToUpper().Equals("TBIMPORT")) // { // base.OnLoad(e); // throw new Exception("1"); // } // if (e.BarItemKey.ToUpper().Equals("TBWJSC")) // { // //Control updateControl = this.View.GetControl("fileFullPath"); // //// 上传地址 // //string uploadUrl = "FileUpLoadServices/FileService.svc/upload2attachment/"; // //updateControl.SetCustomPropertyValue("ExtandUrl", uploadUrl); // //// 下载地址 // //string downloadUrl = "FileUpLoadServices/download.aspx"; // //updateControl.SetCustomPropertyValue("ExDownLoadUrl", downloadUrl); // ImportData(fileFullPath); // } //} public override void OnLoad(EventArgs e) { base.OnLoad(e); throw new Exception("1"); } public override void BarItemClick(BarItemClickEventArgs e) { base.BarItemClick(e); throw new Exception("1"); LogHelper.Info("导入功能点击按钮:"); if (e.BarItemKey.ToUpper().Equals("TBIMPORT")) { this.View.ShowErrMessage("测试导入功能点击按钮"); LogHelper.Info("导入功能点击按钮:"); ImportData(); //this.View.ShowErrMessage("测试导入功能点击按钮"); } if (e.BarItemKey.ToUpper().Equals("TBWJSC")) { this.View.ShowErrMessage("测试文件上传功能点击按钮"); //Control updateControl = this.View.GetControl("fileFullPath"); //// 上传地址 //string uploadUrl = "FileUpLoadServices/FileService.svc/upload2attachment/"; //updateControl.SetCustomPropertyValue("ExtandUrl", uploadUrl); //// 下载地址 //string downloadUrl = "FileUpLoadServices/download.aspx"; //updateControl.SetCustomPropertyValue("ExDownLoadUrl", downloadUrl); LogHelper.Info("文件上传功能点击按钮:"); ImportDataSC(fileFullPath); } @@ -260,6 +224,7 @@ { try { CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); string sql; DateTime date = Convert.ToDateTime(this.Model.GetValue("F_Paez_Date")); //获取单据体信息 src/BLL/Demo.BillView/PRD/Pro_TlPush.cs
@@ -1,52 +1,26 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Data; using System.Linq; using System.Text; using Demo.Model.Model; using Kingdee.BOS; using Kingdee.BOS.Core.Attachment; using Demo.Utility; using Kingdee.BOS.Core.Bill; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.Bill.PlugIn.Args; using Kingdee.BOS.Core.CommonFilter; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.DiffCompare; using Kingdee.BOS.Core.DynamicForm.Operation; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.List; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Metadata.BarElement; using Kingdee.BOS.Core.Metadata.ConvertElement; using Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Core.Metadata.FormElement; using Kingdee.BOS.Core.Metadata.QueryElement; using Kingdee.BOS.Core.Msg; using Kingdee.BOS.Core.Permission; using Kingdee.BOS.Log; using Kingdee.BOS.Msg; using Kingdee.BOS.Orm; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Orm.Metadata.DataEntity; using Kingdee.BOS.Resource; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Util; using Kingdee.K3.SCM.Business; using Kingdee.K3.SCM.Core.SCP; using Kingdee.K3.SCM.ServiceHelper; using Newtonsoft.Json.Linq; using ZD.Cloud.Logger; namespace Demo.BillView.PRD { [Description("提料下推送货通知单")] [Kingdee.BOS.Util.HotUpdate] public class Pro_TlPush : AbstractBillPlugIn { CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); public override void BarItemClick(BarItemClickEventArgs e) { try { string a; if ((a = e.BarItemKey.ToUpperInvariant()) != null) @@ -61,25 +35,101 @@ // 取当前页面子单据体 //Entity subEntity = this.View.BillBusinessInfo.GetEntity("FEntity");//标识 //DynamicObjectCollection rows = this.Model.GetEntityDataObject(subEntity);//获得子单据体行集合 string sql = $"select * from "; //构建 model 主表 JObject model = new JObject(); model.Add("FHDate", ""); model.Add("FSettleCurrId", new JObject() { ["Fnumber"] = "PRE001" }); model.Add("FSupplierID", new JObject() { ["Fnumber"] = "" }); model.Add("FBILLTYPEID", new JObject() { ["Fnumber"] = "SLD01_SYS" }); //单据类型 model.Add("FDate", DateTime.Now.ToString("yyyy-MM-dd")); //通知日期 model.Add("FStockOrgId", new JObject() { ["Fnumber"] = (this.Model.GetValue("FHPURCHASEORGID") as DynamicObject)?["Number"].ToString() ?? "" }); // 收料组织 model.Add("FPurOrgId", new JObject() { ["Fnumber"] = (this.Model.GetValue("FHPURCHASEORGID") as DynamicObject)?["Number"].ToString() ?? "" }); //采购组织 model.Add("FSupplierId", new JObject() { ["Fnumber"] = (this.Model.GetValue("FSupplierID") as DynamicObject)?["Number"].ToString() ?? "" }); //供应商 model.Add("FOwnerTypeIdHead", "BD_OwnerOrg");// 货主类型 model.Add("FOwnerIdHead", new JObject() { ["Fnumber"] = (this.Model.GetValue("FHPURCHASEORGID") as DynamicObject)?["Number"].ToString() ?? "" });//货主 //model.Add("FPurchaserId", new JObject() { ["Fnumber"] = "" }); //采购员 //model.Add("FReceiverId", new JObject() { ["Fnumber"] = "" }); //收料员 //model.Add("FSupplyAddress", ""); //供货方地址 //model.Add("FConfirmerId", new JObject() { ["FUserID"] = "" }); // 确认人 //model.Add("FConfirmDate", "1900-01-01"); //确认日期 //model.Add("FSupplyId", new JObject() { ["Fnumber"] = "" }); // 供货方 //model.Add("FChargeId", new JObject() { ["Fnumber"] = "" }); // 收款方 //model.Add("FSettleId", new JObject() { ["Fnumber"] = "" }); // 结算方 //model.Add("FIsInsideBill", "false"); // 外部单据 //model.Add("FScanBox", "false"); // 序列号上传 //子表 数据模型 JArray Fentity = new JArray(); for (int i = 0; i < 10; i++) foreach (var item in entityRows) { JObject FentityModel = new JObject(); FentityModel.Add("FMaterialId", new JObject() { ["Fnumber"] = (item["FHMaterID"] as DynamicObject)?["Number"].ToString() ?? "" }); // 物料编码 FentityModel.Add("FUnitID", new JObject() { ["Fnumber"] = (item["FUnitID"] as DynamicObject)?["Number"].ToString() ?? "" }); // 单位 FentityModel.Add("FPreDeliveryDate", this.Model.GetValue("FHDate").ToString()); // 预计到货日期 FentityModel.Add("FPriceUnitId", new JObject() { ["Fnumber"] = (item["FUnitID"] as DynamicObject)?["Number"].ToString() ?? "" }); // 计价单位 FentityModel.Add("FStockUnitID", new JObject() { ["Fnumber"] = (item["FUnitID"] as DynamicObject)?["Number"].ToString() ?? "" }); // 库存单位 FentityModel.Add("FActReceiveQty", item["FHQty"].ToString()); // 供应商送货数量 FentityModel.Add("FOwnerTypeId", "BD_OwnerOrg");// 货主类型 FentityModel.Add("FOwnerID", new JObject() { ["Fnumber"] = (this.Model.GetValue("FHPURCHASEORGID") as DynamicObject)?["Number"].ToString() ?? "" });//货主 FentityModel.Add("FSrcId", item["FHPOOrderInterID"].ToString());// 源单内码 FentityModel.Add("FSRCFORMID", "PUR_PurchaseOrder");// 源单类型 FentityModel.Add("FSrcBillNo", item["FHPOOrderBillNo"].ToString());// 源单单号 FentityModel.Add("FSRCENTRYID", item["FHPOOrderEntryID"].ToString());// 源单分录内码 FentityModel.Add("FORDERBILLNO", item["FHPOOrderBillNo"].ToString());// 源单单号 FentityModel.Add("FPOORDERENTRYID", item["FHPOOrderEntryID"].ToString());// 源单分录内码 FentityModel.Add("FTLId", this.View.Model.DataObject["Id"].ToString());// 提料源单内码 FentityModel.Add("FTLentryId", item["Id"].ToString());// 提料源单分录内码 FentityModel.Add("FTLOrderNo", this.Model.GetValue("FBillNo").ToString());// 提料源单分录内码 FentityModel.Add("FUnitID", new JObject() { ["Fnumber"] = "Pcs" }); //发料方式 JArray Fentity2 = new JArray(); JObject FentityModel2 = new JObject(); FentityModel2.Add("FDetailEntity_Link_FRULEID", "a8c6b6e5-a8c0-4fc1-8592-6b76c2136cf9"); FentityModel2.Add("FDetailEntity_Link_FSTableName", "t_PUR_POOrderEntry"); FentityModel2.Add("FDetailEntity_Link_FSBillId", item["FHPOOrderInterID"].ToString()); FentityModel2.Add("FDetailEntity_Link_FSId", item["FHPOOrderEntryID"].ToString()); Fentity2.Add(FentityModel2); FentityModel.Add("FDetailEntity_Link", Fentity2); //单据转换关联关系 //FentityModel.Add("FAuxPropId", new JObject() { }); // 物料编码 //FentityModel.Add("FConfirmDeliQty", 0); // 物料编码 //FentityModel.Add("FConfirmDeliDate", "1900-01-01"); // 物料编码 //FentityModel.Add("FConfirmInfo", ""); // 物料编码 //FentityModel.Add("FDescription", ""); // 物料编码 //FentityModel.Add("FBomId", new JObject() { ["Fnumber"] = "" }); // 物料编码 //FentityModel.Add("FLot", new JObject() { ["Fnumber"] = "" }); // 物料编码 //FentityModel.Add("FSupplierLot", ""); // 物料编码 //FentityModel.Add("FPrice", 0); // 物料编码 //FentityModel.Add("FTaxPrice", 0); // 物料编码 //FentityModel.Add("FDiscountRate", 0); // 物料编码 //FentityModel.Add("FEntryTaxRate", 0); // 物料编码 //FentityModel.Add("FStockBaseQty", 0); // 物料编码 //FentityModel.Add("FStockQty", 0); // 物料编码 //FentityModel.Add("FTaxCombination", new JObject() { ["Fnumber"] = "" }); // 物料编码 //FentityModel.Add("FPriceBaseQty", 0); // 物料编码 //FentityModel.Add("FStockInMaxQty", 0); // 物料编码 //FentityModel.Add("FBaseStockInMaxQty", 0); // 物料编码 //FentityModel.Add("FCheckInComing", "false"); // 物料编码 //FentityModel.Add("FStockID", new JObject() { ["Fnumber"] = "" }); // 物料编码 //FentityModel.Add("FStockLocId", new JObject() { }); // 物料编码 //FentityModel.Add("FStockStatusId", new JObject() { ["Fnumber"] = "" }); // 物料编码 //FentityModel.Add("FProduceDate", "1900-01-01"); // 物料编码 //FentityModel.Add("FExpiryDate", "1900-01-01"); // 物料编码 Fentity.Add(FentityModel); } model.Add("FEntity", Fentity); model.Add("FDetailEntity", Fentity); //明细信息 JObject _FentityModel = new JObject(); _FentityModel.Add("FSettleOrgId", new JObject() { ["Fnumber"] = (this.Model.GetValue("FHPURCHASEORGID") as DynamicObject)?["Number"].ToString() ?? "" }); // 结算组织 _FentityModel.Add("FSettleCurrId", new JObject() { ["Fnumber"] = (this.Model.GetValue("FSettleCurrId") as DynamicObject)?["Number"].ToString() ?? "" }); // 结算币别 _FentityModel.Add("FPricePoint", 0); // 定价时点 //FPricePoint model.Add("FinanceEntity ", _FentityModel);//财务信息 //model.Add("FinanceEntity ", new JObject() { //"FSettleOrgId", new JObject() { ["Fnumber"] = (this.Model.GetValue("FHPURCHASEORGID") as DynamicObject)?["Number"].ToString() ?? "" }, //"FSettleCurrId", new JObject() { ["Fnumber"] = (this.Model.GetValue("FSettleCurrId") as DynamicObject)?["Number"].ToString() ?? "" } //}); JObject jsonRoot = new JObject() { ["Creator"] = "", @@ -88,12 +138,40 @@ ["IsDeleteEntry"] = "false", ["SubSystemId"] = "", ["IsVerifyBaseDataField"] = "false", ["IsAutoSubmitAndAudit"] = true,//自动调用提交和审核功能 ["Model"] = model }; var result = cloudClient.Save("PUR_ReceiveBill", jsonRoot.ToString()); JObject saveObj = JObject.Parse(result); string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); if (saveIsSuc == "TRUE") { // 打开单据维护界面:以打开销售订单100001为例 // using Kingdee.BOS.Core.Bill; string pageId = Guid.NewGuid().ToString(); BillShowParameter showParameter = new BillShowParameter(); showParameter.FormId = "SCP_ReceiveBill"; showParameter.OpenStyle.ShowType = ShowType.MainNewTabPage; showParameter.PageId = pageId; showParameter.Status = OperationStatus.EDIT; // 传入需要修改的销售订单内码,演示代码直接固定写死为100001 showParameter.PKey = saveObj["Result"]["Id"].ToString(); this.View.ShowForm(showParameter); } else { LogHelper.Error(jsonRoot.ToString()); this.View.ShowErrMessage(jsonRoot.ToString()); } } } } catch (Exception ex) { throw ex; } } } } } } src/BLL/Demo.BillView/PRD/Pro_TlPushAudit.cs
New file @@ -0,0 +1,238 @@ using 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 { /// <summary> /// 插件示例:引入销售出库单,建立与销售订单的关联 /// </summary> /// <remarks> /// 要求: /// 1. 需要引入单据体的源单类型、源单编号字段 /// 2. 本插件挂在销售出库单的保存操作上 /// 出库关联销售订单 /// </remarks> [Description("引入生产领料单,建立与生产订单的关联,日计划用料清单")] [HotUpdate] public class Pro_MaterialRequisitionAuditDayPlan : 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"); } private const string POFormId = "PRD_PPBOM"; public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e) { base.BeforeExecuteOperationTransaction(e); HashSet<string> poBillNos = new HashSet<string>(); Entity entity = this.BusinessInfo.GetEntity("FEntity");//获取明细信息 Entity linkEntry = this.BusinessInfo.GetEntity("FEntity_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 = ""; 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); } 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 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); 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; DynamicObjectCollection linkRows = linkEntry.DynamicProperty.GetValue(entryRow) as DynamicObjectCollection; 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> /// 加载相关的销售订单数据 /// </summary> /// <param name="poBillNos"></param> /// <returns></returns> private DynamicObject[] LoadPurchaseOrder(HashSet<string> poBillNos) { 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")); // 单据体主键 fields.Add(new SelectorItemInfo("FBillNo")); // 单据编号 fields.Add(new SelectorItemInfo("FBFLowId")); // 业务流程 fields.Add(new SelectorItemInfo("FMaterialId")); // 物料 fields.Add(new SelectorItemInfo("FMaterialID2")); // 物料 fields.Add(new SelectorItemInfo("FBASENEEDQTY")); // 基本单位数量 fields.Add(new SelectorItemInfo("FBASEPICKEDQTY")); // 基本单位关联数量 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["PPBomEntry"] as DynamicObjectCollection; foreach (var entryRow in entryRows) { DynamicObject materialObj = entryRow["MaterialId"] 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) { linkRow["FlowId"] = srcRow["BFLowId_Id"]; linkRow["FlowLineId"] = 0; linkRow["RuleId"] = "PRD_PPBOM2PICKMTRL_NORMAL"; linkRow["SBillId"] = ((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"]; //基本单位实发数量 } /// <summary> /// 验证是否生成过生产用料清单对应的源单 /// </summary> /// <returns></returns> public bool SourceVerification(string FTID) { string sql = $" select count(*) from T_BF_INSTANCEENTRY where FSTABLENAME= 'T_PRD_PPBOMENTRY' and FTID = '{FTID}'"; int count = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0); if (count == 0) return true; else return false; } } } src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatform.cs
@@ -1,5 +1,6 @@ using Demo.Model.Model; using Demo.Model.Model.PODemandPlan; using Demo.Utility; using K3Cloud.Extend.Utils; using Kingdee.BOS.Core; using Kingdee.BOS.Core.Bill.PlugIn; @@ -38,7 +39,6 @@ using System.Web; using System.Windows.Documents; using ZD.Cloud.Logger; using ZD.Cloud.WebApi; using ZD.Share.Common; namespace Demo.DynamicForm.PRD @@ -645,7 +645,7 @@ if (item.FOwnerId != null) jsonModel.Add("FOwnerId", new JObject() { ["FNUMBER"] = item.FOwnerId }); jsonRoot.Add("Model", jsonModel); CloudClient cloudClient = new CloudClient("http://localhost/K3Cloud/"); CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); var result = cloudClient.Save("paez_CompleteAnalysisTemp", jsonRoot.ToString()); JObject saveObj = JObject.Parse(result); string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); @@ -896,7 +896,7 @@ ["IsVerifyBaseDataField"] = "false", ["Model"] = Fentity }; CloudClient cloudClient = new CloudClient("http://localhost/K3Cloud/"); CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); var result = cloudClient.BatchSave("paez_CompleteAnalysisTemp", jsonRoot.ToString()); JObject saveObj = JObject.Parse(result); string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); @@ -1489,7 +1489,7 @@ ["Model"] = model }; CloudClient cloudClient = new CloudClient("http://localhost/K3Cloud/"); CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); var result = cloudClient.Save("Paez_Sc_DayPlanPPBomBill", jsonRoot.ToString()); JObject saveObj = JObject.Parse(result); string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); @@ -1644,13 +1644,13 @@ ["IsVerifyBaseDataField"] = "false", ["Model"] = Fentity }; CloudClient cloudClient = new CloudClient("http://localhost/K3Cloud/"); 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") { LogHelper.Error(jsonRoot.ToString()); LogHelper.Error(saveObj.ToString()); } Fentity = new JArray(); } @@ -2073,7 +2073,7 @@ ["IsVerifyBaseDataField"] = "false", ["Model"] = FinalyResult }; CloudClient cloudClient = new CloudClient("http://localhost/K3Cloud/"); CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); var result = cloudClient.BatchSave("paez_PODemandPlan", jsonRoot.ToString()); JObject saveObj = JObject.Parse(result); string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); src/BLL/Demo.BillView/packages.config
@@ -7,7 +7,6 @@ <package id="SharpZipLib" version="1.2.0" targetFramework="net472" /> <package id="ZD.Cloud.Common" version="7.2.3" targetFramework="net472" /> <package id="ZD.Cloud.Logger" version="1.1.0" targetFramework="net472" /> <package id="ZD.Cloud.WebApi" version="7.3.2.3" targetFramework="net472" /> <package id="ZD.Newtonsoft.Json" version="1.0.0" targetFramework="net472" /> <package id="ZD.Share" version="1.0.0" targetFramework="net472" /> </packages> src/BLL/Demo.OperationService/Config/kdapi.config
File was deleted src/BLL/Demo.OperationService/Demo.OperationService.csproj
@@ -83,12 +83,6 @@ <Reference Include="Kingdee.BOS.Web.HTML, Version=7.5.1507.2, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.Common.7.5.1.2\lib\net452\Kingdee.BOS.Web.HTML.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.WebApi.Client, Version=7.3.1150.7, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.3.2.3\lib\net452\Kingdee.BOS.WebApi.Client.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.WebApi.ServicesStub, Version=7.3.1150.7, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.3.2.3\lib\net452\Kingdee.BOS.WebApi.ServicesStub.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.WeiXin.Core, Version=7.5.1507.2, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.Common.7.5.1.2\lib\net452\Kingdee.BOS.WeiXin.Core.dll</HintPath> </Reference> @@ -127,9 +121,6 @@ <Reference Include="System.Data" /> <Reference Include="System.Net.Http" /> <Reference Include="System.Xml" /> <Reference Include="ZD.Cloud.WebApi, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.3.2.3\lib\net452\ZD.Cloud.WebApi.dll</HintPath> </Reference> <Reference Include="ZD.Share, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Share.1.0.2\lib\net452\ZD.Share.dll</HintPath> </Reference> @@ -140,7 +131,6 @@ <Compile Include="SCM\SAL_SaleOrder\SAL_SaleOrderSubmit.cs" /> </ItemGroup> <ItemGroup> <None Include="Config\kdapi.config" /> <None Include="packages.config" /> </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> src/BLL/Demo.OperationService/packages.config
@@ -1,7 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <packages> <package id="ZD.Cloud.Common" version="7.5.1.2" targetFramework="net452" /> <package id="ZD.Cloud.WebApi" version="7.3.2.3" targetFramework="net452" /> <package id="ZD.Newtonsoft.Json" version="1.0.0" targetFramework="net452" /> <package id="ZD.Share" version="1.0.2" targetFramework="net452" /> </packages> src/BLL/Demo.TimedTaskPlugIn/Config/kdapi.config
File was deleted src/BLL/Demo.TimedTaskPlugIn/Demo.TimedTaskPlugIn.csproj
@@ -9,9 +9,10 @@ <AppDesignerFolder>Properties</AppDesignerFolder> <RootNamespace>Demo.TimedTaskPlugIn</RootNamespace> <AssemblyName>Demo.TimedTaskPlugIn</AssemblyName> <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion> <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion> <FileAlignment>512</FileAlignment> <Deterministic>true</Deterministic> <TargetFrameworkProfile /> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <DebugSymbols>true</DebugSymbols> @@ -82,11 +83,8 @@ <Reference Include="Kingdee.BOS.Web.HTML, Version=7.5.1507.2, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.Common.7.5.1.2\lib\net452\Kingdee.BOS.Web.HTML.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.WebApi.Client, Version=7.3.1150.7, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.3.2.3\lib\net452\Kingdee.BOS.WebApi.Client.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.WebApi.ServicesStub, Version=7.3.1150.7, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.3.2.3\lib\net452\Kingdee.BOS.WebApi.ServicesStub.dll</HintPath> <Reference Include="Kingdee.BOS.WebApi.Client"> <HintPath>C:\Users\14027\Desktop\最新版bin文件\Kingdee.BOS.WebApi.Client.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.WeiXin.Core, Version=7.5.1507.2, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.Common.7.5.1.2\lib\net452\Kingdee.BOS.WeiXin.Core.dll</HintPath> @@ -135,11 +133,9 @@ <Reference Include="ZD.Cloud.Logger, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.Logger.1.1.0\lib\net40\ZD.Cloud.Logger.dll</HintPath> </Reference> <Reference Include="ZD.Cloud.WebApi, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.3.2.3\lib\net452\ZD.Cloud.WebApi.dll</HintPath> </Reference> <Reference Include="ZD.Share, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Share.1.0.3\lib\net452\ZD.Share.dll</HintPath> <SpecificVersion>False</SpecificVersion> <HintPath>C:\Users\14027\Desktop\bin文件\ZD.Share.dll</HintPath> </Reference> </ItemGroup> <ItemGroup> @@ -149,7 +145,6 @@ <Compile Include="Properties\AssemblyInfo.cs" /> </ItemGroup> <ItemGroup> <None Include="Config\kdapi.config" /> <None Include="packages.config" /> </ItemGroup> <ItemGroup> @@ -165,6 +160,10 @@ <Project>{c13e0c61-b1c8-45dd-96f6-3c7dd573c6e4}</Project> <Name>Demo.BLL</Name> </ProjectReference> <ProjectReference Include="..\Demo.Utility\Demo.Utility.csproj"> <Project>{0AF059FC-D287-42C4-8835-133C3D96243A}</Project> <Name>Demo.Utility</Name> </ProjectReference> </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> </Project> src/BLL/Demo.TimedTaskPlugIn/PRD/DayPlanChangeDynamicAlignment.cs
@@ -1,601 +1,489 @@ using System.ComponentModel; using Kingdee.BOS.Contracts; using Kingdee.BOS; using Kingdee.BOS.Core; using Kingdee.BOS.ServiceHelper; using System.Data; using ZD.Cloud.Logger; using Newtonsoft.Json.Linq; using System; using Kingdee.BOS.Util; using System.Linq; using ZD.Cloud.WebApi; using Demo.Model.Model; using Demo.Model.Model.PODemandPlan; using System.Diagnostics; using System.Collections.Generic; using ZD.Share.Common; //using System.ComponentModel; //using Kingdee.BOS.Contracts; //using Kingdee.BOS; //using Kingdee.BOS.Core; //using Kingdee.BOS.ServiceHelper; //using System.Data; //using ZD.Cloud.Logger; //using Newtonsoft.Json.Linq; //using System; //using Kingdee.BOS.Util; //using System.Linq; //using ZD.Cloud.WebApi; //using Demo.Model.Model; //using Demo.Model.Model.PODemandPlan; //using System.Diagnostics; //using System.Collections.Generic; //using ZD.Share.Common; namespace Demo.TimedTaskPlugIn.PRD { [Description("日计划发生变动时执行")] [HotUpdate] public class DayPlanChangeDynamicAlignment : Kingdee.BOS.Contracts.IScheduleService { CloudClient cloudClient = new CloudClient("http://localhost/K3Cloud/"); public Context Context; List<PRD_Inventory> ListInventory;//库存明细 List<PRD_Inventory> ListInventoryByStockOrgId;//物料总库存 public void Run(Context ctx, Schedule schedule) { try { Context = ctx; int Count = DBServiceHelper.ExecuteScalar<int>(Context, "/*dialect*/ select count(*) from SC_WORKBILLSORTBILLSub where ISNULL(FCOMPLETE,'')='' ", 0); if (Count > 0) { CompleteSetAnalysis(); DayPlanPPBomBill(); Extraction(); } } catch (System.Exception ex) { LogHelper.Error(ex.Message.ToString()); } } /// <summary> /// 齐套分析 /// </summary> public void CompleteSetAnalysis() { try { Stopwatch sw = new Stopwatch(); sw.Start();//开始计时 //清空齐套临时表 DBServiceHelper.Execute(Context, "/*dialect*/ delete JIT_MOMaterReadysBill "); //更新状态 DBServiceHelper.Execute(Context, "/*dialect*/ update Sc_WorkBillSortBillsub set FCOMPLETE='' "); //获取当前即时库存 按照物料+库存组织+货主+库存数量 DataSet ds = DBServiceHelper.ExecuteDataSet(Context, @" /*dialect*/ select isnull(a.FBASEQTY,0)-ISNULL(b.FHUseQty,0) FBASEQTY,T1.FStockOrgId,T1.FMATERIALID,a.FOWNERID,c.FNUMBER from ( select a.FHPRDORGID FStockOrgId,T2.FMATERIALID from SC_WORKBILLSORTBILLMAIN a join SC_WORKBILLSORTBILLSub b on a.FID = b.FID join T_PRD_PPBOM T1 on a.FPRDMOMAINID = t1.FMoId and a.FPRDMOENTYID = t1.FMOENTRYID LEFT JOIN(select FID,FMATERIALID from T_PRD_PPBOMENTRY group by FMATERIALID,FID) T2 on T1.FID = t2.FID group by a.FHPRDORGID,T2.FMATERIALID ) T1 LEFT JOIN T_STK_Inventory a on T1.FStockOrgId = a.FStockOrgId and T1.FMATERIALID =a.FMATERIALID LEFT JOIN JIT_MOMaterReadysBill B ON T1.FStockOrgId = b.FHSTOCKORGID and T1.FMATERIALID =b.FHMATERID and a.FOwnerId = b.FOwnerId LEFT join T_ORG_Organizations c on a.FOWNERID = c.FORGID --where T1.FMATERIALID in (105773) "); ListInventory = ds.ToModelList<PRD_Inventory>(); //总库存 物料+库存组织+库存数量 ds = DBServiceHelper.ExecuteDataSet(Context, @" /*dialect*/ select sum(isnull(a.FBASEQTY,0)-ISNULL(b.FHUseQty,0))FBASEQTY,T1.FStockOrgId,T1.FMATERIALID from ( select a.FHPRDORGID FStockOrgId,T2.FMATERIALID from SC_WORKBILLSORTBILLMAIN a join SC_WORKBILLSORTBILLSub b on a.FID = b.FID join T_PRD_PPBOM T1 on a.FPRDMOMAINID = t1.FMoId and a.FPRDMOENTYID = t1.FMOENTRYID LEFT JOIN(select FID,FMATERIALID from T_PRD_PPBOMENTRY group by FMATERIALID,FID) T2 on T1.FID = t2.FID group by a.FHPRDORGID,T2.FMATERIALID ) T1 LEFT JOIN T_STK_Inventory a on T1.FStockOrgId = a.FStockOrgId and T1.FMATERIALID =a.FMATERIALID LEFT JOIN JIT_MOMaterReadysBill B ON T1.FStockOrgId = b.FHSTOCKORGID and T1.FMATERIALID =b.FHMATERID --where T1.FMATERIALID in (105773) group by T1.FStockOrgId,T1.FMATERIALID "); ListInventoryByStockOrgId = ds.ToModelList<PRD_Inventory>(); //需要齐套分析的数据 string sql = @" /*dialect*/ select a.FPRDMOMAINID,a.FPRDMOENTYID,a.FID,b.FEntryID,a.FHPRDORGID FStockOrgId,t5.FNUMBER as OrgFnumber,a.FHOrderLev,b.FHQTY,b.FHMASTERDATE,T1.FBillNo,T1.FMOBillNO,T1.FMOEntrySeq,T1.FMoId,T1.FMaterialID,T1.FQty, T2.FMATERIALID FMATERIALID2, T4.FNumber,T2.FNeedQty,FNeedQty/FQty dwyl,(FHQTY-ISNULL(FProductNum,0))*(FNeedQty/FQty) PlanCount from SC_WORKBILLSORTBILLMAIN a join SC_WORKBILLSORTBILLSub b on a.FID = b.FID join T_PRD_PPBOM T1 on a.FPRDMOMAINID = t1.FMoId and a.FPRDMOENTYID = t1.FMOENTRYID LEFT JOIN(select FID, MAX(FENTRYID) FENTRYID, SUM(FNeedQty) FNeedQty, FMATERIALID from T_PRD_PPBOMENTRY group by FMATERIALID, FID ) T2 on T1.FID = t2.FID --LEFT JOIN T_STK_Inventory T3 on t2.FMATERIALID = t3.FMATERIALID JOIN T_BD_MATERIAL T4 on T2.FMATERIALID = T4.FMATERIALID JOIN T_ORG_Organizations t5 on a.FHPRDORGID = t5.FORGID --条件为今天往后的日计划 + 今天之前未关闭的日计划 where (FHEntryCloseDate is null and DATEDIFF(D,GETDATE(),FHMASTERDATE)<0)or DATEDIFF(D,GETDATE(),FHMASTERDATE)>=0 ORDER BY b.FHMASTERDATE,a.FHOrderLev "; ds = DBServiceHelper.ExecuteDataSet(Context, sql); List<PRD_PPBOM> BomList = ds.ToModelList<PRD_PPBOM>(); //日计划+生产订单子表编码ID var DatePlanList = BomList.GroupBy(p => new { p.FHMASTERDATE, p.FPRDMOENTYID }).Select(x => new PRD_PPBOM { FHMASTERDATE = x.Key.FHMASTERDATE, FPRDMOENTYID = x.Key.FPRDMOENTYID }).ToList(); //CompleteAnalysisTempModel 用于存储临时需要插入数据 List<CompleteAnalysisTempModel> completeAnalysisTempModel = new List<CompleteAnalysisTempModel>(); int i = 1; //创建字典 用于储存物料 + 占用数量 Dictionary<string, decimal> occupyDic = new Dictionary<string, decimal>(); foreach (var item in DatePlanList) { //筛选出当日计划数据 var _BomList = BomList.Where(x => x.FHMASTERDATE == item.FHMASTERDATE && x.FPRDMOENTYID == item.FPRDMOENTYID).ToList(); foreach (var _item in _BomList) { //该日计划物料需要数 decimal need = _item.PlanCount; var sjkcList = ListInventoryByStockOrgId.Where(x => x.FMATERIALID == _item.FMATERIALID2 && x.FStockOrgId == _item.FStockOrgId).FirstOrDefault(); //真正需要取计算的数量(拆分货主) //货主匹配 List<PRD_Inventory> _ListInventory = ListInventory.Where(c => c.FMATERIALID == _item.FMATERIALID2 && c.FStockOrgId == _item.FStockOrgId && c.FBASEQTY > 0).ToList(); if (_ListInventory.Count > 0) { decimal _fLackCount = _item.PlanCount > sjkcList.FBASEQTY ? (_item.PlanCount - sjkcList.FBASEQTY) : 0;//缺料数量 foreach (var Inventory in _ListInventory) { if (need == 0) break; decimal fCompleteCount = need >= Inventory.FBASEQTY ? Inventory.FBASEQTY : need;//齐套数量 decimal occupyMaterial = 0; if (!occupyDic.ContainsKey(_item.FMATERIALID2)) { occupyDic.Add(_item.FMATERIALID2, fCompleteCount); } else { occupyMaterial = occupyDic[_item.FMATERIALID2]; occupyDic[_item.FMATERIALID2] = occupyMaterial + fCompleteCount; } completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel { FHMainICMOInterIDr = _item.FPRDMOMAINID, FHMainICMOEntryID = _item.FPRDMOENTYID, FHICMOInterID = _item.FID.ToString(), FHICMOEntryID = _item.FEntryID.ToString(), FHMaterID = _item.FNumber, FHStockOrgID = _item.OrgFnumber, FHPRDORGID = _item.OrgFnumber, FPRDBillNo = _item.FMOBillNO, FOwnerTypeId = "BD_OwnerOrg", FOwnerId = Inventory.Fnumber, FUnitDosage = _item.dwyl.ToString(),//单位用量 FSumPlanCount = _item.PlanCount.ToString(),//计划总数量 FCompleteCount = fCompleteCount, //齐套数量 FLackCount = _fLackCount,//缺料数量 FHStockQty = sjkcList.FBASEQTY,//即时库存 FHLeftQty = Inventory.FBASEQTY,//可用数量 FOccupyCount = occupyMaterial,//占用数量 FComPlete = sjkcList.FBASEQTY >= _item.PlanCount ? "齐套" : "未齐套", FPlanDate = item.FHMASTERDATE // 日计划日期 }); //扣减总库存数量 sjkcList.FBASEQTY = sjkcList.FBASEQTY >= fCompleteCount ? sjkcList.FBASEQTY - fCompleteCount : 0; //剩余日计划需求数量 need = need >= Inventory.FBASEQTY ? need - Inventory.FBASEQTY : 0; //扣减消耗库存 Inventory.FBASEQTY = Inventory.FBASEQTY - fCompleteCount; } } else { decimal occupyMaterial = 0; if (occupyDic.ContainsKey(_item.FMATERIALID2)) occupyMaterial = occupyDic[_item.FMATERIALID2]; completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel { FHMainICMOInterIDr = _item.FPRDMOMAINID, FHMainICMOEntryID = _item.FPRDMOENTYID, FHICMOInterID = _item.FID.ToString(), FHICMOEntryID = _item.FEntryID.ToString(), FHMaterID = _item.FNumber, FHStockOrgID = _item.OrgFnumber, FHPRDORGID = _item.OrgFnumber, FPRDBillNo = _item.FMOBillNO, FOwnerTypeId = "BD_OwnerOrg", FUnitDosage = _item.dwyl.ToString(),//单位用量 FSumPlanCount = _item.PlanCount.ToString(),//计划总数量 FCompleteCount = 0, //齐套数量 FLackCount = _item.PlanCount,//缺料数量 FHStockQty = 0,//即时库存 FHLeftQty = 0,//可用数量 FOccupyCount = occupyMaterial,//占用数量 FComPlete = "未齐套", FPlanDate = item.FHMASTERDATE // 日计划日期 }); } } //Thread.Sleep(100); i++; } i = 1; foreach (var item in completeAnalysisTempModel) { // this.View.Session["ProcessRateValue"] = Convert.ToInt32(this.View.Session["ProcessRateValue"]) + Convert.ToInt32(1 / completeAnalysisTempModel.Count * 90); JObject jsonRoot = new JObject(); jsonRoot.Add("Creator", ""); jsonRoot.Add("NeedUpDateFields", new JArray()); jsonRoot.Add("NeedReturnFields", new JArray()); jsonRoot.Add("IsDeleteEntry", "true"); jsonRoot.Add("SubSystemId", ""); jsonRoot.Add("IsVerifyBaseDataField", ""); JObject jsonModel = new JObject(); jsonModel.Add("FHMainICMOInterIDr", item.FHMainICMOInterIDr); jsonModel.Add("FHMainICMOEntryID", item.FHMainICMOEntryID); jsonModel.Add("FHICMOInterID", item.FHICMOInterID); jsonModel.Add("FHICMOEntryID", item.FHICMOEntryID); jsonModel.Add("FHMaterID", new JObject() { ["FNUMBER"] = item.FHMaterID }); jsonModel.Add("FHUseQty", item.FHUseQty); jsonModel.Add("FHStockOrgID", new JObject() { ["FNUMBER"] = item.FHStockOrgID }); jsonModel.Add("FHStockQty", item.FHStockQty); jsonModel.Add("FHLeftQty", item.FHLeftQty); jsonModel.Add("FHPRDORGID", new JObject() { ["FNUMBER"] = item.FHStockOrgID }); jsonModel.Add("FUnitDosage", item.FUnitDosage); jsonModel.Add("FSumPlanCount", item.FSumPlanCount); jsonModel.Add("FCompleteCount", item.FCompleteCount); jsonModel.Add("FPRDBillNo", item.FPRDBillNo); jsonModel.Add("FOwnerTypeId", item.FOwnerTypeId); jsonModel.Add("FComPlete", item.FComPlete); jsonModel.Add("FLackCount", item.FLackCount); jsonModel.Add("FOccupyCount", item.FOccupyCount); jsonModel.Add("FPlanDate", item.FPlanDate); if (item.FOwnerId != null) jsonModel.Add("FOwnerId", new JObject() { ["FNUMBER"] = item.FOwnerId }); jsonRoot.Add("Model", jsonModel); var result = cloudClient.Save("paez_CompleteAnalysisTemp", jsonRoot.ToString()); JObject saveObj = JObject.Parse(result); string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); if (saveIsSuc != "TRUE") { LogHelper.Error(jsonRoot.ToString()); } i++; } //执行完成后 更新日计划工单状态 DBServiceHelper.Execute(Context, @" /*dialect*/update Sc_WorkBillSortBillSub set FComplete = '未齐套' where FEntryID IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBill where isnull(FCOMPLETE,'未齐套') ='未齐套') "); DBServiceHelper.Execute(Context, @" /*dialect*/update Sc_WorkBillSortBillSub set FComplete = '齐套' where FEntryID NOT IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBill where isnull(FCOMPLETE,'未齐套') ='未齐套') "); sw.Stop();//结束计时 LogHelper.Info("运行总时长:" + sw.Elapsed); } catch (Exception ex) { LogHelper.Error(ex.Message.ToString()); } } /// <summary> /// 日计划用料清单生成 /// </summary> public void DayPlanPPBomBill() { //锁定的日计划不生成 try { string sql = string.Format(@" /*dialect*/ select t1.FID,t1.FEntryID,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,isnull(T9.FBillNo,'')FBillNo,t10.FNUMBER FORGNUMBER,t11.FNUMBER FHSOURCENUMBER,FSCRAPRATE,FFIXSCRAPQTY,T9.FID AS DayPlanFID 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 T5 ON T3.FMATERIALID=T5.FMATERIALID JOIN T_BD_MATERIAL T6 ON T4.FMATERIALID=T6.FMATERIALID LEFT JOIN T_BD_UNIT T7 ON T3.FUNITID = T7.FUNITID LEFT JOIN T_BD_UNIT T8 ON T4.FUNITID = T8.FUNITID LEFT JOIN Sc_DayPlanPPBomBillMain T9 ON T1.FEntryID=T9.FDayPlanFID LEFT join T_ORG_Organizations t10 on t2.FHPRDORGID = t10.FORGID LEFT join T_ENG_WORKCENTER t11 on t2.FHSOURCEID = t11.FID " ); 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["FENTRYID"].ToString(), FHSourceID = dr["FHSOURCENUMBER"].ToString(), FNumerator = dr["FNumerator"].ToString(), FDenominator = dr["FDenominator"].ToString(), FFIXSCRAPQTY = dr["FFIXSCRAPQTY"].ToString(), FHQtyScrap = dr["FSCRAPRATE"].ToString(), }); } var fidList = DayPlanMaterial.Select(x => x.FEntryID).Distinct().ToList(); foreach (var item in fidList) { var _DayPlanMaterial = DayPlanMaterial.Where(x => x.FEntryID == item).ToList(); JObject model = new JObject(); 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);//日计划工单内码 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);//变动损耗率% Entry.Add(ModelEnty); } model.Add("FEntity", Entry); if (!string.IsNullOrEmpty(_DayPlanMaterial[0].FID)) model.Add("FID", _DayPlanMaterial[0].FID); JObject jsonRoot = new JObject() { ["Creator"] = "", ["NeedUpDateFields"] = new JArray(), ["NeedReturnFields"] = new JArray(), ["IsDeleteEntry"] = "true", ["SubSystemId"] = "", ["IsVerifyBaseDataField"] = "false", ["Model"] = model }; var result = cloudClient.Save("Paez_Sc_DayPlanPPBomBill", jsonRoot.ToString()); JObject saveObj = JObject.Parse(result); string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); if (saveIsSuc != "TRUE") LogHelper.Error(saveIsSuc); } } } catch (Exception ex) { LogHelper.Error(ex.Message.ToString()); } } /// <summary> /// 提料计划 /// </summary> public void Extraction() { string sql = string.Format(@"/*dialect*/ select t1.FID from Sc_WorkBillSortBillMain t1"); DataTable fidDt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; string FDayPlanWorkID = ""; foreach (DataRow dr in fidDt.Rows) { FDayPlanWorkID += Convert.ToString(dr["FID"]) + ","; } FDayPlanWorkID = FDayPlanWorkID.Substring(0, FDayPlanWorkID.Length - 1); //提料计划预处理 清理提料计划单数据 更新采购订单提料计划数量 sql = string.Format(@" /*dialect*/ exec [提料计划预处理] '{0}' ", FDayPlanWorkID.Replace(",", "-")); DBServiceHelper.Execute(Context, sql); //采购订单数据 sql = @" /*dialect*/ select t1.FID,t1.FBillNo,t2.FENTRYID,t1.FSUPPLIERID,t3.fnumber,t2.FMATERIALID,(t2.FQTY-t2.FPODemandPlanCount)FQTY,FPurchaseOrgId FStockOrgId,t5.FNUMBER FORGNumber,FSTOCKINQTY,FReceiveQty,FCloseStatus,FMRPCLOSESTATUS from t_PUR_POOrder t1 join t_PUR_POOrderEntry t2 on t1.FID = t2.FID join t_BD_Supplier t3 on t1.FSUPPLIERID = t3.FSUPPLIERID join T_PUR_POORDERENTRY_R t4 on t2.FENTRYID = t4.FENTRYID join T_ORG_Organizations t5 on t1.FPurchaseOrgId = t5.FORGID where t2.FQTY-t2.FPODemandPlanCount>0 and FCloseStatus in('A') and FMRPCLOSESTATUS in('A') "; List<PurchaseInventory> PurchaseInventory = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<PurchaseInventory>(); LogHelper.Info("采购订单数据" + sql); sql = string.Format(@" /*dialect*/ SELECT T1.FID,FHMATERID,FHMASTERDATE,FHQTY,FCOMPLETECOUNT,FPRDMOMAINID,T2.FENTRYID,T1.FBILLNO, FNeedQty,(FLeadtime+FLeadTtime2)FFIXLEADTIME,t5.FMAXPOQTY,FJITBatch FMINPOQTY,FJITMATERIALGROUP,FJITMaterielDemand,FJITSafeStock,t3.FMATERIALID,t6.FNumber,FHQTY*FNeedQty NeedQty,FHPRDORGID FStockOrgId FROM SC_WORKBILLSORTBILLMAIN T1 JOIN SC_WORKBILLSORTBILLSUB T2 ON T1.FID=T2.FID LEFT JOIN(SELECT T1.FID,max(t2.FMATERIALID)FMATERIALIDMAIN, max(t2.FMoId)FMoId,MAX(FENTRYID) FENTRYID, SUM(convert(decimal(18, 2), FBASENUMERATOR / FBASEDENOMINATOR))FNeedQty, T1.FMATERIALID from T_PRD_PPBOMENTRY T1 JOIN T_PRD_PPBOM T2 on t1.FID = t2.FID group by T1.FMATERIALID, T1.FID) T3 on T1.FPRDMOMAINID = t3.FMoId and T1.FHMATERID = t3.FMATERIALIDMAIN JOIN T_BD_MATERIAL T6 ON T3.FMATERIALID = T6.FMATERIALID join t_BD_MaterialBase t4 on t3.FMATERIALID = t4.FMATERIALID join t_BD_MaterialPlan t5 on t3.FMATERIALID = t5.FMATERIALID WHERE DATEDIFF(D,GETDATE(),FHMASTERDATE) >=0 AND FDayPlanQuantity>FCOMPLETECOUNT AND FERPCLSID=1 AND T2.FENTRYID not in (select distinct FHSOURCEENTRYID from CG_PODEMANDPLANBILLSUB where FHSOURCEINTERID IN ({0})) AND T1.FID in ({0}) order by FHMASTERDATE ", FDayPlanWorkID); LogHelper.Info("提料数据" + sql); DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql); List<DayPlanPpbom> DayPlanPpbom = ds.ToModelList<DayPlanPpbom>(); var MaterialIDList = DayPlanPpbom.GroupBy(p => new { p.FMATERIALID, p.FStockOrgId }).Select(x => new PODemandPlanTemp { FMATERIALID = x.Key.FMATERIALID, FStockOrgId = x.Key.FStockOrgId }).ToList(); var _MaterialIDList = MaterialIDList.Where(p => p.FMATERIALID == "105773").ToList(); LogHelper.Info("物料行数" + MaterialIDList.Count); //提料计划数据集临时存储集合 List<PODemandPlanTemp> PODemandPlanTemp = new List<PODemandPlanTemp>(); //sql集合 更新采购订单占用的提料计划数量 List<string> sqlList = new List<string>(); //MaterialIDList = new List<string> { "105773" }; foreach (var item in MaterialIDList) { LogHelper.Info(item.FMATERIALID.ToString()); List<DayPlanPpbom> _DayPlanPpbom = DayPlanPpbom.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId).ToList(); decimal FMINPOQTY = _DayPlanPpbom.FirstOrDefault().FMINPOQTY;//最小起订量 double FFIXLEADTIME = _DayPlanPpbom.FirstOrDefault().FFIXLEADTIME;//提前期 string FJITmaterialGroup = _DayPlanPpbom.FirstOrDefault().FJITmaterialGroup;//jit物料分类 string FJITMaterielDemand = _DayPlanPpbom.FirstOrDefault().FJITMaterielDemand; //JIT物料需求供货周期 string FJITSafeStock = _DayPlanPpbom.FirstOrDefault().FJITSafeStock; //JIT安全库存 decimal NeedQty = 0; DateTime DATE = _DayPlanPpbom.FirstOrDefault().FHMASTERDATE; int i = 1; //记录在最小采购量需求下的日计划明细FentyrID List<int> FEntryIdList = new List<int>(); foreach (var _item in _DayPlanPpbom) { if (NeedQty == 0) DATE = Convert.ToDateTime(_item.FHMASTERDATE).AddDays(-FFIXLEADTIME); FEntryIdList.Add(_item.FENTRYID); NeedQty += _item.NeedQty; if ((FJITmaterialGroup == "总量控制规格类" || FJITmaterialGroup == "订单专用个性类") && FEntryIdList.Count < Convert.ToInt32(FJITMaterielDemand)) //订单专用个性类 continue; if (NeedQty >= FMINPOQTY) { List<PurchaseInventory> _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).ToList(); if (_PurchaseInventory.Count == 0) { NeedQty = 0; break; } foreach (var Purchase in _PurchaseInventory) { LogHelper.Info("Purchase"); LogHelper.Info("物料:" + Purchase.FMATERIALID + ",数量:" + Purchase.FQTY); if (Purchase.FQTY >= NeedQty) { List<int> mmm = new List<int>(); foreach (int id in FEntryIdList) { mmm.Add(id); var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault(); PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp { FID = DayPlanPpbomls.FID, FHMASTERDATE = DATE, FQty = DayPlanPpbomls.NeedQty, FBILLNO = DayPlanPpbomls.FBILLNO, FENTRYID = DayPlanPpbomls.FENTRYID, FMATERIALID = DayPlanPpbomls.FMATERIALID, FNumber = DayPlanPpbomls.FNumber, OLDDATE = DayPlanPpbomls.FHMASTERDATE, FFIXLEADTIME = FFIXLEADTIME, PurchseFID = Purchase.FID, PurchseFentryID = Purchase.FENTRYID, FSUPPLIERID = Purchase.FSUPPLIERID, PurchseFNUMBER = Purchase.FNUMBER, PurchseFBillNo = Purchase.FBillNo, PurchseFqty = Purchase.FQTY, FStockOrgId = Purchase.FStockOrgId, //采购组织 FORGNumber = Purchase.FORGNumber }); //扣除日计划明细已被分配的数量 DayPlanPpbomls.NeedQty = 0; } FEntryIdList.Clear(); //更新采购订单 sqlList.Add($"/*dialect*/ update t_PUR_POOrderEntry set FPODemandPlanCount =isnull(FPODemandPlanCount,0)+ '{NeedQty}' where FENTRYID = {Purchase.FENTRYID}"); //扣除当前行对应采购订单数量 var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault(); ls.FQTY -= NeedQty; break; } else { NeedQty = NeedQty - Purchase.FQTY; decimal _NeedQty = Purchase.FQTY;//采购订单数量 List<int> mmm = new List<int>(); foreach (int id in FEntryIdList) { var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault(); decimal Qty = DayPlanPpbomls.NeedQty; if (Qty > _NeedQty) Qty = _NeedQty; _NeedQty = _NeedQty - DayPlanPpbomls.NeedQty; PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp { FID = DayPlanPpbomls.FID, FHMASTERDATE = DATE, FQty = Qty, FBILLNO = DayPlanPpbomls.FBILLNO, FENTRYID = DayPlanPpbomls.FENTRYID, FMATERIALID = DayPlanPpbomls.FMATERIALID, FNumber = DayPlanPpbomls.FNumber, OLDDATE = DayPlanPpbomls.FHMASTERDATE, FFIXLEADTIME = FFIXLEADTIME, PurchseFID = Purchase.FID, PurchseFentryID = Purchase.FENTRYID, FSUPPLIERID = Purchase.FSUPPLIERID, PurchseFNUMBER = Purchase.FNUMBER, PurchseFBillNo = Purchase.FBillNo, PurchseFqty = Purchase.FQTY, FStockOrgId = Purchase.FStockOrgId, //采购组织 FORGNumber = Purchase.FORGNumber }); DayPlanPpbomls.NeedQty -= Qty; //更新采购订单 sqlList.Add($"/*dialect*/ update t_PUR_POOrderEntry set FPODemandPlanCount = isnull(FPODemandPlanCount,0)+ '{Qty}' where FENTRYID = {Purchase.FENTRYID}"); //更新Model var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault(); ls.FQTY -= Qty; if (_NeedQty < 0) { foreach (var mm in mmm) { FEntryIdList.Remove(mm); } break; } mmm.Add(id); } foreach (var mm in mmm) { FEntryIdList.Remove(mm); } } } NeedQty = 0; } #region 剩下不足时按最小采购批次生成 //剩下不足时按最小采购批次生成 //else if (i == _DayPlanPpbom.Count && NeedQty > 0) //namespace Demo.TimedTaskPlugIn.PRD //{ // NeedQty = FMINPOQTY; // [Description("日计划发生变动时执行")] // [HotUpdate] // public class DayPlanChangeDynamicAlignment : Kingdee.BOS.Contracts.IScheduleService // { // CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); // public Context Context; // List<PRD_Inventory> ListInventory;//库存明细 // List<PRD_Inventory> ListInventoryByStockOrgId;//物料总库存 // public void Run(Context ctx, Schedule schedule) // { // try // { // Context = ctx; // int Count = DBServiceHelper.ExecuteScalar<int>(Context, "/*dialect*/ select count(*) from SC_WORKBILLSORTBILLSub where ISNULL(FCOMPLETE,'')='' ", 0); // if (Count > 0) // { // CompleteSetAnalysis(); // DayPlanPPBomBill(); // Extraction(); // } // } // catch (System.Exception ex) // { // LogHelper.Error(ex.Message.ToString()); // } // } // /// <summary> // /// 齐套分析 // /// </summary> // public void CompleteSetAnalysis() // { // try // { // Stopwatch sw = new Stopwatch(); // sw.Start();//开始计时 // //清空齐套临时表 // DBServiceHelper.Execute(Context, "/*dialect*/ delete JIT_MOMaterReadysBill "); // //更新状态 // DBServiceHelper.Execute(Context, "/*dialect*/ update Sc_WorkBillSortBillsub set FCOMPLETE='' "); // //获取当前即时库存 按照物料+库存组织+货主+库存数量 // DataSet ds = DBServiceHelper.ExecuteDataSet(Context, @" ///*dialect*/ // select isnull(a.FBASEQTY,0)-ISNULL(b.FHUseQty,0) FBASEQTY,T1.FStockOrgId,T1.FMATERIALID,a.FOWNERID,c.FNUMBER from //( //select a.FHPRDORGID FStockOrgId,T2.FMATERIALID from SC_WORKBILLSORTBILLMAIN a //join SC_WORKBILLSORTBILLSub b on a.FID = b.FID //join T_PRD_PPBOM T1 on a.FPRDMOMAINID = t1.FMoId and a.FPRDMOENTYID = t1.FMOENTRYID //LEFT JOIN(select FID,FMATERIALID from T_PRD_PPBOMENTRY //group by FMATERIALID,FID) T2 on T1.FID = t2.FID //group by a.FHPRDORGID,T2.FMATERIALID //) T1 //LEFT JOIN T_STK_Inventory a on T1.FStockOrgId = a.FStockOrgId and T1.FMATERIALID =a.FMATERIALID //LEFT JOIN JIT_MOMaterReadysBill B ON T1.FStockOrgId = b.FHSTOCKORGID and T1.FMATERIALID =b.FHMATERID and a.FOwnerId = b.FOwnerId //LEFT join T_ORG_Organizations c on a.FOWNERID = c.FORGID //--where T1.FMATERIALID in (105773) //"); // ListInventory = ds.ToModelList<PRD_Inventory>(); // //总库存 物料+库存组织+库存数量 // ds = DBServiceHelper.ExecuteDataSet(Context, @" ///*dialect*/ // select sum(isnull(a.FBASEQTY,0)-ISNULL(b.FHUseQty,0))FBASEQTY,T1.FStockOrgId,T1.FMATERIALID from //( //select a.FHPRDORGID FStockOrgId,T2.FMATERIALID from SC_WORKBILLSORTBILLMAIN a //join SC_WORKBILLSORTBILLSub b on a.FID = b.FID //join T_PRD_PPBOM T1 on a.FPRDMOMAINID = t1.FMoId and a.FPRDMOENTYID = t1.FMOENTRYID //LEFT JOIN(select FID,FMATERIALID from T_PRD_PPBOMENTRY //group by FMATERIALID,FID) T2 on T1.FID = t2.FID //group by a.FHPRDORGID,T2.FMATERIALID //) T1 //LEFT JOIN T_STK_Inventory a on T1.FStockOrgId = a.FStockOrgId and T1.FMATERIALID =a.FMATERIALID //LEFT JOIN JIT_MOMaterReadysBill B ON T1.FStockOrgId = b.FHSTOCKORGID and T1.FMATERIALID =b.FHMATERID //--where T1.FMATERIALID in (105773) //group by T1.FStockOrgId,T1.FMATERIALID //"); // ListInventoryByStockOrgId = ds.ToModelList<PRD_Inventory>(); // //需要齐套分析的数据 // string sql = @" ///*dialect*/ //select a.FPRDMOMAINID,a.FPRDMOENTYID,a.FID,b.FEntryID,a.FHPRDORGID FStockOrgId,t5.FNUMBER as OrgFnumber,a.FHOrderLev,b.FHQTY,b.FHMASTERDATE,T1.FBillNo,T1.FMOBillNO,T1.FMOEntrySeq,T1.FMoId,T1.FMaterialID,T1.FQty, //T2.FMATERIALID FMATERIALID2, T4.FNumber,T2.FNeedQty,FNeedQty/FQty dwyl,(FHQTY-ISNULL(FProductNum,0))*(FNeedQty/FQty) PlanCount from SC_WORKBILLSORTBILLMAIN a //join SC_WORKBILLSORTBILLSub b on a.FID = b.FID //join T_PRD_PPBOM T1 on a.FPRDMOMAINID = t1.FMoId and a.FPRDMOENTYID = t1.FMOENTRYID //LEFT JOIN(select FID, MAX(FENTRYID) FENTRYID, SUM(FNeedQty) FNeedQty, FMATERIALID from T_PRD_PPBOMENTRY //group by FMATERIALID, FID ) T2 on T1.FID = t2.FID // --LEFT JOIN T_STK_Inventory T3 on t2.FMATERIALID = t3.FMATERIALID //JOIN T_BD_MATERIAL T4 on T2.FMATERIALID = T4.FMATERIALID //JOIN T_ORG_Organizations t5 on a.FHPRDORGID = t5.FORGID //--条件为今天往后的日计划 + 今天之前未关闭的日计划 //where (FHEntryCloseDate is null and DATEDIFF(D,GETDATE(),FHMASTERDATE)<0)or DATEDIFF(D,GETDATE(),FHMASTERDATE)>=0 //ORDER BY b.FHMASTERDATE,a.FHOrderLev //"; // ds = DBServiceHelper.ExecuteDataSet(Context, sql); // List<PRD_PPBOM> BomList = ds.ToModelList<PRD_PPBOM>(); // //日计划+生产订单子表编码ID // var DatePlanList = BomList.GroupBy(p => new { p.FHMASTERDATE, p.FPRDMOENTYID }).Select(x => new PRD_PPBOM { FHMASTERDATE = x.Key.FHMASTERDATE, FPRDMOENTYID = x.Key.FPRDMOENTYID }).ToList(); // //CompleteAnalysisTempModel 用于存储临时需要插入数据 // List<CompleteAnalysisTempModel> completeAnalysisTempModel = new List<CompleteAnalysisTempModel>(); // int i = 1; // //创建字典 用于储存物料 + 占用数量 // Dictionary<string, decimal> occupyDic = new Dictionary<string, decimal>(); // foreach (var item in DatePlanList) // { // //筛选出当日计划数据 // var _BomList = BomList.Where(x => x.FHMASTERDATE == item.FHMASTERDATE && x.FPRDMOENTYID == item.FPRDMOENTYID).ToList(); // foreach (var _item in _BomList) // { // //该日计划物料需要数 // decimal need = _item.PlanCount; // var sjkcList = ListInventoryByStockOrgId.Where(x => x.FMATERIALID == _item.FMATERIALID2 && x.FStockOrgId == _item.FStockOrgId).FirstOrDefault(); // //真正需要取计算的数量(拆分货主) // //货主匹配 // List<PRD_Inventory> _ListInventory = ListInventory.Where(c => c.FMATERIALID == _item.FMATERIALID2 && c.FStockOrgId == _item.FStockOrgId && c.FBASEQTY > 0).ToList(); // if (_ListInventory.Count > 0) // { // decimal _fLackCount = _item.PlanCount > sjkcList.FBASEQTY ? (_item.PlanCount - sjkcList.FBASEQTY) : 0;//缺料数量 // foreach (var Inventory in _ListInventory) // { // if (need == 0) // break; // decimal fCompleteCount = need >= Inventory.FBASEQTY ? Inventory.FBASEQTY : need;//齐套数量 // decimal occupyMaterial = 0; // if (!occupyDic.ContainsKey(_item.FMATERIALID2)) // { // occupyDic.Add(_item.FMATERIALID2, fCompleteCount); // } // else // { // occupyMaterial = occupyDic[_item.FMATERIALID2]; // occupyDic[_item.FMATERIALID2] = occupyMaterial + fCompleteCount; // } // completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel // { // FHMainICMOInterIDr = _item.FPRDMOMAINID, // FHMainICMOEntryID = _item.FPRDMOENTYID, // FHICMOInterID = _item.FID.ToString(), // FHICMOEntryID = _item.FEntryID.ToString(), // FHMaterID = _item.FNumber, // FHStockOrgID = _item.OrgFnumber, // FHPRDORGID = _item.OrgFnumber, // FPRDBillNo = _item.FMOBillNO, // FOwnerTypeId = "BD_OwnerOrg", // FOwnerId = Inventory.Fnumber, // FUnitDosage = _item.dwyl.ToString(),//单位用量 // FSumPlanCount = _item.PlanCount.ToString(),//计划总数量 // FCompleteCount = fCompleteCount, //齐套数量 // FLackCount = _fLackCount,//缺料数量 // FHStockQty = sjkcList.FBASEQTY,//即时库存 // FHLeftQty = Inventory.FBASEQTY,//可用数量 // FOccupyCount = occupyMaterial,//占用数量 // FComPlete = sjkcList.FBASEQTY >= _item.PlanCount ? "齐套" : "未齐套", // FPlanDate = item.FHMASTERDATE // 日计划日期 // }); // //扣减总库存数量 // sjkcList.FBASEQTY = sjkcList.FBASEQTY >= fCompleteCount ? sjkcList.FBASEQTY - fCompleteCount : 0; // //剩余日计划需求数量 // need = need >= Inventory.FBASEQTY ? need - Inventory.FBASEQTY : 0; // //扣减消耗库存 // Inventory.FBASEQTY = Inventory.FBASEQTY - fCompleteCount; // } // } // else // { // decimal occupyMaterial = 0; // if (occupyDic.ContainsKey(_item.FMATERIALID2)) // occupyMaterial = occupyDic[_item.FMATERIALID2]; // completeAnalysisTempModel.Add(new Demo.Model.Model.CompleteAnalysisTempModel // { // FHMainICMOInterIDr = _item.FPRDMOMAINID, // FHMainICMOEntryID = _item.FPRDMOENTYID, // FHICMOInterID = _item.FID.ToString(), // FHICMOEntryID = _item.FEntryID.ToString(), // FHMaterID = _item.FNumber, // FHStockOrgID = _item.OrgFnumber, // FHPRDORGID = _item.OrgFnumber, // FPRDBillNo = _item.FMOBillNO, // FOwnerTypeId = "BD_OwnerOrg", // FUnitDosage = _item.dwyl.ToString(),//单位用量 // FSumPlanCount = _item.PlanCount.ToString(),//计划总数量 // FCompleteCount = 0, //齐套数量 // FLackCount = _item.PlanCount,//缺料数量 // FHStockQty = 0,//即时库存 // FHLeftQty = 0,//可用数量 // FOccupyCount = occupyMaterial,//占用数量 // FComPlete = "未齐套", // FPlanDate = item.FHMASTERDATE // 日计划日期 // }); // } // } // //Thread.Sleep(100); // i++; // } // i = 1; // foreach (var item in completeAnalysisTempModel) // { // // this.View.Session["ProcessRateValue"] = Convert.ToInt32(this.View.Session["ProcessRateValue"]) + Convert.ToInt32(1 / completeAnalysisTempModel.Count * 90); // JObject jsonRoot = new JObject(); // jsonRoot.Add("Creator", ""); // jsonRoot.Add("NeedUpDateFields", new JArray()); // jsonRoot.Add("NeedReturnFields", new JArray()); // jsonRoot.Add("IsDeleteEntry", "true"); // jsonRoot.Add("SubSystemId", ""); // jsonRoot.Add("IsVerifyBaseDataField", ""); // JObject jsonModel = new JObject(); // jsonModel.Add("FHMainICMOInterIDr", item.FHMainICMOInterIDr); // jsonModel.Add("FHMainICMOEntryID", item.FHMainICMOEntryID); // jsonModel.Add("FHICMOInterID", item.FHICMOInterID); // jsonModel.Add("FHICMOEntryID", item.FHICMOEntryID); // jsonModel.Add("FHMaterID", new JObject() { ["FNUMBER"] = item.FHMaterID }); // jsonModel.Add("FHUseQty", item.FHUseQty); // jsonModel.Add("FHStockOrgID", new JObject() { ["FNUMBER"] = item.FHStockOrgID }); // jsonModel.Add("FHStockQty", item.FHStockQty); // jsonModel.Add("FHLeftQty", item.FHLeftQty); // jsonModel.Add("FHPRDORGID", new JObject() { ["FNUMBER"] = item.FHStockOrgID }); // jsonModel.Add("FUnitDosage", item.FUnitDosage); // jsonModel.Add("FSumPlanCount", item.FSumPlanCount); // jsonModel.Add("FCompleteCount", item.FCompleteCount); // jsonModel.Add("FPRDBillNo", item.FPRDBillNo); // jsonModel.Add("FOwnerTypeId", item.FOwnerTypeId); // jsonModel.Add("FComPlete", item.FComPlete); // jsonModel.Add("FLackCount", item.FLackCount); // jsonModel.Add("FOccupyCount", item.FOccupyCount); // jsonModel.Add("FPlanDate", item.FPlanDate); // if (item.FOwnerId != null) // jsonModel.Add("FOwnerId", new JObject() { ["FNUMBER"] = item.FOwnerId }); // jsonRoot.Add("Model", jsonModel); // var result = cloudClient.Save("paez_CompleteAnalysisTemp", jsonRoot.ToString()); // JObject saveObj = JObject.Parse(result); // string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); // if (saveIsSuc != "TRUE") // { // LogHelper.Error(jsonRoot.ToString()); // } // i++; // } // //执行完成后 更新日计划工单状态 // DBServiceHelper.Execute(Context, @" ///*dialect*/update Sc_WorkBillSortBillSub set FComplete = '未齐套' where FEntryID IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBill where isnull(FCOMPLETE,'未齐套') ='未齐套') //"); // DBServiceHelper.Execute(Context, @" ///*dialect*/update Sc_WorkBillSortBillSub set FComplete = '齐套' where FEntryID NOT IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBill where isnull(FCOMPLETE,'未齐套') ='未齐套') //"); // sw.Stop();//结束计时 // LogHelper.Info("运行总时长:" + sw.Elapsed); // } // catch (Exception ex) // { // LogHelper.Error(ex.Message.ToString()); // } // } // /// <summary> // /// 日计划用料清单生成 // /// </summary> // public void DayPlanPPBomBill() // { // //锁定的日计划不生成 // try // { // string sql = string.Format(@" ///*dialect*/ //select t1.FID,t1.FEntryID,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,isnull(T9.FBillNo,'')FBillNo,t10.FNUMBER FORGNUMBER,t11.FNUMBER FHSOURCENUMBER,FSCRAPRATE,FFIXSCRAPQTY,T9.FID AS DayPlanFID //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 T5 ON T3.FMATERIALID=T5.FMATERIALID //JOIN T_BD_MATERIAL T6 ON T4.FMATERIALID=T6.FMATERIALID //LEFT JOIN T_BD_UNIT T7 ON T3.FUNITID = T7.FUNITID //LEFT JOIN T_BD_UNIT T8 ON T4.FUNITID = T8.FUNITID // LEFT JOIN Sc_DayPlanPPBomBillMain T9 ON T1.FEntryID=T9.FDayPlanFID // LEFT join T_ORG_Organizations t10 on t2.FHPRDORGID = t10.FORGID // LEFT join T_ENG_WORKCENTER t11 on t2.FHSOURCEID = t11.FID //" //); // 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["FENTRYID"].ToString(), // FHSourceID = dr["FHSOURCENUMBER"].ToString(), // FNumerator = dr["FNumerator"].ToString(), // FDenominator = dr["FDenominator"].ToString(), // FFIXSCRAPQTY = dr["FFIXSCRAPQTY"].ToString(), // FHQtyScrap = dr["FSCRAPRATE"].ToString(), // }); // } // var fidList = DayPlanMaterial.Select(x => x.FEntryID).Distinct().ToList(); // foreach (var item in fidList) // { // var _DayPlanMaterial = DayPlanMaterial.Where(x => x.FEntryID == item).ToList(); // JObject model = new JObject(); // 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);//日计划工单内码 // 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);//变动损耗率% // Entry.Add(ModelEnty); // } // model.Add("FEntity", Entry); // if (!string.IsNullOrEmpty(_DayPlanMaterial[0].FID)) // model.Add("FID", _DayPlanMaterial[0].FID); // JObject jsonRoot = new JObject() // { // ["Creator"] = "", // ["NeedUpDateFields"] = new JArray(), // ["NeedReturnFields"] = new JArray(), // ["IsDeleteEntry"] = "true", // ["SubSystemId"] = "", // ["IsVerifyBaseDataField"] = "false", // ["Model"] = model // }; // var result = cloudClient.Save("Paez_Sc_DayPlanPPBomBill", jsonRoot.ToString()); // JObject saveObj = JObject.Parse(result); // string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); // if (saveIsSuc != "TRUE") // LogHelper.Error(saveIsSuc); // } // } // } // catch (Exception ex) // { // LogHelper.Error(ex.Message.ToString()); // } // } // /// <summary> // /// 提料计划 // /// </summary> // public void Extraction() // { // string sql = string.Format(@"/*dialect*/ select t1.FID from Sc_WorkBillSortBillMain t1"); // DataTable fidDt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0]; // string FDayPlanWorkID = ""; // foreach (DataRow dr in fidDt.Rows) // { // FDayPlanWorkID += Convert.ToString(dr["FID"]) + ","; // } // FDayPlanWorkID = FDayPlanWorkID.Substring(0, FDayPlanWorkID.Length - 1); // //提料计划预处理 清理提料计划单数据 更新采购订单提料计划数量 // sql = string.Format(@" // /*dialect*/ // exec [提料计划预处理] '{0}' // ", FDayPlanWorkID.Replace(",", "-")); // DBServiceHelper.Execute(Context, sql); // //采购订单数据 // sql = @" // /*dialect*/ //select t1.FID,t1.FBillNo,t2.FENTRYID,t1.FSUPPLIERID,t3.fnumber,t2.FMATERIALID,(t2.FQTY-t2.FPODemandPlanCount)FQTY,FPurchaseOrgId FStockOrgId,t5.FNUMBER FORGNumber,FSTOCKINQTY,FReceiveQty,FCloseStatus,FMRPCLOSESTATUS from t_PUR_POOrder t1 //join t_PUR_POOrderEntry t2 on t1.FID = t2.FID //join t_BD_Supplier t3 on t1.FSUPPLIERID = t3.FSUPPLIERID //join T_PUR_POORDERENTRY_R t4 on t2.FENTRYID = t4.FENTRYID //join T_ORG_Organizations t5 on t1.FPurchaseOrgId = t5.FORGID //where t2.FQTY-t2.FPODemandPlanCount>0 // and FCloseStatus in('A') and FMRPCLOSESTATUS in('A') //"; // List<PurchaseInventory> PurchaseInventory = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<PurchaseInventory>(); // LogHelper.Info("采购订单数据" + sql); // sql = string.Format(@" // /*dialect*/ // SELECT T1.FID,FHMATERID,FHMASTERDATE,FHQTY,FCOMPLETECOUNT,FPRDMOMAINID,T2.FENTRYID,T1.FBILLNO, FNeedQty,(FLeadtime+FLeadTtime2)FFIXLEADTIME,t5.FMAXPOQTY,FJITBatch FMINPOQTY,FJITMATERIALGROUP,FJITMaterielDemand,FJITSafeStock,t3.FMATERIALID,t6.FNumber,FHQTY*FNeedQty NeedQty,FHPRDORGID FStockOrgId FROM SC_WORKBILLSORTBILLMAIN T1 //JOIN SC_WORKBILLSORTBILLSUB T2 ON T1.FID=T2.FID //LEFT JOIN(SELECT T1.FID,max(t2.FMATERIALID)FMATERIALIDMAIN, max(t2.FMoId)FMoId,MAX(FENTRYID) FENTRYID, SUM(convert(decimal(18, 2), FBASENUMERATOR / FBASEDENOMINATOR))FNeedQty, T1.FMATERIALID from T_PRD_PPBOMENTRY T1 //JOIN T_PRD_PPBOM T2 on t1.FID = t2.FID //group by T1.FMATERIALID, T1.FID) T3 on T1.FPRDMOMAINID = t3.FMoId and T1.FHMATERID = t3.FMATERIALIDMAIN //JOIN T_BD_MATERIAL T6 ON T3.FMATERIALID = T6.FMATERIALID //join t_BD_MaterialBase t4 on t3.FMATERIALID = t4.FMATERIALID //join t_BD_MaterialPlan t5 on t3.FMATERIALID = t5.FMATERIALID //WHERE DATEDIFF(D,GETDATE(),FHMASTERDATE) >=0 //AND FDayPlanQuantity>FCOMPLETECOUNT //AND FERPCLSID=1 // AND T2.FENTRYID not in (select distinct FHSOURCEENTRYID from CG_PODEMANDPLANBILLSUB where FHSOURCEINTERID IN ({0})) //AND T1.FID in ({0}) //order by FHMASTERDATE //", FDayPlanWorkID); // LogHelper.Info("提料数据" + sql); // DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql); // List<DayPlanPpbom> DayPlanPpbom = ds.ToModelList<DayPlanPpbom>(); // var MaterialIDList = DayPlanPpbom.GroupBy(p => new { p.FMATERIALID, p.FStockOrgId }).Select(x => new PODemandPlanTemp { FMATERIALID = x.Key.FMATERIALID, FStockOrgId = x.Key.FStockOrgId }).ToList(); // var _MaterialIDList = MaterialIDList.Where(p => p.FMATERIALID == "105773").ToList(); // LogHelper.Info("物料行数" + MaterialIDList.Count); // //提料计划数据集临时存储集合 // List<PODemandPlanTemp> PODemandPlanTemp = new List<PODemandPlanTemp>(); // //sql集合 更新采购订单占用的提料计划数量 // List<string> sqlList = new List<string>(); // //MaterialIDList = new List<string> { "105773" }; // foreach (var item in MaterialIDList) // { // LogHelper.Info(item.FMATERIALID.ToString()); // List<DayPlanPpbom> _DayPlanPpbom = DayPlanPpbom.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId).ToList(); // decimal FMINPOQTY = _DayPlanPpbom.FirstOrDefault().FMINPOQTY;//最小起订量 // double FFIXLEADTIME = _DayPlanPpbom.FirstOrDefault().FFIXLEADTIME;//提前期 // string FJITmaterialGroup = _DayPlanPpbom.FirstOrDefault().FJITmaterialGroup;//jit物料分类 // string FJITMaterielDemand = _DayPlanPpbom.FirstOrDefault().FJITMaterielDemand; //JIT物料需求供货周期 // string FJITSafeStock = _DayPlanPpbom.FirstOrDefault().FJITSafeStock; //JIT安全库存 // decimal NeedQty = 0; // DateTime DATE = _DayPlanPpbom.FirstOrDefault().FHMASTERDATE; // int i = 1; // //记录在最小采购量需求下的日计划明细FentyrID // List<int> FEntryIdList = new List<int>(); // foreach (var _item in _DayPlanPpbom) // { // if (NeedQty == 0) // DATE = Convert.ToDateTime(_item.FHMASTERDATE).AddDays(-FFIXLEADTIME); // FEntryIdList.Add(_item.FENTRYID); // NeedQty += _item.NeedQty; // if ((FJITmaterialGroup == "总量控制规格类" || FJITmaterialGroup == "订单专用个性类") && FEntryIdList.Count < Convert.ToInt32(FJITMaterielDemand)) //订单专用个性类 // continue; // if (NeedQty >= FMINPOQTY) // { // List<PurchaseInventory> _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).ToList(); // if (_PurchaseInventory.Count == 0) // { // NeedQty = 0; // break; // } // foreach (var Purchase in _PurchaseInventory) // { // LogHelper.Info("Purchase"); // LogHelper.Info("物料:" + Purchase.FMATERIALID + ",数量:" + Purchase.FQTY); // if (Purchase.FQTY >= NeedQty) // { // List<int> mmm = new List<int>(); // foreach (int id in FEntryIdList) // { @@ -618,8 +506,9 @@ // FSUPPLIERID = Purchase.FSUPPLIERID, // PurchseFNUMBER = Purchase.FNUMBER, // PurchseFBillNo = Purchase.FBillNo, // PurchseFqty = Purchase.FQTY // PurchseFqty = Purchase.FQTY, // FStockOrgId = Purchase.FStockOrgId, //采购组织 // FORGNumber = Purchase.FORGNumber // }); // //扣除日计划明细已被分配的数量 // DayPlanPpbomls.NeedQty = 0; @@ -639,7 +528,6 @@ // List<int> mmm = new List<int>(); // foreach (int id in FEntryIdList) // { // var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault(); // decimal Qty = DayPlanPpbomls.NeedQty; // if (Qty > _NeedQty) @@ -657,24 +545,21 @@ // OLDDATE = DayPlanPpbomls.FHMASTERDATE, // FFIXLEADTIME = FFIXLEADTIME, // PurchseFID = Purchase.FID, // PurchseFentryID = Purchase.FENTRYID, // FSUPPLIERID = Purchase.FSUPPLIERID, // PurchseFNUMBER = Purchase.FNUMBER, // PurchseFBillNo = Purchase.FBillNo, // PurchseFqty = Purchase.FQTY // PurchseFqty = Purchase.FQTY, // FStockOrgId = Purchase.FStockOrgId, //采购组织 // FORGNumber = Purchase.FORGNumber // }); // DayPlanPpbomls.NeedQty -= Qty; // //更新采购订单 // sqlList.Add($"/*dialect*/ update t_PUR_POOrderEntry set FPODemandPlanCount = isnull(FPODemandPlanCount,0)+ '{Qty}' where FENTRYID = {Purchase.FENTRYID}"); // //更新Model // var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault(); // ls.FQTY -= Qty; // if (_NeedQty < 0) // { // foreach (var mm in mmm) @@ -683,74 +568,189 @@ // } // break; // } // mmm.Add(id); // } // foreach (var mm in mmm) // { // FEntryIdList.Remove(mm); // } // } // } // NeedQty = 0; //} #endregion i++; } } var PODemandPlanList222 = PODemandPlanTemp.GroupBy(p => new PODemandPlanTemp { PurchseFNUMBER = p.PurchseFNUMBER, FHMASTERDATE = p.FHMASTERDATE }).Select(x => new PODemandPlanTemp { PurchseFNUMBER = x.Key.PurchseFNUMBER, FHMASTERDATE = x.Key.FHMASTERDATE }).ToList(); var PODemandPlanList = PODemandPlanTemp.GroupBy(p => new { p.PurchseFNUMBER, p.FHMASTERDATE }).Select(x => new PODemandPlanTemp { PurchseFNUMBER = x.Key.PurchseFNUMBER, FHMASTERDATE = x.Key.FHMASTERDATE }).ToList(); foreach (var item in PODemandPlanList) { DateTime date = item.FHMASTERDATE; string PurchseFNUMBER = item.PurchseFNUMBER; JObject model = new JObject(); model.Add("FHDate", date); model.Add("FHRemark", "生产订单号:" + "测试呢呢"); model.Add("FSupplierID", new JObject() { ["Fnumber"] = PurchseFNUMBER }); JArray Fentity = new JArray(); List<PODemandPlanTemp> _PODemandPlanList = PODemandPlanTemp.Where(x => x.FHMASTERDATE == date && x.PurchseFNUMBER == PurchseFNUMBER).ToList(); foreach (var _item in _PODemandPlanList) { JObject FentityModel = new JObject(); FentityModel.Add("FHPURCHASEORGID", new JObject() { ["Fnumber"] = _item.FORGNumber });//采购组织 FentityModel.Add("FHMaterID", new JObject() { ["Fnumber"] = _item.FNumber });//物料 FentityModel.Add("FHQty", _item.FQty);//数量 FentityModel.Add("FHSourceInterID", _item.FID);//日计划工单FID FentityModel.Add("FHSourceEntryID", _item.FENTRYID);//日计划工单FENTRYID FentityModel.Add("FHSourceBillNo", _item.FBILLNO);//日计划工单单号 FentityModel.Add("FHSourceBillType", "");//日计划工单类型 FentityModel.Add("FDayPlanDate", _item.OLDDATE);//日计划工单类型 FentityModel.Add("FHRelationQty", _item.PurchseFqty);//关联数量 FentityModel.Add("FFIXLEADTIME", _item.FFIXLEADTIME);//提前期 FentityModel.Add("FPURCHASEORGID", new JObject() { ["Fnumber"] = _item.FORGNumber });//采购组织 FentityModel.Add("FHPOOrderInterID", _item.PurchseFID);// 采购订单内码:FHPOOrderInterID FentityModel.Add("FHPOOrderEntryID", _item.PurchseFentryID); //采购订单子内码:FHPOOrderEntryID FentityModel.Add("FHPOOrderBillNo", _item.PurchseFBillNo); //采购订单号:FHPOOrderBillNo Fentity.Add(FentityModel); } model.Add("FEntity", Fentity); JObject jsonRoot = new JObject() { ["Creator"] = "", ["NeedUpDateFields"] = new JArray(), ["NeedReturnFields"] = new JArray(), ["IsDeleteEntry"] = "false", ["SubSystemId"] = "", ["IsVerifyBaseDataField"] = "false", ["Model"] = model }; var result = cloudClient.Save("paez_PODemandPlan", jsonRoot.ToString()); JObject saveObj = JObject.Parse(result); string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); LogHelper.Info("最后"); LogHelper.Info(jsonRoot.ToString()); if (saveIsSuc != "TRUE") LogHelper.Error(saveIsSuc); } DBServiceHelper.ExecuteBatch(Context, sqlList); } } } // #region 剩下不足时按最小采购批次生成 // //剩下不足时按最小采购批次生成 // //else if (i == _DayPlanPpbom.Count && NeedQty > 0) // //{ // // NeedQty = FMINPOQTY; // // List<PurchaseInventory> _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).ToList(); // // if (_PurchaseInventory.Count == 0) // // { // // NeedQty = 0; // // break; // // } // // foreach (var Purchase in _PurchaseInventory) // // { // // if (Purchase.FQTY >= NeedQty) // // { // // List<int> mmm = new List<int>(); // // foreach (int id in FEntryIdList) // // { // // mmm.Add(id); // // var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault(); // // PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp // // { // // FID = DayPlanPpbomls.FID, // // FHMASTERDATE = DATE, // // FQty = DayPlanPpbomls.NeedQty, // // FBILLNO = DayPlanPpbomls.FBILLNO, // // FENTRYID = DayPlanPpbomls.FENTRYID, // // FMATERIALID = DayPlanPpbomls.FMATERIALID, // // FNumber = DayPlanPpbomls.FNumber, // // OLDDATE = DayPlanPpbomls.FHMASTERDATE, // // FFIXLEADTIME = FFIXLEADTIME, // // PurchseFID = Purchase.FID, // // PurchseFentryID = Purchase.FENTRYID, // // FSUPPLIERID = Purchase.FSUPPLIERID, // // PurchseFNUMBER = Purchase.FNUMBER, // // PurchseFBillNo = Purchase.FBillNo, // // PurchseFqty = Purchase.FQTY // // }); // // //扣除日计划明细已被分配的数量 // // DayPlanPpbomls.NeedQty = 0; // // } // // FEntryIdList.Clear(); // // //更新采购订单 // // sqlList.Add($"/*dialect*/ update t_PUR_POOrderEntry set FPODemandPlanCount =isnull(FPODemandPlanCount,0)+ '{NeedQty}' where FENTRYID = {Purchase.FENTRYID}"); // // //扣除当前行对应采购订单数量 // // var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault(); // // ls.FQTY -= NeedQty; // // break; // // } // // else // // { // // NeedQty = NeedQty - Purchase.FQTY; // // decimal _NeedQty = Purchase.FQTY;//采购订单数量 // // List<int> mmm = new List<int>(); // // foreach (int id in FEntryIdList) // // { // // var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault(); // // decimal Qty = DayPlanPpbomls.NeedQty; // // if (Qty > _NeedQty) // // Qty = _NeedQty; // // _NeedQty = _NeedQty - DayPlanPpbomls.NeedQty; // // PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp // // { // // FID = DayPlanPpbomls.FID, // // FHMASTERDATE = DATE, // // FQty = Qty, // // FBILLNO = DayPlanPpbomls.FBILLNO, // // FENTRYID = DayPlanPpbomls.FENTRYID, // // FMATERIALID = DayPlanPpbomls.FMATERIALID, // // FNumber = DayPlanPpbomls.FNumber, // // OLDDATE = DayPlanPpbomls.FHMASTERDATE, // // FFIXLEADTIME = FFIXLEADTIME, // // PurchseFID = Purchase.FID, // // PurchseFentryID = Purchase.FENTRYID, // // FSUPPLIERID = Purchase.FSUPPLIERID, // // PurchseFNUMBER = Purchase.FNUMBER, // // PurchseFBillNo = Purchase.FBillNo, // // PurchseFqty = Purchase.FQTY // // }); // // DayPlanPpbomls.NeedQty -= Qty; // // //更新采购订单 // // sqlList.Add($"/*dialect*/ update t_PUR_POOrderEntry set FPODemandPlanCount = isnull(FPODemandPlanCount,0)+ '{Qty}' where FENTRYID = {Purchase.FENTRYID}"); // // //更新Model // // var ls = PurchaseInventory.Where(c => c.FENTRYID == Purchase.FENTRYID).FirstOrDefault(); // // ls.FQTY -= Qty; // // if (_NeedQty < 0) // // { // // foreach (var mm in mmm) // // { // // FEntryIdList.Remove(mm); // // } // // break; // // } // // mmm.Add(id); // // } // // foreach (var mm in mmm) // // { // // FEntryIdList.Remove(mm); // // } // // } // // } // // NeedQty = 0; // //} // #endregion // i++; // } // } // var PODemandPlanList222 = PODemandPlanTemp.GroupBy(p => new PODemandPlanTemp { PurchseFNUMBER = p.PurchseFNUMBER, FHMASTERDATE = p.FHMASTERDATE }).Select(x => new PODemandPlanTemp { PurchseFNUMBER = x.Key.PurchseFNUMBER, FHMASTERDATE = x.Key.FHMASTERDATE }).ToList(); // var PODemandPlanList = PODemandPlanTemp.GroupBy(p => new { p.PurchseFNUMBER, p.FHMASTERDATE }).Select(x => new PODemandPlanTemp { PurchseFNUMBER = x.Key.PurchseFNUMBER, FHMASTERDATE = x.Key.FHMASTERDATE }).ToList(); // foreach (var item in PODemandPlanList) // { // DateTime date = item.FHMASTERDATE; // string PurchseFNUMBER = item.PurchseFNUMBER; // JObject model = new JObject(); // model.Add("FHDate", date); // model.Add("FHRemark", "生产订单号:" + "测试呢呢"); // model.Add("FSupplierID", new JObject() { ["Fnumber"] = PurchseFNUMBER }); // JArray Fentity = new JArray(); // List<PODemandPlanTemp> _PODemandPlanList = PODemandPlanTemp.Where(x => x.FHMASTERDATE == date && x.PurchseFNUMBER == PurchseFNUMBER).ToList(); // foreach (var _item in _PODemandPlanList) // { // JObject FentityModel = new JObject(); // FentityModel.Add("FHPURCHASEORGID", new JObject() { ["Fnumber"] = _item.FORGNumber });//采购组织 // FentityModel.Add("FHMaterID", new JObject() { ["Fnumber"] = _item.FNumber });//物料 // FentityModel.Add("FHQty", _item.FQty);//数量 // FentityModel.Add("FHSourceInterID", _item.FID);//日计划工单FID // FentityModel.Add("FHSourceEntryID", _item.FENTRYID);//日计划工单FENTRYID // FentityModel.Add("FHSourceBillNo", _item.FBILLNO);//日计划工单单号 // FentityModel.Add("FHSourceBillType", "");//日计划工单类型 // FentityModel.Add("FDayPlanDate", _item.OLDDATE);//日计划工单类型 // FentityModel.Add("FHRelationQty", _item.PurchseFqty);//关联数量 // FentityModel.Add("FFIXLEADTIME", _item.FFIXLEADTIME);//提前期 // FentityModel.Add("FPURCHASEORGID", new JObject() { ["Fnumber"] = _item.FORGNumber });//采购组织 // FentityModel.Add("FHPOOrderInterID", _item.PurchseFID);// 采购订单内码:FHPOOrderInterID // FentityModel.Add("FHPOOrderEntryID", _item.PurchseFentryID); //采购订单子内码:FHPOOrderEntryID // FentityModel.Add("FHPOOrderBillNo", _item.PurchseFBillNo); //采购订单号:FHPOOrderBillNo // Fentity.Add(FentityModel); // } // model.Add("FEntity", Fentity); // JObject jsonRoot = new JObject() // { // ["Creator"] = "", // ["NeedUpDateFields"] = new JArray(), // ["NeedReturnFields"] = new JArray(), // ["IsDeleteEntry"] = "false", // ["SubSystemId"] = "", // ["IsVerifyBaseDataField"] = "false", // ["Model"] = model // }; // var result = cloudClient.Save("paez_PODemandPlan", jsonRoot.ToString()); // JObject saveObj = JObject.Parse(result); // string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper(); // LogHelper.Info("最后"); // LogHelper.Info(jsonRoot.ToString()); // if (saveIsSuc != "TRUE") // LogHelper.Error(saveIsSuc); // } // DBServiceHelper.ExecuteBatch(Context, sqlList); // } // } //} src/BLL/Demo.TimedTaskPlugIn/PRD/DayPlanPPBomBillTimeTask.cs
@@ -9,7 +9,7 @@ using System; using Kingdee.BOS.Util; using System.Linq; using ZD.Cloud.WebApi; using Demo.Utility; namespace Demo.TimedTaskPlugIn.PRD { @@ -19,7 +19,7 @@ { public void Run(Context ctx, Schedule schedule) { CloudClient cloudClient = new CloudClient("http://localhost/K3Cloud/"); CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); try { string sql = string.Format(@" src/BLL/Demo.TimedTaskPlugIn/PRD/StockChangeDynamicAlignment.cs
@@ -9,7 +9,6 @@ using System; using Kingdee.BOS.Util; using System.Linq; using ZD.Cloud.WebApi; using Demo.Model.Model; using Demo.Model.Model.PODemandPlan; using System.Diagnostics; @@ -18,6 +17,7 @@ using Kingdee.K3.Core.SCM.STK; using Kingdee.BOS.Orm.DataEntity; using Kingdee.K3.SCM.ServiceHelper; using Demo.Utility; namespace Demo.TimedTaskPlugIn.PRD { @@ -25,7 +25,7 @@ [HotUpdate] public class StockChangeDynamicAlignment : Kingdee.BOS.Contracts.IScheduleService { CloudClient cloudClient = new CloudClient("http://localhost/K3Cloud/"); CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/"); public Context Context; List<PRD_Inventory> ListInventory;//库存明细 List<PRD_Inventory> ListInventoryByStockOrgId;//物料总库存 src/BLL/Demo.TimedTaskPlugIn/packages.config
@@ -3,7 +3,6 @@ <package id="log4net" version="1.2.10" targetFramework="net472" /> <package id="ZD.Cloud.Common" version="7.5.1.2" targetFramework="net472" /> <package id="ZD.Cloud.Logger" version="1.1.0" targetFramework="net472" /> <package id="ZD.Cloud.WebApi" version="7.3.2.3" targetFramework="net472" /> <package id="ZD.Newtonsoft.Json" version="1.0.0" targetFramework="net472" /> <package id="ZD.Share" version="1.0.3" targetFramework="net472" /> </packages> src/BLL/Demo.Utility/CloudClient.cs
New file @@ -0,0 +1,60 @@ using Kingdee.BOS.WebApi.Client; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Demo.Utility { public class CloudClient : K3CloudApiClient { public const string KDApiUrl = "http://localhost//k3cloud/"; public CloudClient(string serverUrl = KDApiUrl) : base(serverUrl) { var dbId = GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "DbId"); var useName = GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "UserName"); var pwd = GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "PassWord"); //var url = GetKey(AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "/kdapi.config", "KDApiUrl"); var loginResult = ValidateLogin(dbId, useName, pwd, 2052); var resultType = JObject.Parse(loginResult)["LoginResultType"].Value<int>(); //登录结果类型等于1,代表登录成功 if (resultType != 1) { throw new Exception("登录失败!"); } } public CloudClient(string serverUrl = KDApiUrl, int timeout = 3600) : base(serverUrl, timeout) { var dbId = GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "DbId"); var useName = GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "UserName"); var pwd = GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "PassWord"); //var url = GetKey(AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "/kdapi.config", "KDApiUrl"); var loginResult = ValidateLogin(dbId, useName, pwd, 2052); var resultType = JObject.Parse(loginResult)["LoginResultType"].Value<int>(); //登录结果类型等于1,代表登录成功 if (resultType != 1) { throw new Exception("登录失败!"); } } public static String GetConfigKey(String configPath, String key) { Configuration ConfigurationInstance = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap() { ExeConfigFilename = configPath }, ConfigurationUserLevel.None); if (ConfigurationInstance.AppSettings.Settings[key] != null) return ConfigurationInstance.AppSettings.Settings[key].Value; else return string.Empty; } } } src/BLL/Demo.Utility/Demo.Utility.csproj
@@ -9,9 +9,10 @@ <AppDesignerFolder>Properties</AppDesignerFolder> <RootNamespace>Demo.Utility</RootNamespace> <AssemblyName>Demo.Utility</AssemblyName> <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion> <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion> <FileAlignment>512</FileAlignment> <Deterministic>true</Deterministic> <TargetFrameworkProfile /> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <DebugSymbols>true</DebugSymbols> @@ -37,6 +38,12 @@ <Reference Include="ICSharpCode.SharpZipLib, Version=1.2.0.246, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\SharpZipLib.1.2.0\lib\net45\ICSharpCode.SharpZipLib.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.WebApi.Client"> <HintPath>C:\Users\14027\Desktop\最新版bin文件\Kingdee.BOS.WebApi.Client.dll</HintPath> </Reference> <Reference Include="Newtonsoft.Json, Version=4.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\ZD.Newtonsoft.Json.1.0.0\lib\Newtonsoft.Json.dll</HintPath> </Reference> <Reference Include="NPOI, Version=2.5.1.0, Culture=neutral, PublicKeyToken=0df73ec7942b34e1, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\NPOI.2.5.1\lib\net45\NPOI.dll</HintPath> </Reference> @@ -50,6 +57,7 @@ <HintPath>..\..\..\packages\NPOI.2.5.1\lib\net45\NPOI.OpenXmlFormats.dll</HintPath> </Reference> <Reference Include="System" /> <Reference Include="System.Configuration" /> <Reference Include="System.Core" /> <Reference Include="System.Drawing" /> <Reference Include="System.Web" /> @@ -62,6 +70,7 @@ <Reference Include="System.Xml" /> </ItemGroup> <ItemGroup> <Compile Include="CloudClient.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> </ItemGroup> <ItemGroup> src/BLL/Demo.Utility/packages.config
@@ -3,4 +3,5 @@ <package id="NPOI" version="2.5.1" targetFramework="net472" /> <package id="Portable.BouncyCastle" version="1.8.6" targetFramework="net472" /> <package id="SharpZipLib" version="1.2.0" targetFramework="net472" /> <package id="ZD.Newtonsoft.Json" version="1.0.0" targetFramework="net472" /> </packages> src/ProductizationTemplate/Config/kdapi.config
File was deleted src/ProductizationTemplate/Constants/Url.cs
@@ -14,7 +14,7 @@ /// #if DEBUG public const string KDApiUrl = "http://localhost/K3Cloud/"; public const string KDApiUrl = "http://localhost//k3cloud/"; #else public const string KDApiUrl = "http://192.168.0.2/K3Cloud/"; public const string OMSAccount = "xherp"; src/ProductizationTemplate/ProductizationTemplate.csproj
@@ -84,11 +84,9 @@ <Reference Include="Kingdee.BOS.Web.HTML, Version=7.5.1507.2, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\packages\ZD.Cloud.Common.7.5.1.2\lib\net452\Kingdee.BOS.Web.HTML.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.WebApi.Client, Version=7.3.1150.7, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\packages\ZD.Cloud.WebApi.7.3.2.3\lib\net452\Kingdee.BOS.WebApi.Client.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.WebApi.ServicesStub, Version=7.3.1150.7, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\packages\ZD.Cloud.WebApi.7.3.2.3\lib\net452\Kingdee.BOS.WebApi.ServicesStub.dll</HintPath> <Reference Include="Kingdee.BOS.WebApi.Client, Version=7.6.2003.9, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>C:\Users\14027\Desktop\最新版bin文件3.16\Kingdee.BOS.WebApi.Client.dll</HintPath> </Reference> <Reference Include="Kingdee.BOS.WeiXin.Core, Version=7.5.1507.2, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\packages\ZD.Cloud.Common.7.5.1.2\lib\net452\Kingdee.BOS.WeiXin.Core.dll</HintPath> @@ -138,9 +136,6 @@ <Reference Include="ZD.Cloud.Logger, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\packages\ZD.Cloud.Logger.1.1.0\lib\net40\ZD.Cloud.Logger.dll</HintPath> </Reference> <Reference Include="ZD.Cloud.WebApi, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\packages\ZD.Cloud.WebApi.7.3.2.3\lib\net452\ZD.Cloud.WebApi.dll</HintPath> </Reference> <Reference Include="ZD.Share, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\packages\ZD.Share.1.0.2\lib\net452\ZD.Share.dll</HintPath> </Reference> @@ -173,7 +168,6 @@ <Link>.editorconfig</Link> </None> <None Include="app.config" /> <None Include="Config\kdapi.config" /> <None Include="packages.config" /> </ItemGroup> <ItemGroup> src/ProductizationTemplate/Untity/CloudClient.cs
@@ -1,23 +1,19 @@ using Kingdee.BOS.WebApi.Client; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq; using XhOA.Constants; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Kingdee.BOS.WebApi.Client; namespace XhOA.Untity { public class CloudClient : K3CloudApiClient { #if DEBUG public const string DbId = "5df2f8e7f1848b";//MDM public const string DbId = " ";//MDM #else public const string DbId = "5ce8f62da69d38"; #endif public const string UserName = "Administrator"; public const string PassWord = "Xhgj1234"; public const string PassWord = "888888"; public CloudClient(string serverUrl = Url.KDApiUrl) : base(serverUrl) { var loginResult = ValidateLogin(DbId, UserName, PassWord, 2052); src/ProductizationTemplate/packages.config
@@ -4,7 +4,6 @@ <package id="RestSharp" version="106.11.4" targetFramework="net452" /> <package id="ZD.Cloud.Common" version="7.5.1.2" targetFramework="net452" /> <package id="ZD.Cloud.Logger" version="1.1.0" targetFramework="net452" /> <package id="ZD.Cloud.WebApi" version="7.3.2.3" targetFramework="net452" /> <package id="ZD.Newtonsoft.Json" version="1.0.0" targetFramework="net452" /> <package id="ZD.Share" version="1.0.2" targetFramework="net452" /> </packages>