王 垚
2021-11-12 0ce538e3c3dc01153ce1bfc2d75276881206c222
产品代码上传
22个文件已添加
68个文件已修改
11个文件已删除
1 文件已重命名
4040 ■■■■■ 已修改文件
ProductizationTemplate.sln 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/Config/kdapi.config 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/Demo.BillView.csproj 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/Demo.BillView.sln 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/KDExtension.cs 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/LogService.cs 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/PODemandPlanListFilter.cs 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/PODemandPlanListLoad.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/ProCompleteAnalysisDetails.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/ProCompleteAnalysisMateriel.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/ProTardinessDetails.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_DayPlan.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_DayPlanBG.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_DayPlanList.cs 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_DayPlanPushSCHB.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB2.cs 273 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_DayPlanReturnMaterial.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_MaterialRequisitionAuditDayPlan.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_PPBomSave.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_PPBomSubmit.cs 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_RJHYLQDBGFSH.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_RJHYLQDBGSH.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_RjhylqdDatachange.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_SCHBFSH.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_SCHBSH.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_SCLLFSH.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_SCLLSH.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_SCTLFSH.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_SCTLSH.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_ScDayImport.cs 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_ShowParameter.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_TlPush.cs 159 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_TlPushAudit.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatImport.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatform.cs 179 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatformXNQT.cs 167 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_ZJDBFSH.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pro_ZJDBSH.cs 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/ProductScheduleButtonClick.cs 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/ProductScheduleShowList.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pur_Receive.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/PRD/Pur_ReceiveDelete.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.BillView/packages.config 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.CommonFilter/Config/kdapi.config 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.CommonFilter/Demo.CommonFilter.csproj 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.CommonFilter/packages.config 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.DynamicForm/Config/kdapi.config 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.DynamicForm/Demo.DynamicForm.csproj 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.DynamicForm/packages.config 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.ListView/Config/kdapi.config 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.ListView/Demo.ListView.csproj 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.ListView/packages.config 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.OperationService/Config/kdapi.config 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.OperationService/Demo.OperationService.csproj 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.OperationService/packages.config 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.Report/Demo.Report.csproj 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.Report/PRD/prd_CompleteSetRateReport.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.Report/PRD/prd_ExtractionPlanDetail.cs 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.Report/PRD/prd_TimelinessRateReport.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.Report/packages.config 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.SysReportView/Config/kdapi.config 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.SysReportView/Demo.SysReportView.csproj 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.SysReportView/packages.config 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.TimedTaskPlugIn/Config/kdapi.config 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.TimedTaskPlugIn/Demo.TimedTaskPlugIn.csproj 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.TimedTaskPlugIn/PRD/DayPlanPPBomBillTimeTask.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.TimedTaskPlugIn/PRD/StockChangeDynamicAlignment.cs 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.TimedTaskPlugIn/PRD/TLPlanTimeTask.cs 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.TimedTaskPlugIn/PRD/TLPlanTimeTaskByPurchase.cs 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.TimedTaskPlugIn/app.config 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.TimedTaskPlugIn/packages.config 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.Utility/Config/kdapi.config 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.Utility/Demo.Utility.csproj 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.Utility/NpoiHelper.cs 307 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.Utility/app.config 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/Demo.Utility/packages.config 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/ZD.Cloud.Logger/LogHelper.cs 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/ZD.Cloud.Logger/Mail.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/ZD.Cloud.Logger/Properties/AssemblyInfo.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/ZD.Cloud.Logger/ZD.Cloud.Logger.csproj 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/ZD.Cloud.Logger/ZD.Cloud.Logger.nuspec 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/ZD.Cloud.WebApi/CloudClient.cs 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/ZD.Cloud.WebApi/Properties/AssemblyInfo.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/ZD.Cloud.WebApi/ZD.Cloud.WebApi.csproj 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/ZD.Cloud.WebApi/ZD.Cloud.WebApi.nuspec 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/ZD.Cloud.WebApi/kdapi.config 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/ZD.Share/Common/ConvertHelper.cs 451 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/ZD.Share/Common/DataHelper.cs 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/ZD.Share/Common/HttpHelper.cs 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/ZD.Share/Common/OracleHelper.cs 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/ZD.Share/Common/Util.cs 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/ZD.Share/Enums/Enum.DateEnum.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/ZD.Share/Enums/Enum.DocumentStatus.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/ZD.Share/Enums/Enum.ForbidStatus.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/ZD.Share/Properties/AssemblyInfo.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/ZD.Share/ZD.Share.csproj 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/BLL/ZD.Share/ZD.Share.nuspec 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Model/Demo.Model/Model/PODemandPlan/DayPlanPpbom.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Model/Demo.Model/Model/PODemandPlan/PODemandPlanTemp.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Model/Demo.Model/Model/PODemandPlan/PurchaseInventory.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/ProductizationTemplate/DBService/BigTicketProjectService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ProductizationTemplate.sln
@@ -48,6 +48,12 @@
        .editorconfig = .editorconfig
    EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZD.Cloud.Logger", "src\BLL\ZD.Cloud.Logger\ZD.Cloud.Logger.csproj", "{876BCC4D-41BE-4570-BD36-D6F11526AD64}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZD.Cloud.WebApi", "src\BLL\ZD.Cloud.WebApi\ZD.Cloud.WebApi.csproj", "{96E1CC80-0E04-4F78-BBFF-75FAF6A69F7B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZD.Share", "src\BLL\ZD.Share\ZD.Share.csproj", "{54F8364F-3C79-43E7-9F14-DE0BC63555D6}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|Any CPU = Debug|Any CPU
@@ -114,6 +120,18 @@
        {3B5437EE-F19C-4B69-90A4-88866841337B}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {3B5437EE-F19C-4B69-90A4-88866841337B}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {3B5437EE-F19C-4B69-90A4-88866841337B}.Release|Any CPU.Build.0 = Release|Any CPU
        {876BCC4D-41BE-4570-BD36-D6F11526AD64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {876BCC4D-41BE-4570-BD36-D6F11526AD64}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {876BCC4D-41BE-4570-BD36-D6F11526AD64}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {876BCC4D-41BE-4570-BD36-D6F11526AD64}.Release|Any CPU.Build.0 = Release|Any CPU
        {96E1CC80-0E04-4F78-BBFF-75FAF6A69F7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {96E1CC80-0E04-4F78-BBFF-75FAF6A69F7B}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {96E1CC80-0E04-4F78-BBFF-75FAF6A69F7B}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {96E1CC80-0E04-4F78-BBFF-75FAF6A69F7B}.Release|Any CPU.Build.0 = Release|Any CPU
        {54F8364F-3C79-43E7-9F14-DE0BC63555D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {54F8364F-3C79-43E7-9F14-DE0BC63555D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {54F8364F-3C79-43E7-9F14-DE0BC63555D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {54F8364F-3C79-43E7-9F14-DE0BC63555D6}.Release|Any CPU.Build.0 = Release|Any CPU
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
@@ -132,6 +150,9 @@
        {0AF059FC-D287-42C4-8835-133C3D96243A} = {2D428206-511A-4C87-8A60-4535B238A03E}
        {E2975D07-F28A-417E-8225-19281A7A62BD} = {2D428206-511A-4C87-8A60-4535B238A03E}
        {3B5437EE-F19C-4B69-90A4-88866841337B} = {2D428206-511A-4C87-8A60-4535B238A03E}
        {876BCC4D-41BE-4570-BD36-D6F11526AD64} = {2D428206-511A-4C87-8A60-4535B238A03E}
        {96E1CC80-0E04-4F78-BBFF-75FAF6A69F7B} = {2D428206-511A-4C87-8A60-4535B238A03E}
        {54F8364F-3C79-43E7-9F14-DE0BC63555D6} = {2D428206-511A-4C87-8A60-4535B238A03E}
    EndGlobalSection
    GlobalSection(ExtensibilityGlobals) = postSolution
        SolutionGuid = {92FECC0D-B61B-466C-9421-AAECA846220B}
src/BLL/Demo.BillView/Config/kdapi.config
File was deleted
src/BLL/Demo.BillView/Demo.BillView.csproj
@@ -83,9 +83,6 @@
    <Reference Include="Kingdee.BOS.FileServer.ProxyService, Version=7.2.904.6, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.Common.7.2.3\lib\net452\Kingdee.BOS.FileServer.ProxyService.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.BOS.Mobile, Version=7.2.904.6, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.Common.7.2.3\lib\net452\Kingdee.BOS.Mobile.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.BOS.Model, Version=7.2.904.6, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.Common.7.2.3\lib\net452\Kingdee.BOS.Model.dll</HintPath>
    </Reference>
@@ -105,14 +102,8 @@
    <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.WebApi.Client, Version=7.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\lib\net452\Kingdee.BOS.WebApi.Client.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.BOS.WebApi.FormService, Version=7.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\lib\net452\Kingdee.BOS.WebApi.FormService.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.BOS.WebApi.ServicesStub, Version=7.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\lib\net452\Kingdee.BOS.WebApi.ServicesStub.dll</HintPath>
    <Reference Include="Kingdee.BOS.WebApi.Client">
      <HintPath>..\..\..\..\..\办公\K3Cloud\WebSite\bin\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>
@@ -128,9 +119,6 @@
    </Reference>
    <Reference Include="Kingdee.K3.MFG.ServiceHelper">
      <HintPath>..\..\..\..\..\办公\K3Cloud\WebSite\bin\Kingdee.K3.MFG.ServiceHelper.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.K3.Mobile.Business.PlugIn, Version=7.5.1507.2, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.Common.7.2.3\lib\net452\Kingdee.K3.Mobile.Business.PlugIn.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.K3.Mobile.SCM.Business.PlugIn, Version=7.5.1507.2, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.Common.7.2.3\lib\net452\Kingdee.K3.Mobile.SCM.Business.PlugIn.dll</HintPath>
@@ -157,12 +145,6 @@
    <Reference Include="Kingdee.K3.SCM.Credit.Business.PlugIn, Version=7.2.904.6, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.Common.7.2.3\lib\net452\Kingdee.K3.SCM.Credit.Business.PlugIn.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.K3.SCM.Mobile.Business.PlugIn, Version=7.2.904.6, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.Common.7.2.3\lib\net452\Kingdee.K3.SCM.Mobile.Business.PlugIn.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.K3.SCM.Mobile.ServiceHelper, Version=7.2.904.6, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.Common.7.2.3\lib\net452\Kingdee.K3.SCM.Mobile.ServiceHelper.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.K3.SCM.ServiceHelper, Version=7.2.904.6, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.Common.7.2.3\lib\net452\Kingdee.K3.SCM.ServiceHelper.dll</HintPath>
    </Reference>
@@ -176,21 +158,8 @@
    <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.4.1.0, Culture=neutral, PublicKeyToken=0df73ec7942b34e1, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
    <Reference Include="NPOI">
      <HintPath>..\..\..\..\..\办公\K3Cloud\WebSite\bin\NPOI.dll</HintPath>
    </Reference>
    <Reference Include="NPOI.OOXML, Version=2.4.1.0, Culture=neutral, PublicKeyToken=0df73ec7942b34e1, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\..\..\办公\K3Cloud\WebSite\bin\NPOI.OOXML.dll</HintPath>
    </Reference>
    <Reference Include="NPOI.OpenXml4Net, Version=2.4.1.0, Culture=neutral, PublicKeyToken=0df73ec7942b34e1, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\..\..\办公\K3Cloud\WebSite\bin\NPOI.OpenXml4Net.dll</HintPath>
    </Reference>
    <Reference Include="NPOI.OpenXmlFormats, Version=2.4.1.0, Culture=neutral, PublicKeyToken=0df73ec7942b34e1, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\..\..\办公\K3Cloud\WebSite\bin\NPOI.OpenXmlFormats.dll</HintPath>
    </Reference>
    <Reference Include="PresentationFramework" />
    <Reference Include="System" />
@@ -203,19 +172,8 @@
    <Reference Include="System.Data" />
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Xml" />
    <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.6.1\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>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="PRD\KDExtension.cs" />
    <Compile Include="PRD\LogService.cs" />
    <Compile Include="PRD\PODemandPlanListFilter.cs" />
    <Compile Include="PRD\PODemandPlanListLoad.cs" />
    <Compile Include="PRD\ProductScheduleButtonClick.cs" />
@@ -247,7 +205,6 @@
    <Compile Include="PRD\Pro_ShowParameter.cs" />
    <Compile Include="PRD\Pro_ZJDBSH.cs" />
    <Compile Include="PRD\Pro_ZJDBFSH.cs" />
    <Compile Include="PRD\Pro_DayPlanPushZJDB2.cs" />
    <Compile Include="PRD\Pro_DayPlanSelectMenu.cs" />
    <Compile Include="PRD\Pro_DayPlanPushZJDB.cs" />
    <Compile Include="PRD\Pro_MaterialRequisitionAuditDayPlan.cs" />
@@ -262,7 +219,6 @@
  </ItemGroup>
  <ItemGroup>
    <None Include="app.config" />
    <None Include="Config\kdapi.config" />
    <None Include="packages.config" />
  </ItemGroup>
  <ItemGroup>
@@ -286,6 +242,18 @@
      <Project>{0AF059FC-D287-42C4-8835-133C3D96243A}</Project>
      <Name>Demo.Utility</Name>
    </ProjectReference>
    <ProjectReference Include="..\ZD.Cloud.Logger\ZD.Cloud.Logger.csproj">
      <Project>{876bcc4d-41be-4570-bd36-d6f11526ad64}</Project>
      <Name>ZD.Cloud.Logger</Name>
    </ProjectReference>
    <ProjectReference Include="..\ZD.Cloud.WebApi\ZD.Cloud.WebApi.csproj">
      <Project>{96e1cc80-0e04-4f78-bbff-75faf6a69f7b}</Project>
      <Name>ZD.Cloud.WebApi</Name>
    </ProjectReference>
    <ProjectReference Include="..\ZD.Share\ZD.Share.csproj">
      <Project>{54f8364f-3c79-43e7-9f14-de0bc63555d6}</Project>
      <Name>ZD.Share</Name>
    </ProjectReference>
  </ItemGroup>
  <ItemGroup>
    <WCFMetadata Include="Connected Services\" />
src/BLL/Demo.BillView/Demo.BillView.sln
New file
@@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.31321.278
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Demo.BillView", "Demo.BillView.csproj", "{45D78DAF-CF2E-47D6-A404-76E3B36EEDFF}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|Any CPU = Debug|Any CPU
        Release|Any CPU = Release|Any CPU
    EndGlobalSection
    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {45D78DAF-CF2E-47D6-A404-76E3B36EEDFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {45D78DAF-CF2E-47D6-A404-76E3B36EEDFF}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {45D78DAF-CF2E-47D6-A404-76E3B36EEDFF}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {45D78DAF-CF2E-47D6-A404-76E3B36EEDFF}.Release|Any CPU.Build.0 = Release|Any CPU
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
    EndGlobalSection
    GlobalSection(ExtensibilityGlobals) = postSolution
        SolutionGuid = {714411A3-A86B-49D6-A8A1-827ADAA0DD15}
    EndGlobalSection
EndGlobal
src/BLL/Demo.BillView/PRD/KDExtension.cs
File was deleted
src/BLL/Demo.BillView/PRD/LogService.cs
File was deleted
src/BLL/Demo.BillView/PRD/PODemandPlanListFilter.cs
@@ -21,15 +21,63 @@
using Kingdee.BOS.Core.Metadata;
using Kingdee.K3.MFG.ServiceHelper;
using Kingdee.BOS;
using ZD.Cloud.Logger;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.List;
namespace Demo.BillView.PRD
{
    [Description("提料计划列表过滤")]
    [Description("提料计划列表 列表插件")]
    [HotUpdate]
    public class PODemandPlanListFilter : AbstractListPlugIn
    {
        public override void BarItemClick(BarItemClickEventArgs e)
        {
            base.BarItemClick(e);
            //关闭
            if (e.BarItemKey.ToUpper().Equals("BTNCLOSE"))
            {
                //获取选择记录
                ListSelectedRowCollection selectRows = this.ListView.SelectedRowsInfo;
                //读取ID,放到数组
                string[] ID = selectRows.GetPrimaryKeyValues();
                string FID = "";
                //没有选择行提示
                if (ID.Length == 0)
                {
                    //如果选择的是0,即没有选择行记录,弹窗报错,返回
                    this.View.ShowMessage("请选择单据!", MessageBoxType.Notice);
                    return;
                }
                else
                {
                    //如果点击成功,循环ID
                    for (int i = 0; i < ID.Length; i++)
                    {
                        FID = FID + ID[i].ToString() + ",";
                    }
                    FID = FID.Substring(0, FID.Length - 1);
                    string sql = string.Format(@"/*dialect*/
update Cg_PODemandPlanBillMain set
FHCloseMan = {0},
FHCloseDate = GETDATE(),
FHCloseType = 1
where fid IN ({1})", Context.UserId, FID);
                    DBServiceHelper.Execute(Context, sql);
                    sql = string.Format(@"/*dialect*/
UPDATE A SET
A.FPODemandPlanCount -= B.FHQTY
FROM t_PUR_POOrderEntry A
JOIN Cg_PODemandPlanBillSub B ON A.FENTRYID = B.FHPOOrderEntryID
where B.FID IN (select FID FROM Cg_PODemandPlanBillMain WHERE FHCloseType = 0 AND FID IN ({0}))  AND B.FCLOSESTATUS = 0
", FID);
                    this.View.Refresh();
                    this.View.ShowMessage("操作成功");
                }
            }
        }
        public override void PrepareFilterParameter(global::Kingdee.BOS.Core.List.PlugIn.Args.FilterArgs e)
        {
            base.PrepareFilterParameter(e);
@@ -51,7 +99,7 @@
        {
            long userId = this.Context.UserId;
            string sql = $"/*dialect*/ select FSupplierId from T_SEC_user a join T_SCP_USERDATA b on a.FUSERID = b.FUSERID where FUSERTYPE = 2 and a.FUSERID ={userId}";
            //LogHelper.Info(sql);
            ////LogHelper.Info(sql);
            int FSupplierId = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0);
            return FSupplierId;
        }
src/BLL/Demo.BillView/PRD/PODemandPlanListLoad.cs
@@ -35,7 +35,7 @@
            }
            catch (Exception ex)
            {
                LogService.WriteAsync("测试");
                //LogService.WriteAsync("测试");
            }
        }
src/BLL/Demo.BillView/PRD/ProCompleteAnalysisDetails.cs
@@ -9,9 +9,9 @@
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
using ZD.Cloud.Logger;
namespace Demo.BillView
namespace Demo.BillView.PRD
{
    [Description("齐套分析列表功能")]
    [HotUpdate]
@@ -23,7 +23,7 @@
        public override void OnLoad(EventArgs e)
        {
            LogHelper.Info("[齐套分析明细加载列表]");
            //LogHelper.Info("[齐套分析明细加载列表]");
            base.OnLoad(e);
            if (this.View.OpenParameter.GetCustomParameter("FHICMOInterID") == null)
            {
src/BLL/Demo.BillView/PRD/ProCompleteAnalysisMateriel.cs
@@ -14,7 +14,7 @@
using System.Text;
using System.Threading.Tasks;
namespace Demo.BillView
namespace Demo.BillView.PRD
{
    [Description("齐套分析物料明细")]
    [HotUpdate]
src/BLL/Demo.BillView/PRD/ProTardinessDetails.cs
@@ -8,7 +8,7 @@
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
namespace Demo.BillView
namespace Demo.BillView.PRD
{
    [Description("生产计划平台拖期明细")]
    [HotUpdate]
src/BLL/Demo.BillView/PRD/Pro_DayPlan.cs
@@ -11,6 +11,7 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -24,12 +25,31 @@
            base.BarItemClick(e);
            try
            {
                //主表关闭
                if (e.BarItemKey.ToUpper() == "BTNCLOSE")
                {
                    var FID = this.View.Model.GetPKValue();
                    string sql = $"/*dialect*/ update  Sc_WorkBillSortBillMain set FDocumentStatus = 'E' where FID = {FID}";
                    string sql = $"/*dialect*/ update  Sc_WorkBillSortBillMain set FDocumentStatus = 'E',FHCloseMan = '{Context.UserId}',FHCloseDate = GETDATE() where FID = {FID}";
                    DBServiceHelper.Execute(Context, sql);
                    this.View.Refresh();
                    this.View.ShowMessage("操作成功");
                }
                //反关闭
                if (e.BarItemKey.ToUpper() == "BTNCANCELCLOSE")
                {
                    var FID = this.View.Model.GetPKValue();
                    string yzSql = string.Format(@"/*dialect*/
SELECT A.FBILLNO FROM SC_WORKBILLSORTBILLMAIN A
JOIN (SELECT * FROM SC_WORKBILLSORTBILLMAIN WHERE FDOCUMENTSTATUS <>'E') B ON A.FSCORDERNO=B.FSCORDERNO AND A.FSRCBILLENTRYSEQ=B.FSRCBILLENTRYSEQ
WHERE  A.FID IN ({0})
", FID);
                    DataTable dataTable = DBServiceHelper.ExecuteDataSet(Context, yzSql).Tables[0];
                    if (dataTable.Rows.Count > 0)
                    {
                        this.View.ShowErrMessage("反关闭后会存在生产订单和明细行号数据重复");
                        return;
                    }
                    string sql = $"/*dialect*/ update  Sc_WorkBillSortBillMain set FDocumentStatus = 'C',FHCloseMan = '',FHCloseDate = NULL where FID = {FID}";
                    DBServiceHelper.Execute(Context, sql);
                    this.View.Refresh();
                    this.View.ShowMessage("操作成功");
src/BLL/Demo.BillView/PRD/Pro_DayPlanBG.cs
@@ -1,22 +1,14 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Newtonsoft.Json.Linq;
using ZD.Cloud.Logger;
using ZD.Cloud.WebApi;
using Demo.Model.Model;
using System.Diagnostics;
using System.Linq;
using Kingdee.BOS.Core.Bill.PlugIn.Args;
using Kingdee.K3.SCM.Core;
namespace Demo.BillView.PRD
{
@@ -33,15 +25,15 @@
        {
            base.DataChanged(e);
            var model = this.View.Model;
            double FHQty = Convert.ToDouble(model.GetValue("FHQty"));
            decimal FHQty = Convert.ToDecimal(model.GetValue("FHQty"));
            if (e.Field.Key.Contains("FUseRateNew"))
            {
                if (e.OldValue == e.NewValue || e.NewValue == null)
                    return;
                double FNumerator = Convert.ToDouble(model.GetValue("FNumerator", e.Row));//分子
                double FDenominator = Convert.ToDouble(model.GetValue("FDenominator", e.Row));//分母
                double FUseRateNew = Convert.ToDouble(model.GetValue("FUseRateNew", e.Row));//使用比例
                double Hqty;
                decimal FNumerator = Convert.ToDecimal(model.GetValue("FNumerator", e.Row));//分子
                decimal FDenominator = Convert.ToDecimal(model.GetValue("FDenominator", e.Row));//分母
                decimal FUseRateNew = Convert.ToDecimal(model.GetValue("FUseRateNew", e.Row));//使用比例
                decimal Hqty;
                if (FNumerator == 0 || FDenominator == 0)
                {
                    Hqty = Math.Ceiling(FHQty * (FUseRateNew / 100));
@@ -57,17 +49,18 @@
                var finds = entrys.Where(entry => entry.GetValue<string>("FReplaceGroup") == pro && entry.GetValue<int>("Seq") != (m + 1));
                if (finds.Count() == 0) return;
                var seq = finds.First().GetValue<int>("Seq");
                model.SetValue("FUseRateNew", 100 - Convert.ToDouble(e.NewValue), seq - 1);
                model.SetValue("FUseRateNew", 100 - Convert.ToDecimal(e.NewValue), seq - 1);
            }
            if (e.Field.Key.Contains("FHQtyMustNew"))
            {
                if (e.OldValue == e.NewValue || e.NewValue == null)
                    return;
                var m = e.Row;
                double FNumerator = Convert.ToDouble(model.GetValue("FNumerator", e.Row));//分子
                double FDenominator = Convert.ToDouble(model.GetValue("FDenominator", e.Row));//分母
                double FHQtyMustNew = Convert.ToDouble(model.GetValue("FHQtyMustNew", e.Row));//新计划数量
                double Hqty;
                decimal FNumerator = Convert.ToDecimal(model.GetValue("FNumerator", e.Row));//分子
                decimal FDenominator = Convert.ToDecimal(model.GetValue("FDenominator", e.Row));//分母
                decimal FHQtyMustNew = Convert.ToDecimal(model.GetValue("FHQtyMustNew", e.Row));//新计划数量
                decimal Hqty;
                decimal zero = 0;
                if (FNumerator == 0 || FDenominator == 0)
                {
                    Hqty = Math.Ceiling(FHQtyMustNew / FHQty * 100);
src/BLL/Demo.BillView/PRD/Pro_DayPlanList.cs
@@ -12,10 +12,11 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ZD.Cloud.Logger;
namespace Demo.BillView.PRD
{
@@ -51,13 +52,89 @@
                        FID = FID + ID[i].ToString() + ",";
                    }
                    FID = FID.Substring(0, FID.Length - 1);
                    string sql = $"/*dialect*/ update  Sc_WorkBillSortBillMain set FDocumentStatus = 'E' where FID in ({FID})";
                    //LogHelper.Info(sql);
                    string sql = $"/*dialect*/ update  Sc_WorkBillSortBillMain set FDocumentStatus = 'E',FHCloseMan = '{Context.UserId}',FHCloseDate = GETDATE() where FID in ({FID})";
                    ////LogHelper.Info(sql);
                    DBServiceHelper.Execute(Context, sql);
                    this.View.ShowMessage("操作成功");
                }
            }
            //反关闭
            else if (e.BarItemKey.Equals("BTNCANCELCLOSE"))
            {
                //获取选择记录
                ListSelectedRowCollection selectRows = this.ListView.SelectedRowsInfo;
                //读取ID,放到数组
                string[] ID = selectRows.GetPrimaryKeyValues();
                string FID = "";
                //没有选择行提示
                if (ID.Length == 0)
                {
                    //如果选择的是0,即没有选择行记录,弹窗报错,返回
                    this.View.ShowMessage("请选择单据!", MessageBoxType.Notice);
                    return;
                }
                else
                {
                    //如果点击成功,循环ID
                    for (int i = 0; i < ID.Length; i++)
                    {
                        FID = FID + ID[i].ToString() + ",";
                    }
                    FID = FID.Substring(0, FID.Length - 1);
                    //验证 关闭订单
                    //验证所选订单是否存在相同数据 生产订单号+生产订单明细行号
                    string errmsg = "";
                    string fbillno = "";
                    string yzSql = string.Format(@"/*dialect*/
SELECT FBILLNO FROM SC_WORKBILLSORTBILLMAIN WHERE FSCORDERNO+CONVERT(VARCHAR,FSRCBILLENTRYSEQ) IN (
SELECT FSCORDERNO+CONVERT(VARCHAR,FSRCBILLENTRYSEQ) FROM  SC_WORKBILLSORTBILLMAIN
WHERE FID IN ({0})
GROUP BY
FSCORDERNO,FSRCBILLENTRYSEQ
HAVING COUNT(*)>1
)", FID);
                    DataTable dataTable = DBServiceHelper.ExecuteDataSet(Context, yzSql).Tables[0];
                    if (dataTable.Rows.Count > 0)
                    {
                        errmsg += "所选订单中存在相同生产订单和明细行号数据,订单号:";
                        foreach (DataRow dr in dataTable.Rows)
                        {
                            errmsg += dr["FBILLNO"].ToString();
                            fbillno += $"'{dr["FBILLNO"].ToString()}',";
                        }
                    }
                    yzSql = string.Format(@"/*dialect*/
SELECT A.FBILLNO FROM SC_WORKBILLSORTBILLMAIN A
JOIN (SELECT * FROM SC_WORKBILLSORTBILLMAIN WHERE FDOCUMENTSTATUS <>'E') B ON A.FSCORDERNO=B.FSCORDERNO AND A.FSRCBILLENTRYSEQ=B.FSRCBILLENTRYSEQ
WHERE  A.FID IN ({0})
", FID);
                    dataTable = DBServiceHelper.ExecuteDataSet(Context, yzSql).Tables[0];
                    if (dataTable.Rows.Count > 0)
                    {
                        errmsg += "\n" + "所选订单中存在生产订单和明细行号关闭后数据重复,订单号:";
                        foreach (DataRow dr in dataTable.Rows)
                        {
                            errmsg += dr["FBILLNO"].ToString();
                            fbillno += $"'{dr["FBILLNO"].ToString()}',";
                        }
                    }
                    string sql = $"/*dialect*/ update  Sc_WorkBillSortBillMain set FDocumentStatus = 'C',FHCloseMan = '',FHCloseDate = NULL where FID in ({FID})";
                    if (fbillno.Length > 0) {
                        fbillno = fbillno.Substring(0, fbillno.Length - 1);
                        sql = $"/*dialect*/ update  Sc_WorkBillSortBillMain set FDocumentStatus = 'C',FHCloseMan = '',FHCloseDate = NULL where FID in ({FID}) AND FBILLNO NOT IN ({fbillno})";
                    }
                    ////LogHelper.Info(sql);
                    DBServiceHelper.Execute(Context, sql);
                    if (errmsg != "")
                    {
                        this.View.ShowMessage("部分单据操作成功\n" + errmsg);
                        return;
                    }
                    this.View.ShowMessage("操作成功");
                }
            }
        }
    }
}
src/BLL/Demo.BillView/PRD/Pro_DayPlanPushSCHB.cs
@@ -13,7 +13,7 @@
using Kingdee.BOS.ServiceHelper;
using Kingdee.K3.SCM.App;
namespace Demo.DynamicForm.PRD
namespace Demo.BillView.PRD
{
    /// <summary>
    /// 日计划工单下推后,建立生产汇报单与生产订单的关联关系
@@ -42,7 +42,7 @@
            e.FieldKeys.Add("FBaseJoinQty");
        }
        private const string POFormId = "PRD_MO";
        public List<string> FentryIdList = new List<string>();
        private List<string> FentryIdList = new List<string>();
        public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e)
        {
            base.BeforeExecuteOperationTransaction(e);
@@ -64,18 +64,14 @@
                    string srcFormId = "";
                    string srcSrcBillNo = "";
                    string FPPBOMFENTRYID = "";
                    try
                    {
                        srcFormId = fldSrcFormId.DynamicProperty.GetValue<string>(entryRow);
                        srcSrcBillNo = fldSrcBillNo.DynamicProperty.GetValue<string>(entryRow);
                        //srcFormId = "PRD_MO";
                        //srcSrcBillNo = entryRow["FPPBOMBILLNO"]?.ToString();
                        //string FPPBOMFID = entryRow["FPPOMFID"]?.ToString();
                        //FPPBOMFENTRYID = entryRow["FPPBOMFENTRYID"]?.ToString();
                    }
                    catch (Exception)
                    {
                    }
                    srcFormId = fldSrcFormId.DynamicProperty.GetValue<string>(entryRow);
                    srcSrcBillNo = fldSrcBillNo.DynamicProperty.GetValue<string>(entryRow);
                    //srcFormId = "PRD_MO";
                    //srcSrcBillNo = entryRow["FPPBOMBILLNO"]?.ToString();
                    //string FPPBOMFID = entryRow["FPPOMFID"]?.ToString();
                    //FPPBOMFENTRYID = entryRow["FPPBOMFENTRYID"]?.ToString();
                    if (string.IsNullOrWhiteSpace(srcFormId)
                        || string.IsNullOrWhiteSpace(srcSrcBillNo)
                        )
@@ -145,7 +141,7 @@
                }
            }
            // 为新建的源单关联信息,设置内码
            IDBService dbService =Kingdee.K3.SCM.App.ServiceHelper.GetService<IDBService>();
            IDBService dbService = Kingdee.K3.SCM.App.ServiceHelper.GetService<IDBService>();
            dbService.AutoSetPrimaryKey(this.Context, allNewLinkRows.ToArray(), linkEntry.DynamicObjectType);
        }
src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB.cs
@@ -42,7 +42,7 @@
            e.FieldKeys.Add("FBaseJoinQty");
        }
        private const string POFormId = "PRD_PPBOM";
        public List<string> FentryIdList = new List<string>();
        private List<string> FentryIdList = new List<string>();
        public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e)
        {
            base.BeforeExecuteOperationTransaction(e);
@@ -64,16 +64,10 @@
                    string srcFormId = "";
                    string srcSrcBillNo = "";
                    string FPPBOMFENTRYID = "";
                    try
                    {
                        srcFormId = "PRD_PPBOM";
                        srcSrcBillNo = entryRow["FPPBOMBILLNO"]?.ToString();
                        string FPPBOMFID = entryRow["FPPOMFID"]?.ToString();
                        FPPBOMFENTRYID = entryRow["FPPBOMFENTRYID"]?.ToString();
                    }
                    catch (Exception)
                    {
                    }
                    srcFormId = "PRD_PPBOM";
                    srcSrcBillNo = entryRow["FPPBOMBILLNO"]?.ToString();
                    string FPPBOMFID = entryRow["FPPOMFID"]?.ToString();
                    FPPBOMFENTRYID = entryRow["FPPBOMFENTRYID"]?.ToString();
                    if (string.IsNullOrWhiteSpace(srcFormId)
                        || string.IsNullOrWhiteSpace(srcSrcBillNo)
                        )
@@ -158,14 +152,14 @@
            if (FentryIdList.Count > 0)
            {
                string FentryId = string.Join(",", FentryIdList.ToArray());
   //             sql = string.Format(@"/*dialect*/
   //update a set FBASEQTY = FQTY
   //from T_STK_STKTRANSFERINENTRY_LK a
   //join T_STK_STKTRANSFERINENTRY b on a.FENTRYID = b.FENTRYID
   //where
   //--a.FSTABLENAME = 'T_PRD_PPBOMENTRY' and
   //a.FENTRYID in ({0})", FentryId);
   //             sqlList.Add(sql);
                //             sql = string.Format(@"/*dialect*/
                //update a set FBASEQTY = FQTY
                //from T_STK_STKTRANSFERINENTRY_LK a
                //join T_STK_STKTRANSFERINENTRY b on a.FENTRYID = b.FENTRYID
                //where
                //--a.FSTABLENAME = 'T_PRD_PPBOMENTRY' and
                //a.FENTRYID in ({0})", FentryId);
                //             sqlList.Add(sql);
                sql = string.Format(@"/*dialect*/update T_STK_STKTRANSFERINENTRY_R 
    set FSrcBillTypeId = 'PRD_PPBOM',FSRCBILLNO=b.FPPBOMBILLNO
    ,FTRANSRESERVELINK=1
@@ -175,7 +169,7 @@
                sqlList.Add(sql);
                DBServiceHelper.ExecuteBatch(Context, sqlList);
            }
        }
src/BLL/Demo.BillView/PRD/Pro_DayPlanPushZJDB2.cs
File was deleted
src/BLL/Demo.BillView/PRD/Pro_DayPlanReturnMaterial.cs
@@ -13,7 +13,7 @@
using Kingdee.BOS.ServiceHelper;
using Kingdee.K3.SCM.App;
namespace Demo.DynamicForm.PRD
namespace Demo.BillView.PRD
{
    /// <summary>
    /// 插件示例:日计划用料清单下推后,建立生产领料单与生产用料清单关联关系
@@ -42,7 +42,7 @@
            e.FieldKeys.Add("FBaseJoinQty");
        }
        private const string POFormId = "PRD_PPBOM";
        public List<string> FentryIdList = new List<string>();
        private List<string> FentryIdList = new List<string>();
        public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e)
        {
@@ -65,15 +65,9 @@
                    string srcFormId = "";
                    string srcSrcBillNo = "";
                    string FPPBOMFENTRYID = "";
                    try
                    {
                        srcFormId = "PRD_PPBOM";
                        srcSrcBillNo = entryRow["PPBOMBILLNO"].ToString();
                        FPPBOMFENTRYID = entryRow["PPBomEntryId"].ToString();
                    }
                    catch (Exception)
                    {
                    }
                    srcFormId = "PRD_PPBOM";
                    srcSrcBillNo = entryRow["PPBOMBILLNO"].ToString();
                    FPPBOMFENTRYID = entryRow["PPBomEntryId"].ToString();
                    if (string.IsNullOrWhiteSpace(srcFormId)
                        || string.IsNullOrWhiteSpace(srcSrcBillNo)
                        )
src/BLL/Demo.BillView/PRD/Pro_MaterialRequisitionAuditDayPlan.cs
@@ -13,7 +13,7 @@
using Kingdee.BOS.ServiceHelper;
using Kingdee.K3.SCM.App;
namespace Demo.DynamicForm.PRD
namespace Demo.BillView.PRD
{
    /// <summary>
    /// 插件示例:日计划用料清单下推后,建立生产领料单与生产用料清单关联关系
@@ -65,15 +65,10 @@
                    string srcFormId = "";
                    string srcSrcBillNo = "";
                    string FPPBOMFENTRYID = "";
                    try
                    {
                        srcFormId = "PRD_PPBOM";
                        srcSrcBillNo = entryRow["PPBOMBILLNO"].ToString();
                        FPPBOMFENTRYID = entryRow["PPBomEntryId"].ToString();
                    }
                    catch (Exception)
                    {
                    }
                    srcFormId = "PRD_PPBOM";
                    srcSrcBillNo = entryRow["PPBOMBILLNO"].ToString();
                    FPPBOMFENTRYID = entryRow["PPBomEntryId"].ToString();
                    if (string.IsNullOrWhiteSpace(srcFormId)
                        || string.IsNullOrWhiteSpace(srcSrcBillNo)
                        )
src/BLL/Demo.BillView/PRD/Pro_PPBomSave.cs
@@ -2,19 +2,12 @@
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Newtonsoft.Json.Linq;
using ZD.Cloud.Logger;
using ZD.Cloud.WebApi;
using Demo.Model.Model;
using System.Diagnostics;
using System.Linq;
using Kingdee.BOS.Core.Bill.PlugIn.Args;
@@ -38,8 +31,8 @@
                //var FID = this.View.Model.GetPKValue();
                var fBillNo = this.View.Model.GetValue("FBILLNO");
                Stopwatch sw = new Stopwatch();
                sw.Start();//开始计时
                //Stopwatch sw = new Stopwatch();
                //sw.Start();//开始计时
                //锁定的日计划不生成
                try
                {
@@ -68,7 +61,7 @@
 WHERE T4.FMustQty>0
and T3.FBILLNO='{0}'
", fBillNo);
                    LogHelper.Info("生成日计划用料清单准备数据sql:" + sql);
                    //LogHelper.Info("生成日计划用料清单准备数据sql:" + sql);
                    DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
                    DataTable dt = ds.Tables[0];
                    List<DayPlanMaterial> DayPlanMaterial = new List<DayPlanMaterial>();
@@ -114,7 +107,7 @@
                            });
                        }
                        LogHelper.Info($"日计划用料清单,数据准备完成,保存到Model实体,总行数:{DayPlanMaterial.Count},耗时:" + sw.Elapsed);
                        ////LogHelper.Info($"日计划用料清单,数据准备完成,保存到Model实体,总行数:{DayPlanMaterial.Count},耗时:" + sw.Elapsed);
                        var fidList = DayPlanMaterial.Select(x => x.FEntryID).Distinct().ToList();
                        int i = 1;
                        JArray Fentity = new JArray();
@@ -171,7 +164,7 @@
                            Fentity.Add(model);
                            if ((i >= 20 || i == fidList.Count) && (i % 20 == 0 || i == fidList.Count))
                            {
                                LogHelper.Info("日计划用料清单批量执行,记录循环的当前条数" + i);
                                //LogHelper.Info("日计划用料清单批量执行,记录循环的当前条数" + i);
                                JObject jsonRoot = new JObject()
                                {
                                    ["Creator"] = "",
@@ -209,7 +202,7 @@
                                }
                                if (saveIsSuc != "TRUE")
                                {
                                    LogHelper.Error("日计划用料清单列表生成失败:" + jsonRoot.ToString());
                                    //LogHelper.Error("日计划用料清单列表生成失败:" + jsonRoot.ToString());
                                    this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
                                }
                                Fentity = new JArray();
@@ -217,12 +210,12 @@
                            i++;
                        }
                    }
                    sw.Stop();//结束计时
                    LogHelper.Info("生成日计划用料清单运行总时长:" + sw.Elapsed);
                    //sw.Stop();//结束计时
                    ////LogHelper.Info("生成日计划用料清单运行总时长:" + sw.Elapsed);
                }
                catch (Exception ex)
                {
                    LogHelper.Error("日计划用料清单+" + ex.Message.ToString());
                    //LogHelper.Error("日计划用料清单+" + ex.Message.ToString());
                }
            }
            catch (Exception ex)
src/BLL/Demo.BillView/PRD/Pro_PPBomSubmit.cs
@@ -2,21 +2,14 @@
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Newtonsoft.Json.Linq;
using ZD.Cloud.Logger;
using ZD.Cloud.WebApi;
using Demo.Model.Model;
using System.Diagnostics;
using System.Linq;
using Kingdee.BOS.Core.Bill.PlugIn.Args;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
namespace Demo.BillView.PRD
@@ -83,7 +76,7 @@
 WHERE T4.FMustQty>0
and T3.FBILLNO='{0}'
", fBillNo);
                    LogHelper.Info("生成日计划用料清单准备数据sql:" + sql);
                    //LogHelper.Info("生成日计划用料清单准备数据sql:" + sql);
                    DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
                    DataTable dt = ds.Tables[0];
                    List<DayPlanMaterial> DayPlanMaterial = new List<DayPlanMaterial>();
@@ -211,7 +204,7 @@
                                }
                                if (saveIsSuc != "TRUE")
                                {
                                    LogHelper.Error("日计划用料清单列表生成失败:" + jsonRoot.ToString());
                                    //LogHelper.Error("日计划用料清单列表生成失败:" + jsonRoot.ToString());
                                    //this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
                                }
                                Fentity = new JArray();
@@ -227,7 +220,7 @@
            }
            catch (Exception ex)
            {
                LogHelper.Error("日计划用料清单列表生成失败:" + ex.Message.ToString());
                //LogHelper.Error("日计划用料清单列表生成失败:" + ex.Message.ToString());
            }
        }
@@ -269,7 +262,7 @@
            }
            catch (Exception ex)
            {
                LogHelper.Error("日计划用料清单列表生成失败:" + ex.Message.ToString());
                //LogHelper.Error("日计划用料清单列表生成失败:" + ex.Message.ToString());
            }
        }
src/BLL/Demo.BillView/PRD/Pro_RJHYLQDBGFSH.cs
@@ -12,9 +12,9 @@
using System.ComponentModel;
using Kingdee.BOS.ServiceHelper;
using Kingdee.K3.SCM.App;
using ZD.Cloud.Logger;
namespace Demo.DynamicForm.PRD
namespace Demo.BillView.PRD
{
    [Description("[日计划用料清单变更-反审核]按钮功能]")]
    [HotUpdate]
src/BLL/Demo.BillView/PRD/Pro_RJHYLQDBGSH.cs
@@ -12,9 +12,9 @@
using System.ComponentModel;
using Kingdee.BOS.ServiceHelper;
using Kingdee.K3.SCM.App;
using ZD.Cloud.Logger;
namespace Demo.DynamicForm.PRD
namespace Demo.BillView.PRD
{
    [Description("[日计划用料清单变更-审核]按钮功能]")]
    [HotUpdate]
src/BLL/Demo.BillView/PRD/Pro_RjhylqdDatachange.cs
@@ -12,7 +12,7 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ZD.Cloud.Logger;
namespace Demo.BillView.PRD
{
@@ -25,13 +25,13 @@
            //if (!isSearched) return;
            base.DataChanged(e);
            var model = this.View.Model;
            double FHQty = Convert.ToDouble(model.GetValue("FHQty"));
            decimal FHQty = Convert.ToDecimal(model.GetValue("FHQty"));
            //分子
            if (e.Field.Key.Contains("FNumerator") || e.Field.Key.Contains("FDenominator") || e.Field.Key.Contains("FUseRate"))
            {
                double FNumerator = Convert.ToDouble(model.GetValue("FNumerator", e.Row));//分子
                double FDenominator = Convert.ToDouble(model.GetValue("FDenominator", e.Row));//分母
                double FUseRate = Convert.ToDouble(model.GetValue("FUseRate", e.Row));//使用比例
                decimal FNumerator = Convert.ToDecimal(model.GetValue("FNumerator", e.Row));//分子
                decimal FDenominator = Convert.ToDecimal(model.GetValue("FDenominator", e.Row));//分母
                decimal FUseRate = Convert.ToDecimal(model.GetValue("FUseRate", e.Row));//使用比例
                if (FNumerator == 0 || FDenominator == 0)
                    return;
                var Hqty = Math.Ceiling((FNumerator / FDenominator) * FHQty * (FUseRate / 100));
src/BLL/Demo.BillView/PRD/Pro_SCHBFSH.cs
@@ -13,9 +13,9 @@
using Kingdee.BOS.ServiceHelper;
using Kingdee.K3.SCM.App;
namespace Demo.DynamicForm.PRD
namespace Demo.BillView.PRD
{
    [Description("[生产汇报单-反审核]按钮功能]")]
    [Description("[生产汇报单-反审核]服务插件]")]
    [HotUpdate]
    public class Pro_SCHBFSH : AbstractOperationServicePlugIn
    {
src/BLL/Demo.BillView/PRD/Pro_SCHBSH.cs
@@ -13,9 +13,9 @@
using Kingdee.BOS.ServiceHelper;
using Kingdee.K3.SCM.App;
namespace Demo.DynamicForm.PRD
namespace Demo.BillView.PRD
{
    [Description("[生产汇报单-审核]按钮功能]")]
    [Description("[生产汇报单-审核]服务插件]")]
    [HotUpdate]
    public class Pro_SCHBSH : AbstractOperationServicePlugIn
    {
src/BLL/Demo.BillView/PRD/Pro_SCLLFSH.cs
@@ -13,9 +13,9 @@
using Kingdee.BOS.ServiceHelper;
using Kingdee.K3.SCM.App;
namespace Demo.DynamicForm.PRD
namespace Demo.BillView.PRD
{
    [Description("[生产领料单-反审核]按钮功能]")]
    [Description("[生产领料单-反审核]服务插件]")]
    [HotUpdate]
    public class Pro_SCLLFSH : AbstractOperationServicePlugIn
    {
src/BLL/Demo.BillView/PRD/Pro_SCLLSH.cs
@@ -12,11 +12,11 @@
using System.ComponentModel;
using Kingdee.BOS.ServiceHelper;
using Kingdee.K3.SCM.App;
using ZD.Cloud.Logger;
namespace Demo.DynamicForm.PRD
namespace Demo.BillView.PRD
{
    [Description("[生产领料单-审核]按钮功能]")]
    [Description("[生产领料单-审核]服务插件]")]
    [HotUpdate]
    public class Pro_SCLLSH : AbstractOperationServicePlugIn
    {
@@ -57,7 +57,7 @@
                    if (fentryId == "0")
                        continue;
                    sql = string.Format($"/*dialect*/update Sc_DayPlanPPBomBillSub set  FPickedQty = FPickedQty + {Convert.ToDecimal(entryRow["BaseActualQty"])} where FEntryID = {fentryId} ");
                    //LogHelper.Info("领料单的日计划用料清单ID:" + fentryId);
                    ////LogHelper.Info("领料单的日计划用料清单ID:" + fentryId);
                    sqlList.Add(sql);
                    sql = string.Format($"/*dialect*/update T_PRD_PICKMTRLDATA set  FisFX =  1 where FentryId = {entryRow["Id"]}");
                    sqlList.Add(sql);
src/BLL/Demo.BillView/PRD/Pro_SCTLFSH.cs
@@ -13,9 +13,9 @@
using Kingdee.BOS.ServiceHelper;
using Kingdee.K3.SCM.App;
namespace Demo.DynamicForm.PRD
namespace Demo.BillView.PRD
{
    [Description("[生产退料单-反审核]按钮功能]")]
    [Description("[生产退料单-反审核]服务插件]")]
    [HotUpdate]
    public class Pro_SCTLFSH : AbstractOperationServicePlugIn
    {
src/BLL/Demo.BillView/PRD/Pro_SCTLSH.cs
@@ -12,11 +12,11 @@
using System.ComponentModel;
using Kingdee.BOS.ServiceHelper;
using Kingdee.K3.SCM.App;
using ZD.Cloud.Logger;
namespace Demo.DynamicForm.PRD
namespace Demo.BillView.PRD
{
    [Description("[生产退料单-审核]按钮功能]")]
    [Description("[生产退料单-审核]服务插件]")]
    [HotUpdate]
    public class Pro_SCTLSH : AbstractOperationServicePlugIn
    {
@@ -57,7 +57,7 @@
                    if (fentryId == "0")
                        continue;
                    sql = string.Format($"/*dialect*/update Sc_DayPlanPPBomBillSub set  FRetunrnQty = FRetunrnQty + {Convert.ToDecimal(entryRow["BaseQty"])} where FEntryID = {fentryId} ");
                    //LogHelper.Info("领料单的日计划用料清单ID:" + fentryId);
                    ////LogHelper.Info("领料单的日计划用料清单ID:" + fentryId);
                    sqlList.Add(sql);
                    sql = string.Format($"/*dialect*/update  T_PRD_RETURNMTRLENTRY set  FisFX =  1 where FentryId = {entryRow["Id"]}");
                    sqlList.Add(sql);
src/BLL/Demo.BillView/PRD/Pro_ScDayImport.cs
@@ -12,7 +12,7 @@
using System.ComponentModel;
using System.Data;
using Newtonsoft.Json.Linq;
using ZD.Cloud.Logger;
using Demo.Model.Model;
using System.Linq;
using ZD.Share.Common;
@@ -34,10 +34,10 @@
        //}
        public override void BarItemClick(BarItemClickEventArgs e)
        {
            LogHelper.Info("导入功能点击按钮:");
            //LogHelper.Info("导入功能点击按钮:");
            if (e.BarItemKey.ToUpper().Equals("TBIMPORT"))
            {
                LogHelper.Info("导入功能点击按钮:");
                //LogHelper.Info("导入功能点击按钮:");
                ImportData();
                //WriteImportLog();
                //this.View.ShowErrMessage("测试导入功能点击按钮");
@@ -45,7 +45,7 @@
            if (e.BarItemKey.ToUpper().Equals("TBWJSC"))
            {
                LogHelper.Info("文件上传功能点击按钮:");
                //LogHelper.Info("文件上传功能点击按钮:");
                ImportDataSC(fileFullPath);
            }
        }
@@ -88,7 +88,7 @@
                    dt.Rows.RemoveAt(0);//去除标题行
                    //DataSet ds = helper.ReadFromFile(fileFullPath, 1);
                    //DataTable dt = ds.Tables[0];
                    LogHelper.Info("导入功能:dt行数:" + dt.Rows.Count);
                    //LogHelper.Info("导入功能:dt行数:" + dt.Rows.Count);
                    DateTime date = Convert.ToDateTime(this.Model.GetValue("F_Paez_Date"));
                    if (dt.Rows.Count > 0)
                    {
@@ -157,7 +157,7 @@
LEFT JOIN T_ENG_WORKCENTER C ON A.FHSOURCEID=C.FID 
WHERE A.FDOCUMENTSTATUS NOT IN ('E') AND 
FSCORDERNO ='{0}' AND B.FNUMBER ='{1}' AND A.FSRCBILLENTRYSEQ ='{3}' AND (ISNULL(C.FNUMBER,'') ='{2}' OR (SELECT COUNT(*) FROM T_ENG_WORKCENTER WHERE ISNULL(C.FNUMBER,'') ='{2}')=0)", dt.Rows[i][1].ToString(), dt.Rows[i][5].ToString(), dt.Rows[i][4].ToString(), dt.Rows[i][2].ToString());
                            //LogHelper.Error(sql);
                            ////LogHelper.Error(sql);
                            DataTable dayPlanDt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
                            if (dayPlanDt.Rows.Count > 0)
                            {
@@ -257,7 +257,7 @@
                Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity");
                //单据体信息转换为列表集合
                DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity);
                LogHelper.Info("导入功能列表行数:" + entityDataObjoct.Count);
                //LogHelper.Info("导入功能列表行数:" + entityDataObjoct.Count);
                List<string> sqlList = new List<string>();
                foreach (DynamicObject current in entityDataObjoct)
                {
@@ -448,7 +448,7 @@
                        }
                        else
                        {
                            LogHelper.Error("生产日计划导入 新增异常:" + saveObj.ToString());
                            //LogHelper.Error("生产日计划导入 新增异常:" + saveObj.ToString());
                            this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
                        }
                    }
@@ -479,7 +479,7 @@
                        }
                        else
                        {
                            LogHelper.Error("生产日计划导入 新增异常:" + saveObj.ToString());
                            //LogHelper.Error("生产日计划导入 新增异常:" + saveObj.ToString());
                            this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
                        }
                    }
@@ -488,7 +488,7 @@
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex.ToString());
                //LogHelper.Error(ex.ToString());
                this.View.ShowErrMessage(ex.ToString());
            }
@@ -655,14 +655,14 @@
                    string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                    if (saveIsSuc != "TRUE")
                    {
                        LogHelper.Error("生产日计划导入记录日志,新增异常json:" + jsonRoot.ToString());
                        //LogHelper.Error("生产日计划导入记录日志,新增异常json:" + jsonRoot.ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error("生产日计划导入记录日志跳出:" + ex.Message.ToString());
                //LogHelper.Error("生产日计划导入记录日志跳出:" + ex.Message.ToString());
            }
        }
src/BLL/Demo.BillView/PRD/Pro_ShowParameter.cs
@@ -11,7 +11,7 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ZD.Cloud.Logger;
namespace Demo.BillView.PRD
{
src/BLL/Demo.BillView/PRD/Pro_TlPush.cs
@@ -15,7 +15,7 @@
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Newtonsoft.Json.Linq;
using ZD.Cloud.Logger;
using ZD.Cloud.WebApi;
using ZD.Share.Common;
using Demo.Model;
@@ -28,16 +28,33 @@
    [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;
                CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
                if ((a = e.BarItemKey.ToUpperInvariant()) != null)
                {
                    if (a == "TBPUSH")
                    {
                        string btnType = "生成送货单";
                        //验证用户权限
                        if (!IsHaveQX(btnType))
                            return;
                        //验证是否审核
                        if (this.View.Model.GetValue("FDOCUMENTSTATUS").ToString() != "C")
                        {
                            this.View.ShowErrMessage("单据未审核");
                            return;
                        }
                        //验证是否关闭
                        if (Convert.ToBoolean(this.View.Model.GetValue("FHCloseType")))
                        {
                            this.View.ShowErrMessage("单据已关闭");
                            return;
                        }
                        Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity");//标识
                        DynamicObjectCollection entityRows = this.Model.GetEntityDataObject(entity);//获取父单据体行集合
                        int ret = entityRows.Where(x => Convert.ToDecimal(x["FHQty"]) - Convert.ToDecimal(x["FReciveCount"]) > 0 && !Convert.ToBoolean(x["FCloseStatus"])).Count();
@@ -167,18 +184,50 @@
                        }
                        else
                        {
                            LogHelper.Error(jsonRoot.ToString());
                            //LogHelper.Error(jsonRoot.ToString());
                            this.View.ShowErrMessage(jsonRoot.ToString());
                        }
                    }
                    else if (a == "TBDEMANDPLAN")
                    {
                        string btnType = "提料计划选单";
                        //验证用户权限
                        if (!IsHaveQX(btnType))
                            return;
                        DemandPlan();
                    }
                    else if (a == "TBPURCHASE")
                    {
                        string btnType = "采购订单选单";
                        //验证用户权限
                        if (!IsHaveQX(btnType))
                            return;
                        //选单选择采购订单
                        PurChasePlan();
                    }
                    else if (a == "BTNCLOSE")
                    {
                        var FID = this.View.Model.GetPKValue();
                        var fCloseStatus = Convert.ToBoolean(this.View.Model.GetValue("FHCloseType"));
                        if (fCloseStatus)
                        {
                            this.View.ShowMessage("单据已关闭");
                        }
                        string sql = string.Format(@"/*dialect*/
update Cg_PODemandPlanBillMain set
FHCloseMan = {0},
FHCloseDate = GETDATE(),
FHCloseType = 1
where fid IN ({1})", Context.UserId, FID);
                        DBServiceHelper.Execute(Context, sql);
                        sql = string.Format(@"/*dialect*/
UPDATE A SET
A.FPODemandPlanCount -= B.FHQTY
FROM t_PUR_POOrderEntry A
JOIN Cg_PODemandPlanBillSub B ON A.FENTRYID = B.FHPOOrderEntryID
where B.FID IN ({0})  AND B.FCLOSESTATUS = 0  ", FID);
                        this.View.Refresh();
                        this.View.ShowMessage("操作成功");
                    }
                }
            }
@@ -211,8 +260,7 @@
                string FentryId = string.Join(",", FentryIdList);
                string isCancleSql = string.Format(@"/*dialect*/
select FSEQ from Cg_PODemandPlanBillSub
FCLOSESTATUS = 1
where fentryid in ({0})", FentryId);
where FCLOSESTATUS = 1 and fentryid in ({0})", FentryId);
                DataTable isCancleTable = DBServiceHelper.ExecuteDataSet(Context, isCancleSql).Tables[0];
                if (isCancleTable.Rows.Count > 0)
                {
@@ -236,6 +284,8 @@
                this.View.ShowForm(showParameter, delegate (FormResult result)
                {
                    object returnData = result.ReturnData;
                    if (returnData == null)
                        return;
                    if (returnData is ListSelectedRowCollection)
                    {
                        ListSelectedRowCollection listSelectedRowCollection = returnData as ListSelectedRowCollection;
@@ -253,9 +303,25 @@
                    //    return;
                    //}
                    string FSelectId = string.Join(",", FSelectIdList);
                    //验证选单物料是否一致
                    string sql = string.Format(@"/*dialect*/
SELECT COUNT(*) ERRCOUNT FROM CG_PODEMANDPLANBILLSUB
WHERE FENTRYID IN({0})
AND FHMATERID NOT IN
(
SELECT FHMATERID FROM CG_PODEMANDPLANBILLSUB
WHERE FENTRYID IN({1})
)", FentryId, FSelectId);
                    int ErrCount = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0);
                    if (ErrCount > 0)
                    {
                        this.View.ShowErrMessage("选单数据物料不一致");
                        return;
                    }
                    //需要选择变更的数据 以及 选单选中的数据 判断数据合理性
                    //选单界面B选中行数据物料 需要一致 且B占用采购单数量需要满足A的需求量
                    string sql = string.Format(@"/*dialect*/
                    sql = string.Format(@"/*dialect*/
SELECT count(*) errcount FROM 
(
select FHMATERID,SUM(FHQTY)FHQTY from Cg_PODemandPlanBillSub 
@@ -269,10 +335,10 @@
B
ON A.FHMATERID=B.FHMATERID
WHERE B.FHQTY < A.FHQTY", FentryId, FSelectId);
                    int ErrCount = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0);
                    ErrCount = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0);
                    if (ErrCount > 0)
                    {
                        this.View.ShowErrMessage("选单数据占用的采购订单数量不满足需要变更数量");
                        this.View.ShowErrMessage("选单数据占用的采购订单物料不一致 或者 数量不满足需要变更数量");
                        return;
                    }
                    //验证通过
@@ -342,7 +408,7 @@
                    string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                    if (saveIsSuc != "TRUE")
                    {
                        LogHelper.Error("提料计划单选单新增异常:" + saveObj.ToString());
                        //LogHelper.Error("提料计划单选单新增异常:" + saveObj.ToString());
                        this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
                    }
                    else
@@ -395,7 +461,7 @@
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')
 and FCloseStatus in (0) and FMRPCLOSESTATUS in('A')
 and t1.FBillTypeID in('83d822ca3e374b4ab01e5dd46a0062bd','6d01d059713d42a28bb976c90a121142')
";
                        List<PurchaseInventory> PurchaseInventory = DBServiceHelper.ExecuteDataSet(Context, cgddSql).ToModelList<PurchaseInventory>();
@@ -552,7 +618,7 @@
                        saveIsSuc = _saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                        if (saveIsSuc != "TRUE")
                        {
                            LogHelper.Error(saveObj.ToString());
                            //LogHelper.Error(saveObj.ToString());
                        }
@@ -596,9 +662,8 @@
                }
                string FentryId = string.Join(",", FentryIdList);
                string isCancleSql = string.Format(@"/*dialect*/
select FSEQ from Cg_PODemandPlanBillSub
FCLOSESTATUS = 1
where fentryid in ({0})", FentryId);
SELECT FSEQ FROM CG_PODEMANDPLANBILLSUB
WHERE  FCLOSESTATUS = 1  AND FENTRYID IN ({0})", FentryId);
                DataTable isCancleTable = DBServiceHelper.ExecuteDataSet(Context, isCancleSql).Tables[0];
                if (isCancleTable.Rows.Count > 0)
                {
@@ -621,6 +686,8 @@
                this.View.ShowForm(showParameter, delegate (FormResult result)
                {
                    object returnData = result.ReturnData;
                    if (returnData == null)
                        return;
                    if (returnData is ListSelectedRowCollection)
                    {
                        ListSelectedRowCollection listSelectedRowCollection = returnData as ListSelectedRowCollection;
@@ -628,13 +695,29 @@
                        {
                            foreach (var listSelectedRow in listSelectedRowCollection)
                            {
                                FSelectIdList.Add(listSelectedRow.DataRow["t1_FENTRYID"].ToString());
                                FSelectIdList.Add(listSelectedRow.DataRow["t3_FENTRYID"].ToString());
                            }
                        }
                    }
                    string FSelectId = string.Join(",", FSelectIdList);
                    //验证所选采购订单物料数量 是否小于 提料计划物料数量 不满足给出提示 return
                    //验证选单物料是否一致
                    string sql = string.Format(@"/*dialect*/
SELECT COUNT(*) ERRCOUNT FROM CG_PODEMANDPLANBILLSUB
WHERE FENTRYID IN({0})
AND FHMATERID NOT IN
(
SELECT FMATERIALID FROM T_PUR_POORDERENTRY
WHERE FENTRYID IN({1})
)", FentryId, FSelectId);
                    int ErrCount = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0);
                    if (ErrCount > 0)
                    {
                        this.View.ShowErrMessage("选单数据物料不一致");
                        return;
                    }
                    //验证所选采购订单物料数量 是否小于 提料计划物料数量 不满足给出提示 return
                    sql = string.Format(@"/*dialect*/
SELECT count(*) errcount FROM 
(
select FHMATERID,SUM(FHQTY)FHQTY from Cg_PODemandPlanBillSub 
@@ -648,10 +731,10 @@
B
ON A.FHMATERID=B.FMaterialId
WHERE B.FQTY < A.FHQTY", FentryId, FSelectId);
                    int ErrCount = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0);
                    ErrCount = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0);
                    if (ErrCount > 0)
                    {
                        this.View.ShowErrMessage("选单数据占用的采购订单数量不满足需要变更数量");
                        this.View.ShowErrMessage("选单数据占用的采购订单物料不一致 或者 数量不满足需要变更数量");
                        return;
                    }
                    //验证通过
@@ -661,18 +744,18 @@
SELECT A.FID,C.FHDate,D.FSupplierID,E.FNUMBER AS FSupplierName,C.FSettleCurrId,A.FHMATERID,F.FNUMBER AS FMATERIALNAME,A.FHQty,A.FHSourceInterID,A.FHSourceEntryID,A.FHSourceBillNo,A.FDayPlanDate,A.FDayPlanDate,A.FHRelationQty,B.FID AS FHPOOrderInterID,B.FENTRYID AS FHPOOrderEntryID,C.FBILLNO AS FHPOOrderBillNo,B.FSEQ AS FHPOOrderFseq,A.FErpClsID FROM 
(
select * from Cg_PODemandPlanBillSub
where FEntryID IN({0})
where FEntryID IN(109437)
)
A
JOIN
(select * from t_PUR_POOrderEntry 
where FEntryID IN({1})
where FEntryID IN(100229)
)
B
ON A.FHMATERID = B.FMaterialId
JOIN t_PUR_POOrder PO ON B.FID = PO.FID
JOIN Cg_PODemandPlanBillMain C ON A.FID = C.FID
JOIN Cg_PODemandPlanBillMain D ON B.FID = D.FID
JOIN t_PUR_POOrder D ON B.FID = D.FID
JOIN T_BD_SUPPLIER E ON D.FSupplierID = E.FSUPPLIERID 
JOIN T_BD_MATERIAL F ON A.FHMATERID = F.FMATERIALID
", FentryId, FSelectId);
@@ -721,7 +804,7 @@
                    string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                    if (saveIsSuc != "TRUE")
                    {
                        LogHelper.Error("提料计划单选单新增异常:" + saveObj.ToString());
                        //LogHelper.Error("提料计划单选单新增异常:" + saveObj.ToString());
                        this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
                    }
                    else
@@ -763,6 +846,16 @@
                        sqlList.Add(updateSql);
                        //执行sql
                        int resCount = DBServiceHelper.ExecuteBatch(Context, sqlList);
                        string _pageId = Guid.NewGuid().ToString();
                        BillShowParameter _showParameter = new BillShowParameter();
                        _showParameter.FormId = "paez_PODemandPlan";
                        _showParameter.OpenStyle.ShowType = ShowType.MainNewTabPage;
                        _showParameter.PageId = _pageId;
                        _showParameter.Status = OperationStatus.EDIT;
                        // 传入需要修改的销售订单内码,演示代码直接固定写死为100001
                        _showParameter.PKey = saveObj["Result"]["Id"].ToString();
                        this.View.ShowForm(_showParameter);
                    }
                });
            }
@@ -771,6 +864,28 @@
                throw ex;
            }
        }
        public bool IsHaveQX(string btnType)
        {
            string sql = string.Format(@"/*dialect*/
SELECT count(*) mmm  FROM (
SELECT A.FROLEID,B.FPERMISSIONSTATUS,C.FNUMBER,D.FNAME   FROM
T_SEC_USERORG Z
JOIN T_SEC_USERROLEMAP X ON Z.FENTITYID = X.FENTITYID
JOIN T_SEC_FUNCPERMISSION  A  ON X.FROLEID =A.FROLEID
JOIN  T_SEC_FUNCPERMISSIONENTRY B ON A.FITEMID =B.FITEMID
JOIN T_SEC_PERMISSIONITEM C ON B.FPERMISSIONITEMID = C.FITEMID
JOIN T_SEC_PERMISSIONITEM_L D ON C.FITEMID = D.FITEMID AND FLOCALEID = 2052
WHERE A.FOBJECTTYPEID = 'PAEZ_PODEMANDPLAN'
AND  Z.FUSERID={0} AND FNAME = '{1}'
) T where FPERMISSIONSTATUS = 0
", Context.UserId, btnType);
            int result = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0);
            if (result > 0)
                return true;
            else
                return false;
        }
    }
}
src/BLL/Demo.BillView/PRD/Pro_TlPushAudit.cs
@@ -13,7 +13,7 @@
using Kingdee.BOS.ServiceHelper;
using Kingdee.K3.SCM.App;
namespace Demo.DynamicForm.PRD
namespace Demo.BillView.PRD
{
    [Description("[弃用]送货计划单插件关联提料计划单")]
    [HotUpdate]
@@ -49,18 +49,11 @@
                {
                    string srcFormId = "";
                    string srcSrcBillNo = "";
                    try
                    {
                        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)
                    {
                    }
                    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);
                    if (string.IsNullOrWhiteSpace(srcFormId)
                        || string.IsNullOrWhiteSpace(srcSrcBillNo)
                        )
src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatImport.cs
@@ -9,7 +9,7 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ZD.Cloud.Logger;
namespace Demo.BillView.PRD
{
@@ -22,7 +22,7 @@
            base.BarItemClick(e);
            if (e.BarItemKey.Equals("btImport"))
            {
                //LogHelper.Info("导入功能点击按钮:");
                ////LogHelper.Info("导入功能点击按钮:");
                DynamicFormShowParameter formPa = new DynamicFormShowParameter();
                formPa.FormId = "Paez_ScDayImport";
                this.View.ShowForm(formPa);
src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatform.cs
@@ -27,15 +27,13 @@
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Threading;
using System.Web;
using ZD.Cloud.Logger;
using ZD.Cloud.WebApi;
using ZD.Share.Common;
namespace Demo.DynamicForm.PRD
namespace Demo.BillView.PRD
{
    [Description("生产计划平台按钮功能")]
    [HotUpdate]
@@ -87,7 +85,7 @@
            base.BarItemClick(e);
            try
            {
                LogHelper.Info("生产计划平台按钮:" + e.BarItemKey.ToUpper().ToString());
                //LogHelper.Info("生产计划平台按钮:" + e.BarItemKey.ToUpper().ToString());
                if (e.BarItemKey.ToUpper() == "BTEXPORT")
                {
                    ExportExcel();
@@ -145,7 +143,7 @@
                    return;
                    try
                    {
                        DayPlanPPBomBillBatch();
                        DayPlanPPBomBillBatch1();
                        Extraction();
                    }
                    catch (Exception ex)
@@ -207,11 +205,11 @@
                    sqlList.Add(sql);
                    string columnName = DBServiceHelper.ExecuteScalar<string>(Context, "/*dialect*/ select stuff((select ',' + name  from syscolumns Where id = object_Id('Sc_WorkBillMainXnqt') for xml path('')),1,1,'') as name ", "");
                    sql = $"insert into  Sc_WorkBillMainXnqt({columnName}) select {columnName} from  Sc_WorkBillSortBillMain";
                    LogHelper.Info("测试1:" + sql);
                    //LogHelper.Info("测试1:" + sql);
                    sqlList.Add(sql);
                    columnName = DBServiceHelper.ExecuteScalar<string>(Context, "/*dialect*/ select stuff((select ',' + name  from syscolumns Where id = object_Id('Sc_WorkBillSubXnqt') for xml path('')),1,1,'') as name ", "");
                    sql = $"insert into  Sc_WorkBillSubXnqt({columnName}) select {columnName} from  Sc_WorkBillSortBillSub";
                    LogHelper.Info("测试1:" + sql);
                    //LogHelper.Info("测试1:" + sql);
                    sqlList.Add(sql);
                    sql = $"update Sc_WorkBillSubXnqt set  FComplete=''";
@@ -233,7 +231,7 @@
        /// <param name="e"></param>    
        public override void EntityRowDoubleClick(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.EntityRowClickEventArgs e)
        {
            LogHelper.Info("[行双击事件]");
            //LogHelper.Info("[行双击事件]");
            base.EntityRowClick(e);
            DynamicFormShowParameter formPa = new DynamicFormShowParameter();
@@ -501,7 +499,7 @@
                    string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                    if (saveIsSuc != "TRUE")
                    {
                        LogHelper.Error("生产计划平台保存失败:" + jsonRoot.ToString());
                        //LogHelper.Error("生产计划平台保存失败:" + jsonRoot.ToString());
                        this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
                    }
                }
@@ -625,7 +623,7 @@
                    string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                    if (saveIsSuc != "TRUE")
                    {
                        LogHelper.Error("生产计划平台新增保存失败:" + saveObj.ToString());
                        //LogHelper.Error("生产计划平台新增保存失败:" + saveObj.ToString());
                        this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
                    }
                    if (saveIsSuc == "TRUE")
@@ -743,12 +741,12 @@
        public void CompleteSetAnalysisBatch()
        {
            LogHelper.Info("齐套分析批量开始准备数据:");
            //LogHelper.Info("齐套分析批量开始准备数据:");
            try
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();//开始计时
                LogHelper.Info("齐套分析开始准备数据:" + sw.Elapsed);
                //Stopwatch sw = new Stopwatch();
                //sw.Start();//开始计时
                ////LogHelper.Info("齐套分析开始准备数据:" + sw.Elapsed);
                //清空齐套临时表
                DBServiceHelper.Execute(Context, "/*dialect*/  delete JIT_MOMaterReadysBill ");
                //更新状态
@@ -921,7 +919,7 @@
                    i++;
                }
                LogHelper.Info($"齐套分析,数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed);
                ////LogHelper.Info($"齐套分析,数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed);
                i = 1;
@@ -955,7 +953,7 @@
                    Fentity.Add(FBatchModel);
                    if ((i >= 20 || i == completeAnalysisTempModel.Count) && (i % 20 == 0 || i == completeAnalysisTempModel.Count))
                    {
                        LogHelper.Info("齐套分析批量执行,记录循环的当前条数" + i);
                        //LogHelper.Info("齐套分析批量执行,记录循环的当前条数" + i);
                        JObject jsonRoot = new JObject()
                        {
                            ["Creator"] = "",
@@ -972,7 +970,7 @@
                        string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                        if (saveIsSuc != "TRUE")
                        {
                            LogHelper.Error(jsonRoot.ToString());
                            //LogHelper.Error(jsonRoot.ToString());
                        }
                        Fentity = new JArray();
                    }
@@ -987,24 +985,24 @@
                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);
                //sw.Stop();//结束计时
                ////LogHelper.Info("齐套分析运行总时长:" + sw.Elapsed);
            }
            catch (Exception ex)
            {
                LogHelper.Error("齐套分析跳出:" + ex.Message.ToString());
                //LogHelper.Error("齐套分析跳出:" + ex.Message.ToString());
            }
        }
        //生产用料清单 齐套分析
        public string CompleteSetAnalysisByDataTable()
        {
            LogHelper.Info("齐套分析sql模式开始准备数据:");
            //LogHelper.Info("齐套分析sql模式开始准备数据:");
            string sql = "";
            try
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();//开始计时
                //Stopwatch sw = new Stopwatch();
                //sw.Start();//开始计时
                int maxFid = DBServiceHelper.ExecuteScalar<int>(Context, "select max(FID)FID FROM  JIT_MOMaterReadysBill", 0);
                //清空齐套临时表 (关闭的订单 今天之前的数据不做删除)
                DBServiceHelper.Execute(Context, @"/*dialect*/   
@@ -1088,10 +1086,10 @@
                int i = 1;
                //创建字典 用于储存物料 + 占用数量
                Dictionary<string, decimal> occupyDic = new Dictionary<string, decimal>();
                LogHelper.Info("齐套分析准备数据完成:" + sw.Elapsed);
                ////LogHelper.Info("齐套分析准备数据完成:" + sw.Elapsed);
                foreach (var item in DatePlanList)
                {
                    //LogHelper.Info("齐套分析第一个循环 : 工单号 :" + item.FPRDMOENTYID.ToString() + item.FHMASTERDATE.ToString("yyyy-MM-dd"));
                    ////LogHelper.Info("齐套分析第一个循环 : 工单号 :" + item.FPRDMOENTYID.ToString() + item.FHMASTERDATE.ToString("yyyy-MM-dd"));
                    //筛选出当日计划数据
                    var _BomList = BomList.Where(x => x.FHMASTERDATE == item.FHMASTERDATE && x.FPRDMOENTYID == item.FPRDMOENTYID).ToList();
                    foreach (var _item in _BomList)
@@ -1190,7 +1188,7 @@
                    i++;
                }
                LogHelper.Info($"齐套分析,数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed);
                ////LogHelper.Info($"齐套分析,数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed);
                List<string> sqlList = new List<string>();
                DataTable insertDT = new DataTable();
                insertDT.TableName = "JIT_MOMaterReadysBill";
@@ -1262,13 +1260,13 @@
                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);
                //sw.Stop();//结束计时
                ////LogHelper.Info("齐套分析运行总时长:" + sw.Elapsed);
                return "操作成功";
            }
            catch (Exception ex)
            {
                LogHelper.Error("齐套分析跳出:" + ex.Message.ToString());
                //LogHelper.Error("齐套分析跳出:" + ex.Message.ToString());
                return "操作失败," + ex.Message.ToString();
            }
@@ -1276,12 +1274,12 @@
        //物料用料清单 齐套分析
        public string CompleteSetAnalysisByDataTableBom()
        {
            LogHelper.Info("齐套分析(bom)sql模式开始准备数据:");
            //LogHelper.Info("齐套分析(bom)sql模式开始准备数据:");
            string sql = "";
            try
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();//开始计时
                //Stopwatch sw = new Stopwatch();
                //sw.Start();//开始计时
                int maxFid = DBServiceHelper.ExecuteScalar<int>(Context, "select max(FID)FID FROM  JIT_MOMaterReadysBomBill", 0);
                //清空齐套临时表
                DBServiceHelper.Execute(Context, "/*dialect*/  delete JIT_MOMaterReadysBomBill ");
@@ -1355,7 +1353,7 @@
                int i = 1;
                //创建字典 用于储存物料 + 占用数量
                Dictionary<string, decimal> occupyDic = new Dictionary<string, decimal>();
                LogHelper.Info("齐套分析(bom)准备数据完成:" + sw.Elapsed);
                ////LogHelper.Info("齐套分析(bom)准备数据完成:" + sw.Elapsed);
                foreach (var item in DatePlanList)
                {
                    //筛选出当日计划数据
@@ -1456,7 +1454,7 @@
                    i++;
                }
                LogHelper.Info($"齐套分析(bom),数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed);
                ////LogHelper.Info($"齐套分析(bom),数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed);
                List<string> sqlList = new List<string>();
                DataTable insertDT = new DataTable();
                insertDT.TableName = "JIT_MOMaterReadysBomBill";
@@ -1528,13 +1526,13 @@
                DBServiceHelper.Execute(Context, @"
/*dialect*/update Sc_WorkBillSortBillSub set FCompletebom = '齐套' where FEntryID NOT IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBomBill where isnull(FCOMPLETE,'未齐套') ='未齐套')
");
                sw.Stop();//结束计时
                LogHelper.Info("齐套分析(bom)运行总时长:" + sw.Elapsed);
                //sw.Stop();//结束计时
                ////LogHelper.Info("齐套分析(bom)运行总时长:" + sw.Elapsed);
                return "操作成功";
            }
            catch (Exception ex)
            {
                LogHelper.Error("齐套分析(bom)跳出:" + ex.Message.ToString());
                //LogHelper.Error("齐套分析(bom)跳出:" + ex.Message.ToString());
                return "操作失败," + ex.Message.ToString();
            }
@@ -1546,13 +1544,13 @@
        /// </summary>
        public void Xnqt()
        {
            LogHelper.Info("虚拟齐套分析sql模式开始准备数据:");
            //LogHelper.Info("虚拟齐套分析sql模式开始准备数据:");
            string sql = "";
            try
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();//开始计时
                LogHelper.Info("虚拟齐套分析开始准备数据:" + sw.Elapsed);
                //Stopwatch sw = new Stopwatch();
                //sw.Start();//开始计时
                ////LogHelper.Info("虚拟齐套分析开始准备数据:" + sw.Elapsed);
                //清空齐套临时表
                DBServiceHelper.Execute(Context, "/*dialect*/  delete JIT_MOMaterReadysBillXn ");
                ////更新状态
@@ -1726,7 +1724,7 @@
                    i++;
                }
                LogHelper.Info($"虚拟齐套分析,数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed);
                ////LogHelper.Info($"虚拟齐套分析,数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed);
                List<string> sqlList = new List<string>();
                int jdtmmm = 1;
                foreach (var item in completeAnalysisTempModel)
@@ -1753,13 +1751,13 @@
                //                DBServiceHelper.Execute(Context, @"
                ///*dialect*/update Sc_WorkBillSortBillSub set FComplete = '齐套' where FEntryID NOT IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBillXn where isnull(FCOMPLETE,'未齐套') ='未齐套')
                //");
                sw.Stop();//结束计时
                LogHelper.Info("虚拟齐套分析运行总时长:" + sw.Elapsed);
                //sw.Stop();//结束计时
                ////LogHelper.Info("虚拟齐套分析运行总时长:" + sw.Elapsed);
            }
            catch (Exception ex)
            {
                this.View.ShowErrMessage("异常:" + ex.Message.ToString());
                LogHelper.Error("虚拟齐套分析跳出:" + ex.Message.ToString());
                //LogHelper.Error("虚拟齐套分析跳出:" + ex.Message.ToString());
            }
            finally
            {
@@ -2047,7 +2045,7 @@
                {
                    // 需要捕获错误,以确保处理结束时,关闭进度滚动界面
                    // 引入功能实际处理函数
                    result = this.DayPlanPPBomBillBatch();
                    result = this.DayPlanPPBomBillBatch1();
                }
                finally
                {
@@ -2072,7 +2070,7 @@
        {
            try
            {
                DataTable dt = DBServiceHelper.ExecuteDataSet(Context, $"select FID from Sc_DayPlanPPBomBillMain where FDOCUMENTSTATUS <>'E'").Tables[0];
                DataTable dt = DBServiceHelper.ExecuteDataSet(Context, $"select FID from Sc_WorkBillSortBillMain where FDOCUMENTSTATUS <>'E'").Tables[0];
                List<string> zxSqlList = new List<string>();
                if (dt.Rows.Count > 0)
                {
@@ -2091,7 +2089,7 @@
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex.Message);
                //LogHelper.Error(ex.Message);
                return "操作失败,请联系系统管理员";
            }
@@ -2130,10 +2128,10 @@
                sqlWhere += $"AND t2.FID IN ({FDayPlanWorkID})";
            }
            DBServiceHelper.ExecuteBatch(Context, zxSqlList);
            Stopwatch sw = new Stopwatch();
            sw.Start();//开始计时
            //Stopwatch sw = new Stopwatch();
            //sw.Start();//开始计时
            LogHelper.Info("生成日计划用料清单准备数据");
            //LogHelper.Info("生成日计划用料清单准备数据");
            //锁定的日计划不生成
            try
            {
@@ -2161,7 +2159,7 @@
 LEFT join T_ENG_WORKCENTER t11 on t2.FHSOURCEID = t11.FID
 left join T_BD_DEPARTMENT td on t3.FWORKSHOPID=td.FDEPTID
 WHERE
t1.FHMASTERDATE between  DATEADD(day,-1,getdate()) and DATEADD(day,{{1} - 1},getdate())
t1.FHMASTERDATE between  DATEADD(day,-1,getdate()) and DATEADD(day,{0} - 1,getdate())
and t1.FEntryID not in 
(
select distinct FDAYPLANFID from Sc_DayPlanPPBomBillMain where FID IN 
@@ -2173,13 +2171,12 @@
select distinct FDAYPLANID from Sc_DayPlanPPBomBillSubBG
)
)
AND {0}
AND {1}
-- and T4.FMustQty>0
-- (
-- select  FDayPlanFID FROM Sc_DayPlanPPBomBillMain WHERE FID IN ( select distinct FID from  Sc_DayPlanPPBomBillSub WHERE FTranslateQty >0 or FPickedQty >0)
-- )
",
        sqlWhere, day);
", day, sqlWhere);
                LogHelper.Info("生成日计划用料清单准备数据sql:" + sql);
                DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
                DataTable dt = ds.Tables[0];
@@ -2229,7 +2226,7 @@
                            FMoSeq = dr["FMoSeq"].ToString(),
                        });
                    }
                    LogHelper.Info($"日计划用料清单,数据准备完成,保存到Model实体,总行数:{DayPlanMaterial.Count},耗时:" + sw.Elapsed);
                    LogHelper.Info($"日计划用料清单,数据准备完成,保存到Model实体,总行数:{DayPlanMaterial.Count},耗时:" );
                    var fidList = DayPlanMaterial.Select(x => x.FEntryID).Distinct().ToList();
                    int i = 1;
                    int jdtmmm = 1;
@@ -2290,7 +2287,7 @@
                        Fentity.Add(model);
                        if ((i >= 20 || i == fidList.Count) && (i % 20 == 0 || i == fidList.Count))
                        {
                            LogHelper.Info("日计划用料清单批量执行,记录循环的当前条数" + i);
                            //LogHelper.Info("日计划用料清单批量执行,记录循环的当前条数" + i);
                            JObject jsonRoot = new JObject()
                            {
                                ["Creator"] = "",
@@ -2322,8 +2319,8 @@
                            }
                            if (saveIsSuc != "TRUE")
                            {
                                //LogHelper.Error("日计划用料清单列表生成失败:" + jsonRoot.ToString());
                                LogHelper.Error(saveObj.ToString());
                                LogHelper.Error("日计划用料清单列表生成失败:" + jsonRoot.ToString());
                                //LogHelper.Error(saveObj.ToString());
                                return "操作失败," + saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString();
                                //this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
                            }
@@ -2336,8 +2333,8 @@
                        jdtmmm++;
                    }
                }
                sw.Stop();//结束计时
                LogHelper.Info("生成日计划用料清单运行总时长:" + sw.Elapsed);
                //sw.Stop();//结束计时
                ////LogHelper.Info("生成日计划用料清单运行总时长:" + sw.Elapsed);
                return "操作成功";
            }
            catch (Exception ex)
@@ -2353,11 +2350,11 @@
        /// </summary>
        public void Extraction()
        {
            LogHelper.Info("[提料计划准备阶段]:测试测试测试测试测试测试测试测试");
            //LogHelper.Info("[提料计划准备阶段]:测试测试测试测试测试测试测试测试");
            try
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();//开始计时
                //Stopwatch sw = new Stopwatch();
                //sw.Start();//开始计时
                string sql = string.Format(@"/*dialect*/  select distinct FHICMOINTERID FID  from  JIT_MOMaterReadysBill ");
                DataTable fidDt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
                string FDayPlanWorkID = "";
@@ -2372,7 +2369,7 @@
 exec [提料计划预处理] '{0}'
 ", FDayPlanWorkID.Replace(",", "-"));
                DBServiceHelper.Execute(Context, sql);
                LogHelper.Info("[提料计划准备阶段]提料计划预处理sql:" + sql);
                //LogHelper.Info("[提料计划准备阶段]提料计划预处理sql:" + sql);
                //采购订单数据
                sql = @"
 /*dialect*/
@@ -2386,7 +2383,7 @@
 and t1.FBillTypeID in('83d822ca3e374b4ab01e5dd46a0062bd','6d01d059713d42a28bb976c90a121142')
";
                List<PurchaseInventory> PurchaseInventory = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<PurchaseInventory>();
                LogHelper.Info("[提料计划准备阶段]可用采购订单数据sql:" + sql);
                //LogHelper.Info("[提料计划准备阶段]可用采购订单数据sql:" + sql);
                sql = string.Format(@"
 /*dialect*/
 SELECT T1.FID,FHMATERID,FHMASTERDATE,FHQTY,FCOMPLETECOUNT,FPRDMOMAINID,T2.FENTRYID,T1.FBILLNO, FNeedQty,(FLeadtime+FLeadTtime2)FFIXLEADTIME,t5.FMAXPOQTY,FJITBatch FMINPOQTY,FJITMATERIALGROUP,FJITMaterielDemand,FJITSafeStock,t3.FMATERIALID,t6.FNumber,FHQTY*FNeedQty NeedQty,FHPRDORGID FStockOrgId
@@ -2422,13 +2419,13 @@
AND T1.FID in ({0}) 
order by FHMASTERDATE
", FDayPlanWorkID);
                LogHelper.Info("[提料计划准备阶段]需要提料数据sql:" + sql);
                //LogHelper.Info("[提料计划准备阶段]需要提料数据sql:" + 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 == "163165").ToList();
                LogHelper.Info("[提料计划准备阶段]总物料行数" + MaterialIDList.Count);
                //LogHelper.Info("[提料计划准备阶段]总物料行数" + MaterialIDList.Count);
                //提料计划数据集临时存储集合
                List<PODemandPlanTemp> PODemandPlanTemp = new List<PODemandPlanTemp>();
                //sql集合 更新采购订单占用的提料计划数量
@@ -2440,10 +2437,10 @@
                    List<PurchaseInventory> _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).OrderBy(x => x.FENTRYID).ToList();
                    if (_PurchaseInventory.Count == 0)
                    {
                        LogHelper.Info("[提料计划开始]当前物料无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId);
                        //LogHelper.Info("[提料计划开始]当前物料无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId);
                        continue;
                    }
                    //LogHelper.Info(item.FMATERIALID.ToString());
                    ////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;//最小起订量
@@ -2462,7 +2459,7 @@
                        _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).OrderBy(x => x.FENTRYID).ToList();
                        if (_PurchaseInventory.Count == 0)
                        {
                            //LogHelper.Info("[提料计划开始]当前物料明细无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId);
                            ////LogHelper.Info("[提料计划开始]当前物料明细无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId);
                            break;
                        }
@@ -2471,12 +2468,12 @@
                        FEntryIdList.Add(_item.FENTRYID);
                        NeedQty += _item.NeedQty;
                        //LogHelper.Info("记录明细id:" + _item.FENTRYID + "");
                        //LogHelper.Info("总需求量:" + NeedQty + "");
                        //LogHelper.Info("最小起订量:" + FMINPOQTY + "");
                        ////LogHelper.Info("记录明细id:" + _item.FENTRYID + "");
                        ////LogHelper.Info("总需求量:" + NeedQty + "");
                        ////LogHelper.Info("最小起订量:" + FMINPOQTY + "");
                        if (NeedQty <= FMINPOQTY)
                        {
                            LogHelper.Info("[提料计划]当前物料明细无采购信息:" + item.FMATERIALID + ",数量:" + NeedQty + ",最小起订量:" + FMINPOQTY + "");
                            //LogHelper.Info("[提料计划]当前物料明细无采购信息:" + item.FMATERIALID + ",数量:" + NeedQty + ",最小起订量:" + FMINPOQTY + "");
                        }
                        if ((FJITmaterialGroup == "总量控制规格类" || FJITmaterialGroup == "订单专用个性类") && FEntryIdList.Count < Convert.ToInt32(FJITMaterielDemand) && i < _DayPlanPpbom.Count) //订单专用个性类
@@ -2486,8 +2483,8 @@
                        //{
                        foreach (var Purchase in _PurchaseInventory)
                        {
                            //LogHelper.Info("采购订单号测试:" + Purchase.FBillNo);
                            //LogHelper.Info("物料:" + Purchase.FMATERIALID + ",采购订单数量:" + Purchase.FQTY);
                            ////LogHelper.Info("采购订单号测试:" + Purchase.FBillNo);
                            ////LogHelper.Info("物料:" + Purchase.FMATERIALID + ",采购订单数量:" + Purchase.FQTY);
                            if (Purchase.FQTY >= NeedQty)
                            {
                                foreach (int id in FEntryIdList)
@@ -2538,12 +2535,12 @@
                                    var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault();
                                    decimal Qty = DayPlanPpbomls.NeedQty;//订单数量
                                                                         //if (Qty == 0)
                                                                         //    LogHelper.Info("订单数量为0");
                                                                         //    //LogHelper.Info("订单数量为0");
                                    if (Qty > _NeedQty)
                                        Qty = _NeedQty; //订单数量>采购订单数量 取采购订单
                                    //if (_NeedQty == 0)
                                    //    LogHelper.Info("订单数量为0");
                                    //    //LogHelper.Info("订单数量为0");
                                    _NeedQty = _NeedQty - Qty;
                                    PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp
@@ -2702,7 +2699,7 @@
                }
                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();
                LogHelper.Info($"提料计划,数据准备完成,保存到Model实体,总行数:{PODemandPlanTemp.Count},耗时:" + sw.Elapsed);
                ////LogHelper.Info($"提料计划,数据准备完成,保存到Model实体,总行数:{PODemandPlanTemp.Count},耗时:" + sw.Elapsed);
                int tlmmm = 1;
                JArray FinalyResult = new JArray();
                foreach (var item in PODemandPlanList)
@@ -2745,7 +2742,7 @@
                    FinalyResult.Add(model);
                    if ((tlmmm >= 20 || tlmmm == PODemandPlanList.Count) && (tlmmm % 20 == 0 || tlmmm == PODemandPlanList.Count))
                    {
                        LogHelper.Info("提料计划新增批量执行,记录循环的当前条数" + tlmmm);
                        //LogHelper.Info("提料计划新增批量执行,记录循环的当前条数" + tlmmm);
                        JObject jsonRoot = new JObject()
                        {
                            ["Creator"] = "",
@@ -2762,19 +2759,19 @@
                        string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                        if (saveIsSuc != "TRUE")
                        {
                            LogHelper.Error(jsonRoot.ToString());
                            //LogHelper.Error(jsonRoot.ToString());
                        }
                        FinalyResult = new JArray();
                    }
                    tlmmm++;
                }
                sw.Stop();//结束计时
                LogHelper.Info("提料计划执行完成,运行总时长:" + sw.Elapsed);
                //sw.Stop();//结束计时
                ////LogHelper.Info("提料计划执行完成,运行总时长:" + sw.Elapsed);
                DBServiceHelper.ExecuteBatch(Context, sqlList);
            }
            catch (Exception ex)
            {
                LogHelper.Info("提料计划跳出:" + ex.Message.ToString());
                //LogHelper.Info("提料计划跳出:" + ex.Message.ToString());
            }
            // var PODemandPlanList22 = PODemandPlanTemp.GroupBy(p => new   {p.FSUPPLIERID,     p.FHMASTERDATE }).ToList();
        }
@@ -2942,7 +2939,7 @@
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex.Message.ToString());
                //LogHelper.Error(ex.Message.ToString());
                this.View.ShowErrMessage(ex.Message.ToString());
            }
        }
@@ -2981,7 +2978,7 @@
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex.Message.ToString());
                //LogHelper.Error(ex.Message.ToString());
                this.View.ShowErrMessage(ex.Message.ToString());
            }
        }
@@ -3008,7 +3005,7 @@
                    if (returnData is ListSelectedRowCollection)
                    {
                        ListSelectedRowCollection listSelectedRowCollection = returnData as ListSelectedRowCollection;
                        LogHelper.Info("生产计划平台选单 行数" + listSelectedRowCollection.Count().ToString());
                        //LogHelper.Info("生产计划平台选单 行数" + listSelectedRowCollection.Count().ToString());
                        if (listSelectedRowCollection != null)
                        {
                            var ret = "";
@@ -3016,7 +3013,7 @@
                            {
                                if (entityDataObjoct.Where(x => x["FSRCBILLENTRYSEQ"].ToString() == listSelectedRow.DataRow["t1_FSeq"].ToString() && x["FSCOrderNo"].ToString() == listSelectedRow.DataRow["FBillNo"].ToString()).Count() > 0)
                                {
                                    LogHelper.Info("生产计划平台选单:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号," + listSelectedRow.DataRow["t1_FSeq"].ToString() + ",已选");
                                    //LogHelper.Info("生产计划平台选单:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号," + listSelectedRow.DataRow["t1_FSeq"].ToString() + ",已选");
                                    ret += "生产订单号:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号," + listSelectedRow.DataRow["t1_FSeq"].ToString() + ",已选" + "\n";
                                    continue;
                                }
@@ -3025,7 +3022,7 @@
                                int day = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0);
                                if (day < 0)
                                {
                                    LogHelper.Info("生产计划平台选单:日期太靠后," + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号, " + listSelectedRow.DataRow["t1_FSeq"].ToString() + ", day= " + day.ToString());
                                    //LogHelper.Info("生产计划平台选单:日期太靠后," + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号, " + listSelectedRow.DataRow["t1_FSeq"].ToString() + ", day= " + day.ToString());
                                    ret += "计划开工日期在今天之前,生产订单号:" + listSelectedRow.DataRow["FBillNo"].ToString() + ", 行号," + listSelectedRow.DataRow["t1_FSeq"].ToString() + "\n";
                                    continue;
                                }
@@ -3052,7 +3049,7 @@
            }
            catch (Exception ex)
            {
                LogHelper.Error("选单失败:" + ex.Message);
                //LogHelper.Error("选单失败:" + ex.Message);
            }
        }
    }
src/BLL/Demo.BillView/PRD/Pro_WorkBillPlatformXNQT.cs
@@ -23,14 +23,13 @@
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Web;
using ZD.Cloud.Logger;
using ZD.Cloud.WebApi;
using ZD.Share.Common;
namespace Demo.DynamicForm.PRD
namespace Demo.BillView.PRD
{
    [Description("生产计划平台(虚拟齐套)")]
    [HotUpdate]
@@ -193,7 +192,7 @@
        /// <param name="e"></param>    
        public override void EntityRowDoubleClick(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.EntityRowClickEventArgs e)
        {
            LogHelper.Info("[行双击事件]");
            //LogHelper.Info("[行双击事件]");
            base.EntityRowClick(e);
            DynamicFormShowParameter formPa = new DynamicFormShowParameter();
@@ -445,7 +444,7 @@
                string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                if (saveIsSuc != "TRUE")
                {
                    LogHelper.Error("生产计划平台保存失败:" + jsonRoot.ToString());
                    //LogHelper.Error("生产计划平台保存失败:" + jsonRoot.ToString());
                    this.View.ShowMessage("数据储存失败!请联系管理员!");
                }
            }
@@ -508,9 +507,9 @@
        {
            try
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();//开始计时
                LogHelper.Info("齐套分析开始准备数据:" + sw.Elapsed);
                //Stopwatch sw = new Stopwatch();
                //sw.Start();//开始计时
                ////LogHelper.Info("齐套分析开始准备数据:" + sw.Elapsed);
                //清空齐套临时表
                DBServiceHelper.Execute(Context, "/*dialect*/  delete JIT_MOMaterReadysBill ");
                //更新状态
@@ -685,7 +684,7 @@
                    i++;
                }
                LogHelper.Info($"齐套分析,数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed);
                ////LogHelper.Info($"齐套分析,数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed);
                i = 1;
                foreach (var item in completeAnalysisTempModel)
@@ -729,7 +728,7 @@
                    string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                    if (saveIsSuc != "TRUE")
                    {
                        LogHelper.Error(jsonRoot.ToString());
                        //LogHelper.Error(jsonRoot.ToString());
                    }
                    this.View.Session["ProcessRateValue"] = Convert.ToInt32((Convert.ToDecimal(100) / completeAnalysisTempModel.Count) * i);
                    i++;
@@ -741,22 +740,22 @@
                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);
                //sw.Stop();//结束计时
                ////LogHelper.Info("齐套分析运行总时长:" + sw.Elapsed);
            }
            catch (Exception ex)
            {
                LogHelper.Error("齐套分析跳出:" + ex.Message.ToString());
                //LogHelper.Error("齐套分析跳出:" + ex.Message.ToString());
            }
        }
        public void CompleteSetAnalysisBatch()
        {
            LogHelper.Info("齐套分析批量开始准备数据:");
            //LogHelper.Info("齐套分析批量开始准备数据:");
            try
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();//开始计时
                LogHelper.Info("齐套分析开始准备数据:" + sw.Elapsed);
                //Stopwatch sw = new Stopwatch();
                //sw.Start();//开始计时
                ////LogHelper.Info("齐套分析开始准备数据:" + sw.Elapsed);
                //清空齐套临时表
                DBServiceHelper.Execute(Context, "/*dialect*/  delete JIT_MOMaterReadysBill ");
                //更新状态
@@ -929,7 +928,7 @@
                    i++;
                }
                LogHelper.Info($"齐套分析,数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed);
                ////LogHelper.Info($"齐套分析,数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed);
                i = 1;
@@ -963,7 +962,7 @@
                    Fentity.Add(FBatchModel);
                    if ((i >= 20 || i == completeAnalysisTempModel.Count) && (i % 20 == 0 || i == completeAnalysisTempModel.Count))
                    {
                        LogHelper.Info("齐套分析批量执行,记录循环的当前条数" + i);
                        //LogHelper.Info("齐套分析批量执行,记录循环的当前条数" + i);
                        JObject jsonRoot = new JObject()
                        {
                            ["Creator"] = "",
@@ -980,7 +979,7 @@
                        string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                        if (saveIsSuc != "TRUE")
                        {
                            LogHelper.Error(jsonRoot.ToString());
                            //LogHelper.Error(jsonRoot.ToString());
                        }
                        Fentity = new JArray();
                    }
@@ -995,23 +994,23 @@
                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);
                //sw.Stop();//结束计时
                ////LogHelper.Info("齐套分析运行总时长:" + sw.Elapsed);
            }
            catch (Exception ex)
            {
                LogHelper.Error("齐套分析跳出:" + ex.Message.ToString());
                //LogHelper.Error("齐套分析跳出:" + ex.Message.ToString());
            }
        }
        public void CompleteSetAnalysisBySQL()
        {
            LogHelper.Info("齐套分析sql模式开始准备数据:");
            //LogHelper.Info("齐套分析sql模式开始准备数据:");
            string sql = "";
            try
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();//开始计时
                LogHelper.Info("齐套分析开始准备数据:" + sw.Elapsed);
                //Stopwatch sw = new Stopwatch();
                //sw.Start();//开始计时
                ////LogHelper.Info("齐套分析开始准备数据:" + sw.Elapsed);
                //清空齐套临时表
                DBServiceHelper.Execute(Context, "/*dialect*/  delete JIT_MOMaterReadysBill ");
                //更新状态
@@ -1185,7 +1184,7 @@
                    i++;
                }
                LogHelper.Info($"齐套分析,数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed);
                ////LogHelper.Info($"齐套分析,数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed);
                List<string> sqlList = new List<string>();
                int jdtmmm = 1;
                foreach (var item in completeAnalysisTempModel)
@@ -1212,12 +1211,12 @@
                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);
                //sw.Stop();//结束计时
                ////LogHelper.Info("齐套分析运行总时长:" + sw.Elapsed);
            }
            catch (Exception ex)
            {
                LogHelper.Error("齐套分析跳出:" + ex.Message.ToString());
                //LogHelper.Error("齐套分析跳出:" + ex.Message.ToString());
            }
        }
@@ -1227,13 +1226,13 @@
        /// </summary>
        public void Xnqt()
        {
            LogHelper.Info("虚拟齐套分析sql模式开始准备数据:");
            //LogHelper.Info("虚拟齐套分析sql模式开始准备数据:");
            string sql = "";
            try
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();//开始计时
                LogHelper.Info("虚拟齐套分析开始准备数据:" + sw.Elapsed);
                //Stopwatch sw = new Stopwatch();
                //sw.Start();//开始计时
                ////LogHelper.Info("虚拟齐套分析开始准备数据:" + sw.Elapsed);
                //清空齐套临时表
                DBServiceHelper.Execute(Context, "/*dialect*/  delete JIT_MOMaterReadysBillXn ");
                ////更新状态
@@ -1407,7 +1406,7 @@
                    i++;
                }
                LogHelper.Info($"虚拟齐套分析,数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed);
                ////LogHelper.Info($"虚拟齐套分析,数据准备完成,保存到Model实体,总行数:{completeAnalysisTempModel.Count},耗时:" + sw.Elapsed);
                List<string> sqlList = new List<string>();
                int jdtmmm = 1;
                foreach (var item in completeAnalysisTempModel)
@@ -1434,13 +1433,13 @@
                DBServiceHelper.Execute(Context, @"
                /*dialect*/update Sc_WorkBillSubXnqt set FComplete = '齐套' where FEntryID NOT IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBillXn where isnull(FCOMPLETE,'未齐套') ='未齐套')
                ");
                sw.Stop();//结束计时
                LogHelper.Info("虚拟齐套分析运行总时长:" + sw.Elapsed);
                //sw.Stop();//结束计时
                ////LogHelper.Info("虚拟齐套分析运行总时长:" + sw.Elapsed);
            }
            catch (Exception ex)
            {
                this.View.ShowErrMessage("异常:" + ex.Message.ToString());
                LogHelper.Error("虚拟齐套分析跳出:" + ex.Message.ToString());
                //LogHelper.Error("虚拟齐套分析跳出:" + ex.Message.ToString());
            }
            finally
            {
@@ -1692,9 +1691,9 @@
        /// </summary>
        public void DayPlanPPBomBill()
        {
            Stopwatch sw = new Stopwatch();
            sw.Start();//开始计时
            LogHelper.Info("批量,生成日计划用料清单准备数据");
            //Stopwatch sw = new Stopwatch();
            //sw.Start();//开始计时
            ////LogHelper.Info("批量,生成日计划用料清单准备数据");
            //锁定的日计划不生成
            try
            {
@@ -1715,7 +1714,7 @@
 WHERE t1.FHQTY>0
"
);
                LogHelper.Info("批量,生成日计划用料清单准备数据sql:" + sql);
                //LogHelper.Info("批量,生成日计划用料清单准备数据sql:" + sql);
                DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
                DataTable dt = ds.Tables[0];
                List<DayPlanMaterial> DayPlanMaterial = new List<DayPlanMaterial>();
@@ -1747,7 +1746,7 @@
                            FHQtyScrap = dr["FSCRAPRATE"].ToString(),
                        });
                    }
                    LogHelper.Info($"批量,日计划用料清单,数据准备完成,保存到Model实体,总行数:{DayPlanMaterial.Count},耗时:" + sw.Elapsed);
                    ////LogHelper.Info($"批量,日计划用料清单,数据准备完成,保存到Model实体,总行数:{DayPlanMaterial.Count},耗时:" + sw.Elapsed);
                    var fidList = DayPlanMaterial.Select(x => x.FEntryID).Distinct().ToList();
                    foreach (var item in fidList)
                    {
@@ -1798,24 +1797,24 @@
                        string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                        if (saveIsSuc != "TRUE")
                        {
                            LogHelper.Error(jsonRoot.ToString());
                            //LogHelper.Error(jsonRoot.ToString());
                        }
                    }
                }
                sw.Stop();//结束计时
                LogHelper.Info("批量,生成日计划用料清单运行总时长:" + sw.Elapsed);
                //sw.Stop();//结束计时
                ////LogHelper.Info("批量,生成日计划用料清单运行总时长:" + sw.Elapsed);
            }
            catch (Exception ex)
            {
                LogHelper.Error("批量,生成日计划用料清单+" + ex.Message.ToString());
                //LogHelper.Error("批量,生成日计划用料清单+" + ex.Message.ToString());
            }
        }
        public void DayPlanPPBomBillBatch()
        {
            Stopwatch sw = new Stopwatch();
            sw.Start();//开始计时
            LogHelper.Info("生成日计划用料清单准备数据");
            //Stopwatch sw = new Stopwatch();
            //sw.Start();//开始计时
            ////LogHelper.Info("生成日计划用料清单准备数据");
            //锁定的日计划不生成
            try
            {
@@ -1839,7 +1838,7 @@
 WHERE t1.FHQTY>0
"
);
                LogHelper.Info("生成日计划用料清单准备数据sql:" + sql);
                //LogHelper.Info("生成日计划用料清单准备数据sql:" + sql);
                DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
                DataTable dt = ds.Tables[0];
                List<DayPlanMaterial> DayPlanMaterial = new List<DayPlanMaterial>();
@@ -1883,7 +1882,7 @@
                            FDayPlanFBILLNO = dr["FDayPlanFBILLNO"].ToString()
                        });
                    }
                    LogHelper.Info($"日计划用料清单,数据准备完成,保存到Model实体,总行数:{DayPlanMaterial.Count},耗时:" + sw.Elapsed);
                    ////LogHelper.Info($"日计划用料清单,数据准备完成,保存到Model实体,总行数:{DayPlanMaterial.Count},耗时:" + sw.Elapsed);
                    var fidList = DayPlanMaterial.Select(x => x.FEntryID).Distinct().ToList();
                    int i = 1;
                    JArray Fentity = new JArray();
@@ -1940,7 +1939,7 @@
                        Fentity.Add(model);
                        if ((i >= 20 || i == fidList.Count) && (i % 20 == 0 || i == fidList.Count))
                        {
                            LogHelper.Info("日计划用料清单批量执行,记录循环的当前条数" + i);
                            //LogHelper.Info("日计划用料清单批量执行,记录循环的当前条数" + i);
                            JObject jsonRoot = new JObject()
                            {
                                ["Creator"] = "",
@@ -1957,7 +1956,7 @@
                            string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                            if (saveIsSuc != "TRUE")
                            {
                                LogHelper.Error("日计划用料清单列表生成失败:" + jsonRoot.ToString());
                                //LogHelper.Error("日计划用料清单列表生成失败:" + jsonRoot.ToString());
                                this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
                            }
                            Fentity = new JArray();
@@ -1965,12 +1964,12 @@
                        i++;
                    }
                }
                sw.Stop();//结束计时
                LogHelper.Info("生成日计划用料清单运行总时长:" + sw.Elapsed);
                //sw.Stop();//结束计时
                ////LogHelper.Info("生成日计划用料清单运行总时长:" + sw.Elapsed);
            }
            catch (Exception ex)
            {
                LogHelper.Error("日计划用料清单+" + ex.Message.ToString());
                //LogHelper.Error("日计划用料清单+" + ex.Message.ToString());
            }
        }
@@ -1979,11 +1978,11 @@
        /// </summary>
        public void Extraction()
        {
            LogHelper.Info("[提料计划准备阶段]:测试测试测试测试测试测试测试测试");
            //LogHelper.Info("[提料计划准备阶段]:测试测试测试测试测试测试测试测试");
            try
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();//开始计时
                //Stopwatch sw = new Stopwatch();
                //sw.Start();//开始计时
                string sql = string.Format(@"/*dialect*/  select distinct FHICMOINTERID FID  from  JIT_MOMaterReadysBill ");
                DataTable fidDt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
                string FDayPlanWorkID = "";
@@ -1998,7 +1997,7 @@
 exec [提料计划预处理] '{0}'
 ", FDayPlanWorkID.Replace(",", "-"));
                DBServiceHelper.Execute(Context, sql);
                LogHelper.Info("[提料计划准备阶段]提料计划预处理sql:" + sql);
                //LogHelper.Info("[提料计划准备阶段]提料计划预处理sql:" + sql);
                //采购订单数据
                sql = @"
 /*dialect*/
@@ -2012,7 +2011,7 @@
 and t1.FBillTypeID in('83d822ca3e374b4ab01e5dd46a0062bd','6d01d059713d42a28bb976c90a121142')
";
                List<PurchaseInventory> PurchaseInventory = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<PurchaseInventory>();
                LogHelper.Info("[提料计划准备阶段]可用采购订单数据sql:" + sql);
                //LogHelper.Info("[提料计划准备阶段]可用采购订单数据sql:" + sql);
                sql = string.Format(@"
 /*dialect*/
 SELECT T1.FID,FHMATERID,FHMASTERDATE,FHQTY,FCOMPLETECOUNT,FPRDMOMAINID,T2.FENTRYID,T1.FBILLNO, FNeedQty,(FLeadtime+FLeadTtime2)FFIXLEADTIME,t5.FMAXPOQTY,FJITBatch FMINPOQTY,FJITMATERIALGROUP,FJITMaterielDemand,FJITSafeStock,t3.FMATERIALID,t6.FNumber,FHQTY*FNeedQty NeedQty,FHPRDORGID FStockOrgId FROM  SC_WORKBILLSORTBILLMAIN T1 
@@ -2047,13 +2046,13 @@
AND T1.FID in ({0}) 
order by FHMASTERDATE
", FDayPlanWorkID);
                LogHelper.Info("[提料计划准备阶段]需要提料数据sql:" + sql);
                //LogHelper.Info("[提料计划准备阶段]需要提料数据sql:" + 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 == "163165").ToList();
                LogHelper.Info("[提料计划准备阶段]总物料行数" + MaterialIDList.Count);
                //LogHelper.Info("[提料计划准备阶段]总物料行数" + MaterialIDList.Count);
                //提料计划数据集临时存储集合
                List<PODemandPlanTemp> PODemandPlanTemp = new List<PODemandPlanTemp>();
                //sql集合 更新采购订单占用的提料计划数量
@@ -2065,10 +2064,10 @@
                    List<PurchaseInventory> _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).OrderBy(x => x.FENTRYID).ToList();
                    if (_PurchaseInventory.Count == 0)
                    {
                        LogHelper.Info("[提料计划开始]当前物料无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId);
                        //LogHelper.Info("[提料计划开始]当前物料无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId);
                        continue;
                    }
                    //LogHelper.Info(item.FMATERIALID.ToString());
                    ////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;//最小起订量
@@ -2087,7 +2086,7 @@
                        _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).OrderBy(x => x.FENTRYID).ToList();
                        if (_PurchaseInventory.Count == 0)
                        {
                            LogHelper.Info("[提料计划开始]当前物料明细无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId);
                            //LogHelper.Info("[提料计划开始]当前物料明细无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId);
                            break;
                        }
@@ -2096,12 +2095,12 @@
                        FEntryIdList.Add(_item.FENTRYID);
                        NeedQty += _item.NeedQty;
                        //LogHelper.Info("记录明细id:" + _item.FENTRYID + "");
                        //LogHelper.Info("总需求量:" + NeedQty + "");
                        //LogHelper.Info("最小起订量:" + FMINPOQTY + "");
                        ////LogHelper.Info("记录明细id:" + _item.FENTRYID + "");
                        ////LogHelper.Info("总需求量:" + NeedQty + "");
                        ////LogHelper.Info("最小起订量:" + FMINPOQTY + "");
                        if (NeedQty <= FMINPOQTY)
                        {
                            LogHelper.Info("[提料计划]当前物料明细无采购信息:" + item.FMATERIALID + ",数量:" + NeedQty + ",最小起订量:" + FMINPOQTY + "");
                            //LogHelper.Info("[提料计划]当前物料明细无采购信息:" + item.FMATERIALID + ",数量:" + NeedQty + ",最小起订量:" + FMINPOQTY + "");
                        }
                        if ((FJITmaterialGroup == "总量控制规格类" || FJITmaterialGroup == "订单专用个性类") && FEntryIdList.Count < Convert.ToInt32(FJITMaterielDemand) && i < _DayPlanPpbom.Count) //订单专用个性类
@@ -2111,8 +2110,8 @@
                        //{
                        foreach (var Purchase in _PurchaseInventory)
                        {
                            LogHelper.Info("采购订单号测试:" + Purchase.FBillNo);
                            //LogHelper.Info("物料:" + Purchase.FMATERIALID + ",采购订单数量:" + Purchase.FQTY);
                            //LogHelper.Info("采购订单号测试:" + Purchase.FBillNo);
                            ////LogHelper.Info("物料:" + Purchase.FMATERIALID + ",采购订单数量:" + Purchase.FQTY);
                            if (Purchase.FQTY >= NeedQty)
                            {
                                foreach (int id in FEntryIdList)
@@ -2163,12 +2162,12 @@
                                    var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault();
                                    decimal Qty = DayPlanPpbomls.NeedQty;//订单数量
                                    //if (Qty == 0)
                                    //    LogHelper.Info("订单数量为0");
                                    //    //LogHelper.Info("订单数量为0");
                                    if (Qty > _NeedQty)
                                        Qty = _NeedQty; //订单数量>采购订单数量 取采购订单
                                    //if (_NeedQty == 0)
                                    //    LogHelper.Info("订单数量为0");
                                    //    //LogHelper.Info("订单数量为0");
                                    _NeedQty = _NeedQty - Qty;
                                    PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp
@@ -2327,7 +2326,7 @@
                }
                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();
                LogHelper.Info($"提料计划,数据准备完成,保存到Model实体,总行数:{PODemandPlanTemp.Count},耗时:" + sw.Elapsed);
                ////LogHelper.Info($"提料计划,数据准备完成,保存到Model实体,总行数:{PODemandPlanTemp.Count},耗时:" + sw.Elapsed);
                int tlmmm = 1;
                JArray FinalyResult = new JArray();
                foreach (var item in PODemandPlanList)
@@ -2370,7 +2369,7 @@
                    FinalyResult.Add(model);
                    if ((tlmmm >= 20 || tlmmm == PODemandPlanList.Count) && (tlmmm % 20 == 0 || tlmmm == PODemandPlanList.Count))
                    {
                        LogHelper.Info("提料计划新增批量执行,记录循环的当前条数" + tlmmm);
                        //LogHelper.Info("提料计划新增批量执行,记录循环的当前条数" + tlmmm);
                        JObject jsonRoot = new JObject()
                        {
                            ["Creator"] = "",
@@ -2387,19 +2386,19 @@
                        string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                        if (saveIsSuc != "TRUE")
                        {
                            LogHelper.Error(jsonRoot.ToString());
                            //LogHelper.Error(jsonRoot.ToString());
                        }
                        FinalyResult = new JArray();
                    }
                    tlmmm++;
                }
                sw.Stop();//结束计时
                LogHelper.Info("提料计划执行完成,运行总时长:" + sw.Elapsed);
                //sw.Stop();//结束计时
                ////LogHelper.Info("提料计划执行完成,运行总时长:" + sw.Elapsed);
                DBServiceHelper.ExecuteBatch(Context, sqlList);
            }
            catch (Exception ex)
            {
                LogHelper.Info("提料计划跳出:" + ex.Message.ToString());
                //LogHelper.Info("提料计划跳出:" + ex.Message.ToString());
            }
            // var PODemandPlanList22 = PODemandPlanTemp.GroupBy(p => new   {p.FSUPPLIERID,     p.FHMASTERDATE }).ToList();
        }
@@ -2567,7 +2566,7 @@
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex.Message.ToString());
                //LogHelper.Error(ex.Message.ToString());
                this.View.ShowErrMessage(ex.Message.ToString());
            }
        }
@@ -2606,7 +2605,7 @@
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex.Message.ToString());
                //LogHelper.Error(ex.Message.ToString());
                this.View.ShowErrMessage(ex.Message.ToString());
            }
        }
src/BLL/Demo.BillView/PRD/Pro_ZJDBFSH.cs
@@ -13,10 +13,9 @@
using Kingdee.BOS.ServiceHelper;
using Kingdee.K3.SCM.App;
namespace Demo.DynamicForm.PRD
namespace Demo.BillView.PRD
{
    [Description("[直接调拨单-反审核]按钮功能]")]
    [Description("[直接调拨单-反审核]服务插件]")]
    [HotUpdate]
    public class Pro_ZJDBFSH : AbstractOperationServicePlugIn
    {
src/BLL/Demo.BillView/PRD/Pro_ZJDBSH.cs
@@ -1,27 +1,20 @@
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;
using System.Diagnostics;
using ZD.Cloud.Logger;
using System.Data;
using Kingdee.BOS;
using Kingdee.BOS.App.Data;
namespace Demo.DynamicForm.PRD
namespace Demo.BillView.PRD
{
    [Description("[直接调拨单-审核]按钮功能]")]
    [Description("[直接调拨单-审核]服务插件]")]
    [HotUpdate]
    public class Pro_ZJDBSH : AbstractOperationServicePlugIn
    {
@@ -70,7 +63,7 @@
        //    }
        //    DBServiceHelper.ExecuteBatch(Context, sqlList);
        //    sw.Stop();//结束计时
        //    LogHelper.Info("生成日计划用料清单运行总时长:" + sw.Elapsed);
        //    //LogHelper.Info("生成日计划用料清单运行总时长:" + sw.Elapsed);
        //}
        /// <summary>
        ///反审核 反更新日计划用料清单调拨数量   
src/BLL/Demo.BillView/PRD/ProductScheduleButtonClick.cs
@@ -7,7 +7,7 @@
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata.EntityElement;
using ZD.Cloud.Logger;
using Demo.Model.Model;
using System.Collections.Generic;
using ZD.Share.Common;
@@ -17,7 +17,7 @@
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
namespace Demo.BillView
namespace Demo.BillView.PRD
{
    [Description("生产排程单动态表单-按钮点击事件")]
    [HotUpdate]
@@ -257,7 +257,7 @@
            }
            catch (Exception ex)
            {
                LogHelper.Error("生产排程单动态表单-Button按钮点击事件 抛出异常:" + ex.Message.ToString());
                //LogHelper.Error("生产排程单动态表单-Button按钮点击事件 抛出异常:" + ex.Message.ToString());
                this.View.ShowErrMessage(ex.Message.ToString());
            }
        }
@@ -290,7 +290,7 @@
            }
            catch (Exception ex)
            {
                LogHelper.Error("生产排程单动态表单-BarItem按钮点击事件 抛出异常:" + ex.Message.ToString());
                //LogHelper.Error("生产排程单动态表单-BarItem按钮点击事件 抛出异常:" + ex.Message.ToString());
                this.View.ShowErrMessage(ex.Message.ToString());
            }
        }
@@ -397,7 +397,7 @@
            }
            catch (Exception ex)
            {
                LogHelper.Error("生产排程单动态表单-页面展示 待排任务抛出异常:" + ex.Message.ToString());
                //LogHelper.Error("生产排程单动态表单-页面展示 待排任务抛出异常:" + ex.Message.ToString());
                this.View.ShowErrMessage("错误:" + ex.Message.ToString());
            }
        }
@@ -454,7 +454,7 @@
            }
            catch (Exception ex)
            {
                LogHelper.Error("生产排程单动态表单-页面展示 生产订单抛出异常:" + ex.Message.ToString());
                //LogHelper.Error("生产排程单动态表单-页面展示 生产订单抛出异常:" + ex.Message.ToString());
                this.View.ShowErrMessage("错误:" + ex.Message.ToString());
            }
        }
@@ -538,7 +538,7 @@
                    {
                        fMaterialID = order["FMATERIALID_Id"].ToString();
                    }
                    decimal FChangeLine = Convert.ToDecimal(order["FChangeLine"]);//换线时间
                    decimal FChangeLine = Convert.ToDecimal((order["FSczy"] as DynamicObject)?["FChangeLine"]);//换线时间
                    if (fMaterialID != order["FMATERIALID_Id"].ToString())
                    {
                        foreach (var item in _ENG_WORKCALFULLDATA)
@@ -668,7 +668,7 @@
                    string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                    if (saveIsSuc != "TRUE")
                    {
                        LogHelper.Error(jsonRoot.ToString());
                        //LogHelper.Error(jsonRoot.ToString());
                        this.View.ShowErrMessage(jsonRoot.ToString());
                    }
                }
@@ -716,7 +716,7 @@
            }
            catch (Exception ex)
            {
                LogHelper.Error("生产排程单动态表单 排程按钮点击功能" + ex.Message.ToString());
                //LogHelper.Error("生产排程单动态表单 排程按钮点击功能" + ex.Message.ToString());
            }
        }
        /// <summary>
@@ -784,7 +784,7 @@
                string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                if (saveIsSuc != "TRUE")
                {
                    LogHelper.Error("生产计划平台保存失败:" + jsonRoot.ToString());
                    //LogHelper.Error("生产计划平台保存失败:" + jsonRoot.ToString());
                    this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
                }
            }
src/BLL/Demo.BillView/PRD/ProductScheduleShowList.cs
@@ -9,9 +9,9 @@
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
using ZD.Cloud.Logger;
namespace Demo.BillView
namespace Demo.BillView.PRD
{
    [Description("生产排程单动态表单-页面展示")]
    [HotUpdate]
@@ -126,7 +126,7 @@
            }
            catch (Exception ex)
            {
                LogHelper.Error("生产排程单动态表单-页面展示 抛出异常:" + ex.Message.ToString());
                //LogHelper.Error("生产排程单动态表单-页面展示 抛出异常:" + ex.Message.ToString());
                this.View.ShowErrMessage("错误:" + ex.Message.ToString());
            }
src/BLL/Demo.BillView/PRD/Pur_Receive.cs
@@ -12,7 +12,7 @@
using System.ComponentModel;
using Kingdee.BOS.ServiceHelper;
using Kingdee.K3.SCM.App;
using ZD.Cloud.Logger;
namespace Demo.BillView.PRD
{
@@ -56,7 +56,7 @@
                    if (fentryId == "0" || fisfx)
                        continue;
                    sql = string.Format($"/*dialect*/update Cg_PODemandPlanBillSub set  FReciveCount = FReciveCount + {Convert.ToDecimal(entryRow["ActReceiveQty"])} where FEntryID = {fentryId} ");
                    //LogHelper.Info("领料单的日计划用料清单ID:" + fentryId);
                    ////LogHelper.Info("领料单的日计划用料清单ID:" + fentryId);
                    sqlList.Add(sql);
                    sql = string.Format($"/*dialect*/update T_PUR_ReceiveEntry set  FTlisfx =  1 where FentryId = {entryRow["Id"]}");
                    sqlList.Add(sql);
src/BLL/Demo.BillView/PRD/Pur_ReceiveDelete.cs
@@ -12,7 +12,7 @@
using System.ComponentModel;
using Kingdee.BOS.ServiceHelper;
using Kingdee.K3.SCM.App;
using ZD.Cloud.Logger;
namespace Demo.BillView.PRD
{
@@ -57,7 +57,7 @@
                    if (fentryId == "0")
                        continue;
                    sql = string.Format($"/*dialect*/update Cg_PODemandPlanBillSub set  FReciveCount = FReciveCount - {Convert.ToDecimal(entryRow["ActReceiveQty"])} where FEntryID = {fentryId} ");
                    //LogHelper.Info("领料单的日计划用料清单ID:" + fentryId);
                    ////LogHelper.Info("领料单的日计划用料清单ID:" + fentryId);
                    sqlList.Add(sql);
                    sql = string.Format($"/*dialect*/update T_PUR_ReceiveEntry set  FTlisfx =  0 where FentryId = {entryRow["Id"]}");
                    sqlList.Add(sql);
src/BLL/Demo.BillView/packages.config
@@ -6,8 +6,5 @@
  <package id="Portable.BouncyCastle" version="1.8.6" targetFramework="net472" />
  <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.6.1" targetFramework="net452" />
  <package id="ZD.Newtonsoft.Json" version="1.0.0" targetFramework="net472" />
  <package id="ZD.Share" version="1.0.3" targetFramework="net452" />
</packages>
src/BLL/Demo.CommonFilter/Config/kdapi.config
File was deleted
src/BLL/Demo.CommonFilter/Demo.CommonFilter.csproj
@@ -82,15 +82,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.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\lib\net452\Kingdee.BOS.WebApi.Client.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.BOS.WebApi.FormService, Version=7.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\lib\net452\Kingdee.BOS.WebApi.FormService.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.BOS.WebApi.ServicesStub, Version=7.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\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>
@@ -132,18 +123,11 @@
    <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.6.1\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>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <None Include="Config\kdapi.config" />
    <None Include="packages.config" />
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
src/BLL/Demo.CommonFilter/packages.config
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="ZD.Cloud.Common" version="7.5.1.2" targetFramework="net472" />
  <package id="ZD.Cloud.WebApi" version="7.6.1" 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.DynamicForm/Config/kdapi.config
File was deleted
src/BLL/Demo.DynamicForm/Demo.DynamicForm.csproj
@@ -31,15 +31,6 @@
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="Kingdee.BOS.WebApi.Client, Version=7.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\lib\net452\Kingdee.BOS.WebApi.Client.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.BOS.WebApi.FormService, Version=7.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\lib\net452\Kingdee.BOS.WebApi.FormService.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.BOS.WebApi.ServicesStub, Version=7.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\lib\net452\Kingdee.BOS.WebApi.ServicesStub.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>
@@ -51,12 +42,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.6.1\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>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Properties\AssemblyInfo.cs" />
@@ -65,7 +50,6 @@
    <Folder Include="PRD\" />
  </ItemGroup>
  <ItemGroup>
    <None Include="Config\kdapi.config" />
    <None Include="packages.config" />
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
src/BLL/Demo.DynamicForm/packages.config
@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="ZD.Cloud.WebApi" version="7.6.1" 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.ListView/Config/kdapi.config
File was deleted
src/BLL/Demo.ListView/Demo.ListView.csproj
@@ -82,15 +82,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.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\lib\net452\Kingdee.BOS.WebApi.Client.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.BOS.WebApi.FormService, Version=7.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\lib\net452\Kingdee.BOS.WebApi.FormService.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.BOS.WebApi.ServicesStub, Version=7.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\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>
@@ -132,18 +123,11 @@
    <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.6.1\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>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <None Include="Config\kdapi.config" />
    <None Include="packages.config" />
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
src/BLL/Demo.ListView/packages.config
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="ZD.Cloud.Common" version="7.5.1.2" targetFramework="net472" />
  <package id="ZD.Cloud.WebApi" version="7.6.1" 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.OperationService/Config/kdapi.config
File was deleted
src/BLL/Demo.OperationService/Demo.OperationService.csproj
@@ -83,15 +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.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\lib\net452\Kingdee.BOS.WebApi.Client.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.BOS.WebApi.FormService, Version=7.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\lib\net452\Kingdee.BOS.WebApi.FormService.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.BOS.WebApi.ServicesStub, Version=7.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\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>
@@ -130,12 +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.6.1\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>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Properties\AssemblyInfo.cs" />
@@ -143,7 +128,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,5 @@
<?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.6.1" targetFramework="net472" />
  <package id="ZD.Newtonsoft.Json" version="1.0.0" targetFramework="net452" />
  <package id="ZD.Share" version="1.0.3" targetFramework="net472" />
</packages>
src/BLL/Demo.Report/Demo.Report.csproj
@@ -82,15 +82,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.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\lib\net452\Kingdee.BOS.WebApi.Client.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.BOS.WebApi.FormService, Version=7.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\lib\net452\Kingdee.BOS.WebApi.FormService.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.BOS.WebApi.ServicesStub, Version=7.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\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>
@@ -135,15 +126,6 @@
    <Reference Include="System.Data" />
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Xml" />
    <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.6.1\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>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="PRD\prd_TimelinessRateReport.cs" />
@@ -152,9 +134,21 @@
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <None Include="Config\kdapi.config" />
    <None Include="packages.config" />
  </ItemGroup>
  <ItemGroup />
  <ItemGroup>
    <ProjectReference Include="..\ZD.Cloud.Logger\ZD.Cloud.Logger.csproj">
      <Project>{876bcc4d-41be-4570-bd36-d6f11526ad64}</Project>
      <Name>ZD.Cloud.Logger</Name>
    </ProjectReference>
    <ProjectReference Include="..\ZD.Cloud.WebApi\ZD.Cloud.WebApi.csproj">
      <Project>{96e1cc80-0e04-4f78-bbff-75faf6a69f7b}</Project>
      <Name>ZD.Cloud.WebApi</Name>
    </ProjectReference>
    <ProjectReference Include="..\ZD.Share\ZD.Share.csproj">
      <Project>{54f8364f-3c79-43e7-9f14-de0bc63555d6}</Project>
      <Name>ZD.Share</Name>
    </ProjectReference>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
src/BLL/Demo.Report/PRD/prd_CompleteSetRateReport.cs
@@ -15,7 +15,7 @@
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using Newtonsoft.Json;
using ZD.Cloud.Logger;
namespace Demo.Report
{
@@ -54,9 +54,9 @@
            header.AddChild("FRJHQTY", new LocaleValue("工单数量"), SqlStorageType.SqlDecimal).ColIndex = 8;
            header.AddChild("FQTQTY", new LocaleValue("工单齐套数量"), SqlStorageType.SqlDecimal).ColIndex = 8;
            header.AddChild("FGDQTL", new LocaleValue("工单齐套率"), SqlStorageType.SqlDecimal).ColIndex = 8;
            header.AddChild("FMATERIALNUMBER", new LocaleValue("原材料编码", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar).ColIndex = 9;
            header.AddChild("FMATERIALNAME", new LocaleValue("原材料名称", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar).ColIndex = 10;
            header.AddChild("FSPECIFICATION", new LocaleValue("原材料规格", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar).ColIndex = 11;
            header.AddChild("FMATERIALNUMBER", new LocaleValue("物料编码", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar).ColIndex = 9;
            header.AddChild("FMATERIALNAME", new LocaleValue("物料名称", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar).ColIndex = 10;
            header.AddChild("FSPECIFICATION", new LocaleValue("物料规格", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar).ColIndex = 11;
            header.AddChild("FHQTY", new LocaleValue("需求物料数量", this.Context.UserLocale.LCID), SqlStorageType.SqlDecimal).ColIndex = 11;
            header.AddChild("FREALQTY", new LocaleValue("入库数量", this.Context.UserLocale.LCID), SqlStorageType.SqlDecimal).ColIndex = 11;
            header.AddChild("FISQT", new LocaleValue("是否齐套", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar).ColIndex = 12;
@@ -86,7 +86,7 @@
                FSupplyID = ((DynamicObject)customFil["FSupplyID"])["Id"].ToString();
            }
            string sql = string.Format($"/*dialect*/ EXEC pr_CompleteSetRateReport '{tableName}','{FBeginDATE}','{FEndDATE}','{FMoBillNo}','{FProductLine}','{FSupplyID}'");
            LogHelper.Info(sql);
            //LogHelper.Info(sql);
            DBUtils.Execute(this.Context, sql);
        }
        public override ReportTitles GetReportTitles(IRptParams filter)
@@ -100,7 +100,7 @@
                    result = new ReportTitles();
                }
            }
            var begindate = dyFilter["FBeginDATE"]?.ToString() ?? "1990-01-01 00:00:00";
            var begindate = dyFilter["FBeginDATE"] == null ? "1990-01-01 00:00:00" : dyFilter["FBeginDATE"].ToString();
            var enddate = dyFilter["FEndDATE"]?.ToString() ?? "9999 - 01 - 01 00:00:00";
            var FMoBillNo = dyFilter["FMoBillNo"]?.ToString() ?? "";
            var FProductLine = (dyFilter["FProductLine"] as DynamicObject)?["Name"].ToString() ?? "";
src/BLL/Demo.Report/PRD/prd_ExtractionPlanDetail.cs
@@ -89,23 +89,7 @@
        
          */
        //基础资料名称
        private string GetBaseDataNameValue(DynamicObjectCollection dyobj)
        {
            string name = "";
            foreach (DynamicObject dynbj in dyobj)
            {
                if (dynbj != null || !dynbj.DynamicObjectType.Properties.Contains("Name"))
                {
                    DynamicObject dynbj2 = (DynamicObject)dynbj[2];
                    name = name + ",'" + dynbj2["Name"].ToString() + "'";
                }
            }
            if (name.Length > 0)
            {
                name = name.Substring(1, name.Length - 1);
            }
            return name;
        }
        //设置单据列
        public override ReportHeader GetReportHeaders(IRptParams filter)
        {
@@ -201,7 +185,7 @@
            strwhere.AppendLine(MaterailName);
            //组织
            var org = customFilter["FOrgId"] == null
                ? " " : string.Format(" AND FPURCHASEORGID IN ({0}) ", (customFilter["FOrgId"] as DynamicObject)["Id"].ToString());
                ? " " : string.Format(" AND FHPURCHASEORGID IN ({0}) ", (customFilter["FOrgId"] as DynamicObject)["Id"].ToString());
            strwhere.AppendLine(org);
            //供应商
            var baseSuppName = customFilter["FSUPPLIERID"];
src/BLL/Demo.Report/PRD/prd_TimelinessRateReport.cs
@@ -15,7 +15,7 @@
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using Newtonsoft.Json;
using ZD.Cloud.Logger;
namespace Demo.Report
{
@@ -52,9 +52,9 @@
            header.AddChild("FMATERIALNUMBER2", new LocaleValue("产品编码"), SqlStorageType.Sqlvarchar).ColIndex = 6;
            header.AddChild("FMATERIALNAME2", new LocaleValue("产品名称"), SqlStorageType.Sqlvarchar).ColIndex = 7;
            header.AddChild("FSPECIFICATION2", new LocaleValue("产品规格"), SqlStorageType.Sqlvarchar).ColIndex = 8;
            header.AddChild("FMATERIALNUMBER", new LocaleValue("原材料编码", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar).ColIndex = 9;
            header.AddChild("FMATERIALNAME", new LocaleValue("原材料名称", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar).ColIndex = 10;
            header.AddChild("FSPECIFICATION", new LocaleValue("原材料规格", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar).ColIndex = 11;
            header.AddChild("FMATERIALNUMBER", new LocaleValue("物料编码", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar).ColIndex = 9;
            header.AddChild("FMATERIALNAME", new LocaleValue("物料名称", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar).ColIndex = 10;
            header.AddChild("FSPECIFICATION", new LocaleValue("规格型号", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar).ColIndex = 11;
            header.AddChild("FHQTY", new LocaleValue("订单数量", this.Context.UserLocale.LCID), SqlStorageType.SqlDecimal).ColIndex = 11;
            header.AddChild("FREALQTY", new LocaleValue("实际到货数量", this.Context.UserLocale.LCID), SqlStorageType.SqlDecimal).ColIndex = 11;
            header.AddChild("FRKDATE", new LocaleValue("实际到货时间", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar).ColIndex = 12;
@@ -89,7 +89,7 @@
                FSupplyID = ((DynamicObject)customFil["FSupplyID"])["Id"].ToString();
            }
            string sql = string.Format($"/*dialect*/ EXEC pr_TimelinessRateReport '{tableName}','{FBeginDATE}','{FEndDATE}','{FMoBillNo}','{FProductLine}','{FSupplyID}','{FMaterialID}'");
            LogHelper.Info(sql);
            //LogHelper.Info(sql);
            DBUtils.Execute(this.Context, sql);
        }
        public override ReportTitles GetReportTitles(IRptParams filter)
src/BLL/Demo.Report/packages.config
@@ -2,8 +2,5 @@
<packages>
  <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.6.1" 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.SysReportView/Config/kdapi.config
File was deleted
src/BLL/Demo.SysReportView/Demo.SysReportView.csproj
@@ -82,15 +82,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.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\lib\net452\Kingdee.BOS.WebApi.Client.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.BOS.WebApi.FormService, Version=7.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\lib\net452\Kingdee.BOS.WebApi.FormService.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.BOS.WebApi.ServicesStub, Version=7.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\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>
@@ -132,18 +123,11 @@
    <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.6.1\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>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <None Include="Config\kdapi.config" />
    <None Include="packages.config" />
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
src/BLL/Demo.SysReportView/packages.config
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="ZD.Cloud.Common" version="7.5.1.2" targetFramework="net472" />
  <package id="ZD.Cloud.WebApi" version="7.6.1" 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.TimedTaskPlugIn/Config/kdapi.config
File was deleted
src/BLL/Demo.TimedTaskPlugIn/Demo.TimedTaskPlugIn.csproj
@@ -83,14 +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.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\lib\net452\Kingdee.BOS.WebApi.Client.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.BOS.WebApi.FormService, Version=7.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\lib\net452\Kingdee.BOS.WebApi.FormService.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.BOS.WebApi.ServicesStub, Version=7.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\lib\net452\Kingdee.BOS.WebApi.ServicesStub.dll</HintPath>
    <Reference Include="Kingdee.BOS.WebApi.Client">
      <HintPath>..\..\..\..\..\办公\K3Cloud\WebSite\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>
@@ -136,16 +130,6 @@
    <Reference Include="System.Data" />
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Xml" />
    <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.6.1\lib\net452\ZD.Cloud.WebApi.dll</HintPath>
    </Reference>
    <Reference Include="ZD.Share, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Users\14027\Desktop\bin文件\ZD.Share.dll</HintPath>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="PRD\StockChangeDynamicAlignment.cs" />
@@ -156,7 +140,6 @@
  </ItemGroup>
  <ItemGroup>
    <None Include="app.config" />
    <None Include="Config\kdapi.config" />
    <None Include="packages.config" />
  </ItemGroup>
  <ItemGroup>
@@ -176,6 +159,18 @@
      <Project>{0AF059FC-D287-42C4-8835-133C3D96243A}</Project>
      <Name>Demo.Utility</Name>
    </ProjectReference>
    <ProjectReference Include="..\ZD.Cloud.Logger\ZD.Cloud.Logger.csproj">
      <Project>{876bcc4d-41be-4570-bd36-d6f11526ad64}</Project>
      <Name>ZD.Cloud.Logger</Name>
    </ProjectReference>
    <ProjectReference Include="..\ZD.Cloud.WebApi\ZD.Cloud.WebApi.csproj">
      <Project>{96e1cc80-0e04-4f78-bbff-75faf6a69f7b}</Project>
      <Name>ZD.Cloud.WebApi</Name>
    </ProjectReference>
    <ProjectReference Include="..\ZD.Share\ZD.Share.csproj">
      <Project>{54f8364f-3c79-43e7-9f14-de0bc63555d6}</Project>
      <Name>ZD.Share</Name>
    </ProjectReference>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
src/BLL/Demo.TimedTaskPlugIn/PRD/DayPlanPPBomBillTimeTask.cs
@@ -3,7 +3,7 @@
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;
@@ -54,8 +54,8 @@
                            deletemodel.Add("Numbers", DataRow[0]["FBillNo"].ToString());
                            JObject _saveObj = JObject.Parse(cloudClient.Delete("Paez_Sc_DayPlanPPBomBill", deletemodel.ToString()));
                            string _saveIsSuc = _saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                            if (_saveIsSuc != "TRUE")
                                LogHelper.Error(_saveIsSuc);
                            //if (_saveIsSuc != "TRUE")
                                //LogHelper.Error(_saveIsSuc);
                        }
                        JObject model = new JObject();
@@ -98,14 +98,14 @@
                        JObject saveObj = JObject.Parse(result);
                        string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                        if (saveIsSuc != "TRUE")
                            LogHelper.Error(saveIsSuc);
                       // if (saveIsSuc != "TRUE")
                            //LogHelper.Error(saveIsSuc);
                    }
                }
            }
            catch (System.Exception ex)
            {
                LogHelper.Error(ex.Message.ToString());
                //LogHelper.Error(ex.Message.ToString());
            }
        }
src/BLL/Demo.TimedTaskPlugIn/PRD/StockChangeDynamicAlignment.cs
@@ -3,14 +3,13 @@
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 Demo.Model.Model;
using Demo.Model.Model.PODemandPlan;
using System.Diagnostics;
using System.Collections.Generic;
using ZD.Share.Common;
using ZD.Cloud.WebApi;
@@ -56,7 +55,7 @@
            }
            catch (System.Exception ex)
            {
                LogHelper.Error(ex.Message.ToString());
                //LogHelper.Error(ex.Message.ToString());
            }
        }
@@ -67,8 +66,6 @@
        {
            try
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();//开始计时
                //清空齐套临时表
                DBServiceHelper.Execute(Context, "/*dialect*/  delete JIT_MOMaterReadysBill ");
                //更新状态
@@ -265,23 +262,33 @@
                    string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                    if (saveIsSuc != "TRUE")
                    {
                        LogHelper.Error(jsonRoot.ToString());
                        //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,'未齐套') ='未齐套')
//");
                //执行完成后 更新日计划工单状态
                DBServiceHelper.Execute(Context, @"
/*dialect*/update Sc_WorkBillSortBillSub set FComplete = '未齐套' where FEntryID IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBill where isnull(FCOMPLETE,'未齐套') ='未齐套')
/*dialect*/update Sc_WorkBillSortBillSub set FComplete = '未齐套' where
  exists (select distinct FHICMOEntryID from JIT_MOMaterReadysBill v where isnull(FCOMPLETE,'未齐套') ='未齐套' and v.FHICMOENTRYID = Sc_WorkBillSortBillSub.FEntryID)
");
                DBServiceHelper.Execute(Context, @"
/*dialect*/update Sc_WorkBillSortBillSub set FComplete = '齐套' where FEntryID NOT IN (select distinct FHICMOEntryID from JIT_MOMaterReadysBill where isnull(FCOMPLETE,'未齐套') ='未齐套')
/*dialect*/update Sc_WorkBillSortBillSub set FComplete = '齐套' where
   not exists
   (select distinct FHICMOEntryID from JIT_MOMaterReadysBill v where isnull(FCOMPLETE,'未齐套') ='未齐套' and v.FHICMOENTRYID = Sc_WorkBillSortBillSub.FEntryID )
");
                sw.Stop();//结束计时
                LogHelper.Info("运行总时长:" + sw.Elapsed);
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex.Message.ToString());
                //LogHelper.Error(ex.Message.ToString());
            }
        }
@@ -386,14 +393,14 @@
                        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);
                        //if (saveIsSuc != "TRUE")
                            //LogHelper.Error(saveIsSuc);
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex.Message.ToString());
                //LogHelper.Error(ex.Message.ToString());
            }
        }
        /// <summary>
@@ -428,7 +435,7 @@
 and FCloseStatus in('A') and FMRPCLOSESTATUS in('A')
";
            List<PurchaseInventory> PurchaseInventory = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<PurchaseInventory>();
            LogHelper.Info("采购订单数据" + sql);
            //LogHelper.Info("采购订单数据" + sql);
            sql = string.Format(@"
 /*dialect*/
@@ -447,14 +454,14 @@
AND T1.FID in ({0}) 
order by FHMASTERDATE
", FDayPlanWorkID);
            LogHelper.Info("提料数据" + sql);
            //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);
            //LogHelper.Info("物料行数" + MaterialIDList.Count);
            //提料计划数据集临时存储集合
            List<PODemandPlanTemp> PODemandPlanTemp = new List<PODemandPlanTemp>();
@@ -463,7 +470,7 @@
            //MaterialIDList = new List<string> { "105773" };
            foreach (var item in MaterialIDList)
            {
                LogHelper.Info(item.FMATERIALID.ToString());
                //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;//最小起订量
@@ -494,8 +501,8 @@
                        }
                        foreach (var Purchase in _PurchaseInventory)
                        {
                            LogHelper.Info("Purchase");
                            LogHelper.Info("物料:" + Purchase.FMATERIALID + ",数量:" + Purchase.FQTY);
                            //LogHelper.Info("Purchase");
                            //LogHelper.Info("物料:" + Purchase.FMATERIALID + ",数量:" + Purchase.FQTY);
                            if (Purchase.FQTY >= NeedQty)
                            {
                                List<int> mmm = new List<int>();
@@ -759,10 +766,10 @@
                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);
                //LogHelper.Info("最后");
                //LogHelper.Info(jsonRoot.ToString());
                //if (saveIsSuc != "TRUE")
                    //LogHelper.Error(saveIsSuc);
            }
            DBServiceHelper.ExecuteBatch(Context, sqlList);
        }
src/BLL/Demo.TimedTaskPlugIn/PRD/TLPlanTimeTask.cs
@@ -4,7 +4,7 @@
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;
@@ -12,9 +12,10 @@
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 ZD.Cloud.Logger;
namespace Demo.TimedTaskPlugIn.PRD
{
@@ -34,24 +35,20 @@
                DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
                if (dt.Rows.Count > 0)
                {
                    Stopwatch sw = new Stopwatch();
                    sw.Start();
                    Extraction();
                    sqlList.Add($"/*dialect*/  update sc_TLPLANZXJH set  FZXDATE = getdate(), FISZX = 1 where FISZX = 0 ");
                    DBServiceHelper.ExecuteBatch(Context, sqlList);
                    LogHelper.Info("提料计划时长:" + sw.Elapsed);
                    sw.Stop();
                }
            }
            catch (System.Exception ex)
            {
                LogHelper.Error(ex.Message.ToString());
                //LogHelper.Error(ex.Message.ToString());
            }
        }
        public void Extraction()
        {
            LogHelper.Info("[生产订单缺料生成提料计划--准备阶段]:开始执行提料计划逻辑");
            //LogHelper.Info("[生产订单缺料生成提料计划--准备阶段]:开始执行提料计划逻辑");
            try
            {
                //Stopwatch sw = new Stopwatch();
@@ -62,7 +59,7 @@
 exec [提料计划预处理] 
 ");
                DBServiceHelper.Execute(Context, sql);
                //LogHelper.Info("[提料计划准备阶段]提料计划预处理sql:" + sql);
                ////LogHelper.Info("[提料计划准备阶段]提料计划预处理sql:" + sql);
                //采购订单数据
                sql = @"
 /*dialect*/
@@ -76,7 +73,7 @@
 and t1.FBillTypeID in('83d822ca3e374b4ab01e5dd46a0062bd','6d01d059713d42a28bb976c90a121142')
";
                List<PurchaseInventory> PurchaseInventory = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList<PurchaseInventory>();
                //LogHelper.Info("[提料计划准备阶段]可用采购订单数据sql:" + sql);
                ////LogHelper.Info("[提料计划准备阶段]可用采购订单数据sql:" + sql);
                sql = string.Format(@"
 /*dialect*/
SELECT T1.FID,FHMASTERDATE,t1.FEntryID,T1.FBILLNO, FNeedQty,(FLeadtime+FLeadTtime2)FFIXLEADTIME,t5.FMAXPOQTY,FJITBatch FMINPOQTY,FJITMATERIALGROUP,FJITMaterielDemand,FJITSafeStock,t1.FMATERIALID,t6.FNumber,NeedQty, FStockOrgId ,FErpClsID
@@ -94,13 +91,13 @@
AND T1.FID in (select distinct FDAYPLANID from sc_TLPLANZXJH where FISZX = 0) 
order by FHMASTERDATE
");
                //LogHelper.Info("[提料计划准备阶段]需要提料数据sql:" + sql);
                ////LogHelper.Info("[提料计划准备阶段]需要提料数据sql:" + 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 == "163165").ToList();
                //LogHelper.Info("[提料计划准备阶段]总物料行数" + MaterialIDList.Count);
                ////LogHelper.Info("[提料计划准备阶段]总物料行数" + MaterialIDList.Count);
                //提料计划数据集临时存储集合
                List<PODemandPlanTemp> PODemandPlanTemp = new List<PODemandPlanTemp>();
                //sql集合 更新采购订单占用的提料计划数量
@@ -115,7 +112,7 @@
                        LogHelper.Info("[提料计划开始]当前物料无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId);
                        continue;
                    }
                    //LogHelper.Info(item.FMATERIALID.ToString());
                    ////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;//最小起订量
@@ -134,7 +131,7 @@
                        _PurchaseInventory = PurchaseInventory.Where(x => x.FMATERIALID == item.FMATERIALID && x.FStockOrgId == item.FStockOrgId && x.FQTY > 0).OrderBy(x => x.FENTRYID).ToList();
                        if (_PurchaseInventory.Count == 0)
                        {
                            //LogHelper.Info("[提料计划开始]当前物料明细无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId);
                            ////LogHelper.Info("[提料计划开始]当前物料明细无采购信息:" + item.FMATERIALID + " 库存组织:" + item.FStockOrgId);
                            break;
                        }
@@ -143,12 +140,12 @@
                        FEntryIdList.Add(_item.FENTRYID);
                        NeedQty += _item.NeedQty;
                        //LogHelper.Info("记录明细id:" + _item.FENTRYID + "");
                        //LogHelper.Info("总需求量:" + NeedQty + "");
                        //LogHelper.Info("最小起订量:" + FMINPOQTY + "");
                        ////LogHelper.Info("记录明细id:" + _item.FENTRYID + "");
                        ////LogHelper.Info("总需求量:" + NeedQty + "");
                        ////LogHelper.Info("最小起订量:" + FMINPOQTY + "");
                        if (NeedQty <= FMINPOQTY)
                        {
                            LogHelper.Info("[提料计划]当前物料明细无采购信息:" + item.FMATERIALID + ",数量:" + NeedQty + ",最小起订量:" + FMINPOQTY + "");
                            //LogHelper.Info("[提料计划]当前物料明细无采购信息:" + item.FMATERIALID + ",数量:" + NeedQty + ",最小起订量:" + FMINPOQTY + "");
                        }
                        if ((FJITmaterialGroup == "总量控制规格类" || FJITmaterialGroup == "订单专用个性类") && FEntryIdList.Count < Convert.ToInt32(FJITMaterielDemand) && i < _DayPlanPpbom.Count) //订单专用个性类
@@ -158,8 +155,8 @@
                        //{
                        foreach (var Purchase in _PurchaseInventory)
                        {
                            //LogHelper.Info("采购订单号测试:" + Purchase.FBillNo);
                            //LogHelper.Info("物料:" + Purchase.FMATERIALID + ",采购订单数量:" + Purchase.FQTY);
                            ////LogHelper.Info("采购订单号测试:" + Purchase.FBillNo);
                            ////LogHelper.Info("物料:" + Purchase.FMATERIALID + ",采购订单数量:" + Purchase.FQTY);
                            if (Purchase.FQTY >= NeedQty)
                            {
                                foreach (int id in FEntryIdList)
@@ -210,12 +207,12 @@
                                    var DayPlanPpbomls = DayPlanPpbom.Where(c => c.FENTRYID == id && c.FMATERIALID == _item.FMATERIALID).FirstOrDefault();
                                    decimal Qty = DayPlanPpbomls.NeedQty;//订单数量
                                    //if (Qty == 0)
                                    //    LogHelper.Info("订单数量为0");
                                    //    //LogHelper.Info("订单数量为0");
                                    if (Qty > _NeedQty)
                                        Qty = _NeedQty; //订单数量>采购订单数量 取采购订单
                                    //if (_NeedQty == 0)
                                    //    LogHelper.Info("订单数量为0");
                                    //    //LogHelper.Info("订单数量为0");
                                    _NeedQty = _NeedQty - Qty;
                                    PODemandPlanTemp.Add(new Demo.Model.Model.PODemandPlan.PODemandPlanTemp
@@ -374,7 +371,7 @@
                }
                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();
                LogHelper.Info($"提料计划,数据准备完成,保存到Model实体,总行数:{PODemandPlanTemp.Count}");
                //LogHelper.Info($"提料计划,数据准备完成,保存到Model实体,总行数:{PODemandPlanTemp.Count}");
                int tlmmm = 1;
                JArray FinalyResult = new JArray();
                foreach (var item in PODemandPlanList)
@@ -417,7 +414,7 @@
                    FinalyResult.Add(model);
                    if ((tlmmm >= 20 || tlmmm == PODemandPlanList.Count) && (tlmmm % 20 == 0 || tlmmm == PODemandPlanList.Count))
                    {
                        LogHelper.Info("提料计划新增批量执行,记录循环的当前条数" + tlmmm);
                        //LogHelper.Info("提料计划新增批量执行,记录循环的当前条数" + tlmmm);
                        JObject jsonRoot = new JObject()
                        {
                            ["Creator"] = "",
@@ -434,19 +431,19 @@
                        string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                        if (saveIsSuc != "TRUE")
                        {
                            LogHelper.Error(jsonRoot.ToString());
                            //LogHelper.Error(jsonRoot.ToString());
                        }
                        FinalyResult = new JArray();
                    }
                    tlmmm++;
                }
                //sw.Stop();//结束计时
                //LogHelper.Info("提料计划执行完成,运行总时长:" + sw.Elapsed);
                ////LogHelper.Info("提料计划执行完成,运行总时长:" + sw.Elapsed);
                DBServiceHelper.ExecuteBatch(Context, sqlList);
            }
            catch (Exception ex)
            {
                LogHelper.Info("提料计划跳出:" + ex.Message.ToString());
                //LogHelper.Info("提料计划跳出:" + ex.Message.ToString());
            }
            // var PODemandPlanList22 = PODemandPlanTemp.GroupBy(p => new   {p.FSUPPLIERID,     p.FHMASTERDATE }).ToList();
        }
src/BLL/Demo.TimedTaskPlugIn/PRD/TLPlanTimeTaskByPurchase.cs
@@ -1,20 +1,13 @@
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
{
@@ -28,30 +21,31 @@
        {
            try
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();
                Context = ctx;
                string sql = @"/*dialect*/  select count(*) js from t_PUR_POOrder a
                string sql = @"/*dialect*/  select count(*) js
from t_PUR_POOrder a
join t_PUR_POOrderEntry b on a.FID = b.FID
where FBILLTYPEID in 
(
select FBILLTYPEID from T_BAS_BILLTYPE
where FBILLFORMID = 'PUR_PurchaseOrder'
and FNUMBER in('CGDD09_SYS','CGDD10_SYS','CGDD06,'CGDD08')
and FNUMBER in('CGDD09_SYS','CGDD10_SYS','CGDD06','CGDD08')
)
and FDOCUMENTSTATUS = 'C'
and a.FDOCUMENTSTATUS = 'C' --审核状态
and a.FCLOSESTATUS = 'A' --关闭状态
and a.FCANCELSTATUS ='A' --作废状态
and b.FMRPCloseStatus ='A' -- 业务关闭
and b.FMRPFreezeStatus ='A' -- 业务冻结
and b.FMRPTerminateStatus ='A' -- 业务终止
and FENTRYID not in  (select distinct FHPOOrderEntryID from Cg_PODemandPlanBillSub)";
                int ret = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0);
                if (ret == 0)
                    return;
                Extraction();
                LogHelper.Info("提料计划时长:" + sw.Elapsed);
                sw.Stop();
            }
            catch (System.Exception ex)
            {
                LogHelper.Error(ex.Message.ToString());
                //LogHelper.Error(ex.Message.ToString());
            }
        }
@@ -60,35 +54,48 @@
            try
            {
                //需要生成提料计划所有数据
                string sql = @"/*dialect*/ SELECT * FROM (
select a.FID,b.FENTRYID,B.FSEQ,a.FBILLNO,A.FSUPPLIERID,d.FNUMBER as FSUPPLIERNAME,CONVERT(NVARCHAR(50),T.FDELIVERYDATE,23)FDELIVERYDATE,b.FMATERIALID,c.FNUMBER as FMATERIALNAME,b.FQTY from t_PUR_POOrder a
                string sql = @"/*dialect*/  SELECT * FROM (
select a.FID,b.FENTRYID,B.FSEQ,a.FBILLNO,A.FSUPPLIERID,d.FNUMBER as FSUPPLIERNAME,CONVERT(NVARCHAR(50),T.FDELIVERYDATE,23)FDELIVERYDATE,b.FMATERIALID,c.FNUMBER as FMATERIALNAME,R.FREMAINRECEIVEQTY FQTY
from t_PUR_POOrder a
join t_PUR_POOrderEntry b on a.FID = b.FID
join T_PUR_POORDERENTRY_D T on B.FENTRYID = T.FENTRYID
join T_PUR_POORDERENTRY_R R on B.FENTRYID = R.FENTRYID
join T_BD_MATERIAL c on b.FMATERIALID = c.FMATERIALID
join T_BD_SUPPLIER d on a.FSUPPLIERID=d.FSUPPLIERID
left join Cg_PODemandPlanBillSub e on b.FENTRYID =e.FHPOOrderEntryID
where a.FBILLTYPEID in 
(
select FBILLTYPEID  from T_BAS_BILLTYPE
where FBILLFORMID = 'PUR_PurchaseOrder'
and FNUMBER in('CGDD09_SYS','CGDD10_SYS','CGDD06,'CGDD08')
and FNUMBER in('CGDD09_SYS','CGDD10_SYS','CGDD06','CGDD08')
)
and a.FDOCUMENTSTATUS = 'C'
and a.FDOCUMENTSTATUS = 'C' --审核状态
and a.FCLOSESTATUS = 'A' --关闭状态
and a.FCANCELSTATUS ='A' --作废状态
and b.FMRPCloseStatus ='A' -- 业务关闭
and b.FMRPFreezeStatus ='A' -- 业务冻结
and b.FMRPTerminateStatus ='A' -- 业务终止
and b.FENTRYID not in  (select distinct FHPOOrderEntryID from Cg_PODemandPlanBillSub)
)A
";
                //交期和供应商进行分组 
                DataTable purDt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
                sql = @"/*dialect*/ select DISTINCT A.FSUPPLIERID,CONVERT(NVARCHAR(50),T.FDELIVERYDATE,23)FDELIVERYDATE from t_PUR_POOrder a
                sql = @"/*dialect*/ select DISTINCT A.FSUPPLIERID,CONVERT(NVARCHAR(50),T.FDELIVERYDATE,23)FDELIVERYDATE
from t_PUR_POOrder a
join t_PUR_POOrderEntry b on a.FID = b.FID
join T_PUR_POORDERENTRY_D T on B.FENTRYID = T.FENTRYID
left join Cg_PODemandPlanBillSub e on b.FENTRYID =e.FHPOOrderEntryID
where a.FBILLTYPEID in 
(
select FBILLTYPEID  from T_BAS_BILLTYPE
where FBILLFORMID = 'PUR_PurchaseOrder'
and FNUMBER in('CGDD09_SYS','CGDD10_SYS')
and FNUMBER in('CGDD09_SYS','CGDD10_SYS','CGDD06','CGDD08')
)
and a.FDOCUMENTSTATUS = 'C'
and a.FDOCUMENTSTATUS = 'C' --审核状态
and a.FCLOSESTATUS = 'A' --关闭状态
and a.FCANCELSTATUS ='A' --作废状态
and b.FMRPCloseStatus ='A' -- 业务关闭
and b.FMRPFreezeStatus ='A' -- 业务冻结
and b.FMRPTerminateStatus ='A' -- 业务终止
and b.FENTRYID not in  (select distinct FHPOOrderEntryID from Cg_PODemandPlanBillSub)
";
                DataTable _purDt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
                JArray FinalyResult = new JArray();
@@ -98,7 +105,7 @@
                    foreach (DataRow _dr in _purDt.Rows)
                    {
                        DataRow[] purDtRows = purDt.Select($"FSUPPLIERID = '{_dr[0].ToString()}' AND FDELIVERYDATE = '{_dr[1].ToString()}'");
                        LogHelper.Info(purDtRows.ToString());
                        //LogHelper.Info(purDtRows.ToString());
                        JObject model = new JObject();
                        model.Add("FHDate", purDtRows[0]["FDELIVERYDATE"].ToString());
                        model.Add("FSettleCurrId", new JObject() { ["Fnumber"] = "PRE001" });
@@ -122,7 +129,7 @@
                        FinalyResult.Add(model);
                        if ((tlmmm >= 20 || tlmmm == _purDt.Rows.Count) && (tlmmm % 20 == 0 || tlmmm == _purDt.Rows.Count))
                        {
                            LogHelper.Info("提料计划新增批量执行,记录循环的当前条数" + tlmmm);
                            //LogHelper.Info("提料计划新增批量执行,记录循环的当前条数" + tlmmm);
                            JObject jsonRoot = new JObject()
                            {
                                ["Creator"] = "",
@@ -139,7 +146,7 @@
                            string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                            if (saveIsSuc != "TRUE")
                            {
                                LogHelper.Error(jsonRoot.ToString());
                                //LogHelper.Error(jsonRoot.ToString());
                            }
                            FinalyResult = new JArray();
                        }
@@ -149,7 +156,7 @@
            }
            catch (Exception ex)
            {
                LogHelper.Info("提料计划跳出:" + ex.Message.ToString());
                //LogHelper.Info("提料计划跳出:" + ex.Message.ToString());
            }
        }
    }
src/BLL/Demo.TimedTaskPlugIn/app.config
@@ -6,6 +6,10 @@
        <assemblyIdentity name="BouncyCastle.Crypto" publicKeyToken="0e99375e54769942" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.8.6.0" newVersion="1.8.6.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="ICSharpCode.SharpZipLib" publicKeyToken="1b03e6acf1164f73" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.2.0.246" newVersion="1.2.0.246" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
src/BLL/Demo.TimedTaskPlugIn/packages.config
@@ -2,8 +2,5 @@
<packages>
  <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.6.1" targetFramework="net452" />
  <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/Config/kdapi.config
File was deleted
src/BLL/Demo.Utility/Demo.Utility.csproj
@@ -39,33 +39,17 @@
    <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, Version=7.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\lib\net452\Kingdee.BOS.WebApi.Client.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.BOS.WebApi.FormService, Version=7.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\lib\net452\Kingdee.BOS.WebApi.FormService.dll</HintPath>
    </Reference>
    <Reference Include="Kingdee.BOS.WebApi.ServicesStub, Version=7.6.2052.7, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\..\..\packages\ZD.Cloud.WebApi.7.6.1\lib\net452\Kingdee.BOS.WebApi.ServicesStub.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">
      <SpecificVersion>False</SpecificVersion>
    <Reference Include="NPOI">
      <HintPath>..\..\..\..\..\办公\K3Cloud\WebSite\bin\NPOI.dll</HintPath>
    </Reference>
    <Reference Include="NPOI.OOXML, Version=2.5.1.0, Culture=neutral, PublicKeyToken=0df73ec7942b34e1, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
    <Reference Include="NPOI.OOXML">
      <HintPath>..\..\..\..\..\办公\K3Cloud\WebSite\bin\NPOI.OOXML.dll</HintPath>
    </Reference>
    <Reference Include="NPOI.OpenXml4Net, Version=2.5.1.0, Culture=neutral, PublicKeyToken=0df73ec7942b34e1, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
    <Reference Include="NPOI.OpenXml4Net">
      <HintPath>..\..\..\..\..\办公\K3Cloud\WebSite\bin\NPOI.OpenXml4Net.dll</HintPath>
    </Reference>
    <Reference Include="NPOI.OpenXmlFormats, Version=2.5.1.0, Culture=neutral, PublicKeyToken=0df73ec7942b34e1, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\..\..\办公\K3Cloud\WebSite\bin\NPOI.OpenXmlFormats.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Configuration" />
@@ -79,20 +63,17 @@
    <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.6.1\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>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="NpoiHelper.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <None Include="Config\kdapi.config" />
    <None Include="app.config" />
    <None Include="packages.config" />
  </ItemGroup>
  <ItemGroup>
    <WCFMetadata Include="Connected Services\" />
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
src/BLL/Demo.Utility/NpoiHelper.cs
@@ -4,7 +4,6 @@
using System.IO;
using NPOI.HSSF.UserModel;
using System.Data;
using System.Collections;
using System.Drawing;
using NPOI.HSSF.Util;
using NPOI.SS.UserModel;
@@ -100,245 +99,6 @@
            if (ds.Tables[0].Rows.Count == 0 && sb.ToString() != "") throw new Exception(sb.ToString());
            return ds;
        }
        public DataSet ReadExcel1(string FileName, int startRow, params NpoiDataType[] ColumnDataType)
        {
            string colNamePix = "F";
            int ertime = 0;
            int intime = 0;
            DataSet ds = new DataSet("ds");
            DataTable dt = new DataTable("dt");
            DataRow dr;
            StringBuilder sb = new StringBuilder();
            using (FileStream stream = new FileStream(@FileName, FileMode.Open, FileAccess.Read))
            {
                IWorkbook workbook = WorkbookFactory.Create(stream);//使用接口,自动识别excel2003/2007格式
                //for (int k = 0; k < 14; k++)
                //{
                ISheet sheet = workbook.GetSheetAt(0);//得到里面第一个sheet
                int j;
                IRow row;
                #region ColumnDataType赋值
                if (ColumnDataType.Length <= 0)
                {
                    row = sheet.GetRow(startRow - 1);//得到第i行
                    ColumnDataType = new NpoiDataType[row.LastCellNum];
                    for (int i = 0; i < row.LastCellNum; i++)
                    {
                        ICell hs = row.GetCell(i, MissingCellPolicy.CREATE_NULL_AS_BLANK);
                        ColumnDataType[i] = GetCellDataType(hs); //NpoiDataType.Blank;
                        //if (i == 6)
                        //{
                        //    ColumnDataType[i] = NpoiDataType.Numeric;
                        //}
                    }
                }
                #endregion
                for (j = 0; j < ColumnDataType.Length; j++)
                {
                    Type tp = GetDataTableType(ColumnDataType[j]);
                    //if (j == 6)
                    //{
                    //    tp = typeof(double);
                    //}
                    dt.Columns.Add(colNamePix + (j + 1), tp);
                }
                ReadExcelEndRow = ReadExcelEndRow == 0 ? sheet.PhysicalNumberOfRows : ReadExcelEndRow;
                for (int i = startRow - 1; i <= ReadExcelEndRow; i++)
                {
                    row = sheet.GetRow(i);//得到第i行
                    if (row == null) continue;
                    dr = dt.NewRow();
                    bool flg = false;
                    for (j = 0; j < ColumnDataType.Length; j++)
                    {
                        try
                        {
                            object temp = GetCellData(ColumnDataType[j], row, j);
                            dr[colNamePix + (j + 1)] = temp;
                            if (temp.ToString().Trim() != "")
                            {
                                flg = true;
                            }
                        }
                        catch (Exception e)
                        {
                            ertime++;
                            sb.Append(string.Format("第{0}行第{1}列未读取:{2}\r\n", i + 1, j + 1, e.Message));
                        }
                    }
                    if (flg)
                    {
                        dt.Rows.Add(dr);
                        intime++;
                    }
                }
                ds.Tables.Add(dt);
                //}
            }
            if (ds.Tables[0].Rows.Count == 0 && sb.ToString() != "") throw new Exception(sb.ToString());
            return ds;
        }
        public DataSet ReadExcel(string FileName, int startRow, int endRow, params NpoiDataType[] ColumnDataType)
        {
            if (endRow > 0)
            {
                ReadExcelEndRow = endRow;
            }
            return ReadExcel(FileName, startRow);
        }
        public DataSet ReadExcel_double(string FileName, int startRow, int[] colnums, int LastCellNum, params NpoiDataType[] ColumnDataType)
        {
            string colNamePix = "F";
            int ertime = 0;
            int intime = 0;
            DataSet ds = new DataSet("ds");
            DataTable dt = new DataTable("dt");
            DataRow dr;
            StringBuilder sb = new StringBuilder();
            using (FileStream stream = new FileStream(@FileName, FileMode.Open, FileAccess.Read))
            {
                IWorkbook workbook = WorkbookFactory.Create(stream);//使用接口,自动识别excel2003/2007格式
                ISheet sheet = workbook.GetSheetAt(0);//得到里面第一个sheet
                int j;
                IRow row;
                #region ColumnDataType赋值
                if (ColumnDataType.Length <= 0)
                {
                    row = sheet.GetRow(startRow - 1);//得到第i行
                    ColumnDataType = new NpoiDataType[LastCellNum];
                    for (int i = 0; i < LastCellNum; i++)
                    {
                        ICell hs = row.GetCell(i, MissingCellPolicy.CREATE_NULL_AS_BLANK);
                        ColumnDataType[i] = GetCellDataType(hs); //NpoiDataType.Blank;
                    }
                }
                #endregion
                for (j = 0; j < ColumnDataType.Length; j++)
                {
                    Type tp = GetDataTableType(ColumnDataType[j]);
                    dt.Columns.Add(colNamePix + j, tp);
                }
                ReadExcelEndRow = ReadExcelEndRow == 0 ? sheet.PhysicalNumberOfRows : ReadExcelEndRow;
                for (int i = startRow - 1; i <= ReadExcelEndRow; i++)
                {
                    row = sheet.GetRow(i);//得到第i行
                    if (row == null) continue;
                    try
                    {
                        dr = dt.NewRow();
                        bool co = false;
                        for (j = 0; j < ColumnDataType.Length; j++)
                        {
                            co = false;
                            for (int c = 0; c < colnums.Length; c++)
                            {
                                if (j == colnums[c])
                                {
                                    co = true;
                                    break;
                                }
                            }
                            if (co && i != 0)
                                dr[colNamePix + j] = GetCellData_double(ColumnDataType[j], row, j);
                            else
                                dr[colNamePix + j] = GetCellData(ColumnDataType[j], row, j);
                        }
                        dt.Rows.Add(dr);
                        intime++;
                    }
                    catch (Exception er)
                    {
                        ertime++;
                        sb.Append(string.Format("第{0}行出错:{1}\r\n", i + 1, er.Message));
                        continue;
                    }
                }
                ds.Tables.Add(dt);
            }
            if (ds.Tables[0].Rows.Count == 0 && sb.ToString() != "") throw new Exception(sb.ToString());
            return ds;
        }
        public DataSet ReadExcel_Sheet2(string FileName, int startRow, int[] colnums, params NpoiDataType[] ColumnDataType)
        {
            string colNamePix = "F";
            int ertime = 0;
            int intime = 0;
            DataSet ds = new DataSet("ds");
            DataTable dt = new DataTable("dt");
            DataRow dr;
            StringBuilder sb = new StringBuilder();
            using (FileStream stream = new FileStream(@FileName, FileMode.Open, FileAccess.Read))
            {
                IWorkbook workbook = WorkbookFactory.Create(stream);//使用接口,自动识别excel2003/2007格式
                ISheet sheet = workbook.GetSheetAt(1);//得到里面第二个sheet
                int j;
                IRow row;
                #region ColumnDataType赋值
                if (ColumnDataType.Length <= 0)
                {
                    row = sheet.GetRow(startRow - 1);//得到第i行
                    ColumnDataType = new NpoiDataType[row.LastCellNum];
                    for (int i = 0; i < row.LastCellNum; i++)
                    {
                        ICell hs = row.GetCell(i, MissingCellPolicy.CREATE_NULL_AS_BLANK);
                        ColumnDataType[i] = GetCellDataType(hs); //NpoiDataType.Blank;
                    }
                }
                #endregion
                for (j = 0; j < ColumnDataType.Length; j++)
                {
                    Type tp = GetDataTableType(ColumnDataType[j]);
                    dt.Columns.Add(colNamePix + j, tp);
                }
                ReadExcelEndRow = ReadExcelEndRow == 0 ? sheet.PhysicalNumberOfRows : ReadExcelEndRow;
                for (int i = startRow - 1; i <= ReadExcelEndRow; i++)
                {
                    row = sheet.GetRow(i);//得到第i行
                    if (row == null) continue;
                    try
                    {
                        dr = dt.NewRow();
                        bool co = false;
                        for (j = 0; j < ColumnDataType.Length; j++)
                        {
                            for (int c = 0; c < colnums.Length; c++)
                            {
                                if (j == colnums[c])
                                {
                                    co = true;
                                    break;
                                }
                            }
                            if (co)
                                dr[colNamePix + j] = GetCellData_double(ColumnDataType[j], row, j);
                            else
                                dr[colNamePix + j] = GetCellData(ColumnDataType[j], row, j);
                        }
                        dt.Rows.Add(dr);
                        intime++;
                    }
                    catch (Exception er)
                    {
                        ertime++;
                        sb.Append(string.Format("第{0}行出错:{1}\r\n", i + 1, er.Message));
                        continue;
                    }
                }
                ds.Tables.Add(dt);
            }
            if (ds.Tables[0].Rows.Count == 0 && sb.ToString() != "") throw new Exception(sb.ToString());
            return ds;
        }
        #endregion
        #region//读取多个sheet
        public DataSet ReadExcelSub(string FileName, int startRow, params NpoiDataType[] ColumnDataType)
@@ -934,12 +694,9 @@
                        cell = row.CreateCell(j);//创建第0行的第j列
                        cell.CellStyle = style1;//单元格式设置样式
                        try
                        {
                            cell.SetCellType(CellType.String);
                            cell.SetCellValue(columnValue.ToString());
                        }
                        catch { }
                        cell.SetCellType(CellType.String);
                        cell.SetCellValue(columnValue.ToString());
                    }
                    catch
@@ -1120,13 +877,8 @@
                        cell = row.CreateCell(j);//创建第0行的第j列
                        cell.CellStyle = style1;//单元格式设置样式
                        try
                        {
                            //cell.SetCellType(CellType.STRING);
                            cell.SetCellValue(columnValue.ToString());
                        }
                        catch { }
                        //cell.SetCellType(CellType.STRING);
                        cell.SetCellValue(columnValue.ToString());
                    }
                    catch
                    {
@@ -1301,18 +1053,16 @@
            {
                return null;
            }
            try
            if (obj.ToString().Contains("月") && obj.ToString().Contains("-") && objcell.DateCellValue != null)
            {
                if (obj.ToString().Contains("月") && obj.ToString().Contains("-") && objcell.DateCellValue != null)
                {
                    datatype = NpoiDataType.Datetime;
                }
                else if (objcell.CellType == CellType.Numeric && (obj.ToString().Contains("-") || obj.ToString().Contains("/")) && objcell.DateCellValue != null)
                {
                    datatype = NpoiDataType.Datetime;
                }
                datatype = NpoiDataType.Datetime;
            }
            catch { }
            else if (objcell.CellType == CellType.Numeric && (obj.ToString().Contains("-") || obj.ToString().Contains("/")) && objcell.DateCellValue != null)
            {
                datatype = NpoiDataType.Datetime;
            }
            if (datatype == NpoiDataType.Datetime)
            {
@@ -1359,23 +1109,12 @@
            {
                if (obj != null)
                {
                    try
                    obj = obj.ToString().Trim().Replace("\n", "");//去掉回车,ligerui tree不支持回车
                    if (obj.ToString().StartsWith("."))
                    {
                        obj = obj.ToString().Trim().Replace("\n","");//去掉回车,ligerui tree不支持回车
                        if (obj.ToString().StartsWith("."))
                        {
                            try
                            {
                                decimal.Parse("0" + obj.ToString());
                                obj = "0" + obj.ToString();
                            }
                            catch
                            {
                            }
                        }
                    }
                    catch (Exception e4)
                    {
                        decimal.Parse("0" + obj.ToString());
                        obj = "0" + obj.ToString();
                    }
                }
            }
@@ -1411,15 +1150,11 @@
                    break;
                case CellType.Numeric:
                    dtype = NpoiDataType.String;
                    try
                    if (hs.NumericCellValue.ToString().Contains("-") || hs.NumericCellValue.ToString().Contains("/") || hs.ToString().Contains("-") || hs.ToString().Contains("/"))
                    {
                        if (hs.NumericCellValue.ToString().Contains("-") || hs.NumericCellValue.ToString().Contains("/") || hs.ToString().Contains("-") || hs.ToString().Contains("/"))
                        {
                            hs.DateCellValue.ToString();
                            dtype = NpoiDataType.Datetime;
                        }
                        hs.DateCellValue.ToString();
                        dtype = NpoiDataType.Datetime;
                    }
                    catch { }
                    cellvalue = hs.NumericCellValue.ToString();
                    break;
                case CellType.String:
src/BLL/Demo.Utility/app.config
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="ICSharpCode.SharpZipLib" publicKeyToken="1b03e6acf1164f73" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.2.0.246" newVersion="1.2.0.246" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
src/BLL/Demo.Utility/packages.config
@@ -3,7 +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.Cloud.WebApi" version="7.6.1" targetFramework="net452" />
  <package id="ZD.Newtonsoft.Json" version="1.0.0" targetFramework="net472" />
  <package id="ZD.Share" version="1.0.3" targetFramework="net452" />
</packages>
src/BLL/ZD.Cloud.Logger/LogHelper.cs
New file
@@ -0,0 +1,159 @@
using System;
using System.Collections;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Text;
using System.Threading;
namespace ZD.Cloud.Logger
{
    public class LogHelper
    {
        private readonly static object locker = new object();
        public static void Info(string msg, bool isAsync = true)
        {
            Func(LogType.Info, msg);
        }
        public static void Error(string msg, bool isAsync = true)
        {
            Func(LogType.Error, msg);
        }
        public static void Error(Exception ex, bool isAsync = true)
        {
            Func(LogType.Error, "", ex);
        }
        public static void Warn(string msg, bool isAsync = true)
        {
            Func(LogType.Warn, msg);
        }
        public static void Warn(Exception ex, bool isAsync = true)
        {
            Func(LogType.Warn, "", ex);
        }
        //带文件夹名称
        public static void Error(string logFol, string msg, bool isAsync = true)
        {
            FuncWithFol(LogType.Error, logFol, msg);
        }
        public static void Error(string logFol, Exception ex, bool isAsync = true)
        {
            FuncWithFol(LogType.Error, logFol, "", ex);
        }
        public static void Warn(string logFol, string msg, bool isAsync = true)
        {
            FuncWithFol(LogType.Warn, logFol, msg);
        }
        public static void Warn(string logFol, Exception ex, bool isAsync = true)
        {
            FuncWithFol(LogType.Warn, logFol, "", ex);
        }
        public static void Info(string logFol, string msg, bool isAsync = true)
        {
            FuncWithFol(LogType.Info, logFol, msg);
        }
        private static void Func(LogType type, string msg = "", Exception ex = null, bool isAsync = true)
        {
            try
            {
                StringBuilder sb = new StringBuilder();
                string dt = DateTime.Now.ToString(@"yyyy-MM-dd HH:mm:ss fff");
                sb.AppendFormat("{0}  {1}  -  {2}", dt, type, msg);
                if (type == LogType.Error)
                {
                    sb.AppendFormat("  [Exception:{0}]", ex);
                }
                WriteLog("", sb.ToString());
                if (type == LogType.Warn)
                {
                    Mail.SendMail(sb.ToString());
                }
            }
            finally
            {
            }
        }
        private static void FuncWithFol(LogType type, string logFol, string msg = "", Exception ex = null, bool isAsync = true)
        {
            try
            {
                StringBuilder sb = new StringBuilder();
                string dt = DateTime.Now.ToString(@"yyyy-MM-dd HH:mm:ss fff");
                sb.AppendFormat("{0}  {1}  -  {2}", dt, type, msg);
                if (type == LogType.Error)
                {
                    sb.AppendFormat("  [Exception:{0}]", ex);
                }
                WriteLog(logFol, sb.ToString());
                if (type == LogType.Warn)
                {
                    Mail.SendMail(sb.ToString());
                }
            }
            finally
            {
            }
        }
        private static void WriteLog(string logFol, string logContent)
        {
            if (string.IsNullOrWhiteSpace(logContent)) return;
            if (string.IsNullOrWhiteSpace(logFol))
            {
                logFol = "zdlog";
            }
            StackTrace trace = new StackTrace();
            StackFrame frame = trace.GetFrame(2);//1代表上级,2代表上上级,以此类推
            MethodBase method = frame.GetMethod();
            var className = method.ReflectedType.Name;
            string logDir = AppDomain.CurrentDomain.BaseDirectory;
            var logPath = System.Configuration.ConfigurationManager.AppSettings["LogPath"];
            if (string.IsNullOrEmpty(logPath))
            {
                logPath = string.Format(@"{0}\{1}\{2}", logDir, logFol, className);
            }
            logPath = logPath.Replace("_", "").Replace(" ", "").Replace("/r", "").Replace("/n", "");
            if (!Directory.Exists(logPath)) Directory.CreateDirectory(logPath);
            string filename = string.Format(@"{0}\{1}.txt", logPath, DateTime.Now.ToString(@"yyyyMMdd"));
            if (File.Exists(filename))
            {
                FileStream fs = new FileStream(filename, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
                StreamWriter sr = new StreamWriter(fs);
                sr.WriteLine(logContent);
                sr.Close();
                fs.Close();
            }
            else
            {
                FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
                StreamWriter sr = new StreamWriter(fs);
                sr.WriteLine(logContent);
                sr.Close();
                fs.Close();
            }
        }
        public enum LogType
        {
            Info,
            Error,
            Warn
        }
    }
}
src/BLL/ZD.Cloud.Logger/Mail.cs
New file
@@ -0,0 +1,40 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Text;
namespace ZD.Cloud.Logger
{
    public class Mail
    {
        public static string smtpService = "smtp.exmail.qq.com";
        public static string sendEmail = "wjf@hz-kingdee.com";
        public static string sendpwd = "Zd87114808";
        private static List<string> addressList = new List<string> { "wjf@hz-kingdee.com", "chenfei@hz-kingdee.com", "qym@hz-kingdee.com", "lyc@hz-kingdee.com" };//暂时先写死,后期需配置
        public static void SendMail(string msg)
        {
            SmtpClient smtpClient = new SmtpClient();
            smtpClient.Host = smtpService;
            smtpClient.UseDefaultCredentials = false;
            MailAddress sendAddress = new MailAddress(sendEmail, "智德");
            foreach (var address in addressList)
            {
                MailAddress receiverAddress = new MailAddress(address);
                MailMessage message = new MailMessage(sendAddress, receiverAddress);
                message.Subject = "异常信息:" + DateTime.Now;
                message.SubjectEncoding = Encoding.UTF8;
                message.Body = msg;
                message.BodyEncoding = Encoding.UTF8;
                message.IsBodyHtml = true;//是否支持HTML
                smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
                smtpClient.EnableSsl = true;
                smtpClient.UseDefaultCredentials = false;
                NetworkCredential senderCredential = new NetworkCredential(sendEmail, sendpwd);
                smtpClient.Credentials = senderCredential;
                smtpClient.Send(message);
            }
        }
    }
}
src/BLL/ZD.Cloud.Logger/Properties/AssemblyInfo.cs
New file
@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("ZD.Cloud.Logger")]
[assembly: AssemblyDescription("ZD.Cloud.Logger")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("ZD")]
[assembly: AssemblyProduct("ZD.Cloud.Logger")]
[assembly: AssemblyCopyright("Copyright ©  2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("876bcc4d-41be-4570-bd36-d6f11526ad64")]
// 程序集的版本信息由下列四个值组成:
//
//      主版本
//      次版本
//      生成号
//      修订号
//
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
src/BLL/ZD.Cloud.Logger/ZD.Cloud.Logger.csproj
New file
@@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{876BCC4D-41BE-4570-BD36-D6F11526AD64}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>ZD.Cloud.Logger</RootNamespace>
    <AssemblyName>ZD.Cloud.Logger</AssemblyName>
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <Deterministic>true</Deterministic>
    <RestorePackages>true</RestorePackages>
    <BuildPackage>true</BuildPackage>
    <TargetFrameworkProfile />
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <Prefer32Bit>false</Prefer32Bit>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <Prefer32Bit>false</Prefer32Bit>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.configuration" />
    <Reference Include="System.Core" />
    <Reference Include="System.Net" />
    <Reference Include="System.Web" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="LogHelper.cs" />
    <Compile Include="Mail.cs" />
  </ItemGroup>
  <ItemGroup>
    <None Include="ZD.Cloud.Logger.nuspec" />
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
</Project>
src/BLL/ZD.Cloud.Logger/ZD.Cloud.Logger.nuspec
New file
@@ -0,0 +1,12 @@
<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>$author$</authors>
    <owners>$author$</owners>
    <description>$description$</description>
    <copyright>Copyright © ZD 2018</copyright>
  </metadata>
</package>
src/BLL/ZD.Cloud.WebApi/CloudClient.cs
New file
@@ -0,0 +1,75 @@
using Kingdee.BOS.WebApi.Client;
using Newtonsoft.Json.Linq;
using System;
using ZD.Share.Common;
namespace ZD.Cloud.WebApi
{
    public class CloudClient : K3CloudApiClient
    {
        public const string KDApiUrl = "http://localhost/K3Cloud/";
        public CloudClient(string serverUrl = KDApiUrl) : base(serverUrl)
        {
            var dbId = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "DbId");
            var useName = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "UserName");
            var pwd = Util.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 = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "DbId");
            var useName = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "UserName");
            var pwd = Util.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 void K3ApiClient(string serverUrl = "", string dbId = "", string useName = "", string pwd = "")
        {
            if (string.IsNullOrEmpty(serverUrl))
            {
                serverUrl = KDApiUrl;
            }
            if (string.IsNullOrEmpty(dbId))
            {
                dbId = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "DbId");
            }
            if (string.IsNullOrEmpty(useName))
            {
                useName = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "UserName");
            }
            if (string.IsNullOrEmpty(pwd))
            {
                pwd = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "PassWord");
            }
            if (string.IsNullOrEmpty(dbId) || string.IsNullOrEmpty(useName) || string.IsNullOrEmpty(pwd))
                throw new Exception("配置文件或传参有误!");
            K3CloudApiClient apiClient = new K3CloudApiClient(serverUrl);
            var loginResult = apiClient.ValidateLogin(dbId, useName, pwd, 2052);
            var resultType = JObject.Parse(loginResult)["LoginResultType"].Value<int>();
            //登录结果类型等于1,代表登录成功
            if (resultType != 1)
            {
                throw new Exception("登录失败!");
            }
        }
    }
}
src/BLL/ZD.Cloud.WebApi/Properties/AssemblyInfo.cs
New file
@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("ZD.Cloud.WebApi")]
[assembly: AssemblyDescription("ZD.Cloud.WebApi dll")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("ZD")]
[assembly: AssemblyProduct("ZD.Cloud.WebApi")]
[assembly: AssemblyCopyright("Copyright ©  2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("96e1cc80-0e04-4f78-bbff-75faf6a69f7b")]
// 程序集的版本信息由下列四个值组成:
//
//      主版本
//      次版本
//      生成号
//      修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
src/BLL/ZD.Cloud.WebApi/ZD.Cloud.WebApi.csproj
New file
@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{96E1CC80-0E04-4F78-BBFF-75FAF6A69F7B}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>ZD.Cloud.WebApi</RootNamespace>
    <AssemblyName>ZD.Cloud.WebApi</AssemblyName>
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <Deterministic>true</Deterministic>
    <RestorePackages>true</RestorePackages>
    <BuildPackage>true</BuildPackage>
    <TargetFrameworkProfile />
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="Kingdee.BOS.WebApi.Client">
      <HintPath>..\..\..\..\..\办公\K3Cloud\WebSite\bin\Kingdee.BOS.WebApi.Client.dll</HintPath>
    </Reference>
    <Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\..\..\办公\K3Cloud\WebSite\bin\Newtonsoft.Json.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Configuration" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="CloudClient.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <None Include="kdapi.config" />
    <None Include="ZD.Cloud.WebApi.nuspec">
      <SubType>Designer</SubType>
    </None>
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\ZD.Share\ZD.Share.csproj">
      <Project>{54f8364f-3c79-43e7-9f14-de0bc63555d6}</Project>
      <Name>ZD.Share</Name>
    </ProjectReference>
  </ItemGroup>
  <ItemGroup>
    <WCFMetadata Include="Connected Services\" />
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
</Project>
src/BLL/ZD.Cloud.WebApi/ZD.Cloud.WebApi.nuspec
New file
@@ -0,0 +1,17 @@
<?xml version="1.0"?>
<package>
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>$author$</authors>
    <owners>$author$</owners>
    <description>$description$</description>
    <copyright>Copyright © ZD 2020</copyright>
  </metadata>
  <files>
      <file src="\kdapi.config" target="content\Config\" />
      <file src="..\..\dependencyWebApi\Kingdee.BOS.WebApi.ServicesStub.dll" target="lib\net452" />
      <file src="..\..\dependencyWebApi\Kingdee.BOS.WebApi.Client.dll" target="lib\net452" />
  </files>
</package>
src/BLL/ZD.Cloud.WebApi/kdapi.config
src/BLL/ZD.Share/Common/ConvertHelper.cs
New file
@@ -0,0 +1,451 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
namespace ZD.Share.Common
{
    public static class ConvertHelper
    {
        public static string JoinToString<T>(this IEnumerable<T> collection, string split)
        {
            if (collection == null || !collection.Any()) return string.Empty;
            StringBuilder sb = new StringBuilder();
            foreach (T t in collection)
            {
                sb.Append(t).Append(split);
            }
            if (sb.Length > 0)
            {
                sb.Remove(sb.Length - split.Length, split.Length);
            }
            return sb.ToString();
        }
        public static DateTime ToDateTime(this object value, DateTime defaultValue = new DateTime())
        {
            string date = value.ToString();
            if (DateTime.TryParse(date, out DateTime temp))
            {
                return temp;
            }
            else
            {
                return defaultValue;
            }
        }
        public static int ToInt32(this object value, int defaultValue = 0)
        {
            string str = value.ToString();
            if (int.TryParse(str, out int temp))
            {
                return temp;
            }
            else
            {
                return defaultValue;
            }
        }
        public static long ToInt64(this object value, long defaultValue = 0)
        {
            string str = value.ToString();
            if (long.TryParse(str, out long temp))
            {
                return temp;
            }
            else
            {
                return defaultValue;
            }
        }
        public static decimal ToDecimal(this object value, decimal defaultValue = 0)
        {
            string str = value.ToString();
            if (decimal.TryParse(str, out decimal temp))
            {
                return temp;
            }
            else
            {
                return defaultValue;
            }
        }
        public static double ToDouble(this object value, double defaultValue = 0)
        {
            string str = value.ToString();
            if (double.TryParse(str, out double temp))
            {
                return temp;
            }
            else
            {
                return defaultValue;
            }
        }
        public static float ToFloat(this object value, float defaultValue = 0)
        {
            string str = value.ToString();
            if (float.TryParse(str, out float temp))
            {
                return temp;
            }
            else
            {
                return defaultValue;
            }
        }
        public static DateTime? ToDateTimeNullable(this object value)
        {
            string str = value.ToString();
            if (DateTime.TryParse(str, out DateTime temp))
            {
                return temp;
            }
            else
            {
                return null;
            }
        }
        public static int? ToInt32Nullable(this object value)
        {
            string str = value.ToString();
            if (int.TryParse(str, out int temp))
            {
                return temp;
            }
            else
            {
                return null;
            }
        }
        public static long? ToInt64Nullable(this object value)
        {
            string str = value.ToString();
            if (long.TryParse(str, out long temp))
            {
                return temp;
            }
            else
            {
                return null;
            }
        }
        public static decimal? ToDecimalNullable(this object value)
        {
            string str = value.ToString();
            if (decimal.TryParse(str, out decimal temp))
            {
                return temp;
            }
            else
            {
                return null;
            }
        }
        public static double? ToDoubleNullable(this object value)
        {
            string str = value.ToString();
            if (double.TryParse(str, out double temp))
            {
                return temp;
            }
            else
            {
                return null;
            }
        }
        public static float? ToFloatNullable(this object value)
        {
            string str = value.ToString();
            if (float.TryParse(str, out float temp))
            {
                return temp;
            }
            else
            {
                return null;
            }
        }
        public static T? Parse<T>(this string value, Func<string, T> parseFunc)
                    where T : struct
        {
            if (string.IsNullOrEmpty(value))
            {
                return null;
            }
            else
            {
                return parseFunc(value.Trim());
            }
        }
        /// <summary>
        /// 类型转换
        /// </summary>
        public static T Value<T>(this object value)
        {
            if (value == null)
            {
                return default(T);
            }
            if (value is T)
                return (T)value;
            else if (value == DBNull.Value)
            {
                if (typeof(T) == typeof(DateTime))
                {
                    object o = new DateTime(1900, 1, 1);
                    return (T)o;
                }
                else
                    return default(T);
            }
            else if (value.ToString().ToLower() == "null")
                return default(T);
            else
                return (T)Convert.ChangeType(value, typeof(T));
        }
        public static T Value<T>(this object value, Func<object, T> funcConvert)
        {
            if (value == null)
            {
                return default(T);
            }
            string s = value.ToString();
            if (string.IsNullOrEmpty(s) || s.ToLower() == "null")
            {
                return default(T);
            }
            return funcConvert(value);
        }
        public static object Value(this object value)
        {
            return Value<object>(value);
        }
        public static object IsNull(this object value, object replaceValue)
        {
            if (value == null)
            {
                return replaceValue;
            }
            else
            {
                return value;
            }
        }
        public static T IsNull<T>(this T value, T replaceValue)
        {
            if (value.Equals(default(T)))
            {
                return replaceValue;
            }
            else
            {
                return value;
            }
        }
        public static string IsNull(this string value, string replaceValue)
        {
            if (string.IsNullOrEmpty(value))
            {
                return replaceValue;
            }
            else
            {
                return value;
            }
        }
        ///// <summary>
        ///// 去除非法的文件字符
        ///// </summary>
        ///// <param name="input"></param>
        ///// <returns></returns>
        //public static string RemoveInvalidFileChars(this string input)
        //{
        //    char[] invalidChars = Path.GetInvalidFileNameChars();
        //    foreach (char c in invalidChars)
        //    {
        //        input = input.Replace(c.ToString(), "");
        //    }
        //    return input;
        //}
        public static DataTable ToDataTable(this DataSet ds)
        {
            try
            {
                if (ds == null)
                {
                    return null;
                }
                else
                {
                    return ds.Tables[0];
                }
            }
            catch (Exception)
            {
                return null;
            }
        }
        public static string ToMonth(this int month, bool isAddPrefix = true, string Suffix = "")
        {
            var str = string.Empty;
            if (isAddPrefix)
            {
                str += "F";
            }
            switch (month)
            {
                case 1:
                    str += "JANUARY";
                    break;
                case 2:
                    str += "FEBRUARY";
                    break;
                case 3:
                    str += "MARCH";
                    break;
                case 4:
                    str += "APRIL";
                    break;
                case 5:
                    str += "MAY";
                    break;
                case 6:
                    str += "JUNE";
                    break;
                case 7:
                    str += "JULY";
                    break;
                case 8:
                    str += "AUGUST";
                    break;
                case 9:
                    str += "SEPTEMBER";
                    break;
                case 10:
                    str += "OCTOBER";
                    break;
                case 11:
                    str += "NOVEMBER";
                    break;
                case 12:
                    str += "DECEMBER";
                    break;
            }
            if (!string.IsNullOrEmpty(Suffix)) str += Suffix;
            return str;
        }
        public static string ToMonthLower(this int month, bool isAddPrefix = true, string Suffix = "")
        {
            var str = string.Empty;
            if (isAddPrefix)
            {
                str += "F";
            }
            switch (month)
            {
                case 1:
                    str += "January";
                    break;
                case 2:
                    str += "February";
                    break;
                case 3:
                    str += "March";
                    break;
                case 4:
                    str += "April";
                    break;
                case 5:
                    str += "May";
                    break;
                case 6:
                    str += "June";
                    break;
                case 7:
                    str += "July";
                    break;
                case 8:
                    str += "August";
                    break;
                case 9:
                    str += "September";
                    break;
                case 10:
                    str += "October";
                    break;
                case 11:
                    str += "November";
                    break;
                case 12:
                    str += "December";
                    break;
            }
            if (!string.IsNullOrEmpty(Suffix)) str += Suffix;
            return str;
        }
        public static string ToStringExt(this object value)
        {
            return ValueToString(value, false);
        }
        public static string ValueToString(this object value, bool removeLines)
        {
            try
            {
                if (value == null)
                {
                    return string.Empty;
                }
                string s = value.ToString();
                if (string.IsNullOrEmpty(s) || s.ToLower() == "null")
                {
                    return string.Empty;
                }
                if (removeLines)
                {
                    s = s.Replace("\r", " ").Replace("\n", " ").Replace("<br />", " ").Replace("<br/>", " ").Replace("<br>", " ").Replace("\t", " ");
                }
                return s;
            }
            catch (Exception)
            {
                return string.Empty;
            }
        }
    }
}
src/BLL/ZD.Share/Common/DataHelper.cs
New file
@@ -0,0 +1,170 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ZD.Share.Common
{
    public static class DataHelper
    {
        public static List<T> ToModelList<T>(this DataSet ds) where T : new()
        {
            try
            {
                List<T> list = new List<T>();
                if (ds.Tables[0].Rows.Count > 0)
                {
                    foreach (DataRow row in ds.Tables[0].Rows)
                    {
                        list.Add(row.Put(new T()));
                    }
                }
                return list;
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        public static List<T> ToModelList<T>(this DataTable dt) where T : new()
        {
            try
            {
                List<T> list = new List<T>();
                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow row in dt.Rows)
                    {
                        list.Add(row.Put(new T()));
                    }
                }
                return list;
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        /// <summary>
        /// 返回一条数据的Model
        /// </summary>
        /// <typeparam name="T">Model类型</typeparam>
        /// <param name="entity">Model类型</param>
        /// <param name="ds"></param>
        /// <returns></returns>
        public static T ToModel<T>(DataSet ds) where T : new()
        {
            try
            {
                T m = new T();
                if (ds.Tables[0].Rows.Count > 0)
                {
                    m = ds.Tables[0].Rows[0].Put(new T());
                }
                return m;
            }
            catch (Exception)
            {
                return default(T);
                //throw;
            }
        }
        public static T Put<T>(this DataRow row, T entity) where T : new()
        {
            if (entity == null)
            {
                entity = new T();
            }
            Type type = typeof(T);
            PropertyInfo[] pi = type.GetProperties();
            foreach (PropertyInfo item in pi)
            {
                int index = row.Table.Columns.IndexOf(item.Name);
                if (index != -1)
                {
                    if (row[item.Name] != null && row[item.Name] != DBNull.Value)
                    {
                        if (item.PropertyType == typeof(DateTime))
                        {
                            //如果对日期格式有特殊要求 可以在这里转换
                            item.SetValue(entity, Convert.ToDateTime(row[item.Name].ToString()), null);
                        }
                        else
                        {
                            item.SetValue(entity, ChangeType(row[item.Name], item.PropertyType), null);
                        }
                    }
                }
            }
            return entity;
        }
        public static object ChangeType(object obj, Type conversionType)
        {
            return ChangeType(obj, conversionType, Thread.CurrentThread.CurrentCulture);
        }
        public static object ChangeType(object obj, Type conversionType, IFormatProvider provider)
        {
            #region Nullable
            Type nullableType = Nullable.GetUnderlyingType(conversionType);
            if (nullableType != null)
            {
                if (obj == null)
                {
                    return null;
                }
                return Convert.ChangeType(obj, nullableType, provider);
            }
            #endregion
            if (typeof(System.Enum).IsAssignableFrom(conversionType))
            {
                return Enum.Parse(conversionType, obj.ToString());
            }
            return Convert.ChangeType(obj, conversionType, provider);
        }
        public static string ToListParam<T>(this List<T> list)
        {
            string str = string.Empty;
            foreach (var item in list)
            {
                str += $"'{item}',";
            }
            str = str.TrimEnd(',');
            str = $"({str})";
            return str;
        }
        public static string GetUpdateStr(string table, Dictionary<string, object> dic, string condition)
        {
            var strSet = string.Empty;
            foreach (var item in dic)
            {
                var type = Util.GetObjectType(item.Value);
                switch (type)
                {
                    case "string":
                    case "date":
                        strSet += $" {item.Key}='{item.Value}' ";
                        break;
                    default:
                        strSet += $" {item.Key}={item.Value} ";
                        break;
                }
            }
            return $"update {table} set {strSet} where 1=1 {condition}";
        }
    }
}
src/BLL/ZD.Share/Common/HttpHelper.cs
New file
@@ -0,0 +1,145 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
namespace ZD.Share.Common
{
    public class HttpHelper
    {
        //public static string PostData(string url, string postData)
        //{
        //    ASCIIEncoding encoding = new ASCIIEncoding();
        //    byte[] data = Encoding.UTF8.GetBytes(postData);
        //    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
        //    myRequest.Method = "POST";
        //    myRequest.ContentType = "application/x-www-form-urlencoded";
        //    myRequest.ContentLength = data.Length;
        //    Stream newStream = myRequest.GetRequestStream();
        //    newStream.Write(data, 0, data.Length);
        //    newStream.Close();
        //    HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
        //    StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
        //    string content = reader.ReadToEnd();
        //    reader.Close();
        //    return content;
        //}
        //public static string GetData(string url)
        //{
        //    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
        //    myRequest.Method = "GET";
        //    HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
        //    StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
        //    string content = reader.ReadToEnd();
        //    reader.Close();
        //    return content;
        //}
        public static string HttpPostJson(string url, Dictionary<string, string> keyValues)
        {
            HttpClient httpClient = new HttpClient();
            httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
            var body = new FormUrlEncodedContent(keyValues);
            var response = httpClient.PostAsync(url, body).Result;
            var data = response.Content.ReadAsStringAsync().Result;
            return data;
        }
        public static string PostAsyncJson(string url, string json)
        {
            HttpClient client = new HttpClient();
            HttpContent content = new StringContent(json);
            content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
            HttpResponseMessage response = client.PostAsync(url, content).Result;
            string responseBody = response.Content.ReadAsStringAsync().Result;
            return responseBody;
        }
        ///// <summary>
        ///// FORM表单POST方式上传一个多媒体文件
        ///// </summary>
        ///// <param name="url">API URL</param>
        ///// <param name="typeName"></param>
        ///// <param name="fileName"></param>
        ///// <param name="fs"></param>
        ///// <param name="encoding"></param>
        ///// <returns></returns>
        //public static string HttpRequestPost(string url, string typeName, string fileName, Stream fs, string encoding = "UTF-8")
        //{
        //    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        //    request.Method = "POST";
        //    request.Timeout = 10000;
        //    var postStream = new MemoryStream();
        //    #region 处理Form表单文件上传
        //    //通过表单上传文件
        //    string boundary = "----" + DateTime.Now.Ticks.ToString("x");
        //    string formdataTemplate = "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: application/octet-stream\r\n\r\n";
        //    try
        //    {
        //        var formdata = string.Format(formdataTemplate, typeName, fileName);
        //        var formdataBytes = Encoding.ASCII.GetBytes(postStream.Length == 0 ? formdata.Substring(2, formdata.Length - 2) : formdata);//第一行不需要换行
        //        postStream.Write(formdataBytes, 0, formdataBytes.Length);
        //        //写入文件
        //        byte[] buffer = new byte[1024];
        //        int bytesRead = 0;
        //        while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) != 0)
        //        {
        //            postStream.Write(buffer, 0, bytesRead);
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //    //结尾
        //    var footer = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
        //    postStream.Write(footer, 0, footer.Length);
        //    request.ContentType = string.Format("multipart/form-data; boundary={0}", boundary);
        //    #endregion
        //    request.ContentLength = postStream.Length;
        //    request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
        //    request.KeepAlive = true;
        //    request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36";
        //    #region 输入二进制流
        //    if (postStream != null)
        //    {
        //        postStream.Position = 0;
        //        //直接写入流
        //        Stream requestStream = request.GetRequestStream();
        //        byte[] buffer = new byte[1024];
        //        int bytesRead = 0;
        //        while ((bytesRead = postStream.Read(buffer, 0, buffer.Length)) != 0)
        //        {
        //            requestStream.Write(buffer, 0, bytesRead);
        //        }
        //        postStream.Close();//关闭文件访问
        //    }
        //    #endregion
        //    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        //    using (Stream responseStream = response.GetResponseStream())
        //    {
        //        using (StreamReader myStreamReader = new StreamReader(responseStream, Encoding.GetEncoding(encoding)))
        //        {
        //            string retString = myStreamReader.ReadToEnd();
        //            return retString;
        //        }
        //    }
        //}
    }
}
src/BLL/ZD.Share/Common/OracleHelper.cs
New file
@@ -0,0 +1,54 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ZD.Share.Common
{
    public class OracleHelper
    {
        public static string GetOracleSQLIn(List<string> ids, string field)
        {
            if (!ids.Any())
            {
                return string.Empty;
            }
            int count = Math.Min(ids.Count, 1000);
            int len = ids.Count;
            int size = len % count;
            if (size == 0)
            {
                size = len / count;
            }
            else
            {
                size = (len / count) + 1;
            }
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < size; i++)
            {
                int index = i * count;
                int toIndex = Math.Min(index + count, len);
                string productId = string.Join("','", GetArrayValues(index, toIndex, ids).ToArray());
                if (i != 0)
                {
                    builder.Append(" or ");
                }
                builder.Append(field).Append(" in ('").Append(productId).Append("')");
            }
            return builder.ToString();
        }
        public static List<string> GetArrayValues(int index, int toindex, List<string> array)
        {
            List<string> listret = new List<string>();
            for (int i = index; i < toindex; i++)
            {
                listret.Add(array[i]);
            }
            return listret;
        }
    }
}
src/BLL/ZD.Share/Common/Util.cs
New file
@@ -0,0 +1,124 @@
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
namespace ZD.Share.Common
{
    public class Util
    {
        public static string GetObjectType(object obj)
        {
            var isType = false;
            isType = obj.GetType() == typeof(string);
            if (isType)
            {
                return "string";
            }
            isType = obj.GetType() == typeof(double);
            if (isType)
            {
                return "double";
            }
            isType = obj.GetType() == typeof(long);
            if (isType)
            {
                return "long";
            }
            isType = obj.GetType() == typeof(DateTime);
            if (isType)
            {
                return "date";
            }
            isType = obj.GetType() == typeof(int);
            if (isType)
            {
                return "int";
            }
            isType = obj.GetType() == typeof(decimal);
            if (isType)
            {
                return "decimal";
            }
            return "string";
        }
        public static JObject JsonVerify(string json)
        {
            if (string.IsNullOrEmpty(json))
            {
                throw new Exception("参数不能为空");
            }
            try
            {
                return JObject.Parse(json.ToString().Replace("\r", "").Replace("\n", "").Replace("\t", ""));
            }
            catch (Exception)
            {
                throw;
            }
        }
        //public static T DeepCopy<T>(T obj)
        //{
        //    object retval;
        //    using (MemoryStream ms = new MemoryStream())
        //    {
        //        XmlSerializer xml = new XmlSerializer(typeof(T));
        //        xml.Serialize(ms, obj);
        //        ms.Seek(0, SeekOrigin.Begin);
        //        retval = xml.Deserialize(ms);
        //        ms.Close();
        //    }
        //    return (T)retval;
        //}
        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;
        }
        public static bool SetConfigKey(String configPath, String key, String vls)
        {
            try
            {
                Configuration ConfigurationInstance = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap()
                {
                    ExeConfigFilename = configPath
                }, ConfigurationUserLevel.None);
                if (ConfigurationInstance.AppSettings.Settings[key] != null)
                    ConfigurationInstance.AppSettings.Settings[key].Value = vls;
                else
                    ConfigurationInstance.AppSettings.Settings.Add(key, vls);
                ConfigurationInstance.Save(ConfigurationSaveMode.Modified);
                ConfigurationManager.RefreshSection("appSettings");
                return true;
            }
            catch
            {
                return false;
            }
        }
    }
}
src/BLL/ZD.Share/Enums/Enum.DateEnum.cs
New file
@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ZD.Share.Enums
{
    public enum DateEnum
    {
        /// <summary>
        /// 1星期7天
        /// </summary>
        Week = 7,
        /// <summary>
        /// 一年12个月
        /// </summary>
        Month = 12
    }
}
src/BLL/ZD.Share/Enums/Enum.DocumentStatus.cs
New file
@@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ZD.Share.Enums
{
    /// <summary>
    /// 数据状态
    /// </summary>
    public enum DocumentStatus
    {
        /// <summary>
        /// 暂存
        /// </summary>
        Z,
        /// <summary>
        /// 创建
        /// </summary>
        A,
        /// <summary>
        /// 审核中
        /// </summary>
        B,
        /// <summary>
        /// 已审核
        /// </summary>
        C,
        /// <summary>
        /// 重新审核
        /// </summary>
        D
    }
}
src/BLL/ZD.Share/Enums/Enum.ForbidStatus.cs
New file
@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ZD.Share.Enums
{
    /// <summary>
    /// 禁用状态
    /// </summary>
    public enum ForbidStatus
    {
        /// <summary>
        /// 否
        /// </summary>
        A,
        /// <summary>
        /// 是
        /// </summary>
        B
    }
}
src/BLL/ZD.Share/Properties/AssemblyInfo.cs
New file
@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("ZD.Share")]
[assembly: AssemblyDescription("ZD.Share dll")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("ZD")]
[assembly: AssemblyProduct("ZD.Share")]
[assembly: AssemblyCopyright("Copyright ©  2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("54f8364f-3c79-43e7-9f14-de0bc63555d6")]
// 程序集的版本信息由下列四个值组成:
//
//      主版本
//      次版本
//      生成号
//      修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
src/BLL/ZD.Share/ZD.Share.csproj
New file
@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{54F8364F-3C79-43E7-9F14-DE0BC63555D6}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>ZD.Share</RootNamespace>
    <AssemblyName>ZD.Share</AssemblyName>
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
    <RestorePackages>true</RestorePackages>
    <BuildPackage>true</BuildPackage>
    <Deterministic>true</Deterministic>
    <TargetFrameworkProfile />
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\..\..\办公\K3Cloud\WebSite\bin\Newtonsoft.Json.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Configuration" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Common\ConvertHelper.cs" />
    <Compile Include="Common\DataHelper.cs" />
    <Compile Include="Common\HttpHelper.cs" />
    <Compile Include="Common\OracleHelper.cs" />
    <Compile Include="Common\Util.cs" />
    <Compile Include="Enums\Enum.DateEnum.cs" />
    <Compile Include="Enums\Enum.DocumentStatus.cs" />
    <Compile Include="Enums\Enum.ForbidStatus.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <None Include="ZD.Share.nuspec">
      <SubType>Designer</SubType>
    </None>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
</Project>
src/BLL/ZD.Share/ZD.Share.nuspec
New file
@@ -0,0 +1,14 @@
<?xml version="1.0"?>
<package>
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>$author$</authors>
    <owners>$author$</owners>
    <description>$description$</description>
    <copyright>Copyright © ZD 2020</copyright>
  </metadata>
  <files>
  </files>
</package>
src/Model/Demo.Model/Model/PODemandPlan/DayPlanPpbom.cs
@@ -70,7 +70,7 @@
        /// <summary>
        /// 库存组织
        /// </summary>
        public double FStockOrgId { get; set; }
        public long FStockOrgId { get; set; }
        /// <summary>
        /// jit物料分类
        /// </summary>
src/Model/Demo.Model/Model/PODemandPlan/PODemandPlanTemp.cs
@@ -87,7 +87,7 @@
        /// <summary>
        /// 库存组织
        /// </summary>
        public double FStockOrgId { get; set; }
        public long FStockOrgId { get; set; }
        /// <summary>
        /// 组织编码
        /// </summary>
src/Model/Demo.Model/Model/PODemandPlan/PurchaseInventory.cs
@@ -41,7 +41,7 @@
        /// <summary>
        /// 库存组织
        /// </summary>
        public double FStockOrgId { get; set; }
        public long FStockOrgId { get; set; }
        /// <summary>
        /// 组织编码
        /// </summary>
src/ProductizationTemplate/DBService/BigTicketProjectService.cs
@@ -8,7 +8,7 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ZD.Cloud.Logger;
namespace XhOA.DBService
{
@@ -18,7 +18,7 @@
        public decimal GetReceiveBillRate(Context ctx, long proId)
        {
            string sql = $"select t2.F_PXDF_Decimal from  t_AR_receivable t1 left join t_AR_receivableEntry t2 on t1.fid=t2.fid where t1.fdocumentstatus='C' and t2.FProjectNo='{proId}' ";
            LogHelper.Info("GetReceiveBillRate:" + sql);
            //LogHelper.Info("GetReceiveBillRate:" + sql);
            return DBServiceHelper.ExecuteScalar(ctx, sql, 0);
        }
    }