王 垚
2021-03-19 2a2e3fbbef29bbc568b10f2bd45bd6e658443d6e
问题处理
2个文件已添加
20个文件已修改
3个文件已删除
2059 ■■■■■ 已修改文件
src/BLL/Demo.BillView/Config/kdapi.config 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/Demo.BillView.csproj 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_MaterialRequisitionAuditDayPlan.cs 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_ScDayImport.cs 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_TlPush.cs 166 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_TlPushAudit.cs 238 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatform.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/packages.config 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.OperationService/Config/kdapi.config 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.OperationService/Demo.OperationService.csproj 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.OperationService/packages.config 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.TimedTaskPlugIn/Config/kdapi.config 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.TimedTaskPlugIn/Demo.TimedTaskPlugIn.csproj 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.TimedTaskPlugIn/PRD/DayPlanChangeDynamicAlignment.cs 1310 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.TimedTaskPlugIn/PRD/DayPlanPPBomBillTimeTask.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.TimedTaskPlugIn/PRD/StockChangeDynamicAlignment.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.TimedTaskPlugIn/packages.config 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.Utility/CloudClient.cs 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.Utility/Demo.Utility.csproj 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.Utility/packages.config 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/ProductizationTemplate/Config/kdapi.config 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/ProductizationTemplate/Constants/Url.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/ProductizationTemplate/ProductizationTemplate.csproj 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/ProductizationTemplate/Untity/CloudClient.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/ProductizationTemplate/packages.config 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>